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

com.bigdata.rwstore.IStore 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.rwstore;

import java.io.File;
import java.util.concurrent.locks.Lock;

import com.bigdata.rawstore.IAllocationContext;
import com.bigdata.rawstore.IStreamStore;

/**
 * The {@link IStore} interface provides persistent storage abstraction for
 * fixed size allocations and allocation recycling.
 */
public interface IStore extends IAllocationManager, IStreamStore,
        IHistoryManager {
	
//	/**************************************************************
//	 * called when used as a server, returns whether facility is enabled
//	 **/
//	public boolean preserveSessionData(); 

	/**
	 * Writes data on the store.
	 *
	 * @return the allocated address
	 **/
	public long alloc(byte buf[], int size, IAllocationContext context);

	/**
	 * Frees allocated storage (clears the bit to enable recycling after
	 * the next commit).
	 * 
	 * @param addr
	 *            the storage address to be freed
	 */
	public void free(long addr, int size);

    /**
     * Optionally return a {@link Lock} that must be used (when non-
     * null) to make the {@link #commit()} / {@link #postCommit()}
     * strategy atomic.
     */
    public Lock getCommitLock();

    /**
     * Global commit on the backing store. Previously committed data which has
     * been marked as {@link #free(long, int)} is now available for recycling.
     * However, recycling can not occur if session protection is active.
     */
	public void commit();
	
    /**
     * Hook that supports synchronization with an external commit before which
     * a rollback to "pre-commit" state is supported.
     */
	public void postCommit();
	
//	/**************************************************************
//	 * Odd method needed by PSInputStream to fetch data of unknown
//	 *	size into a buffer
//	 *
//	 * 

Both RWStore and WOStore store data in either explicit or // * implicit block sizes.

// * // * @param addr the address of the data in the IStore // * buf the buffer to store the data in // * // * @returns the size of the data copied // **/ // public int getDataSize(long addr, byte buf[]); /** * Read data of a known size from the store. * * @param addr * the address of the data * @param buf * the buffer of the size required! */ public void getData(long addr, byte buf[]); /************************************************************** * @param addr - the address * @return the size of the slot associated */ public int getAssociatedSlotSize(int addr); // /************************************************************** // * Given a physical address (byte offset on the store), return true // * if that address could be managed by an allocated block. // * // * @param a the storage address to be tested // **/ // public boolean verify(long a); // /** // * The {@link RWStore} always generates negative address values. // * // * @return whether the address given is a native IStore address // */ // public boolean isNativeAddress(long value); // /** // * useful in debug situations // * // * @return store allocation and usage statistics // */ // public String getStats(boolean full); /** * Close the backing storage. */ public void close(); // /** // * Needed by PSOutputStream for BLOB buffer chaining. // */ // public int bufferChainOffset(); /** * Retrieves store file. Can be used to delete the store after the IStore * has been released * * @return the File object */ public File getStoreFile(); // /** // * Called by the PSOutputStream to register the header block of a blob. The // * store must return a new address that is used to retrieve the blob header. // * This double indirection is required to be able to manage the blobs, since // * the blob header itself is of variable size and is handled by the standard // * FixedAllocators in the RWStore. // * // * @param addr // * The address of the header block of the blob. // * // * @return The // */ // public int registerBlob(int addr); // /** // * Return an output stream which can be used to write on the backing store. // * You can recover the address used to read back the data from the // * {@link IPSOutputStream}. // * // * @return The output stream. // */ // public IPSOutputStream getOutputStream(); // // /** // * Return an output stream which can be used to write on the backing store // * within the given allocation context. You can recover the address used to // * read back the data from the {@link IPSOutputStream}. // * // * @param context // * The context within which any allocations are made by the // * returned {@link IPSOutputStream}. // * // * @return an output stream to stream data to and to retrieve an address to // * later stream the data back. // */ // public IPSOutputStream getOutputStream(final IAllocationContext context); // // /** // * @return an input stream for the data for provided address // */ // public InputStream getInputStream(long addr); // /** // * Call made from AbstractJournal to register the cache used. This can then // * be accessed to clear entries when storage is made available for // * re-cycling. // *

// * Note: It is not safe to clear at the point of the delete request since // * the data could still be loaded if the data is retained for a period due // * to a non-zero retention period or session protection. // * // * @param externalCache // * - used by the Journal to cache historical BTree references // * @param dataSize // * - the size of the checkpoint data (fixed for any version) // */ // public void registerExternalCache( // ConcurrentWeakValueCache historicalIndexCache, // int byteCount); // /** // * Saves the current list of delete blocks, returning the address allocated. // * This can be used later to retrieve the addresses of allocations to be // * freed. // * // * Writes the content of currentTxnFreeList to the store. // * // * These are the current buffered frees that have yet been saved into a // * block referenced from the deferredFreeList // * // * @return the address of the deferred addresses saved on the store, or zero // * if none. // */ // public long saveDeferrals(); // // /** // * Called prior to commit, so check whether storage can be freed and then // * whether the deferred header needs to be saved. // *

// * Note: The caller MUST be holding the {@link #m_allocationLock}. // *

// * Note: This method is package private in order to expose it to the unit // * tests. // * // * returns number of addresses freed // */ // public int checkDeferredFrees(AbstractJournal abstractJournal); // /** // * A hook used to support session protection by incrementing and // * decrementing a transaction counter within the {@link IStore}. As long as // * a transaction is active we can not release data which is currently marked // * as freed but was committed at the point the session started. // */ // public IRawTx newTx(); // }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy