package com.bigdata.rwstore;
import java.util.concurrent.locks.Lock;
import com.bigdata.journal.IBufferStrategy;
import com.bigdata.journal.RWStrategy;
import com.bigdata.rawstore.IAllocationContext;
import com.bigdata.rawstore.IAllocationManagerStore;
import com.bigdata.rwstore.sector.MemStrategy;
/**
* Defines a marker interface to be used to indicate strategies that share RW
* semantics such as {@link RWStrategy} and {@link MemStrategy}
*
* @author Martyn Cutcher
*/
public interface IRWStrategy extends IBufferStrategy, IAllocationManager,
IAllocationManagerStore, IHistoryManager {
/**
* Return the backing {@link IStore}.
*/
IStore getStore();
/**
* Return <code>true</code> iff the allocation having that address is
* flagged as committed. The caller must be holding the allocation lock in
* order for the result to remain valid outside of the method call.
*
* @param addr
* The address.
*
* @return <code>true</code> iff the address is currently committed.
*/
public boolean isCommitted(long addr);
/**
* Optionally return a {@link Lock} that must be used (when non-
* <code>null</code>) to make the {@link IBufferStrategy#commit()} /
* {@link #postCommit()} strategy atomic.
*/
public Lock getCommitLock();
/**
* Called post commit to dispose any transient commit state retained to
* support reset/rollback.
* <p>
* Note: It is the responsibility of the commit protocol layers to wind up
* calling {@link IBufferStrategy#abort()} if there is a failure during the
* commit protocol.
*/
public void postCommit();
}