HDFS-13478. RBF: Disabled Nameservice store API. Contributed by Inigo Goiri.
(cherry picked from commit b6dae26f4490bbd03360b8df19ef00cf843430f3) Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/a9752503 Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/a9752503 Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/a9752503 Branch: refs/heads/branch-2 Commit: a9752503034d13baad80a2884651c5906599039c Parents: 06f3f45 Author: Yiqun Lin <[email protected]> Authored: Sat Apr 21 13:19:09 2018 +0800 Committer: Yiqun Lin <[email protected]> Committed: Sat Apr 21 14:53:12 2018 +0800 ---------------------------------------------------------------------- ...uterAdminProtocolServerSideTranslatorPB.java | 67 ++++++++++++++ .../RouterAdminProtocolTranslatorPB.java | 64 ++++++++++++- .../federation/router/NameserviceManager.java | 51 +++++++++++ .../federation/router/RouterAdminServer.java | 53 ++++++++++- .../server/federation/router/RouterClient.java | 4 + .../store/DisabledNameserviceStore.java | 65 ++++++++++++++ .../federation/store/StateStoreService.java | 3 + .../impl/DisabledNameserviceStoreImpl.java | 68 ++++++++++++++ .../protocol/DisableNameserviceRequest.java | 47 ++++++++++ .../protocol/DisableNameserviceResponse.java | 50 +++++++++++ .../protocol/EnableNameserviceRequest.java | 47 ++++++++++ .../protocol/EnableNameserviceResponse.java | 50 +++++++++++ .../GetDisabledNameservicesRequest.java | 30 +++++++ .../GetDisabledNameservicesResponse.java | 51 +++++++++++ .../pb/DisableNameserviceRequestPBImpl.java | 73 +++++++++++++++ .../pb/DisableNameserviceResponsePBImpl.java | 74 +++++++++++++++ .../impl/pb/EnableNameserviceRequestPBImpl.java | 73 +++++++++++++++ .../pb/EnableNameserviceResponsePBImpl.java | 73 +++++++++++++++ .../GetDisabledNameservicesRequestPBImpl.java | 66 ++++++++++++++ .../GetDisabledNameservicesResponsePBImpl.java | 84 +++++++++++++++++ .../federation/store/records/BaseRecord.java | 13 +++ .../store/records/DisabledNameservice.java | 81 +++++++++++++++++ .../impl/pb/DisabledNameservicePBImpl.java | 95 ++++++++++++++++++++ .../hdfs/tools/federation/RouterAdmin.java | 74 ++++++++++++++- .../src/main/proto/FederationProtocol.proto | 35 +++++++- .../src/main/proto/RouterProtocol.proto | 15 ++++ .../federation/router/TestRouterAdmin.java | 49 ++++++++++ .../federation/router/TestRouterAdminCLI.java | 48 +++++++++- .../store/driver/TestStateStoreDriverBase.java | 27 +++++- 29 files changed, 1519 insertions(+), 11 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hadoop/blob/a9752503/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/protocolPB/RouterAdminProtocolServerSideTranslatorPB.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/protocolPB/RouterAdminProtocolServerSideTranslatorPB.java b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/protocolPB/RouterAdminProtocolServerSideTranslatorPB.java index 159d5c2..0204ce8 100644 --- a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/protocolPB/RouterAdminProtocolServerSideTranslatorPB.java +++ b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/protocolPB/RouterAdminProtocolServerSideTranslatorPB.java @@ -23,8 +23,14 @@ import org.apache.hadoop.classification.InterfaceAudience; import org.apache.hadoop.classification.InterfaceStability; import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.AddMountTableEntryRequestProto; import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.AddMountTableEntryResponseProto; +import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.DisableNameserviceRequestProto; +import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.DisableNameserviceResponseProto; +import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.EnableNameserviceRequestProto; +import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.EnableNameserviceResponseProto; import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.EnterSafeModeRequestProto; import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.EnterSafeModeResponseProto; +import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.GetDisabledNameservicesRequestProto; +import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.GetDisabledNameservicesResponseProto; import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.GetMountTableEntriesRequestProto; import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.GetMountTableEntriesResponseProto; import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.GetSafeModeRequestProto; @@ -38,8 +44,14 @@ import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProt import org.apache.hadoop.hdfs.server.federation.router.RouterAdminServer; import org.apache.hadoop.hdfs.server.federation.store.protocol.AddMountTableEntryRequest; import org.apache.hadoop.hdfs.server.federation.store.protocol.AddMountTableEntryResponse; +import org.apache.hadoop.hdfs.server.federation.store.protocol.DisableNameserviceRequest; +import org.apache.hadoop.hdfs.server.federation.store.protocol.DisableNameserviceResponse; +import org.apache.hadoop.hdfs.server.federation.store.protocol.EnableNameserviceRequest; +import org.apache.hadoop.hdfs.server.federation.store.protocol.EnableNameserviceResponse; import org.apache.hadoop.hdfs.server.federation.store.protocol.EnterSafeModeRequest; import org.apache.hadoop.hdfs.server.federation.store.protocol.EnterSafeModeResponse; +import org.apache.hadoop.hdfs.server.federation.store.protocol.GetDisabledNameservicesRequest; +import org.apache.hadoop.hdfs.server.federation.store.protocol.GetDisabledNameservicesResponse; import org.apache.hadoop.hdfs.server.federation.store.protocol.GetMountTableEntriesRequest; import org.apache.hadoop.hdfs.server.federation.store.protocol.GetMountTableEntriesResponse; import org.apache.hadoop.hdfs.server.federation.store.protocol.GetSafeModeRequest; @@ -52,8 +64,14 @@ import org.apache.hadoop.hdfs.server.federation.store.protocol.UpdateMountTableE import org.apache.hadoop.hdfs.server.federation.store.protocol.UpdateMountTableEntryResponse; import org.apache.hadoop.hdfs.server.federation.store.protocol.impl.pb.AddMountTableEntryRequestPBImpl; import org.apache.hadoop.hdfs.server.federation.store.protocol.impl.pb.AddMountTableEntryResponsePBImpl; +import org.apache.hadoop.hdfs.server.federation.store.protocol.impl.pb.DisableNameserviceRequestPBImpl; +import org.apache.hadoop.hdfs.server.federation.store.protocol.impl.pb.DisableNameserviceResponsePBImpl; +import org.apache.hadoop.hdfs.server.federation.store.protocol.impl.pb.EnableNameserviceRequestPBImpl; +import org.apache.hadoop.hdfs.server.federation.store.protocol.impl.pb.EnableNameserviceResponsePBImpl; import org.apache.hadoop.hdfs.server.federation.store.protocol.impl.pb.EnterSafeModeRequestPBImpl; import org.apache.hadoop.hdfs.server.federation.store.protocol.impl.pb.EnterSafeModeResponsePBImpl; +import org.apache.hadoop.hdfs.server.federation.store.protocol.impl.pb.GetDisabledNameservicesRequestPBImpl; +import org.apache.hadoop.hdfs.server.federation.store.protocol.impl.pb.GetDisabledNameservicesResponsePBImpl; import org.apache.hadoop.hdfs.server.federation.store.protocol.impl.pb.GetMountTableEntriesRequestPBImpl; import org.apache.hadoop.hdfs.server.federation.store.protocol.impl.pb.GetMountTableEntriesResponsePBImpl; import org.apache.hadoop.hdfs.server.federation.store.protocol.impl.pb.GetSafeModeRequestPBImpl; @@ -208,4 +226,53 @@ public class RouterAdminProtocolServerSideTranslatorPB implements throw new ServiceException(e); } } + + @Override + public DisableNameserviceResponseProto disableNameservice( + RpcController controller, DisableNameserviceRequestProto request) + throws ServiceException { + try { + DisableNameserviceRequest req = + new DisableNameserviceRequestPBImpl(request); + DisableNameserviceResponse response = server.disableNameservice(req); + DisableNameserviceResponsePBImpl responsePB = + (DisableNameserviceResponsePBImpl) response; + return responsePB.getProto(); + } catch (IOException e) { + throw new ServiceException(e); + } + } + + @Override + public EnableNameserviceResponseProto enableNameservice( + RpcController controller, EnableNameserviceRequestProto request) + throws ServiceException { + try { + EnableNameserviceRequest req = + new EnableNameserviceRequestPBImpl(request); + EnableNameserviceResponse response = server.enableNameservice(req); + EnableNameserviceResponsePBImpl responsePB = + (EnableNameserviceResponsePBImpl) response; + return responsePB.getProto(); + } catch (IOException e) { + throw new ServiceException(e); + } + } + + @Override + public GetDisabledNameservicesResponseProto getDisabledNameservices( + RpcController controller, GetDisabledNameservicesRequestProto request) + throws ServiceException { + try { + GetDisabledNameservicesRequest req = + new GetDisabledNameservicesRequestPBImpl(request); + GetDisabledNameservicesResponse response = + server.getDisabledNameservices(req); + GetDisabledNameservicesResponsePBImpl responsePB = + (GetDisabledNameservicesResponsePBImpl)response; + return responsePB.getProto(); + } catch (IOException e) { + throw new ServiceException(e); + } + } } http://git-wip-us.apache.org/repos/asf/hadoop/blob/a9752503/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/protocolPB/RouterAdminProtocolTranslatorPB.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/protocolPB/RouterAdminProtocolTranslatorPB.java b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/protocolPB/RouterAdminProtocolTranslatorPB.java index d6210ce..6e24438 100644 --- a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/protocolPB/RouterAdminProtocolTranslatorPB.java +++ b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/protocolPB/RouterAdminProtocolTranslatorPB.java @@ -24,8 +24,14 @@ import org.apache.hadoop.classification.InterfaceAudience; import org.apache.hadoop.classification.InterfaceStability; import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.AddMountTableEntryRequestProto; import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.AddMountTableEntryResponseProto; +import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.DisableNameserviceRequestProto; +import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.DisableNameserviceResponseProto; +import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.EnableNameserviceRequestProto; +import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.EnableNameserviceResponseProto; import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.EnterSafeModeRequestProto; import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.EnterSafeModeResponseProto; +import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.GetDisabledNameservicesRequestProto; +import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.GetDisabledNameservicesResponseProto; import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.GetMountTableEntriesRequestProto; import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.GetMountTableEntriesResponseProto; import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.GetSafeModeRequestProto; @@ -37,11 +43,18 @@ import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProt import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.UpdateMountTableEntryRequestProto; import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.UpdateMountTableEntryResponseProto; import org.apache.hadoop.hdfs.server.federation.resolver.MountTableManager; +import org.apache.hadoop.hdfs.server.federation.router.NameserviceManager; import org.apache.hadoop.hdfs.server.federation.router.RouterStateManager; import org.apache.hadoop.hdfs.server.federation.store.protocol.AddMountTableEntryRequest; import org.apache.hadoop.hdfs.server.federation.store.protocol.AddMountTableEntryResponse; +import org.apache.hadoop.hdfs.server.federation.store.protocol.DisableNameserviceRequest; +import org.apache.hadoop.hdfs.server.federation.store.protocol.DisableNameserviceResponse; +import org.apache.hadoop.hdfs.server.federation.store.protocol.EnableNameserviceRequest; +import org.apache.hadoop.hdfs.server.federation.store.protocol.EnableNameserviceResponse; import org.apache.hadoop.hdfs.server.federation.store.protocol.EnterSafeModeRequest; import org.apache.hadoop.hdfs.server.federation.store.protocol.EnterSafeModeResponse; +import org.apache.hadoop.hdfs.server.federation.store.protocol.GetDisabledNameservicesRequest; +import org.apache.hadoop.hdfs.server.federation.store.protocol.GetDisabledNameservicesResponse; import org.apache.hadoop.hdfs.server.federation.store.protocol.GetMountTableEntriesRequest; import org.apache.hadoop.hdfs.server.federation.store.protocol.GetMountTableEntriesResponse; import org.apache.hadoop.hdfs.server.federation.store.protocol.GetSafeModeRequest; @@ -54,7 +67,12 @@ import org.apache.hadoop.hdfs.server.federation.store.protocol.UpdateMountTableE import org.apache.hadoop.hdfs.server.federation.store.protocol.UpdateMountTableEntryResponse; import org.apache.hadoop.hdfs.server.federation.store.protocol.impl.pb.AddMountTableEntryRequestPBImpl; import org.apache.hadoop.hdfs.server.federation.store.protocol.impl.pb.AddMountTableEntryResponsePBImpl; +import org.apache.hadoop.hdfs.server.federation.store.protocol.impl.pb.DisableNameserviceRequestPBImpl; +import org.apache.hadoop.hdfs.server.federation.store.protocol.impl.pb.DisableNameserviceResponsePBImpl; +import org.apache.hadoop.hdfs.server.federation.store.protocol.impl.pb.EnableNameserviceRequestPBImpl; +import org.apache.hadoop.hdfs.server.federation.store.protocol.impl.pb.EnableNameserviceResponsePBImpl; import org.apache.hadoop.hdfs.server.federation.store.protocol.impl.pb.EnterSafeModeResponsePBImpl; +import org.apache.hadoop.hdfs.server.federation.store.protocol.impl.pb.GetDisabledNameservicesResponsePBImpl; import org.apache.hadoop.hdfs.server.federation.store.protocol.impl.pb.GetMountTableEntriesRequestPBImpl; import org.apache.hadoop.hdfs.server.federation.store.protocol.impl.pb.GetMountTableEntriesResponsePBImpl; import org.apache.hadoop.hdfs.server.federation.store.protocol.impl.pb.GetSafeModeResponsePBImpl; @@ -80,7 +98,7 @@ import com.google.protobuf.ServiceException; @InterfaceStability.Stable public class RouterAdminProtocolTranslatorPB implements ProtocolMetaInterface, MountTableManager, - Closeable, ProtocolTranslator, RouterStateManager { + Closeable, ProtocolTranslator, RouterStateManager, NameserviceManager { final private RouterAdminProtocolPB rpcProxy; public RouterAdminProtocolTranslatorPB(RouterAdminProtocolPB proxy) { @@ -205,4 +223,48 @@ public class RouterAdminProtocolTranslatorPB throw new IOException(ProtobufHelper.getRemoteException(e).getMessage()); } } + + @Override + public DisableNameserviceResponse disableNameservice( + DisableNameserviceRequest request) throws IOException { + DisableNameserviceRequestPBImpl requestPB = + (DisableNameserviceRequestPBImpl)request; + DisableNameserviceRequestProto proto = requestPB.getProto(); + try { + DisableNameserviceResponseProto response = + rpcProxy.disableNameservice(null, proto); + return new DisableNameserviceResponsePBImpl(response); + } catch (ServiceException e) { + throw new IOException(ProtobufHelper.getRemoteException(e).getMessage()); + } + } + + @Override + public EnableNameserviceResponse enableNameservice( + EnableNameserviceRequest request) throws IOException { + EnableNameserviceRequestPBImpl requestPB = + (EnableNameserviceRequestPBImpl)request; + EnableNameserviceRequestProto proto = requestPB.getProto(); + try { + EnableNameserviceResponseProto response = + rpcProxy.enableNameservice(null, proto); + return new EnableNameserviceResponsePBImpl(response); + } catch (ServiceException e) { + throw new IOException(ProtobufHelper.getRemoteException(e).getMessage()); + } + } + + @Override + public GetDisabledNameservicesResponse getDisabledNameservices( + GetDisabledNameservicesRequest request) throws IOException { + GetDisabledNameservicesRequestProto proto = + GetDisabledNameservicesRequestProto.newBuilder().build(); + try { + GetDisabledNameservicesResponseProto response = + rpcProxy.getDisabledNameservices(null, proto); + return new GetDisabledNameservicesResponsePBImpl(response); + } catch (ServiceException e) { + throw new IOException(ProtobufHelper.getRemoteException(e).getMessage()); + } + } } http://git-wip-us.apache.org/repos/asf/hadoop/blob/a9752503/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/router/NameserviceManager.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/router/NameserviceManager.java b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/router/NameserviceManager.java new file mode 100644 index 0000000..cab336c --- /dev/null +++ b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/router/NameserviceManager.java @@ -0,0 +1,51 @@ +/** + * 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.hdfs.server.federation.router; + +import java.io.IOException; + +import org.apache.hadoop.hdfs.server.federation.store.protocol.DisableNameserviceRequest; +import org.apache.hadoop.hdfs.server.federation.store.protocol.DisableNameserviceResponse; +import org.apache.hadoop.hdfs.server.federation.store.protocol.EnableNameserviceRequest; +import org.apache.hadoop.hdfs.server.federation.store.protocol.EnableNameserviceResponse; +import org.apache.hadoop.hdfs.server.federation.store.protocol.GetDisabledNameservicesRequest; +import org.apache.hadoop.hdfs.server.federation.store.protocol.GetDisabledNameservicesResponse; + +/** + * Interface for enable/disable name service. + */ +public interface NameserviceManager { + + /** + * Disable a name service. + */ + DisableNameserviceResponse disableNameservice( + DisableNameserviceRequest request) throws IOException; + + /** + * Enable a name service. + */ + EnableNameserviceResponse enableNameservice(EnableNameserviceRequest request) + throws IOException; + + /** + * Get the list of disabled name service. + */ + GetDisabledNameservicesResponse getDisabledNameservices( + GetDisabledNameservicesRequest request) throws IOException; +} http://git-wip-us.apache.org/repos/asf/hadoop/blob/a9752503/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/router/RouterAdminServer.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/router/RouterAdminServer.java b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/router/RouterAdminServer.java index 2c195c6..da67796 100644 --- a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/router/RouterAdminServer.java +++ b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/router/RouterAdminServer.java @@ -22,6 +22,7 @@ import static org.apache.hadoop.hdfs.DFSConfigKeys.DFS_PERMISSIONS_ENABLED_KEY; import java.io.IOException; import java.net.InetSocketAddress; +import java.util.Set; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hdfs.DFSConfigKeys; @@ -29,11 +30,18 @@ import org.apache.hadoop.hdfs.protocol.proto.RouterProtocolProtos.RouterAdminPro import org.apache.hadoop.hdfs.protocolPB.RouterAdminProtocolPB; import org.apache.hadoop.hdfs.protocolPB.RouterAdminProtocolServerSideTranslatorPB; import org.apache.hadoop.hdfs.server.federation.resolver.MountTableManager; +import org.apache.hadoop.hdfs.server.federation.store.DisabledNameserviceStore; import org.apache.hadoop.hdfs.server.federation.store.MountTableStore; import org.apache.hadoop.hdfs.server.federation.store.protocol.AddMountTableEntryRequest; import org.apache.hadoop.hdfs.server.federation.store.protocol.AddMountTableEntryResponse; +import org.apache.hadoop.hdfs.server.federation.store.protocol.DisableNameserviceRequest; +import org.apache.hadoop.hdfs.server.federation.store.protocol.DisableNameserviceResponse; +import org.apache.hadoop.hdfs.server.federation.store.protocol.EnableNameserviceRequest; +import org.apache.hadoop.hdfs.server.federation.store.protocol.EnableNameserviceResponse; import org.apache.hadoop.hdfs.server.federation.store.protocol.EnterSafeModeRequest; import org.apache.hadoop.hdfs.server.federation.store.protocol.EnterSafeModeResponse; +import org.apache.hadoop.hdfs.server.federation.store.protocol.GetDisabledNameservicesRequest; +import org.apache.hadoop.hdfs.server.federation.store.protocol.GetDisabledNameservicesResponse; import org.apache.hadoop.hdfs.server.federation.store.protocol.GetMountTableEntriesRequest; import org.apache.hadoop.hdfs.server.federation.store.protocol.GetMountTableEntriesResponse; import org.apache.hadoop.hdfs.server.federation.store.protocol.GetSafeModeRequest; @@ -62,7 +70,7 @@ import com.google.protobuf.BlockingService; * router. It is created, started, and stopped by {@link Router}. */ public class RouterAdminServer extends AbstractService - implements MountTableManager, RouterStateManager { + implements MountTableManager, RouterStateManager, NameserviceManager { private static final Logger LOG = LoggerFactory.getLogger(RouterAdminServer.class); @@ -73,6 +81,8 @@ public class RouterAdminServer extends AbstractService private MountTableStore mountTableStore; + private DisabledNameserviceStore disabledStore; + /** The Admin server that listens to requests from clients. */ private final Server adminServer; private final InetSocketAddress adminAddress; @@ -166,6 +176,19 @@ public class RouterAdminServer extends AbstractService return this.mountTableStore; } + private DisabledNameserviceStore getDisabledNameserviceStore() + throws IOException { + if (this.disabledStore == null) { + this.disabledStore = router.getStateStore().getRegisteredRecordStore( + DisabledNameserviceStore.class); + if (this.disabledStore == null) { + throw new IOException( + "Disabled Nameservice state store is not available."); + } + } + return this.disabledStore; + } + /** * Get the RPC address of the admin service. * @return Administration service RPC address. @@ -256,6 +279,34 @@ public class RouterAdminServer extends AbstractService && !serverInSafeMode); } + @Override + public DisableNameserviceResponse disableNameservice( + DisableNameserviceRequest request) throws IOException { + // TODO check permissions + String nsId = request.getNameServiceId(); + // TODO check that the name service exists + boolean success = getDisabledNameserviceStore().disableNameservice(nsId); + return DisableNameserviceResponse.newInstance(success); + } + + @Override + public EnableNameserviceResponse enableNameservice( + EnableNameserviceRequest request) throws IOException { + // TODO check permissions + String nsId = request.getNameServiceId(); + // TODO check that the name service exists + boolean success = getDisabledNameserviceStore().enableNameservice(nsId); + return EnableNameserviceResponse.newInstance(success); + } + + @Override + public GetDisabledNameservicesResponse getDisabledNameservices( + GetDisabledNameservicesRequest request) throws IOException { + // TODO check permissions + Set<String> nsIds = getDisabledNameserviceStore().getDisabledNameservices(); + return GetDisabledNameservicesResponse.newInstance(nsIds); + } + /** * Get a new permission checker used for making mount table access * control. This method will be invoked during each RPC call in router http://git-wip-us.apache.org/repos/asf/hadoop/blob/a9752503/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/router/RouterClient.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/router/RouterClient.java b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/router/RouterClient.java index b36e459..95fe1a8 100644 --- a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/router/RouterClient.java +++ b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/router/RouterClient.java @@ -73,6 +73,10 @@ public class RouterClient implements Closeable { return proxy; } + public NameserviceManager getNameserviceManager() { + return proxy; + } + @Override public synchronized void close() throws IOException { RPC.stopProxy(proxy); http://git-wip-us.apache.org/repos/asf/hadoop/blob/a9752503/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/store/DisabledNameserviceStore.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/store/DisabledNameserviceStore.java b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/store/DisabledNameserviceStore.java new file mode 100644 index 0000000..20afe98 --- /dev/null +++ b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/store/DisabledNameserviceStore.java @@ -0,0 +1,65 @@ +/** + * 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.hdfs.server.federation.store; + +import java.io.IOException; +import java.util.Set; + +import org.apache.hadoop.classification.InterfaceAudience; +import org.apache.hadoop.classification.InterfaceStability; +import org.apache.hadoop.hdfs.server.federation.store.driver.StateStoreDriver; +import org.apache.hadoop.hdfs.server.federation.store.records.DisabledNameservice; + +/** + * State store record to track disabled name services. + */ [email protected] [email protected] +public abstract class DisabledNameserviceStore + extends CachedRecordStore<DisabledNameservice> { + + public DisabledNameserviceStore(StateStoreDriver driver) { + super(DisabledNameservice.class, driver); + } + + /** + * Disable a name service. + * + * @param nsId Identifier of the name service. + * @return If the name service was successfully disabled. + * @throws IOException If the state store could not be queried. + */ + public abstract boolean disableNameservice(String nsId) throws IOException; + + /** + * Enable a name service. + * + * @param nsId Identifier of the name service. + * @return If the name service was successfully brought back. + * @throws IOException If the state store could not be queried. + */ + public abstract boolean enableNameservice(String nsId) throws IOException; + + /** + * Get a list of disabled name services. + * + * @return List of disabled name services. + * @throws IOException If the state store could not be queried. + */ + public abstract Set<String> getDisabledNameservices() throws IOException; +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/hadoop/blob/a9752503/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/store/StateStoreService.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/store/StateStoreService.java b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/store/StateStoreService.java index a0744a6..64c22ae 100644 --- a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/store/StateStoreService.java +++ b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/store/StateStoreService.java @@ -37,6 +37,7 @@ import org.apache.hadoop.hdfs.server.federation.metrics.StateStoreMBean; import org.apache.hadoop.hdfs.server.federation.metrics.StateStoreMetrics; import org.apache.hadoop.hdfs.server.federation.router.RBFConfigKeys; import org.apache.hadoop.hdfs.server.federation.store.driver.StateStoreDriver; +import org.apache.hadoop.hdfs.server.federation.store.impl.DisabledNameserviceStoreImpl; import org.apache.hadoop.hdfs.server.federation.store.impl.MembershipStoreImpl; import org.apache.hadoop.hdfs.server.federation.store.impl.MountTableStoreImpl; import org.apache.hadoop.hdfs.server.federation.store.impl.RouterStoreImpl; @@ -75,6 +76,7 @@ import com.google.common.annotations.VisibleForTesting; * See {@link org.apache.hadoop.fs.viewfs.ViewFs ViewFs}. * <li>{@link RebalancerStore}: Log of the rebalancing operations. * <li>{@link RouterStore}: Router state in the federation. + * <li>{@link DisabledNameserviceStore}: Disabled name services. * <li>{@link TokenStore}: Tokens in the federation. * </ul> */ @@ -152,6 +154,7 @@ public class StateStoreService extends CompositeService { addRecordStore(MembershipStoreImpl.class); addRecordStore(MountTableStoreImpl.class); addRecordStore(RouterStoreImpl.class); + addRecordStore(DisabledNameserviceStoreImpl.class); // Check the connection to the State Store periodically this.monitorService = new StateStoreConnectionMonitorService(this); http://git-wip-us.apache.org/repos/asf/hadoop/blob/a9752503/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/store/impl/DisabledNameserviceStoreImpl.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/store/impl/DisabledNameserviceStoreImpl.java b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/store/impl/DisabledNameserviceStoreImpl.java new file mode 100644 index 0000000..5eca869 --- /dev/null +++ b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/store/impl/DisabledNameserviceStoreImpl.java @@ -0,0 +1,68 @@ +/** + * 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.hdfs.server.federation.store.impl; + +import java.io.IOException; +import java.util.Set; +import java.util.TreeSet; + +import org.apache.hadoop.classification.InterfaceAudience; +import org.apache.hadoop.classification.InterfaceStability; +import org.apache.hadoop.hdfs.server.federation.store.DisabledNameserviceStore; +import org.apache.hadoop.hdfs.server.federation.store.driver.StateStoreDriver; +import org.apache.hadoop.hdfs.server.federation.store.records.DisabledNameservice; + +/** + * Implementation of {@link DisabledNameserviceStore}. + */ [email protected] [email protected] +public class DisabledNameserviceStoreImpl extends DisabledNameserviceStore { + + public DisabledNameserviceStoreImpl(StateStoreDriver driver) { + super(driver); + } + + @Override + public boolean disableNameservice(String nsId) + throws IOException { + + DisabledNameservice record = + DisabledNameservice.newInstance(nsId); + return getDriver().put(record, false, false); + } + + @Override + public boolean enableNameservice(String nsId) + throws IOException { + + DisabledNameservice record = + DisabledNameservice.newInstance(nsId); + return getDriver().remove(record); + } + + @Override + public Set<String> getDisabledNameservices() throws IOException { + Set<String> disabledNameservices = new TreeSet<>(); + for (DisabledNameservice record : getCachedRecords()) { + String nsId = record.getNameserviceId(); + disabledNameservices.add(nsId); + } + return disabledNameservices; + } +} http://git-wip-us.apache.org/repos/asf/hadoop/blob/a9752503/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/store/protocol/DisableNameserviceRequest.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/store/protocol/DisableNameserviceRequest.java b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/store/protocol/DisableNameserviceRequest.java new file mode 100644 index 0000000..7e4267d --- /dev/null +++ b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/store/protocol/DisableNameserviceRequest.java @@ -0,0 +1,47 @@ +/** + * 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.hdfs.server.federation.store.protocol; + +import org.apache.hadoop.classification.InterfaceAudience.Public; +import org.apache.hadoop.classification.InterfaceStability.Unstable; +import org.apache.hadoop.hdfs.server.federation.store.driver.StateStoreSerializer; + +/** + * API request for disabling a name service and updating its state in the + * State Store. + */ +public abstract class DisableNameserviceRequest { + + public static DisableNameserviceRequest newInstance() { + return StateStoreSerializer.newRecord(DisableNameserviceRequest.class); + } + + public static DisableNameserviceRequest newInstance(String nsId) { + DisableNameserviceRequest request = newInstance(); + request.setNameServiceId(nsId); + return request; + } + + @Public + @Unstable + public abstract String getNameServiceId(); + + @Public + @Unstable + public abstract void setNameServiceId(String nsId); +} http://git-wip-us.apache.org/repos/asf/hadoop/blob/a9752503/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/store/protocol/DisableNameserviceResponse.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/store/protocol/DisableNameserviceResponse.java b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/store/protocol/DisableNameserviceResponse.java new file mode 100644 index 0000000..cec1519 --- /dev/null +++ b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/store/protocol/DisableNameserviceResponse.java @@ -0,0 +1,50 @@ +/** + * 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.hdfs.server.federation.store.protocol; + +import java.io.IOException; + +import org.apache.hadoop.classification.InterfaceAudience.Public; +import org.apache.hadoop.classification.InterfaceStability.Unstable; +import org.apache.hadoop.hdfs.server.federation.store.driver.StateStoreSerializer; + +/** + * API response for disabling a name service and updating its state in the + * State Store. + */ +public abstract class DisableNameserviceResponse { + + public static DisableNameserviceResponse newInstance() throws IOException { + return StateStoreSerializer.newRecord(DisableNameserviceResponse.class); + } + + public static DisableNameserviceResponse newInstance(boolean status) + throws IOException { + DisableNameserviceResponse response = newInstance(); + response.setStatus(status); + return response; + } + + @Public + @Unstable + public abstract boolean getStatus(); + + @Public + @Unstable + public abstract void setStatus(boolean result); +} http://git-wip-us.apache.org/repos/asf/hadoop/blob/a9752503/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/store/protocol/EnableNameserviceRequest.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/store/protocol/EnableNameserviceRequest.java b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/store/protocol/EnableNameserviceRequest.java new file mode 100644 index 0000000..dd889da --- /dev/null +++ b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/store/protocol/EnableNameserviceRequest.java @@ -0,0 +1,47 @@ +/** + * 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.hdfs.server.federation.store.protocol; + +import org.apache.hadoop.classification.InterfaceAudience.Public; +import org.apache.hadoop.classification.InterfaceStability.Unstable; +import org.apache.hadoop.hdfs.server.federation.store.driver.StateStoreSerializer; + +/** + * API request for enabling a name service and updating its state in the + * State Store. + */ +public abstract class EnableNameserviceRequest { + + public static EnableNameserviceRequest newInstance() { + return StateStoreSerializer.newRecord(EnableNameserviceRequest.class); + } + + public static EnableNameserviceRequest newInstance(String nsId) { + EnableNameserviceRequest request = newInstance(); + request.setNameServiceId(nsId); + return request; + } + + @Public + @Unstable + public abstract String getNameServiceId(); + + @Public + @Unstable + public abstract void setNameServiceId(String nsId); +} http://git-wip-us.apache.org/repos/asf/hadoop/blob/a9752503/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/store/protocol/EnableNameserviceResponse.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/store/protocol/EnableNameserviceResponse.java b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/store/protocol/EnableNameserviceResponse.java new file mode 100644 index 0000000..c0c31b2 --- /dev/null +++ b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/store/protocol/EnableNameserviceResponse.java @@ -0,0 +1,50 @@ +/** + * 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.hdfs.server.federation.store.protocol; + +import java.io.IOException; + +import org.apache.hadoop.classification.InterfaceAudience.Public; +import org.apache.hadoop.classification.InterfaceStability.Unstable; +import org.apache.hadoop.hdfs.server.federation.store.driver.StateStoreSerializer; + +/** + * API response for enabling a name service and updating its state in the + * State Store. + */ +public abstract class EnableNameserviceResponse { + + public static EnableNameserviceResponse newInstance() throws IOException { + return StateStoreSerializer.newRecord(EnableNameserviceResponse.class); + } + + public static EnableNameserviceResponse newInstance(boolean status) + throws IOException { + EnableNameserviceResponse response = newInstance(); + response.setStatus(status); + return response; + } + + @Public + @Unstable + public abstract boolean getStatus(); + + @Public + @Unstable + public abstract void setStatus(boolean result); +} http://git-wip-us.apache.org/repos/asf/hadoop/blob/a9752503/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/store/protocol/GetDisabledNameservicesRequest.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/store/protocol/GetDisabledNameservicesRequest.java b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/store/protocol/GetDisabledNameservicesRequest.java new file mode 100644 index 0000000..2681542 --- /dev/null +++ b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/store/protocol/GetDisabledNameservicesRequest.java @@ -0,0 +1,30 @@ +/** + * 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.hdfs.server.federation.store.protocol; + +import org.apache.hadoop.hdfs.server.federation.store.driver.StateStoreSerializer; + +/** + * API request for getting the disabled name services. + */ +public abstract class GetDisabledNameservicesRequest { + + public static GetDisabledNameservicesRequest newInstance() { + return StateStoreSerializer.newRecord(GetDisabledNameservicesRequest.class); + } +} http://git-wip-us.apache.org/repos/asf/hadoop/blob/a9752503/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/store/protocol/GetDisabledNameservicesResponse.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/store/protocol/GetDisabledNameservicesResponse.java b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/store/protocol/GetDisabledNameservicesResponse.java new file mode 100644 index 0000000..260e569 --- /dev/null +++ b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/store/protocol/GetDisabledNameservicesResponse.java @@ -0,0 +1,51 @@ +/** + * 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.hdfs.server.federation.store.protocol; + +import java.util.Set; + +import org.apache.hadoop.classification.InterfaceAudience.Public; +import org.apache.hadoop.classification.InterfaceStability.Unstable; +import org.apache.hadoop.hdfs.server.federation.store.driver.StateStoreSerializer; + +/** + * API response for getting the disabled nameservices in the state store. + */ +public abstract class GetDisabledNameservicesResponse { + + public static GetDisabledNameservicesResponse newInstance() { + return StateStoreSerializer.newRecord( + GetDisabledNameservicesResponse.class); + } + + public static GetDisabledNameservicesResponse newInstance( + Set<String> nsIds) { + GetDisabledNameservicesResponse response = newInstance(); + response.setNameservices(nsIds); + return response; + } + + @Public + @Unstable + public abstract Set<String> getNameservices(); + + @Public + @Unstable + public abstract void setNameservices(Set<String> nameservices); + +} http://git-wip-us.apache.org/repos/asf/hadoop/blob/a9752503/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/store/protocol/impl/pb/DisableNameserviceRequestPBImpl.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/store/protocol/impl/pb/DisableNameserviceRequestPBImpl.java b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/store/protocol/impl/pb/DisableNameserviceRequestPBImpl.java new file mode 100644 index 0000000..5e5aa01 --- /dev/null +++ b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/store/protocol/impl/pb/DisableNameserviceRequestPBImpl.java @@ -0,0 +1,73 @@ +/** + * 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.hdfs.server.federation.store.protocol.impl.pb; + +import java.io.IOException; + +import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.DisableNameserviceRequestProto; +import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.DisableNameserviceRequestProto.Builder; +import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.DisableNameserviceRequestProtoOrBuilder; +import org.apache.hadoop.hdfs.server.federation.store.protocol.DisableNameserviceRequest; +import org.apache.hadoop.hdfs.server.federation.store.records.impl.pb.PBRecord; + +import com.google.protobuf.Message; + +/** + * Protobuf implementation of the state store API object + * DisableNameserviceRequest. + */ +public class DisableNameserviceRequestPBImpl extends DisableNameserviceRequest + implements PBRecord { + + private FederationProtocolPBTranslator<DisableNameserviceRequestProto, + Builder, DisableNameserviceRequestProtoOrBuilder> translator = + new FederationProtocolPBTranslator<>( + DisableNameserviceRequestProto.class); + + public DisableNameserviceRequestPBImpl() { + } + + public DisableNameserviceRequestPBImpl(DisableNameserviceRequestProto proto) { + this.translator.setProto(proto); + } + + @Override + public DisableNameserviceRequestProto getProto() { + return translator.build(); + } + + @Override + public void setProto(Message proto) { + this.translator.setProto(proto); + } + + @Override + public void readInstance(String base64String) throws IOException { + this.translator.readInstance(base64String); + } + + @Override + public String getNameServiceId() { + return this.translator.getProtoOrBuilder().getNameServiceId(); + } + + @Override + public void setNameServiceId(String nsId) { + this.translator.getBuilder().setNameServiceId(nsId); + } +} http://git-wip-us.apache.org/repos/asf/hadoop/blob/a9752503/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/store/protocol/impl/pb/DisableNameserviceResponsePBImpl.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/store/protocol/impl/pb/DisableNameserviceResponsePBImpl.java b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/store/protocol/impl/pb/DisableNameserviceResponsePBImpl.java new file mode 100644 index 0000000..7b274d8 --- /dev/null +++ b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/store/protocol/impl/pb/DisableNameserviceResponsePBImpl.java @@ -0,0 +1,74 @@ +/** + * 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.hdfs.server.federation.store.protocol.impl.pb; + +import java.io.IOException; + +import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.DisableNameserviceResponseProto; +import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.DisableNameserviceResponseProto.Builder; +import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.DisableNameserviceResponseProtoOrBuilder; +import org.apache.hadoop.hdfs.server.federation.store.protocol.DisableNameserviceResponse; +import org.apache.hadoop.hdfs.server.federation.store.records.impl.pb.PBRecord; + +import com.google.protobuf.Message; + +/** + * Protobuf implementation of the state store API object + * {@link DisableNameserviceResponse}. + */ +public class DisableNameserviceResponsePBImpl + extends DisableNameserviceResponse implements PBRecord { + + private FederationProtocolPBTranslator<DisableNameserviceResponseProto, + Builder, DisableNameserviceResponseProtoOrBuilder> translator = + new FederationProtocolPBTranslator<>( + DisableNameserviceResponseProto.class); + + public DisableNameserviceResponsePBImpl() { + } + + public DisableNameserviceResponsePBImpl( + DisableNameserviceResponseProto proto) { + this.translator.setProto(proto); + } + + @Override + public DisableNameserviceResponseProto getProto() { + return translator.build(); + } + + @Override + public void setProto(Message proto) { + this.translator.setProto(proto); + } + + @Override + public void readInstance(String base64String) throws IOException { + this.translator.readInstance(base64String); + } + + @Override + public boolean getStatus() { + return this.translator.getProtoOrBuilder().getStatus(); + } + + @Override + public void setStatus(boolean status) { + this.translator.getBuilder().setStatus(status); + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/hadoop/blob/a9752503/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/store/protocol/impl/pb/EnableNameserviceRequestPBImpl.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/store/protocol/impl/pb/EnableNameserviceRequestPBImpl.java b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/store/protocol/impl/pb/EnableNameserviceRequestPBImpl.java new file mode 100644 index 0000000..510a263 --- /dev/null +++ b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/store/protocol/impl/pb/EnableNameserviceRequestPBImpl.java @@ -0,0 +1,73 @@ +/** + * 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.hdfs.server.federation.store.protocol.impl.pb; + +import java.io.IOException; + +import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.EnableNameserviceRequestProto; +import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.EnableNameserviceRequestProto.Builder; +import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.EnableNameserviceRequestProtoOrBuilder; +import org.apache.hadoop.hdfs.server.federation.store.protocol.EnableNameserviceRequest; +import org.apache.hadoop.hdfs.server.federation.store.records.impl.pb.PBRecord; + +import com.google.protobuf.Message; + +/** + * Protobuf implementation of the state store API object + * EnableNameserviceRequest. + */ +public class EnableNameserviceRequestPBImpl extends EnableNameserviceRequest + implements PBRecord { + + private FederationProtocolPBTranslator<EnableNameserviceRequestProto, + Builder, EnableNameserviceRequestProtoOrBuilder> translator = + new FederationProtocolPBTranslator<>( + EnableNameserviceRequestProto.class); + + public EnableNameserviceRequestPBImpl() { + } + + public EnableNameserviceRequestPBImpl(EnableNameserviceRequestProto proto) { + this.translator.setProto(proto); + } + + @Override + public EnableNameserviceRequestProto getProto() { + return translator.build(); + } + + @Override + public void setProto(Message proto) { + this.translator.setProto(proto); + } + + @Override + public void readInstance(String base64String) throws IOException { + this.translator.readInstance(base64String); + } + + @Override + public String getNameServiceId() { + return this.translator.getProtoOrBuilder().getNameServiceId(); + } + + @Override + public void setNameServiceId(String nsId) { + this.translator.getBuilder().setNameServiceId(nsId); + } +} http://git-wip-us.apache.org/repos/asf/hadoop/blob/a9752503/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/store/protocol/impl/pb/EnableNameserviceResponsePBImpl.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/store/protocol/impl/pb/EnableNameserviceResponsePBImpl.java b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/store/protocol/impl/pb/EnableNameserviceResponsePBImpl.java new file mode 100644 index 0000000..9429b76 --- /dev/null +++ b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/store/protocol/impl/pb/EnableNameserviceResponsePBImpl.java @@ -0,0 +1,73 @@ +/** + * 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.hdfs.server.federation.store.protocol.impl.pb; + +import java.io.IOException; + +import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.EnableNameserviceResponseProto; +import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.EnableNameserviceResponseProto.Builder; +import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.EnableNameserviceResponseProtoOrBuilder; +import org.apache.hadoop.hdfs.server.federation.store.protocol.EnableNameserviceResponse; +import org.apache.hadoop.hdfs.server.federation.store.records.impl.pb.PBRecord; + +import com.google.protobuf.Message; + +/** + * Protobuf implementation of the state store API object + * EnableNameserviceResponse. + */ +public class EnableNameserviceResponsePBImpl extends EnableNameserviceResponse + implements PBRecord { + + private FederationProtocolPBTranslator<EnableNameserviceResponseProto, + Builder, EnableNameserviceResponseProtoOrBuilder> translator = + new FederationProtocolPBTranslator<>( + EnableNameserviceResponseProto.class); + + public EnableNameserviceResponsePBImpl() { + } + + public EnableNameserviceResponsePBImpl(EnableNameserviceResponseProto proto) { + this.translator.setProto(proto); + } + + @Override + public EnableNameserviceResponseProto getProto() { + return translator.build(); + } + + @Override + public void setProto(Message proto) { + this.translator.setProto(proto); + } + + @Override + public void readInstance(String base64String) throws IOException { + this.translator.readInstance(base64String); + } + + @Override + public boolean getStatus() { + return this.translator.getProtoOrBuilder().getStatus(); + } + + @Override + public void setStatus(boolean status) { + this.translator.getBuilder().setStatus(status); + } +} http://git-wip-us.apache.org/repos/asf/hadoop/blob/a9752503/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/store/protocol/impl/pb/GetDisabledNameservicesRequestPBImpl.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/store/protocol/impl/pb/GetDisabledNameservicesRequestPBImpl.java b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/store/protocol/impl/pb/GetDisabledNameservicesRequestPBImpl.java new file mode 100644 index 0000000..829fe36 --- /dev/null +++ b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/store/protocol/impl/pb/GetDisabledNameservicesRequestPBImpl.java @@ -0,0 +1,66 @@ +/** + * 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.hdfs.server.federation.store.protocol.impl.pb; + +import java.io.IOException; + +import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.GetDisabledNameservicesRequestProto; +import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.GetDisabledNameservicesRequestProto.Builder; +import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.GetDisabledNameservicesRequestProtoOrBuilder; +import org.apache.hadoop.hdfs.server.federation.store.protocol.GetDisabledNameservicesRequest; +import org.apache.hadoop.hdfs.server.federation.store.records.impl.pb.PBRecord; + +import com.google.protobuf.Message; + +/** + * Protobuf implementation of the state store API object + * GetDisabledNameservicesRequest. + */ +public class GetDisabledNameservicesRequestPBImpl + extends GetDisabledNameservicesRequest implements PBRecord { + + private FederationProtocolPBTranslator<GetDisabledNameservicesRequestProto, + Builder, GetDisabledNameservicesRequestProtoOrBuilder> translator = + new FederationProtocolPBTranslator<>( + GetDisabledNameservicesRequestProto.class); + + public GetDisabledNameservicesRequestPBImpl() { + // As this request has no parameter, we need to initialize it + this.translator.getBuilder(); + } + + public GetDisabledNameservicesRequestPBImpl( + GetDisabledNameservicesRequestProto proto) { + this.translator.setProto(proto); + } + + @Override + public GetDisabledNameservicesRequestProto getProto() { + return translator.build(); + } + + @Override + public void setProto(Message proto) { + this.translator.setProto(proto); + } + + @Override + public void readInstance(String base64String) throws IOException { + this.translator.readInstance(base64String); + } +} http://git-wip-us.apache.org/repos/asf/hadoop/blob/a9752503/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/store/protocol/impl/pb/GetDisabledNameservicesResponsePBImpl.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/store/protocol/impl/pb/GetDisabledNameservicesResponsePBImpl.java b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/store/protocol/impl/pb/GetDisabledNameservicesResponsePBImpl.java new file mode 100644 index 0000000..ccc0fcc --- /dev/null +++ b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/store/protocol/impl/pb/GetDisabledNameservicesResponsePBImpl.java @@ -0,0 +1,84 @@ +/** + * 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.hdfs.server.federation.store.protocol.impl.pb; + +import java.io.IOException; +import java.util.List; +import java.util.Set; +import java.util.TreeSet; + +import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.GetDisabledNameservicesResponseProto; +import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.GetDisabledNameservicesResponseProto.*; +import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.GetDisabledNameservicesResponseProtoOrBuilder; +import org.apache.hadoop.hdfs.server.federation.store.protocol.GetDisabledNameservicesResponse; +import org.apache.hadoop.hdfs.server.federation.store.records.impl.pb.PBRecord; + +import com.google.protobuf.Message; + +/** + * Protobuf implementation of the state store API object + * GetDisabledNameservicesResponse. + */ +public class GetDisabledNameservicesResponsePBImpl + extends GetDisabledNameservicesResponse implements PBRecord { + + private FederationProtocolPBTranslator<GetDisabledNameservicesResponseProto, + Builder, GetDisabledNameservicesResponseProtoOrBuilder> translator = + new FederationProtocolPBTranslator< + GetDisabledNameservicesResponseProto, Builder, + GetDisabledNameservicesResponseProtoOrBuilder>( + GetDisabledNameservicesResponseProto.class); + + public GetDisabledNameservicesResponsePBImpl() { + } + + public GetDisabledNameservicesResponsePBImpl( + GetDisabledNameservicesResponseProto proto) { + this.translator.setProto(proto); + } + + @Override + public GetDisabledNameservicesResponseProto getProto() { + return this.translator.build(); + } + + @Override + public void setProto(Message proto) { + this.translator.setProto(proto); + } + + @Override + public void readInstance(String base64String) throws IOException { + this.translator.readInstance(base64String); + } + + @Override + public Set<String> getNameservices() { + List<String> nsIds = + this.translator.getProtoOrBuilder().getNameServiceIdsList(); + return new TreeSet<>(nsIds); + } + + @Override + public void setNameservices(Set<String> nameservices) { + this.translator.getBuilder().clearNameServiceIds(); + for (String nsId : nameservices) { + this.translator.getBuilder().addNameServiceIds(nsId); + } + } +} http://git-wip-us.apache.org/repos/asf/hadoop/blob/a9752503/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/store/records/BaseRecord.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/store/records/BaseRecord.java b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/store/records/BaseRecord.java index d5e60ce..64ecc1e 100644 --- a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/store/records/BaseRecord.java +++ b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/store/records/BaseRecord.java @@ -21,6 +21,8 @@ import java.util.Map; import org.apache.hadoop.util.Time; +import com.google.common.annotations.VisibleForTesting; + /** * Abstract base of a data record in the StateStore. All StateStore records are * derived from this class. Data records are persisted in the data store and @@ -110,6 +112,17 @@ public abstract class BaseRecord implements Comparable<BaseRecord> { } /** + * If the record has fields others than the primary keys. This is used by + * TestStateStoreDriverBase to skip the modification check. + * + * @return If the record has more fields. + */ + @VisibleForTesting + public boolean hasOtherFields() { + return true; + } + + /** * Generates a cache key from a map of values. * * @param keys Map of values. http://git-wip-us.apache.org/repos/asf/hadoop/blob/a9752503/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/store/records/DisabledNameservice.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/store/records/DisabledNameservice.java b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/store/records/DisabledNameservice.java new file mode 100644 index 0000000..c8504b7 --- /dev/null +++ b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/store/records/DisabledNameservice.java @@ -0,0 +1,81 @@ +/** + * 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.hdfs.server.federation.store.records; + +import java.io.IOException; +import java.util.SortedMap; +import java.util.TreeMap; + +import org.apache.hadoop.hdfs.server.federation.store.driver.StateStoreSerializer; + +/** + * Data record indicating a specific name service ID has been disabled and + * is no longer valid. Allows quick disabling of name services. + */ +public abstract class DisabledNameservice extends BaseRecord { + + public DisabledNameservice() { + super(); + } + + public static DisabledNameservice newInstance() throws IOException { + DisabledNameservice record = + StateStoreSerializer.newRecord(DisabledNameservice.class); + record.init(); + return record; + } + + public static DisabledNameservice newInstance(String nsId) + throws IOException { + DisabledNameservice record = newInstance(); + record.setNameserviceId(nsId); + return record; + } + + /** + * Get the identifier of the name service to disable. + * + * @return Identifier of the name service to disable. + */ + public abstract String getNameserviceId(); + + /** + * Set the identifier of the name service to disable. + * + * @param nameServiceId Identifier of the name service to disable. + */ + public abstract void setNameserviceId(String nameServiceId); + + @Override + public SortedMap<String, String> getPrimaryKeys() { + SortedMap<String, String> keyMap = new TreeMap<>(); + keyMap.put("nameServiceId", this.getNameserviceId()); + return keyMap; + } + + @Override + public boolean hasOtherFields() { + // We don't have fields other than the primary keys + return false; + } + + @Override + public long getExpirationMs() { + return -1; + } +} http://git-wip-us.apache.org/repos/asf/hadoop/blob/a9752503/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/store/records/impl/pb/DisabledNameservicePBImpl.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/store/records/impl/pb/DisabledNameservicePBImpl.java b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/store/records/impl/pb/DisabledNameservicePBImpl.java new file mode 100644 index 0000000..d1c9770 --- /dev/null +++ b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/store/records/impl/pb/DisabledNameservicePBImpl.java @@ -0,0 +1,95 @@ +/** + * 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.hdfs.server.federation.store.records.impl.pb; + +import java.io.IOException; + +import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.DisabledNameserviceRecordProto; +import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.DisabledNameserviceRecordProto.Builder; +import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.DisabledNameserviceRecordProtoOrBuilder; +import org.apache.hadoop.hdfs.server.federation.store.protocol.impl.pb.FederationProtocolPBTranslator; +import org.apache.hadoop.hdfs.server.federation.store.records.DisabledNameservice; + +import com.google.protobuf.Message; + +/** + * Protobuf implementation of the {@link DisabledNameservice} record. + */ +public class DisabledNameservicePBImpl extends DisabledNameservice + implements PBRecord { + + private FederationProtocolPBTranslator<DisabledNameserviceRecordProto, + Builder, DisabledNameserviceRecordProtoOrBuilder> translator = + new FederationProtocolPBTranslator< + DisabledNameserviceRecordProto, Builder, + DisabledNameserviceRecordProtoOrBuilder>( + DisabledNameserviceRecordProto.class); + + public DisabledNameservicePBImpl() { + } + + public DisabledNameservicePBImpl( + DisabledNameserviceRecordProto proto) { + this.translator.setProto(proto); + } + + @Override + public DisabledNameserviceRecordProto getProto() { + return this.translator.build(); + } + + @Override + public void setProto(Message proto) { + this.translator.setProto(proto); + } + + @Override + public void readInstance(String base64String) throws IOException { + this.translator.readInstance(base64String); + } + + @Override + public String getNameserviceId() { + return this.translator.getProtoOrBuilder().getNameServiceId(); + } + + @Override + public void setNameserviceId(String nameServiceId) { + this.translator.getBuilder().setNameServiceId(nameServiceId); + } + + @Override + public void setDateModified(long time) { + this.translator.getBuilder().setDateModified(time); + } + + @Override + public long getDateModified() { + return this.translator.getProtoOrBuilder().getDateModified(); + } + + @Override + public void setDateCreated(long time) { + this.translator.getBuilder().setDateCreated(time); + } + + @Override + public long getDateCreated() { + return this.translator.getProtoOrBuilder().getDateCreated(); + } +} http://git-wip-us.apache.org/repos/asf/hadoop/blob/a9752503/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/tools/federation/RouterAdmin.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/tools/federation/RouterAdmin.java b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/tools/federation/RouterAdmin.java index ce8ffa1..b686737 100644 --- a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/tools/federation/RouterAdmin.java +++ b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/tools/federation/RouterAdmin.java @@ -32,14 +32,21 @@ import org.apache.hadoop.hdfs.protocol.HdfsConstants; import org.apache.hadoop.hdfs.server.federation.resolver.MountTableManager; import org.apache.hadoop.hdfs.server.federation.resolver.RemoteLocation; import org.apache.hadoop.hdfs.server.federation.resolver.order.DestinationOrder; +import org.apache.hadoop.hdfs.server.federation.router.NameserviceManager; import org.apache.hadoop.hdfs.server.federation.router.RBFConfigKeys; import org.apache.hadoop.hdfs.server.federation.router.RouterClient; import org.apache.hadoop.hdfs.server.federation.router.RouterQuotaUsage; import org.apache.hadoop.hdfs.server.federation.router.RouterStateManager; import org.apache.hadoop.hdfs.server.federation.store.protocol.AddMountTableEntryRequest; import org.apache.hadoop.hdfs.server.federation.store.protocol.AddMountTableEntryResponse; +import org.apache.hadoop.hdfs.server.federation.store.protocol.DisableNameserviceRequest; +import org.apache.hadoop.hdfs.server.federation.store.protocol.DisableNameserviceResponse; +import org.apache.hadoop.hdfs.server.federation.store.protocol.EnableNameserviceRequest; +import org.apache.hadoop.hdfs.server.federation.store.protocol.EnableNameserviceResponse; import org.apache.hadoop.hdfs.server.federation.store.protocol.EnterSafeModeRequest; import org.apache.hadoop.hdfs.server.federation.store.protocol.EnterSafeModeResponse; +import org.apache.hadoop.hdfs.server.federation.store.protocol.GetDisabledNameservicesRequest; +import org.apache.hadoop.hdfs.server.federation.store.protocol.GetDisabledNameservicesResponse; import org.apache.hadoop.hdfs.server.federation.store.protocol.GetMountTableEntriesRequest; import org.apache.hadoop.hdfs.server.federation.store.protocol.GetMountTableEntriesResponse; import org.apache.hadoop.hdfs.server.federation.store.protocol.GetSafeModeRequest; @@ -95,7 +102,9 @@ public class RouterAdmin extends Configured implements Tool { + "\t[-setQuota <path> -nsQuota <nsQuota> -ssQuota " + "<quota in bytes or quota size string>]\n" + "\t[-clrQuota <path>]\n" - + "\t[-safemode enter | leave | get]\n"; + + "\t[-safemode enter | leave | get]\n" + + "\t[-nameservice enable | disable <nameservice>]\n" + + "\t[-getDisabledNameservices]\n"; System.out.println(usage); } @@ -143,6 +152,12 @@ public class RouterAdmin extends Configured implements Tool { printUsage(); return exitCode; } + } else if ("-nameservice".equalsIgnoreCase(cmd)) { + if (argv.length < 3) { + System.err.println("Not enough parameters specificed for cmd " + cmd); + printUsage(); + return exitCode; + } } // Initialize RouterClient @@ -190,6 +205,12 @@ public class RouterAdmin extends Configured implements Tool { } } else if ("-safemode".equals(cmd)) { manageSafeMode(argv[i]); + } else if ("-nameservice".equals(cmd)) { + String subcmd = argv[i]; + String nsId = argv[i + 1]; + manageNameservice(subcmd, nsId); + } else if ("-getDisabledNameservices".equals(cmd)) { + getDisabledNameservices(); } else { printUsage(); return exitCode; @@ -612,6 +633,57 @@ public class RouterAdmin extends Configured implements Tool { } /** + * Manage the name service: enabling/disabling. + * @param cmd Input command, disable or enable. + * @throws IOException + */ + private void manageNameservice(String cmd, String nsId) throws IOException { + if (cmd.equals("enable")) { + if (enableNameservice(nsId)) { + System.out.println("Successfully enabled nameservice " + nsId); + } else { + System.err.println("Cannot enable " + nsId); + } + } else if (cmd.equals("disable")) { + if (disableNameservice(nsId)) { + System.out.println("Successfully disabled nameservice " + nsId); + } else { + System.err.println("Cannot disable " + nsId); + } + } else { + throw new IllegalArgumentException("Unknown command: " + cmd); + } + } + + private boolean disableNameservice(String nsId) throws IOException { + NameserviceManager nameserviceManager = client.getNameserviceManager(); + DisableNameserviceResponse response = + nameserviceManager.disableNameservice( + DisableNameserviceRequest.newInstance(nsId)); + return response.getStatus(); + } + + private boolean enableNameservice(String nsId) throws IOException { + NameserviceManager nameserviceManager = client.getNameserviceManager(); + EnableNameserviceResponse response = + nameserviceManager.enableNameservice( + EnableNameserviceRequest.newInstance(nsId)); + return response.getStatus(); + } + + private void getDisabledNameservices() throws IOException { + NameserviceManager nameserviceManager = client.getNameserviceManager(); + GetDisabledNameservicesRequest request = + GetDisabledNameservicesRequest.newInstance(); + GetDisabledNameservicesResponse response = + nameserviceManager.getDisabledNameservices(request); + System.out.println("List of disabled nameservices:"); + for (String nsId : response.getNameservices()) { + System.out.println(nsId); + } + } + + /** * Inner class that stores ACL info of mount table. */ static class ACLEntity { http://git-wip-us.apache.org/repos/asf/hadoop/blob/a9752503/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/proto/FederationProtocol.proto ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/proto/FederationProtocol.proto b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/proto/FederationProtocol.proto index cd8df5d..2ea240c 100644 --- a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/proto/FederationProtocol.proto +++ b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/proto/FederationProtocol.proto @@ -241,4 +241,37 @@ message GetSafeModeRequestProto { message GetSafeModeResponseProto { optional bool isInSafeMode = 1; -} \ No newline at end of file +} + +///////////////////////////////////////////////// +// Disabled Nameservice State +///////////////////////////////////////////////// + +message DisabledNameserviceRecordProto { + optional uint64 dateCreated = 1; + optional uint64 dateModified = 2; + optional string nameServiceId = 3; +} + +message DisableNameserviceRequestProto { + optional string nameServiceId = 1; +} + +message DisableNameserviceResponseProto { + optional bool status = 1; +} + +message EnableNameserviceRequestProto { + optional string nameServiceId = 1; +} + +message EnableNameserviceResponseProto { + optional bool status = 1; +} + +message GetDisabledNameservicesRequestProto { +} + +message GetDisabledNameservicesResponseProto { + repeated string nameServiceIds = 1; +} --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
