Skip to content

Commit 481130d

Browse files
committed
remove Lazy tronJsonRpcImpl in Manager
1 parent 44266d6 commit 481130d

13 files changed

Lines changed: 65 additions & 69 deletions

File tree

common/src/main/java/org/tron/common/es/ExecutorServiceManager.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,14 @@
44
import java.util.concurrent.BlockingQueue;
55
import java.util.concurrent.ExecutorService;
66
import java.util.concurrent.Executors;
7+
import java.util.concurrent.ForkJoinPool;
8+
import java.util.concurrent.ForkJoinWorkerThread;
79
import java.util.concurrent.Future;
810
import java.util.concurrent.ScheduledExecutorService;
911
import java.util.concurrent.ScheduledFuture;
1012
import java.util.concurrent.ThreadPoolExecutor;
1113
import java.util.concurrent.TimeUnit;
14+
import java.util.concurrent.atomic.AtomicInteger;
1215
import lombok.extern.slf4j.Slf4j;
1316
import org.tron.common.exit.ExitManager;
1417

@@ -35,6 +38,17 @@ public static ScheduledExecutorService newSingleThreadScheduledExecutor(String n
3538
new ThreadFactoryBuilder().setNameFormat(name).setDaemon(isDaemon).build());
3639
}
3740

41+
public static ForkJoinPool newForkJoinPool(String name, int parallelism) {
42+
AtomicInteger counter = new AtomicInteger(0);
43+
ForkJoinPool.ForkJoinWorkerThreadFactory factory = pool -> {
44+
ForkJoinWorkerThread thread =
45+
ForkJoinPool.defaultForkJoinWorkerThreadFactory.newThread(pool);
46+
thread.setName(name + "-" + counter.getAndIncrement());
47+
return thread;
48+
};
49+
return new ForkJoinPool(parallelism, factory, null, false);
50+
}
51+
3852
public static ExecutorService newFixedThreadPool(String name, int fixThreads) {
3953
return newFixedThreadPool(name, fixThreads, false);
4054
}

framework/src/main/java/org/tron/common/logsfilter/capsule/BlockFilterCapsule.java

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
import lombok.ToString;
66
import lombok.extern.slf4j.Slf4j;
77
import org.tron.core.capsule.BlockCapsule;
8-
import org.tron.core.services.jsonrpc.TronJsonRpcImpl;
98

109
@Slf4j(topic = "API")
1110
@ToString
@@ -18,22 +17,13 @@ public class BlockFilterCapsule extends FilterTriggerCapsule {
1817
@Setter
1918
private boolean solidified;
2019

21-
private final TronJsonRpcImpl jsonRpc;
22-
23-
public BlockFilterCapsule(BlockCapsule block, boolean solidified, TronJsonRpcImpl jsonRpc) {
24-
this(block.getBlockId().toString(), solidified, jsonRpc);
20+
public BlockFilterCapsule(BlockCapsule block, boolean solidified) {
21+
this(block.getBlockId().toString(), solidified);
2522
}
2623

27-
public BlockFilterCapsule(String blockHash, boolean solidified, TronJsonRpcImpl jsonRpc) {
24+
public BlockFilterCapsule(String blockHash, boolean solidified) {
2825
this.blockHash = blockHash;
2926
this.solidified = solidified;
30-
this.jsonRpc = jsonRpc;
31-
}
32-
33-
@Override
34-
public void processFilterTrigger() {
35-
jsonRpc.handleBLockFilter(this);
3627
}
3728

3829
}
39-

framework/src/main/java/org/tron/common/logsfilter/capsule/LogsFilterCapsule.java

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
import lombok.ToString;
77
import lombok.extern.slf4j.Slf4j;
88
import org.tron.common.bloom.Bloom;
9-
import org.tron.core.services.jsonrpc.TronJsonRpcImpl;
109
import org.tron.protos.Protocol.TransactionInfo;
1110

1211
@Slf4j(topic = "API")
@@ -32,22 +31,14 @@ public class LogsFilterCapsule extends FilterTriggerCapsule {
3231
@Setter
3332
private boolean removed;
3433

35-
private final TronJsonRpcImpl jsonRpc;
36-
3734
public LogsFilterCapsule(long blockNumber, String blockHash, Bloom bloom,
38-
List<TransactionInfo> txInfoList, boolean solidified, boolean removed,
39-
TronJsonRpcImpl jsonRpc) {
35+
List<TransactionInfo> txInfoList, boolean solidified, boolean removed) {
4036
this.blockNumber = blockNumber;
4137
this.blockHash = blockHash;
4238
this.bloom = bloom;
4339
this.txInfoList = txInfoList;
4440
this.solidified = solidified;
4541
this.removed = removed;
46-
this.jsonRpc = jsonRpc;
4742
}
4843

49-
@Override
50-
public void processFilterTrigger() {
51-
jsonRpc.handleLogsFilter(this);
52-
}
53-
}
44+
}

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

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,6 @@
4848
import org.apache.commons.collections4.CollectionUtils;
4949
import org.bouncycastle.util.encoders.Hex;
5050
import org.springframework.beans.factory.annotation.Autowired;
51-
import org.springframework.context.annotation.Lazy;
5251
import org.springframework.stereotype.Component;
5352
import org.tron.api.GrpcAPI;
5453
import org.tron.api.GrpcAPI.TransactionInfoList;
@@ -278,7 +277,6 @@ public class Manager {
278277
@Autowired
279278
private RewardViCalService rewardViCalService;
280279

281-
@Lazy
282280
@Autowired
283281
private TronJsonRpcImpl tronJsonRpcImpl;
284282

@@ -338,8 +336,10 @@ public class Manager {
338336
while (isRunFilterProcessThread) {
339337
try {
340338
FilterTriggerCapsule filterCapsule = filterCapsuleQueue.poll(1, TimeUnit.SECONDS);
341-
if (filterCapsule != null) {
342-
filterCapsule.processFilterTrigger();
339+
if (filterCapsule instanceof LogsFilterCapsule) {
340+
tronJsonRpcImpl.handleLogsFilter((LogsFilterCapsule) filterCapsule);
341+
} else if (filterCapsule instanceof BlockFilterCapsule) {
342+
tronJsonRpcImpl.handleBLockFilter((BlockFilterCapsule) filterCapsule);
343343
}
344344
} catch (InterruptedException e) {
345345
logger.error("FilterProcessLoop get InterruptedException, error is {}.",
@@ -2271,7 +2271,7 @@ private void reOrgLogsFilter() {
22712271

22722272
private void postBlockFilter(final BlockCapsule blockCapsule, boolean solidified) {
22732273
BlockFilterCapsule blockFilterCapsule =
2274-
new BlockFilterCapsule(blockCapsule, solidified, tronJsonRpcImpl);
2274+
new BlockFilterCapsule(blockCapsule, solidified);
22752275
if (!filterCapsuleQueue.offer(blockFilterCapsule)) {
22762276
logger.info("Too many filters, block filter lost: {}.", blockCapsule.getBlockId());
22772277
}
@@ -2285,7 +2285,7 @@ private void postLogsFilter(final BlockCapsule blockCapsule, boolean solidified,
22852285
= getTransactionInfoByBlockNum(blockNumber).getTransactionInfoList();
22862286
LogsFilterCapsule logsFilterCapsule = new LogsFilterCapsule(blockNumber,
22872287
blockCapsule.getBlockId().toString(), blockCapsule.getBloom(), transactionInfoList,
2288-
solidified, removed, tronJsonRpcImpl);
2288+
solidified, removed);
22892289

22902290
if (!filterCapsuleQueue.offer(logsFilterCapsule)) {
22912291
logger.info("Too many filters, logs filter lost: {}.", blockNumber);

framework/src/main/java/org/tron/core/services/jsonrpc/JsonRpcApiUtil.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ public class JsonRpcApiUtil {
6060
public static final String TAG_SAFE_SUPPORT_ERROR = "TAG safe not supported";
6161
public static final String BLOCK_NUM_ERROR = "invalid block number";
6262

63-
static SecureRandom random = new SecureRandom();
63+
private static final SecureRandom random = new SecureRandom();
6464

6565
public static byte[] convertToTronAddress(byte[] address) {
6666
byte[] newAddress = new byte[21];

framework/src/main/java/org/tron/core/services/jsonrpc/TronJsonRpcImpl.java

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
import java.util.concurrent.TimeUnit;
3535
import java.util.regex.Pattern;
3636
import lombok.Getter;
37+
import lombok.Setter;
3738
import lombok.extern.slf4j.Slf4j;
3839
import org.apache.commons.lang3.StringUtils;
3940
import org.bouncycastle.util.encoders.Hex;
@@ -120,12 +121,12 @@ public enum RequestSource {
120121
public static final int EXPIRE_SECONDS = 5 * 60;
121122
private final int maxBlockFilterNum = Args.getInstance().getJsonRpcMaxBlockFilterNum();
122123
private final int maxLogFilterNum = Args.getInstance().getJsonRpcMaxLogFilterNum();
123-
private final Cache<LogFilterElement, LogFilterElement> logElementCache =
124+
private static final Cache<LogFilterElement, LogFilterElement> logElementCache =
124125
CacheBuilder.newBuilder()
125126
.maximumSize(300_000L) // 300s * tps(1000) * 1 log/tx ≈ 300_000
126127
.expireAfterWrite(EXPIRE_SECONDS, TimeUnit.SECONDS)
127128
.recordStats().build(); //LRU cache
128-
private final Cache<String, String> blockHashCache =
129+
private static final Cache<String, String> blockHashCache =
129130
CacheBuilder.newBuilder()
130131
.maximumSize(60_000L) // 300s * 200 block/s when syncing
131132
.expireAfterWrite(EXPIRE_SECONDS, TimeUnit.SECONDS)
@@ -174,22 +175,23 @@ public enum RequestSource {
174175
* processing for each block within the 3-second BLOCK_PRODUCED_INTERVAL. Increasing the thread
175176
* pool size too much may affect the performance of the main block processing thread.
176177
*/
177-
private final ForkJoinPool logsFilterPool = new ForkJoinPool(3);
178+
private final ForkJoinPool logsFilterPool =
179+
ExecutorServiceManager.newForkJoinPool("logs-filter-pool", 3);
178180
/**
179181
* thread pool of query section bloom store
180182
*/
181183
private final ExecutorService sectionExecutor;
182184
private final NodeInfoService nodeInfoService;
183185
private final Wallet wallet;
184-
private final Manager manager;
186+
@Setter
187+
@Autowired
188+
private Manager manager;
185189
private final String esName = "query-section";
186190

187191
@Autowired
188-
public TronJsonRpcImpl(@Autowired NodeInfoService nodeInfoService, @Autowired Wallet wallet,
189-
@Autowired Manager manager) {
192+
public TronJsonRpcImpl(@Autowired NodeInfoService nodeInfoService, @Autowired Wallet wallet) {
190193
this.nodeInfoService = nodeInfoService;
191194
this.wallet = wallet;
192-
this.manager = manager;
193195
this.sectionExecutor = ExecutorServiceManager.newFixedThreadPool(esName, 5);
194196
}
195197

framework/src/test/java/org/tron/common/logsfilter/capsule/BlockFilterCapsuleTest.java

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,19 +6,16 @@
66
import org.junit.Test;
77
import org.tron.common.utils.Sha256Hash;
88
import org.tron.core.capsule.BlockCapsule;
9-
import org.tron.core.services.jsonrpc.TronJsonRpcImpl;
109

1110
public class BlockFilterCapsuleTest {
1211

1312
private BlockFilterCapsule blockFilterCapsule;
14-
private TronJsonRpcImpl jsonRpc;
1513

1614
@Before
1715
public void setUp() {
18-
jsonRpc = new TronJsonRpcImpl(null, null, null);
1916
BlockCapsule blockCapsule = new BlockCapsule(1, Sha256Hash.ZERO_HASH,
2017
System.currentTimeMillis(), ByteString.EMPTY);
21-
blockFilterCapsule = new BlockFilterCapsule(blockCapsule, false, jsonRpc);
18+
blockFilterCapsule = new BlockFilterCapsule(blockCapsule, false);
2219
}
2320

2421
@Test
@@ -32,9 +29,8 @@ public void testSetAndGetBlockHash() {
3229
@Test
3330
public void testSetAndIsSolidified() {
3431
blockFilterCapsule = new BlockFilterCapsule(
35-
"e58f33f9baf9305dc6f82b9f1934ea8f0ade2defb951258d50167028c780351f", false, jsonRpc);
32+
"e58f33f9baf9305dc6f82b9f1934ea8f0ade2defb951258d50167028c780351f", false);
3633
blockFilterCapsule.setSolidified(true);
37-
blockFilterCapsule.processFilterTrigger();
3834
Assert.assertTrue(blockFilterCapsule.isSolidified());
3935
}
4036
}

framework/src/test/java/org/tron/common/logsfilter/capsule/LogsFilterCapsuleTest.java

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,19 +6,16 @@
66
import org.junit.Before;
77
import org.junit.Test;
88
import org.tron.common.bloom.Bloom;
9-
import org.tron.core.services.jsonrpc.TronJsonRpcImpl;
109

1110
public class LogsFilterCapsuleTest {
1211

1312
private LogsFilterCapsule capsule;
14-
private TronJsonRpcImpl jsonRpc;
1513

1614
@Before
1715
public void setUp() {
18-
jsonRpc = new TronJsonRpcImpl(null, null, null);
1916
capsule = new LogsFilterCapsule(0,
2017
"e58f33f9baf9305dc6f82b9f1934ea8f0ade2defb951258d50167028c780351f",
21-
new Bloom(), new ArrayList<>(), true, false, jsonRpc);
18+
new Bloom(), new ArrayList<>(), true, false);
2219
}
2320

2421
@Test
@@ -30,7 +27,6 @@ public void testSetAndGetLogsFilterCapsule() {
3027
capsule.setRemoved(capsule.isRemoved());
3128
capsule.setTxInfoList(capsule.getTxInfoList());
3229
assertNotNull(capsule.toString());
33-
capsule.processFilterTrigger();
3430
}
3531

3632
}

framework/src/test/java/org/tron/common/runtime/vm/Create2Test.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -209,7 +209,8 @@ private void testJsonRpc(byte[] actualContract, long loop) {
209209
NodeInfoService nodeInfoService;
210210
nodeInfoService = context.getBean(NodeInfoService.class);
211211
Wallet wallet = context.getBean(Wallet.class);
212-
tronJsonRpc = new TronJsonRpcImpl(nodeInfoService, wallet, manager);
212+
tronJsonRpc = new TronJsonRpcImpl(nodeInfoService, wallet);
213+
tronJsonRpc.setManager(manager);
213214
try {
214215
String res =
215216
tronJsonRpc.getStorageAt(ByteArray.toHexString(actualContract), "0", "latest");

framework/src/test/java/org/tron/core/jsonrpc/ConcurrentHashMapTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
@Slf4j
2424
public class ConcurrentHashMapTest {
2525
private static final String EXECUTOR_NAME = "jsonrpc-concurrent-map-test";
26-
private final TronJsonRpcImpl jsonRpc = new TronJsonRpcImpl(null, null, null);
26+
private final TronJsonRpcImpl jsonRpc = new TronJsonRpcImpl(null, null);
2727

2828
private static int randomInt(int minInt, int maxInt) {
2929
return (int) round(random(true) * (maxInt - minInt) + minInt, true);
@@ -71,7 +71,7 @@ public void testHandleBlockHash() {
7171

7272
for (int j = 1 + (i - 1) * eachCount; j <= i * eachCount; j++) {
7373
BlockFilterCapsule blockFilterCapsule =
74-
new BlockFilterCapsule(String.valueOf(j), false, jsonRpc);
74+
new BlockFilterCapsule(String.valueOf(j), false);
7575
jsonRpc.handleBLockFilter(blockFilterCapsule);
7676
}
7777
try {

0 commit comments

Comments
 (0)