public static void logPartitionStatistics(ILogger log, String name, IMap<Object, Integer> map, boolean printSizes) { MapProxyImpl mapProxy = (MapProxyImpl) map; MapService mapService = (MapService) mapProxy.getService(); MapServiceContext mapServiceContext = mapService.getMapServiceContext(); Collection<Integer> localPartitions = mapServiceContext.getOwnedPartitions(); int localSize = 0; StringBuilder partitionIDs = new StringBuilder(); StringBuilder partitionSizes = new StringBuilder(); String separator = ""; for (int partitionId : localPartitions) { int partitionSize = mapServiceContext.getRecordStore(partitionId, map.getName()).size(); localSize += partitionSize; partitionIDs.append(separator).append(partitionId); partitionSizes.append(separator).append(partitionSize); separator = ", "; } log.info(format("%s: Local partitions (count %d) (size %d) (avg %.2f) (IDs %s)%s", name, localPartitions.size(), localSize, localSize / (float) localPartitions.size(), partitionIDs.toString(), printSizes ? format(" (sizes %s)", partitionSizes.toString()) : "")); }
public static void logPartitionStatistics(ILogger log, String name, IMap<Object, Integer> map, boolean printSizes) { MapProxyImpl mapProxy = (MapProxyImpl) map; MapService mapService = (MapService) mapProxy.getService(); MapServiceContext mapServiceContext = mapService.getMapServiceContext(); Collection<Integer> localPartitions = mapServiceContext.getOwnedPartitions(); int localSize = 0; StringBuilder partitionIDs = new StringBuilder(); StringBuilder partitionSizes = new StringBuilder(); String separator = ""; for (int partitionId : localPartitions) { int partitionSize = mapServiceContext.getRecordStore(partitionId, map.getName()).size(); localSize += partitionSize; partitionIDs.append(separator).append(partitionId); partitionSizes.append(separator).append(partitionSize); separator = ", "; } log.info(format("%s: Local partitions (count %d) (size %d) (avg %.2f) (IDs %s)%s", name, localPartitions.size(), localSize, localSize / (float) localPartitions.size(), partitionIDs.toString(), printSizes ? format(" (sizes %s)", partitionSizes.toString()) : "")); }
public static void logPartitionStatistics(ILogger log, String name, IMap<Object, Integer> map, boolean printSizes) { MapProxyImpl mapProxy = (MapProxyImpl) map; MapService mapService = (MapService) mapProxy.getService(); MapServiceContext mapServiceContext = mapService.getMapServiceContext(); Collection<Integer> localPartitions = mapServiceContext.getOwnedPartitions(); int localSize = 0; StringBuilder partitionIDs = new StringBuilder(); StringBuilder partitionSizes = new StringBuilder(); String separator = ""; for (int partitionId : localPartitions) { int partitionSize = mapServiceContext.getRecordStore(partitionId, map.getName()).size(); localSize += partitionSize; partitionIDs.append(separator).append(partitionId); partitionSizes.append(separator).append(partitionSize); separator = ", "; } log.info(format("%s: Local partitions (count %d) (size %d) (avg %.2f) (IDs %s)%s", name, localPartitions.size(), localSize, localSize / (float) localPartitions.size(), partitionIDs.toString(), printSizes ? format(" (sizes %s)", partitionSizes.toString()) : "")); }
void precheckMaxResultLimitOnLocalPartitions(String mapName) { // check if feature is enabled if (!isPreCheckEnabled) { return; } // limit number of local partitions to check to keep runtime constant Collection<Integer> localPartitions = mapServiceContext.getOwnedPartitions(); int partitionsToCheck = min(localPartitions.size(), maxLocalPartitionsLimitForPreCheck); if (partitionsToCheck == 0) { return; } // calculate size of local partitions int localPartitionSize = getLocalPartitionSize(mapName, localPartitions, partitionsToCheck); if (localPartitionSize == 0) { return; } // check local result size long localResultLimit = getNodeResultLimit(partitionsToCheck); if (localPartitionSize > localResultLimit * MAX_RESULT_LIMIT_FACTOR_FOR_PRECHECK) { throw new QueryResultSizeExceededException(maxResultLimit, " Result size exceeded in local pre-check."); } }
void precheckMaxResultLimitOnLocalPartitions(String mapName) { // check if feature is enabled if (!isPreCheckEnabled) { return; } // limit number of local partitions to check to keep runtime constant Collection<Integer> localPartitions = mapServiceContext.getOwnedPartitions(); int partitionsToCheck = min(localPartitions.size(), maxLocalPartitionsLimitForPreCheck); if (partitionsToCheck == 0) { return; } // calculate size of local partitions int localPartitionSize = getLocalPartitionSize(mapName, localPartitions, partitionsToCheck); if (localPartitionSize == 0) { return; } // check local result size long localResultLimit = getNodeResultLimit(partitionsToCheck); if (localPartitionSize > localResultLimit * MAX_RESULT_LIMIT_FACTOR_FOR_PRECHECK) { throw new QueryResultSizeExceededException(maxResultLimit, " Result size exceeded in local pre-check."); } }
private void executeIndexSync(List<MapIndexInfo> mapIndexInfos) { OperationServiceImpl operationServiceImpl = (OperationServiceImpl) operationService; for (int partitionId : mapServiceContext.getOwnedPartitions()) { SynchronizeIndexesForPartitionTask task = new SynchronizeIndexesForPartitionTask(partitionId, mapIndexInfos, mapServiceContext.getService(), serializationService, (InternalPartitionService) nodeEngine.getPartitionService()); operationServiceImpl.execute(task); } }
public Result runIndexOrPartitionScanQueryOnOwnedPartitions(Query query) { int migrationStamp = getMigrationStamp(); Collection<Integer> initialPartitions = mapServiceContext.getOwnedPartitions(); MapContainer mapContainer = mapServiceContext.getMapContainer(query.getMapName()); // to optimize the query we need to get any index instance Indexes indexes = mapContainer.getIndexes(); if (indexes == null) { indexes = mapContainer.getIndexes(initialPartitions.iterator().next()); } // first we optimize the query Predicate predicate = queryOptimizer.optimize(query.getPredicate(), indexes); // then we try to run using an index, but if that doesn't work, we'll try a full table scan Collection<QueryableEntry> entries = runUsingGlobalIndexSafely(predicate, mapContainer, migrationStamp); Result result; if (entries == null) { result = runUsingPartitionScanSafely(query, predicate, initialPartitions, migrationStamp); } else { result = populateResult(query, initialPartitions, entries); } updateStatistics(mapContainer); return result; }
public Result runIndexOrPartitionScanQueryOnOwnedPartitions(Query query) { int migrationStamp = getMigrationStamp(); Collection<Integer> initialPartitions = mapServiceContext.getOwnedPartitions(); MapContainer mapContainer = mapServiceContext.getMapContainer(query.getMapName()); // to optimize the query we need to get any index instance Indexes indexes = mapContainer.getIndexes(); if (indexes == null) { indexes = mapContainer.getIndexes(initialPartitions.iterator().next()); } // first we optimize the query Predicate predicate = queryOptimizer.optimize(query.getPredicate(), indexes); // then we try to run using an index, but if that doesn't work, we'll try a full table scan Collection<QueryableEntry> entries = runUsingGlobalIndexSafely(predicate, mapContainer, migrationStamp); Result result; if (entries == null) { result = runUsingPartitionScanSafely(query, predicate, initialPartitions, migrationStamp); } else { result = populateResult(query, initialPartitions, entries); } updateStatistics(mapContainer); return result; }
Collection<Integer> initialPartitions = mapServiceContext.getOwnedPartitions(); MapContainer mapContainer = mapServiceContext.getMapContainer(query.getMapName());
Collection<Integer> initialPartitions = mapServiceContext.getOwnedPartitions(); MapContainer mapContainer = mapServiceContext.getMapContainer(query.getMapName());