Skip to content

Commit bb959d8

Browse files
authored
Merge pull request #209 from mbwhite/chaincode-error-completed
For 'application errors' set response to the COMPLETED
2 parents 32321f4 + b457a96 commit bb959d8

File tree

4 files changed

+13
-10
lines changed

4 files changed

+13
-10
lines changed

fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/execution/impl/ContractExecutionService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ public Chaincode.Response executeRequest(final TxFunction txFn, final Invocation
7474
final Throwable cause = e.getCause();
7575

7676
if (cause instanceof ChaincodeException) {
77-
throw (ChaincodeException) cause;
77+
response = ResponseUtils.newErrorResponse(cause);
7878
} else {
7979
throw new ContractRuntimeException("Error during contract method execution", cause);
8080
}

fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/ResponseUtils.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,10 +95,12 @@ public static Chaincode.Response newErrorResponse(final Throwable throwable) {
9595
if (throwable instanceof ChaincodeException) {
9696
message = throwable.getMessage();
9797
payload = ((ChaincodeException) throwable).getPayload();
98+
return new Chaincode.Response(INTERNAL_SERVER_ERROR, message, payload);
9899
} else {
99100
message = "Unexpected error";
101+
return ResponseUtils.newErrorResponse(message, payload);
100102
}
101103

102-
return ResponseUtils.newErrorResponse(message, payload);
104+
103105
}
104106
}

fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/impl/ChaincodeInvocationTask.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -112,8 +112,8 @@ public ChaincodeMessage call() {
112112
// Send ERROR with entire result.Message as payload
113113
logger.severe(() -> String.format("[%-8.8s] Invoke failed with error code %d. Sending %s",
114114
message.getTxid(), result.getStatus().getCode(), ERROR));
115-
finalResponseMessage = ChaincodeMessageFactory.newErrorEventMessage(message.getChannelId(),
116-
message.getTxid(), result.getMessage(), stub.getEvent());
115+
finalResponseMessage = ChaincodeMessageFactory.newCompletedEventMessage(message.getChannelId(),
116+
message.getTxid(), result, stub.getEvent());
117117
if (span != null) {
118118
span.setStatus(StatusCode.ERROR, result.getMessage());
119119
}

fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/shim/fvt/ChaincodeFVTest.java

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77

88
import static org.hamcrest.Matchers.is;
99
import static org.hyperledger.fabric.protos.peer.ChaincodeShim.ChaincodeMessage.Type.COMPLETED;
10-
import static org.hyperledger.fabric.protos.peer.ChaincodeShim.ChaincodeMessage.Type.ERROR;
1110
import static org.hyperledger.fabric.protos.peer.ChaincodeShim.ChaincodeMessage.Type.INIT;
1211
import static org.hyperledger.fabric.protos.peer.ChaincodeShim.ChaincodeMessage.Type.READY;
1312
import static org.hyperledger.fabric.protos.peer.ChaincodeShim.ChaincodeMessage.Type.REGISTER;
@@ -529,7 +528,7 @@ public void testErrorInitInvoke() throws Exception {
529528
final ChaincodeBase cb = new ChaincodeBase() {
530529
@Override
531530
public Response init(final ChaincodeStub stub) {
532-
return ResponseUtils.newErrorResponse("Wrong response1");
531+
return ResponseUtils.newErrorResponse("Wrong response1".getBytes());
533532
}
534533

535534
@Override
@@ -558,8 +557,9 @@ public Response invoke(final ChaincodeStub stub) {
558557
ChaincodeMockPeer.checkScenarioStepEnded(server, 2, 5000, TimeUnit.MILLISECONDS);
559558

560559
assertThat(server.getLastMessageSend().getType(), is(INIT));
561-
assertThat(server.getLastMessageRcvd().getType(), is(ERROR));
562-
assertThat(server.getLastMessageRcvd().getPayload().toStringUtf8(), is("Wrong response1"));
560+
assertThat(server.getLastMessageRcvd().getType(), is(COMPLETED));
561+
String resp1 = (ProposalResponsePackage.Response.parseFrom(server.getLastMessageRcvd().getPayload()).getPayload().toStringUtf8());
562+
assertThat(resp1, is("Wrong response1"));
563563

564564
final ByteString invokePayload = Chaincode.ChaincodeInput.newBuilder().build().toByteString();
565565
final ChaincodeShim.ChaincodeMessage invokeMsg = MessageUtil.newEventMessage(TRANSACTION, "testChannel", "0",
@@ -569,8 +569,9 @@ public Response invoke(final ChaincodeStub stub) {
569569

570570
ChaincodeMockPeer.checkScenarioStepEnded(server, 3, 5000, TimeUnit.MILLISECONDS);
571571
assertThat(server.getLastMessageSend().getType(), is(TRANSACTION));
572-
assertThat(server.getLastMessageRcvd().getType(), is(ERROR));
573-
assertThat(server.getLastMessageRcvd().getPayload().toStringUtf8(), is("Wrong response2"));
572+
assertThat(server.getLastMessageRcvd().getType(), is(COMPLETED));
573+
String resp2 = ProposalResponsePackage.Response.parseFrom(server.getLastMessageRcvd().getPayload()).getMessage().toString();
574+
assertThat(resp2, is("Wrong response2"));
574575
}
575576

576577
@Test

0 commit comments

Comments
 (0)