Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 4 additions & 34 deletions framework/src/main/java/org/tron/core/db/Manager.java
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@
import org.bouncycastle.util.encoders.Hex;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.tron.api.GrpcAPI;
import org.tron.api.GrpcAPI.TransactionInfoList;
import org.tron.common.args.GenesisBlock;
import org.tron.common.bloom.Bloom;
Expand Down Expand Up @@ -2158,25 +2159,7 @@ private void processTransactionTrigger(BlockCapsule newBlock) {
// need to set eth compatible data from transactionInfoList
if (EventPluginLoader.getInstance().isTransactionLogTriggerEthCompatible()
&& newBlock.getNum() != 0) {
TransactionInfoList transactionInfoList = TransactionInfoList.newBuilder().build();
TransactionInfoList.Builder transactionInfoListBuilder = TransactionInfoList.newBuilder();

try {
TransactionRetCapsule result = chainBaseManager.getTransactionRetStore()
.getTransactionInfoByBlockNum(ByteArray.fromLong(newBlock.getNum()));

if (!Objects.isNull(result) && !Objects.isNull(result.getInstance())) {
result.getInstance().getTransactioninfoList().forEach(
transactionInfoListBuilder::addTransactionInfo
);

transactionInfoList = transactionInfoListBuilder.build();
}
} catch (BadItemException e) {
logger.error("PostBlockTrigger getTransactionInfoList blockNum = {}, error is {}.",
newBlock.getNum(), e.getMessage());
}

TransactionInfoList transactionInfoList = getTransactionInfoByBlockNum(newBlock.getNum());
if (transactionCapsuleList.size() == transactionInfoList.getTransactionInfoCount()) {
long cumulativeEnergyUsed = 0;
long cumulativeLogCount = 0;
Expand Down Expand Up @@ -2234,21 +2217,8 @@ private void postLogsFilter(final BlockCapsule blockCapsule, boolean solidified,
boolean removed) {
if (!blockCapsule.getTransactions().isEmpty()) {
long blockNumber = blockCapsule.getNum();
List<TransactionInfo> transactionInfoList = new ArrayList<>();

try {
TransactionRetCapsule result = chainBaseManager.getTransactionRetStore()
.getTransactionInfoByBlockNum(ByteArray.fromLong(blockNumber));

if (!Objects.isNull(result) && !Objects.isNull(result.getInstance())) {
transactionInfoList.addAll(result.getInstance().getTransactioninfoList());
}
} catch (BadItemException e) {
logger.error("ProcessLogsFilter getTransactionInfoList blockNum = {}, error is {}.",
blockNumber, e.getMessage());
return;
}

List<TransactionInfo> transactionInfoList
= getTransactionInfoByBlockNum(blockNumber).getTransactionInfoList();
LogsFilterCapsule logsFilterCapsule = new LogsFilterCapsule(blockNumber,
blockCapsule.getBlockId().toString(), blockCapsule.getBloom(), transactionInfoList,
solidified, removed);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -329,22 +329,10 @@ public List<TransactionLogTriggerCapsule> getTransactionLogTrigger(BlockCapsule
if (!EventPluginLoader.getInstance().isTransactionLogTriggerEthCompatible()) {
return getTransactionTriggers(block, solidNum);
}

GrpcAPI.TransactionInfoList transactionInfoList
= manager.getTransactionInfoByBlockNum(block.getNum());
List<TransactionCapsule> transactionCapsuleList = block.getTransactions();
GrpcAPI.TransactionInfoList transactionInfoList = GrpcAPI
.TransactionInfoList.newBuilder().build();
GrpcAPI.TransactionInfoList.Builder transactionInfoListBuilder = GrpcAPI
.TransactionInfoList.newBuilder();
try {
TransactionRetCapsule result = manager.getChainBaseManager().getTransactionRetStore()
.getTransactionInfoByBlockNum(ByteArray.fromLong(block.getNum()));
if (!Objects.isNull(result) && !Objects.isNull(result.getInstance())) {
result.getInstance().getTransactioninfoList()
.forEach(transactionInfoListBuilder::addTransactionInfo);
transactionInfoList = transactionInfoListBuilder.build();
}
} catch (BadItemException e) {
logger.error("Get TransactionInfo failed, blockNum {}, {}.", block.getNum(), e.getMessage());
}
if (transactionCapsuleList.size() != transactionInfoList.getTransactionInfoCount()) {
logger.error("Get TransactionInfo size not eq, blockNum {}, {}, {}",
block.getNum(), transactionCapsuleList.size(),
Expand Down Expand Up @@ -385,22 +373,8 @@ public List<TransactionLogTriggerCapsule> getTransactionTriggers(BlockCapsule bl
return list;
}

GrpcAPI.TransactionInfoList transactionInfoList = GrpcAPI
.TransactionInfoList.newBuilder().build();
GrpcAPI.TransactionInfoList.Builder transactionInfoListBuilder = GrpcAPI
.TransactionInfoList.newBuilder();
try {
TransactionRetCapsule result = manager.getChainBaseManager().getTransactionRetStore()
.getTransactionInfoByBlockNum(ByteArray.fromLong(block.getNum()));
if (!Objects.isNull(result) && !Objects.isNull(result.getInstance())) {
result.getInstance().getTransactioninfoList()
.forEach(transactionInfoListBuilder::addTransactionInfo);
transactionInfoList = transactionInfoListBuilder.build();
}
} catch (Exception e) {
logger.warn("Get TransactionInfo failed, blockNum {}, {}.", block.getNum(), e.getMessage());
}

GrpcAPI.TransactionInfoList transactionInfoList
= manager.getTransactionInfoByBlockNum(block.getNum());
if (block.getTransactions().size() != transactionInfoList.getTransactionInfoCount()) {
for (TransactionCapsule t : block.getTransactions()) {
TransactionLogTriggerCapsule triggerCapsule = new TransactionLogTriggerCapsule(t, block);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,13 @@ public void init() {

public void close() {
if (thread != null) {
thread.interrupt();
try {
thread.interrupt();
thread.join(1000);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
logger.warn("Wait close timeout, {}", e.getMessage());
}
}
logger.info("History event service close.");
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -83,17 +83,13 @@ public LogFilterElement[] matchBlockOneByOne()
List<LogFilterElement> logFilterElementList = new ArrayList<>();

for (long blockNum : blockNumList) {
TransactionRetCapsule transactionRetCapsule =
manager.getTransactionRetStore()
.getTransactionInfoByBlockNum(ByteArray.fromLong(blockNum));
if (transactionRetCapsule == null) {
//if query condition (address and topics) is empty, we will traversal every block,
//include empty block
List<TransactionInfo> transactionInfoList =
manager.getTransactionInfoByBlockNum(blockNum).getTransactionInfoList();
//if query condition (address and topics) is empty, we will traversal every block,
//include empty block
if (transactionInfoList.isEmpty()) {
continue;
}
TransactionRet transactionRet = transactionRetCapsule.getInstance();
List<TransactionInfo> transactionInfoList = transactionRet.getTransactioninfoList();

String blockHash = manager.getChainBaseManager().getBlockIdByNum(blockNum).toString();
List<LogFilterElement> matchedLog = matchBlock(logFilterWrapper.getLogFilter(), blockNum,
blockHash, transactionInfoList, false);
Expand Down
2 changes: 2 additions & 0 deletions framework/src/test/java/org/tron/core/db/ManagerTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -1261,6 +1261,7 @@ public void testGetTransactionInfoByBlockNum() throws Exception {
GrpcAPI.TransactionInfoList transactionInfoList = dbManager.getTransactionInfoByBlockNum(1000L);

Assert.assertEquals(1, transactionInfoList.getTransactionInfoCount());
Assert.assertEquals(1, transactionInfoList.getTransactionInfoList().size());

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

Assert.assertEquals(2, transactionInfoList.getTransactionInfoCount());
Assert.assertEquals(2, transactionInfoList.getTransactionInfoList().size());
}

@Test
Expand Down
23 changes: 11 additions & 12 deletions framework/src/test/java/org/tron/core/event/BlockEventGetTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
import org.mockito.Mockito;
import org.tron.api.GrpcAPI;
import org.tron.common.application.TronApplicationContext;
import org.tron.common.logsfilter.EventPluginConfig;
import org.tron.common.logsfilter.EventPluginLoader;
Expand Down Expand Up @@ -233,6 +234,11 @@ public void getTransactionTriggers() throws Exception {

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

Manager manager = mock(Manager.class);
ReflectUtils.setFieldValue(blockEventGet, "manager", manager);
Mockito.when(manager.getTransactionInfoByBlockNum(1))
.thenReturn(GrpcAPI.TransactionInfoList.newBuilder().build());

list = blockEventGet.getTransactionTriggers(bc, 1);
Assert.assertEquals(1, list.size());
Assert.assertEquals(100, list.get(0).getTransactionLogTrigger().getTimeStamp());
Expand All @@ -253,21 +259,14 @@ public void getTransactionTriggers() throws Exception {
.addContractResult(ByteString.copyFrom(ByteArray.fromHexString("112233")))
.setReceipt(resourceBuild.build());

Manager manager = mock(Manager.class);
ReflectUtils.setFieldValue(blockEventGet, "manager", manager);

ChainBaseManager chainBaseManager = mock(ChainBaseManager.class);
Mockito.when(manager.getChainBaseManager()).thenReturn(chainBaseManager);

TransactionRetStore transactionRetStore = mock(TransactionRetStore.class);
Mockito.when(chainBaseManager.getTransactionRetStore()).thenReturn(transactionRetStore);

Protocol.TransactionRet transactionRet = Protocol.TransactionRet.newBuilder()
.addTransactioninfo(infoBuild.build()).build();

TransactionRetCapsule result = new TransactionRetCapsule(transactionRet.toByteArray());
GrpcAPI.TransactionInfoList result = GrpcAPI.TransactionInfoList.newBuilder()
.addTransactionInfo(infoBuild.build()).build();

Mockito.when(transactionRetStore.getTransactionInfoByBlockNum(ByteArray.fromLong(0)))
Mockito.when(manager.getTransactionInfoByBlockNum(0))
.thenReturn(result);

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

Mockito.when(transactionRetStore.getTransactionInfoByBlockNum(ByteArray.fromLong(0)))
.thenReturn(null);
Mockito.when(manager.getTransactionInfoByBlockNum(0))
.thenReturn(GrpcAPI.TransactionInfoList.newBuilder().build());
list = blockEventGet.getTransactionTriggers(blockCapsule, 1);
Assert.assertEquals(1, list.size());
Assert.assertEquals(1,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ public class HistoryEventServiceTest {

HistoryEventService historyEventService = new HistoryEventService();

@Test
@Test(timeout = 60_000)
public void test() throws Exception {
EventPluginLoader instance = mock(EventPluginLoader.class);
Mockito.when(instance.isUseNativeQueue()).thenReturn(true);
Expand Down