alluxio.master.service.rpc.RpcServerStandbyGrpcService Maven / Gradle / Ivy
The newest version!
/*
* The Alluxio Open Foundation licenses this work under the Apache License, version 2.0
* (the "License"). You may not use this work except in compliance with the License, which is
* available at www.apache.org/licenses/LICENSE-2.0
*
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
* either express or implied, as more fully set forth in the License.
*
* See the NOTICE file distributed with this work for information regarding copyright ownership.
*/
package alluxio.master.service.rpc;
import alluxio.master.Master;
import alluxio.master.MasterProcess;
import alluxio.master.MasterRegistry;
import com.google.common.base.Preconditions;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.net.InetSocketAddress;
/**
* Created by {@link RpcServerService.Factory}.
* Manages the behavior of the master's rpc service. The grpc server is always on.
* When the promotion/demotion happens, the rpc service will be stopped and restarted.
* The new started grpc service will serve gRPC endpoints based on the node state (PRIMARY/STANDBY).
* No rejecting server is deployed.
*/
public class RpcServerStandbyGrpcService extends RpcServerService {
protected static final Logger LOG = LoggerFactory.getLogger(RpcServerStandbyGrpcService.class);
private boolean mIsPromoted = false;
protected RpcServerStandbyGrpcService(
InetSocketAddress bindAddress,
MasterProcess masterProcess,
MasterRegistry masterRegistry
) {
super(bindAddress, masterProcess, masterRegistry);
}
@Override
public synchronized boolean isServingLeader() {
return mIsPromoted && isGrpcServerServing();
}
@Override
public synchronized boolean isServingStandby() {
return !mIsPromoted && isGrpcServerServing();
}
@Override
public synchronized void start() {
LOG.info("Starting {}", this.getClass().getSimpleName());
startGrpcServer(Master::getStandbyServices);
}
@Override
public synchronized void stop() {
stopGrpcServer();
stopRpcExecutor();
mIsPromoted = false;
}
@Override
public synchronized void promote() {
Preconditions.checkState(!mIsPromoted, "double promotion is not allowed");
LOG.info("Promoting {}", this.getClass().getSimpleName());
stopGrpcServer();
stopRpcExecutor();
waitForFree();
startGrpcServer(Master::getServices);
mIsPromoted = true;
}
@Override
public synchronized void demote() {
Preconditions.checkState(mIsPromoted, "double demotion is not allowed");
LOG.info("Demoting {}", this.getClass().getSimpleName());
stopGrpcServer();
stopRpcExecutor();
waitForFree();
startGrpcServer(Master::getStandbyServices);
mIsPromoted = false;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy