LMDBStore store = getStore(); LOGGER.info("{} receive iterate request. start: {}, end: {}, minChunkSize: {}", store, request.getStart().toStringUtf8(), request.getEnd().toStringUtf8(), request.getMinChunkSize()); byte[] fromBytes = request.getStart().toByteArray(); byte[] toBytes = request.getEnd().toByteArray(); Bytes fromBuffer = null; Bytes toBuffer = null; toBuffer = Bytes.wrap(toBytes); long threshold = request.getMinChunkSize() > 0 ? request.getMinChunkSize() : PAYLOAD_THRESHOLD; try (KeyValueIterator<Bytes, byte[]> keyValueIterator = store.range(fromBuffer, toBuffer)) { while (keyValueIterator.hasNext()) { responseObserver.onCompleted(); LOGGER.info("[STORAGE][ITERATE][RESULT]: {} store count: {}, onNext count: {}, start: '{}', end: '{}'", store, store.count(), count, request.getStart().toStringUtf8(), request.getEnd().toStringUtf8());
@Override protected KeyValue<Bytes, byte[]> makeNext() { if (iter == null || !iter.hasNext()) { Kv.Range.Builder rangeBuilder = Kv.Range.newBuilder(); if (next != null) { rangeBuilder.setStart(ByteString.copyFrom(next.key.get())); } else if (from != null) { rangeBuilder.setStart(ByteString.copyFrom(from.get())); } iter = blockingStub.iterate(rangeBuilder.buildPartial()); if (!iter.hasNext()) { return allDone(); } } next = POJOUtils.buildKeyValue(iter.next()); if (to == null || next.key.compareTo(to) < 0) { return next; } return allDone(); } }
eggRanges.set(curSortedIndex, lastRange.toBuilder().setStart(curSortedOperand.getKey()).build());
if (!parseUnknownFieldProto3( input, unknownFields, extensionRegistry, tag)) { done = true; } finally { this.unknownFields = unknownFields.build(); makeExtensionsImmutable();
if (!parseUnknownFieldProto3( input, unknownFields, extensionRegistry, tag)) { done = true; } finally { this.unknownFields = unknownFields.build(); makeExtensionsImmutable();
@io.grpc.stub.annotations.RpcMethod( fullMethodName = SERVICE_NAME + '/' + "iterate", requestType = com.webank.ai.fate.api.eggroll.storage.Kv.Range.class, responseType = com.webank.ai.fate.api.eggroll.storage.Kv.Operand.class, methodType = io.grpc.MethodDescriptor.MethodType.SERVER_STREAMING) public static io.grpc.MethodDescriptor<com.webank.ai.fate.api.eggroll.storage.Kv.Range, com.webank.ai.fate.api.eggroll.storage.Kv.Operand> getIterateMethod() { io.grpc.MethodDescriptor<com.webank.ai.fate.api.eggroll.storage.Kv.Range, com.webank.ai.fate.api.eggroll.storage.Kv.Operand> getIterateMethod; if ((getIterateMethod = KVServiceGrpc.getIterateMethod) == null) { synchronized (KVServiceGrpc.class) { if ((getIterateMethod = KVServiceGrpc.getIterateMethod) == null) { KVServiceGrpc.getIterateMethod = getIterateMethod = io.grpc.MethodDescriptor.<com.webank.ai.fate.api.eggroll.storage.Kv.Range, com.webank.ai.fate.api.eggroll.storage.Kv.Operand>newBuilder() .setType(io.grpc.MethodDescriptor.MethodType.SERVER_STREAMING) .setFullMethodName(generateFullMethodName( "com.webank.ai.fate.api.eggroll.storage.KVService", "iterate")) .setSampledToLocalTracing(true) .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller( com.webank.ai.fate.api.eggroll.storage.Kv.Range.getDefaultInstance())) .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller( com.webank.ai.fate.api.eggroll.storage.Kv.Operand.getDefaultInstance())) .setSchemaDescriptor(new KVServiceMethodDescriptorSupplier("iterate")) .build(); } } } return getIterateMethod; }
@io.grpc.stub.annotations.RpcMethod( fullMethodName = SERVICE_NAME + '/' + "iterate", requestType = com.webank.ai.fate.api.eggroll.storage.Kv.Range.class, responseType = com.webank.ai.fate.api.eggroll.storage.Kv.Operand.class, methodType = io.grpc.MethodDescriptor.MethodType.SERVER_STREAMING) public static io.grpc.MethodDescriptor<com.webank.ai.fate.api.eggroll.storage.Kv.Range, com.webank.ai.fate.api.eggroll.storage.Kv.Operand> getIterateMethod() { io.grpc.MethodDescriptor<com.webank.ai.fate.api.eggroll.storage.Kv.Range, com.webank.ai.fate.api.eggroll.storage.Kv.Operand> getIterateMethod; if ((getIterateMethod = KVServiceGrpc.getIterateMethod) == null) { synchronized (KVServiceGrpc.class) { if ((getIterateMethod = KVServiceGrpc.getIterateMethod) == null) { KVServiceGrpc.getIterateMethod = getIterateMethod = io.grpc.MethodDescriptor.<com.webank.ai.fate.api.eggroll.storage.Kv.Range, com.webank.ai.fate.api.eggroll.storage.Kv.Operand>newBuilder() .setType(io.grpc.MethodDescriptor.MethodType.SERVER_STREAMING) .setFullMethodName(generateFullMethodName( "com.webank.ai.fate.api.eggroll.storage.KVService", "iterate")) .setSampledToLocalTracing(true) .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller( com.webank.ai.fate.api.eggroll.storage.Kv.Range.getDefaultInstance())) .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller( com.webank.ai.fate.api.eggroll.storage.Kv.Operand.getDefaultInstance())) .setSchemaDescriptor(new KVServiceMethodDescriptorSupplier("iterate")) .build(); } } } return getIterateMethod; }
@Override public void iterate(Kv.Range request, StreamObserver<Kv.Operand> responseObserver) { int bytesCount = 0; int numEntries = 0; byte[] fromBytes = request.getStart().toByteArray(); byte[] toBytes = request.getEnd().toByteArray(); Bytes from = fromBytes.length > 0 ? Bytes.wrap(fromBytes) : null; Bytes to = toBytes.length > 0 ? Bytes.wrap(toBytes) : null; KeyValueStore<Bytes, byte[]> store = getStore(); KeyValueIterator<Bytes, byte[]> keyValueIterator = store.range(from, to); while (keyValueIterator.hasNext()) { KeyValue<Bytes, byte[]> keyValue = keyValueIterator.next(); responseObserver.onNext(POJOUtils.buildOperand(keyValue)); bytesCount += keyValue.key.get().length; bytesCount += keyValue.value.length; numEntries++; if (bytesCount >= PAYLOAD_THRESHOLD && numEntries >= NUM_THRESHOLD) { break; } } keyValueIterator.close(); responseObserver.onCompleted(); }
@java.lang.Override public boolean equals(final java.lang.Object obj) { if (obj == this) { return true; } if (!(obj instanceof com.webank.ai.fate.api.eggroll.storage.Kv.Range)) { return super.equals(obj); } com.webank.ai.fate.api.eggroll.storage.Kv.Range other = (com.webank.ai.fate.api.eggroll.storage.Kv.Range) obj; boolean result = true; result = result && getStart() .equals(other.getStart()); result = result && getEnd() .equals(other.getEnd()); result = result && (getMinChunkSize() == other.getMinChunkSize()); result = result && unknownFields.equals(other.unknownFields); return result; }
@java.lang.Override public boolean equals(final java.lang.Object obj) { if (obj == this) { return true; } if (!(obj instanceof com.webank.ai.fate.api.eggroll.storage.Kv.Range)) { return super.equals(obj); } com.webank.ai.fate.api.eggroll.storage.Kv.Range other = (com.webank.ai.fate.api.eggroll.storage.Kv.Range) obj; boolean result = true; result = result && getStart() .equals(other.getStart()); result = result && getEnd() .equals(other.getEnd()); result = result && (getMinChunkSize() == other.getMinChunkSize()); result = result && unknownFields.equals(other.unknownFields); return result; }
@java.lang.Override public int hashCode() { if (memoizedHashCode != 0) { return memoizedHashCode; } int hash = 41; hash = (19 * hash) + getDescriptor().hashCode(); hash = (37 * hash) + START_FIELD_NUMBER; hash = (53 * hash) + getStart().hashCode(); hash = (37 * hash) + END_FIELD_NUMBER; hash = (53 * hash) + getEnd().hashCode(); hash = (37 * hash) + MINCHUNKSIZE_FIELD_NUMBER; hash = (53 * hash) + com.google.protobuf.Internal.hashLong( getMinChunkSize()); hash = (29 * hash) + unknownFields.hashCode(); memoizedHashCode = hash; return hash; }
@java.lang.Override public int hashCode() { if (memoizedHashCode != 0) { return memoizedHashCode; } int hash = 41; hash = (19 * hash) + getDescriptor().hashCode(); hash = (37 * hash) + START_FIELD_NUMBER; hash = (53 * hash) + getStart().hashCode(); hash = (37 * hash) + END_FIELD_NUMBER; hash = (53 * hash) + getEnd().hashCode(); hash = (37 * hash) + MINCHUNKSIZE_FIELD_NUMBER; hash = (53 * hash) + com.google.protobuf.Internal.hashLong( getMinChunkSize()); hash = (29 * hash) + unknownFields.hashCode(); memoizedHashCode = hash; return hash; }
public Builder mergeFrom(com.webank.ai.fate.api.eggroll.storage.Kv.Range other) { if (other == com.webank.ai.fate.api.eggroll.storage.Kv.Range.getDefaultInstance()) return this; if (other.getStart() != com.google.protobuf.ByteString.EMPTY) { setStart(other.getStart()); } if (other.getEnd() != com.google.protobuf.ByteString.EMPTY) { setEnd(other.getEnd()); } if (other.getMinChunkSize() != 0L) { setMinChunkSize(other.getMinChunkSize()); } this.mergeUnknownFields(other.unknownFields); onChanged(); return this; }
@Override protected KeyValue<Bytes, byte[]> makeNext() { if (iter == null || !iter.hasNext()) { if (next == null) { iter = blockingStub.iterate(Kv.Range.newBuilder().buildPartial()); } else { iter = blockingStub.iterate(Kv.Range.newBuilder().setStart(ByteString.copyFrom(next.key.get())).buildPartial()); } if (!iter.hasNext()) { return allDone(); } } next = POJOUtils.buildKeyValue(iter.next()); return next; } }
@java.lang.Override public Builder newBuilderForType() { return newBuilder(); } public static Builder newBuilder() {
public static Builder newBuilder() { return DEFAULT_INSTANCE.toBuilder(); } public static Builder newBuilder(com.webank.ai.fate.api.eggroll.storage.Kv.Range prototype) {
public static Builder newBuilder(com.webank.ai.fate.api.eggroll.storage.Kv.Range prototype) { return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); } @java.lang.Override
@java.lang.Override public com.webank.ai.fate.api.eggroll.storage.Kv.Range getDefaultInstanceForType() { return com.webank.ai.fate.api.eggroll.storage.Kv.Range.getDefaultInstance(); }
@java.lang.Override public com.webank.ai.fate.api.eggroll.storage.Kv.Range getDefaultInstanceForType() { return com.webank.ai.fate.api.eggroll.storage.Kv.Range.getDefaultInstance(); }