@Override public FilterInfo setCanaryFilter(String filter_id, int revision) { ArrayList<Integer> revisionsToDeactivate = new ArrayList<Integer>(); FilterInfo filterInfo = getCanaryScriptForFilter(filter_id); if (filterInfo != null) { revisionsToDeactivate.add(filterInfo.getRevision()); removeFilterIdFromIndex(ACTIVE_SCRIPTS + ZuulApplicationInfo.getApplicationName(), filter_id + "_" + filterInfo.getRevision()); removeFilterIdFromIndex(CANARY_SCRIPTS + ZuulApplicationInfo.getApplicationName(), filter_id + "_" + filterInfo.getRevision()); } /* activate the revision */ Map<String, Object> attributesForActivation = new HashMap<String, Object>(); attributesForActivation.put("canary", true); attributesForActivation.put("active", false); cassandraGateway.upsert(filter_id + "_" + revision, attributesForActivation); addFilterIdToIndex(CANARY_SCRIPTS + ZuulApplicationInfo.getApplicationName(), filter_id + "_" + revision); /* de-activate previously active revisions */ // do this AFTER activating so we don't allow a period where no active scripts will respond for (int revisionToDeactivate : revisionsToDeactivate) { // do NOT deactivate if we just activated this (can occur if someone calls this twice in a row, cleaning up bad data, etc) if (revisionToDeactivate != revision) { Map<String, Object> attributesForDeactivation = new HashMap<String, Object>(); attributesForDeactivation.put("canary", false); cassandraGateway.upsert(filter_id + "_" + revisionToDeactivate, attributesForDeactivation); } } setChanged(); notifyObservers(new ZuulEvent("ZUUL_SCRIPT_CHANGE", "CANARY FILTER SET id = " + filter_id + "revision = " + revision)); return getFilterInfoForFilter(filter_id, revision); }
@Override public FilterInfo setCanaryFilter(String filter_id, int revision) { ArrayList<Integer> revisionsToDeactivate = new ArrayList<Integer>(); FilterInfo filterInfo = getCanaryScriptForFilter(filter_id); if (filterInfo != null) { revisionsToDeactivate.add(filterInfo.getRevision()); removeFilterIdFromIndex(ACTIVE_SCRIPTS + ZuulApplicationInfo.getApplicationName(), filter_id + "_" + filterInfo.getRevision()); removeFilterIdFromIndex(CANARY_SCRIPTS + ZuulApplicationInfo.getApplicationName(), filter_id + "_" + filterInfo.getRevision()); } /* activate the revision */ Map<String, Object> attributesForActivation = new HashMap<String, Object>(); attributesForActivation.put("canary", true); attributesForActivation.put("active", false); cassandraGateway.upsert(filter_id + "_" + revision, attributesForActivation); addFilterIdToIndex(CANARY_SCRIPTS + ZuulApplicationInfo.getApplicationName(), filter_id + "_" + revision); /* de-activate previously active revisions */ // do this AFTER activating so we don't allow a period where no active scripts will respond for (int revisionToDeactivate : revisionsToDeactivate) { // do NOT deactivate if we just activated this (can occur if someone calls this twice in a row, cleaning up bad data, etc) if (revisionToDeactivate != revision) { Map<String, Object> attributesForDeactivation = new HashMap<String, Object>(); attributesForDeactivation.put("canary", false); cassandraGateway.upsert(filter_id + "_" + revisionToDeactivate, attributesForDeactivation); } } setChanged(); notifyObservers(new ZuulEvent("ZUUL_SCRIPT_CHANGE", "CANARY FILTER SET id = " + filter_id + "revision = " + revision)); return getFilterInfoForFilter(filter_id, revision); }