MCPcopy Create free account
hub / github.com/e2wugui/zeze / loadTimer

Method loadTimer

ZezeJava/ZezeJava/src/main/java/Zeze/Component/Timer.java:1168–1206  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

1166 }
1167
1168 private void loadTimer() throws Exception {
1169 var serverId = zeze.getConfig().getServerId();
1170 var outRoot = new BNodeRoot();
1171 var r = Task.call(zeze.newProcedure(() -> {
1172 var root = _tNodeRoot.getOrAdd(serverId);
1173 // 本地每次load都递增。用来处理和接管的并发。
1174 root.setLoadSerialNo(root.getLoadSerialNo() + 1);
1175 outRoot.assign(root);
1176 return 0;
1177 }, "Timer.loadTimerLocal"));
1178 if (r == Procedure.Success) {
1179 var offlineNotify = new BOfflineNotify();
1180 offlineNotify.serverId = serverId;
1181 offlineNotify.notifyId = "Zeze.Component.Timer.OfflineNotify";
1182 offlineNotify.notifySerialId = outRoot.getLoadSerialNo();
1183 zeze.getServiceManager().offlineRegister(offlineNotify,
1184 notify -> spliceLoadTimer(notify.serverId, notify.notifySerialId));
1185 loadTimer(outRoot.getHeadNodeId(), outRoot.getHeadNodeId(), serverId); // last也填头节点是因为链表是循环的
1186 } else
1187 logger.error("loadTimer failed: r={}", r);
1188
1189 var agent = zeze.getServiceManager();
1190 if (agent instanceof Agent) { // 暂时只支持非Raft的ServiceManager
1191 var p = new AnnounceServers();
1192 p.Argument.notifyId = "Zeze.Component.Timer.NotifyOffline";
1193 p.Argument.serverId = serverId;
1194 _tNodeRoot.walk((k, v) -> {
1195 if (v.getHeadNodeId() != 0) {
1196 p.Argument.watchServerIds.add(k);
1197 p.Argument.watchSerialIds.add(v.getLoadSerialNo());
1198 }
1199 return true;
1200 });
1201 ((Agent)agent).offlineRegister(p.Argument.notifyId,
1202 notify -> spliceLoadTimer(notify.serverId, notify.notifySerialId));
1203 agent.waitReady();
1204 p.SendAndWaitCheckResultCode(((Agent)agent).getClient().getSocket());
1205 }
1206 }
1207
1208 /**
1209 * 收到接管通知的服务器调用这个函数进行接管处理。

Callers 2

startMethod · 0.95
spliceLoadTimerMethod · 0.95

Calls 15

callMethod · 0.95
assignMethod · 0.95
getLoadSerialNoMethod · 0.95
spliceLoadTimerMethod · 0.95
getHeadNodeIdMethod · 0.95
addMethod · 0.95
whileCommitMethod · 0.95
whileRollbackMethod · 0.95
runMethod · 0.95
fireSimpleMethod · 0.95
scheduleSimpleMethod · 0.95
fireCronMethod · 0.95

Tested by

no test coverage detected