From 4452ee0f3d6dcebda13584284695e228fc2b9264 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=83=A1=E5=9B=BD=E6=89=8D?= Date: Fri, 11 Aug 2023 15:01:46 +0800 Subject: [PATCH 1/3] =?UTF-8?q?client=E7=AB=AFwatch=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E4=B8=8Eserver=E7=AB=AF=E7=89=88=E6=9C=AC=E4=B8=8D=E4=B8=80?= =?UTF-8?q?=E8=87=B4=E6=97=B6=E4=B8=8D=E9=80=9A=E7=9F=A5client=E7=AB=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wuba/wlock/server/service/impl/ReentrantLockService.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/server/src/main/java/com/wuba/wlock/server/service/impl/ReentrantLockService.java b/server/src/main/java/com/wuba/wlock/server/service/impl/ReentrantLockService.java index d481be7..68b0371 100644 --- a/server/src/main/java/com/wuba/wlock/server/service/impl/ReentrantLockService.java +++ b/server/src/main/java/com/wuba/wlock/server/service/impl/ReentrantLockService.java @@ -601,8 +601,6 @@ public boolean watchLock(LockContext lockContext, int groupId) { proposeDeleteKey(watchLockReq, groupId, lockOwnerInfo); trySnatchLock(key, groupId, version, watchLockReq.getRegistryKey()); return true; - } else if (version > watchLockReq.getFencingToken()) { - lockNotify.lockNotifyUpdate2(key, new LockOwner(lockOwnerInfo.getIp(), lockOwnerInfo.getThreadId(), lockOwnerInfo.getPid(), version), groupId); } } catch (LockException e) { LOGGER.error("{} watch lock key : {} error.", watchLockReq.getHost(), key, e); From 318026a70d787768e0bf0c89cb8d1b12415761f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=83=A1=E5=9B=BD=E6=89=8D?= Date: Fri, 11 Aug 2023 15:18:15 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E7=A9=BA=E7=8A=B6?= =?UTF-8?q?=E6=80=81=E6=9C=BA=E7=94=A8=E4=BA=8E=E5=88=9D=E5=A7=8B=E5=8C=96?= =?UTF-8?q?=E6=93=8D=E4=BD=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/wuba/wlock/server/wpaxos/SMID.java | 3 +- .../wlock/server/wpaxos/WpaxosService.java | 1 + .../wpaxos/statemachine/NullStateMachine.java | 34 +++++++++++++++++++ 3 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 server/src/main/java/com/wuba/wlock/server/wpaxos/statemachine/NullStateMachine.java diff --git a/server/src/main/java/com/wuba/wlock/server/wpaxos/SMID.java b/server/src/main/java/com/wuba/wlock/server/wpaxos/SMID.java index 5cf9f91..496c383 100644 --- a/server/src/main/java/com/wuba/wlock/server/wpaxos/SMID.java +++ b/server/src/main/java/com/wuba/wlock/server/wpaxos/SMID.java @@ -24,7 +24,8 @@ public enum SMID { WHEEL_TICK(3), MIGRATE_COMMAND(4), MIGRATE_POINT(5), - GROUP_META(6) + GROUP_META(6), + NULL(7); ; private int value; diff --git a/server/src/main/java/com/wuba/wlock/server/wpaxos/WpaxosService.java b/server/src/main/java/com/wuba/wlock/server/wpaxos/WpaxosService.java index b80e5d8..a22d9a8 100644 --- a/server/src/main/java/com/wuba/wlock/server/wpaxos/WpaxosService.java +++ b/server/src/main/java/com/wuba/wlock/server/wpaxos/WpaxosService.java @@ -102,6 +102,7 @@ public void runPaxos() throws Exception { smInfo.getSmList().add(new MigrateCommandSM(i, SMID.MIGRATE_COMMAND.getValue(), false)); smInfo.getSmList().add(new MigrateChangePointSM(i, SMID.MIGRATE_POINT.getValue(), true)); smInfo.getSmList().add(new GroupMetaSM(i, SMID.GROUP_META.getValue(), false)); + smInfo.getSmList().add(new NullStateMachine(i, SMID.NULL.getValue(), false)); options.getGroupSMInfoList().add(smInfo); } diff --git a/server/src/main/java/com/wuba/wlock/server/wpaxos/statemachine/NullStateMachine.java b/server/src/main/java/com/wuba/wlock/server/wpaxos/statemachine/NullStateMachine.java new file mode 100644 index 0000000..f8548db --- /dev/null +++ b/server/src/main/java/com/wuba/wlock/server/wpaxos/statemachine/NullStateMachine.java @@ -0,0 +1,34 @@ +package com.wuba.wlock.server.wpaxos.statemachine; + +import com.wuba.wpaxos.storemachine.SMCtx; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + + +/** + * 用于做一些初始化操作,比如 生成 gid + * @author huguocai + */ +public class NullStateMachine extends AbstractStateMachine { + private static final Logger log = LoggerFactory.getLogger(NullStateMachine.class); + + public NullStateMachine(int groupIdx, int smID, boolean needCheckpoint) { + super(groupIdx, smID, needCheckpoint); + } + + @Override + public boolean execute(int groupIdx, long instanceID, byte[] paxosValue, SMCtx smCtx) { + log.info("execute NullStateMachine groupId: {}, instanceID: {}", groupIdx, instanceID); + return true; + } + + @Override + public byte[] beforePropose(int groupIdx, byte[] sValue) { + return new byte[0]; + } + + @Override + public boolean needCallBeforePropose() { + return false; + } +} From ad3c3dabab549b840b82a5cc4dd1e3a0e5e2153c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=83=A1=E5=9B=BD=E6=89=8D?= Date: Fri, 11 Aug 2023 16:28:31 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E6=88=90=E5=91=98=E5=8F=98=E6=9B=B4gid?= =?UTF-8?q?=E6=9C=AA=E5=88=9D=E5=A7=8B=E5=8C=96=E6=97=B6=EF=BC=8C=E8=BF=9B?= =?UTF-8?q?=E8=A1=8C=E5=88=9D=E5=A7=8B=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../handler/GetPaxosConfigHandler.java | 23 ++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/server/src/main/java/com/wuba/wlock/server/communicate/registry/handler/GetPaxosConfigHandler.java b/server/src/main/java/com/wuba/wlock/server/communicate/registry/handler/GetPaxosConfigHandler.java index 0f061a9..f704205 100644 --- a/server/src/main/java/com/wuba/wlock/server/communicate/registry/handler/GetPaxosConfigHandler.java +++ b/server/src/main/java/com/wuba/wlock/server/communicate/registry/handler/GetPaxosConfigHandler.java @@ -25,12 +25,15 @@ import com.wuba.wlock.server.communicate.retrans.RetransServerManager; import com.wuba.wlock.server.config.PaxosConfig; import com.wuba.wlock.server.config.ServerConfig; +import com.wuba.wlock.server.wpaxos.SMID; import com.wuba.wlock.server.wpaxos.WpaxosService; +import com.wuba.wpaxos.ProposeResult; import com.wuba.wpaxos.comm.NodeInfo; import com.wuba.wpaxos.comm.Options; import com.wuba.wpaxos.config.PaxosNodeFunctionRet; import com.wuba.wpaxos.config.PaxosTryCommitRet; import com.wuba.wlock.server.exception.ConfigException; +import com.wuba.wpaxos.storemachine.SMCtx; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -213,6 +216,10 @@ private boolean addMember(int groupIdx, final Set addNodes) { Thread.sleep(RETRY_DELAY[Math.min(i, RETRY_TIMES)]); } catch (InterruptedException e) { } + + if (addMember == PaxosNodeFunctionRet.Paxos_MembershipOp_NoGid.getRet()) { + noGidInit(groupIdx); + } } else { break; } @@ -221,14 +228,23 @@ private boolean addMember(int groupIdx, final Set addNodes) { logger.error("add member error", e); } if (addMember != PaxosTryCommitRet.PaxosTryCommitRet_OK.getRet() && addMember != PaxosNodeFunctionRet.Paxos_MembershipOp_Add_NodeExist.getRet()) { - logger.debug("TEST => add member false : result is " + addMember); + logger.error("add member false : result is " + addMember); result = false; } } } + return result; } + private void noGidInit(int groupIdx) { + logger.info("no gid init propose. groupId: {}", groupIdx); + ProposeResult propose = WpaxosService.getInstance().propose(new byte[]{}, groupIdx, new SMCtx(SMID.NULL.getValue(), null)); + if (propose.getResult() != PaxosTryCommitRet.PaxosTryCommitRet_OK.getRet()) { + logger.info("no gid init propose fail. groupId: {} result: {}", groupIdx, propose.getResult()); + } + } + private boolean deleteMember(int groupIdx, final Set deleteNodes) { if (!WpaxosService.getInstance().isIMMaster(groupIdx) && !WpaxosService.getInstance().isNoMaster(groupIdx)) { return true; @@ -246,6 +262,10 @@ private boolean deleteMember(int groupIdx, final Set deleteNodes) { Thread.sleep(RETRY_DELAY[Math.min(i, RETRY_TIMES)]); } catch (InterruptedException e) { } + + if (deleteMember == PaxosNodeFunctionRet.Paxos_MembershipOp_NoGid.getRet()) { + noGidInit(groupIdx); + } } else { break; } @@ -254,6 +274,7 @@ private boolean deleteMember(int groupIdx, final Set deleteNodes) { logger.error("delete member error", e); } if (deleteMember != PaxosTryCommitRet.PaxosTryCommitRet_OK.getRet() && deleteMember != PaxosNodeFunctionRet.Paxos_MembershipOp_Remove_NodeNotExist.getRet()) { + logger.error("delete member false : result is " + deleteMember); result = false; } }