private void collectResultsFromMissingPartitions(BitSet finishedPartitions, Collection<AccumulatedResults> result, List<Future> futures) throws InterruptedException, ExecutionException { for (Future future : futures) { QueryResult queryResult = (QueryResult) future.get(); if (queryResult.getPartitionIds() != null && queryResult.getPartitionIds().size() > 0 && !hasAtLeastOneBitSet(finishedPartitions, queryResult.getPartitionIds())) { extractAndAppendResult(result, queryResult); BitSetUtils.setBits(finishedPartitions, queryResult.getPartitionIds()); } } }
@SuppressWarnings("unchecked") // modifies partitionIds list! Optimization not to allocate an extra collection with collected partitionIds private void addResultsOfPredicate(List<Future<Result>> futures, Result result, BitSet finishedPartitionIds, boolean rethrowAll) { for (Future<Result> future : futures) { Result queryResult = null; try { queryResult = future.get(); } catch (Throwable t) { if (t.getCause() instanceof QueryResultSizeExceededException || rethrowAll) { throw rethrow(t); } logger.fine("Could not get query results", t); } if (queryResult == null) { continue; } Collection<Integer> queriedPartitionIds = queryResult.getPartitionIds(); if (queriedPartitionIds != null) { if (!hasAllBitsSet(finishedPartitionIds, queriedPartitionIds)) { // do not take into account results that contain partition IDs already removed from partitionIds // collection as this means that we will count results from a single partition twice // see also https://github.com/hazelcast/hazelcast/issues/6471 continue; } BitSetUtils.unsetBits(finishedPartitionIds, queriedPartitionIds); result.combine(queryResult); } } }
private BitSet getLocalPartitionIds() { int partitionCount = partitionService.getPartitionCount(); BitSet partitionIds = new BitSet(partitionCount); BitSetUtils.setBits(partitionIds, partitionService.getMemberPartitions(nodeEngine.getThisAddress())); return partitionIds; }
@SuppressWarnings("unchecked") // modifies partitionIds list! Optimization not to allocate an extra collection with collected partitionIds private void addResultsOfPredicate(List<Future<Result>> futures, Result result, BitSet finishedPartitionIds, boolean rethrowAll) { for (Future<Result> future : futures) { Result queryResult = null; try { queryResult = future.get(); } catch (Throwable t) { if (t.getCause() instanceof QueryResultSizeExceededException || rethrowAll) { throw rethrow(t); } logger.fine("Could not get query results", t); } if (queryResult == null) { continue; } Collection<Integer> queriedPartitionIds = queryResult.getPartitionIds(); if (queriedPartitionIds != null) { if (!hasAllBitsSet(finishedPartitionIds, queriedPartitionIds)) { // do not take into account results that contain partition IDs already removed from partitionIds // collection as this means that we will count results from a single partition twice // see also https://github.com/hazelcast/hazelcast/issues/6471 continue; } BitSetUtils.unsetBits(finishedPartitionIds, queriedPartitionIds); result.combine(queryResult); } } }
private BitSet getLocalPartitionIds() { int partitionCount = partitionService.getPartitionCount(); BitSet partitionIds = new BitSet(partitionCount); BitSetUtils.setBits(partitionIds, partitionService.getMemberPartitions(nodeEngine.getThisAddress())); return partitionIds; }
private void collectResultsFromMissingPartitions(BitSet finishedPartitions, Collection<AccumulatedResults> result, List<Future> futures) throws InterruptedException, ExecutionException { for (Future future : futures) { QueryResult queryResult = (QueryResult) future.get(); if (queryResult.getPartitionIds() != null && queryResult.getPartitionIds().size() > 0 && !hasAtLeastOneBitSet(finishedPartitions, queryResult.getPartitionIds())) { extractAndAppendResult(result, queryResult); BitSetUtils.setBits(finishedPartitions, queryResult.getPartitionIds()); } } }
if (queryResult != null) { Collection<Integer> partitionIds = queryResult.getPartitionIds(); if (partitionIds != null && !hasAtLeastOneBitSet(finishedPartitions, partitionIds)) { BitSetUtils.setBits(finishedPartitions, partitionIds); extractAndAppendResult(result, queryResult);
if (queryResult != null) { Collection<Integer> partitionIds = queryResult.getPartitionIds(); if (partitionIds != null && !hasAtLeastOneBitSet(finishedPartitions, partitionIds)) { BitSetUtils.setBits(finishedPartitions, partitionIds); extractAndAppendResult(result, queryResult);