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);
 }