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

com.bigdata.service.IMetadataService 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
*/
/*
 * Created on Mar 17, 2007
 */

package com.bigdata.service;

import java.io.IOException;
import java.rmi.Remote;
import java.util.UUID;
import java.util.concurrent.ExecutionException;

import com.bigdata.btree.IndexMetadata;
import com.bigdata.mdi.MetadataIndex;
import com.bigdata.mdi.PartitionLocator;

/**
 * A metadata service for a named index.
 * 

* The metadata service maintains locator information for the data service * instances responsible for each partition in the named index. Partitions are * automatically split when they overflow (~200M) and joined when they underflow * (~50M). *

* Note: methods on this interface MUST throw {@link IOException} in order to be * compatible with RMI. * * @author Bryan Thompson * @version $Id$ */ public interface IMetadataService extends IDataService, Remote { /* * methods that require access to the metadata server for their * implementations. */ /** * Return the next unique partition identifier to be assigned to the named * scale-out index. * * @param name * The name of the scale-out index. * * @return The next partition identifier. * * @throws ExecutionException * @throws InterruptedException */ public int nextPartitionId(String name) throws IOException, InterruptedException, ExecutionException; /** * Updates the {@link MetadataIndex} for the named scale-out index to * reflect the split of an index partition into N new index partitions. The * old index partition locator is removed from the {@link MetadataIndex} and * the new index partition locators are inserted in a single atomic * operation. * * @param name * The name of the scale-out index. * @param oldLocator * The partition locator that is being split. * @param newLocators * The locator information for the new index partitions that were * created by the split of the old index partition. * * @throws IOException * @throws InterruptedException * @throws ExecutionException */ public void splitIndexPartition(String name, PartitionLocator oldLocator, PartitionLocator[] newLocators) throws IOException, InterruptedException, ExecutionException; /** * Updates the {@link MetadataIndex} for the named scale-out index to * reflect the join of N index partitions (which must be siblings) into a * single index partition. The old index partition locators are removed from * the {@link MetadataIndex} and the new index partition locator is inserted * in a single atomic operation. * * @param name * The name of the scale-out index. * @param oldLocators * The partition locators for the index partitions that were * joined. * @param newLocator * The locator for the new index partition created by that join. * * @throws IOException * @throws InterruptedException * @throws ExecutionException */ public void joinIndexPartition(String name, PartitionLocator[] oldLocators, PartitionLocator newLocator) throws IOException, InterruptedException, ExecutionException; /** * Updates the {@link MetadataIndex} for the named scale-out index to * reflect the move of an index partition from one data service to another. * The old index partition locator is removed from the {@link MetadataIndex} * and the new index partition locator is inserted in a single atomic * operation. * * @param name * The name of the scale-out index. * @param oldLocator * The partition locator for the source index partition. * @param newLocator * The locator for the target index partition. * * @throws IOException * @throws InterruptedException * @throws ExecutionException */ public void moveIndexPartition(String name, PartitionLocator oldLocator, PartitionLocator newLocator) throws IOException, InterruptedException, ExecutionException; /** * Register and statically partition a scale-out index. * * @param metadata * The metadata template describing the scale-out index, * including the name to be assigned to that index. * @param separatorKeys * The array of separator keys. Each separator key is interpreted * as an unsigned byte[]. The first entry MUST be an * empty byte[]. The entries MUST be in sorted order. * @param dataServiceUUIDs * The array of data services onto which each partition defined * by a separator key will be mapped (optional). When given, the * #of entries in this array MUST agree with the #of entries in * the separatorKeys array and all entries must be non-null. * When not given, the index partitions will be auto-assigned to * the discovered data services. * * @return The UUID of the scale-out index. * * @throws IOException * @throws InterruptedException * @throws ExecutionException */ public UUID registerScaleOutIndex(IndexMetadata metadata, byte[][] separatorKeys, UUID[] dataServices) throws IOException, InterruptedException, ExecutionException; /** * Drop the named scale-out index. * * @param name * The name of the scale-out index. */ public void dropScaleOutIndex(String name) throws IOException, InterruptedException, ExecutionException; /** * The partition with that separator key or null (exact match * on the separator key). * * @param name * The name of the scale-out index. * @param timestamp * @param key * The separator key (the first key that would go into that * partition). * * @return The partition with that separator key or null. */ public PartitionLocator get(String name, long timestamp, byte[] key) throws InterruptedException, ExecutionException, IOException; /** * Find and return the partition spanning the given key. * * @param name * The name of the scale-out index. * @param timestamp * @param key * A key of interest for the scale-out index. * * @return The partition spanning the given key or null if * there are no partitions defined. */ public PartitionLocator find(String name, long timestamp, byte[] key) throws InterruptedException, ExecutionException, IOException; }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy