Skip to content

Commit eb918c7

Browse files
committed
refactor(config): simplify applyEventConfig to gate on isEnable()
Follow-up to #6615. The `||` chains guarding eventPluginConfig and eventFilter construction were always-true after the bean-binding refactor (reference.conf ships default `topics` and `contractAddress`), so both fields were built on every startup regardless of `event.subscribe.enable`. Their only consumer (Manager.java:564) is already gated by `isEventSubscribe()`, so collapsing the entry to `if (!ec.isEnable()) return;` is equivalent. Tests in ArgsTest cover enable=false (skip both), enable=true (build both), and enable=true with an invalid filter block (epc built, filter left null).
1 parent 22e0aa3 commit eb918c7

2 files changed

Lines changed: 114 additions & 64 deletions

File tree

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

Lines changed: 66 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -376,82 +376,84 @@ private static void applyEventConfig(EventConfig ec) {
376376
// contractParse belongs to event.subscribe but Storage object holds it
377377
PARAMETER.storage.setContractParseSwitch(ec.isContractParse());
378378

379+
// PARAMETER.eventPluginConfig and PARAMETER.eventFilter are only consumed by
380+
// Manager.startEventSubscribing(), which itself is gated by isEventSubscribe()
381+
// (= ec.isEnable()) at Manager.java:564. When subscribe is disabled, building
382+
// these objects has no observable effect — skip both early so PARAMETER stays
383+
// consistent with the runtime intent.
384+
if (!ec.isEnable()) {
385+
return;
386+
}
387+
379388
// Build EventPluginConfig from EventConfig bean
380-
// If event.subscribe was configured, bean will have non-default values
381-
if (ec.isEnable() || ec.getVersion() != 0 || !ec.getTopics().isEmpty()
382-
|| StringUtils.isNotEmpty(ec.getPath()) || StringUtils.isNotEmpty(ec.getServer())) {
383-
EventPluginConfig epc = new EventPluginConfig();
384-
epc.setVersion(ec.getVersion());
385-
epc.setStartSyncBlockNum(ec.getStartSyncBlockNum());
386-
387-
// native queue
388-
EventConfig.NativeConfig nq = ec.getNativeQueue();
389-
epc.setUseNativeQueue(nq.isUseNativeQueue());
390-
epc.setBindPort(nq.getBindport());
391-
epc.setSendQueueLength(nq.getSendqueuelength());
392-
393-
if (!nq.isUseNativeQueue()) {
394-
if (StringUtils.isNotEmpty(ec.getPath())) {
395-
epc.setPluginPath(ec.getPath().trim());
396-
}
397-
if (StringUtils.isNotEmpty(ec.getServer())) {
398-
epc.setServerAddress(ec.getServer().trim());
399-
}
400-
if (StringUtils.isNotEmpty(ec.getDbconfig())) {
401-
epc.setDbConfig(ec.getDbconfig().trim());
402-
}
389+
EventPluginConfig epc = new EventPluginConfig();
390+
epc.setVersion(ec.getVersion());
391+
epc.setStartSyncBlockNum(ec.getStartSyncBlockNum());
392+
393+
// native queue
394+
EventConfig.NativeConfig nq = ec.getNativeQueue();
395+
epc.setUseNativeQueue(nq.isUseNativeQueue());
396+
epc.setBindPort(nq.getBindport());
397+
epc.setSendQueueLength(nq.getSendqueuelength());
398+
399+
if (!nq.isUseNativeQueue()) {
400+
if (StringUtils.isNotEmpty(ec.getPath())) {
401+
epc.setPluginPath(ec.getPath().trim());
403402
}
404-
405-
// topics
406-
List<TriggerConfig> triggerConfigs = new ArrayList<>();
407-
for (EventConfig.TopicConfig tc : ec.getTopics()) {
408-
TriggerConfig trig = new TriggerConfig();
409-
trig.setTriggerName(tc.getTriggerName());
410-
trig.setEnabled(tc.isEnable());
411-
trig.setTopic(tc.getTopic());
412-
trig.setSolidified(tc.isSolidified());
413-
trig.setEthCompatible(tc.isEthCompatible());
414-
trig.setRedundancy(tc.isRedundancy());
415-
triggerConfigs.add(trig);
403+
if (StringUtils.isNotEmpty(ec.getServer())) {
404+
epc.setServerAddress(ec.getServer().trim());
405+
}
406+
if (StringUtils.isNotEmpty(ec.getDbconfig())) {
407+
epc.setDbConfig(ec.getDbconfig().trim());
416408
}
417-
epc.setTriggerConfigList(triggerConfigs);
409+
}
418410

419-
PARAMETER.eventPluginConfig = epc;
411+
// topics
412+
List<TriggerConfig> triggerConfigs = new ArrayList<>();
413+
for (EventConfig.TopicConfig tc : ec.getTopics()) {
414+
TriggerConfig trig = new TriggerConfig();
415+
trig.setTriggerName(tc.getTriggerName());
416+
trig.setEnabled(tc.isEnable());
417+
trig.setTopic(tc.getTopic());
418+
trig.setSolidified(tc.isSolidified());
419+
trig.setEthCompatible(tc.isEthCompatible());
420+
trig.setRedundancy(tc.isRedundancy());
421+
triggerConfigs.add(trig);
420422
}
423+
epc.setTriggerConfigList(triggerConfigs);
424+
425+
PARAMETER.eventPluginConfig = epc;
421426

422427
// Build FilterQuery from EventConfig.FilterConfig bean
423428
EventConfig.FilterConfig fc = ec.getFilter();
424-
if (StringUtils.isNotEmpty(fc.getFromblock()) || StringUtils.isNotEmpty(fc.getToblock())
425-
|| !fc.getContractAddress().isEmpty()) {
426-
FilterQuery filter = new FilterQuery();
429+
FilterQuery filter = new FilterQuery();
427430

428-
try {
429-
filter.setFromBlock(FilterQuery.parseFromBlockNumber(fc.getFromblock().trim()));
430-
} catch (Exception e) {
431-
logger.error("invalid filter: fromBlockNumber: {}", fc.getFromblock(), e);
432-
PARAMETER.eventFilter = null;
433-
return;
434-
}
431+
try {
432+
filter.setFromBlock(FilterQuery.parseFromBlockNumber(fc.getFromblock().trim()));
433+
} catch (Exception e) {
434+
logger.error("invalid filter: fromBlockNumber: {}", fc.getFromblock(), e);
435+
PARAMETER.eventFilter = null;
436+
return;
437+
}
435438

436-
try {
437-
filter.setToBlock(FilterQuery.parseToBlockNumber(fc.getToblock().trim()));
438-
} catch (Exception e) {
439-
logger.error("invalid filter: toBlockNumber: {}", fc.getToblock(), e);
440-
PARAMETER.eventFilter = null;
441-
return;
442-
}
439+
try {
440+
filter.setToBlock(FilterQuery.parseToBlockNumber(fc.getToblock().trim()));
441+
} catch (Exception e) {
442+
logger.error("invalid filter: toBlockNumber: {}", fc.getToblock(), e);
443+
PARAMETER.eventFilter = null;
444+
return;
445+
}
443446

444-
filter.setContractAddressList(
445-
fc.getContractAddress().stream()
446-
.filter(StringUtils::isNotEmpty)
447-
.collect(Collectors.toList()));
448-
filter.setContractTopicList(
449-
fc.getContractTopic().stream()
450-
.filter(StringUtils::isNotEmpty)
451-
.collect(Collectors.toList()));
447+
filter.setContractAddressList(
448+
fc.getContractAddress().stream()
449+
.filter(StringUtils::isNotEmpty)
450+
.collect(Collectors.toList()));
451+
filter.setContractTopicList(
452+
fc.getContractTopic().stream()
453+
.filter(StringUtils::isNotEmpty)
454+
.collect(Collectors.toList()));
452455

453-
PARAMETER.eventFilter = filter;
454-
}
456+
PARAMETER.eventFilter = filter;
455457
}
456458

457459
/**

framework/src/test/java/org/tron/core/config/args/ArgsTest.java

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -415,5 +415,53 @@ public void testFetchBlockTimeoutInRangeUnchanged() {
415415
Assert.assertEquals(500, Args.getInstance().getFetchBlockTimeout());
416416
Args.clearParam();
417417
}
418+
419+
// ===========================================================================
420+
// event.subscribe gating: PARAMETER.eventPluginConfig and PARAMETER.eventFilter
421+
// are only consumed by Manager.startEventSubscribing(), which is gated by
422+
// isEventSubscribe() (= ec.isEnable()). When subscribe is disabled, these
423+
// objects must not be built — building them would be dead state.
424+
// ===========================================================================
425+
426+
@Test
427+
public void testEventConfigDisabledSkipsEpcAndFilter() {
428+
Map<String, String> override = new HashMap<>();
429+
override.put("storage.db.directory", "database");
430+
override.put("event.subscribe.enable", "false");
431+
Config config = ConfigFactory.parseMap(override)
432+
.withFallback(ConfigFactory.defaultReference());
433+
Args.applyConfigParams(config);
434+
Assert.assertNull(Args.getInstance().getEventPluginConfig());
435+
Assert.assertNull(Args.getInstance().getEventFilter());
436+
Args.clearParam();
437+
}
438+
439+
@Test
440+
public void testEventConfigEnabledBuildsEpcAndFilter() {
441+
Map<String, String> override = new HashMap<>();
442+
override.put("storage.db.directory", "database");
443+
override.put("event.subscribe.enable", "true");
444+
Config config = ConfigFactory.parseMap(override)
445+
.withFallback(ConfigFactory.defaultReference());
446+
Args.applyConfigParams(config);
447+
Assert.assertNotNull(Args.getInstance().getEventPluginConfig());
448+
Assert.assertNotNull(Args.getInstance().getEventFilter());
449+
Args.clearParam();
450+
}
451+
452+
@Test
453+
public void testEventConfigEnabledWithInvalidFromBlockLeavesFilterNull() {
454+
Map<String, String> override = new HashMap<>();
455+
override.put("storage.db.directory", "database");
456+
override.put("event.subscribe.enable", "true");
457+
override.put("event.subscribe.filter.fromblock", "not-a-number");
458+
Config config = ConfigFactory.parseMap(override)
459+
.withFallback(ConfigFactory.defaultReference());
460+
Args.applyConfigParams(config);
461+
// epc still built; filter rejected
462+
Assert.assertNotNull(Args.getInstance().getEventPluginConfig());
463+
Assert.assertNull(Args.getInstance().getEventFilter());
464+
Args.clearParam();
465+
}
418466
}
419467

0 commit comments

Comments
 (0)