public class PartitionUpdateCounterTrackingImpl extends Object implements PartitionUpdateCounter
Implements the partition update counter flow to avoid situations when:
The main idea is to track updates received out-of-order to ensure valid state of the update counter for rebalancing.
Below a short description of new flow:
RollbackRecord for further recovery purposes.| Modifier and Type | Field and Description |
|---|---|
protected AtomicLong |
cntr
LWM.
|
protected boolean |
first |
protected CacheGroupContext |
grp |
protected long |
initCntr
Deprecated.
TODO FIXME https://issues.apache.org/jira/browse/IGNITE-11794
|
static int |
MAX_MISSED_UPDATES
Max allowed missed updates.
|
protected NavigableMap<Long,org.apache.ignite.internal.processors.cache.PartitionUpdateCounterTrackingImpl.Item> |
queue
Queue of applied out of order counter updates.
|
protected AtomicLong |
reserveCntr
HWM.
|
| Constructor and Description |
|---|
PartitionUpdateCounterTrackingImpl(CacheGroupContext grp) |
| Modifier and Type | Method and Description |
|---|---|
CacheGroupContext |
context() |
PartitionUpdateCounter |
copy() |
protected PartitionUpdateCounterTrackingImpl |
createInstance() |
boolean |
empty() |
boolean |
equals(Object o) |
GridLongList |
finalizeUpdateCounters()
Flushes pending update counters closing all possible gaps.
|
long |
get()
Get LWM.
|
@Nullable byte[] |
getBytes() |
protected long |
highestAppliedCounter() |
void |
init(long initUpdCntr,
@Nullable byte[] cntrUpdData)
Restores update counter state.
|
long |
initial() |
Iterator<long[]> |
iterator() |
long |
next()
Increment LWM by 1.
|
long |
next(long delta)
Increment LWM by delta.
|
long |
reserve(long delta)
Increment HWM by delta.
|
long |
reserved()
Returns HWM.
|
void |
reset()
Reset counter internal state to zero.
|
void |
resetInitialCounter()
Reset the initial counter value to zero.
|
boolean |
sequential() |
String |
toString() |
void |
update(long val)
Sets update counter to absolute value.
|
boolean |
update(long start,
long delta)
Applies counter update out of range.
|
void |
updateInitial(long start,
long delta) |
clone, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitforEach, spliteratorpublic static final int MAX_MISSED_UPDATES
protected NavigableMap<Long,org.apache.ignite.internal.processors.cache.PartitionUpdateCounterTrackingImpl.Item> queue
protected final AtomicLong cntr
protected final AtomicLong reserveCntr
protected boolean first
protected final CacheGroupContext grp
@Deprecated protected volatile long initCntr
public PartitionUpdateCounterTrackingImpl(CacheGroupContext grp)
grp - Group.public void init(long initUpdCntr,
@Nullable
@Nullable byte[] cntrUpdData)
init in interface PartitionUpdateCounterinitUpdCntr - LWM.cntrUpdData - Counter updates raw data.public long initial()
initial in interface PartitionUpdateCounterpublic long get()
get in interface PartitionUpdateCounterprotected long highestAppliedCounter()
public long next()
PartitionUpdateCounternext in interface PartitionUpdateCounterDataStreamerImpl IsolatedUpdater.public void update(long val)
throws IgniteCheckedException
update in interface PartitionUpdateCounterval - Absolute value.IgniteCheckedException - if counter cannot be set to passed value due to incompatibility with current state.public boolean update(long start,
long delta)
update in interface PartitionUpdateCounterstart - Start (<= lwm).delta - Delta.True if update was actually applied.public void updateInitial(long start,
long delta)
updateInitial in interface PartitionUpdateCounterstart - Counter.delta - Delta.public GridLongList finalizeUpdateCounters()
finalizeUpdateCounters in interface PartitionUpdateCounterpublic long reserve(long delta)
reserve in interface PartitionUpdateCounterdelta - Delta.public long next(long delta)
next in interface PartitionUpdateCounterdelta - Delta.public boolean sequential()
sequential in interface PartitionUpdateCounterTrue if counter has no missed updates.@Nullable public @Nullable byte[] getBytes()
getBytes in interface PartitionUpdateCounterpublic void reset()
reset in interface PartitionUpdateCounterpublic void resetInitialCounter()
resetInitialCounter in interface PartitionUpdateCounterpublic long reserved()
reserved in interface PartitionUpdateCounterpublic boolean empty()
empty in interface PartitionUpdateCounterTrue if counter has not seen any update.public Iterator<long[]> iterator()
iterator in interface Iterable<long[]>iterator in interface PartitionUpdateCounterpublic CacheGroupContext context()
context in interface PartitionUpdateCounterpublic PartitionUpdateCounter copy()
copy in interface PartitionUpdateCounterprotected PartitionUpdateCounterTrackingImpl createInstance()
Follow @ApacheIgnite
Ignite Database and Caching Platform : ver. 2.11.0 Release Date : September 11 2021