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

com.bigdata.service.AbstractDistributedFederation 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.service;

import java.util.concurrent.Future;

import com.bigdata.io.IStreamSerializer;
import com.bigdata.relation.accesspath.IAsynchronousIterator;
import com.bigdata.relation.accesspath.IBuffer;

/**
 * Abstract base class for {@link IBigdataFederation} implementations where the
 * services are distributed using RMI and are running, at least in principle,
 * across more than one host/JVM.
 * 
 * @todo Explore a variety of cached and uncached strategies for the metadata
 *       index. An uncached strategy is currently used. However, caching may be
 *       necessary for some kinds of application profiles, especially as the #of
 *       index partitions grows. If an application performs only unisolated and
 *       read-committed operations, then a single metadata index cache can be
 *       shared by the client for all operations against a given scale-out
 *       index. On the other hand, a client that uses transactions or performs
 *       historical reads will need to have a view of the metadata index as of
 *       the timestamp associated with the transaction or historical read.
 * 
 * @todo support failover metadata service discovery.
 * 
 * @author Bryan Thompson
 * @version $Id$
 * @param 
 *            The generic type of the client or service.
 */
abstract public class AbstractDistributedFederation extends AbstractScaleOutFederation {

    public AbstractDistributedFederation(final IBigdataClient client) {

        super(client);

    }

    final public boolean isDistributed() {
        
        return true;
        
    }
    
    /**
     * Convenience method to remove linkage for bigdata-jini
     * 
     * BLZG-1370
     * @return
     */
    public boolean isJiniFederation () {
    	return false;
    }
    
    /**
     * Assumes that the federation is stable through failover services if
     * nothing else.
     */
    public boolean isStable() {

        return true;
        
    }

    /**
     * Return a proxy object for an {@link IAsynchronousIterator} suiteable for
     * use in an RMI environment.
     * 
     * @param src
     *            The source iterator. Note that the iterator normally visits
     *            elements of some array type (chunks).
     * @param serializer
     *            The object responsible for (de-)serializing a chunk of
     *            elements visited by the iterator.
     * @param capacity
     *            The capacity for the internal buffer that is used to
     *            asynchronously transfer elements (chunks) from the remote
     *            iterator to the client iterator.
     * 
     * @return Either a thick iterator (when the results would fit within a
     *         single chunk) or a thin iterator that uses RMI to fetch chunks
     *         from the remote {@link IAsynchronousIterator}.
     * 
     * @throws IllegalArgumentException
     *             if the iterator is null.
     */
    public abstract  IAsynchronousIterator getProxy(
            IAsynchronousIterator src,//
            IStreamSerializer serializer, //
            int capacity
    );

    /**
     * Return a proxy object for a {@link Future} suitable for use in an RMI
     * environment.
     * 
     * @param future
     *            The future.
     * 
     * @return The proxy for that future.
     */
    public abstract  Future getProxy(Future future);

    /**
     * Return a proxy object for an {@link IBuffer} suitable for use in an RMI
     * environment.
     * 
     * @param buffer
     *            The future.
     * 
     * @return A proxy for that {@link IBuffer} that masquerades any RMI
     *         exceptions.
     */
    public abstract  IBuffer getProxy(final IBuffer buffer);
    
    /**
     * Return a proxy for an object.
     * 
     * @param obj
     *            The object.
     * @param enableDGC
     *            If distributed garbage collection should be used for the
     *            object.
     *            
     * @return The proxy.
     */
    public abstract  E getProxy(E obj, boolean enableDGC);
    
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy