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

Method splice

ZezeJava/ZezeJava/src/main/java/Zeze/Collections/CsQueue.java:59–95  ·  view source on GitHub ↗

为了测试了公开的,调用也是可以的,但要小心。 @param serverId serverId @param loadSerialNo loadSerialNo

(int serverId, long loadSerialNo)

Source from the content-addressed store, hash-verified

57 * @param loadSerialNo loadSerialNo
58 */
59 public void splice(int serverId, long loadSerialNo) {
60 if (serverId == module.zeze.getConfig().getServerId())
61 return; // skip self
62
63 Task.call(module.zeze.newProcedure(() -> {
64 // 接管别的服务器的队列时。
65 var srcName = name + "@" + serverId;
66 var src = Queue.compatible(module._tQueues.get(srcName), srcName);
67 if (null == src || src.getHeadNodeKey().getNodeId() == 0 || src.getTailNodeKey().getNodeId() == 0)
68 return 0L; // nothing need to do.
69
70 if (src.getLoadSerialNo() != loadSerialNo)
71 return 0L; // 需要接管的机器已经活过来了。
72
73 // prepare splice
74 var dstName = name + "@" + module.zeze.getConfig().getServerId();
75 var dstRoot = Queue.compatible(module._tQueues.getOrAdd(dstName), dstName);
76 var srcTailNodeKey = src.getTailNodeKey();
77 var srcTail = Queue.compatible(srcTailNodeKey, module._tQueueNodes.get(srcTailNodeKey));
78
79 if (null == srcTail)
80 throw new IllegalStateException("maybe operate before entry created.");
81
82 // 这是新接管过来的nodeKey范围,如果需要对新接管数据进一步事务外处理,使用out送出事务外。
83 //first.value = new BQueueNodeKey(srcName, src.getHeadNodeId());
84 //last.value = new BQueueNodeKey(dstName, dstRoot.getHeadNodeId());
85
86 // splice 单向链表,新接管的数据拼到开头。
87 srcTail.setNextNodeKey(dstRoot.getHeadNodeKey());
88 dstRoot.setHeadNodeKey(src.getHeadNodeKey());
89 // clear src
90 var nullKey = new BQueueNodeKey();
91 src.setHeadNodeKey(nullKey);
92 src.setTailNodeKey(nullKey);
93 return 0L;
94 }, "CsQueue.splice"));
95 }
96
97 public String getName() {
98 return name;

Callers 4

testCsQueueMethod · 0.95
CsQueueMethod · 0.95
aFunction · 0.80
nFunction · 0.80

Calls 14

callMethod · 0.95
compatibleMethod · 0.95
setNextNodeKeyMethod · 0.80
setHeadNodeKeyMethod · 0.80
setTailNodeKeyMethod · 0.80
getServerIdMethod · 0.65
getMethod · 0.65
getNodeIdMethod · 0.65
getHeadNodeKeyMethod · 0.65
getTailNodeKeyMethod · 0.65
getLoadSerialNoMethod · 0.65
getConfigMethod · 0.45

Tested by 1

testCsQueueMethod · 0.76