com.bigdata.journal.IIndexStore Maven / Gradle / Ivy
/**
Copyright (C) SYSTAP, LLC DBA Blazegraph 2006-2016. All rights reserved.
Contact:
SYSTAP, LLC DBA Blazegraph
2501 Calvert ST NW #106
Washington, DC 20008
[email protected]
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; version 2 of the License.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
package com.bigdata.journal;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
import com.bigdata.bfs.BigdataFileSystem;
import com.bigdata.btree.AbstractBTree;
import com.bigdata.rawstore.IRawStore;
import com.bigdata.relation.locator.IResourceLocator;
import com.bigdata.sparse.GlobalRowStoreSchema;
import com.bigdata.sparse.SparseRowStore;
/**
* Collection of methods that are shared by both local and distributed stores.
*
* Note: Historically, this was class was named for the ability to manage index
* objects in both local and distributed contexts. However, the introduction of
* GIST support has necessitated a refactoring of the interfaces and the name of
* this interface no longer reflects its function.
*
* @author Bryan Thompson
*/
public interface IIndexStore {
/**
* Return an unisolated view of the global {@link SparseRowStore} used to
* store named property sets.
*
* @see GlobalRowStoreSchema
*/
SparseRowStore getGlobalRowStore();
/**
* Return a view of the global {@link SparseRowStore} used to store named
* property sets as of the specified timestamp.
*
* The {@link SparseRowStore} only permits {@link ITx#UNISOLATED} writes, so
* you MUST specify {@link ITx#UNISOLATED} as the timestamp if you intend to
* write on the global row store!
*
* You can request the most recent committed state of the global row store
* by specifying {@link ITx#READ_COMMITTED}.
*
* @param timestamp
* The timestamp of the view.
*
* @return The global row store view -or- null
if no view
* exists as of that timestamp.
*/
SparseRowStore getGlobalRowStore(long timestamp);
/**
* Return the global file system used to store block-structured files and
* their metadata and as a source and sink for map/reduce processing.
*
* @see BigdataFileSystem
*/
BigdataFileSystem getGlobalFileSystem();
/**
* A factory for {@link TemporaryStore}s. {@link TemporaryStore}s are
* thread-safe and may be used by multiple processes at once. Old
* {@link TemporaryStore}s are eventually retired by the factory and their
* storage is reclaimed once they are finalized (after they are no longer in
* use by any process). The decision to retire a {@link TemporaryStore} is
* either made implicitly, when it is no longer weakly reachable, or
* explicitly, when it has grown large enough that no new processes should
* begin using that {@link TemporaryStore}. In the latter case, the
* {@link TemporaryStore} will remain available to the process(es) using it
* and a new {@link TemporaryStore} will be allocated and made available to
* the caller.
*
* It is important that processes do not hold a hard reference to a
* {@link TemporaryStore} beyond the end of the process as that will prevent
* the {@link TemporaryStore} from being finalized. Holding reference to an
* {@link AbstractBTree} created on a {@link TemporaryStore} is equivalent
* to holding a hard reference to the {@link TemporaryStore} itself since
* the {@link AbstractBTree} holds onto the backing {@link IRawStore} using
* a hard reference.
*
* @return A {@link TemporaryStore}.
*/
TemporaryStore getTempStore();
/**
* Return the default locator for resources that are logical index
* containers (relations and relation containers).
*/
IResourceLocator getResourceLocator();
/**
* A {@link ExecutorService} that may be used to parallelize operations.
* This service is automatically used when materializing located resources.
* While the service does not impose concurrency controls, tasks run on this
* service may submit operations to a {@link ConcurrencyManager}.
*/
ExecutorService getExecutorService();
/**
* Adds a task which will run until canceled, until it throws an exception,
* or until the service is shutdown.
*
* @param task
* The task.
* @param initialDelay
* The initial delay.
* @param delay
* The delay between invocations.
* @param unit
* The units for the delay parameters.
*
* @return The {@link ScheduledFuture} for that task.
*/
ScheduledFuture> addScheduledTask(final Runnable task,
final long initialDelay, final long delay, final TimeUnit unit);
/**
* true
iff performance counters will be collected for the
* platform on which the client is running.
*/
boolean getCollectPlatformStatistics();
/**
* true
iff statistics will be collected for work queues.
*/
boolean getCollectQueueStatistics();
/**
* The port on which the optional httpd service will be run. The httpd
* service exposes statistics about the client, its work queues, the
* platform on which it is running, etc. If this is ZERO (0), then the
* port will be chosen randomly.
*/
int getHttpdPort();
/**
* The service that may be used to acquire synchronous distributed locks
* without deadlock detection.
*/
IResourceLockService getResourceLockService();
/**
* The database wide timestamp of the most recent commit on the store or 0L
* iff there have been no commits. In a local database, this timestamp is
* generated by a local timestamp service. In a distributed database, this
* timestamp is generated by a shared timestamp service. The timestamps
* returned by this method are strictly increasing for a given store and for
* a given database.
*
* This method is useful if you plan to issue a series of read-consistent
* requests against the most current commit point of the database.
*
* @return The timestamp of the most recent commit on the store or 0L iff
* there have been no commits.
*
* @see IRootBlockView#getLastCommitTime()
*/
long getLastCommitTime();
/**
* Destroy the {@link IIndexStore}.
*/
void destroy();
}