From 0570b6084b25b9489b921bc5fe977b56ce4c6c33 Mon Sep 17 00:00:00 2001 From: zeusoo001 Date: Tue, 11 Mar 2025 17:07:20 +0800 Subject: [PATCH 1/2] feat(event): optimize history event service close logic --- .../core/services/event/EventService.java | 35 +++++++++++-------- .../services/event/HistoryEventService.java | 14 ++++---- .../org/tron/core/event/EventServiceTest.java | 6 ++++ .../core/event/HistoryEventServiceTest.java | 4 +-- 4 files changed, 36 insertions(+), 23 deletions(-) diff --git a/framework/src/main/java/org/tron/core/services/event/EventService.java b/framework/src/main/java/org/tron/core/services/event/EventService.java index 0dc61a7809c..d4ec52c7730 100644 --- a/framework/src/main/java/org/tron/core/services/event/EventService.java +++ b/framework/src/main/java/org/tron/core/services/event/EventService.java @@ -24,32 +24,34 @@ public class EventService { @Autowired private Manager manager; + private EventPluginLoader instance = EventPluginLoader.getInstance(); + public void init() { logger.info("Start to load eventPlugin. {}, {}, {} " + "block: {}, {} trx: {}, {}, {} event: {}, {} log: {}, {}, {}, {} solid: {}", manager.isEventPluginLoaded(), - EventPluginLoader.getInstance().getVersion(), - EventPluginLoader.getInstance().getStartSyncBlockNum(), + instance.getVersion(), + instance.getStartSyncBlockNum(), - EventPluginLoader.getInstance().isBlockLogTriggerEnable(), - EventPluginLoader.getInstance().isBlockLogTriggerSolidified(), + instance.isBlockLogTriggerEnable(), + instance.isBlockLogTriggerSolidified(), - EventPluginLoader.getInstance().isTransactionLogTriggerEnable(), - EventPluginLoader.getInstance().isTransactionLogTriggerSolidified(), - EventPluginLoader.getInstance().isTransactionLogTriggerEthCompatible(), + instance.isTransactionLogTriggerEnable(), + instance.isTransactionLogTriggerSolidified(), + instance.isTransactionLogTriggerEthCompatible(), - EventPluginLoader.getInstance().isContractEventTriggerEnable(), - EventPluginLoader.getInstance().isSolidityEventTriggerEnable(), + instance.isContractEventTriggerEnable(), + instance.isSolidityEventTriggerEnable(), - EventPluginLoader.getInstance().isContractLogTriggerEnable(), - EventPluginLoader.getInstance().isContractLogTriggerRedundancy(), - EventPluginLoader.getInstance().isSolidityLogTriggerEnable(), - EventPluginLoader.getInstance().isSolidityLogTriggerRedundancy(), + instance.isContractLogTriggerEnable(), + instance.isContractLogTriggerRedundancy(), + instance.isSolidityLogTriggerEnable(), + instance.isSolidityLogTriggerRedundancy(), - EventPluginLoader.getInstance().isSolidityTriggerEnable()); + instance.isSolidityTriggerEnable()); - if (!manager.isEventPluginLoaded() || EventPluginLoader.getInstance().getVersion() != 1) { + if (!manager.isEventPluginLoaded() || instance.getVersion() != 1) { return; } @@ -57,6 +59,9 @@ public void init() { } public void close() { + if (!manager.isEventPluginLoaded() || instance.getVersion() != 1) { + return; + } historyEventService.close(); blockEventLoad.close(); realtimeEventService.close(); diff --git a/framework/src/main/java/org/tron/core/services/event/HistoryEventService.java b/framework/src/main/java/org/tron/core/services/event/HistoryEventService.java index fb202734b22..12bdbcc3c15 100644 --- a/framework/src/main/java/org/tron/core/services/event/HistoryEventService.java +++ b/framework/src/main/java/org/tron/core/services/event/HistoryEventService.java @@ -29,7 +29,7 @@ public class HistoryEventService { @Autowired private Manager manager; - private volatile boolean isRunning; + private volatile Thread thread; public void init() { if (instance.getStartSyncBlockNum() <= 0) { @@ -37,22 +37,24 @@ public void init() { return; } - isRunning = true; - - new Thread(() -> syncEvent(), "history-event").start(); + thread = new Thread(() -> syncEvent(), "history-event"); + thread.start(); logger.info("History event service start."); } public void close() { - isRunning = false; + if (thread != null) { + thread.interrupt(); + } + logger.info("History event service close."); } private void syncEvent() { try { long tmp = instance.getStartSyncBlockNum(); long endNum = manager.getDynamicPropertiesStore().getLatestSolidifiedBlockNum(); - while (tmp <= endNum && isRunning) { + while (tmp <= endNum) { BlockEvent blockEvent = blockEventGet.getBlockEvent(tmp); realtimeEventService.flush(blockEvent, false); solidEventService.flush(blockEvent); diff --git a/framework/src/test/java/org/tron/core/event/EventServiceTest.java b/framework/src/test/java/org/tron/core/event/EventServiceTest.java index 373bfe7d3ec..ff7aafb1d1a 100644 --- a/framework/src/test/java/org/tron/core/event/EventServiceTest.java +++ b/framework/src/test/java/org/tron/core/event/EventServiceTest.java @@ -4,6 +4,7 @@ import org.junit.Test; import org.mockito.Mockito; +import org.tron.common.logsfilter.EventPluginLoader; import org.tron.common.utils.ReflectUtils; import org.tron.core.capsule.BlockCapsule; import org.tron.core.db.Manager; @@ -38,5 +39,10 @@ public void test() { eventService.init(); eventService.close(); + + EventPluginLoader instance = mock(EventPluginLoader.class); + Mockito.when(instance.getVersion()).thenReturn(1); + ReflectUtils.setFieldValue(eventService, "instance", instance); + eventService.close(); } } diff --git a/framework/src/test/java/org/tron/core/event/HistoryEventServiceTest.java b/framework/src/test/java/org/tron/core/event/HistoryEventServiceTest.java index f51d2dbe490..b34d2a5f338 100644 --- a/framework/src/test/java/org/tron/core/event/HistoryEventServiceTest.java +++ b/framework/src/test/java/org/tron/core/event/HistoryEventServiceTest.java @@ -44,6 +44,7 @@ public void test() throws Exception { ReflectUtils.setFieldValue(historyEventService, "realtimeEventService", realtimeEventService); ReflectUtils.setFieldValue(historyEventService, "blockEventLoad", blockEventLoad); historyEventService.init(); + historyEventService.close(); solidEventService.close(); realtimeEventService.close(); blockEventLoad.close(); @@ -71,7 +72,6 @@ public void test() throws Exception { Mockito.when(blockEventGet.getBlockEvent(1)).thenReturn(be2); Mockito.when(instance.getStartSyncBlockNum()).thenReturn(1L); - ReflectUtils.setFieldValue(historyEventService, "isRunning", true); Mockito.when(dynamicPropertiesStore.getLatestSolidifiedBlockNum()).thenReturn(1L); Mockito.when(chainBaseManager.getBlockIdByNum(1L)) @@ -80,6 +80,6 @@ public void test() throws Exception { Method method1 = historyEventService.getClass().getDeclaredMethod("syncEvent"); method1.setAccessible(true); method1.invoke(historyEventService); - + historyEventService.close(); } } From 2519294ec84eace7905b9490ad77de87ed1c994a Mon Sep 17 00:00:00 2001 From: zeusoo001 Date: Tue, 11 Mar 2025 18:20:28 +0800 Subject: [PATCH 2/2] feat(event): improve HistoryEventService unit test --- .../test/java/org/tron/core/event/HistoryEventServiceTest.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/framework/src/test/java/org/tron/core/event/HistoryEventServiceTest.java b/framework/src/test/java/org/tron/core/event/HistoryEventServiceTest.java index b34d2a5f338..7a50c8a0c35 100644 --- a/framework/src/test/java/org/tron/core/event/HistoryEventServiceTest.java +++ b/framework/src/test/java/org/tron/core/event/HistoryEventServiceTest.java @@ -80,6 +80,8 @@ public void test() throws Exception { Method method1 = historyEventService.getClass().getDeclaredMethod("syncEvent"); method1.setAccessible(true); method1.invoke(historyEventService); + + historyEventService.init(); historyEventService.close(); } }