Skip to content

Commit

Permalink
[FAB-5233] Return TransactionID from InvokeChaincode
Browse files Browse the repository at this point in the history
Change-Id: I658a0d09ca4b784573c3ca472a40dc6c8e762bb9
Signed-off-by: Troy Ronda <troy@troyronda.com>
  • Loading branch information
troyronda committed Jul 10, 2017
1 parent fe06786 commit 8c34459
Show file tree
Hide file tree
Showing 4 changed files with 16 additions and 15 deletions.
6 changes: 3 additions & 3 deletions pkg/fabric-client/channel/txnsender.go
Expand Up @@ -275,10 +275,10 @@ func (c *Channel) sendBroadcast(envelope *fab.SignedEnvelope, orderer fab.Ordere
logger.Debugf("Receive Error Response from orderer :%v\n", err)
return &apitxn.TransactionResponse{Orderer: orderer.URL(),
Err: fmt.Errorf("Error calling orderer '%s': %s", orderer.URL(), err)}
} else {
logger.Debugf("Receive Success Response from orderer\n")
return &apitxn.TransactionResponse{Orderer: orderer.URL(), Err: nil}
}

logger.Debugf("Receive Success Response from orderer\n")
return &apitxn.TransactionResponse{Orderer: orderer.URL(), Err: nil}
}

// SendEnvelope sends the given envelope to each orderer and returns a block response
Expand Down
20 changes: 10 additions & 10 deletions pkg/fabric-txn/transaction.go
Expand Up @@ -38,25 +38,25 @@ func QueryChaincode(client fab.FabricClient, channel fab.Channel, chaincodeID st

// InvokeChaincode ...
func InvokeChaincode(client fab.FabricClient, channel fab.Channel, targets []apitxn.ProposalProcessor,
eventHub fab.EventHub, chaincodeID string, fcn string, args []string, transientData map[string][]byte) error {
eventHub fab.EventHub, chaincodeID string, fcn string, args []string, transientData map[string][]byte) (apitxn.TransactionID, error) {

err := checkCommonArgs(client, channel, chaincodeID)
if err != nil {
return err
return apitxn.TransactionID{}, err
}

if eventHub == nil {
return fmt.Errorf("Eventhub is nil")
return apitxn.TransactionID{}, fmt.Errorf("Eventhub is nil")
}

if targets == nil || len(targets) == 0 {
return fmt.Errorf("No target peers")
return apitxn.TransactionID{}, fmt.Errorf("No target peers")
}

if eventHub.IsConnected() == false {
err = eventHub.Connect()
if err != nil {
return fmt.Errorf("Error connecting to eventhub: %v", err)
return apitxn.TransactionID{}, fmt.Errorf("Error connecting to eventhub: %v", err)
}
defer eventHub.Disconnect()
}
Expand All @@ -65,25 +65,25 @@ func InvokeChaincode(client fab.FabricClient, channel fab.Channel, targets []api
chaincodeID, fcn, args, targets, transientData)

if err != nil {
return fmt.Errorf("CreateAndSendTransactionProposal returned error: %v", err)
return apitxn.TransactionID{}, fmt.Errorf("CreateAndSendTransactionProposal returned error: %v", err)
}

done, fail := internal.RegisterTxEvent(txID, eventHub)

_, err = internal.CreateAndSendTransaction(channel, transactionProposalResponses)
if err != nil {
return fmt.Errorf("CreateAndSendTransaction returned error: %v", err)
return txID, fmt.Errorf("CreateAndSendTransaction returned error: %v", err)
}

select {
case <-done:
case err := <-fail:
return fmt.Errorf("invoke Error received from eventhub for txid(%s), error(%v)", txID, err)
return txID, fmt.Errorf("invoke Error received from eventhub for txid(%s), error(%v)", txID, err)
case <-time.After(time.Second * 30):
return fmt.Errorf("invoke Didn't receive block event for txid(%s)", txID)
return txID, fmt.Errorf("invoke Didn't receive block event for txid(%s)", txID)
}

return nil
return txID, nil
}

// checkCommonArgs ...
Expand Down
3 changes: 2 additions & 1 deletion test/integration/end_to_end_test.go
Expand Up @@ -88,5 +88,6 @@ func moveFunds(setup *BaseSetupImpl) error {
transientDataMap := make(map[string][]byte)
transientDataMap["result"] = []byte("Transient data in move funds...")

return fabricTxn.InvokeChaincode(setup.Client, setup.Channel, []apitxn.ProposalProcessor{setup.Channel.PrimaryPeer()}, setup.EventHub, setup.ChainCodeID, fcn, args, transientDataMap)
_, err := fabricTxn.InvokeChaincode(setup.Client, setup.Channel, []apitxn.ProposalProcessor{setup.Channel.PrimaryPeer()}, setup.EventHub, setup.ChainCodeID, fcn, args, transientDataMap)
return err
}
2 changes: 1 addition & 1 deletion test/integration/orgs/multiple_orgs_test.go
Expand Up @@ -43,7 +43,7 @@ func TestOrgsEndToEnd(t *testing.T) {
// Change value on org2 peer
orgTestClient.SetUserContext(org2User)
orgTestChannel.SetPrimaryPeer(orgTestPeer1)
err = fabrictxn.InvokeChaincode(orgTestClient, orgTestChannel, []apitxn.ProposalProcessor{orgTestPeer1},
_, err = fabrictxn.InvokeChaincode(orgTestClient, orgTestChannel, []apitxn.ProposalProcessor{orgTestPeer1},
peer0EventHub, "exampleCC", fcn, generateInvokeArgs(), nil)
failTestIfError(err, t)

Expand Down

0 comments on commit 8c34459

Please sign in to comment.