@@ -1139,6 +1139,7 @@ bool DDLWorker::initializeMainThread()
11391139 auto zookeeper = getAndSetZooKeeper ();
11401140 zookeeper->createAncestors (fs::path (queue_dir) / " " );
11411141 initializeReplication ();
1142+ markReplicasActive (true );
11421143 initialized = true ;
11431144 return true ;
11441145 }
@@ -1211,14 +1212,6 @@ void DDLWorker::runMainThread()
12111212 }
12121213
12131214 cleanup_event->set ();
1214- try
1215- {
1216- markReplicasActive (reinitialized);
1217- }
1218- catch (...)
1219- {
1220- tryLogCurrentException (log, " An error occurred when markReplicasActive: " );
1221- }
12221215 scheduleTasks (reinitialized);
12231216 subsequent_errors_count = 0 ;
12241217
@@ -1297,24 +1290,21 @@ void DDLWorker::createReplicaDirs(const ZooKeeperPtr & zookeeper, const NameSet
12971290 zookeeper->createAncestors (fs::path (replicas_dir) / host_id / " " );
12981291}
12991292
1300- void DDLWorker::markReplicasActive (bool reinitialized)
1293+ void DDLWorker::markReplicasActive (bool /* reinitialized*/ )
13011294{
13021295 auto zookeeper = getZooKeeper ();
13031296
1304- if (reinitialized)
1297+ // Reset all active_node_holders
1298+ for (auto & it : active_node_holders)
13051299 {
1306- // Reset all active_node_holders
1307- for (auto & it : active_node_holders)
1308- {
1309- auto & active_node_holder = it.second .second ;
1310- if (active_node_holder)
1311- active_node_holder->setAlreadyRemoved ();
1312- active_node_holder.reset ();
1313- }
1314-
1315- active_node_holders.clear ();
1300+ auto & active_node_holder = it.second .second ;
1301+ if (active_node_holder)
1302+ active_node_holder->setAlreadyRemoved ();
1303+ active_node_holder.reset ();
13161304 }
13171305
1306+ active_node_holders.clear ();
1307+
13181308 for (auto it = active_node_holders.begin (); it != active_node_holders.end ();)
13191309 {
13201310 auto & zk = it->second .first ;
@@ -1394,7 +1384,12 @@ void DDLWorker::markReplicasActive(bool reinitialized)
13941384 {
13951385 zookeeper->deleteEphemeralNodeIfContentMatches (active_path, active_id);
13961386 }
1397- zookeeper->create (active_path, active_id, zkutil::CreateMode::Ephemeral);
1387+ Coordination::Requests ops;
1388+ ops.emplace_back (zkutil::makeCreateRequest (active_path, active_id, zkutil::CreateMode::Ephemeral));
1389+ // / To bump node mtime
1390+ ops.emplace_back (zkutil::makeSetRequest (fs::path (replicas_dir) / host_id, " " , -1 ));
1391+ zookeeper->multi (ops);
1392+
13981393 auto active_node_holder_zookeeper = zookeeper;
13991394 auto active_node_holder = zkutil::EphemeralNodeHolder::existing (active_path, *active_node_holder_zookeeper);
14001395 active_node_holders[host_id] = {active_node_holder_zookeeper, active_node_holder};
0 commit comments