All Implemented Interfaces:
Closeable, AutoCloseable

@RrdBackendAnnotation(name="NIO", shouldValidateHeader=true) public class RrdNioBackendFactoryextends RrdFileBackendFactory
Factory class which creates actual RrdNioBackend objects. This is the default factory since 1.4.0 version.

Managing the thread pool

Each RrdNioBackendFactory is optionally backed by a RrdSyncThreadPool, which it uses to sync the memory-mapped files to disk. In order to avoid having these threads live longer than they should, it is recommended that clients create and destroy thread pools at the appropriate time in their application's life time. Failure to manage thread pools appropriately may lead to the thread pool hanging around longer than necessary, which in turn may cause memory leaks.

if sync period is negative, no sync thread will be launched

  • Field Details

    • DEFAULT_SYNC_PERIOD

      public static final int DEFAULT_SYNC_PERIOD
      Period in seconds between consecutive synchronizations when sync-mode is set to SYNC_BACKGROUND. By default in-memory cache will be transferred to the disc every 300 seconds (5 minutes). Default value can be changed via setSyncPeriod(int) method.
      See Also:
    • defaultSyncPeriod

      private static int defaultSyncPeriod
      Writes between forced syncs, for factories that name none.
    • DEFAULT_SYNC_CORE_POOL_SIZE

      public static final int DEFAULT_SYNC_CORE_POOL_SIZE
      The core pool size for the sync executor. Defaults to 6.
      See Also:
    • defaultSyncPoolSize

      private static int defaultSyncPoolSize
      Threads in the shared sync pool.
    • _threadFactory

      private static volatile ThreadFactory _threadFactory
      Factory naming the sync pool's threads.
    • syncPeriod

      private final int syncPeriod
      Writes between forced syncs for this factory's backends.
    • syncThreadPool

      private RrdSyncThreadPool syncThreadPool
      The thread pool to pass to newly-created RrdNioBackend instances.
  • Constructor Details

    • RrdNioBackendFactory

      public RrdNioBackendFactory()
      Creates a new RrdNioBackendFactory with default settings.
    • RrdNioBackendFactory

      public RrdNioBackendFactory(int syncPeriod)
      Creates a new RrdNioBackendFactory, using a default RrdSyncThreadPool.
      Parameters:
      syncPeriod - the sync period, in seconds. If negative or 0, sync threads are disabled.
    • RrdNioBackendFactory

      public RrdNioBackendFactory(int syncPeriod, int syncPoolSize)
      Creates a new RrdNioBackendFactory.
      Parameters:
      syncPeriod - the sync period, in seconds.
      syncPoolSize - The number of threads to use to sync the mapped file to disk, if negative or 0, sync threads are disabled.
    • RrdNioBackendFactory

      public RrdNioBackendFactory(int syncPeriod, ScheduledExecutorService syncThreadPool)
      Creates a new RrdNioBackendFactory.
      Parameters:
      syncPeriod - the sync period, in seconds.
      syncThreadPool - If null, disable background sync threads
    • RrdNioBackendFactory

      public RrdNioBackendFactory(int syncPeriod, RrdSyncThreadPool syncThreadPool)
      Creates a new RrdNioBackendFactory.
      Parameters:
      syncPeriod - the sync period, in seconds.
      syncThreadPool - If null, disable background sync threads
  • Method Details

    • getSyncPeriod

      public static int getSyncPeriod()
      Returns time between two consecutive background synchronizations. If not changed via setSyncPeriod(int) method call, defaults to DEFAULT_SYNC_PERIOD. See setSyncPeriod(int) for more information.
      Returns:
      Time in seconds between consecutive background synchronizations.
    • setSyncPeriod

      public static void setSyncPeriod(int syncPeriod)
      Sets time between consecutive background synchronizations. If negative, it will disabling syncing for all NIO backend factory.
      Parameters:
      syncPeriod - Time in seconds between consecutive background synchronizations.
    • getSyncPoolSize

      public static int getSyncPoolSize()
      Returns the number of synchronizing threads. If not changed via setSyncPoolSize(int) method call, defaults to DEFAULT_SYNC_CORE_POOL_SIZE. See setSyncPoolSize(int) for more information.
      Returns:
      Number of synchronizing threads.
    • setSyncPoolSize

      public static void setSyncPoolSize(int syncPoolSize)
      Sets the number of synchronizing threads. It must be set before the first use of this factory. It will not have any effect afterward.
      Parameters:
      syncPoolSize - Number of synchronizing threads.
    • open

      protected RrdBackend open(String path, boolean readOnly) throws IOException
      /** /** Opens the backend serving a storage path.

      Creates RrdNioBackend object for the given file path.

      Specified by:
      open in class RrdBackendFactory
      Parameters:
      path - the storage path, relative to this factory's root URI
      readOnly - true to open the storage for reading only, false to allow writes
      Returns:
      the backend that performs all I/O for the given storage path
      Throws:
      IOException - if the storage cannot be opened
    • getSyncThreadPool

      public RrdSyncThreadPool getSyncThreadPool()
      Return the pool that periodically flushes dirty buffers to disk.
      Returns:
      The RrdSyncThreadPool or null if syncing is disabled
    • close

      public void close()
      Description copied from class: RrdBackendFactory
      A generic close handle, default implementation does nothing.
      Specified by:
      close in interface AutoCloseable
      Specified by:
      close in interface Closeable
      Overrides:
      close in class RrdBackendFactory
    • setThreadFactory

      public static void setThreadFactory(ThreadFactory factory)
      Set a custom thread factory for the default sync pool. Must be called before the first use of the factory, otherwise the default thread naming is used.
      Parameters:
      factory - may be null to reset to default