@Override public Operation createPartitionOperation(int partition) { if (partitionIdToKeysMap == null) { // Index query failed to run because of ongoing migrations or we are // creating an operation on the caller node. return new PartitionWideEntryWithPredicateOperation(name, entryProcessor, predicate); } // index query succeeded List<Data> keyList = partitionIdToKeysMap.get(partition); assert keyList != null : "unexpected partition " + partition + ", expected partitions " + partitionIdToKeysMap.keySet(); Set<Data> keys = keyList.isEmpty() ? Collections.<Data>emptySet() : newBuilder(keyList).build(); return new MultipleEntryWithPredicateOperation(name, keys, entryProcessor, predicate); }
@Override public Operation createPartitionOperation(int partition) { if (partitionIdToKeysMap == null) { // Index query failed to run because of ongoing migrations or we are // creating an operation on the caller node. return new PartitionWideEntryWithPredicateOperation(name, entryProcessor, predicate); } // index query succeeded List<Data> keyList = partitionIdToKeysMap.get(partition); assert keyList != null : "unexpected partition " + partition + ", expected partitions " + partitionIdToKeysMap.keySet(); Set<Data> keys = keyList.isEmpty() ? Collections.<Data>emptySet() : newBuilder(keyList).build(); return new MultipleEntryWithPredicateOperation(name, keys, entryProcessor, predicate); }
private static Set<Data> unpackResults(List<Object> results, int numOfEntries) { InflatableSet.Builder<Data> builder = InflatableSet.newBuilder(numOfEntries); for (Object result : results) { for (QueryResultRow row : (QueryResult) result) { builder.add(row.getKey()); } } return builder.build(); }
private static Set<Map.Entry<Data, Data>> unpackResults(List<Object> results, int numOfEntries) { InflatableSet.Builder<Map.Entry<Data, Data>> builder = InflatableSet.newBuilder(numOfEntries); for (Object result : results) { for (QueryResultRow row : (QueryResult) result) { builder.add(new AbstractMap.SimpleEntry<Data, Data>(row.getKey(), row.getValue())); } } return builder.build(); }
private static Set<Data> unpackResults(List<Object> results, int numOfEntries) { InflatableSet.Builder<Data> builder = InflatableSet.newBuilder(numOfEntries); for (Object result : results) { for (QueryResultRow row : (QueryResult) result) { builder.add(row.getKey()); } } return builder.build(); }
private static Set<Map.Entry<Data, Data>> unpackResults(List<Object> results, int numOfEntries) { InflatableSet.Builder<Map.Entry<Data, Data>> builder = InflatableSet.newBuilder(numOfEntries); for (Object result : results) { for (QueryResultRow row : (QueryResult) result) { builder.add(new AbstractMap.SimpleEntry<Data, Data>(row.getKey(), row.getValue())); } } return builder.build(); }
@Override public Set<Entry<K, V>> entrySet() { ClientMessage request = MapEntrySetCodec.encodeRequest(name); ClientMessage response = invoke(request); MapEntrySetCodec.ResponseParameters resultParameters = MapEntrySetCodec.decodeResponse(response); InflatableSet.Builder<Entry<K, V>> setBuilder = InflatableSet.newBuilder(resultParameters.response.size()); InternalSerializationService serializationService = getContext().getSerializationService(); for (Entry<Data, Data> row : resultParameters.response) { LazyMapEntry<K, V> entry = new LazyMapEntry<K, V>(row.getKey(), row.getValue(), serializationService); setBuilder.add(entry); } return setBuilder.build(); }
@Override public Set<Entry<K, V>> entrySet() { ClientMessage request = MapEntrySetCodec.encodeRequest(name); ClientMessage response = invoke(request); MapEntrySetCodec.ResponseParameters resultParameters = MapEntrySetCodec.decodeResponse(response); InflatableSet.Builder<Entry<K, V>> setBuilder = InflatableSet.newBuilder(resultParameters.response.size()); InternalSerializationService serializationService = ((InternalSerializationService) getContext() .getSerializationService()); for (Entry<Data, Data> row : resultParameters.response) { LazyMapEntry<K, V> entry = new LazyMapEntry<K, V>(row.getKey(), row.getValue(), serializationService); setBuilder.add(entry); } return setBuilder.build(); }
@Override public Set<K> keySet() { ClientMessage request = MapKeySetCodec.encodeRequest(name); ClientMessage response = invoke(request); MapKeySetCodec.ResponseParameters resultParameters = MapKeySetCodec.decodeResponse(response); InflatableSet.Builder<K> setBuilder = InflatableSet.newBuilder(resultParameters.response.size()); for (Data data : resultParameters.response) { K key = toObject(data); setBuilder.add(key); } return setBuilder.build(); }
@Override public Set<K> keySet() { ClientMessage request = MapKeySetCodec.encodeRequest(name); ClientMessage response = invoke(request); MapKeySetCodec.ResponseParameters resultParameters = MapKeySetCodec.decodeResponse(response); InflatableSet.Builder<K> setBuilder = InflatableSet.newBuilder(resultParameters.response.size()); for (Data data : resultParameters.response) { K key = toObject(data); setBuilder.add(key); } return setBuilder.build(); }
@Override public void readData(ObjectDataInput in) throws IOException { nodeOrder = in.readInt(); int entryCount = in.readInt(); Builder<EntryView<Data, Data>> entries = InflatableSet.newBuilder(entryCount); for (int j = 0; j < entryCount; j++) { entries.add(in.<EntryView<Data, Data>>readObject()); } nodeEntries = entries.build(); } }
@Override public void readData(ObjectDataInput in) throws IOException { nodeOrder = in.readInt(); int entryCount = in.readInt(); Builder<EntryView<Data, Data>> entries = InflatableSet.newBuilder(entryCount); for (int j = 0; j < entryCount; j++) { entries.add(in.<EntryView<Data, Data>>readObject()); } nodeEntries = entries.build(); } }
@Override public Set<Entry<K, V>> entrySet(Predicate predicate) { if (containsPagingPredicate(predicate)) { return entrySetWithPagingPredicate(predicate); } ClientMessage request = MapEntriesWithPredicateCodec.encodeRequest(name, toData(predicate)); ClientMessage response = invokeWithPredicate(request, predicate); MapEntriesWithPredicateCodec.ResponseParameters resultParameters = MapEntriesWithPredicateCodec.decodeResponse(response); InflatableSet.Builder<Entry<K, V>> setBuilder = InflatableSet.newBuilder(resultParameters.response.size()); InternalSerializationService serializationService = getContext().getSerializationService(); for (Entry<Data, Data> row : resultParameters.response) { LazyMapEntry<K, V> entry = new LazyMapEntry<K, V>(row.getKey(), row.getValue(), serializationService); setBuilder.add(entry); } return setBuilder.build(); }
@Override public Set<Entry<K, V>> entrySet(Predicate predicate) { if (containsPagingPredicate(predicate)) { return entrySetWithPagingPredicate(predicate); } ClientMessage request = MapEntriesWithPredicateCodec.encodeRequest(name, toData(predicate)); ClientMessage response = invokeWithPredicate(request, predicate); MapEntriesWithPredicateCodec.ResponseParameters resultParameters = MapEntriesWithPredicateCodec.decodeResponse(response); InflatableSet.Builder<Entry<K, V>> setBuilder = InflatableSet.newBuilder(resultParameters.response.size()); InternalSerializationService serializationService = ((InternalSerializationService) getContext() .getSerializationService()); for (Entry<Data, Data> row : resultParameters.response) { LazyMapEntry<K, V> entry = new LazyMapEntry<K, V>(row.getKey(), row.getValue(), serializationService); setBuilder.add(entry); } return setBuilder.build(); }
@Override public Set<K> keySet(Predicate predicate) { checkNotNull(predicate, NULL_PREDICATE_IS_NOT_ALLOWED); if (containsPagingPredicate(predicate)) { return keySetWithPagingPredicate(predicate); } ClientMessage request = MapKeySetWithPredicateCodec.encodeRequest(name, toData(predicate)); ClientMessage response = invokeWithPredicate(request, predicate); MapKeySetWithPredicateCodec.ResponseParameters resultParameters = MapKeySetWithPredicateCodec.decodeResponse(response); InflatableSet.Builder<K> setBuilder = InflatableSet.newBuilder(resultParameters.response.size()); for (Data data : resultParameters.response) { K key = toObject(data); setBuilder.add(key); } return setBuilder.build(); }
private int loadKeySet(BufferingInputStream bis, DataStructureAdapter<Object, ?> adapter) throws IOException { int loadedKeys = 0; Builder<Object> builder = InflatableSet.newBuilder(LOAD_BATCH_SIZE); while (readFullyOrNothing(bis, tmpBytes)) { int dataSize = readIntB(tmpBytes, 0); byte[] payload = new byte[dataSize]; if (!readFullyOrNothing(bis, payload)) { break; } Data key = new HeapData(payload); builder.add(serializationService.toObject(key)); if (builder.size() == LOAD_BATCH_SIZE) { adapter.getAll(builder.build()); builder = InflatableSet.newBuilder(LOAD_BATCH_SIZE); } loadedKeys++; } if (builder.size() > 0) { adapter.getAll(builder.build()); } return loadedKeys; }
@Override public Set<K> keySet(Predicate predicate) { checkNotNull(predicate, NULL_PREDICATE_IS_NOT_ALLOWED); if (containsPagingPredicate(predicate)) { return keySetWithPagingPredicate(predicate); } ClientMessage request = MapKeySetWithPredicateCodec.encodeRequest(name, toData(predicate)); ClientMessage response = invokeWithPredicate(request, predicate); MapKeySetWithPredicateCodec.ResponseParameters resultParameters = MapKeySetWithPredicateCodec.decodeResponse(response); InflatableSet.Builder<K> setBuilder = InflatableSet.newBuilder(resultParameters.response.size()); for (Data data : resultParameters.response) { K key = toObject(data); setBuilder.add(key); } return setBuilder.build(); }
private int loadKeySet(BufferingInputStream bis, DataStructureAdapter<Object, ?> adapter) throws IOException { int loadedKeys = 0; Builder<Object> builder = InflatableSet.newBuilder(LOAD_BATCH_SIZE); while (readFullyOrNothing(bis, tmpBytes)) { int dataSize = readIntB(tmpBytes, 0); byte[] payload = new byte[dataSize]; if (!readFullyOrNothing(bis, payload)) { break; } Data key = new HeapData(payload); builder.add(serializationService.toObject(key)); if (builder.size() == LOAD_BATCH_SIZE) { adapter.getAll(builder.build()); builder = InflatableSet.newBuilder(LOAD_BATCH_SIZE); } loadedKeys++; } if (builder.size() > 0) { adapter.getAll(builder.build()); } return loadedKeys; }
/** * Attempts to get keys by running an index query. This method may return * {@code null} if there is an ongoing migration, which means that it is not * safe to return results from a non-partition thread. The caller must then * run a partition query to obtain the results. * * @param nodeEngine nodeEngine of this cluster node * @return the set of keys or {@code null} if we failed to fetch the keys * because of ongoing migrations */ private Set<Data> tryToObtainKeysFromIndexes(NodeEngine nodeEngine) { // Do not use index in this case, because it requires full-table-scan. if (predicate == TruePredicate.INSTANCE) { return null; } MapService mapService = nodeEngine.getService(SERVICE_NAME); MapServiceContext mapServiceContext = mapService.getMapServiceContext(); QueryRunner runner = mapServiceContext.getMapQueryRunner(name); Query query = Query.of().mapName(name).predicate(predicate).iterationType(IterationType.KEY).build(); final QueryResult result = (QueryResult) runner.runIndexQueryOnOwnedPartitions(query); if (result.getPartitionIds() == null) { // failed to run query because of ongoing migrations return null; } final Builder<Data> setBuilder = InflatableSet.newBuilder(result.size()); for (QueryResultRow row : result.getRows()) { setBuilder.add(row.getKey()); } return setBuilder.build(); }
/** * Attempts to get keys by running an index query. This method may return * {@code null} if there is an ongoing migration, which means that it is not * safe to return results from a non-partition thread. The caller must then * run a partition query to obtain the results. * * @param nodeEngine nodeEngine of this cluster node * @return the set of keys or {@code null} if we failed to fetch the keys * because of ongoing migrations */ private Set<Data> tryToObtainKeysFromIndexes(NodeEngine nodeEngine) { // Do not use index in this case, because it requires full-table-scan. if (predicate == TruePredicate.INSTANCE) { return null; } MapService mapService = nodeEngine.getService(SERVICE_NAME); MapServiceContext mapServiceContext = mapService.getMapServiceContext(); QueryRunner runner = mapServiceContext.getMapQueryRunner(name); Query query = Query.of().mapName(name).predicate(predicate).iterationType(IterationType.KEY).build(); final QueryResult result = (QueryResult) runner.runIndexQueryOnOwnedPartitions(query); if (result.getPartitionIds() == null) { // failed to run query because of ongoing migrations return null; } final Builder<Data> setBuilder = InflatableSet.newBuilder(result.size()); for (QueryResultRow row : result.getRows()) { setBuilder.add(row.getKey()); } return setBuilder.build(); }