blob: c51bcf7465d7e300eeeb5519e6af7d7d9a478799 [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.hadoop.registry.client.api;
import org.apache.hadoop.classification.InterfaceAudience;
import org.apache.hadoop.classification.InterfaceStability;
import org.apache.hadoop.fs.FileAlreadyExistsException;
import org.apache.hadoop.fs.PathIsNotEmptyDirectoryException;
import org.apache.hadoop.fs.PathNotFoundException;
import org.apache.hadoop.service.Service;
import org.apache.hadoop.registry.client.exceptions.InvalidPathnameException;
import org.apache.hadoop.registry.client.exceptions.InvalidRecordException;
import org.apache.hadoop.registry.client.exceptions.NoRecordException;
import org.apache.hadoop.registry.client.types.RegistryPathStatus;
import org.apache.hadoop.registry.client.types.ServiceRecord;
import java.io.IOException;
import java.util.List;
/**
* Registry Operations
*/
@InterfaceAudience.Public
@InterfaceStability.Evolving
public interface RegistryOperations extends Service {
/**
* Create a path.
*
* It is not an error if the path exists already, be it empty or not.
*
* The createParents flag also requests creating the parents.
* As entries in the registry can hold data while still having
* child entries, it is not an error if any of the parent path
* elements have service records.
*
* @param path path to create
* @param createParents also create the parents.
* @throws PathNotFoundException parent path is not in the registry.
* @throws InvalidPathnameException path name is invalid.
* @throws IOException Any other IO Exception.
* @return true if the path was created, false if it existed.
*/
boolean mknode(String path, boolean createParents)
throws PathNotFoundException,
InvalidPathnameException,
IOException;
/**
* Bind a path in the registry to a service record
* @param path path to service record
* @param record service record service record to create/update
* @param flags bind flags
* @throws PathNotFoundException the parent path does not exist
* @throws FileAlreadyExistsException path exists but create flags
* do not include "overwrite"
* @throws InvalidPathnameException path name is invalid.
* @throws IOException Any other IO Exception.
*/
void bind(String path, ServiceRecord record, int flags)
throws PathNotFoundException,
FileAlreadyExistsException,
InvalidPathnameException,
IOException;
/**
* Resolve the record at a path
* @param path path to an entry containing a {@link ServiceRecord}
* @return the record
* @throws PathNotFoundException path is not in the registry.
* @throws NoRecordException if there is not a service record
* @throws InvalidRecordException if there was a service record but it could
* not be parsed.
* @throws IOException Any other IO Exception
*/
ServiceRecord resolve(String path)
throws PathNotFoundException,
NoRecordException,
InvalidRecordException,
IOException;
/**
* Get the status of a path
* @param path path to query
* @return the status of the path
* @throws PathNotFoundException path is not in the registry.
* @throws InvalidPathnameException the path is invalid.
* @throws IOException Any other IO Exception
*/
RegistryPathStatus stat(String path)
throws PathNotFoundException,
InvalidPathnameException,
IOException;
/**
* Probe for a path existing.
* This is equivalent to {@link #stat(String)} with
* any failure downgraded to a
* @param path path to query
* @return true if the path was found
* @throws IOException
*/
boolean exists(String path) throws IOException;
/**
* List all entries under a registry path, returning the relative names
* of the entries.
* @param path path to query
* @return a possibly empty list of the short path names of
* child entries.
* @throws PathNotFoundException
* @throws InvalidPathnameException
* @throws IOException
*/
List<String> list(String path) throws
PathNotFoundException,
InvalidPathnameException,
IOException;
/**
* Delete a path.
*
* If the operation returns without an error then the entry has been
* deleted.
* @param path path delete recursively
* @param recursive recursive flag
* @throws PathNotFoundException path is not in the registry.
* @throws InvalidPathnameException the path is invalid.
* @throws PathIsNotEmptyDirectoryException path has child entries, but
* recursive is false.
* @throws IOException Any other IO Exception
*
*/
void delete(String path, boolean recursive)
throws PathNotFoundException,
PathIsNotEmptyDirectoryException,
InvalidPathnameException,
IOException;
/**
* Add a new write access entry to be added to node permissions in all
* future write operations of a session connected to a secure registry.
*
* This does not grant the session any more rights: if it lacked any write
* access, it will still be unable to manipulate the registry.
*
* In an insecure cluster, this operation has no effect.
* @param id ID to use
* @param pass password
* @return true if the accessor was added: that is, the registry connection
* uses permissions to manage access
* @throws IOException on any failure to build the digest
*/
boolean addWriteAccessor(String id, String pass) throws IOException;
/**
* Clear all write accessors.
*
* At this point all standard permissions/ACLs are retained,
* including any set on behalf of the user
* Only accessors added via {@link #addWriteAccessor(String, String)}
* are removed.
*/
public void clearWriteAccessors();
}