Skip to content

Commit

Permalink
feat(api): optimize api service startup
Browse files Browse the repository at this point in the history
  • Loading branch information
halibobo1205 committed May 8, 2024
1 parent e7c8d40 commit 58d2b13
Show file tree
Hide file tree
Showing 24 changed files with 114 additions and 185 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -453,12 +453,30 @@ public class CommonParameter {
@Getter
@Setter
public String cryptoEngine = Constant.ECKey_ENGINE;

@Getter
@Setter
public boolean rpcEnable = true;

@Getter
@Setter
public boolean rpcSolidityEnable = true;

@Getter
@Setter
public boolean rpcPBFTEnable = true;

@Getter
@Setter
public boolean fullNodeHttpEnable = true;
@Getter
@Setter
public boolean solidityNodeHttpEnable = true;

@Getter
@Setter
public boolean pBFTHttpEnable = true;

@Getter
@Setter
public boolean jsonRpcHttpFullNodeEnable = false;
Expand Down
8 changes: 7 additions & 1 deletion common/src/main/java/org/tron/core/Constant.java
Original file line number Diff line number Diff line change
Expand Up @@ -118,15 +118,21 @@ public class Constant {
public static final String NODE_DNS_AWS_REGION = "node.dns.awsRegion";
public static final String NODE_DNS_AWS_HOST_ZONE_ID = "node.dns.awsHostZoneId";

// config for rpc
public static final String NODE_RPC_PORT = "node.rpc.port";
public static final String NODE_RPC_SOLIDITY_PORT = "node.rpc.solidityPort";
public static final String NODE_RPC_PBFT_PORT = "node.rpc.PBFTPort";
public static final String NODE_RPC_ENABLE = "node.rpc.enable";
public static final String NODE_RPC_SOLIDITY_ENABLE = "node.rpc.solidityEnable";
public static final String NODE_RPC_PBFT_ENABLE = "node.rpc.PBFTEnable";
// config for http
public static final String NODE_HTTP_FULLNODE_PORT = "node.http.fullNodePort";
public static final String NODE_HTTP_SOLIDITY_PORT = "node.http.solidityPort";
public static final String NODE_HTTP_FULLNODE_ENABLE = "node.http.fullNodeEnable";
public static final String NODE_HTTP_SOLIDITY_ENABLE = "node.http.solidityEnable";
public static final String NODE_HTTP_PBFT_ENABLE = "node.http.PBFTEnable";
public static final String NODE_HTTP_PBFT_PORT = "node.http.PBFTPort";

// config for jsonrpc
public static final String NODE_JSONRPC_HTTP_FULLNODE_ENABLE = "node.jsonrpc.httpFullNodeEnable";
public static final String NODE_JSONRPC_HTTP_FULLNODE_PORT = "node.jsonrpc.httpFullNodePort";
public static final String NODE_JSONRPC_HTTP_SOLIDITY_ENABLE = "node.jsonrpc.httpSolidityEnable";
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package org.tron.common.application;

import javax.annotation.PostConstruct;
import lombok.Getter;
import org.springframework.beans.factory.annotation.Autowired;

public abstract class AbstractService implements Service {

protected int port;

@Getter
protected boolean enabled;

@Autowired
ServiceContainer services;

@PostConstruct
public void register() {
services.add(this);
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package org.tron.common.application;

import java.util.concurrent.CountDownLatch;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
Expand All @@ -15,6 +16,7 @@
@Component
public class ApplicationImpl implements Application {

@Autowired
private ServiceContainer services;

@Autowired
Expand All @@ -29,6 +31,8 @@ public class ApplicationImpl implements Application {
@Autowired
private ConsensusService consensusService;

private final CountDownLatch shutdown = new CountDownLatch(1);

@Override
public void setOptions(Args args) {
// not used
Expand All @@ -37,24 +41,23 @@ public void setOptions(Args args) {
@Override
@Autowired
public void init(CommonParameter parameter) {
services = new ServiceContainer();
// not used
}

@Override
public void addService(Service service) {
services.add(service);
// used by test
}

@Override
public void initServices(CommonParameter parameter) {
services.init(parameter);
// not used
}

/**
* start up the app.
*/
public void startup() {
this.initServices(Args.getInstance());
this.startServices();
if ((!Args.getInstance().isSolidityNode()) && (!Args.getInstance().isP2pDisable())) {
tronNetService.start();
Expand All @@ -71,6 +74,7 @@ public void shutdown() {
tronNetService.close();
}
dbManager.close();
shutdown.countDown();
}

@Override
Expand All @@ -80,7 +84,12 @@ public void startServices() {

@Override
public void blockUntilShutdown() {
services.blockUntilShutdown();
try {
shutdown.await();
} catch (final InterruptedException e) {
logger.debug("Interrupted, exiting", e);
Thread.currentThread().interrupt();
}
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,9 @@
import org.eclipse.jetty.server.Server;

@Slf4j(topic = "rpc")
public abstract class HttpService implements Service {
public abstract class HttpService extends AbstractService {

protected Server apiServer;
protected int port;

@Override
public void blockUntilShutdown() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,9 @@
import lombok.extern.slf4j.Slf4j;

@Slf4j(topic = "rpc")
public abstract class RpcService implements Service {
public abstract class RpcService extends AbstractService {

protected Server apiServer;
protected int port;

@Override
public void blockUntilShutdown() {
Expand Down
11 changes: 1 addition & 10 deletions framework/src/main/java/org/tron/common/application/Service.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,19 +15,10 @@

package org.tron.common.application;

import org.tron.common.parameter.CommonParameter;

public interface Service {

void init();

void init(CommonParameter parameter);
boolean isEnabled();

/**
* Start the service.
* {@link Service#init(CommonParameter parameter) init(CommonParameter parameter)} must be called
* before this method.
*/
void start();

void stop();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,10 @@
import java.util.LinkedHashSet;
import java.util.Set;
import lombok.extern.slf4j.Slf4j;
import org.tron.common.parameter.CommonParameter;
import org.springframework.stereotype.Component;

@Slf4j(topic = "app")
@Component
public class ServiceContainer {

private final Set<Service> services;
Expand All @@ -30,26 +31,13 @@ public ServiceContainer() {
this.services = Collections.synchronizedSet(new LinkedHashSet<>());
}

public void add(Service service) {
this.services.add(service);
void add(Service service) {
if (service.isEnabled()) {
this.services.add(service);
}
}


public void init() {
this.services.forEach(service -> {
logger.debug("Initing {}.", service.getClass().getSimpleName());
service.init();
});
}

public void init(CommonParameter parameter) {
this.services.forEach(service -> {
logger.debug("Initing {}.", service.getClass().getSimpleName());
service.init(parameter);
});
}

public void start() {
void start() {
logger.info("Starting api services.");
this.services.forEach(service -> {
logger.debug("Starting {}.", service.getClass().getSimpleName());
Expand All @@ -58,16 +46,12 @@ public void start() {
logger.info("All api services started.");
}

public void stop() {
void stop() {
logger.info("Stopping api services.");
this.services.forEach(service -> {
logger.debug("Stopping {}.", service.getClass().getSimpleName());
service.stop();
});
logger.info("All api services stopped.");
}

public void blockUntilShutdown() {
this.services.stream().findFirst().ifPresent(Service::blockUntilShutdown);
}
}
20 changes: 20 additions & 0 deletions framework/src/main/java/org/tron/core/config/args/Args.java
Original file line number Diff line number Diff line change
Expand Up @@ -189,8 +189,12 @@ public static void clearParam() {
PARAMETER.validContractProtoThreadNum = 1;
PARAMETER.shieldedTransInPendingMaxCounts = 10;
PARAMETER.changedDelegation = 0;
PARAMETER.rpcEnable = true;
PARAMETER.rpcSolidityEnable = true;
PARAMETER.rpcPBFTEnable = true;
PARAMETER.fullNodeHttpEnable = true;
PARAMETER.solidityNodeHttpEnable = true;
PARAMETER.pBFTHttpEnable = true;
PARAMETER.jsonRpcHttpFullNodeEnable = false;
PARAMETER.jsonRpcHttpSolidityNodeEnable = false;
PARAMETER.jsonRpcHttpPBFTNodeEnable = false;
Expand Down Expand Up @@ -447,6 +451,18 @@ public static void setParam(final String[] args, final String confFileName) {
PARAMETER.lruCacheSize = config.getInt(Constant.VM_LRU_CACHE_SIZE);
}

if (config.hasPath(Constant.NODE_RPC_ENABLE)) {
PARAMETER.rpcEnable = config.getBoolean(Constant.NODE_RPC_ENABLE);
}

if (config.hasPath(Constant.NODE_RPC_SOLIDITY_ENABLE)) {
PARAMETER.rpcSolidityEnable = config.getBoolean(Constant.NODE_RPC_SOLIDITY_ENABLE);
}

if (config.hasPath(Constant.NODE_RPC_PBFT_ENABLE)) {
PARAMETER.rpcPBFTEnable = config.getBoolean(Constant.NODE_RPC_PBFT_ENABLE);
}

if (config.hasPath(Constant.NODE_HTTP_FULLNODE_ENABLE)) {
PARAMETER.fullNodeHttpEnable = config.getBoolean(Constant.NODE_HTTP_FULLNODE_ENABLE);
}
Expand All @@ -455,6 +471,10 @@ public static void setParam(final String[] args, final String confFileName) {
PARAMETER.solidityNodeHttpEnable = config.getBoolean(Constant.NODE_HTTP_SOLIDITY_ENABLE);
}

if (config.hasPath(Constant.NODE_HTTP_PBFT_ENABLE)) {
PARAMETER.pBFTHttpEnable = config.getBoolean(Constant.NODE_HTTP_PBFT_ENABLE);
}

if (config.hasPath(Constant.NODE_JSONRPC_HTTP_FULLNODE_ENABLE)) {
PARAMETER.jsonRpcHttpFullNodeEnable =
config.getBoolean(Constant.NODE_JSONRPC_HTTP_FULLNODE_ENABLE);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -199,14 +199,9 @@ public class RpcApiService extends RpcService {

private final String executorName = "rpc-full-executor";

@Override
public void init() {

}

@Override
public void init(CommonParameter args) {
public RpcApiService() {
port = Args.getInstance().getRpcPort();
enabled = Args.getInstance().isRpcEnable();
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.tron.common.application.HttpService;
import org.tron.common.parameter.CommonParameter;
import org.tron.core.config.args.Args;
import org.tron.core.services.filter.HttpApiAccessFilter;
import org.tron.core.services.filter.HttpInterceptor;
Expand Down Expand Up @@ -294,13 +293,9 @@ public class FullNodeHttpApiService extends HttpService {
@Autowired
private CancelAllUnfreezeV2Servlet cancelAllUnfreezeV2Servlet;

@Override
public void init() {
}

@Override
public void init(CommonParameter args) {
public FullNodeHttpApiService() {
port = Args.getInstance().getFullNodeHttpPort();
enabled = !Args.getInstance().isSolidityNode() && Args.getInstance().isFullNodeHttpEnable();
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.tron.common.application.HttpService;
import org.tron.common.parameter.CommonParameter;
import org.tron.core.config.args.Args;
import org.tron.core.services.filter.HttpApiAccessFilter;
import org.tron.core.services.http.EstimateEnergyServlet;
Expand Down Expand Up @@ -166,13 +165,9 @@ public class SolidityNodeHttpApiService extends HttpService {
private GetEnergyPricesServlet getEnergyPricesServlet;


@Override
public void init() {
}

@Override
public void init(CommonParameter args) {
public SolidityNodeHttpApiService() {
port = Args.getInstance().getSolidityHttpPort();
enabled = Args.getInstance().isSolidityNode() && Args.getInstance().isSolidityNodeHttpEnable();
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,10 @@ public class JsonRpcServiceOnPBFT extends HttpService {
@Autowired
private JsonRpcOnPBFTServlet jsonRpcOnPBFTServlet;

@Override
public void init() {
}

@Override
public void init(CommonParameter args) {
public JsonRpcServiceOnPBFT() {
port = CommonParameter.getInstance().getJsonRpcHttpPBFTPort();
enabled = !CommonParameter.getInstance().isSolidityNode()
&& CommonParameter.getInstance().isJsonRpcHttpPBFTNodeEnable();
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,10 @@ public class JsonRpcServiceOnSolidity extends HttpService {
@Autowired
private JsonRpcOnSolidityServlet jsonRpcOnSolidityServlet;

@Override
public void init() {
}

@Override
public void init(CommonParameter args) {
public JsonRpcServiceOnSolidity() {
port = CommonParameter.getInstance().getJsonRpcHttpSolidityPort();
enabled = !CommonParameter.getInstance().isSolidityNode()
&& CommonParameter.getInstance().isJsonRpcHttpSolidityNodeEnable();
}

@Override
Expand Down
Loading

0 comments on commit 58d2b13

Please sign in to comment.