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

Method processLeaderIs

ZezeJava/ZezeJava/src/main/java/Zeze/Raft/Agent.java:392–438  ·  view source on GitHub ↗
(LeaderIs r)

Source from the content-addressed store, hash-verified

390 }
391
392 private long processLeaderIs(LeaderIs r) throws Exception {
393 ConnectorProxy leader = this.leader;
394 logger.info("=============== LEADERIS Old={} New={} From={}",
395 leader != null ? leader.getName() : null, r.Argument.getLeaderId(), r.getSender());
396
397 // 启用代理(多个raft共享连接)。
398 if (null != proxyAgent) {
399 var newLeader = proxyAgent.getLeader(raftConfig.getNodes().get(r.Argument.getLeaderId()));
400 if (null != newLeader) {
401 if (setLeader(r, newLeader))
402 resend(true);
403
404 r.SendResultCode(0);
405 return Procedure.Success;
406 }
407 // else continue old process;
408 }
409 // else continue old process
410
411 var node = client.getConfig().findConnector(r.Argument.getLeaderId());
412 if (node == null) {
413 // 当前 Agent 没有 Leader 的配置,创建一个。
414 // 由于 Agent 在新增 node 时也会得到新配置广播,
415 // 一般不会发生这种情况。
416 var address = r.Argument.getLeaderId().split("_");
417 if (address.length != 2)
418 return 0;
419
420 OutObject<Connector> outNode = new OutObject<>();
421 if (client.getConfig().tryGetOrAddConnector(address[0], Integer.parseInt(address[1]), true, outNode))
422 outNode.value.start();
423 } else {
424 //noinspection DataFlowIssue
425 if (!r.Argument.isLeader() && r.Argument.getLeaderId().equals(r.getSender().getConnector().getName())) {
426 // 【错误处理】用来观察。
427 logger.warn("New Leader Is Not A Leader.");
428 // 发送者不是Leader,但它的发送的LeaderId又是自己,【尝试选择另外一个Node】。
429 node = getRandomConnector(node);
430 }
431 }
432
433 if (setLeader(r, new ConnectorProxy(node)))
434 resend(true);
435
436 r.SendResultCode(0);
437 return Procedure.Success;
438 }
439
440 private void resend() {
441 resend(false);

Callers

nothing calls this directly

Calls 15

getNameMethod · 0.95
setLeaderMethod · 0.95
resendMethod · 0.95
getRandomConnectorMethod · 0.95
findConnectorMethod · 0.80
tryGetOrAddConnectorMethod · 0.80
parseIntMethod · 0.80
getSenderMethod · 0.65
getMethod · 0.65
startMethod · 0.65
equalsMethod · 0.65
getNameMethod · 0.65

Tested by

no test coverage detected