Class ConcurrentCountersManager


  • public class ConcurrentCountersManager
    extends CountersManager
    A thread safe extension of CountersManager which allows intra-process read and write access to the same counters buffer. Note that inter-process access is not catered for.
    • Field Detail

      • lock

        private final java.util.concurrent.locks.ReentrantLock lock
    • 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 of CountersManager.capacity() minus the number already allocated.
        Overrides:
        available in class CountersManager
        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 class CountersManager
        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 class CountersManager
        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 class CountersManager
        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 class CountersManager
        Parameters:
        counterId - the counter to freed
      • setCounterValue

        public void setCounterValue​(int counterId,
                                    long value)
        Set an AtomicCounter value based for a counter id with ordered memory ordering.
        Overrides:
        setCounterValue in class CountersManager
        Parameters:
        counterId - to be set.
        value - to set for the counter.
      • setCounterRegistrationId

        public void setCounterRegistrationId​(int counterId,
                                             long registrationId)
        Set an AtomicCounter registration id for a counter id with ordered memory ordering.
        Overrides:
        setCounterRegistrationId in class CountersManager
        Parameters:
        counterId - to be set.
        registrationId - to set for the counter.
      • setCounterOwnerId

        public void setCounterOwnerId​(int counterId,
                                      long ownerId)
        Set an AtomicCounter owner id for a counter id.
        Overrides:
        setCounterOwnerId in class CountersManager
        Parameters:
        counterId - to be set.
        ownerId - to set for the counter.
      • setCounterReferenceId

        public void setCounterReferenceId​(int counterId,
                                          long referenceId)
        Set an AtomicCounter reference id for a counter id.
        Overrides:
        setCounterReferenceId in class CountersManager
        Parameters:
        counterId - to be set.
        referenceId - to set for the counter.
      • setCounterLabel

        public void setCounterLabel​(int counterId,
                                    java.lang.String label)
        Set an AtomicCounter label by counter id.
        Overrides:
        setCounterLabel in class CountersManager
        Parameters:
        counterId - to be set.
        label - to set for the counter.
      • setCounterKey

        public void setCounterKey​(int counterId,
                                  java.util.function.Consumer<MutableDirectBuffer> keyFunc)
        Set an AtomicCounter key by on counter id, using a consumer callback to update the key metadata buffer.
        Overrides:
        setCounterKey in class CountersManager
        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 an AtomicCounter key by on counter id, copying the key metadata from the supplied buffer.
        Overrides:
        setCounterKey in class CountersManager
        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 an AtomicCounter label based on counter id.
        Overrides:
        appendToLabel in class CountersManager
        Parameters:
        counterId - to be set.
        label - to set for the counter.