Skip to content

Commit

Permalink
0005051: Improve performance with sync trigger call for list of triggers
Browse files Browse the repository at this point in the history
  • Loading branch information
erilong committed Jul 12, 2021
1 parent 5883dd1 commit 937e2fe
Showing 1 changed file with 16 additions and 11 deletions.
Expand Up @@ -123,12 +123,16 @@ public class TriggerRouterService extends AbstractService implements ITriggerRou
private Map<String, Map<Integer, TriggerRouter>> triggerRoutersByTriggerHist;

private List<TriggerRouter> triggerRoutersCache = new ArrayList<TriggerRouter>();

private Map<String, TriggerRouter> triggerRoutersByIdCache;

private long triggerRouterPerNodeCacheTime;

private long triggerRouterPerChannelCacheTime;

private long triggerRoutersByTriggerHistCacheTime;

private long triggerRoutersByIdCacheTime;

private TriggerFailureListener failureListener = new TriggerFailureListener();

Expand Down Expand Up @@ -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<TriggerRouter> configs = (List<TriggerRouter>) 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<String, TriggerRouter> map = new HashMap<String, TriggerRouter>();
for (TriggerRouter triggerRouter : getTriggerRouters(refreshCache)) {
map.put(triggerRouter.getIdentifier(), triggerRouter);
}
triggerRoutersByIdCache = map;
triggerRoutersByIdCacheTime = System.currentTimeMillis();
}
}
return triggerRoutersByIdCache.get(triggerId + routerId);
}

public List<TriggerRouter> findTriggerRoutersByTriggerId(String triggerId, boolean refreshCache) {
Expand Down

0 comments on commit 937e2fe

Please sign in to comment.