public synchronized List<Pair<String, String>> getEventsNotAvailableInZoie( String zoiePersistentVersion) { try { List<Pair<String, String>> events = new ArrayList<Pair<String, String>>(); for (PersistentCache persistentCache : persistentCaches.values()) { events.addAll(persistentCache.getEventsNotAvailableInZoie(zoiePersistentVersion)); } Collections.sort( events, new Comparator<Pair<String, String>>() { @Override public int compare(Pair<String, String> o1, Pair<String, String> o2) { return versionComparator.compare(o1.getFirst(), o1.getFirst()); } }); List<Pair<String, String>> ret = new ArrayList<Pair<String, String>>(); for (Pair<String, String> pair : events) { if (versionComparator.compare(zoiePersistentVersion, pair.getFirst()) <= 0) { ret.add(pair); } } return ret; } catch (Exception ex) { throw new RuntimeException(ex); } }
public void commitPengingEvents() { log.info("Flushing pending kafka events to the persistent cache"); long time = System.currentTimeMillis(); int numberOfBatches = 0; for (PersistentCache persistentCache : persistentCaches.values()) { persistentCache.commitPengingEvents(); numberOfBatches += persistentCache.numberOfAvailableBatches(); } numberOfBatchesCounter.clear(); numberOfBatchesCounter.inc(numberOfBatches); timer.update(System.currentTimeMillis() - time, TimeUnit.MILLISECONDS); }
@SuppressWarnings("rawtypes") @Override public void start(SenseiCore senseiCore) { persistentCaches = new HashMap<Integer, PersistentCache>(senseiCore.getPartitions().length); for (int partition : senseiCore.getPartitions()) { Zoie zoie = (Zoie) senseiCore.getIndexReaderFactory(partition); PersistentCache persistentCache = new PersistentCache(getPath(indexDirectory, nodeId, partition), versionComparator); PersistentCache.registerAsListener(persistentCache, zoie); persistentCaches.put(partition, persistentCache); } }
@Override public void handleUpdatedDiskVersion(String version) { versionUpdateCount.inc(); persistentCache.updateDiskVersion(version); }