public IdentifiedDataSerializable createNew(Integer arg) { return new AccumulatorConsumerOperation(); } };
private boolean isLocal() { NodeEngine nodeEngine = getNodeEngine(); IPartitionService partitionService = nodeEngine.getPartitionService(); IPartition partition = partitionService.getPartition(getPartitionId()); return partition.isLocal(); }
@Override public void run() throws Exception { QueryCacheContext context = getQueryCacheContext(); QueryCacheEventService queryCacheEventService = context.getQueryCacheEventService(); EventPublisherAccumulatorProcessor processor = new EventPublisherAccumulatorProcessor(queryCacheEventService); AccumulatorHandler<Sequenced> handler = new PublisherAccumulatorHandler(context, processor); int processed = 0; do { Accumulator accumulator = accumulators.poll(); if (accumulator == null) { break; } if (isLocal()) { // consume the accumulator if only this node is the owner // of accumulators partition publishAccumulator(processor, handler, accumulator); } else { // if the accumulator is not local, it should be a leftover // stayed after partition migrations and remove that accumulator removeAccumulator(context, accumulator); } processed++; } while (processed <= maxProcessableAccumulatorCount); }
private QueryCacheContext getQueryCacheContext() { MapService mapService = getService(); return mapService.getMapServiceContext().getQueryCacheContext(); }
private void removeAccumulator(QueryCacheContext context, Accumulator accumulator) { PublisherContext publisherContext = context.getPublisherContext(); MapPublisherRegistry mapPublisherRegistry = publisherContext.getMapPublisherRegistry(); AccumulatorInfo info = accumulator.getInfo(); String mapName = info.getMapName(); String cacheName = info.getCacheId(); PublisherRegistry publisherRegistry = mapPublisherRegistry.getOrNull(mapName); if (publisherRegistry == null) { return; } PartitionAccumulatorRegistry partitionAccumulatorRegistry = publisherRegistry.getOrNull(cacheName); if (partitionAccumulatorRegistry == null) { return; } partitionAccumulatorRegistry.remove(getPartitionId()); }
private QueryCacheContext getQueryCacheContext() { MapService mapService = getService(); return mapService.getMapServiceContext().getQueryCacheContext(); }
private void removeAccumulator(QueryCacheContext context, Accumulator accumulator) { PublisherContext publisherContext = context.getPublisherContext(); MapPublisherRegistry mapPublisherRegistry = publisherContext.getMapPublisherRegistry(); AccumulatorInfo info = accumulator.getInfo(); String mapName = info.getMapName(); String cacheName = info.getCacheId(); PublisherRegistry publisherRegistry = mapPublisherRegistry.getOrNull(mapName); if (publisherRegistry == null) { return; } PartitionAccumulatorRegistry partitionAccumulatorRegistry = publisherRegistry.getOrNull(cacheName); if (partitionAccumulatorRegistry == null) { return; } partitionAccumulatorRegistry.remove(getPartitionId()); }
@Override public void run() throws Exception { QueryCacheContext context = getQueryCacheContext(); QueryCacheEventService queryCacheEventService = context.getQueryCacheEventService(); EventPublisherAccumulatorProcessor processor = new EventPublisherAccumulatorProcessor(queryCacheEventService); AccumulatorHandler<Sequenced> handler = new PublisherAccumulatorHandler(context, processor); int processed = 0; do { Accumulator accumulator = accumulators.poll(); if (accumulator == null) { break; } if (isLocal()) { // consume the accumulator if only this node is the owner // of accumulators partition publishAccumulator(processor, handler, accumulator); } else { // if the accumulator is not local, it should be a leftover // stayed after partition migrations and remove that accumulator removeAccumulator(context, accumulator); } processed++; } while (processed <= maxProcessableAccumulatorCount); }
private boolean isLocal() { NodeEngine nodeEngine = getNodeEngine(); IPartitionService partitionService = nodeEngine.getPartitionService(); IPartition partition = partitionService.getPartition(getPartitionId()); return partition.isLocal(); }
public IdentifiedDataSerializable createNew(Integer arg) { return new AccumulatorConsumerOperation(); } };
private Operation createConsumerOperation(int partitionId, Queue<Accumulator> accumulators) { PublisherContext publisherContext = context.getPublisherContext(); NodeEngineImpl nodeEngine = (NodeEngineImpl) publisherContext.getNodeEngine(); Operation operation = new AccumulatorConsumerOperation(accumulators, MAX_PROCESSABLE_ACCUMULATOR_COUNT); operation .setNodeEngine(nodeEngine) .setCallerUuid(nodeEngine.getLocalMember().getUuid()) .setPartitionId(partitionId) .setValidateTarget(false) .setService(nodeEngine.getService(MapService.SERVICE_NAME)); return operation; }
private Operation createConsumerOperation(int partitionId, Queue<Accumulator> accumulators) { PublisherContext publisherContext = context.getPublisherContext(); NodeEngineImpl nodeEngine = (NodeEngineImpl) publisherContext.getNodeEngine(); Operation operation = new AccumulatorConsumerOperation(accumulators, MAX_PROCESSABLE_ACCUMULATOR_COUNT); operation .setNodeEngine(nodeEngine) .setCallerUuid(nodeEngine.getLocalMember().getUuid()) .setPartitionId(partitionId) .setValidateTarget(false) .setService(nodeEngine.getService(MapService.SERVICE_NAME)); return operation; }