Package org.agrona.concurrent.status
Class ConcurrentCountersManager
- java.lang.Object
-
- org.agrona.concurrent.status.CountersReader
-
- org.agrona.concurrent.status.CountersManager
-
- org.agrona.concurrent.status.ConcurrentCountersManager
-
public class ConcurrentCountersManager extends CountersManager
A thread safe extension ofCountersManager
which allows intra-process read and write access to the same counters buffer. Note that inter-process access is not catered for.
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class org.agrona.concurrent.status.CountersReader
CountersReader.CounterConsumer, CountersReader.MetaData
-
-
Field Summary
Fields Modifier and Type Field Description private java.util.concurrent.locks.ReentrantLock
lock
-
Fields inherited from class org.agrona.concurrent.status.CountersReader
COUNTER_LENGTH, DEFAULT_OWNER_ID, DEFAULT_REFERENCE_ID, DEFAULT_REGISTRATION_ID, DEFAULT_TYPE_ID, FREE_FOR_REUSE_DEADLINE_OFFSET, FULL_LABEL_LENGTH, KEY_OFFSET, LABEL_OFFSET, labelCharset, MAX_KEY_LENGTH, MAX_LABEL_LENGTH, maxCounterId, METADATA_LENGTH, metaDataBuffer, NOT_FREE_TO_REUSE, NULL_COUNTER_ID, OWNER_ID_OFFSET, RECORD_ALLOCATED, RECORD_RECLAIMED, RECORD_UNUSED, REFERENCE_ID_OFFSET, REGISTRATION_ID_OFFSET, TYPE_ID_OFFSET, valuesBuffer
-
-
Constructor Summary
Constructors Constructor Description ConcurrentCountersManager(AtomicBuffer metaDataBuffer, AtomicBuffer valuesBuffer)
Construct a counter manager over buffers containing the values and associated metadata.ConcurrentCountersManager(AtomicBuffer metaDataBuffer, AtomicBuffer valuesBuffer, java.nio.charset.Charset labelCharset)
Construct a counter manager over buffers containing the values and associated metadata.ConcurrentCountersManager(AtomicBuffer metaDataBuffer, AtomicBuffer valuesBuffer, java.nio.charset.Charset labelCharset, EpochClock epochClock, long freeToReuseTimeoutMs)
Create a new counter manager over buffers containing the values and associated metadata.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description int
allocate(int typeId, DirectBuffer keyBuffer, int keyOffset, int keyLength, DirectBuffer labelBuffer, int labelOffset, int labelLength)
Allocate a counter with the minimum of allocation by allowing the label a key to be provided and copied.int
allocate(java.lang.String label, int typeId)
Allocate a new counter with a given label and type.int
allocate(java.lang.String label, int typeId, java.util.function.Consumer<MutableDirectBuffer> keyFunc)
Allocate a new counter with a given label.void
appendToLabel(int counterId, java.lang.String label)
Set anAtomicCounter
label based on counter id.int
available()
Number of counters available to be allocated which is a function ofCountersManager.capacity()
minus the number already allocated.void
free(int counterId)
Free the counter identified by counterId.void
setCounterKey(int counterId, java.util.function.Consumer<MutableDirectBuffer> keyFunc)
Set anAtomicCounter
key by on counter id, using a consumer callback to update the key metadata buffer.void
setCounterKey(int counterId, DirectBuffer keyBuffer, int offset, int length)
Set anAtomicCounter
key by on counter id, copying the key metadata from the supplied buffer.void
setCounterLabel(int counterId, java.lang.String label)
Set anAtomicCounter
label by counter id.void
setCounterOwnerId(int counterId, long ownerId)
Set anAtomicCounter
owner id for a counter id.void
setCounterReferenceId(int counterId, long referenceId)
Set anAtomicCounter
reference id for a counter id.void
setCounterRegistrationId(int counterId, long registrationId)
Set anAtomicCounter
registration id for a counter id with ordered memory ordering.void
setCounterValue(int counterId, long value)
Set anAtomicCounter
value based for a counter id with ordered memory ordering.java.lang.String
toString()
-
Methods inherited from class org.agrona.concurrent.status.CountersManager
allocate, capacity, newCounter, newCounter, newCounter, newCounter
-
Methods inherited from class org.agrona.concurrent.status.CountersReader
counterOffset, findByRegistrationId, findByTypeIdAndRegistrationId, forEach, forEach, forEach, getCounterLabel, getCounterOwnerId, getCounterReferenceId, getCounterRegistrationId, getCounterState, getCounterTypeId, getCounterValue, getFreeForReuseDeadline, labelCharset, maxCounterId, metaDataBuffer, metaDataOffset, validateCounterId, valuesBuffer
-
-
-
-
Constructor Detail
-
ConcurrentCountersManager
public ConcurrentCountersManager(AtomicBuffer metaDataBuffer, AtomicBuffer valuesBuffer)
Construct a counter manager over buffers containing the values and associated metadata.Counter labels default to
StandardCharsets.UTF_8
.- Parameters:
metaDataBuffer
- containing the counter metadata.valuesBuffer
- containing the counter values.
-
ConcurrentCountersManager
public ConcurrentCountersManager(AtomicBuffer metaDataBuffer, AtomicBuffer valuesBuffer, java.nio.charset.Charset labelCharset)
Construct a counter manager over buffers containing the values and associated metadata.- Parameters:
metaDataBuffer
- containing the counter metadata.valuesBuffer
- containing the counter values.labelCharset
- for the label encoding.
-
ConcurrentCountersManager
public ConcurrentCountersManager(AtomicBuffer metaDataBuffer, AtomicBuffer valuesBuffer, java.nio.charset.Charset labelCharset, EpochClock epochClock, long freeToReuseTimeoutMs)
Create a new counter manager over buffers containing the values and associated metadata.- Parameters:
metaDataBuffer
- containing the types, keys, and labels for the counters.valuesBuffer
- containing the values of the counters themselves.labelCharset
- for the label encoding.epochClock
- to use for determining time for keep counter from being reused after being freed.freeToReuseTimeoutMs
- timeout (in milliseconds) to keep counter from being reused after being freed.
-
-
Method Detail
-
available
public int available()
Number of counters available to be allocated which is a function ofCountersManager.capacity()
minus the number already allocated.- Overrides:
available
in classCountersManager
- Returns:
- the number of counter available to be allocated.
-
allocate
public int allocate(java.lang.String label, int typeId)
Allocate a new counter with a given label and type.- Overrides:
allocate
in classCountersManager
- Parameters:
label
- to describe the counter.typeId
- for the type of counter.- Returns:
- the id allocated for the counter.
-
allocate
public int allocate(java.lang.String label, int typeId, java.util.function.Consumer<MutableDirectBuffer> keyFunc)
Allocate a new counter with a given label.The key function will be called with a buffer with the exact length of available key space in the record for the user to store what they want for the key. No offset is required.
- Overrides:
allocate
in classCountersManager
- Parameters:
label
- to describe the counter.typeId
- for the type of counter.keyFunc
- for setting the key value for the counter.- Returns:
- the id allocated for the counter.
-
allocate
public int allocate(int typeId, DirectBuffer keyBuffer, int keyOffset, int keyLength, DirectBuffer labelBuffer, int labelOffset, int labelLength)
Allocate a counter with the minimum of allocation by allowing the label a key to be provided and copied.If the keyBuffer is null then a copy of the key is not attempted.
- Overrides:
allocate
in classCountersManager
- Parameters:
typeId
- for the counter.keyBuffer
- containing the optional key for the counter.keyOffset
- within the keyBuffer at which the key begins.keyLength
- of the key in the keyBuffer.labelBuffer
- containing the mandatory label for the counter.labelOffset
- within the labelBuffer at which the label begins.labelLength
- of the label in the labelBuffer.- Returns:
- the id allocated for the counter.
-
free
public void free(int counterId)
Free the counter identified by counterId.- Overrides:
free
in classCountersManager
- Parameters:
counterId
- the counter to freed
-
setCounterValue
public void setCounterValue(int counterId, long value)
Set anAtomicCounter
value based for a counter id with ordered memory ordering.- Overrides:
setCounterValue
in classCountersManager
- Parameters:
counterId
- to be set.value
- to set for the counter.
-
setCounterRegistrationId
public void setCounterRegistrationId(int counterId, long registrationId)
Set anAtomicCounter
registration id for a counter id with ordered memory ordering.- Overrides:
setCounterRegistrationId
in classCountersManager
- Parameters:
counterId
- to be set.registrationId
- to set for the counter.
-
setCounterOwnerId
public void setCounterOwnerId(int counterId, long ownerId)
Set anAtomicCounter
owner id for a counter id.- Overrides:
setCounterOwnerId
in classCountersManager
- Parameters:
counterId
- to be set.ownerId
- to set for the counter.
-
setCounterReferenceId
public void setCounterReferenceId(int counterId, long referenceId)
Set anAtomicCounter
reference id for a counter id.- Overrides:
setCounterReferenceId
in classCountersManager
- Parameters:
counterId
- to be set.referenceId
- to set for the counter.
-
setCounterLabel
public void setCounterLabel(int counterId, java.lang.String label)
Set anAtomicCounter
label by counter id.- Overrides:
setCounterLabel
in classCountersManager
- Parameters:
counterId
- to be set.label
- to set for the counter.
-
setCounterKey
public void setCounterKey(int counterId, java.util.function.Consumer<MutableDirectBuffer> keyFunc)
Set anAtomicCounter
key by on counter id, using a consumer callback to update the key metadata buffer.- Overrides:
setCounterKey
in classCountersManager
- Parameters:
counterId
- to be set.keyFunc
- callback used to set the key.
-
setCounterKey
public void setCounterKey(int counterId, DirectBuffer keyBuffer, int offset, int length)
Set anAtomicCounter
key by on counter id, copying the key metadata from the supplied buffer.- Overrides:
setCounterKey
in classCountersManager
- Parameters:
counterId
- to be set.keyBuffer
- containing the updated key.offset
- offset into buffer.length
- length of data to copy.
-
appendToLabel
public void appendToLabel(int counterId, java.lang.String label)
Set anAtomicCounter
label based on counter id.- Overrides:
appendToLabel
in classCountersManager
- Parameters:
counterId
- to be set.label
- to set for the counter.
-
toString
public java.lang.String toString()
- Overrides:
toString
in classCountersManager
-
-