From 937e2feab27f9d4ed22fe12fca95b289f571c542 Mon Sep 17 00:00:00 2001 From: Eric Long Date: Mon, 12 Jul 2021 11:07:17 -0400 Subject: [PATCH] 0005051: Improve performance with sync trigger call for list of triggers --- .../service/impl/TriggerRouterService.java | 27 +++++++++++-------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/TriggerRouterService.java b/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/TriggerRouterService.java index 0c96e43526..b111c9738b 100644 --- a/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/TriggerRouterService.java +++ b/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/TriggerRouterService.java @@ -123,12 +123,16 @@ public class TriggerRouterService extends AbstractService implements ITriggerRou private Map> triggerRoutersByTriggerHist; private List triggerRoutersCache = new ArrayList(); + + private Map triggerRoutersByIdCache; private long triggerRouterPerNodeCacheTime; private long triggerRouterPerChannelCacheTime; private long triggerRoutersByTriggerHistCacheTime; + + private long triggerRoutersByIdCacheTime; private TriggerFailureListener failureListener = new TriggerFailureListener(); @@ -987,18 +991,19 @@ public TriggerRouter findTriggerRouterById(String triggerId, String routerId){ return findTriggerRouterById(triggerId, routerId, true); } - public TriggerRouter findTriggerRouterById(String triggerId, String routerId, boolean refreshCache) { - List configs = (List) sqlTemplate.query( - getTriggerRouterSql("selectTriggerRouterSql"), new TriggerRouterMapper(), - triggerId, routerId); - if (configs.size() > 0) { - TriggerRouter triggerRouter = configs.get(0); - triggerRouter.setRouter(getRouterById(triggerRouter.getRouter().getRouterId(), refreshCache)); - triggerRouter.setTrigger(getTriggerById(triggerRouter.getTrigger().getTriggerId(), refreshCache)); - return triggerRouter; - } else { - return null; + public TriggerRouter findTriggerRouterById(String triggerId, String routerId, boolean refreshCache) { + long cacheTimeoutInMs = parameterService.getLong(ParameterConstants.CACHE_TIMEOUT_TRIGGER_ROUTER_IN_MS); + if (triggerRoutersByIdCache == null || refreshCache || System.currentTimeMillis() - triggerRoutersByIdCacheTime > cacheTimeoutInMs) { + synchronized (cacheLock) { + Map map = new HashMap(); + for (TriggerRouter triggerRouter : getTriggerRouters(refreshCache)) { + map.put(triggerRouter.getIdentifier(), triggerRouter); + } + triggerRoutersByIdCache = map; + triggerRoutersByIdCacheTime = System.currentTimeMillis(); + } } + return triggerRoutersByIdCache.get(triggerId + routerId); } public List findTriggerRoutersByTriggerId(String triggerId, boolean refreshCache) {