Skip to content

Commit d4fd1f2

Browse files
committed
solid node realize configurability
1 parent 7ddd2d6 commit d4fd1f2

File tree

2 files changed

+30
-14
lines changed

2 files changed

+30
-14
lines changed

src/main/java/org/tron/core/config/args/Args.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -384,6 +384,15 @@ public class Args {
384384
@Setter
385385
private int minEffectiveConnection;
386386

387+
@Getter
388+
@Setter
389+
private int solidSyncThreadNum;
390+
391+
@Getter
392+
@Setter
393+
private int solidBlockCacheSize;
394+
395+
387396
public static void clearParam() {
388397
INSTANCE.outputDirectory = "output-directory";
389398
INSTANCE.help = false;
@@ -765,6 +774,12 @@ public static void setParam(final String[] args, final String confFileName) {
765774
INSTANCE.saveInternalTx =
766775
config.hasPath("vm.saveInternalTx") && config.getBoolean("vm.saveInternalTx");
767776

777+
INSTANCE.solidSyncThreadNum = config.hasPath("node.solidSyncThreadNum") ?
778+
config.getInt("node.solidSyncThreadNum") : Runtime.getRuntime().availableProcessors();
779+
780+
INSTANCE.solidBlockCacheSize = config.hasPath("node.solidBlockCacheSize") ?
781+
config.getInt("node.solidBlockCacheSize") : 100;
782+
768783
initBackupProperty(config);
769784

770785

src/main/java/org/tron/program/SolidityNode.java

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -34,31 +34,32 @@ public class SolidityNode {
3434

3535
private Manager dbManager;
3636

37-
private Args cfgArgs;
37+
private Args cfgArgs = Args.getInstance();
3838

3939
private DatabaseGrpcClient databaseGrpcClient;
4040

4141
private AtomicLong ID = new AtomicLong();
4242

4343
private Map<Long, Block> blockMap = Maps.newConcurrentMap();
4444

45-
private LinkedBlockingDeque<Block> blockQueue = new LinkedBlockingDeque(10000);
45+
private int syncThreadNum = cfgArgs.getSolidSyncThreadNum();
4646

47-
private LinkedBlockingDeque<Block> blockBakQueue = new LinkedBlockingDeque(10000);
47+
private int blockCacheSize = cfgArgs.getSolidBlockCacheSize();
48+
49+
private LinkedBlockingDeque<Block> blockQueue = new LinkedBlockingDeque(blockCacheSize);
50+
51+
private LinkedBlockingDeque<Block> blockBakQueue = new LinkedBlockingDeque(blockCacheSize);
4852

4953
private AtomicLong remoteLastSolidityBlockNum = new AtomicLong();
5054

5155
private AtomicLong lastSolidityBlockNum = new AtomicLong();
5256

53-
private int maxBlockCacheSize = 10_000;
54-
5557
private volatile boolean syncFlag = true;
5658

5759
private volatile boolean flag = true;
5860

59-
public SolidityNode(Manager dbManager, Args cfgArgs) {
61+
public SolidityNode(Manager dbManager) {
6062
this.dbManager = dbManager;
61-
this.cfgArgs = cfgArgs;
6263
resolveCompatibilityIssueIfUsingFullNodeDatabase();
6364
lastSolidityBlockNum.set(dbManager.getDynamicPropertiesStore().getLatestSolidifiedBlockNum());
6465
ID.set(lastSolidityBlockNum.get());
@@ -68,16 +69,16 @@ public SolidityNode(Manager dbManager, Args cfgArgs) {
6869

6970
private void start() {
7071
try {
71-
for (int i = 0; i < 50; i++) {
72+
for (int i = 0; i < syncThreadNum; i++) {
7273
new Thread(() -> getSyncBlock()).start();
7374
}
7475
new Thread(() -> getAdvBlock()).start();
7576
new Thread(() -> pushBlock()).start();
7677
new Thread(() -> processBlock()).start();
7778
new Thread(() -> processTrx()).start();
78-
logger.info(
79-
"Success to start solid node, lastSolidityBlockNum: {}, ID: {}, remoteLastSolidityBlockNum: {}.",
80-
lastSolidityBlockNum, ID.get(), remoteLastSolidityBlockNum);
79+
logger.info( "Success to start solid node, lastSolidityBlockNum: {}, ID: {}, "
80+
+ "remoteLastSolidityBlockNum: {}, syncThreadNum: {}, blockCacheSize: {}.",
81+
lastSolidityBlockNum, ID.get(), remoteLastSolidityBlockNum, syncThreadNum, blockCacheSize);
8182
} catch (Exception e) {
8283
logger.error("Failed to start solid node, address: {}.", cfgArgs.getTrustNodeAddr());
8384
System.exit(0);
@@ -88,7 +89,7 @@ private void getSyncBlock() {
8889
long blockNum = getNextSyncBlockId();
8990
while (blockNum != 0) {
9091
try {
91-
if (blockMap.size() > maxBlockCacheSize) {
92+
if (blockMap.size() > blockCacheSize) {
9293
sleep(1000);
9394
continue;
9495
}
@@ -136,7 +137,7 @@ private void getAdvBlock() {
136137
long blockNum = ID.incrementAndGet();
137138
while (flag) {
138139
try {
139-
if (blockNum > remoteLastSolidityBlockNum.get() || blockMap.size() > maxBlockCacheSize) {
140+
if (blockNum > remoteLastSolidityBlockNum.get() || blockMap.size() > blockCacheSize) {
140141
sleep(3000);
141142
remoteLastSolidityBlockNum.set(getLastSolidityBlockNum());
142143
continue;
@@ -324,7 +325,7 @@ public static void main(String[] args) {
324325
NodeManager nodeManager = context.getBean(NodeManager.class);
325326
nodeManager.close();
326327

327-
SolidityNode node = new SolidityNode(appT.getDbManager(), cfgArgs);
328+
SolidityNode node = new SolidityNode(appT.getDbManager());
328329
node.start();
329330

330331
rpcApiService.blockUntilShutdown();

0 commit comments

Comments
 (0)