Package me.ahoo.cosid.machine
Class AbstractMachineIdDistributor
java.lang.Object
me.ahoo.cosid.machine.AbstractMachineIdDistributor
- All Implemented Interfaces:
MachineIdDistributor
- Direct Known Subclasses:
JdbcMachineIdDistributor,ManualMachineIdDistributor,MongoMachineIdDistributor,ProxyMachineIdDistributor,SpringRedisMachineIdDistributor,StatefulSetMachineIdDistributor,ZookeeperMachineIdDistributor
Abstract MachineIdDistributor.
-
Field Summary
FieldsFields inherited from interface me.ahoo.cosid.machine.MachineIdDistributor
FOREVER_SAFE_GUARD_DURATION -
Constructor Summary
ConstructorsConstructorDescriptionAbstractMachineIdDistributor(MachineStateStorage machineStateStorage, ClockBackwardsSynchronizer clockBackwardsSynchronizer) -
Method Summary
Modifier and TypeMethodDescriptiondistribute(String namespace, int machineBit, InstanceId instanceId, Duration safeGuardDuration) 1.protected abstract MachineStatedistributeRemote(String namespace, int machineBit, InstanceId instanceId, Duration safeGuardDuration) voidguard(String namespace, InstanceId instanceId, Duration safeGuardDuration) Guard a machine ID with a heartbeat mechanism.protected abstract voidguardRemote(String namespace, InstanceId instanceId, MachineState machineState, Duration safeGuardDuration) voidrevert(String namespace, InstanceId instanceId) 1.protected abstract voidrevertRemote(String namespace, InstanceId instanceId, MachineState machineState)
-
Field Details
-
NOT_FOUND_LAST_STAMP
public static final int NOT_FOUND_LAST_STAMP- See Also:
-
-
Constructor Details
-
AbstractMachineIdDistributor
public AbstractMachineIdDistributor(MachineStateStorage machineStateStorage, ClockBackwardsSynchronizer clockBackwardsSynchronizer)
-
-
Method Details
-
distribute
@Nonnull public MachineState distribute(String namespace, int machineBit, InstanceId instanceId, Duration safeGuardDuration) throws MachineIdOverflowException 1. get fromMachineStateStorage2. when not found:distributeRemote(java.lang.String, int, me.ahoo.cosid.machine.InstanceId, java.time.Duration)3. setMachineStatetoMachineStateStorage- Specified by:
distributein interfaceMachineIdDistributor- Parameters:
namespace- The namespace for machine ID allocationmachineBit- The number of bits to use for machine IDsinstanceId- The instance identifier requesting the machine IDsafeGuardDuration- The duration for safe guarding the allocation- Returns:
- The machine state containing the allocated machine ID
- Throws:
MachineIdOverflowException- if no more machine IDs are available
-
distributeRemote
protected abstract MachineState distributeRemote(String namespace, int machineBit, InstanceId instanceId, Duration safeGuardDuration) -
revert
1. get fromMachineStateStorage2. when not found:distributeRemote(java.lang.String, int, me.ahoo.cosid.machine.InstanceId, java.time.Duration), no need to revert 3. revert- Specified by:
revertin interfaceMachineIdDistributor- Parameters:
namespace- namespaceinstanceId- instanceId
-
revertRemote
protected abstract void revertRemote(String namespace, InstanceId instanceId, MachineState machineState) -
guard
public void guard(String namespace, InstanceId instanceId, Duration safeGuardDuration) throws NotFoundMachineStateException, MachineIdLostException Description copied from interface:MachineIdDistributorGuard a machine ID with a heartbeat mechanism.This method updates the heartbeat timestamp for a machine ID to prevent it from being considered stale and reallocated. It should be called periodically by instances to maintain their machine ID lease.

- Specified by:
guardin interfaceMachineIdDistributor- Parameters:
namespace- The namespace of the machine IDinstanceId- The instance identifier whose machine ID should be guardedsafeGuardDuration- The duration for safe guarding the allocation- Throws:
NotFoundMachineStateException- if the machine ID was not foundMachineIdLostException- if the machine ID has been lost or reallocated
-
guardRemote
protected abstract void guardRemote(String namespace, InstanceId instanceId, MachineState machineState, Duration safeGuardDuration)
-