http://git-wip-us.apache.org/repos/asf/hadoop/blob/e2a9fa84/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-registry/src/main/java/org/apache/hadoop/registry/client/binding/RegistryUtils.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-registry/src/main/java/org/apache/hadoop/registry/client/binding/RegistryUtils.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-registry/src/main/java/org/apache/hadoop/registry/client/binding/RegistryUtils.java deleted file mode 100644 index 1b839c2..0000000 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-registry/src/main/java/org/apache/hadoop/registry/client/binding/RegistryUtils.java +++ /dev/null @@ -1,399 +0,0 @@ -/* - * 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.binding; - -import com.google.common.annotations.VisibleForTesting; -import com.google.common.base.Preconditions; -import org.apache.commons.lang3.StringUtils; -import org.apache.hadoop.classification.InterfaceAudience; -import org.apache.hadoop.classification.InterfaceStability; -import org.apache.hadoop.fs.PathNotFoundException; -import org.apache.hadoop.security.UserGroupInformation; -import org.apache.hadoop.registry.client.api.RegistryConstants; -import org.apache.hadoop.registry.client.api.RegistryOperations; -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.impl.zk.RegistryInternalConstants; -import org.apache.hadoop.registry.client.types.RegistryPathStatus; -import org.apache.hadoop.registry.client.types.ServiceRecord; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import static org.apache.hadoop.registry.client.binding.RegistryPathUtils.*; - -import java.io.EOFException; -import java.io.IOException; -import java.util.Collection; -import java.util.HashMap; -import java.util.List; -import java.util.Locale; -import java.util.Map; - -/** - * Utility methods for working with a registry. - */ [email protected] [email protected] -public class RegistryUtils { - private static final Logger LOG = - LoggerFactory.getLogger(RegistryUtils.class); - - /** - * Buld the user path -switches to the system path if the user is "". - * It also cross-converts the username to ascii via punycode - * @param username username or "" - * @return the path to the user - */ - public static String homePathForUser(String username) { - Preconditions.checkArgument(username != null, "null user"); - - // catch recursion - if (username.startsWith(RegistryConstants.PATH_USERS)) { - return username; - } - if (username.isEmpty()) { - return RegistryConstants.PATH_SYSTEM_SERVICES; - } - - // convert username to registry name - String convertedName = convertUsername(username); - - return RegistryPathUtils.join(RegistryConstants.PATH_USERS, - encodeForRegistry(convertedName)); - } - - /** - * Convert the username to that which can be used for registry - * entries. Lower cases it, - * Strip the kerberos realm off a username if needed, and any "/" hostname - * entries - * @param username user - * @return the converted username - */ - public static String convertUsername(String username) { - String converted = - org.apache.hadoop.util.StringUtils.toLowerCase(username); - int atSymbol = converted.indexOf('@'); - if (atSymbol > 0) { - converted = converted.substring(0, atSymbol); - } - int slashSymbol = converted.indexOf('/'); - if (slashSymbol > 0) { - converted = converted.substring(0, slashSymbol); - } - return converted; - } - - /** - * Create a service classpath - * @param user username or "" - * @param serviceClass service name - * @return a full path - */ - public static String serviceclassPath(String user, - String serviceClass) { - String services = join(homePathForUser(user), - RegistryConstants.PATH_USER_SERVICES); - return join(services, - serviceClass); - } - - /** - * Create a path to a service under a user and service class - * @param user username or "" - * @param serviceClass service name - * @param serviceName service name unique for that user and service class - * @return a full path - */ - public static String servicePath(String user, - String serviceClass, - String serviceName) { - - return join( - serviceclassPath(user, serviceClass), - serviceName); - } - - /** - * Create a path for listing components under a service - * @param user username or "" - * @param serviceClass service name - * @param serviceName service name unique for that user and service class - * @return a full path - */ - public static String componentListPath(String user, - String serviceClass, String serviceName) { - - return join(servicePath(user, serviceClass, serviceName), - RegistryConstants.SUBPATH_COMPONENTS); - } - - /** - * Create the path to a service record for a component - * @param user username or "" - * @param serviceClass service name - * @param serviceName service name unique for that user and service class - * @param componentName unique name/ID of the component - * @return a full path - */ - public static String componentPath(String user, - String serviceClass, String serviceName, String componentName) { - - return join( - componentListPath(user, serviceClass, serviceName), - componentName); - } - - /** - * List service records directly under a path - * @param registryOperations registry operations instance - * @param path path to list - * @return a mapping of the service records that were resolved, indexed - * by their full path - * @throws IOException - */ - public static Map<String, ServiceRecord> listServiceRecords( - RegistryOperations registryOperations, - String path) throws IOException { - Map<String, RegistryPathStatus> children = - statChildren(registryOperations, path); - return extractServiceRecords(registryOperations, - path, - children.values()); - } - - /** - * List children of a directory and retrieve their - * {@link RegistryPathStatus} values. - * <p> - * This is not an atomic operation; A child may be deleted - * during the iteration through the child entries. If this happens, - * the <code>PathNotFoundException</code> is caught and that child - * entry ommitted. - * - * @param path path - * @return a possibly empty map of child entries listed by - * their short name. - * @throws PathNotFoundException path is not in the registry. - * @throws InvalidPathnameException the path is invalid. - * @throws IOException Any other IO Exception - */ - public static Map<String, RegistryPathStatus> statChildren( - RegistryOperations registryOperations, - String path) - throws PathNotFoundException, - InvalidPathnameException, - IOException { - List<String> childNames = registryOperations.list(path); - Map<String, RegistryPathStatus> results = - new HashMap<String, RegistryPathStatus>(); - for (String childName : childNames) { - String child = join(path, childName); - try { - RegistryPathStatus stat = registryOperations.stat(child); - results.put(childName, stat); - } catch (PathNotFoundException pnfe) { - if (LOG.isDebugEnabled()) { - LOG.debug("stat failed on {}: moved? {}", child, pnfe, pnfe); - } - // and continue - } - } - return results; - } - - /** - * Get the home path of the current user. - * <p> - * In an insecure cluster, the environment variable - * <code>HADOOP_USER_NAME</code> is queried <i>first</i>. - * <p> - * This means that in a YARN container where the creator set this - * environment variable to propagate their identity, the defined - * user name is used in preference to the actual user. - * <p> - * In a secure cluster, the kerberos identity of the current user is used. - * @return a path for the current user's home dir. - * @throws RuntimeException if the current user identity cannot be determined - * from the OS/kerberos. - */ - public static String homePathForCurrentUser() { - String shortUserName = currentUsernameUnencoded(); - return homePathForUser(shortUserName); - } - - /** - * Get the current username, before any encoding has been applied. - * @return the current user from the kerberos identity, falling back - * to the user and/or env variables. - */ - private static String currentUsernameUnencoded() { - String env_hadoop_username = System.getenv( - RegistryInternalConstants.HADOOP_USER_NAME); - return getCurrentUsernameUnencoded(env_hadoop_username); - } - - /** - * Get the current username, using the value of the parameter - * <code>env_hadoop_username</code> if it is set on an insecure cluster. - * This ensures that the username propagates correctly across processes - * started by YARN. - * <p> - * This method is primarly made visible for testing. - * @param env_hadoop_username the environment variable - * @return the selected username - * @throws RuntimeException if there is a problem getting the short user - * name of the current user. - */ - @VisibleForTesting - public static String getCurrentUsernameUnencoded(String env_hadoop_username) { - String shortUserName = null; - if (!UserGroupInformation.isSecurityEnabled()) { - shortUserName = env_hadoop_username; - } - if (StringUtils.isEmpty(shortUserName)) { - try { - shortUserName = UserGroupInformation.getCurrentUser().getShortUserName(); - } catch (IOException e) { - throw new RuntimeException(e); - } - } - return shortUserName; - } - - /** - * Get the current user path formatted for the registry - * <p> - * In an insecure cluster, the environment variable - * <code>HADOOP_USER_NAME </code> is queried <i>first</i>. - * <p> - * This means that in a YARN container where the creator set this - * environment variable to propagate their identity, the defined - * user name is used in preference to the actual user. - * <p> - * In a secure cluster, the kerberos identity of the current user is used. - * @return the encoded shortname of the current user - * @throws RuntimeException if the current user identity cannot be determined - * from the OS/kerberos. - * - */ - public static String currentUser() { - String shortUserName = currentUsernameUnencoded(); - return registryUser(shortUserName); - } - - /** - * Convert the given user name formatted for the registry. - * - * @param shortUserName - * @return converted user name - */ - public static String registryUser(String shortUserName) { - String encodedName = encodeForRegistry(shortUserName); - // DNS name doesn't allow "_", replace it with "-" - encodedName = RegistryUtils.convertUsername(encodedName); - return encodedName.replace("_", "-"); - } - - /** - * Extract all service records under a list of stat operations...this - * skips entries that are too short or simply not matching - * @param operations operation support for fetches - * @param parentpath path of the parent of all the entries - * @param stats Collection of stat results - * @return a possibly empty map of fullpath:record. - * @throws IOException for any IO Operation that wasn't ignored. - */ - public static Map<String, ServiceRecord> extractServiceRecords( - RegistryOperations operations, - String parentpath, - Collection<RegistryPathStatus> stats) throws IOException { - Map<String, ServiceRecord> results = new HashMap<String, ServiceRecord>(stats.size()); - for (RegistryPathStatus stat : stats) { - if (stat.size > ServiceRecord.RECORD_TYPE.length()) { - // maybe has data - String path = join(parentpath, stat.path); - try { - ServiceRecord serviceRecord = operations.resolve(path); - results.put(path, serviceRecord); - } catch (EOFException ignored) { - if (LOG.isDebugEnabled()) { - LOG.debug("data too short for {}", path); - } - } catch (InvalidRecordException record) { - if (LOG.isDebugEnabled()) { - LOG.debug("Invalid record at {}", path); - } - } catch (NoRecordException record) { - if (LOG.isDebugEnabled()) { - LOG.debug("No record at {}", path); - } - } - } - } - return results; - } - - /** - * Extract all service records under a list of stat operations...this - * non-atomic action skips entries that are too short or simply not matching. - * <p> - * @param operations operation support for fetches - * @param parentpath path of the parent of all the entries - * @return a possibly empty map of fullpath:record. - * @throws IOException for any IO Operation that wasn't ignored. - */ - public static Map<String, ServiceRecord> extractServiceRecords( - RegistryOperations operations, - String parentpath, - Map<String , RegistryPathStatus> stats) throws IOException { - return extractServiceRecords(operations, parentpath, stats.values()); - } - - - /** - * Extract all service records under a list of stat operations...this - * non-atomic action skips entries that are too short or simply not matching. - * <p> - * @param operations operation support for fetches - * @param parentpath path of the parent of all the entries - * @return a possibly empty map of fullpath:record. - * @throws IOException for any IO Operation that wasn't ignored. - */ - public static Map<String, ServiceRecord> extractServiceRecords( - RegistryOperations operations, - String parentpath) throws IOException { - return - extractServiceRecords(operations, - parentpath, - statChildren(operations, parentpath).values()); - } - - - - /** - * Static instance of service record marshalling - */ - public static class ServiceRecordMarshal extends JsonSerDeser<ServiceRecord> { - public ServiceRecordMarshal() { - super(ServiceRecord.class); - } - } -}
http://git-wip-us.apache.org/repos/asf/hadoop/blob/e2a9fa84/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-registry/src/main/java/org/apache/hadoop/registry/client/binding/package-info.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-registry/src/main/java/org/apache/hadoop/registry/client/binding/package-info.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-registry/src/main/java/org/apache/hadoop/registry/client/binding/package-info.java deleted file mode 100644 index f99aa71..0000000 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-registry/src/main/java/org/apache/hadoop/registry/client/binding/package-info.java +++ /dev/null @@ -1,22 +0,0 @@ -/* - * 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. - */ - -/** - * Registry binding utility classes. - */ -package org.apache.hadoop.registry.client.binding; http://git-wip-us.apache.org/repos/asf/hadoop/blob/e2a9fa84/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-registry/src/main/java/org/apache/hadoop/registry/client/exceptions/AuthenticationFailedException.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-registry/src/main/java/org/apache/hadoop/registry/client/exceptions/AuthenticationFailedException.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-registry/src/main/java/org/apache/hadoop/registry/client/exceptions/AuthenticationFailedException.java deleted file mode 100644 index aadb7fc..0000000 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-registry/src/main/java/org/apache/hadoop/registry/client/exceptions/AuthenticationFailedException.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * 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.exceptions; - -/** - * Exception raised when client access wasn't authenticated. - * That is: the credentials provided were incomplete or invalid. - */ -public class AuthenticationFailedException extends RegistryIOException { - public AuthenticationFailedException(String path, Throwable cause) { - super(path, cause); - } - - public AuthenticationFailedException(String path, String error) { - super(path, error); - } - - public AuthenticationFailedException(String path, - String error, - Throwable cause) { - super(path, error, cause); - } -} http://git-wip-us.apache.org/repos/asf/hadoop/blob/e2a9fa84/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-registry/src/main/java/org/apache/hadoop/registry/client/exceptions/InvalidPathnameException.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-registry/src/main/java/org/apache/hadoop/registry/client/exceptions/InvalidPathnameException.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-registry/src/main/java/org/apache/hadoop/registry/client/exceptions/InvalidPathnameException.java deleted file mode 100644 index c984f41..0000000 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-registry/src/main/java/org/apache/hadoop/registry/client/exceptions/InvalidPathnameException.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * 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.exceptions; - -import org.apache.hadoop.classification.InterfaceAudience; -import org.apache.hadoop.classification.InterfaceStability; - -/** - * A path name was invalid. This is raised when a path string has - * characters in it that are not permitted. - */ [email protected] [email protected] -public class InvalidPathnameException extends RegistryIOException { - public InvalidPathnameException(String path, String message) { - super(path, message); - } - - public InvalidPathnameException(String path, - String message, - Throwable cause) { - super(path, message, cause); - } -} http://git-wip-us.apache.org/repos/asf/hadoop/blob/e2a9fa84/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-registry/src/main/java/org/apache/hadoop/registry/client/exceptions/InvalidRecordException.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-registry/src/main/java/org/apache/hadoop/registry/client/exceptions/InvalidRecordException.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-registry/src/main/java/org/apache/hadoop/registry/client/exceptions/InvalidRecordException.java deleted file mode 100644 index e4f545e..0000000 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-registry/src/main/java/org/apache/hadoop/registry/client/exceptions/InvalidRecordException.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * 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.exceptions; - -import org.apache.hadoop.classification.InterfaceAudience; -import org.apache.hadoop.classification.InterfaceStability; - -/** - * Raised if an attempt to parse a record failed. - * - */ [email protected] [email protected] -public class InvalidRecordException extends RegistryIOException { - - public InvalidRecordException(String path, String error) { - super(path, error); - } - - public InvalidRecordException(String path, - String error, - Throwable cause) { - super(path, error, cause); - } -} http://git-wip-us.apache.org/repos/asf/hadoop/blob/e2a9fa84/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-registry/src/main/java/org/apache/hadoop/registry/client/exceptions/NoChildrenForEphemeralsException.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-registry/src/main/java/org/apache/hadoop/registry/client/exceptions/NoChildrenForEphemeralsException.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-registry/src/main/java/org/apache/hadoop/registry/client/exceptions/NoChildrenForEphemeralsException.java deleted file mode 100644 index 24070a5..0000000 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-registry/src/main/java/org/apache/hadoop/registry/client/exceptions/NoChildrenForEphemeralsException.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * 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.exceptions; - -import org.apache.hadoop.classification.InterfaceAudience; -import org.apache.hadoop.classification.InterfaceStability; - -/** - * This is a manifestation of the Zookeeper restrictions about - * what nodes may act as parents. - * - * Children are not allowed under ephemeral nodes. This is an aspect - * of ZK which isn't directly exposed to the registry API. It may - * surface if the registry is manipulated outside of the registry API. - */ [email protected] [email protected] -public class NoChildrenForEphemeralsException extends RegistryIOException { - public NoChildrenForEphemeralsException(String path, Throwable cause) { - super(path, cause); - } - - public NoChildrenForEphemeralsException(String path, String error) { - super(path, error); - } - - public NoChildrenForEphemeralsException(String path, - String error, - Throwable cause) { - super(path, error, cause); - } -} http://git-wip-us.apache.org/repos/asf/hadoop/blob/e2a9fa84/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-registry/src/main/java/org/apache/hadoop/registry/client/exceptions/NoPathPermissionsException.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-registry/src/main/java/org/apache/hadoop/registry/client/exceptions/NoPathPermissionsException.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-registry/src/main/java/org/apache/hadoop/registry/client/exceptions/NoPathPermissionsException.java deleted file mode 100644 index ce84f5b..0000000 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-registry/src/main/java/org/apache/hadoop/registry/client/exceptions/NoPathPermissionsException.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * 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.exceptions; - -import org.apache.hadoop.fs.PathIOException; - -/** - * Raised on path permission exceptions. - * <p> - * This is similar to PathIOException, except that exception doesn't let - */ -public class NoPathPermissionsException extends RegistryIOException { - public NoPathPermissionsException(String path, Throwable cause) { - super(path, cause); - } - - public NoPathPermissionsException(String path, String error) { - super(path, error); - } - - public NoPathPermissionsException(String path, String error, Throwable cause) { - super(path, error, cause); - } - - public NoPathPermissionsException(String message, - PathIOException cause) { - super(message, cause); - } -} http://git-wip-us.apache.org/repos/asf/hadoop/blob/e2a9fa84/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-registry/src/main/java/org/apache/hadoop/registry/client/exceptions/NoRecordException.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-registry/src/main/java/org/apache/hadoop/registry/client/exceptions/NoRecordException.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-registry/src/main/java/org/apache/hadoop/registry/client/exceptions/NoRecordException.java deleted file mode 100644 index b81b9d4..0000000 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-registry/src/main/java/org/apache/hadoop/registry/client/exceptions/NoRecordException.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * 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.exceptions; - -import org.apache.hadoop.classification.InterfaceAudience; -import org.apache.hadoop.classification.InterfaceStability; -import org.apache.hadoop.registry.client.types.ServiceRecord; - -/** - * Raised if there is no {@link ServiceRecord} resolved at the end - * of the specified path. - * <p> - * There may be valid data of some form at the end of the path, but it does - * not appear to be a Service Record. - */ [email protected] [email protected] -public class NoRecordException extends RegistryIOException { - - public NoRecordException(String path, String error) { - super(path, error); - } - - public NoRecordException(String path, - String error, - Throwable cause) { - super(path, error, cause); - } -} http://git-wip-us.apache.org/repos/asf/hadoop/blob/e2a9fa84/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-registry/src/main/java/org/apache/hadoop/registry/client/exceptions/RegistryIOException.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-registry/src/main/java/org/apache/hadoop/registry/client/exceptions/RegistryIOException.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-registry/src/main/java/org/apache/hadoop/registry/client/exceptions/RegistryIOException.java deleted file mode 100644 index ca966db..0000000 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-registry/src/main/java/org/apache/hadoop/registry/client/exceptions/RegistryIOException.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * 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.exceptions; - -import org.apache.hadoop.classification.InterfaceAudience; -import org.apache.hadoop.classification.InterfaceStability; -import org.apache.hadoop.fs.PathIOException; - -/** - * Base exception for registry operations. - * <p> - * These exceptions include the path of the failing operation wherever possible; - * this can be retrieved via {@link PathIOException#getPath()}. - */ [email protected] [email protected] -public class RegistryIOException extends PathIOException { - - /** - * Build an exception from any other Path IO Exception. - * This propagates the path of the original exception - * @param message more specific text - * @param cause cause - */ - public RegistryIOException(String message, PathIOException cause) { - super(cause.getPath() != null ? cause.getPath().toString() : "", - message, - cause); - } - - public RegistryIOException(String path, Throwable cause) { - super(path, cause); - } - - public RegistryIOException(String path, String error) { - super(path, error); - } - - public RegistryIOException(String path, String error, Throwable cause) { - super(path, error, cause); - } -} http://git-wip-us.apache.org/repos/asf/hadoop/blob/e2a9fa84/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-registry/src/main/java/org/apache/hadoop/registry/client/exceptions/package-info.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-registry/src/main/java/org/apache/hadoop/registry/client/exceptions/package-info.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-registry/src/main/java/org/apache/hadoop/registry/client/exceptions/package-info.java deleted file mode 100644 index 7d9c8ad..0000000 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-registry/src/main/java/org/apache/hadoop/registry/client/exceptions/package-info.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * 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. - */ - -/** - * Registry Service Exceptions - * <p> - * These are the Registry-specific exceptions that may be raised during - * Registry operations. - * <p> - * Other exceptions may be raised, especially <code>IOExceptions</code> - * triggered by network problems, and <code>IllegalArgumentException</code> - * exceptions that may be raised if invalid (often null) arguments are passed - * to a method call. - * <p> - * All exceptions in this package are derived from - * {@link org.apache.hadoop.registry.client.exceptions.RegistryIOException} - */ -package org.apache.hadoop.registry.client.exceptions; http://git-wip-us.apache.org/repos/asf/hadoop/blob/e2a9fa84/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-registry/src/main/java/org/apache/hadoop/registry/client/impl/FSRegistryOperationsService.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-registry/src/main/java/org/apache/hadoop/registry/client/impl/FSRegistryOperationsService.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-registry/src/main/java/org/apache/hadoop/registry/client/impl/FSRegistryOperationsService.java deleted file mode 100644 index d8cadbf..0000000 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-registry/src/main/java/org/apache/hadoop/registry/client/impl/FSRegistryOperationsService.java +++ /dev/null @@ -1,249 +0,0 @@ -/** - * 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.impl; - -import java.io.File; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; - -import org.apache.commons.lang3.NotImplementedException; -import org.apache.hadoop.conf.Configuration; -import org.apache.hadoop.fs.FSDataInputStream; -import org.apache.hadoop.fs.FSDataOutputStream; -import org.apache.hadoop.fs.FileAlreadyExistsException; -import org.apache.hadoop.fs.FileStatus; -import org.apache.hadoop.fs.FileSystem; -import org.apache.hadoop.fs.Path; -import org.apache.hadoop.fs.PathIsNotEmptyDirectoryException; -import org.apache.hadoop.fs.PathNotFoundException; -import org.apache.hadoop.registry.client.api.BindFlags; -import org.apache.hadoop.registry.client.api.RegistryOperations; -import org.apache.hadoop.registry.client.binding.RegistryTypeUtils; -import org.apache.hadoop.registry.client.binding.RegistryUtils; -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 org.apache.hadoop.service.CompositeService; -import org.apache.hadoop.yarn.exceptions.YarnRuntimeException; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.google.common.annotations.VisibleForTesting; -import com.google.common.base.Preconditions; - -/** - * Filesystem-based implementation of RegistryOperations. This class relies - * entirely on the configured FS for security and does no extra checks. - */ -public class FSRegistryOperationsService extends CompositeService - implements RegistryOperations { - - private FileSystem fs; - private static final Logger LOG = - LoggerFactory.getLogger(FSRegistryOperationsService.class); - private final RegistryUtils.ServiceRecordMarshal serviceRecordMarshal = - new RegistryUtils.ServiceRecordMarshal(); - - public FSRegistryOperationsService() { - super(FSRegistryOperationsService.class.getName()); - } - - @VisibleForTesting - public FileSystem getFs() { - return this.fs; - } - - @Override - protected void serviceInit(Configuration conf) { - try { - this.fs = FileSystem.get(conf); - LOG.info("Initialized Yarn-registry with Filesystem " - + fs.getClass().getCanonicalName()); - } catch (IOException e) { - LOG.error("Failed to get FileSystem for registry", e); - throw new YarnRuntimeException(e); - } - } - - private Path makePath(String path) { - return new Path(path); - } - - private Path formatDataPath(String basePath) { - return Path.mergePaths(new Path(basePath), new Path("/_record")); - } - - private String relativize(String basePath, String childPath) { - String relative = new File(basePath).toURI() - .relativize(new File(childPath).toURI()).getPath(); - return relative; - } - - @Override - public boolean mknode(String path, boolean createParents) - throws PathNotFoundException, InvalidPathnameException, IOException { - Path registryPath = makePath(path); - - // getFileStatus throws FileNotFound if the path doesn't exist. If the - // file already exists, return. - try { - fs.getFileStatus(registryPath); - return false; - } catch (FileNotFoundException e) { - } - - if (createParents) { - // By default, mkdirs creates any parent dirs it needs - fs.mkdirs(registryPath); - } else { - FileStatus parentStatus = null; - - if (registryPath.getParent() != null) { - parentStatus = fs.getFileStatus(registryPath.getParent()); - } - - if (registryPath.getParent() == null || parentStatus.isDirectory()) { - fs.mkdirs(registryPath); - } else { - throw new PathNotFoundException("no parent for " + path); - } - } - return true; - } - - @Override - public void bind(String path, ServiceRecord record, int flags) - throws PathNotFoundException, FileAlreadyExistsException, - InvalidPathnameException, IOException { - - // Preserve same overwrite semantics as ZK implementation - Preconditions.checkArgument(record != null, "null record"); - RegistryTypeUtils.validateServiceRecord(path, record); - - Path dataPath = formatDataPath(path); - Boolean overwrite = ((flags & BindFlags.OVERWRITE) != 0); - if (fs.exists(dataPath) && !overwrite) { - throw new FileAlreadyExistsException(); - } else { - // Either the file doesn't exist, or it exists and we're - // overwriting. Create overwrites by default and creates parent dirs if - // needed. - FSDataOutputStream stream = fs.create(dataPath); - byte[] bytes = serviceRecordMarshal.toBytes(record); - stream.write(bytes); - stream.close(); - LOG.info("Bound record to path " + dataPath); - } - } - - @Override - public ServiceRecord resolve(String path) throws PathNotFoundException, - NoRecordException, InvalidRecordException, IOException { - // Read the entire file into byte array, should be small metadata - - Long size = fs.getFileStatus(formatDataPath(path)).getLen(); - byte[] bytes = new byte[size.intValue()]; - - FSDataInputStream instream = fs.open(formatDataPath(path)); - int bytesRead = instream.read(bytes); - instream.close(); - - if (bytesRead < size) { - throw new InvalidRecordException(path, - "Expected " + size + " bytes, but read " + bytesRead); - } - - // Unmarshal, check, and return - ServiceRecord record = serviceRecordMarshal.fromBytes(path, bytes); - RegistryTypeUtils.validateServiceRecord(path, record); - return record; - } - - @Override - public RegistryPathStatus stat(String path) - throws PathNotFoundException, InvalidPathnameException, IOException { - FileStatus fstat = fs.getFileStatus(formatDataPath(path)); - int numChildren = fs.listStatus(makePath(path)).length; - - RegistryPathStatus regstat = - new RegistryPathStatus(fstat.getPath().toString(), - fstat.getModificationTime(), fstat.getLen(), numChildren); - - return regstat; - } - - @Override - public boolean exists(String path) throws IOException { - return fs.exists(makePath(path)); - } - - @Override - public List<String> list(String path) - throws PathNotFoundException, InvalidPathnameException, IOException { - FileStatus[] statArray = fs.listStatus(makePath(path)); - String basePath = fs.getFileStatus(makePath(path)).getPath().toString(); - - List<String> paths = new ArrayList<String>(); - - FileStatus stat; - // Only count dirs; the _record files are hidden. - for (int i = 0; i < statArray.length; i++) { - stat = statArray[i]; - if (stat.isDirectory()) { - String relativePath = relativize(basePath, stat.getPath().toString()); - paths.add(relativePath); - } - } - - return paths; - } - - @Override - public void delete(String path, boolean recursive) - throws PathNotFoundException, PathIsNotEmptyDirectoryException, - InvalidPathnameException, IOException { - Path dirPath = makePath(path); - if (!fs.exists(dirPath)) { - throw new PathNotFoundException(path); - } - - // If recursive == true, or dir is empty, delete. - if (recursive || list(path).isEmpty()) { - fs.delete(makePath(path), true); - return; - } - - throw new PathIsNotEmptyDirectoryException(path); - } - - @Override - public boolean addWriteAccessor(String id, String pass) throws IOException { - throw new NotImplementedException("Code is not implemented"); - } - - @Override - public void clearWriteAccessors() { - throw new NotImplementedException("Code is not implemented"); - } - -} http://git-wip-us.apache.org/repos/asf/hadoop/blob/e2a9fa84/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-registry/src/main/java/org/apache/hadoop/registry/client/impl/RegistryOperationsClient.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-registry/src/main/java/org/apache/hadoop/registry/client/impl/RegistryOperationsClient.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-registry/src/main/java/org/apache/hadoop/registry/client/impl/RegistryOperationsClient.java deleted file mode 100644 index 44cefed..0000000 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-registry/src/main/java/org/apache/hadoop/registry/client/impl/RegistryOperationsClient.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * 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.impl; - -import org.apache.hadoop.classification.InterfaceAudience; -import org.apache.hadoop.classification.InterfaceStability; -import org.apache.hadoop.registry.client.impl.zk.RegistryBindingSource; -import org.apache.hadoop.registry.client.impl.zk.RegistryOperationsService; - - -/** - * This is the client service for applications to work with the registry. - * - * It does not set up the root paths for the registry, is bonded - * to a user, and can be set to use SASL, anonymous or id:pass auth. - * - * For SASL, the client must be operating in the context of an authed user. - * - * For id:pass the client must have the relevant id and password, SASL is - * not used even if the client has credentials. - * - * For anonymous, nothing is used. - * - * Any SASL-authed client also has the ability to add one or more authentication - * id:pass pair on all future writes, and to reset them later. - */ [email protected] [email protected] -public class RegistryOperationsClient extends RegistryOperationsService { - - public RegistryOperationsClient(String name) { - super(name); - } - - public RegistryOperationsClient(String name, - RegistryBindingSource bindingSource) { - super(name, bindingSource); - } -} http://git-wip-us.apache.org/repos/asf/hadoop/blob/e2a9fa84/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-registry/src/main/java/org/apache/hadoop/registry/client/impl/package-info.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-registry/src/main/java/org/apache/hadoop/registry/client/impl/package-info.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-registry/src/main/java/org/apache/hadoop/registry/client/impl/package-info.java deleted file mode 100644 index d85b6a7..0000000 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-registry/src/main/java/org/apache/hadoop/registry/client/impl/package-info.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * 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. - */ - -/** - * Registry client services - * <p> - * These are classes which follow the YARN lifecycle and which implement - * the {@link org.apache.hadoop.registry.client.api.RegistryOperations} - * API. - */ -package org.apache.hadoop.registry.client.impl; http://git-wip-us.apache.org/repos/asf/hadoop/blob/e2a9fa84/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-registry/src/main/java/org/apache/hadoop/registry/client/impl/zk/BindingInformation.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-registry/src/main/java/org/apache/hadoop/registry/client/impl/zk/BindingInformation.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-registry/src/main/java/org/apache/hadoop/registry/client/impl/zk/BindingInformation.java deleted file mode 100644 index 8ae003d..0000000 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-registry/src/main/java/org/apache/hadoop/registry/client/impl/zk/BindingInformation.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * 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.impl.zk; - -import org.apache.curator.ensemble.EnsembleProvider; -import org.apache.hadoop.classification.InterfaceAudience; -import org.apache.hadoop.classification.InterfaceStability; - -/** - * Binding information provided by a {@link RegistryBindingSource} - */ [email protected] [email protected] -public class BindingInformation { - - /** - * The Curator Ensemble Provider - */ - public EnsembleProvider ensembleProvider; - - /** - * Any information that may be useful for diagnostics - */ - public String description; -} http://git-wip-us.apache.org/repos/asf/hadoop/blob/e2a9fa84/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-registry/src/main/java/org/apache/hadoop/registry/client/impl/zk/CuratorService.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-registry/src/main/java/org/apache/hadoop/registry/client/impl/zk/CuratorService.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-registry/src/main/java/org/apache/hadoop/registry/client/impl/zk/CuratorService.java deleted file mode 100644 index 2eb7aa5..0000000 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-registry/src/main/java/org/apache/hadoop/registry/client/impl/zk/CuratorService.java +++ /dev/null @@ -1,896 +0,0 @@ -/* - * 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.impl.zk; - -import com.google.common.annotations.VisibleForTesting; -import com.google.common.base.Preconditions; -import org.apache.curator.ensemble.EnsembleProvider; -import org.apache.curator.ensemble.fixed.FixedEnsembleProvider; -import org.apache.curator.framework.CuratorFramework; -import org.apache.curator.framework.CuratorFrameworkFactory; -import org.apache.curator.framework.api.BackgroundCallback; -import org.apache.curator.framework.api.CreateBuilder; -import org.apache.curator.framework.api.DeleteBuilder; -import org.apache.curator.framework.api.GetChildrenBuilder; -import org.apache.curator.framework.recipes.cache.TreeCache; -import org.apache.curator.framework.recipes.cache.TreeCacheEvent; -import org.apache.curator.framework.recipes.cache.TreeCacheListener; -import org.apache.curator.retry.BoundedExponentialBackoffRetry; -import org.apache.hadoop.classification.InterfaceAudience; -import org.apache.hadoop.classification.InterfaceStability; -import org.apache.hadoop.conf.Configuration; -import org.apache.hadoop.fs.FileAlreadyExistsException; -import org.apache.hadoop.fs.PathIsNotEmptyDirectoryException; -import org.apache.hadoop.fs.PathNotFoundException; -import org.apache.hadoop.io.IOUtils; -import org.apache.hadoop.registry.client.api.RegistryConstants; -import org.apache.hadoop.registry.client.binding.RegistryPathUtils; -import org.apache.hadoop.registry.client.exceptions.AuthenticationFailedException; -import org.apache.hadoop.registry.client.exceptions.NoChildrenForEphemeralsException; -import org.apache.hadoop.registry.client.exceptions.NoPathPermissionsException; -import org.apache.hadoop.registry.client.exceptions.RegistryIOException; -import org.apache.hadoop.service.CompositeService; -import org.apache.hadoop.service.ServiceStateException; -import org.apache.zookeeper.CreateMode; -import org.apache.zookeeper.KeeperException; -import org.apache.zookeeper.ZooDefs; -import org.apache.zookeeper.data.ACL; -import org.apache.zookeeper.data.Stat; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.IOException; -import java.util.List; - -/** - * This service binds to Zookeeper via Apache Curator. It is more - * generic than just the YARN service registry; it does not implement - * any of the Registry Operations API. - */ [email protected] [email protected] -public class CuratorService extends CompositeService - implements RegistryConstants, RegistryBindingSource { - - private static final Logger LOG = - LoggerFactory.getLogger(CuratorService.class); - - /** - * the Curator binding. - */ - private CuratorFramework curator; - - /** - * Path to the registry root. - */ - private String registryRoot; - - /** - * Supplied binding source. This defaults to being this - * service itself. - */ - private final RegistryBindingSource bindingSource; - - /** - * Security service. - */ - private RegistrySecurity registrySecurity; - - /** - * the connection binding text for messages. - */ - private String connectionDescription; - - /** - * Security connection diagnostics. - */ - private String securityConnectionDiagnostics = ""; - - /** - * Provider of curator "ensemble"; offers a basis for - * more flexible bonding in future. - */ - private EnsembleProvider ensembleProvider; - - /** - * Registry tree cache. - */ - private TreeCache treeCache; - - /** - * Construct the service. - * - * @param name service name - * @param bindingSource source of binding information. - * If null: use this instance - */ - public CuratorService(String name, RegistryBindingSource bindingSource) { - super(name); - if (bindingSource != null) { - this.bindingSource = bindingSource; - } else { - this.bindingSource = this; - } - registrySecurity = new RegistrySecurity("registry security"); - } - - /** - * Create an instance using this service as the binding source (i.e. read - * configuration options from the registry). - * - * @param name service name - */ - public CuratorService(String name) { - this(name, null); - } - - /** - * Init the service. - * This is where the security bindings are set up. - * - * @param conf configuration of the service - * @throws Exception - */ - @Override - protected void serviceInit(Configuration conf) throws Exception { - - registryRoot = conf.getTrimmed(KEY_REGISTRY_ZK_ROOT, - DEFAULT_ZK_REGISTRY_ROOT); - - // add the registy service - addService(registrySecurity); - - if (LOG.isDebugEnabled()) { - LOG.debug("Creating Registry with root {}", registryRoot); - } - - super.serviceInit(conf); - } - - public void setKerberosPrincipalAndKeytab(String principal, String keytab) { - registrySecurity.setKerberosPrincipalAndKeytab(principal, keytab); - } - - /** - * Start the service. - * This is where the curator instance is started. - * - * @throws Exception - */ - @Override - protected void serviceStart() throws Exception { - super.serviceStart(); - - // create the curator; rely on the registry security code - // to set up the JVM context and curator - curator = createCurator(); - } - - /** - * Close the ZK connection if it is open. - */ - @Override - protected void serviceStop() throws Exception { - IOUtils.closeStream(curator); - - if (treeCache != null) { - treeCache.close(); - } - super.serviceStop(); - } - - /** - * Internal check that a service is in the live state. - * - * @throws ServiceStateException if not - */ - private void checkServiceLive() throws ServiceStateException { - if (!isInState(STATE.STARTED)) { - throw new ServiceStateException( - "Service " + getName() + " is in wrong state: " - + getServiceState()); - } - } - - /** - * Flag to indicate whether or not the registry is secure. - * Valid once the service is inited. - * - * @return service security policy - */ - public boolean isSecure() { - return registrySecurity.isSecureRegistry(); - } - - /** - * Get the registry security helper. - * - * @return the registry security helper - */ - protected RegistrySecurity getRegistrySecurity() { - return registrySecurity; - } - - /** - * Build the security diagnostics string. - * - * @return a string for diagnostics - */ - protected String buildSecurityDiagnostics() { - // build up the security connection diags - if (!isSecure()) { - return "security disabled"; - } else { - StringBuilder builder = new StringBuilder(); - builder.append("secure cluster; "); - builder.append(registrySecurity.buildSecurityDiagnostics()); - return builder.toString(); - } - } - - /** - * Create a new curator instance off the root path; using configuration - * options provided in the service configuration to set timeouts and - * retry policy. - * - * @return the newly created creator - */ - private CuratorFramework createCurator() throws IOException { - Configuration conf = getConfig(); - createEnsembleProvider(); - int sessionTimeout = conf.getInt(KEY_REGISTRY_ZK_SESSION_TIMEOUT, - DEFAULT_ZK_SESSION_TIMEOUT); - int connectionTimeout = conf.getInt(KEY_REGISTRY_ZK_CONNECTION_TIMEOUT, - DEFAULT_ZK_CONNECTION_TIMEOUT); - int retryTimes = conf.getInt(KEY_REGISTRY_ZK_RETRY_TIMES, - DEFAULT_ZK_RETRY_TIMES); - int retryInterval = conf.getInt(KEY_REGISTRY_ZK_RETRY_INTERVAL, - DEFAULT_ZK_RETRY_INTERVAL); - int retryCeiling = conf.getInt(KEY_REGISTRY_ZK_RETRY_CEILING, - DEFAULT_ZK_RETRY_CEILING); - - LOG.info("Creating CuratorService with connection {}", - connectionDescription); - - CuratorFramework framework; - - synchronized (CuratorService.class) { - // set the security options - - // build up the curator itself - CuratorFrameworkFactory.Builder builder = - CuratorFrameworkFactory.builder(); - builder.ensembleProvider(ensembleProvider) - .connectionTimeoutMs(connectionTimeout) - .sessionTimeoutMs(sessionTimeout) - - .retryPolicy(new BoundedExponentialBackoffRetry(retryInterval, - retryCeiling, - retryTimes)); - - // set up the builder AND any JVM context - registrySecurity.applySecurityEnvironment(builder); - //log them - securityConnectionDiagnostics = buildSecurityDiagnostics(); - if (LOG.isDebugEnabled()) { - LOG.debug(securityConnectionDiagnostics); - } - framework = builder.build(); - framework.start(); - } - - return framework; - } - - @Override - public String toString() { - return super.toString() - + " " + bindingDiagnosticDetails(); - } - - /** - * Get the binding diagnostics. - * - * @return a diagnostics string valid after the service is started. - */ - public String bindingDiagnosticDetails() { - return " Connection=\"" + connectionDescription + "\"" - + " root=\"" + registryRoot + "\"" - + " " + securityConnectionDiagnostics; - } - - /** - * Create a full path from the registry root and the supplied subdir. - * - * @param path path of operation - * @return an absolute path - * @throws IllegalArgumentException if the path is invalide - */ - protected String createFullPath(String path) throws IOException { - return RegistryPathUtils.createFullPath(registryRoot, path); - } - - /** - * Get the registry binding source ... this can be used to - * create new ensemble providers - * - * @return the registry binding source in use - */ - public RegistryBindingSource getBindingSource() { - return bindingSource; - } - - /** - * Create the ensemble provider for this registry, by invoking - * {@link RegistryBindingSource#supplyBindingInformation()} on - * the provider stored in {@link #bindingSource}. - * Sets {@link #ensembleProvider} to that value; - * sets {@link #connectionDescription} to the binding info - * for use in toString and logging; - */ - protected void createEnsembleProvider() { - BindingInformation binding = bindingSource.supplyBindingInformation(); - connectionDescription = binding.description - + " " + securityConnectionDiagnostics; - ensembleProvider = binding.ensembleProvider; - } - - /** - * Supply the binding information. - * This implementation returns a fixed ensemble bonded to - * the quorum supplied by {@link #buildConnectionString()}. - * - * @return the binding information - */ - @Override - public BindingInformation supplyBindingInformation() { - BindingInformation binding = new BindingInformation(); - String connectString = buildConnectionString(); - binding.ensembleProvider = new FixedEnsembleProvider(connectString); - binding.description = - "fixed ZK quorum \"" + connectString + "\""; - return binding; - } - - /** - * Override point: get the connection string used to connect to - * the ZK service. - * - * @return a registry quorum - */ - protected String buildConnectionString() { - return getConfig().getTrimmed(KEY_REGISTRY_ZK_QUORUM, - DEFAULT_REGISTRY_ZK_QUORUM); - } - - /** - * Create an IOE when an operation fails. - * - * @param path path of operation - * @param operation operation attempted - * @param exception caught the exception caught - * @return an IOE to throw that contains the path and operation details. - */ - protected IOException operationFailure(String path, - String operation, - Exception exception) { - return operationFailure(path, operation, exception, null); - } - - /** - * Create an IOE when an operation fails. - * - * @param path path of operation - * @param operation operation attempted - * @param exception caught the exception caught - * @return an IOE to throw that contains the path and operation details. - */ - protected IOException operationFailure(String path, - String operation, - Exception exception, - List<ACL> acls) { - IOException ioe; - String aclList = "[" + RegistrySecurity.aclsToString(acls) + "]"; - if (exception instanceof KeeperException.NoNodeException) { - ioe = new PathNotFoundException(path); - } else if (exception instanceof KeeperException.NodeExistsException) { - ioe = new FileAlreadyExistsException(path); - } else if (exception instanceof KeeperException.NoAuthException) { - ioe = new NoPathPermissionsException(path, - "Not authorized to access path; ACLs: " + aclList); - } else if (exception instanceof KeeperException.NotEmptyException) { - ioe = new PathIsNotEmptyDirectoryException(path); - } else if (exception instanceof KeeperException.AuthFailedException) { - ioe = new AuthenticationFailedException(path, - "Authentication Failed: " + exception - + "; " + securityConnectionDiagnostics, - exception); - } else if (exception instanceof - KeeperException.NoChildrenForEphemeralsException) { - ioe = new NoChildrenForEphemeralsException(path, - "Cannot create a path under an ephemeral node: " + exception, - exception); - } else if (exception instanceof KeeperException.InvalidACLException) { - // this is a security exception of a kind - // include the ACLs to help the diagnostics - StringBuilder builder = new StringBuilder(); - builder.append("Path access failure ").append(aclList); - builder.append(" "); - builder.append(securityConnectionDiagnostics); - ioe = new NoPathPermissionsException(path, builder.toString()); - } else { - ioe = new RegistryIOException(path, - "Failure of " + operation + " on " + path + ": " + - exception.toString(), - exception); - } - if (ioe.getCause() == null) { - ioe.initCause(exception); - } - return ioe; - } - - /** - * Create a path if it does not exist. - * The check is poll + create; there's a risk that another process - * may create the same path before the create() operation is executed/ - * propagated to the ZK node polled. - * - * @param path path to create - * @param acl ACL for path -used when creating a new entry - * @param createParents flag to trigger parent creation - * @return true iff the path was created - * @throws IOException - */ - @VisibleForTesting - public boolean maybeCreate(String path, - CreateMode mode, - List<ACL> acl, - boolean createParents) throws IOException { - return zkMkPath(path, mode, createParents, acl); - } - - /** - * Stat the file. - * - * @param path path of operation - * @return a curator stat entry - * @throws IOException on a failure - * @throws PathNotFoundException if the path was not found - */ - public Stat zkStat(String path) throws IOException { - checkServiceLive(); - String fullpath = createFullPath(path); - Stat stat; - try { - if (LOG.isDebugEnabled()) { - LOG.debug("Stat {}", fullpath); - } - stat = curator.checkExists().forPath(fullpath); - } catch (Exception e) { - throw operationFailure(fullpath, "read()", e); - } - if (stat == null) { - throw new PathNotFoundException(path); - } - return stat; - } - - /** - * Get the ACLs of a path. - * - * @param path path of operation - * @return a possibly empty list of ACLs - * @throws IOException - */ - public List<ACL> zkGetACLS(String path) throws IOException { - checkServiceLive(); - String fullpath = createFullPath(path); - List<ACL> acls; - try { - if (LOG.isDebugEnabled()) { - LOG.debug("GetACLS {}", fullpath); - } - acls = curator.getACL().forPath(fullpath); - } catch (Exception e) { - throw operationFailure(fullpath, "read()", e); - } - if (acls == null) { - throw new PathNotFoundException(path); - } - return acls; - } - - /** - * Probe for a path existing. - * - * @param path path of operation - * @return true if the path was visible from the ZK server - * queried. - * @throws IOException on any exception other than - * {@link PathNotFoundException} - */ - public boolean zkPathExists(String path) throws IOException { - checkServiceLive(); - try { - // if zkStat(path) returns without throwing an exception, the return value - // is guaranteed to be not null - zkStat(path); - return true; - } catch (PathNotFoundException e) { - return false; - } catch (IOException e) { - throw e; - } - } - - /** - * Verify a path exists. - * - * @param path path of operation - * @throws PathNotFoundException if the path is absent - * @throws IOException - */ - public String zkPathMustExist(String path) throws IOException { - zkStat(path); - return path; - } - - /** - * Create a directory. It is not an error if it already exists. - * - * @param path path to create - * @param mode mode for path - * @param createParents flag to trigger parent creation - * @param acls ACL for path - * @throws IOException any problem - */ - public boolean zkMkPath(String path, - CreateMode mode, - boolean createParents, - List<ACL> acls) - throws IOException { - checkServiceLive(); - path = createFullPath(path); - if (acls == null || acls.isEmpty()) { - throw new NoPathPermissionsException(path, "Empty ACL list"); - } - - try { - RegistrySecurity.AclListInfo aclInfo = - new RegistrySecurity.AclListInfo(acls); - if (LOG.isDebugEnabled()) { - LOG.debug("Creating path {} with mode {} and ACL {}", - path, mode, aclInfo); - } - CreateBuilder createBuilder = curator.create(); - createBuilder.withMode(mode).withACL(acls); - if (createParents) { - createBuilder.creatingParentsIfNeeded(); - } - createBuilder.forPath(path); - - } catch (KeeperException.NodeExistsException e) { - if (LOG.isDebugEnabled()) { - LOG.debug("path already present: {}", path, e); - } - return false; - } catch (Exception e) { - throw operationFailure(path, "mkdir() ", e, acls); - } - return true; - } - - /** - * Recursively make a path. - * - * @param path path to create - * @param acl ACL for path - * @throws IOException any problem - */ - public void zkMkParentPath(String path, - List<ACL> acl) throws - IOException { - // split path into elements - - zkMkPath(RegistryPathUtils.parentOf(path), - CreateMode.PERSISTENT, true, acl); - } - - /** - * Create a path with given data. byte[0] is used for a path - * without data. - * - * @param path path of operation - * @param data initial data - * @param acls - * @throws IOException - */ - public void zkCreate(String path, - CreateMode mode, - byte[] data, - List<ACL> acls) throws IOException { - Preconditions.checkArgument(data != null, "null data"); - checkServiceLive(); - String fullpath = createFullPath(path); - try { - if (LOG.isDebugEnabled()) { - LOG.debug("Creating {} with {} bytes of data and ACL {}", - fullpath, data.length, - new RegistrySecurity.AclListInfo(acls)); - } - curator.create().withMode(mode).withACL(acls).forPath(fullpath, data); - } catch (Exception e) { - throw operationFailure(fullpath, "create()", e, acls); - } - } - - /** - * Update the data for a path. - * - * @param path path of operation - * @param data new data - * @throws IOException - */ - public void zkUpdate(String path, byte[] data) throws IOException { - Preconditions.checkArgument(data != null, "null data"); - checkServiceLive(); - path = createFullPath(path); - try { - if (LOG.isDebugEnabled()) { - LOG.debug("Updating {} with {} bytes", path, data.length); - } - curator.setData().forPath(path, data); - } catch (Exception e) { - throw operationFailure(path, "update()", e); - } - } - - /** - * Create or update an entry. - * - * @param path path - * @param data data - * @param acl ACL for path -used when creating a new entry - * @param overwrite enable overwrite - * @return true if the entry was created, false if it was simply updated. - * @throws IOException - */ - public boolean zkSet(String path, - CreateMode mode, - byte[] data, - List<ACL> acl, boolean overwrite) throws IOException { - Preconditions.checkArgument(data != null, "null data"); - checkServiceLive(); - if (!zkPathExists(path)) { - zkCreate(path, mode, data, acl); - return true; - } else { - if (overwrite) { - zkUpdate(path, data); - return false; - } else { - throw new FileAlreadyExistsException(path); - } - } - } - - /** - * Delete a directory/directory tree. - * It is not an error to delete a path that does not exist. - * - * @param path path of operation - * @param recursive flag to trigger recursive deletion - * @param backgroundCallback callback; this being set converts the operation - * into an async/background operation. - * task - * @throws IOException on problems other than no-such-path - */ - public void zkDelete(String path, - boolean recursive, - BackgroundCallback backgroundCallback) throws IOException { - checkServiceLive(); - String fullpath = createFullPath(path); - try { - if (LOG.isDebugEnabled()) { - LOG.debug("Deleting {}", fullpath); - } - DeleteBuilder delete = curator.delete(); - if (recursive) { - delete.deletingChildrenIfNeeded(); - } - if (backgroundCallback != null) { - delete.inBackground(backgroundCallback); - } - delete.forPath(fullpath); - } catch (KeeperException.NoNodeException e) { - // not an error - } catch (Exception e) { - throw operationFailure(fullpath, "delete()", e); - } - } - - /** - * List all children of a path. - * - * @param path path of operation - * @return a possibly empty list of children - * @throws IOException - */ - public List<String> zkList(String path) throws IOException { - checkServiceLive(); - String fullpath = createFullPath(path); - try { - if (LOG.isDebugEnabled()) { - LOG.debug("ls {}", fullpath); - } - GetChildrenBuilder builder = curator.getChildren(); - List<String> children = builder.forPath(fullpath); - return children; - } catch (Exception e) { - throw operationFailure(path, "ls()", e); - } - } - - /** - * Read data on a path. - * - * @param path path of operation - * @return the data - * @throws IOException read failure - */ - public byte[] zkRead(String path) throws IOException { - checkServiceLive(); - String fullpath = createFullPath(path); - try { - if (LOG.isDebugEnabled()) { - LOG.debug("Reading {}", fullpath); - } - return curator.getData().forPath(fullpath); - } catch (Exception e) { - throw operationFailure(fullpath, "read()", e); - } - } - - /** - * Return a path dumper instance which can do a full dump - * of the registry tree in its <code>toString()</code> - * operation. - * - * @param verbose verbose flag - includes more details (such as ACLs) - * @return a class to dump the registry - */ - public ZKPathDumper dumpPath(boolean verbose) { - return new ZKPathDumper(curator, registryRoot, verbose); - } - - /** - * Add a new write access entry for all future write operations. - * - * @param id ID to use - * @param pass password - * @throws IOException on any failure to build the digest - */ - public boolean addWriteAccessor(String id, String pass) throws IOException { - RegistrySecurity security = getRegistrySecurity(); - ACL digestACL = new ACL(ZooDefs.Perms.ALL, - security.toDigestId(security.digest(id, pass))); - return security.addDigestACL(digestACL); - } - - /** - * Clear all write accessors. - */ - public void clearWriteAccessors() { - getRegistrySecurity().resetDigestACLs(); - } - - /** - * Diagnostics method to dump a registry robustly. - * Any exception raised is swallowed. - * - * @param verbose verbose path dump - * @return the registry tree - */ - protected String dumpRegistryRobustly(boolean verbose) { - try { - ZKPathDumper pathDumper = dumpPath(verbose); - return pathDumper.toString(); - } catch (Exception e) { - // ignore - LOG.debug("Ignoring exception: {}", e); - } - return ""; - } - - /** - * Registers a listener to path related events. - * - * @param listener the listener. - * @return a handle allowing for the management of the listener. - * @throws Exception if registration fails due to error. - */ - public ListenerHandle registerPathListener(final PathListener listener) - throws Exception { - - final TreeCacheListener pathChildrenCacheListener = - new TreeCacheListener() { - - public void childEvent(CuratorFramework curatorFramework, - TreeCacheEvent event) - throws Exception { - String path = null; - if (event != null && event.getData() != null) { - path = event.getData().getPath(); - } - assert event != null; - switch (event.getType()) { - case NODE_ADDED: - LOG.info("Informing listener of added node {}", path); - listener.nodeAdded(path); - - break; - - case NODE_REMOVED: - LOG.info("Informing listener of removed node {}", path); - listener.nodeRemoved(path); - - break; - - case NODE_UPDATED: - LOG.info("Informing listener of updated node {}", path); - listener.nodeAdded(path); - - break; - - default: - // do nothing - break; - - } - } - }; - treeCache.getListenable().addListener(pathChildrenCacheListener); - - return new ListenerHandle() { - @Override - public void remove() { - treeCache.getListenable().removeListener(pathChildrenCacheListener); - } - }; - - } - - // TODO: should caches be stopped and then restarted if need be? - - /** - * Create the tree cache that monitors the registry for node addition, update, - * and deletion. - * - * @throws Exception if any issue arises during monitoring. - */ - public void monitorRegistryEntries() - throws Exception { - String registryPath = - getConfig().get(RegistryConstants.KEY_REGISTRY_ZK_ROOT, - RegistryConstants.DEFAULT_ZK_REGISTRY_ROOT); - treeCache = new TreeCache(curator, registryPath); - treeCache.start(); - } -} http://git-wip-us.apache.org/repos/asf/hadoop/blob/e2a9fa84/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-registry/src/main/java/org/apache/hadoop/registry/client/impl/zk/ListenerHandle.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-registry/src/main/java/org/apache/hadoop/registry/client/impl/zk/ListenerHandle.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-registry/src/main/java/org/apache/hadoop/registry/client/impl/zk/ListenerHandle.java deleted file mode 100644 index e43dbbe..0000000 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-registry/src/main/java/org/apache/hadoop/registry/client/impl/zk/ListenerHandle.java +++ /dev/null @@ -1,25 +0,0 @@ -/* - * 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.impl.zk; - -/** - * - */ -public interface ListenerHandle { - void remove(); -} http://git-wip-us.apache.org/repos/asf/hadoop/blob/e2a9fa84/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-registry/src/main/java/org/apache/hadoop/registry/client/impl/zk/PathListener.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-registry/src/main/java/org/apache/hadoop/registry/client/impl/zk/PathListener.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-registry/src/main/java/org/apache/hadoop/registry/client/impl/zk/PathListener.java deleted file mode 100644 index db1e509..0000000 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-registry/src/main/java/org/apache/hadoop/registry/client/impl/zk/PathListener.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * 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.impl.zk; - -import java.io.IOException; - -/** - * - */ -public interface PathListener { - - void nodeAdded(String path) throws IOException; - - void nodeRemoved(String path) throws IOException; -} http://git-wip-us.apache.org/repos/asf/hadoop/blob/e2a9fa84/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-registry/src/main/java/org/apache/hadoop/registry/client/impl/zk/RegistryBindingSource.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-registry/src/main/java/org/apache/hadoop/registry/client/impl/zk/RegistryBindingSource.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-registry/src/main/java/org/apache/hadoop/registry/client/impl/zk/RegistryBindingSource.java deleted file mode 100644 index bab4742..0000000 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-registry/src/main/java/org/apache/hadoop/registry/client/impl/zk/RegistryBindingSource.java +++ /dev/null @@ -1,36 +0,0 @@ -/* - * 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.impl.zk; - -import org.apache.hadoop.classification.InterfaceAudience; -import org.apache.hadoop.classification.InterfaceStability; - -/** - * Interface which can be implemented by a registry binding source - */ [email protected] [email protected] -public interface RegistryBindingSource { - - /** - * Supply the binding information for this registry - * @return the binding information data - */ - BindingInformation supplyBindingInformation(); -} --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
