Class AbstractIdSegmentDistributor
- All Implemented Interfaces:
Grouped,IdSegmentDistributor
- Direct Known Subclasses:
JdbcIdSegmentDistributor,MongoIdSegmentDistributor,ProxyIdSegmentDistributor,SpringRedisIdSegmentDistributor,ZookeeperIdSegmentDistributor
IdSegmentDistributors: common properties and one rollback rule for every backend.
The max id this distributor got from the store must strictly move forward. If the store hands out a max id below
last max id + step (restored from a backup, a lost Redis key, a manual edit), the range overlaps ids already
issued, and nextMaxId(long) throws IdSegmentRollbackException (an IllegalStateException) instead of issuing duplicates. Subclasses
only implement doNextMaxId(long).
- Since:
- 3.4.0
-
Field Summary
Fields inherited from interface me.ahoo.cosid.segment.IdSegmentDistributor
DEFAULT_OFFSET, DEFAULT_SEGMENTS, DEFAULT_STEP -
Constructor Summary
ConstructorsModifierConstructorDescriptionprotectedAbstractIdSegmentDistributor(String namespace, String name, long step) -
Method Summary
Modifier and TypeMethodDescriptionprotected abstract longdoNextMaxId(long step) Ask the store for the next max id,stepafter the previous one.longThe largest max id this distributor got so far,0before the first one.@NonNull StringgetName()Get the name for this distributor.@NonNull StringGet the namespace for this distributor.longgetStep()Get the step size for ID segments.longnextMaxId(long step) Allocate the next maximum ID for the specified step size.Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface me.ahoo.cosid.segment.IdSegmentDistributor
allowReset, getNamespacedName, getStep, nextIdSegment, nextIdSegment, nextIdSegment, nextIdSegmentChain, nextIdSegmentChain, nextMaxId
-
Constructor Details
-
AbstractIdSegmentDistributor
-
-
Method Details
-
getNamespace
Description copied from interface:IdSegmentDistributorGet the namespace for this distributor.The namespace provides a logical grouping for ID segments, allowing multiple independent segment spaces within the same system.
- Specified by:
getNamespacein interfaceIdSegmentDistributor- Returns:
- The namespace
-
getName
Description copied from interface:IdSegmentDistributorGet the name for this distributor.The name uniquely identifies this distributor within its namespace.
- Specified by:
getNamein interfaceIdSegmentDistributor- Returns:
- The name
-
getStep
public long getStep()Description copied from interface:IdSegmentDistributorGet the step size for ID segments.The step size determines how many IDs are allocated in each segment. Larger steps reduce coordination overhead but may lead to ID gaps.
- Specified by:
getStepin interfaceIdSegmentDistributor- Returns:
- The step size
-
getLastMaxId
public long getLastMaxId()The largest max id this distributor got so far,0before the first one. -
nextMaxId
public long nextMaxId(long step) Description copied from interface:IdSegmentDistributorAllocate the next maximum ID for the specified step size.This method allocates a new range of IDs by returning the maximum ID in the allocated range. The range starts at the previous maximum plus one and ends at the returned value.
- Specified by:
nextMaxIdin interfaceIdSegmentDistributor- Parameters:
step- The step size for allocation- Returns:
- The maximum ID in the allocated range
-
doNextMaxId
protected abstract long doNextMaxId(long step) Ask the store for the next max id,stepafter the previous one.- Parameters:
step- the step, already validated- Returns:
- the new max id
-