weizuo93 commented on code in PR #10298:
URL: https://github.com/apache/doris/pull/10298#discussion_r923426238
##########
be/src/runtime/tablets_channel.cpp:
##########
@@ -124,20 +133,46 @@ Status TabletsChannel::close(int sender_id, int64_t
backend_id, bool* finished,
}
}
+ _write_single_replica = write_single_replica;
+
// 2. wait delta writers and build the tablet vector
for (auto writer : need_wait_writers) {
+ PSlaveTabletNodes slave_nodes;
+ if (write_single_replica) {
+ slave_nodes = slave_tablet_nodes.at(writer->tablet_id());
+ }
// close may return failed, but no need to handle it here.
// tablet_vec will only contains success tablet, and then let FE
judge it.
- _close_wait(writer, tablet_vec, tablet_errors);
+ _close_wait(writer, tablet_vec, tablet_errors, slave_nodes,
write_single_replica);
+ }
+
+ if (write_single_replica) {
+ CountDownLatch latch(1);
+ while (need_wait_writers.size() > 0 &&
+ (time(nullptr) - parent->last_updated_time()) <
(parent->timeout() * 0.9)) {
Review Comment:
> Add comment to explain why it multiply 0.9.
done
##########
be/src/runtime/tablets_channel.cpp:
##########
@@ -124,20 +133,46 @@ Status TabletsChannel::close(int sender_id, int64_t
backend_id, bool* finished,
}
}
+ _write_single_replica = write_single_replica;
+
// 2. wait delta writers and build the tablet vector
for (auto writer : need_wait_writers) {
+ PSlaveTabletNodes slave_nodes;
+ if (write_single_replica) {
+ slave_nodes = slave_tablet_nodes.at(writer->tablet_id());
+ }
// close may return failed, but no need to handle it here.
// tablet_vec will only contains success tablet, and then let FE
judge it.
- _close_wait(writer, tablet_vec, tablet_errors);
+ _close_wait(writer, tablet_vec, tablet_errors, slave_nodes,
write_single_replica);
+ }
+
+ if (write_single_replica) {
+ CountDownLatch latch(1);
+ while (need_wait_writers.size() > 0 &&
+ (time(nullptr) - parent->last_updated_time()) <
(parent->timeout() * 0.9)) {
+ for (auto writer : need_wait_writers) {
+ bool is_done =
writer->check_slave_replicas_done(success_slave_tablet_node_ids);
+ if (is_done) {
+ need_wait_writers.erase(writer);
+ }
+ }
+ latch.wait_for(std::chrono::milliseconds(100));
Review Comment:
> Why using a CountDownLatch here? I think we can just call `sleep()`?
done
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]