Skip to content

Commit 0ae0142

Browse files
authored
Throw correct exception type while constructing session and transaction (#229)
## What is the goal of this PR? We have fixed a bug which caused incorrect exception type being thrown while constructing session and transaction. ## What are the changes implemented in this PR? - Catch `StatusRuntimeException` and convert it to `GraknClientException` in `Session` and `Transaction` constructor.
1 parent 21df262 commit 0ae0142

File tree

2 files changed

+51
-33
lines changed

2 files changed

+51
-33
lines changed

rpc/RPCSession.java

Lines changed: 23 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,11 @@
2424
import grakn.client.Grakn.Transaction;
2525
import grakn.client.GraknClient;
2626
import grakn.client.GraknOptions;
27+
import grakn.client.common.exception.GraknClientException;
2728
import grakn.protocol.GraknGrpc;
2829
import grakn.protocol.SessionProto;
2930
import io.grpc.Channel;
31+
import io.grpc.StatusRuntimeException;
3032

3133
import java.util.Timer;
3234
import java.util.TimerTask;
@@ -45,18 +47,22 @@ public class RPCSession implements Session {
4547
private final GraknGrpc.GraknBlockingStub blockingGrpcStub;
4648

4749
public RPCSession(GraknClient client, String database, Type type, GraknOptions options) {
48-
this.channel = client.channel();
49-
this.database = database;
50-
this.type = type;
51-
blockingGrpcStub = GraknGrpc.newBlockingStub(channel);
52-
53-
final SessionProto.Session.Open.Req openReq = SessionProto.Session.Open.Req.newBuilder()
54-
.setDatabase(database).setType(sessionType(type)).setOptions(options(options)).build();
55-
56-
sessionId = blockingGrpcStub.sessionOpen(openReq).getSessionId();
57-
pulse = new Timer();
58-
isOpen = new AtomicBoolean(true);
59-
pulse.scheduleAtFixedRate(this.new PulseTask(), 0, 5000);
50+
try {
51+
this.channel = client.channel();
52+
this.database = database;
53+
this.type = type;
54+
blockingGrpcStub = GraknGrpc.newBlockingStub(channel);
55+
56+
final SessionProto.Session.Open.Req openReq = SessionProto.Session.Open.Req.newBuilder()
57+
.setDatabase(database).setType(sessionType(type)).setOptions(options(options)).build();
58+
59+
sessionId = blockingGrpcStub.sessionOpen(openReq).getSessionId();
60+
pulse = new Timer();
61+
isOpen = new AtomicBoolean(true);
62+
pulse.scheduleAtFixedRate(this.new PulseTask(), 0, 5000);
63+
} catch (StatusRuntimeException e) {
64+
throw new GraknClientException(e);
65+
}
6066
}
6167

6268
@Override
@@ -83,7 +89,11 @@ public boolean isOpen() {
8389
public void close() {
8490
if (isOpen.compareAndSet(true, false)) {
8591
pulse.cancel();
86-
blockingGrpcStub.sessionClose(SessionProto.Session.Close.Req.newBuilder().setSessionId(sessionId).build());
92+
try {
93+
blockingGrpcStub.sessionClose(SessionProto.Session.Close.Req.newBuilder().setSessionId(sessionId).build());
94+
} catch (StatusRuntimeException e) {
95+
throw new GraknClientException(e);
96+
}
8797
}
8898
}
8999

rpc/RPCTransaction.java

Lines changed: 28 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -63,25 +63,29 @@ public class RPCTransaction implements Transaction {
6363
private final AtomicBoolean isOpen;
6464

6565
RPCTransaction(RPCSession session, ByteString sessionId, Type type, GraknOptions options) {
66-
this.type = type;
67-
conceptManager = new ConceptManager(this);
68-
logicManager = new LogicManager(this);
69-
queryManager = new QueryManager(this);
70-
collectors = new ResponseCollectors();
71-
72-
// Opening the StreamObserver exposes these atomics to another thread, so we must initialize them first.
73-
isOpen = new AtomicBoolean(true);
74-
requestObserver = GraknGrpc.newStub(session.channel()).transaction(responseObserver());
75-
final TransactionProto.Transaction.Req.Builder openRequest = TransactionProto.Transaction.Req.newBuilder()
76-
.putAllMetadata(tracingData())
77-
.setOpenReq(TransactionProto.Transaction.Open.Req.newBuilder()
78-
.setSessionId(sessionId)
79-
.setType(TransactionProto.Transaction.Type.forNumber(type.id()))
80-
.setOptions(options(options)));
81-
final Instant startTime = Instant.now();
82-
final TransactionProto.Transaction.Open.Res res = execute(openRequest).getOpenRes();
83-
final Instant endTime = Instant.now();
84-
networkLatencyMillis = (int) ChronoUnit.MILLIS.between(startTime, endTime) - res.getProcessingTimeMillis();
66+
try {
67+
this.type = type;
68+
conceptManager = new ConceptManager(this);
69+
logicManager = new LogicManager(this);
70+
queryManager = new QueryManager(this);
71+
collectors = new ResponseCollectors();
72+
73+
// Opening the StreamObserver exposes these atomics to another thread, so we must initialize them first.
74+
isOpen = new AtomicBoolean(true);
75+
requestObserver = GraknGrpc.newStub(session.channel()).transaction(responseObserver());
76+
final TransactionProto.Transaction.Req.Builder openRequest = TransactionProto.Transaction.Req.newBuilder()
77+
.putAllMetadata(tracingData())
78+
.setOpenReq(TransactionProto.Transaction.Open.Req.newBuilder()
79+
.setSessionId(sessionId)
80+
.setType(TransactionProto.Transaction.Type.forNumber(type.id()))
81+
.setOptions(options(options)));
82+
final Instant startTime = Instant.now();
83+
final TransactionProto.Transaction.Open.Res res = execute(openRequest).getOpenRes();
84+
final Instant endTime = Instant.now();
85+
networkLatencyMillis = (int) ChronoUnit.MILLIS.between(startTime, endTime) - res.getProcessingTimeMillis();
86+
} catch (StatusRuntimeException e) {
87+
throw new GraknClientException(e);
88+
}
8589
}
8690

8791
@Override
@@ -137,7 +141,11 @@ public void close() {
137141
private void close(Response.Done doneResponse) {
138142
if (isOpen.compareAndSet(true, false)) {
139143
collectors.clear(doneResponse);
140-
requestObserver.onCompleted();
144+
try {
145+
requestObserver.onCompleted();
146+
} catch (StatusRuntimeException e) {
147+
throw new GraknClientException(e);
148+
}
141149
}
142150
}
143151

0 commit comments

Comments
 (0)