@Override public void invalidateAll(Experiment.BuilderFactory factory) { final Iterator<ExperimentEntity> iterator = ds .find(ExperimentEntity.class) .field("active").equal(true) .iterator(); final Map<String, Experiment> newMap = Maps.newConcurrentMap(); Long maxRevision = null; while (iterator.hasNext()) { final ExperimentEntity entity = iterator.next(); if (maxRevision == null || entity.revision > maxRevision) { maxRevision = entity.revision; } newMap.put(entity.name, entity.toExperiment(factory.createBuilder(entity.name))); } if (maxRevision != null) { revisionManager.setLatestRevision(maxRevision); } cachedExperiments = newMap; }
private Experiments(ExperimentsStoreProvider provider, CacheStrategy strategy, ExecutorService executorService) { store = provider.getStore(); cache = provider.getCache(); Preconditions.checkNotNull(store, "store cannot be null"); Preconditions.checkNotNull(cache, "cache cannot be null"); this.strategy = strategy != null ? strategy : new BasicCacheStrategy(); this.context = new CachingContext(cache, new Experiment.BuilderFactory(this), executorService); cache.invalidateAll(new Experiment.BuilderFactory(this)); }
/** * Forces cache to reload a specific experiment from storage */ public void invalidate(final String experimentName, boolean async) { if (async) { executorService.execute(new Runnable() { @Override public void run() { safeInvalidate(experimentName, builderFactory.createBuilder(experimentName)); } }); } else { safeInvalidate(experimentName, builderFactory.createBuilder(experimentName)); } }
@Override public void run() { safeInvalidate(experimentName, builderFactory.createBuilder(experimentName)); } });
/** * Finds an experiment given a set of criteria */ public Iterable<Experiment> find(Filter filter) { return Iterables.unmodifiableIterable( new CacheStrategyIterable( store.find(filter, new Experiment.BuilderFactory(this)), context, strategy ) ); }
@Override public Experiment next() { final ExperimentEntity entity = iterator.next(); return entity.toExperiment(factory.createBuilder(entity.name)); }