org.apache.hadoop.registry.client.api.RegistryOperations.java Source code

Java tutorial

Introduction

Here is the source code for org.apache.hadoop.registry.client.api.RegistryOperations.java

Source

/*
 * 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();
}