@Override public void populate(HollowProducer.WriteState newState) throws Exception { newState.getStateEngine().addAllObjectsFromPreviousCycle(); removeRecords(newState); addRecords(newState); }
private void removeRecords(HollowProducer.WriteState newState) { if (newState.getPriorState() != null) { Collection<String> types = findTypesWithRemovedRecords(newState.getPriorState()); Map<String, BitSet> recordsToRemove = markRecordsToRemove(newState.getPriorState(), types); removeRecordsFromNewState(newState, recordsToRemove); } }
protected HollowIncrementalProducer(HollowProducer producer, double threadsPerCpu, HollowConsumer.AnnouncementWatcher announcementWatcher, HollowConsumer.BlobRetriever blobRetriever, List<IncrementalCycleListener> listeners, Class<?>... classes) { this.producer = producer; this.mutations = new ConcurrentHashMap<RecordPrimaryKey, Object>(); this.populator = new HollowIncrementalCyclePopulator(mutations, threadsPerCpu); this.dataModel = classes; this.announcementWatcher = announcementWatcher; this.blobRetriever = blobRetriever; this.listeners = new ListenerSupport(); this.cycleMetadata = new HashMap<String, Object>(); this.threadsPerCpu = threadsPerCpu; for (IncrementalCycleListener listener : listeners) this.listeners.add(listener); }
private Map<String, BitSet> markRecordsToRemove(HollowProducer.ReadState priorState, Collection<String> types) { HollowReadStateEngine priorStateEngine = priorState.getStateEngine(); Map<String, BitSet> recordsToRemove = new HashMap<>(); for(String type : types) { recordsToRemove.put(type, markTypeRecordsToRemove(priorStateEngine, type)); } TransitiveSetTraverser.addTransitiveMatches(priorStateEngine, recordsToRemove); TransitiveSetTraverser.removeReferencedOutsideClosure(priorStateEngine, recordsToRemove); return recordsToRemove; }