fixes
This commit is contained in:
parent
ca1a802b5b
commit
2d075626f1
@ -113,21 +113,21 @@ where
|
||||
});
|
||||
}
|
||||
|
||||
async fn fanout_processor(self: Arc<Self>) {
|
||||
async fn fanout_processor(self: Arc<Self>) -> bool {
|
||||
// Loop until we have a result or are done
|
||||
loop {
|
||||
// Get the closest node we haven't processed yet if we're not done yet
|
||||
let next_node = {
|
||||
let mut ctx = self.context.lock();
|
||||
if self.clone().evaluate_done(&mut ctx) {
|
||||
break;
|
||||
break true;
|
||||
}
|
||||
ctx.fanout_queue.next()
|
||||
};
|
||||
|
||||
// If we don't have a node to process, stop fanning out
|
||||
let Some(next_node) = next_node else {
|
||||
break;
|
||||
break false;
|
||||
};
|
||||
|
||||
// Do the call for this node
|
||||
@ -161,7 +161,7 @@ where
|
||||
Err(e) => {
|
||||
// Error happened, abort everything and return the error
|
||||
self.context.lock().result = Some(Err(e));
|
||||
return;
|
||||
break true;
|
||||
}
|
||||
};
|
||||
}
|
||||
@ -248,12 +248,18 @@ where
|
||||
}
|
||||
}
|
||||
// Wait for them to complete
|
||||
timeout(timeout_ms, async { while unord.next().await.is_some() {} })
|
||||
.await
|
||||
.into_timeout_or()
|
||||
.map(|_| {
|
||||
// Finished, return whatever value we came up with
|
||||
self.context.lock().result.take().transpose()
|
||||
})
|
||||
timeout(timeout_ms, async {
|
||||
while let Some(is_done) = unord.next().await {
|
||||
if is_done {
|
||||
break;
|
||||
}
|
||||
}
|
||||
})
|
||||
.await
|
||||
.into_timeout_or()
|
||||
.map(|_| {
|
||||
// Finished, return whatever value we came up with
|
||||
self.context.lock().result.take().transpose()
|
||||
})
|
||||
}
|
||||
}
|
||||
|
@ -166,9 +166,13 @@ impl StorageManager {
|
||||
match fanout_call.run().await {
|
||||
// If we don't finish in the timeout (too much time passed checking for consensus)
|
||||
TimeoutOr::Timeout => {
|
||||
log_stor!(debug "GetValue Fanout Timeout");
|
||||
// Return the best answer we've got
|
||||
let ctx = context.lock();
|
||||
if ctx.value_count >= consensus_count {
|
||||
log_stor!(debug "GetValue Fanout Timeout Consensus");
|
||||
} else {
|
||||
log_stor!(debug "GetValue Fanout Timeout Non-Consensus: {}", ctx.value_count);
|
||||
}
|
||||
Ok(SubkeyResult {
|
||||
value: ctx.value.clone(),
|
||||
descriptor: ctx.descriptor.clone(),
|
||||
|
@ -162,9 +162,14 @@ impl StorageManager {
|
||||
match fanout_call.run().await {
|
||||
// If we don't finish in the timeout (too much time passed checking for consensus)
|
||||
TimeoutOr::Timeout => {
|
||||
log_stor!(debug "SetValue Fanout Timeout");
|
||||
// Return the best answer we've got
|
||||
let ctx = context.lock();
|
||||
if ctx.set_count >= consensus_count {
|
||||
log_stor!(debug "SetValue Fanout Timeout Consensus");
|
||||
} else {
|
||||
log_stor!(debug "SetValue Fanout Timeout Non-Consensus: {}", ctx.set_count);
|
||||
}
|
||||
|
||||
Ok(ctx.value.clone())
|
||||
}
|
||||
// If we finished with or without consensus (enough nodes returning the same value)
|
||||
|
Loading…
Reference in New Issue
Block a user