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 Details

  • Constructor Details

    • 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, 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, 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 Details

    • 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(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(String label, int typeId, 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, 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, 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, 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.
    • toString

      public String toString()
      Overrides:
      toString in class CountersManager