Skip to content

Commit e1faa20

Browse files
committed
Merge remote-tracking branch 'upstream/release_v4.8.1' into fix/optimize_exception_by_tron_error
# Conflicts: # common/src/main/java/org/tron/core/exception/TronError.java
2 parents 9e193ef + b9753ce commit e1faa20

File tree

14 files changed

+94
-108
lines changed

14 files changed

+94
-108
lines changed

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ Make sure you operate on `Linux` or `MacOS` operating systems, other operating s
7272
### ARM64
7373
64-bit version of `JDK 17` to be installed, other JDK versions are not supported yet.
7474

75-
### build
75+
## Build
7676
Clone the repo and switch to the `master` branch
7777

7878
```bash
@@ -141,7 +141,7 @@ $ nohup java -Xms9G -Xmx9G -XX:ReservedCodeCacheSize=256m \
141141
### ARM64 JDK 17
142142
```bash
143143
$ nohup java -Xms9G -Xmx9G -XX:+UseZGC \
144-
-Xlog:gc*:file=gc.log:time,uptime,level,tags:filecount=50,filesize=100M \
144+
-Xlog:gc,gc+heap:file=gc.log:time,tags,level:filecount=10,filesize=100M \
145145
-XX:ReservedCodeCacheSize=256m \
146146
-XX:+UseCodeCacheFlushing \
147147
-XX:MetaspaceSize=256m \
@@ -181,7 +181,7 @@ $ nohup java -Xms9G -Xmx9G -XX:ReservedCodeCacheSize=256m \
181181
### ARM64 JDK 17
182182
```bash
183183
$ nohup java -Xms9G -Xmx9G -XX:+UseZGC \
184-
-Xlog:gc*:file=gc.log:time,uptime,level,tags:filecount=50,filesize=100M \
184+
-Xlog:gc,gc+heap:file=gc.log:time,tags,level:filecount=10,filesize=100M \
185185
-XX:ReservedCodeCacheSize=256m \
186186
-XX:+UseCodeCacheFlushing \
187187
-XX:MetaspaceSize=256m \

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,8 @@ public enum ErrCode {
4848
WITNESS_INIT(1),
4949
RATE_LIMITER_INIT(1),
5050
SOLID_NODE_INIT(0),
51-
PARAMETER_INIT(1);
51+
PARAMETER_INIT(1),
52+
JDK_VERSION(1);
5253

5354
private final int code;
5455

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

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package org.tron.core.config.args;
22

33
import static java.lang.System.exit;
4+
import static org.fusesource.jansi.Ansi.ansi;
45
import static org.tron.common.math.Maths.max;
56
import static org.tron.common.math.Maths.min;
67
import static org.tron.core.Constant.ADD_PRE_FIX_BYTE_MAINNET;
@@ -46,6 +47,7 @@
4647
import lombok.extern.slf4j.Slf4j;
4748
import org.apache.commons.collections4.CollectionUtils;
4849
import org.apache.commons.lang3.StringUtils;
50+
import org.fusesource.jansi.AnsiConsole;
4951
import org.springframework.beans.factory.annotation.Autowired;
5052
import org.springframework.stereotype.Component;
5153
import org.tron.common.arch.Arch;
@@ -375,7 +377,17 @@ private static Map<String, String[]> getOptionGroup() {
375377
* set parameters.
376378
*/
377379
public static void setParam(final String[] args, final String confFileName) {
378-
Arch.throwIfUnsupportedJavaVersion();
380+
try {
381+
Arch.throwIfUnsupportedJavaVersion();
382+
} catch (UnsupportedOperationException e) {
383+
AnsiConsole.systemInstall();
384+
// To avoid confusion caused by silent execution when using -h or -v flags,
385+
// errors are explicitly logged to the console in this context.
386+
// Console output is not required for errors in other scenarios.
387+
System.out.println(ansi().fgRed().a(e.getMessage()).reset());
388+
AnsiConsole.systemUninstall();
389+
throw new TronError(e, TronError.ErrCode.JDK_VERSION);
390+
}
379391
clearParam(); // reset all parameters to avoid the influence in test
380392
JCommander.newBuilder().addObject(PARAMETER).build().parse(args);
381393
if (PARAMETER.version) {

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

Lines changed: 4 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
import org.bouncycastle.util.encoders.Hex;
4949
import org.springframework.beans.factory.annotation.Autowired;
5050
import org.springframework.stereotype.Component;
51+
import org.tron.api.GrpcAPI;
5152
import org.tron.api.GrpcAPI.TransactionInfoList;
5253
import org.tron.common.args.GenesisBlock;
5354
import org.tron.common.bloom.Bloom;
@@ -2158,25 +2159,7 @@ private void processTransactionTrigger(BlockCapsule newBlock) {
21582159
// need to set eth compatible data from transactionInfoList
21592160
if (EventPluginLoader.getInstance().isTransactionLogTriggerEthCompatible()
21602161
&& newBlock.getNum() != 0) {
2161-
TransactionInfoList transactionInfoList = TransactionInfoList.newBuilder().build();
2162-
TransactionInfoList.Builder transactionInfoListBuilder = TransactionInfoList.newBuilder();
2163-
2164-
try {
2165-
TransactionRetCapsule result = chainBaseManager.getTransactionRetStore()
2166-
.getTransactionInfoByBlockNum(ByteArray.fromLong(newBlock.getNum()));
2167-
2168-
if (!Objects.isNull(result) && !Objects.isNull(result.getInstance())) {
2169-
result.getInstance().getTransactioninfoList().forEach(
2170-
transactionInfoListBuilder::addTransactionInfo
2171-
);
2172-
2173-
transactionInfoList = transactionInfoListBuilder.build();
2174-
}
2175-
} catch (BadItemException e) {
2176-
logger.error("PostBlockTrigger getTransactionInfoList blockNum = {}, error is {}.",
2177-
newBlock.getNum(), e.getMessage());
2178-
}
2179-
2162+
TransactionInfoList transactionInfoList = getTransactionInfoByBlockNum(newBlock.getNum());
21802163
if (transactionCapsuleList.size() == transactionInfoList.getTransactionInfoCount()) {
21812164
long cumulativeEnergyUsed = 0;
21822165
long cumulativeLogCount = 0;
@@ -2234,21 +2217,8 @@ private void postLogsFilter(final BlockCapsule blockCapsule, boolean solidified,
22342217
boolean removed) {
22352218
if (!blockCapsule.getTransactions().isEmpty()) {
22362219
long blockNumber = blockCapsule.getNum();
2237-
List<TransactionInfo> transactionInfoList = new ArrayList<>();
2238-
2239-
try {
2240-
TransactionRetCapsule result = chainBaseManager.getTransactionRetStore()
2241-
.getTransactionInfoByBlockNum(ByteArray.fromLong(blockNumber));
2242-
2243-
if (!Objects.isNull(result) && !Objects.isNull(result.getInstance())) {
2244-
transactionInfoList.addAll(result.getInstance().getTransactioninfoList());
2245-
}
2246-
} catch (BadItemException e) {
2247-
logger.error("ProcessLogsFilter getTransactionInfoList blockNum = {}, error is {}.",
2248-
blockNumber, e.getMessage());
2249-
return;
2250-
}
2251-
2220+
List<TransactionInfo> transactionInfoList
2221+
= getTransactionInfoByBlockNum(blockNumber).getTransactionInfoList();
22522222
LogsFilterCapsule logsFilterCapsule = new LogsFilterCapsule(blockNumber,
22532223
blockCapsule.getBlockId().toString(), blockCapsule.getBloom(), transactionInfoList,
22542224
solidified, removed);

framework/src/main/java/org/tron/core/services/event/BlockEventGet.java

Lines changed: 5 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -329,22 +329,10 @@ public List<TransactionLogTriggerCapsule> getTransactionLogTrigger(BlockCapsule
329329
if (!EventPluginLoader.getInstance().isTransactionLogTriggerEthCompatible()) {
330330
return getTransactionTriggers(block, solidNum);
331331
}
332+
333+
GrpcAPI.TransactionInfoList transactionInfoList
334+
= manager.getTransactionInfoByBlockNum(block.getNum());
332335
List<TransactionCapsule> transactionCapsuleList = block.getTransactions();
333-
GrpcAPI.TransactionInfoList transactionInfoList = GrpcAPI
334-
.TransactionInfoList.newBuilder().build();
335-
GrpcAPI.TransactionInfoList.Builder transactionInfoListBuilder = GrpcAPI
336-
.TransactionInfoList.newBuilder();
337-
try {
338-
TransactionRetCapsule result = manager.getChainBaseManager().getTransactionRetStore()
339-
.getTransactionInfoByBlockNum(ByteArray.fromLong(block.getNum()));
340-
if (!Objects.isNull(result) && !Objects.isNull(result.getInstance())) {
341-
result.getInstance().getTransactioninfoList()
342-
.forEach(transactionInfoListBuilder::addTransactionInfo);
343-
transactionInfoList = transactionInfoListBuilder.build();
344-
}
345-
} catch (BadItemException e) {
346-
logger.error("Get TransactionInfo failed, blockNum {}, {}.", block.getNum(), e.getMessage());
347-
}
348336
if (transactionCapsuleList.size() != transactionInfoList.getTransactionInfoCount()) {
349337
logger.error("Get TransactionInfo size not eq, blockNum {}, {}, {}",
350338
block.getNum(), transactionCapsuleList.size(),
@@ -385,22 +373,8 @@ public List<TransactionLogTriggerCapsule> getTransactionTriggers(BlockCapsule bl
385373
return list;
386374
}
387375

388-
GrpcAPI.TransactionInfoList transactionInfoList = GrpcAPI
389-
.TransactionInfoList.newBuilder().build();
390-
GrpcAPI.TransactionInfoList.Builder transactionInfoListBuilder = GrpcAPI
391-
.TransactionInfoList.newBuilder();
392-
try {
393-
TransactionRetCapsule result = manager.getChainBaseManager().getTransactionRetStore()
394-
.getTransactionInfoByBlockNum(ByteArray.fromLong(block.getNum()));
395-
if (!Objects.isNull(result) && !Objects.isNull(result.getInstance())) {
396-
result.getInstance().getTransactioninfoList()
397-
.forEach(transactionInfoListBuilder::addTransactionInfo);
398-
transactionInfoList = transactionInfoListBuilder.build();
399-
}
400-
} catch (Exception e) {
401-
logger.warn("Get TransactionInfo failed, blockNum {}, {}.", block.getNum(), e.getMessage());
402-
}
403-
376+
GrpcAPI.TransactionInfoList transactionInfoList
377+
= manager.getTransactionInfoByBlockNum(block.getNum());
404378
if (block.getTransactions().size() != transactionInfoList.getTransactionInfoCount()) {
405379
for (TransactionCapsule t : block.getTransactions()) {
406380
TransactionLogTriggerCapsule triggerCapsule = new TransactionLogTriggerCapsule(t, block);

framework/src/main/java/org/tron/core/services/event/HistoryEventService.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,13 @@ public void init() {
4545

4646
public void close() {
4747
if (thread != null) {
48-
thread.interrupt();
48+
try {
49+
thread.interrupt();
50+
thread.join(1000);
51+
} catch (InterruptedException e) {
52+
Thread.currentThread().interrupt();
53+
logger.warn("Wait close timeout, {}", e.getMessage());
54+
}
4955
}
5056
logger.info("History event service close.");
5157
}

framework/src/main/java/org/tron/core/services/jsonrpc/filters/LogMatch.java

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -83,17 +83,13 @@ public LogFilterElement[] matchBlockOneByOne()
8383
List<LogFilterElement> logFilterElementList = new ArrayList<>();
8484

8585
for (long blockNum : blockNumList) {
86-
TransactionRetCapsule transactionRetCapsule =
87-
manager.getTransactionRetStore()
88-
.getTransactionInfoByBlockNum(ByteArray.fromLong(blockNum));
89-
if (transactionRetCapsule == null) {
90-
//if query condition (address and topics) is empty, we will traversal every block,
91-
//include empty block
86+
List<TransactionInfo> transactionInfoList =
87+
manager.getTransactionInfoByBlockNum(blockNum).getTransactionInfoList();
88+
//if query condition (address and topics) is empty, we will traversal every block,
89+
//include empty block
90+
if (transactionInfoList.isEmpty()) {
9291
continue;
9392
}
94-
TransactionRet transactionRet = transactionRetCapsule.getInstance();
95-
List<TransactionInfo> transactionInfoList = transactionRet.getTransactioninfoList();
96-
9793
String blockHash = manager.getChainBaseManager().getBlockIdByNum(blockNum).toString();
9894
List<LogFilterElement> matchedLog = matchBlock(logFilterWrapper.getLogFilter(), blockNum,
9995
blockHash, transactionInfoList, false);

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1261,6 +1261,7 @@ public void testGetTransactionInfoByBlockNum() throws Exception {
12611261
GrpcAPI.TransactionInfoList transactionInfoList = dbManager.getTransactionInfoByBlockNum(1000L);
12621262

12631263
Assert.assertEquals(1, transactionInfoList.getTransactionInfoCount());
1264+
Assert.assertEquals(1, transactionInfoList.getTransactionInfoList().size());
12641265

12651266
Protocol.TransactionRet ret = Protocol.TransactionRet.newBuilder()
12661267
.addTransactioninfo(info)
@@ -1274,6 +1275,7 @@ public void testGetTransactionInfoByBlockNum() throws Exception {
12741275
transactionInfoList = dbManager.getTransactionInfoByBlockNum(1000L);
12751276

12761277
Assert.assertEquals(2, transactionInfoList.getTransactionInfoCount());
1278+
Assert.assertEquals(2, transactionInfoList.getTransactionInfoList().size());
12771279
}
12781280

12791281
@Test

framework/src/test/java/org/tron/core/event/BlockEventGetTest.java

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import org.junit.Test;
2020
import org.junit.rules.TemporaryFolder;
2121
import org.mockito.Mockito;
22+
import org.tron.api.GrpcAPI;
2223
import org.tron.common.application.TronApplicationContext;
2324
import org.tron.common.logsfilter.EventPluginConfig;
2425
import org.tron.common.logsfilter.EventPluginLoader;
@@ -233,6 +234,11 @@ public void getTransactionTriggers() throws Exception {
233234

234235
bc = new BlockCapsule(100, ByteString.empty(), 1, transactionList);
235236

237+
Manager manager = mock(Manager.class);
238+
ReflectUtils.setFieldValue(blockEventGet, "manager", manager);
239+
Mockito.when(manager.getTransactionInfoByBlockNum(1))
240+
.thenReturn(GrpcAPI.TransactionInfoList.newBuilder().build());
241+
236242
list = blockEventGet.getTransactionTriggers(bc, 1);
237243
Assert.assertEquals(1, list.size());
238244
Assert.assertEquals(100, list.get(0).getTransactionLogTrigger().getTimeStamp());
@@ -253,21 +259,14 @@ public void getTransactionTriggers() throws Exception {
253259
.addContractResult(ByteString.copyFrom(ByteArray.fromHexString("112233")))
254260
.setReceipt(resourceBuild.build());
255261

256-
Manager manager = mock(Manager.class);
257-
ReflectUtils.setFieldValue(blockEventGet, "manager", manager);
258-
259262
ChainBaseManager chainBaseManager = mock(ChainBaseManager.class);
260263
Mockito.when(manager.getChainBaseManager()).thenReturn(chainBaseManager);
261264

262-
TransactionRetStore transactionRetStore = mock(TransactionRetStore.class);
263-
Mockito.when(chainBaseManager.getTransactionRetStore()).thenReturn(transactionRetStore);
264-
265-
Protocol.TransactionRet transactionRet = Protocol.TransactionRet.newBuilder()
266-
.addTransactioninfo(infoBuild.build()).build();
267265

268-
TransactionRetCapsule result = new TransactionRetCapsule(transactionRet.toByteArray());
266+
GrpcAPI.TransactionInfoList result = GrpcAPI.TransactionInfoList.newBuilder()
267+
.addTransactionInfo(infoBuild.build()).build();
269268

270-
Mockito.when(transactionRetStore.getTransactionInfoByBlockNum(ByteArray.fromLong(0)))
269+
Mockito.when(manager.getTransactionInfoByBlockNum(0))
271270
.thenReturn(result);
272271

273272
Protocol.Block block = Protocol.Block.newBuilder()
@@ -286,8 +285,8 @@ public void getTransactionTriggers() throws Exception {
286285
Assert.assertEquals(2,
287286
list.get(0).getTransactionLogTrigger().getEnergyUsageTotal());
288287

289-
Mockito.when(transactionRetStore.getTransactionInfoByBlockNum(ByteArray.fromLong(0)))
290-
.thenReturn(null);
288+
Mockito.when(manager.getTransactionInfoByBlockNum(0))
289+
.thenReturn(GrpcAPI.TransactionInfoList.newBuilder().build());
291290
list = blockEventGet.getTransactionTriggers(blockCapsule, 1);
292291
Assert.assertEquals(1, list.size());
293292
Assert.assertEquals(1,

framework/src/test/java/org/tron/core/event/HistoryEventServiceTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ public class HistoryEventServiceTest {
2323

2424
HistoryEventService historyEventService = new HistoryEventService();
2525

26-
@Test
26+
@Test(timeout = 60_000)
2727
public void test() throws Exception {
2828
EventPluginLoader instance = mock(EventPluginLoader.class);
2929
Mockito.when(instance.isUseNativeQueue()).thenReturn(true);

0 commit comments

Comments
 (0)