use of ai.grakn.rpc.generated.GrpcIterator.IteratorId in project grakn by graknlabs.
the class GrpcServerTest method whenSendingNextAfterStop_Throw.
@Test
public void whenSendingNextAfterStop_Throw() throws Throwable {
try (TxGrpcCommunicator tx = TxGrpcCommunicator.create(stub)) {
tx.send(openRequest(MYKS, GraknTxType.WRITE));
tx.receive();
tx.send(execQueryRequest(QUERY, null));
IteratorId iterator = tx.receive().ok().getIteratorId();
tx.send(stopRequest(iterator));
tx.receive();
tx.send(nextRequest(iterator));
exception.expect(hasStatus(Status.FAILED_PRECONDITION));
throw tx.receive().error();
}
}
use of ai.grakn.rpc.generated.GrpcIterator.IteratorId in project grakn by graknlabs.
the class ConceptResponseType method createStreamable.
public static <T> ConceptResponseType<Stream<? extends T>> createStreamable(BiFunction<GrpcConceptConverter, TxResponse, T> getter, Function<T, TxResponse> setter) {
return create((converter, client, response) -> {
IteratorId iteratorId = response.getIteratorId();
Iterable<T> iterable = () -> new GraknGrpcIterator<T>(client, iteratorId) {
@Override
protected T getNextFromResponse(TxResponse response) {
return getter.apply(converter, response);
}
};
return StreamSupport.stream(iterable.spliterator(), false);
}, (builder, iterators, val) -> {
Stream<TxResponse> responses = val.map(setter);
IteratorId iteratorId = iterators.add(responses.iterator());
builder.setIteratorId(iteratorId);
});
}
use of ai.grakn.rpc.generated.GrpcIterator.IteratorId in project grakn by graknlabs.
the class GrpcClient method getAttributesByValue.
public Stream<? extends Concept> getAttributesByValue(Object value) {
communicator.send(GrpcUtil.getAttributesByValueRequest(value));
IteratorId iteratorId = responseOrThrow().getIteratorId();
Iterable<Concept> iterable = () -> new GraknGrpcIterator<Concept>(this, iteratorId) {
@Override
protected Concept getNextFromResponse(TxResponse response) {
return conceptConverter.convert(response.getConcept());
}
};
return StreamSupport.stream(iterable.spliterator(), false);
}
use of ai.grakn.rpc.generated.GrpcIterator.IteratorId in project grakn by graknlabs.
the class GrpcClient method execQuery.
public Iterator<Object> execQuery(Query<?> query) {
communicator.send(GrpcUtil.execQueryRequest(query.toString(), query.inferring()));
IteratorId iteratorId = responseOrThrow().getIteratorId();
return new GraknGrpcIterator<Object>(this, iteratorId) {
@Override
protected Object getNextFromResponse(TxResponse response) {
return convert(response.getQueryResult());
}
};
}
use of ai.grakn.rpc.generated.GrpcIterator.IteratorId in project grakn by graknlabs.
the class GrpcServerTest method whenExecutingAQueryRemotelyAndAskingForOneResult_OnlyOneResultIsReturned.
// This tests uses an endless stream, so a failure may cause it to never terminate
@Test(timeout = 1000)
public void whenExecutingAQueryRemotelyAndAskingForOneResult_OnlyOneResultIsReturned() throws InterruptedException {
Concept conceptX = mock(Concept.class, RETURNS_DEEP_STUBS);
when(conceptX.getId()).thenReturn(ConceptId.of("V123"));
when(conceptX.isEntity()).thenReturn(true);
when(conceptX.asEntity().type().getLabel()).thenReturn(Label.of("L123"));
Concept conceptY = mock(Concept.class, RETURNS_DEEP_STUBS);
when(conceptY.getId()).thenReturn(ConceptId.of("V456"));
when(conceptY.isEntity()).thenReturn(true);
when(conceptY.asEntity().type().getLabel()).thenReturn(Label.of("L456"));
ImmutableList<Answer> answers = ImmutableList.of(new QueryAnswer(ImmutableMap.of(Graql.var("x"), conceptX)), new QueryAnswer(ImmutableMap.of(Graql.var("y"), conceptY)));
// TODO: reduce wtf
when(query.results(any())).thenAnswer(params -> query.stream().map(params.<GrpcConverter>getArgument(0)::convert));
// Produce an endless stream of results - this means if the behaviour is not lazy this will never terminate
when(query.stream()).thenAnswer(params -> Stream.generate(answers::stream).flatMap(Function.identity()));
try (TxGrpcCommunicator tx = TxGrpcCommunicator.create(stub)) {
tx.send(openRequest(MYKS, GraknTxType.WRITE));
tx.receive();
tx.send(execQueryRequest(QUERY, null));
IteratorId iterator = tx.receive().ok().getIteratorId();
tx.send(nextRequest(iterator));
tx.receive().ok();
tx.send(nextRequest(iterator));
tx.receive().ok();
tx.send(stopRequest(iterator));
TxResponse response = tx.receive().ok();
assertEquals(doneResponse(), response);
}
}
Aggregations