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

com.bigdata.journal.TransientBufferStrategy 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.io.File;
import java.nio.ByteBuffer;

/**
 * Transient buffer strategy uses a direct buffer but never writes on disk.
 * 
 * @author Bryan Thompson
 * @version $Id$
 * 
 * @see BufferMode#Transient
 */
public class TransientBufferStrategy extends BasicBufferStrategy {
    
    /**
     * The root blocks.
     */
    final private IRootBlockView rootBlocks[] = new IRootBlockView[2];
    
    /**
     * Either zero (0) or one (1).
     */
    private int currentRootBlock = 0;
    
    /**
     * Note: I have not observed much performance gain from the use of a direct
     * buffer for the transient mode. Further, there is a BUG related to release
     * of direct {@link ByteBuffer}s so they are NOT in general recommended
     * here.
     */
    TransientBufferStrategy(int offsetBits,long initialExtent, long maximumExtent,
            boolean useDirectBuffers) {
        
        super(  maximumExtent,
                offsetBits,
                0, // nextOffset
                0, // headerSize
                initialExtent, //
                BufferMode.Transient, //
                (useDirectBuffers //
                        ? ByteBuffer.allocateDirect((int) initialExtent)//
                        : ByteBuffer.allocate((int) initialExtent)//
                ),
                false// readOnly
        );
        
    }
    
    public void deleteResources() {
        
        if( isOpen() ) {
            
            throw new IllegalStateException();
            
        }

        // NOP.
        
    }
    
    public void force(boolean metadata) {
        
        // NOP.
        
    }
    
    /**
     * Always returns null.
     */
    public File getFile() {
        
        return null;
        
    }

    final public boolean isStable() {
        
        return false;
        
    }

    public boolean isFullyBuffered() {
        
        return true;
        
    }
    
    public void writeRootBlock(final IRootBlockView rootBlock,
            final ForceEnum forceOnCommit) {

        if (rootBlock == null)
            throw new IllegalArgumentException();

        currentRootBlock = rootBlock.isRootBlock0() ? 0 : 1;

        rootBlocks[currentRootBlock] = rootBlock;

    }

    /**
     * There is no header.
     * 
     * @return ZERO (0).
     */
    final public int getHeaderSize() {
        
        return 0;
        
    }

    public ByteBuffer readRootBlock(boolean rootBlock0) {

        return rootBlocks[rootBlock0 ? 0 : 1].asReadOnlyBuffer();
        
    }

	/**
	 * Protocol support for HAWrite
	 */
	public void setNextOffset(long lastOffset) {
		// void
	}}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy