Skip to content

Commit fafbc1d

Browse files
authored
feat(framework): support solidity conditional shutdown (#6734)
1 parent 52e14b0 commit fafbc1d

9 files changed

Lines changed: 895 additions & 339 deletions

File tree

framework/src/main/java/org/tron/common/application/ApplicationImpl.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import org.tron.core.db.Manager;
1111
import org.tron.core.net.TronNetService;
1212
import org.tron.core.services.event.EventService;
13+
import org.tron.program.SolidityNode;
1314

1415
@Slf4j(topic = "app")
1516
@Component
@@ -33,6 +34,9 @@ public class ApplicationImpl implements Application {
3334
@Autowired
3435
private ConsensusService consensusService;
3536

37+
@Autowired(required = false)
38+
private SolidityNode solidityNode;
39+
3640
private final CountDownLatch shutdown = new CountDownLatch(1);
3741

3842
/**
@@ -50,11 +54,14 @@ public void startup() {
5054
@Override
5155
public void shutdown() {
5256
this.shutdownServices();
53-
if (!Args.getInstance().isSolidityNode() && (!Args.getInstance().p2pDisable)) {
57+
if (!Args.getInstance().isSolidityNode() && !Args.getInstance().p2pDisable) {
5458
tronNetService.close();
5559
}
5660
consensusService.stop();
5761
eventService.close();
62+
if (solidityNode != null) {
63+
solidityNode.close();
64+
}
5865
dbManager.close();
5966
shutdown.countDown();
6067
}

framework/src/main/java/org/tron/common/client/DatabaseGrpcClient.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ public Block getBlock(long blockNum) {
4545
}
4646

4747
public void shutdown() {
48-
channel.shutdown();
48+
channel.shutdownNow();
4949
}
5050

5151
public DynamicProperties getDynamicProperties() {

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

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1042,23 +1042,6 @@ public void eraseBlock() {
10421042
}
10431043
}
10441044

1045-
public void pushVerifiedBlock(BlockCapsule block) throws ContractValidateException,
1046-
ContractExeException, ValidateSignatureException, AccountResourceInsufficientException,
1047-
TransactionExpirationException, TooBigTransactionException, DupTransactionException,
1048-
TaposException, ValidateScheduleException, ReceiptCheckErrException,
1049-
VMIllegalException, TooBigTransactionResultException, UnLinkedBlockException,
1050-
NonCommonBlockException, BadNumberBlockException, BadBlockException, ZksnarkException,
1051-
EventBloomException {
1052-
block.generatedByMyself = true;
1053-
long start = System.currentTimeMillis();
1054-
pushBlock(block);
1055-
logger.info("Push block cost: {} ms, blockNum: {}, blockHash: {}, trx count: {}.",
1056-
System.currentTimeMillis() - start,
1057-
block.getNum(),
1058-
block.getBlockId(),
1059-
block.getTransactions().size());
1060-
}
1061-
10621045
private void applyBlock(BlockCapsule block) throws ContractValidateException,
10631046
ContractExeException, ValidateSignatureException, AccountResourceInsufficientException,
10641047
TransactionExpirationException, TooBigTransactionException, DupTransactionException,

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

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -233,6 +233,19 @@ public Message getData(Sha256Hash hash, InventoryType type) throws P2pException
233233
}
234234
}
235235

236+
public void pushVerifiedBlock(BlockCapsule block) throws P2pException {
237+
block.generatedByMyself = true;
238+
long start = System.currentTimeMillis();
239+
processBlock(block, true);
240+
if (!hitDown) {
241+
logger.info("Push block cost: {} ms, blockNum: {}, blockHash: {}, trx count: {}.",
242+
System.currentTimeMillis() - start,
243+
block.getNum(),
244+
block.getBlockId(),
245+
block.getTransactions().size());
246+
}
247+
}
248+
236249
public void processBlock(BlockCapsule block, boolean isSync) throws P2pException {
237250
if (!hitDown && dbManager.getLatestSolidityNumShutDown() > 0
238251
&& dbManager.getLatestSolidityNumShutDown() == dbManager.getDynamicPropertiesStore()

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

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import lombok.extern.slf4j.Slf4j;
44
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
5+
import org.springframework.util.ObjectUtils;
56
import org.tron.common.application.Application;
67
import org.tron.common.application.ApplicationFactory;
78
import org.tron.common.application.TronApplicationContext;
@@ -28,19 +29,23 @@ public static void main(String[] args) {
2829

2930
LogService.load(parameter.getLogbackPath());
3031

31-
if (parameter.isSolidityNode()) {
32-
SolidityNode.start();
33-
return;
34-
}
3532
if (parameter.isKeystoreFactory()) {
3633
KeystoreFactory.start();
3734
return;
3835
}
39-
logger.info("Full node running.");
40-
if (Args.getInstance().isDebug()) {
41-
logger.info("in debug mode, it won't check energy time");
36+
if (parameter.isSolidityNode()) {
37+
logger.info("Solidity node is running.");
38+
if (ObjectUtils.isEmpty(parameter.getTrustNodeAddr())) {
39+
throw new TronError(new IllegalArgumentException("Trust node is not set."),
40+
TronError.ErrCode.SOLID_NODE_INIT);
41+
}
4242
} else {
43-
logger.info("not in debug mode, it will check energy time");
43+
logger.info("Full node running.");
44+
if (Args.getInstance().isDebug()) {
45+
logger.info("in debug mode, it won't check energy time");
46+
} else {
47+
logger.info("not in debug mode, it will check energy time");
48+
}
4449
}
4550

4651
// init metrics first
@@ -55,6 +60,10 @@ public static void main(String[] args) {
5560
Application appT = ApplicationFactory.create(context);
5661
context.registerShutdownHook();
5762
appT.startup();
63+
if (parameter.isSolidityNode()) {
64+
SolidityNode node = context.getBean(SolidityNode.class);
65+
node.run();
66+
}
5867
appT.blockUntilShutdown();
5968
}
6069

0 commit comments

Comments
 (0)