Skip to content

ttx service: timeout via context - part 2 #1040

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 7 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ require (
github.com/gin-gonic/gin v1.10.0
github.com/gobuffalo/packr/v2 v2.7.1
github.com/hashicorp/go-uuid v1.0.3
github.com/hyperledger-labs/fabric-smart-client v0.4.1-0.20250630145834-3a590b4c8094
github.com/hyperledger-labs/fabric-smart-client v0.4.1-0.20250707072915-a126d13f7572
github.com/hyperledger/fabric v1.4.0-rc1.0.20230405174026-695dd57e01c2
github.com/hyperledger/fabric-chaincode-go v0.0.0-20240704073638-9fb89180dc17
github.com/hyperledger/fabric-lib-go v1.1.2
Expand Down
4 changes: 2 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -1052,8 +1052,8 @@ github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
github.com/huin/goupnp v1.3.0 h1:UvLUlWDNpoUdYzb2TCn+MuTWtcjXKSza2n6CBdQ0xXc=
github.com/huin/goupnp v1.3.0/go.mod h1:gnGPsThkYa7bFi/KWmEysQRf48l2dvR5bxr2OFckNX8=
github.com/hyperledger-labs/fabric-smart-client v0.4.1-0.20250630145834-3a590b4c8094 h1:2BMBoAhilRK6bpSj2ZjqZUH6GXdujpJ9gumUNAdlq5s=
github.com/hyperledger-labs/fabric-smart-client v0.4.1-0.20250630145834-3a590b4c8094/go.mod h1:u703f61yydW8FCu/O4TzYUprO3oeEoS5jAxWZ4/RrGU=
github.com/hyperledger-labs/fabric-smart-client v0.4.1-0.20250707072915-a126d13f7572 h1:GvNkFCSPjRmH+6sDHWqHHsNlMxCd14G/mpdF4HIh9Ls=
github.com/hyperledger-labs/fabric-smart-client v0.4.1-0.20250707072915-a126d13f7572/go.mod h1:u703f61yydW8FCu/O4TzYUprO3oeEoS5jAxWZ4/RrGU=
github.com/hyperledger/fabric v1.4.0-rc1.0.20230405174026-695dd57e01c2 h1:w5BGxCYEsc9vjdDEdZGrZ5redvs263RYsdT2tqF7cNk=
github.com/hyperledger/fabric v1.4.0-rc1.0.20230405174026-695dd57e01c2/go.mod h1:LSwfuRgX/5C2uHkdT3hJtBFu/ALxuL7dFj1pmBby2R4=
github.com/hyperledger/fabric-amcl v0.0.0-20230602173724-9e02669dceb2 h1:B1Nt8hKb//KvgGRprk0h1t4lCnwhE9/ryb1WqfZbV+M=
Expand Down
2 changes: 1 addition & 1 deletion integration/token/fungible/views/upgrade.go
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,7 @@ func (i *TokensUpgradeInitiatorView) Call(context view.Context) (interface{}, er
assert.NoError(err, "failed to accept new tokens")

// Before completing, the recipient waits for finality of the transaction
_, err = context.RunView(ttx.NewFinalityView(tx, ttx.WithTimeout(1*time.Minute)))
_, err = context.RunView(ttx.NewFinalityView(tx), view.WithTimeout(1*time.Minute))
assert.NoError(err, "new tokens were not committed")

return tx.ID(), nil
Expand Down
9 changes: 4 additions & 5 deletions token/services/certifier/interactive/service.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,11 @@ package interactive
import (
"fmt"
"sync"
"time"

"github.com/hyperledger-labs/fabric-smart-client/platform/view/services/metrics"
"github.com/hyperledger-labs/fabric-smart-client/platform/view/view"
token2 "github.com/hyperledger-labs/fabric-token-sdk/token"
"github.com/hyperledger-labs/fabric-token-sdk/token/services/utils/json/session"
"github.com/hyperledger-labs/fabric-token-sdk/token/services/utils/json/jsession"
"github.com/hyperledger-labs/fabric-token-sdk/token/token"
"github.com/pkg/errors"
)
Expand Down Expand Up @@ -60,7 +59,7 @@ func (c *CertificationService) SetWallet(tms *token2.ManagementService, wallet s
func (c *CertificationService) Call(context view.Context) (interface{}, error) {
// 1. receive request
logger.Debugf("receive certification request [%s]", context.ID())
s := session.JSON(context)
s := jsession.FromContext(context)
var cr *CertificationRequest
if err := s.Receive(&cr); err != nil {
return nil, errors.WithMessage(err, "failed receiving certification request")
Expand Down Expand Up @@ -162,7 +161,7 @@ func (i *CertificationRequestView) Call(context view.Context) (interface{}, erro
return nil, errors.Errorf("no certifiers defined")
}

s, err := session.NewJSON(context, i, i.certifier)
s, err := jsession.NewJSON(context, i, i.certifier)
if err != nil {
return nil, errors.WithMessagef(err, "failed opening session to [%s]", i.certifier)
}
Expand All @@ -178,7 +177,7 @@ func (i *CertificationRequestView) Call(context view.Context) (interface{}, erro
// 3. wait response
logger.Debugf("wait certification request response for [%v]", i.ids)
var certifications [][]byte
if err := s.ReceiveWithTimeout(&certifications, 60*time.Second); err != nil {
if err := s.Receive(&certifications); err != nil {
return nil, errors.WithMessagef(err, "failed receiving certifications [%v] from [%s]", i.ids, i.certifier)
}

Expand Down
4 changes: 2 additions & 2 deletions token/services/interop/htlc/distribute.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import (

"github.com/hyperledger-labs/fabric-smart-client/platform/view/view"
"github.com/hyperledger-labs/fabric-token-sdk/token"
"github.com/hyperledger-labs/fabric-token-sdk/token/services/utils/json/session"
"github.com/hyperledger-labs/fabric-token-sdk/token/services/utils/json/jsession"
token2 "github.com/hyperledger-labs/fabric-token-sdk/token/token"
"github.com/pkg/errors"
)
Expand Down Expand Up @@ -95,7 +95,7 @@ func ReceiveTerms(context view.Context) (*Terms, error) {

func (v *termsReceiverView) Call(context view.Context) (interface{}, error) {
terms := &Terms{}
if err := session.JSON(context).Receive(terms); err != nil {
if err := jsession.FromContext(context).Receive(terms); err != nil {
return nil, errors.Wrapf(err, "failed unmarshalling terms")
}
return terms, nil
Expand Down
14 changes: 8 additions & 6 deletions token/services/network/fabric/endorsement/fsc.go
Original file line number Diff line number Diff line change
Expand Up @@ -111,12 +111,14 @@ func (e *FSCService) Endorse(context view.Context, requestRaw []byte, signer vie
}
logger.Debugf("request approval via fts endrosers with policy [%s]: [%d]...", e.PolicyType, len(endorsers))

envBoxed, err := e.ViewManager.InitiateView(&RequestApprovalView{
TMSID: e.TmsID,
RequestRaw: requestRaw,
TxID: txID,
Endorsers: endorsers,
}, context.Context())
envBoxed, err := e.ViewManager.InitiateView(
context.Context(),
&RequestApprovalView{
TMSID: e.TmsID,
RequestRaw: requestRaw,
TxID: txID,
Endorsers: endorsers,
})
if err != nil {
return nil, errors.WithMessagef(err, "failed to request approval")
}
Expand Down
2 changes: 1 addition & 1 deletion token/services/network/fabric/endorsement/provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ type IdentityProvider interface {
}

type ViewManager interface {
InitiateView(view view.View, ctx context.Context) (interface{}, error)
InitiateView(ctx context.Context, view view.View) (interface{}, error)
}

type ViewRegistry interface {
Expand Down
3 changes: 2 additions & 1 deletion token/services/network/fabric/network.go
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,8 @@ func (l *ledger) Status(id string) (driver.ValidationCode, error) {
}

type ViewManager interface {
InitiateView(view view.View, ctx context.Context) (interface{}, error)
Context() context.Context
InitiateView(ctx context.Context, view view.View) (interface{}, error)
}

type ViewRegistry interface {
Expand Down
4 changes: 1 addition & 3 deletions token/services/network/fabric/ppfetcher.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,6 @@ SPDX-License-Identifier: Apache-2.0
package fabric

import (
"context"

driver2 "github.com/hyperledger-labs/fabric-smart-client/platform/common/driver"
"github.com/hyperledger-labs/fabric-smart-client/platform/fabric/services/chaincode"
"github.com/hyperledger-labs/fabric-smart-client/platform/view/services/view"
Expand All @@ -24,11 +22,11 @@ func NewChaincodePublicParamsFetcher(viewManager *view.Manager) *chaincodePublic

func (f *chaincodePublicParamsFetcher) Fetch(network driver2.Network, channel driver2.Channel, namespace driver2.Namespace) ([]byte, error) {
ppBoxed, err := f.viewManager.InitiateView(
f.viewManager.Context(),
chaincode.NewQueryView(
namespace,
QueryPublicParamsFunction,
).WithNetwork(network).WithChannel(channel),
context.TODO(),
)
if err != nil {
return nil, err
Expand Down
6 changes: 2 additions & 4 deletions token/services/ttx/accept.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ package ttx

import (
"encoding/base64"
"time"

"github.com/hyperledger-labs/fabric-smart-client/platform/view/services/hash"
"github.com/hyperledger-labs/fabric-smart-client/platform/view/services/id"
Expand All @@ -17,7 +16,7 @@ import (
"github.com/hyperledger-labs/fabric-smart-client/platform/view/view"
"github.com/hyperledger-labs/fabric-token-sdk/token"
"github.com/hyperledger-labs/fabric-token-sdk/token/services/tokens"
session2 "github.com/hyperledger-labs/fabric-token-sdk/token/services/utils/json/session"
"github.com/hyperledger-labs/fabric-token-sdk/token/services/utils/json/jsession"
"github.com/pkg/errors"
)

Expand Down Expand Up @@ -129,8 +128,7 @@ func (s *AcceptView) respondToSignatureRequests(context view.Context) error {
}
} else {
logger.DebugfContext(context.Context(), "Receiving signature request...")
jsonSession := session2.JSON(context)
err := jsonSession.ReceiveWithTimeout(signatureRequest, time.Minute)
err := jsession.FromContext(context).Receive(signatureRequest)
if err != nil {
return errors.Wrap(err, "failed reading signature request")
}
Expand Down
9 changes: 4 additions & 5 deletions token/services/ttx/auditor.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ package ttx
import (
"context"
"encoding/base64"
"time"

"github.com/hyperledger-labs/fabric-smart-client/platform/view/services/hash"
"github.com/hyperledger-labs/fabric-smart-client/platform/view/services/id"
Expand All @@ -22,7 +21,7 @@ import (
"github.com/hyperledger-labs/fabric-token-sdk/token/services/db/driver"
"github.com/hyperledger-labs/fabric-token-sdk/token/services/tokens"
"github.com/hyperledger-labs/fabric-token-sdk/token/services/ttxdb"
session2 "github.com/hyperledger-labs/fabric-token-sdk/token/services/utils/json/session"
"github.com/hyperledger-labs/fabric-token-sdk/token/services/utils/json/jsession"
view3 "github.com/hyperledger-labs/fabric-token-sdk/token/services/utils/view"
"github.com/pkg/errors"
)
Expand Down Expand Up @@ -147,8 +146,8 @@ func (a *AuditingViewInitiator) Call(context view.Context) (interface{}, error)
// Receive signature
logger.DebugfContext(context.Context(), "Receiving signature for [%s]", a.tx.ID())

jsonSession := session2.NewFromSession(context, session)
signature, err := jsonSession.ReceiveRawWithTimeout(time.Minute)
jsonSession := jsession.NewFromSession(context, session)
signature, err := jsonSession.ReceiveRaw()
if err != nil {
logger.ErrorfContext(context.Context(), "failed to read audit event: %v", err)
return nil, errors.WithMessage(err, "failed to read audit event")
Expand Down Expand Up @@ -178,7 +177,7 @@ func (a *AuditingViewInitiator) startRemote(context view.Context) (view.Session,
if err != nil {
return nil, err
}
err = session.SendWithContext(context.Context(), txRaw)
err = session.Send(txRaw)
if err != nil {
return nil, errors.Wrap(err, "failed sending transaction")
}
Expand Down
6 changes: 3 additions & 3 deletions token/services/ttx/collect.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import (
"github.com/hyperledger-labs/fabric-smart-client/platform/view/services/endpoint"
"github.com/hyperledger-labs/fabric-smart-client/platform/view/view"
"github.com/hyperledger-labs/fabric-token-sdk/token"
session2 "github.com/hyperledger-labs/fabric-token-sdk/token/services/utils/json/session"
"github.com/hyperledger-labs/fabric-token-sdk/token/services/utils/json/jsession"
token2 "github.com/hyperledger-labs/fabric-token-sdk/token/token"
"github.com/pkg/errors"
)
Expand Down Expand Up @@ -92,7 +92,7 @@ func (c *collectActionsView) collectRemote(context view.Context, actionTransfer
party := actionTransfer.From
logger.Debugf("collect remote from [%s]", party)

session, err := session2.NewJSON(context, context.Initiator(), party)
session, err := jsession.NewJSON(context, context.Initiator(), party)
if err != nil {
return errors.Wrap(err, "failed getting session")
}
Expand Down Expand Up @@ -177,7 +177,7 @@ func (r *receiveActionsView) Call(context view.Context) (interface{}, error) {
}

// actions
s := session2.JSON(context)
s := jsession.FromContext(context)
actions := &Actions{}
if err := s.Receive(actions); err != nil {
return nil, errors.Wrap(err, "failed receiving actions")
Expand Down
31 changes: 17 additions & 14 deletions token/services/ttx/endorse.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ import (
"encoding/base64"
errors2 "errors"
"runtime/debug"
"time"

"github.com/hyperledger-labs/fabric-smart-client/platform/common/services/logging"
"github.com/hyperledger-labs/fabric-smart-client/platform/common/utils/collections"
Expand All @@ -25,8 +24,9 @@ import (
"github.com/hyperledger-labs/fabric-token-sdk/token/services/identity/multisig"
"github.com/hyperledger-labs/fabric-token-sdk/token/services/network"
"github.com/hyperledger-labs/fabric-token-sdk/token/services/tokens"
session2 "github.com/hyperledger-labs/fabric-token-sdk/token/services/utils/json/session"
"github.com/hyperledger-labs/fabric-token-sdk/token/services/utils/json/jsession"
"github.com/pkg/errors"
"go.opentelemetry.io/otel/trace"
)

type distributionListEntry struct {
Expand Down Expand Up @@ -300,13 +300,13 @@ func (c *CollectEndorsementsView) signRemote(context view.Context, party view.Id
if err != nil {
return nil, err
}
err = session.SendWithContext(context.Context(), signatureRequestRaw)
err = session.Send(signatureRequestRaw)
if err != nil {
return nil, errors.Wrap(err, "failed sending transaction content")
}

jsonSession := session2.NewFromSession(context, session)
sigma, err := jsonSession.ReceiveRawWithTimeout(time.Minute)
jsonSession := jsession.NewFromSession(context, session)
sigma, err := jsonSession.ReceiveRaw()
if err != nil {
return nil, errors.Wrap(err, "failed reading message")
}
Expand Down Expand Up @@ -471,14 +471,14 @@ func (c *CollectEndorsementsView) distributeEvnToParty(context view.Context, ent
}
// Send the content
logger.DebugfContext(context.Context(), "Send transaction content")
err = session.SendWithContext(context.Context(), txRaw)
err = session.Send(txRaw)
if err != nil {
return errors.Wrap(err, "failed sending transaction content")
}

logger.DebugfContext(context.Context(), "Wait for ack")
jsonSession := session2.NewFromSession(context, session)
sigma, err := jsonSession.ReceiveRawWithTimeout(time.Minute)
jsonSession := jsession.NewFromSession(context, session)
sigma, err := jsonSession.ReceiveRaw()
if err != nil {
return errors.Wrapf(err, "failed reading message on session [%s]", session.Info().ID)
}
Expand Down Expand Up @@ -656,8 +656,11 @@ func NewReceiveTransactionView() *ReceiveTransactionView {
}

func (f *ReceiveTransactionView) Call(context view.Context) (interface{}, error) {
jsonSession := session2.JSON(context)
msg, err := jsonSession.ReceiveRawWithTimeout(time.Minute * 4)
span := trace.SpanFromContext(context.Context())
span.AddEvent("start_receive_transaction_view")
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's better to use the method logger.DebugfContext

defer span.AddEvent("end_receive_transaction_view")
session := jsession.FromContext(context)
msg, err := session.ReceiveRaw()
if err != nil {
logger.ErrorfContext(context.Context(), err.Error())
}
Expand Down Expand Up @@ -760,8 +763,8 @@ func (s *EndorseView) Call(context view.Context) (interface{}, error) {
}
} else {
logger.Debugf("Receiving signature request...")
jsonSession := session2.JSON(context)
srRaw, err = jsonSession.ReceiveRawWithTimeout(time.Minute)
jsonSession := jsession.FromContext(context)
srRaw, err = jsonSession.ReceiveRaw()
if err != nil {
return nil, errors.Wrap(err, "failed reading signature request")
}
Expand All @@ -785,7 +788,7 @@ func (s *EndorseView) Call(context view.Context) (interface{}, error) {
return nil, errors.Wrapf(err, "failed signing request")
}
logger.Debugf("Send back signature [%s][%s]", signatureRequest.Signer, hash.Hashable(sigma))
err = session.SendWithContext(context.Context(), sigma)
err = session.Send(sigma)
if err != nil {
return nil, errors.Wrapf(err, "failed sending signature back")
}
Expand Down Expand Up @@ -822,7 +825,7 @@ func (s *EndorseView) Call(context view.Context) (interface{}, error) {
return nil, errors.WithMessage(err, "failed to sign ack response")
}
logger.Debugf("ack response: [%s] from [%s]", hash.Hashable(sigma), defaultIdentity)
if err := session.SendWithContext(context.Context(), sigma); err != nil {
if err := session.Send(sigma); err != nil {
return nil, errors.WithMessage(err, "failed sending ack")
}

Expand Down
14 changes: 8 additions & 6 deletions token/services/ttx/multisig/spend.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ import (
"github.com/hyperledger-labs/fabric-token-sdk/token/core/common/encoding/json"
"github.com/hyperledger-labs/fabric-token-sdk/token/services/identity/multisig"
"github.com/hyperledger-labs/fabric-token-sdk/token/services/ttx"
"github.com/hyperledger-labs/fabric-token-sdk/token/services/utils/json/session"
"github.com/hyperledger-labs/fabric-token-sdk/token/services/utils/json/jsession"
"github.com/hyperledger-labs/fabric-token-sdk/token/token"
)

Expand Down Expand Up @@ -51,8 +51,7 @@ func NewReceiveSpendRequestView() *ReceiveSpendRequestView {

func (f *ReceiveSpendRequestView) Call(context view.Context) (interface{}, error) {
tx := &SpendRequest{}
jsonSession := session.JSON(context)
err := jsonSession.ReceiveWithTimeout(tx, time.Minute*4)
err := jsession.FromContext(context).Receive(tx)
if err != nil {
logger.ErrorfContext(context.Context(), "failed receiving request: %v", err)
}
Expand Down Expand Up @@ -165,15 +164,18 @@ func (c *RequestSpendView) collectSpendRequestAnswers(
answerChan chan *answer) {
defer logger.Debugf("received response for from [%v]", party)

backendSession, err := context.GetSession(c, party, context.Initiator())
initiator := context.Initiator()
if c.options.Initiator != nil {
initiator = c.options.Initiator
}
s, err := jsession.NewJSON(context, initiator, party)
if err != nil {
answerChan <- &answer{
err: errors.Wrapf(err, "failed to create session with [%s]", party),
party: party,
}
return
}
s := session.NewFromSession(context, backendSession)

// Wait to receive a Transaction back
logger.Debugf("send request to [%v]", party)
Expand Down Expand Up @@ -221,7 +223,7 @@ func EndorseSpend(context view.Context, request *SpendRequest) (*Transaction, er

func (a *EndorseSpendView) Call(context view.Context) (interface{}, error) {
// - send back the response
if err := session.JSON(context).Send(&SpendResponse{}); err != nil {
if err := jsession.FromContext(context).Send(&SpendResponse{}); err != nil {
return nil, errors.Wrap(err, "failed to send response")
}

Expand Down
Loading
Loading