org.apache.jena.tdb.base.block.BlockMgr Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jena-tdb Show documentation
Show all versions of jena-tdb Show documentation
TDB is a storage subsystem for Jena and ARQ, it is a native triple store providing persistent storage of triples/quads.
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.jena.tdb.base.block;
import java.util.Iterator ;
import org.apache.jena.atlas.lib.Closeable ;
import org.apache.jena.atlas.lib.Sync ;
public interface BlockMgr extends Sync, Closeable /*UnitMgr*/
{
/** Allocate an uninitialized block - writable - call only inside a update sequence.
* If blockSize is -1, means "default/fixed size" for this BlockMgr
*/
public Block allocate(int blockSize) ;
/** Answer whether there are any blocks in the collection being managed */
public boolean isEmpty() ;
/** Fetch a block, use for read only */
public Block getRead(long id);
/** Fetch a block, use for read only in an iterator */
public Block getReadIterator(long id);
/** Fetch a block, use for write and read - only inside "update" */
public Block getWrite(long id);
/** Release a block, unmodified. */
public void release(Block block) ;
/** Promote to writeable : it's OK to promote an already writeable block */
public Block promote(Block block);
// Bad name? "endWrite", "put" -- for a mapped block, the changes are made directly, not on the write() */
/** Write a block back - it still needs releasing. */
public void write(Block block) ;
/** Replace the contents of a block slot with new contents. Block does not need releasing.
* The write() operation may not do real work if the block is mapped - this operation
* really does replace the contents with the new contents.
*/
public void overwrite(Block blk) ;
/** Announce a block is no longer in use (i.e it's now freed) */
public void free(Block block);
/** Is this a valid block id? (may be a free block)*/
public boolean valid(int id) ;
/** Close the block manager */
@Override
public void close() ;
/** Is this block manager still usable? Closed block managers can not perform any operations except this one. */
public boolean isClosed() ;
/** Sync the block manager */
@Override
public void sync() ;
/** Sync the block manager : system operation to ensure sync() is passed down */
public void syncForce() ;
// This is not Session interface which si more an application facing
// coarser granularity interface. We also add iterator tracking.
/** Start of update */
public void beginUpdate() ;
/** Completion of update */
public void endUpdate() ;
/** Start of read */
public void beginRead() ;
/** Completion of read */
public void endRead() ;
/** Start of iterator */
public void beginIterator(Iterator> iterator) ;
/** Completion of iterator */
public void endIterator(Iterator> iterator) ;
/* Label for helping trace which BlockMgr is which */
public String getLabel() ;
}