HDFS-13068. RBF: Add router admin option to manage safe mode. Contributed by Yiqun Lin.
This commit is contained in:
parent
aa45faf0b2
commit
b0627c891b
@ -23,8 +23,14 @@
|
||||
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.EnterSafeModeRequestProto;
|
||||
import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.EnterSafeModeResponseProto;
|
||||
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;
|
||||
import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.GetSafeModeResponseProto;
|
||||
import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.LeaveSafeModeRequestProto;
|
||||
import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.LeaveSafeModeResponseProto;
|
||||
import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.RemoveMountTableEntryRequestProto;
|
||||
import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.RemoveMountTableEntryResponseProto;
|
||||
import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.UpdateMountTableEntryRequestProto;
|
||||
@ -32,16 +38,28 @@
|
||||
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.EnterSafeModeRequest;
|
||||
import org.apache.hadoop.hdfs.server.federation.store.protocol.EnterSafeModeResponse;
|
||||
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;
|
||||
import org.apache.hadoop.hdfs.server.federation.store.protocol.GetSafeModeResponse;
|
||||
import org.apache.hadoop.hdfs.server.federation.store.protocol.LeaveSafeModeRequest;
|
||||
import org.apache.hadoop.hdfs.server.federation.store.protocol.LeaveSafeModeResponse;
|
||||
import org.apache.hadoop.hdfs.server.federation.store.protocol.RemoveMountTableEntryRequest;
|
||||
import org.apache.hadoop.hdfs.server.federation.store.protocol.RemoveMountTableEntryResponse;
|
||||
import org.apache.hadoop.hdfs.server.federation.store.protocol.UpdateMountTableEntryRequest;
|
||||
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.EnterSafeModeRequestPBImpl;
|
||||
import org.apache.hadoop.hdfs.server.federation.store.protocol.impl.pb.EnterSafeModeResponsePBImpl;
|
||||
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;
|
||||
import org.apache.hadoop.hdfs.server.federation.store.protocol.impl.pb.GetSafeModeResponsePBImpl;
|
||||
import org.apache.hadoop.hdfs.server.federation.store.protocol.impl.pb.LeaveSafeModeRequestPBImpl;
|
||||
import org.apache.hadoop.hdfs.server.federation.store.protocol.impl.pb.LeaveSafeModeResponsePBImpl;
|
||||
import org.apache.hadoop.hdfs.server.federation.store.protocol.impl.pb.RemoveMountTableEntryRequestPBImpl;
|
||||
import org.apache.hadoop.hdfs.server.federation.store.protocol.impl.pb.RemoveMountTableEntryResponsePBImpl;
|
||||
import org.apache.hadoop.hdfs.server.federation.store.protocol.impl.pb.UpdateMountTableEntryRequestPBImpl;
|
||||
@ -148,4 +166,46 @@ public UpdateMountTableEntryResponseProto updateMountTableEntry(
|
||||
throw new ServiceException(e);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public EnterSafeModeResponseProto enterSafeMode(RpcController controller,
|
||||
EnterSafeModeRequestProto request) throws ServiceException {
|
||||
try {
|
||||
EnterSafeModeRequest req = new EnterSafeModeRequestPBImpl(request);
|
||||
EnterSafeModeResponse response = server.enterSafeMode(req);
|
||||
EnterSafeModeResponsePBImpl responsePB =
|
||||
(EnterSafeModeResponsePBImpl) response;
|
||||
return responsePB.getProto();
|
||||
} catch (IOException e) {
|
||||
throw new ServiceException(e);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public LeaveSafeModeResponseProto leaveSafeMode(RpcController controller,
|
||||
LeaveSafeModeRequestProto request) throws ServiceException {
|
||||
try {
|
||||
LeaveSafeModeRequest req = new LeaveSafeModeRequestPBImpl(request);
|
||||
LeaveSafeModeResponse response = server.leaveSafeMode(req);
|
||||
LeaveSafeModeResponsePBImpl responsePB =
|
||||
(LeaveSafeModeResponsePBImpl) response;
|
||||
return responsePB.getProto();
|
||||
} catch (IOException e) {
|
||||
throw new ServiceException(e);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public GetSafeModeResponseProto getSafeMode(RpcController controller,
|
||||
GetSafeModeRequestProto request) throws ServiceException {
|
||||
try {
|
||||
GetSafeModeRequest req = new GetSafeModeRequestPBImpl(request);
|
||||
GetSafeModeResponse response = server.getSafeMode(req);
|
||||
GetSafeModeResponsePBImpl responsePB =
|
||||
(GetSafeModeResponsePBImpl) response;
|
||||
return responsePB.getProto();
|
||||
} catch (IOException e) {
|
||||
throw new ServiceException(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -24,25 +24,41 @@
|
||||
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.EnterSafeModeRequestProto;
|
||||
import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.EnterSafeModeResponseProto;
|
||||
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;
|
||||
import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.GetSafeModeResponseProto;
|
||||
import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.LeaveSafeModeRequestProto;
|
||||
import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.LeaveSafeModeResponseProto;
|
||||
import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.RemoveMountTableEntryRequestProto;
|
||||
import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.RemoveMountTableEntryResponseProto;
|
||||
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.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.EnterSafeModeRequest;
|
||||
import org.apache.hadoop.hdfs.server.federation.store.protocol.EnterSafeModeResponse;
|
||||
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;
|
||||
import org.apache.hadoop.hdfs.server.federation.store.protocol.GetSafeModeResponse;
|
||||
import org.apache.hadoop.hdfs.server.federation.store.protocol.LeaveSafeModeRequest;
|
||||
import org.apache.hadoop.hdfs.server.federation.store.protocol.LeaveSafeModeResponse;
|
||||
import org.apache.hadoop.hdfs.server.federation.store.protocol.RemoveMountTableEntryRequest;
|
||||
import org.apache.hadoop.hdfs.server.federation.store.protocol.RemoveMountTableEntryResponse;
|
||||
import org.apache.hadoop.hdfs.server.federation.store.protocol.UpdateMountTableEntryRequest;
|
||||
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.EnterSafeModeResponsePBImpl;
|
||||
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;
|
||||
import org.apache.hadoop.hdfs.server.federation.store.protocol.impl.pb.LeaveSafeModeResponsePBImpl;
|
||||
import org.apache.hadoop.hdfs.server.federation.store.protocol.impl.pb.RemoveMountTableEntryRequestPBImpl;
|
||||
import org.apache.hadoop.hdfs.server.federation.store.protocol.impl.pb.RemoveMountTableEntryResponsePBImpl;
|
||||
import org.apache.hadoop.hdfs.server.federation.store.protocol.impl.pb.UpdateMountTableEntryRequestPBImpl;
|
||||
@ -64,7 +80,7 @@
|
||||
@InterfaceStability.Stable
|
||||
public class RouterAdminProtocolTranslatorPB
|
||||
implements ProtocolMetaInterface, MountTableManager,
|
||||
Closeable, ProtocolTranslator {
|
||||
Closeable, ProtocolTranslator, RouterStateManager {
|
||||
final private RouterAdminProtocolPB rpcProxy;
|
||||
|
||||
public RouterAdminProtocolTranslatorPB(RouterAdminProtocolPB proxy) {
|
||||
@ -147,4 +163,46 @@ public GetMountTableEntriesResponse getMountTableEntries(
|
||||
throw new IOException(ProtobufHelper.getRemoteException(e).getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public EnterSafeModeResponse enterSafeMode(EnterSafeModeRequest request)
|
||||
throws IOException {
|
||||
EnterSafeModeRequestProto proto =
|
||||
EnterSafeModeRequestProto.newBuilder().build();
|
||||
try {
|
||||
EnterSafeModeResponseProto response =
|
||||
rpcProxy.enterSafeMode(null, proto);
|
||||
return new EnterSafeModeResponsePBImpl(response);
|
||||
} catch (ServiceException e) {
|
||||
throw new IOException(ProtobufHelper.getRemoteException(e).getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public LeaveSafeModeResponse leaveSafeMode(LeaveSafeModeRequest request)
|
||||
throws IOException {
|
||||
LeaveSafeModeRequestProto proto =
|
||||
LeaveSafeModeRequestProto.newBuilder().build();
|
||||
try {
|
||||
LeaveSafeModeResponseProto response =
|
||||
rpcProxy.leaveSafeMode(null, proto);
|
||||
return new LeaveSafeModeResponsePBImpl(response);
|
||||
} catch (ServiceException e) {
|
||||
throw new IOException(ProtobufHelper.getRemoteException(e).getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public GetSafeModeResponse getSafeMode(GetSafeModeRequest request)
|
||||
throws IOException {
|
||||
GetSafeModeRequestProto proto =
|
||||
GetSafeModeRequestProto.newBuilder().build();
|
||||
try {
|
||||
GetSafeModeResponseProto response =
|
||||
rpcProxy.getSafeMode(null, proto);
|
||||
return new GetSafeModeResponsePBImpl(response);
|
||||
} catch (ServiceException e) {
|
||||
throw new IOException(ProtobufHelper.getRemoteException(e).getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -32,8 +32,14 @@
|
||||
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.EnterSafeModeRequest;
|
||||
import org.apache.hadoop.hdfs.server.federation.store.protocol.EnterSafeModeResponse;
|
||||
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;
|
||||
import org.apache.hadoop.hdfs.server.federation.store.protocol.GetSafeModeResponse;
|
||||
import org.apache.hadoop.hdfs.server.federation.store.protocol.LeaveSafeModeRequest;
|
||||
import org.apache.hadoop.hdfs.server.federation.store.protocol.LeaveSafeModeResponse;
|
||||
import org.apache.hadoop.hdfs.server.federation.store.protocol.RemoveMountTableEntryRequest;
|
||||
import org.apache.hadoop.hdfs.server.federation.store.protocol.RemoveMountTableEntryResponse;
|
||||
import org.apache.hadoop.hdfs.server.federation.store.protocol.UpdateMountTableEntryRequest;
|
||||
@ -56,7 +62,7 @@
|
||||
* router. It is created, started, and stopped by {@link Router}.
|
||||
*/
|
||||
public class RouterAdminServer extends AbstractService
|
||||
implements MountTableManager {
|
||||
implements MountTableManager, RouterStateManager {
|
||||
|
||||
private static final Logger LOG =
|
||||
LoggerFactory.getLogger(RouterAdminServer.class);
|
||||
@ -212,6 +218,44 @@ public GetMountTableEntriesResponse getMountTableEntries(
|
||||
return getMountTableStore().getMountTableEntries(request);
|
||||
}
|
||||
|
||||
@Override
|
||||
public EnterSafeModeResponse enterSafeMode(EnterSafeModeRequest request)
|
||||
throws IOException {
|
||||
this.router.updateRouterState(RouterServiceState.SAFEMODE);
|
||||
this.router.getRpcServer().setSafeMode(true);
|
||||
return EnterSafeModeResponse.newInstance(verifySafeMode(true));
|
||||
}
|
||||
|
||||
@Override
|
||||
public LeaveSafeModeResponse leaveSafeMode(LeaveSafeModeRequest request)
|
||||
throws IOException {
|
||||
this.router.updateRouterState(RouterServiceState.RUNNING);
|
||||
this.router.getRpcServer().setSafeMode(false);
|
||||
return LeaveSafeModeResponse.newInstance(verifySafeMode(false));
|
||||
}
|
||||
|
||||
@Override
|
||||
public GetSafeModeResponse getSafeMode(GetSafeModeRequest request)
|
||||
throws IOException {
|
||||
boolean isInSafeMode = this.router.getRpcServer().isInSafeMode();
|
||||
return GetSafeModeResponse.newInstance(isInSafeMode);
|
||||
}
|
||||
|
||||
/**
|
||||
* Verify if Router set safe mode state correctly.
|
||||
* @param isInSafeMode Expected state to be set.
|
||||
* @return
|
||||
*/
|
||||
private boolean verifySafeMode(boolean isInSafeMode) {
|
||||
boolean serverInSafeMode = this.router.getRpcServer().isInSafeMode();
|
||||
RouterServiceState currentState = this.router.getRouterState();
|
||||
|
||||
return (isInSafeMode && currentState == RouterServiceState.SAFEMODE
|
||||
&& serverInSafeMode)
|
||||
|| (!isInSafeMode && currentState != RouterServiceState.SAFEMODE
|
||||
&& !serverInSafeMode);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a new permission checker used for making mount table access
|
||||
* control. This method will be invoked during each RPC call in router
|
||||
|
@ -69,6 +69,10 @@ public MountTableManager getMountTableManager() {
|
||||
return proxy;
|
||||
}
|
||||
|
||||
public RouterStateManager getRouterStateManager() {
|
||||
return proxy;
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized void close() throws IOException {
|
||||
RPC.stopProxy(proxy);
|
||||
|
@ -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.router;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
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.GetSafeModeRequest;
|
||||
import org.apache.hadoop.hdfs.server.federation.store.protocol.GetSafeModeResponse;
|
||||
import org.apache.hadoop.hdfs.server.federation.store.protocol.LeaveSafeModeRequest;
|
||||
import org.apache.hadoop.hdfs.server.federation.store.protocol.LeaveSafeModeResponse;
|
||||
|
||||
/**
|
||||
* Interface of managing the Router state.
|
||||
*/
|
||||
public interface RouterStateManager {
|
||||
/**
|
||||
* Enter safe mode and change Router state to RouterServiceState#SAFEMODE.
|
||||
*/
|
||||
EnterSafeModeResponse enterSafeMode(EnterSafeModeRequest request)
|
||||
throws IOException;
|
||||
|
||||
/**
|
||||
* Leave safe mode and change Router state to RouterServiceState#RUNNING.
|
||||
*/
|
||||
LeaveSafeModeResponse leaveSafeMode(LeaveSafeModeRequest request)
|
||||
throws IOException;
|
||||
|
||||
/**
|
||||
* Verify if current Router state is safe mode.
|
||||
*/
|
||||
GetSafeModeResponse getSafeMode(GetSafeModeRequest request)
|
||||
throws IOException;
|
||||
}
|
@ -0,0 +1,32 @@
|
||||
/**
|
||||
* 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.hdfs.server.federation.store.driver.StateStoreSerializer;
|
||||
|
||||
/**
|
||||
* API request for the Router entering safe mode state and updating
|
||||
* its state in State Store.
|
||||
*/
|
||||
public abstract class EnterSafeModeRequest {
|
||||
public static EnterSafeModeRequest newInstance() throws IOException {
|
||||
return StateStoreSerializer.newRecord(EnterSafeModeRequest.class);
|
||||
}
|
||||
}
|
@ -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 the Router entering safe mode state and updating
|
||||
* its state in State Store.
|
||||
*/
|
||||
public abstract class EnterSafeModeResponse {
|
||||
|
||||
public static EnterSafeModeResponse newInstance() throws IOException {
|
||||
return StateStoreSerializer.newRecord(EnterSafeModeResponse.class);
|
||||
}
|
||||
|
||||
public static EnterSafeModeResponse newInstance(boolean status)
|
||||
throws IOException {
|
||||
EnterSafeModeResponse response = newInstance();
|
||||
response.setStatus(status);
|
||||
return response;
|
||||
}
|
||||
|
||||
@Public
|
||||
@Unstable
|
||||
public abstract boolean getStatus();
|
||||
|
||||
@Public
|
||||
@Unstable
|
||||
public abstract void setStatus(boolean result);
|
||||
}
|
@ -0,0 +1,31 @@
|
||||
/**
|
||||
* 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.hdfs.server.federation.store.driver.StateStoreSerializer;
|
||||
|
||||
/**
|
||||
* API request for verifying if current Router state is safe mode.
|
||||
*/
|
||||
public abstract class GetSafeModeRequest {
|
||||
public static GetSafeModeRequest newInstance() throws IOException {
|
||||
return StateStoreSerializer.newRecord(GetSafeModeRequest.class);
|
||||
}
|
||||
}
|
@ -0,0 +1,49 @@
|
||||
/**
|
||||
* 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 verifying if current Router state is safe mode.
|
||||
*/
|
||||
public abstract class GetSafeModeResponse {
|
||||
|
||||
public static GetSafeModeResponse newInstance() throws IOException {
|
||||
return StateStoreSerializer.newRecord(GetSafeModeResponse.class);
|
||||
}
|
||||
|
||||
public static GetSafeModeResponse newInstance(boolean isInSafeMode)
|
||||
throws IOException {
|
||||
GetSafeModeResponse response = newInstance();
|
||||
response.setSafeMode(isInSafeMode);
|
||||
return response;
|
||||
}
|
||||
|
||||
@Public
|
||||
@Unstable
|
||||
public abstract boolean isInSafeMode();
|
||||
|
||||
@Public
|
||||
@Unstable
|
||||
public abstract void setSafeMode(boolean isInSafeMode);
|
||||
}
|
@ -0,0 +1,32 @@
|
||||
/**
|
||||
* 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.hdfs.server.federation.store.driver.StateStoreSerializer;
|
||||
|
||||
/**
|
||||
* API request for the Router leaving safe mode state and updating
|
||||
* its state in State Store.
|
||||
*/
|
||||
public abstract class LeaveSafeModeRequest {
|
||||
public static LeaveSafeModeRequest newInstance() throws IOException {
|
||||
return StateStoreSerializer.newRecord(LeaveSafeModeRequest.class);
|
||||
}
|
||||
}
|
@ -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 the Router leaving safe mode state and updating
|
||||
* its state in State Store.
|
||||
*/
|
||||
public abstract class LeaveSafeModeResponse {
|
||||
|
||||
public static LeaveSafeModeResponse newInstance() throws IOException {
|
||||
return StateStoreSerializer.newRecord(LeaveSafeModeResponse.class);
|
||||
}
|
||||
|
||||
public static LeaveSafeModeResponse newInstance(boolean status)
|
||||
throws IOException {
|
||||
LeaveSafeModeResponse response = newInstance();
|
||||
response.setStatus(status);
|
||||
return response;
|
||||
}
|
||||
|
||||
@Public
|
||||
@Unstable
|
||||
public abstract boolean getStatus();
|
||||
|
||||
@Public
|
||||
@Unstable
|
||||
public abstract void setStatus(boolean result);
|
||||
}
|
@ -0,0 +1,62 @@
|
||||
/**
|
||||
* 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.EnterSafeModeRequestProto;
|
||||
import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.EnterSafeModeRequestProtoOrBuilder;
|
||||
import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.GetRouterRegistrationResponseProto.Builder;
|
||||
import org.apache.hadoop.hdfs.server.federation.store.protocol.EnterSafeModeRequest;
|
||||
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
|
||||
* EnterSafeModeRequest.
|
||||
*/
|
||||
public class EnterSafeModeRequestPBImpl extends EnterSafeModeRequest
|
||||
implements PBRecord {
|
||||
|
||||
private FederationProtocolPBTranslator<EnterSafeModeRequestProto,
|
||||
Builder, EnterSafeModeRequestProtoOrBuilder> translator =
|
||||
new FederationProtocolPBTranslator<>(EnterSafeModeRequestProto.class);
|
||||
|
||||
public EnterSafeModeRequestPBImpl() {
|
||||
}
|
||||
|
||||
public EnterSafeModeRequestPBImpl(EnterSafeModeRequestProto proto) {
|
||||
this.translator.setProto(proto);
|
||||
}
|
||||
|
||||
@Override
|
||||
public EnterSafeModeRequestProto 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);
|
||||
}
|
||||
}
|
@ -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.EnterSafeModeResponseProto;
|
||||
import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.EnterSafeModeResponseProto.Builder;
|
||||
import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.EnterSafeModeResponseProtoOrBuilder;
|
||||
import org.apache.hadoop.hdfs.server.federation.store.protocol.EnterSafeModeResponse;
|
||||
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
|
||||
* EnterSafeModeResponse.
|
||||
*/
|
||||
public class EnterSafeModeResponsePBImpl extends EnterSafeModeResponse
|
||||
implements PBRecord {
|
||||
|
||||
private FederationProtocolPBTranslator<EnterSafeModeResponseProto,
|
||||
Builder, EnterSafeModeResponseProtoOrBuilder> translator =
|
||||
new FederationProtocolPBTranslator<>(
|
||||
EnterSafeModeResponseProto.class);
|
||||
|
||||
public EnterSafeModeResponsePBImpl() {
|
||||
}
|
||||
|
||||
public EnterSafeModeResponsePBImpl(EnterSafeModeResponseProto proto) {
|
||||
this.translator.setProto(proto);
|
||||
}
|
||||
|
||||
@Override
|
||||
public EnterSafeModeResponseProto 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 result) {
|
||||
this.translator.getBuilder().setStatus(result);
|
||||
}
|
||||
}
|
@ -0,0 +1,62 @@
|
||||
/**
|
||||
* 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.GetSafeModeRequestProto;
|
||||
import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.GetSafeModeRequestProto.Builder;
|
||||
import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.GetSafeModeRequestProtoOrBuilder;
|
||||
import org.apache.hadoop.hdfs.server.federation.store.protocol.GetSafeModeRequest;
|
||||
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
|
||||
* GetSafeModeRequest.
|
||||
*/
|
||||
public class GetSafeModeRequestPBImpl extends GetSafeModeRequest
|
||||
implements PBRecord {
|
||||
|
||||
private FederationProtocolPBTranslator<GetSafeModeRequestProto,
|
||||
Builder, GetSafeModeRequestProtoOrBuilder> translator =
|
||||
new FederationProtocolPBTranslator<>(GetSafeModeRequestProto.class);
|
||||
|
||||
public GetSafeModeRequestPBImpl() {
|
||||
}
|
||||
|
||||
public GetSafeModeRequestPBImpl(GetSafeModeRequestProto proto) {
|
||||
this.translator.setProto(proto);
|
||||
}
|
||||
|
||||
@Override
|
||||
public GetSafeModeRequestProto 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);
|
||||
}
|
||||
}
|
@ -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.GetSafeModeResponseProto;
|
||||
import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.GetSafeModeResponseProto.Builder;
|
||||
import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.GetSafeModeResponseProtoOrBuilder;
|
||||
import org.apache.hadoop.hdfs.server.federation.store.protocol.GetSafeModeResponse;
|
||||
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
|
||||
* GetSafeModeResponse.
|
||||
*/
|
||||
public class GetSafeModeResponsePBImpl extends GetSafeModeResponse
|
||||
implements PBRecord {
|
||||
|
||||
private FederationProtocolPBTranslator<GetSafeModeResponseProto,
|
||||
Builder, GetSafeModeResponseProtoOrBuilder> translator =
|
||||
new FederationProtocolPBTranslator<>(
|
||||
GetSafeModeResponseProto.class);
|
||||
|
||||
public GetSafeModeResponsePBImpl() {
|
||||
}
|
||||
|
||||
public GetSafeModeResponsePBImpl(GetSafeModeResponseProto proto) {
|
||||
this.translator.setProto(proto);
|
||||
}
|
||||
|
||||
@Override
|
||||
public GetSafeModeResponseProto 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 isInSafeMode() {
|
||||
return this.translator.getProtoOrBuilder().getIsInSafeMode();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSafeMode(boolean isInSafeMode) {
|
||||
this.translator.getBuilder().setIsInSafeMode(isInSafeMode);
|
||||
}
|
||||
}
|
@ -0,0 +1,62 @@
|
||||
/**
|
||||
* 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.LeaveSafeModeRequestProto;
|
||||
import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.LeaveSafeModeRequestProto.Builder;
|
||||
import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.LeaveSafeModeRequestProtoOrBuilder;
|
||||
import org.apache.hadoop.hdfs.server.federation.store.protocol.LeaveSafeModeRequest;
|
||||
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
|
||||
* LeaveSafeModeRequest.
|
||||
*/
|
||||
public class LeaveSafeModeRequestPBImpl extends LeaveSafeModeRequest
|
||||
implements PBRecord {
|
||||
|
||||
private FederationProtocolPBTranslator<LeaveSafeModeRequestProto,
|
||||
Builder, LeaveSafeModeRequestProtoOrBuilder> translator =
|
||||
new FederationProtocolPBTranslator<>(LeaveSafeModeRequestProto.class);
|
||||
|
||||
public LeaveSafeModeRequestPBImpl() {
|
||||
}
|
||||
|
||||
public LeaveSafeModeRequestPBImpl(LeaveSafeModeRequestProto proto) {
|
||||
this.translator.setProto(proto);
|
||||
}
|
||||
|
||||
@Override
|
||||
public LeaveSafeModeRequestProto 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);
|
||||
}
|
||||
}
|
@ -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.LeaveSafeModeResponseProto;
|
||||
import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.LeaveSafeModeResponseProto.Builder;
|
||||
import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.LeaveSafeModeResponseProtoOrBuilder;
|
||||
import org.apache.hadoop.hdfs.server.federation.store.protocol.LeaveSafeModeResponse;
|
||||
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
|
||||
* LeaveSafeModeResponse.
|
||||
*/
|
||||
public class LeaveSafeModeResponsePBImpl extends LeaveSafeModeResponse
|
||||
implements PBRecord {
|
||||
|
||||
private FederationProtocolPBTranslator<LeaveSafeModeResponseProto,
|
||||
Builder, LeaveSafeModeResponseProtoOrBuilder> translator =
|
||||
new FederationProtocolPBTranslator<>(
|
||||
LeaveSafeModeResponseProto.class);
|
||||
|
||||
public LeaveSafeModeResponsePBImpl() {
|
||||
}
|
||||
|
||||
public LeaveSafeModeResponsePBImpl(LeaveSafeModeResponseProto proto) {
|
||||
this.translator.setProto(proto);
|
||||
}
|
||||
|
||||
@Override
|
||||
public LeaveSafeModeResponseProto 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 result) {
|
||||
this.translator.getBuilder().setStatus(result);
|
||||
}
|
||||
}
|
@ -35,10 +35,17 @@
|
||||
import org.apache.hadoop.hdfs.server.federation.resolver.order.DestinationOrder;
|
||||
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.EnterSafeModeRequest;
|
||||
import org.apache.hadoop.hdfs.server.federation.store.protocol.EnterSafeModeResponse;
|
||||
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;
|
||||
import org.apache.hadoop.hdfs.server.federation.store.protocol.GetSafeModeResponse;
|
||||
import org.apache.hadoop.hdfs.server.federation.store.protocol.LeaveSafeModeRequest;
|
||||
import org.apache.hadoop.hdfs.server.federation.store.protocol.LeaveSafeModeResponse;
|
||||
import org.apache.hadoop.hdfs.server.federation.store.protocol.RemoveMountTableEntryRequest;
|
||||
import org.apache.hadoop.hdfs.server.federation.store.protocol.RemoveMountTableEntryResponse;
|
||||
import org.apache.hadoop.hdfs.server.federation.store.protocol.UpdateMountTableEntryRequest;
|
||||
@ -86,7 +93,9 @@ public void printUsage() {
|
||||
+ "\t[-ls <path>]\n"
|
||||
+ "\t[-setQuota <path> -nsQuota <nsQuota> -ssQuota "
|
||||
+ "<quota in bytes or quota size string>]\n"
|
||||
+ "\t[-clrQuota <path>\n";
|
||||
+ "\t[-clrQuota <path>]\n"
|
||||
+ "\t[-safemode enter | leave | get]\n";
|
||||
|
||||
System.out.println(usage);
|
||||
}
|
||||
|
||||
@ -127,6 +136,12 @@ public int run(String[] argv) throws Exception {
|
||||
printUsage();
|
||||
return exitCode;
|
||||
}
|
||||
} else if ("-safemode".equalsIgnoreCase(cmd)) {
|
||||
if (argv.length < 2) {
|
||||
System.err.println("Not enough parameters specificed for cmd " + cmd);
|
||||
printUsage();
|
||||
return exitCode;
|
||||
}
|
||||
}
|
||||
|
||||
// Initialize RouterClient
|
||||
@ -172,6 +187,8 @@ public int run(String[] argv) throws Exception {
|
||||
System.out.println(
|
||||
"Successfully clear quota for mount point " + argv[i]);
|
||||
}
|
||||
} else if ("-safemode".equals(cmd)) {
|
||||
manageSafeMode(argv[i]);
|
||||
} else {
|
||||
printUsage();
|
||||
return exitCode;
|
||||
@ -524,6 +541,62 @@ private boolean updateQuota(String mount, long nsQuota, long ssQuota)
|
||||
return updateResponse.getStatus();
|
||||
}
|
||||
|
||||
/**
|
||||
* Manager the safe mode state.
|
||||
* @param cmd Input command, enter or leave safe mode.
|
||||
* @throws IOException
|
||||
*/
|
||||
private void manageSafeMode(String cmd) throws IOException {
|
||||
if (cmd.equals("enter")) {
|
||||
if (enterSafeMode()) {
|
||||
System.out.println("Successfully enter safe mode.");
|
||||
}
|
||||
} else if (cmd.equals("leave")) {
|
||||
if (leaveSafeMode()) {
|
||||
System.out.println("Successfully leave safe mode.");
|
||||
}
|
||||
} else if (cmd.equals("get")) {
|
||||
boolean result = getSafeMode();
|
||||
System.out.println("Safe Mode: " + result);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Request the Router entering safemode state.
|
||||
* @return Return true if entering safemode successfully.
|
||||
* @throws IOException
|
||||
*/
|
||||
private boolean enterSafeMode() throws IOException {
|
||||
RouterStateManager stateManager = client.getRouterStateManager();
|
||||
EnterSafeModeResponse response = stateManager.enterSafeMode(
|
||||
EnterSafeModeRequest.newInstance());
|
||||
return response.getStatus();
|
||||
}
|
||||
|
||||
/**
|
||||
* Request the Router leaving safemode state.
|
||||
* @return Return true if leaving safemode successfully.
|
||||
* @throws IOException
|
||||
*/
|
||||
private boolean leaveSafeMode() throws IOException {
|
||||
RouterStateManager stateManager = client.getRouterStateManager();
|
||||
LeaveSafeModeResponse response = stateManager.leaveSafeMode(
|
||||
LeaveSafeModeRequest.newInstance());
|
||||
return response.getStatus();
|
||||
}
|
||||
|
||||
/**
|
||||
* Verify if current Router state is safe mode state.
|
||||
* @return True if the Router is in safe mode.
|
||||
* @throws IOException
|
||||
*/
|
||||
private boolean getSafeMode() throws IOException {
|
||||
RouterStateManager stateManager = client.getRouterStateManager();
|
||||
GetSafeModeResponse response = stateManager.getSafeMode(
|
||||
GetSafeModeRequest.newInstance());
|
||||
return response.isInSafeMode();
|
||||
}
|
||||
|
||||
/**
|
||||
* Inner class that stores ACL info of mount table.
|
||||
*/
|
||||
|
@ -215,4 +215,29 @@ message RouterHeartbeatRequestProto {
|
||||
|
||||
message RouterHeartbeatResponseProto {
|
||||
optional bool status = 1;
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// Route State
|
||||
/////////////////////////////////////////////////
|
||||
|
||||
message EnterSafeModeRequestProto {
|
||||
}
|
||||
|
||||
message EnterSafeModeResponseProto {
|
||||
optional bool status = 1;
|
||||
}
|
||||
|
||||
message LeaveSafeModeRequestProto {
|
||||
}
|
||||
|
||||
message LeaveSafeModeResponseProto {
|
||||
optional bool status = 1;
|
||||
}
|
||||
|
||||
message GetSafeModeRequestProto {
|
||||
}
|
||||
|
||||
message GetSafeModeResponseProto {
|
||||
optional bool isInSafeMode = 1;
|
||||
}
|
@ -44,4 +44,19 @@ service RouterAdminProtocolService {
|
||||
* Get matching mount entries
|
||||
*/
|
||||
rpc getMountTableEntries(GetMountTableEntriesRequestProto) returns(GetMountTableEntriesResponseProto);
|
||||
|
||||
/**
|
||||
* Transform Router state to safe mode state.
|
||||
*/
|
||||
rpc enterSafeMode(EnterSafeModeRequestProto) returns (EnterSafeModeResponseProto);
|
||||
|
||||
/**
|
||||
* Transform Router state from safe mode to running state.
|
||||
*/
|
||||
rpc leaveSafeMode(LeaveSafeModeRequestProto) returns (LeaveSafeModeResponseProto);
|
||||
|
||||
/**
|
||||
* Verify if current Router state is safe mode state.
|
||||
*/
|
||||
rpc getSafeMode(GetSafeModeRequestProto) returns (GetSafeModeResponseProto);
|
||||
}
|
@ -430,6 +430,7 @@ Usage:
|
||||
[-ls <path>]
|
||||
[-setQuota <path> -nsQuota <nsQuota> -ssQuota <quota in bytes or quota size string>]
|
||||
[-clrQuota <path>]
|
||||
[-safemode enter | leave | get]
|
||||
|
||||
| COMMAND\_OPTION | Description |
|
||||
|:---- |:---- |
|
||||
@ -438,6 +439,7 @@ Usage:
|
||||
| `-ls` *path* | List mount points under specified path. |
|
||||
| `-setQuota` *path* `-nsQuota` *nsQuota* `-ssQuota` *ssQuota* | Set quota for specified path. See [HDFS Quotas Guide](./HdfsQuotaAdminGuide.html) for the quota detail. |
|
||||
| `-clrQuota` *path* | Clear quota of given mount point. See [HDFS Quotas Guide](./HdfsQuotaAdminGuide.html) for the quota detail. |
|
||||
| `-safemode` `enter` `leave` `get` | Manually set the Router entering or leaving safe mode. The option *get* will be used for verifying if the Router is in safe mode state. |
|
||||
|
||||
The commands for managing Router-based federation. See [Mount table management](./HDFSRouterFederation.html#Mount_table_management) for more info.
|
||||
|
||||
|
@ -83,7 +83,11 @@ The clients configure their DFS HA client (e.g., ConfiguredFailoverProvider or R
|
||||
|
||||
* **Unavailable State Store:**
|
||||
If a Router cannot contact the State Store, it will enter into a Safe Mode state which disallows it from serving requests.
|
||||
Clients will treat Routers in Safe Mode as it was an Standby NameNode and try another Router.
|
||||
Clients will treat Routers in Safe Mode as it was an Standby NameNode and try another Router. There is a manual way to manage the Safe Mode for the Router.
|
||||
|
||||
The Safe Mode state can be managed by using the following command:
|
||||
|
||||
[hdfs]$ $HADOOP_HOME/bin/hdfs dfsrouteradmin -safemode enter | leave | get
|
||||
|
||||
* **NameNode heartbeat HA:**
|
||||
For high availability and flexibility, multiple Routers can monitor the same NameNode and heartbeat the information to the State Store.
|
||||
|
@ -40,12 +40,15 @@
|
||||
import org.apache.hadoop.hdfs.server.federation.store.records.MountTable;
|
||||
import org.apache.hadoop.hdfs.tools.federation.RouterAdmin;
|
||||
import org.apache.hadoop.security.UserGroupInformation;
|
||||
import org.apache.hadoop.test.GenericTestUtils;
|
||||
import org.apache.hadoop.util.ToolRunner;
|
||||
import org.junit.After;
|
||||
import org.junit.AfterClass;
|
||||
import org.junit.Assert;
|
||||
import org.junit.BeforeClass;
|
||||
import org.junit.Test;
|
||||
|
||||
import com.google.common.base.Supplier;
|
||||
/**
|
||||
* Tests Router admin commands.
|
||||
*/
|
||||
@ -363,4 +366,49 @@ public void testSetAndClearQuota() throws Exception {
|
||||
assertEquals(HdfsConstants.QUOTA_DONT_SET, quotaUsage.getQuota());
|
||||
assertEquals(HdfsConstants.QUOTA_DONT_SET, quotaUsage.getSpaceQuota());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testManageSafeMode() throws Exception {
|
||||
// ensure the Router become RUNNING state
|
||||
waitState(RouterServiceState.RUNNING);
|
||||
assertFalse(routerContext.getRouter().getRpcServer().isInSafeMode());
|
||||
assertEquals(0, ToolRunner.run(admin,
|
||||
new String[] {"-safemode", "enter"}));
|
||||
// verify state
|
||||
assertEquals(RouterServiceState.SAFEMODE,
|
||||
routerContext.getRouter().getRouterState());
|
||||
assertTrue(routerContext.getRouter().getRpcServer().isInSafeMode());
|
||||
|
||||
System.setOut(new PrintStream(out));
|
||||
assertEquals(0, ToolRunner.run(admin,
|
||||
new String[] {"-safemode", "get"}));
|
||||
assertTrue(out.toString().contains("true"));
|
||||
|
||||
assertEquals(0, ToolRunner.run(admin,
|
||||
new String[] {"-safemode", "leave"}));
|
||||
// verify state
|
||||
assertEquals(RouterServiceState.RUNNING,
|
||||
routerContext.getRouter().getRouterState());
|
||||
assertFalse(routerContext.getRouter().getRpcServer().isInSafeMode());
|
||||
|
||||
out.reset();
|
||||
assertEquals(0, ToolRunner.run(admin,
|
||||
new String[] {"-safemode", "get"}));
|
||||
assertTrue(out.toString().contains("false"));
|
||||
}
|
||||
|
||||
/**
|
||||
* Wait for the Router transforming to expected state.
|
||||
* @param expectedState Expected Router state.
|
||||
* @throws Exception
|
||||
*/
|
||||
private void waitState(final RouterServiceState expectedState)
|
||||
throws Exception {
|
||||
GenericTestUtils.waitFor(new Supplier<Boolean>() {
|
||||
@Override
|
||||
public Boolean get() {
|
||||
return expectedState == routerContext.getRouter().getRouterState();
|
||||
}
|
||||
}, 1000, 30000);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user