Skip to content

Commit f6e4168

Browse files
Merge pull request #6228 from halibobo1205/feat/services_init_opt
feat(service): exit when services failed to start
2 parents f82d152 + 67c4a09 commit f6e4168

File tree

15 files changed

+98
-30
lines changed

15 files changed

+98
-30
lines changed
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package org.tron.common.log;
2+
3+
import ch.qos.logback.classic.LoggerContext;
4+
import ch.qos.logback.classic.joran.JoranConfigurator;
5+
import java.io.File;
6+
import org.slf4j.LoggerFactory;
7+
import org.tron.core.exception.TronError;
8+
9+
public class LogService {
10+
11+
public static void load(String path) {
12+
try {
13+
File file = new File(path);
14+
if (!file.exists() || !file.isFile() || !file.canRead()) {
15+
return;
16+
}
17+
LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
18+
JoranConfigurator configurator = new JoranConfigurator();
19+
configurator.setContext(lc);
20+
lc.reset();
21+
configurator.doConfigure(file);
22+
} catch (Exception e) {
23+
throw new TronError(e, TronError.ErrCode.LOG_LOAD);
24+
}
25+
}
26+
}

common/src/main/java/org/tron/common/prometheus/Metrics.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@
55
import io.prometheus.client.Histogram;
66
import io.prometheus.client.exporter.HTTPServer;
77
import io.prometheus.client.hotspot.DefaultExports;
8-
import java.io.IOException;
98
import lombok.extern.slf4j.Slf4j;
109
import org.tron.common.parameter.CommonParameter;
10+
import org.tron.core.exception.TronError;
1111

1212
@Slf4j(topic = "metrics")
1313
public class Metrics {
@@ -32,9 +32,8 @@ public static synchronized void init() {
3232
new HTTPServer.Builder().withPort(port).build();
3333
logger.info("prometheus exposed on port : {}", port);
3434
initialized = true;
35-
} catch (IOException e) {
36-
CommonParameter.getInstance().setMetricsPrometheusEnable(false);
37-
logger.error("{}", e.getMessage());
35+
} catch (Exception e) {
36+
throw new TronError(e, TronError.ErrCode.PROMETHEUS_INIT);
3837
}
3938
}
4039
}

common/src/main/java/org/tron/core/exception/TronError.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,11 @@ public enum ErrCode {
4040
EVENT_SUBSCRIBE_ERROR(1),
4141
AUTO_STOP_PARAMS(1),
4242
API_SERVER_INIT(1),
43+
EVENT_SUBSCRIBE_INIT(1),
44+
PROMETHEUS_INIT(1),
45+
TRON_NET_SERVICE_INIT(1),
46+
ZCASH_INIT(1),
47+
LOG_LOAD(1),
4348
SOLID_NODE_INIT(0);
4449

4550
private final int code;

framework/src/main/java/org/tron/core/db/Manager.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,7 @@
137137
import org.tron.core.metrics.MetricsUtil;
138138
import org.tron.core.service.MortgageService;
139139
import org.tron.core.service.RewardViCalService;
140+
import org.tron.core.services.event.exception.EventException;
140141
import org.tron.core.store.AccountAssetStore;
141142
import org.tron.core.store.AccountIdIndexStore;
142143
import org.tron.core.store.AccountIndexStore;
@@ -2098,7 +2099,7 @@ private void startEventSubscribing() {
20982099
.start(Args.getInstance().getEventPluginConfig());
20992100

21002101
if (!eventPluginLoaded) {
2101-
logger.error("Failed to load eventPlugin.");
2102+
throw new EventException("Failed to load eventPlugin.");
21022103
}
21032104

21042105
FilterQuery eventFilter = Args.getInstance().getEventFilter();
@@ -2107,7 +2108,7 @@ private void startEventSubscribing() {
21072108
}
21082109

21092110
} catch (Exception e) {
2110-
logger.error("{}", e);
2111+
throw new TronError(e, TronError.ErrCode.EVENT_SUBSCRIBE_INIT);
21112112
}
21122113
}
21132114

framework/src/main/java/org/tron/core/net/TronNetService.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import org.tron.common.overlay.message.Message;
1616
import org.tron.common.parameter.CommonParameter;
1717
import org.tron.core.config.args.Args;
18+
import org.tron.core.exception.TronError;
1819
import org.tron.core.net.message.adv.TransactionMessage;
1920
import org.tron.core.net.messagehandler.TransactionsMsgHandler;
2021
import org.tron.core.net.peer.PeerConnection;
@@ -102,7 +103,7 @@ public void start() {
102103
effectiveCheckService.init();
103104
logger.info("Net service start successfully");
104105
} catch (Exception e) {
105-
logger.error("Net service start failed", e);
106+
throw new TronError(e, TronError.ErrCode.TRON_NET_SERVICE_INIT);
106107
}
107108
}
108109

framework/src/main/java/org/tron/core/zen/ZksnarkInitService.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import org.springframework.stereotype.Component;
1010
import org.tron.common.zksnark.JLibrustzcash;
1111
import org.tron.common.zksnark.LibrustzcashParam;
12+
import org.tron.core.exception.TronError;
1213
import org.tron.core.exception.ZksnarkException;
1314

1415
@Slf4j(topic = "API")
@@ -40,7 +41,7 @@ public static void librustzcashInitZksnarkParams() {
4041
JLibrustzcash.librustzcashInitZksnarkParams(
4142
new LibrustzcashParam.InitZksnarkParams(spendPath, spendHash, outputPath, outputHash));
4243
} catch (ZksnarkException e) {
43-
logger.error("librustzcashInitZksnarkParams fail!", e);
44+
throw new TronError(e, TronError.ErrCode.ZCASH_INIT);
4445
}
4546
logger.info("init zk param done");
4647
}

framework/src/main/java/org/tron/program/FullNode.java

Lines changed: 2 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,13 @@
11
package org.tron.program;
22

3-
import ch.qos.logback.classic.LoggerContext;
4-
import ch.qos.logback.classic.joran.JoranConfigurator;
53
import com.beust.jcommander.JCommander;
6-
import java.io.File;
74
import lombok.extern.slf4j.Slf4j;
8-
import org.slf4j.LoggerFactory;
95
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
106
import org.tron.common.application.Application;
117
import org.tron.common.application.ApplicationFactory;
128
import org.tron.common.application.TronApplicationContext;
139
import org.tron.common.exit.ExitManager;
10+
import org.tron.common.log.LogService;
1411
import org.tron.common.parameter.CommonParameter;
1512
import org.tron.common.prometheus.Metrics;
1613
import org.tron.core.Constant;
@@ -20,23 +17,6 @@
2017
@Slf4j(topic = "app")
2118
public class FullNode {
2219

23-
24-
public static void load(String path) {
25-
try {
26-
File file = new File(path);
27-
if (!file.exists() || !file.isFile() || !file.canRead()) {
28-
return;
29-
}
30-
LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
31-
JoranConfigurator configurator = new JoranConfigurator();
32-
configurator.setContext(lc);
33-
lc.reset();
34-
configurator.doConfigure(file);
35-
} catch (Exception e) {
36-
logger.error(e.getMessage());
37-
}
38-
}
39-
4020
/**
4121
* Start the FullNode.
4222
*/
@@ -46,7 +26,7 @@ public static void main(String[] args) {
4626
Args.setParam(args, Constant.TESTNET_CONF);
4727
CommonParameter parameter = Args.getInstance();
4828

49-
load(parameter.getLogbackPath());
29+
LogService.load(parameter.getLogbackPath());
5030

5131
if (parameter.isHelp()) {
5232
JCommander jCommander = JCommander.newBuilder().addObject(Args.PARAMETER).build();

framework/src/test/java/org/tron/core/db/TransactionExpireTest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ public void init() throws IOException {
4646
Args.setParam(new String[] {"--output-directory",
4747
temporaryFolder.newFolder().toString()}, Constant.TEST_CONF);
4848
CommonParameter.PARAMETER.setMinEffectiveConnection(0);
49+
CommonParameter.getInstance().setP2pDisable(true);
4950

5051
context = new TronApplicationContext(DefaultConfig.class);
5152
wallet = context.getBean(Wallet.class);

framework/src/test/java/org/tron/core/exception/TronErrorTest.java

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,36 @@
11
package org.tron.core.exception;
22

3+
import static org.junit.Assert.assertEquals;
4+
import static org.junit.Assert.assertThrows;
5+
import static org.mockito.ArgumentMatchers.any;
6+
import static org.mockito.Mockito.mockStatic;
7+
8+
import java.io.IOException;
9+
import java.nio.file.Path;
10+
import org.junit.After;
311
import org.junit.Assert;
12+
import org.junit.Rule;
413
import org.junit.Test;
14+
import org.junit.rules.TemporaryFolder;
15+
import org.junit.runner.RunWith;
16+
import org.mockito.MockedStatic;
17+
import org.mockito.Mockito;
18+
import org.mockito.junit.MockitoJUnitRunner;
19+
import org.tron.common.log.LogService;
20+
import org.tron.common.zksnark.JLibrustzcash;
21+
import org.tron.core.zen.ZksnarkInitService;
522

23+
@RunWith(MockitoJUnitRunner.class)
624
public class TronErrorTest {
725

26+
@Rule
27+
public TemporaryFolder temporaryFolder = new TemporaryFolder();
28+
29+
@After
30+
public void clearMocks() {
31+
Mockito.clearAllCaches();
32+
}
33+
834
@Test
935
public void testTronError() {
1036
TronError tronError = new TronError("message", TronError.ErrCode.WITNESS_KEYSTORE_LOAD);
@@ -16,4 +42,26 @@ public void testTronError() {
1642
tronError = new TronError(new Throwable(), TronError.ErrCode.LEVELDB_INIT);
1743
Assert.assertEquals(tronError.getErrCode(), TronError.ErrCode.LEVELDB_INIT);
1844
}
45+
46+
@Test
47+
public void ZksnarkInitTest() {
48+
try (MockedStatic<JLibrustzcash> mock = mockStatic(JLibrustzcash.class)) {
49+
mock.when(JLibrustzcash::isOpenZen).thenReturn(true);
50+
mock.when(() -> JLibrustzcash.librustzcashInitZksnarkParams(any()))
51+
.thenAnswer(invocation -> {
52+
throw new ZksnarkException("Zksnark init failed");
53+
});
54+
TronError thrown = assertThrows(TronError.class,
55+
ZksnarkInitService::librustzcashInitZksnarkParams);
56+
assertEquals(TronError.ErrCode.ZCASH_INIT, thrown.getErrCode());
57+
}
58+
}
59+
60+
@Test
61+
public void LogLoadTest() throws IOException {
62+
LogService.load("non-existent.xml");
63+
Path path = temporaryFolder.newFile("logback.xml").toPath();
64+
TronError thrown = assertThrows(TronError.class, () -> LogService.load(path.toString()));
65+
assertEquals(TronError.ErrCode.LOG_LOAD, thrown.getErrCode());
66+
}
1967
}

framework/src/test/java/org/tron/core/services/RpcApiServicesTest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,7 @@ public static void init() throws IOException {
143143
getInstance().setRpcOnPBFTPort(PublicMethod.chooseRandomPort());
144144
getInstance().setMetricsPrometheusPort(PublicMethod.chooseRandomPort());
145145
getInstance().setMetricsPrometheusEnable(true);
146+
getInstance().setP2pDisable(true);
146147
String fullNode = String.format("%s:%d", getInstance().getNodeLanIp(),
147148
getInstance().getRpcPort());
148149
String solidityNode = String.format("%s:%d", getInstance().getNodeLanIp(),

0 commit comments

Comments
 (0)