Skip to content

Commit 5b5d01f

Browse files
committed
Merge branch 'release_v4.7.2' of https://github.com/tronprotocol/java-tron into rate-limit
2 parents 3fa8c5c + c1fe7ad commit 5b5d01f

1 file changed

Lines changed: 51 additions & 50 deletions

File tree

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

Lines changed: 51 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -241,6 +241,8 @@ public class Manager {
241241
@Getter
242242
private volatile long latestSolidityNumShutDown;
243243
@Getter
244+
private long lastUsedSolidityNum = -1;
245+
@Getter
244246
private int maxFlushCount;
245247

246248
@Getter
@@ -2030,17 +2032,11 @@ private void postSolidityFilter(final long oldSolidNum, final long latestSolidif
20302032
return;
20312033
}
20322034

2033-
BlockCapsule blockCapsule;
2034-
try {
2035-
blockCapsule = chainBaseManager.getBlockByNum(latestSolidifiedBlockNumber);
2036-
} catch (Exception e) {
2037-
logger.error("PostSolidityFilter getBlockByNum = {} except, {}.",
2038-
latestSolidifiedBlockNumber, e.getMessage());
2039-
return;
2035+
List<BlockCapsule> capsuleList = getContinuousBlockCapsule(latestSolidifiedBlockNumber);
2036+
for (BlockCapsule blockCapsule : capsuleList) {
2037+
postBlockFilter(blockCapsule, true);
2038+
postLogsFilter(blockCapsule, true, false);
20402039
}
2041-
2042-
postBlockFilter(blockCapsule, true);
2043-
postLogsFilter(blockCapsule, true, false);
20442040
}
20452041

20462042
private void postSolidityTrigger(final long oldSolidNum, final long latestSolidifiedBlockNumber) {
@@ -2057,28 +2053,23 @@ private void postSolidityTrigger(final long oldSolidNum, final long latestSolidi
20572053
}
20582054

20592055
if (eventPluginLoaded && EventPluginLoader.getInstance().isSolidityTriggerEnable()) {
2060-
SolidityTriggerCapsule solidityTriggerCapsule
2061-
= new SolidityTriggerCapsule(latestSolidifiedBlockNumber);
2062-
2063-
BlockCapsule blockCapsule;
2064-
try {
2065-
blockCapsule = chainBaseManager.getBlockByNum(latestSolidifiedBlockNumber);
2056+
List<BlockCapsule> capsuleList = getContinuousBlockCapsule(latestSolidifiedBlockNumber);
2057+
for (BlockCapsule blockCapsule : capsuleList) {
2058+
SolidityTriggerCapsule solidityTriggerCapsule
2059+
= new SolidityTriggerCapsule(blockCapsule.getNum());//unique key
20662060
solidityTriggerCapsule.setTimeStamp(blockCapsule.getTimeStamp());
2067-
} catch (Exception e) {
2068-
logger.error("PostSolidityTrigger getBlockByNum = {} except, {}.",
2069-
latestSolidifiedBlockNumber, e.getMessage());
2070-
}
2071-
2072-
boolean result = triggerCapsuleQueue.offer(solidityTriggerCapsule);
2073-
if (!result) {
2074-
logger.info("Too many trigger, lost solidified trigger, block number: {}.",
2075-
latestSolidifiedBlockNumber);
2061+
boolean result = triggerCapsuleQueue.offer(solidityTriggerCapsule);
2062+
if (!result) {
2063+
logger.info("Too many trigger, lost solidified trigger, block number: {}.",
2064+
blockCapsule.getNum());
2065+
}
20762066
}
20772067
}
20782068

20792069
if (CommonParameter.getInstance().isJsonRpcHttpSolidityNodeEnable()) {
20802070
postSolidityFilter(oldSolidNum, latestSolidifiedBlockNumber);
20812071
}
2072+
lastUsedSolidityNum = latestSolidifiedBlockNumber;
20822073
}
20832074

20842075
private void processTransactionTrigger(BlockCapsule newBlock) {
@@ -2189,53 +2180,63 @@ private void postLogsFilter(final BlockCapsule blockCapsule, boolean solidified,
21892180
}
21902181

21912182
private void postBlockTrigger(final BlockCapsule blockCapsule) {
2192-
BlockCapsule newBlock = blockCapsule;
2193-
21942183
// post block and logs for jsonrpc
21952184
if (CommonParameter.getInstance().isJsonRpcHttpFullNodeEnable()) {
21962185
postBlockFilter(blockCapsule, false);
21972186
postLogsFilter(blockCapsule, false, false);
21982187
}
21992188

22002189
// process block trigger
2190+
long solidityBlkNum = getDynamicPropertiesStore().getLatestSolidifiedBlockNum();
22012191
if (eventPluginLoaded && EventPluginLoader.getInstance().isBlockLogTriggerEnable()) {
2192+
List<BlockCapsule> capsuleList = new ArrayList<>();
22022193
if (EventPluginLoader.getInstance().isBlockLogTriggerSolidified()) {
2203-
long solidityBlkNum = getDynamicPropertiesStore().getLatestSolidifiedBlockNum();
2204-
try {
2205-
newBlock = chainBaseManager
2206-
.getBlockByNum(solidityBlkNum);
2207-
} catch (Exception e) {
2208-
logger.error("PostBlockTrigger getBlockByNum blkNum = {} except, error is {}.",
2209-
solidityBlkNum, e.getMessage());
2210-
}
2194+
capsuleList = getContinuousBlockCapsule(solidityBlkNum);
2195+
} else {
2196+
capsuleList.add(blockCapsule);
22112197
}
22122198

2213-
BlockLogTriggerCapsule blockLogTriggerCapsule = new BlockLogTriggerCapsule(newBlock);
2214-
blockLogTriggerCapsule.setLatestSolidifiedBlockNumber(getDynamicPropertiesStore()
2215-
.getLatestSolidifiedBlockNum());
2216-
if (!triggerCapsuleQueue.offer(blockLogTriggerCapsule)) {
2217-
logger.info("Too many triggers, block trigger lost: {}.", newBlock.getBlockId());
2199+
for (BlockCapsule capsule : capsuleList) {
2200+
BlockLogTriggerCapsule blockLogTriggerCapsule = new BlockLogTriggerCapsule(capsule);
2201+
blockLogTriggerCapsule.setLatestSolidifiedBlockNumber(solidityBlkNum);
2202+
if (!triggerCapsuleQueue.offer(blockLogTriggerCapsule)) {
2203+
logger.info("Too many triggers, block trigger lost: {}.", capsule.getBlockId());
2204+
}
22182205
}
22192206
}
22202207

22212208
// process transaction trigger
22222209
if (eventPluginLoaded && EventPluginLoader.getInstance().isTransactionLogTriggerEnable()) {
2223-
// set newBlock
2210+
List<BlockCapsule> capsuleList = new ArrayList<>();
22242211
if (EventPluginLoader.getInstance().isTransactionLogTriggerSolidified()) {
2225-
long solidityBlkNum = getDynamicPropertiesStore().getLatestSolidifiedBlockNum();
2226-
try {
2227-
newBlock = chainBaseManager.getBlockByNum(solidityBlkNum);
2228-
} catch (Exception e) {
2229-
logger.error("PostBlockTrigger getBlockByNum blkNum = {} except, error is {}.",
2230-
solidityBlkNum, e.getMessage());
2231-
}
2212+
capsuleList = getContinuousBlockCapsule(solidityBlkNum);
22322213
} else {
22332214
// need to reset block
2234-
newBlock = blockCapsule;
2215+
capsuleList.add(blockCapsule);
22352216
}
22362217

2237-
processTransactionTrigger(newBlock);
2218+
for (BlockCapsule capsule : capsuleList) {
2219+
processTransactionTrigger(capsule);
2220+
}
2221+
}
2222+
}
2223+
2224+
private List<BlockCapsule> getContinuousBlockCapsule(long solidityBlkNum) {
2225+
List<BlockCapsule> capsuleList = new ArrayList<>();
2226+
long start = lastUsedSolidityNum < 0 ? solidityBlkNum : (lastUsedSolidityNum + 1);
2227+
if (solidityBlkNum > start) {
2228+
logger.info("Continuous block start:{}, end:{}", start, solidityBlkNum);
2229+
}
2230+
for (long blockNum = start; blockNum <= solidityBlkNum; blockNum++) {
2231+
try {
2232+
BlockCapsule capsule = chainBaseManager.getBlockByNum(blockNum);
2233+
capsuleList.add(capsule);
2234+
} catch (Exception e) {
2235+
logger.error("GetContinuousBlockCapsule getBlockByNum blkNum = {} except, error is {}.",
2236+
solidityBlkNum, e.getMessage());
2237+
}
22382238
}
2239+
return capsuleList;
22392240
}
22402241

22412242
// return energyUsageTotal of the current transaction

0 commit comments

Comments
 (0)