blob: f2d0c98c8ba2b4c73245c9953a8225161635a9d1 [file] [log] [blame]
/*
* 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.accumulo.core.client.admin;
import java.util.EnumSet;
import java.util.Map;
import java.util.Map.Entry;
import java.util.SortedSet;
import org.apache.accumulo.core.client.AccumuloException;
import org.apache.accumulo.core.client.AccumuloSecurityException;
import org.apache.accumulo.core.client.IteratorSetting;
import org.apache.accumulo.core.client.NamespaceExistsException;
import org.apache.accumulo.core.client.NamespaceNotEmptyException;
import org.apache.accumulo.core.client.NamespaceNotFoundException;
import org.apache.accumulo.core.iterators.IteratorUtil.IteratorScope;
/**
* Provides an API for administering namespaces
*
* All tables exist in a namespace. The default namespace has no name, and is used if an explicit
* namespace is not specified. Fully qualified table names look like "namespaceName.tableName".
* Tables in the default namespace are fully qualified simply as "tableName".
*
* @since 1.6.0
*/
public interface NamespaceOperations {
/**
* Returns the name of the system reserved namespace
*
* @return the name of the system namespace
* @since 1.6.0
*/
String systemNamespace();
/**
* Returns the name of the default namespace
*
* @return the name of the default namespace
* @since 1.6.0
*/
String defaultNamespace();
/**
* Retrieve a list of namespaces in Accumulo.
*
* @return List of namespaces in accumulo
* @throws AccumuloException
* if a general error occurs
* @throws AccumuloSecurityException
* if the user does not have permission
* @since 1.6.0
*/
SortedSet<String> list() throws AccumuloException, AccumuloSecurityException;
/**
* A method to check if a namespace exists in Accumulo.
*
* @param namespace
* the name of the namespace
* @return true if the namespace exists
* @throws AccumuloException
* if a general error occurs
* @throws AccumuloSecurityException
* if the user does not have permission
* @since 1.6.0
*/
boolean exists(String namespace) throws AccumuloException, AccumuloSecurityException;
/**
* Create an empty namespace with no initial configuration. Valid names for a namespace contain
* letters, numbers, and the underscore character.
*
* @param namespace
* the name of the namespace
* @throws AccumuloException
* if a general error occurs
* @throws AccumuloSecurityException
* if the user does not have permission
* @throws NamespaceExistsException
* if the specified namespace already exists
* @since 1.6.0
*/
void create(String namespace)
throws AccumuloException, AccumuloSecurityException, NamespaceExistsException;
/**
* Delete an empty namespace
*
* @param namespace
* the name of the namespace
* @throws AccumuloException
* if a general error occurs
* @throws AccumuloSecurityException
* if the user does not have permission
* @throws NamespaceNotFoundException
* if the specified namespace doesn't exist
* @throws NamespaceNotEmptyException
* if the namespaces still contains tables
* @since 1.6.0
*/
void delete(String namespace) throws AccumuloException, AccumuloSecurityException,
NamespaceNotFoundException, NamespaceNotEmptyException;
/**
* Rename a namespace
*
* @param oldNamespaceName
* the old namespace name
* @param newNamespaceName
* the new namespace name
* @throws AccumuloException
* if a general error occurs
* @throws AccumuloSecurityException
* if the user does not have permission
* @throws NamespaceNotFoundException
* if the old namespace does not exist
* @throws NamespaceExistsException
* if the new namespace already exists
* @since 1.6.0
*/
void rename(String oldNamespaceName, String newNamespaceName) throws AccumuloException,
AccumuloSecurityException, NamespaceNotFoundException, NamespaceExistsException;
/**
* Sets a property on a namespace which applies to all tables in the namespace. Note that it may
* take a few seconds to propagate the change everywhere.
*
* @param namespace
* the name of the namespace
* @param property
* the name of a per-table property
* @param value
* the value to set a per-table property to
* @throws AccumuloException
* if a general error occurs
* @throws AccumuloSecurityException
* if the user does not have permission
* @throws NamespaceNotFoundException
* if the specified namespace doesn't exist
* @since 1.6.0
*/
void setProperty(String namespace, String property, String value)
throws AccumuloException, AccumuloSecurityException, NamespaceNotFoundException;
/**
* Removes a property from a namespace. Note that it may take a few seconds to propagate the
* change everywhere.
*
* @param namespace
* the name of the namespace
* @param property
* the name of a per-table property
* @throws AccumuloException
* if a general error occurs
* @throws AccumuloSecurityException
* if the user does not have permission
* @throws NamespaceNotFoundException
* if the specified namespace doesn't exist
* @since 1.6.0
*/
void removeProperty(String namespace, String property)
throws AccumuloException, AccumuloSecurityException, NamespaceNotFoundException;
/**
* Gets properties of a namespace, which are inherited by tables in this namespace. Note that
* recently changed properties may not be available immediately.
*
* @param namespace
* the name of the namespace
* @return all properties visible by this namespace (system and per-table properties). Note that
* recently changed properties may not be visible immediately.
* @throws AccumuloException
* if a general error occurs
* @throws AccumuloSecurityException
* if the user does not have permission
* @throws NamespaceNotFoundException
* if the specified namespace doesn't exist
* @since 1.6.0
*/
Iterable<Entry<String,String>> getProperties(String namespace)
throws AccumuloException, AccumuloSecurityException, NamespaceNotFoundException;
/**
* Get a mapping of namespace name to internal namespace id.
*
* @return the map from namespace name to internal namespace id
* @throws AccumuloException
* if a general error occurs
* @throws AccumuloSecurityException
* if the user does not have permission
* @since 1.6.0
*/
Map<String,String> namespaceIdMap() throws AccumuloException, AccumuloSecurityException;
/**
* Add an iterator to a namespace on all scopes.
*
* @param namespace
* the name of the namespace
* @param setting
* object specifying the properties of the iterator
* @throws AccumuloException
* if a general error occurs
* @throws AccumuloSecurityException
* if the user does not have permission
* @throws NamespaceNotFoundException
* if the specified namespace doesn't exist
* @since 1.6.0
*/
void attachIterator(String namespace, IteratorSetting setting)
throws AccumuloException, AccumuloSecurityException, NamespaceNotFoundException;
/**
* Add an iterator to a namespace on the given scopes.
*
* @param namespace
* the name of the namespace
* @param setting
* object specifying the properties of the iterator
* @param scopes
* the set of scopes the iterator should apply to
* @throws AccumuloException
* if a general error occurs
* @throws AccumuloSecurityException
* if the user does not have permission
* @throws NamespaceNotFoundException
* if the specified namespace doesn't exist
* @since 1.6.0
*/
void attachIterator(String namespace, IteratorSetting setting, EnumSet<IteratorScope> scopes)
throws AccumuloException, AccumuloSecurityException, NamespaceNotFoundException;
/**
* Remove an iterator from a namespace by name.
*
* @param namespace
* the name of the namespace
* @param name
* the name of the iterator
* @param scopes
* the scopes of the iterator
* @throws AccumuloException
* if a general error occurs
* @throws AccumuloSecurityException
* if the user does not have permission
* @throws NamespaceNotFoundException
* if the specified namespace doesn't exist
* @since 1.6.0
*/
void removeIterator(String namespace, String name, EnumSet<IteratorScope> scopes)
throws AccumuloException, AccumuloSecurityException, NamespaceNotFoundException;
/**
* Get the settings for an iterator.
*
* @param namespace
* the name of the namespace
* @param name
* the name of the iterator
* @param scope
* the scope of the iterator
* @return the settings for this iterator
* @throws AccumuloException
* if a general error occurs
* @throws AccumuloSecurityException
* if the user does not have permission
* @throws NamespaceNotFoundException
* if the specified namespace doesn't exist
* @since 1.6.0
*/
IteratorSetting getIteratorSetting(String namespace, String name, IteratorScope scope)
throws AccumuloException, AccumuloSecurityException, NamespaceNotFoundException;
/**
* Get a list of iterators for this namespace.
*
* @param namespace
* the name of the namespace
* @return a set of iterator names
* @throws AccumuloException
* if a general error occurs
* @throws AccumuloSecurityException
* if the user does not have permission
* @throws NamespaceNotFoundException
* if the specified namespace doesn't exist
* @since 1.6.0
*/
Map<String,EnumSet<IteratorScope>> listIterators(String namespace)
throws AccumuloException, AccumuloSecurityException, NamespaceNotFoundException;
/**
* Check whether a given iterator configuration conflicts with existing configuration; in
* particular, determine if the name or priority are already in use for the specified scopes. If
* so, an IllegalArgumentException is thrown, wrapped in an AccumuloException.
*
* @param namespace
* the name of the namespace
* @param setting
* object specifying the properties of the iterator
* @param scopes
* the scopes of the iterator
* @throws AccumuloException
* if a general error occurs
* @throws AccumuloSecurityException
* if the user does not have permission
* @throws NamespaceNotFoundException
* if the specified namespace doesn't exist
* @since 1.6.0
*/
void checkIteratorConflicts(String namespace, IteratorSetting setting,
EnumSet<IteratorScope> scopes)
throws AccumuloException, AccumuloSecurityException, NamespaceNotFoundException;
/**
* Add a new constraint to a namespace.
*
* @param namespace
* the name of the namespace
* @param constraintClassName
* the full name of the constraint class
* @return the unique id number assigned to the constraint
* @throws AccumuloException
* if a general error occurs
* @throws AccumuloSecurityException
* if the user does not have permission
* @throws NamespaceNotFoundException
* if the specified namespace doesn't exist
* @since 1.6.0
*/
int addConstraint(String namespace, String constraintClassName)
throws AccumuloException, AccumuloSecurityException, NamespaceNotFoundException;
/**
* Remove a constraint from a namespace.
*
* @param namespace
* the name of the namespace
* @param id
* the unique id number assigned to the constraint
* @throws AccumuloException
* if a general error occurs
* @throws AccumuloSecurityException
* if the user does not have permission
* @throws NamespaceNotFoundException
* if the specified namespace doesn't exist
* @since 1.6.0
*/
void removeConstraint(String namespace, int id)
throws AccumuloException, AccumuloSecurityException, NamespaceNotFoundException;
/**
* List constraints on a namespace with their assigned numbers.
*
* @param namespace
* the name of the namespace
* @return a map from constraint class name to assigned number
* @throws AccumuloException
* if a general error occurs
* @throws AccumuloSecurityException
* if the user does not have permission
* @throws NamespaceNotFoundException
* if the specified namespace doesn't exist
* @since 1.6.0
*/
Map<String,Integer> listConstraints(String namespace)
throws AccumuloException, AccumuloSecurityException, NamespaceNotFoundException;
/**
* Test to see if the instance can load the given class as the given type. This check uses the
* table classpath property if it is set.
*
* @param namespace
* the name of the namespace
* @param className
* the class to try to load
* @param asTypeName
* the interface or superclass the given class is attempted to load as
* @return true if the instance can load the given class as the given type, false otherwise
* @throws AccumuloException
* if a general error occurs
* @throws AccumuloSecurityException
* if the user does not have permission
* @throws NamespaceNotFoundException
* if the specified namespace doesn't exist
* @since 1.6.0
*/
boolean testClassLoad(String namespace, String className, String asTypeName)
throws AccumuloException, AccumuloSecurityException, NamespaceNotFoundException;
}