All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.rocksdb.Env Maven / Gradle / Ivy

// Copyright (c) 2011-present, Facebook, Inc.  All rights reserved.
//  This source code is licensed under both the GPLv2 (found in the
//  COPYING file in the root directory) and Apache 2.0 License
//  (found in the LICENSE.Apache file in the root directory).

package org.rocksdb;

import java.util.Arrays;
import java.util.List;
import java.util.concurrent.atomic.AtomicReference;

/**
 * Base class for all Env implementations in RocksDB.
 */
public abstract class Env extends RocksObject {
  private static final AtomicReference SINGULAR_DEFAULT_ENV = new AtomicReference<>(null);

  /**
   * 

Returns the default environment suitable for the current operating * system.

* *

The result of {@code getDefault()} is a singleton whose ownership * belongs to rocksdb c++. As a result, the returned RocksEnv will not * have the ownership of its c++ resource, and calling its dispose()/close() * will be no-op.

* * @return the default {@link org.rocksdb.RocksEnv} instance. */ @SuppressWarnings({"PMD.CloseResource", "PMD.AssignmentInOperand"}) public static Env getDefault() { RocksEnv defaultEnv; RocksEnv newDefaultEnv = null; while ((defaultEnv = SINGULAR_DEFAULT_ENV.get()) == null) { // construct the RocksEnv only once in this thread if (newDefaultEnv == null) { // load the library just in-case it isn't already loaded! RocksDB.loadLibrary(); newDefaultEnv = new RocksEnv(getDefaultEnvInternal()); /* * The Ownership of the Default Env belongs to C++ * and so we disown the native handle here so that * we cannot accidentally free it from Java. */ newDefaultEnv.disOwnNativeHandle(); } // use CAS to gracefully handle thread pre-emption SINGULAR_DEFAULT_ENV.compareAndSet(null, newDefaultEnv); } return defaultEnv; } /** *

Sets the number of background worker threads of the low priority * pool for this environment.

*

Default number: 1

* * @param number the number of threads * * @return current {@link RocksEnv} instance. */ public Env setBackgroundThreads(final int number) { return setBackgroundThreads(number, Priority.LOW); } /** *

Gets the number of background worker threads of the pool * for this environment.

* * @param priority the priority id of a specified thread pool. * * @return the number of threads. */ public int getBackgroundThreads(final Priority priority) { return getBackgroundThreads(nativeHandle_, priority.getValue()); } /** *

Sets the number of background worker threads of the specified thread * pool for this environment.

* * @param number the number of threads * @param priority the priority id of a specified thread pool. * *

Default number: 1

* @return current {@link RocksEnv} instance. */ public Env setBackgroundThreads(final int number, final Priority priority) { setBackgroundThreads(nativeHandle_, number, priority.getValue()); return this; } /** *

Returns the length of the queue associated with the specified * thread pool.

* * @param priority the priority id of a specified thread pool. * * @return the thread pool queue length. */ public int getThreadPoolQueueLen(final Priority priority) { return getThreadPoolQueueLen(nativeHandle_, priority.getValue()); } /** * Enlarge number of background worker threads of a specific thread pool * for this environment if it is smaller than specified. 'LOW' is the default * pool. * * @param number the number of threads. * @param priority the priority id of a specified thread pool. * * @return current {@link RocksEnv} instance. */ public Env incBackgroundThreadsIfNeeded(final int number, final Priority priority) { incBackgroundThreadsIfNeeded(nativeHandle_, number, priority.getValue()); return this; } /** * Lower IO priority for threads from the specified pool. * * @param priority the priority id of a specified thread pool. * * @return current {@link RocksEnv} instance. */ public Env lowerThreadPoolIOPriority(final Priority priority) { lowerThreadPoolIOPriority(nativeHandle_, priority.getValue()); return this; } /** * Lower CPU priority for threads from the specified pool. * * @param priority the priority id of a specified thread pool. * * @return current {@link RocksEnv} instance. */ public Env lowerThreadPoolCPUPriority(final Priority priority) { lowerThreadPoolCPUPriority(nativeHandle_, priority.getValue()); return this; } /** * Returns the status of all threads that belong to the current Env. * * @return the status of all threads belong to this env. * * @throws RocksDBException if the thread list cannot be acquired. */ public List getThreadList() throws RocksDBException { return Arrays.asList(getThreadList(nativeHandle_)); } Env(final long nativeHandle) { super(nativeHandle); } private static native long getDefaultEnvInternal(); private static native void setBackgroundThreads( final long handle, final int number, final byte priority); private static native int getBackgroundThreads(final long handle, final byte priority); private static native int getThreadPoolQueueLen(final long handle, final byte priority); private static native void incBackgroundThreadsIfNeeded( final long handle, final int number, final byte priority); private static native void lowerThreadPoolIOPriority(final long handle, final byte priority); private static native void lowerThreadPoolCPUPriority(final long handle, final byte priority); private static native ThreadStatus[] getThreadList(final long handle) throws RocksDBException; }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy