From 5d117af90852fe62138a33ea1b6f4bb4f6acf40e Mon Sep 17 00:00:00 2001 From: Sudesh Shetty Date: Sun, 11 Mar 2018 16:58:05 -0400 Subject: [PATCH] [FAB-8571] ledger to use channelcontext - ledger client to use channel context - removed ChannelLedger interface - removed CreateChannelLedger() from InfraProvider Change-Id: Iba16e8005aef49719660da829391f10b615464b0 Signed-off-by: Sudesh Shetty --- pkg/client/ledger/ledger.go | 35 ++++++++------------- pkg/common/context/context.go | 1 + pkg/context/api/fab/channel.go | 11 ------- pkg/context/api/fab/provider.go | 1 - pkg/context/context.go | 7 +++++ pkg/fab/mocks/mockfabricprovider.go | 5 --- pkg/fabsdk/provider/fabpvdr/fabpvdr.go | 14 --------- test/integration/fab/channel_ledger_test.go | 7 +++-- test/integration/orgs/multiple_orgs_test.go | 3 +- test/integration/sdk/ledger_queries_test.go | 4 +-- 10 files changed, 30 insertions(+), 58 deletions(-) diff --git a/pkg/client/ledger/ledger.go b/pkg/client/ledger/ledger.go index 0d147fb98e..3c40db83cf 100644 --- a/pkg/client/ledger/ledger.go +++ b/pkg/client/ledger/ledger.go @@ -14,11 +14,11 @@ import ( "github.com/golang/protobuf/proto" "github.com/hyperledger/fabric-sdk-go/pkg/common/context" "github.com/hyperledger/fabric-sdk-go/pkg/context/api/fab" - "github.com/hyperledger/fabric-sdk-go/pkg/fab/channel" "github.com/hyperledger/fabric-sdk-go/pkg/fab/chconfig" "github.com/hyperledger/fabric-sdk-go/third_party/github.com/hyperledger/fabric/protos/common" pb "github.com/hyperledger/fabric-sdk-go/third_party/github.com/hyperledger/fabric/protos/peer" + "github.com/hyperledger/fabric-sdk-go/pkg/fab/channel" "github.com/hyperledger/fabric-sdk-go/pkg/logging" "github.com/pkg/errors" ) @@ -35,11 +35,9 @@ const ( // An application that requires interaction with multiple channels should create a separate // instance of the ledger client for each channel. Ledger client supports specific queries only. type Client struct { - context context.Client - discovery fab.DiscoveryService - ledger *channel.Ledger - filter TargetFilter - chName string + context context.Channel + filter TargetFilter + ledger *channel.Ledger } // MSPFilter is default filter @@ -53,28 +51,21 @@ func (f *MSPFilter) Accept(peer fab.Peer) bool { } // New returns a Client instance. -func New(clientProvider context.ClientProvider, channelID string, opts ...ClientOption) (*Client, error) { - - clientContext, err := clientProvider() - if err != nil { - return nil, err - } +func New(channelProvider context.ChannelProvider, opts ...ClientOption) (*Client, error) { - l, err := channel.NewLedger(clientContext, channelID) + channelContext, err := channelProvider() if err != nil { return nil, err } - discoveryService, err := clientContext.DiscoveryProvider().CreateDiscoveryService(channelID) + ledger, err := channel.NewLedger(channelContext, channelContext.ChannelID()) if err != nil { return nil, err } ledgerClient := Client{ - context: clientContext, - discovery: discoveryService, - ledger: l, - chName: channelID, + context: channelContext, + ledger: ledger, } for _, opt := range opts { @@ -87,10 +78,10 @@ func New(clientProvider context.ClientProvider, channelID string, opts ...Client // check if target filter was set - if not set the default if ledgerClient.filter == nil { // Default target filter is based on user msp - if clientContext.MspID() == "" { + if channelContext.MspID() == "" { return nil, errors.New("mspID not available in user context") } - filter := &MSPFilter{mspID: clientContext.MspID()} + filter := &MSPFilter{mspID: channelContext.MspID()} ledgerClient.filter = filter } @@ -278,7 +269,7 @@ func (c *Client) QueryConfig(options ...RequestOption) (fab.ChannelCfg, error) { return nil, errors.WithMessage(err, "failed to determine target peers for QueryConfig") } - channelConfig, err := chconfig.New(c.context, c.chName, chconfig.WithPeers(targets), chconfig.WithMinResponses(opts.MinTargets)) + channelConfig, err := chconfig.New(c.context, c.context.ChannelID(), chconfig.WithPeers(targets), chconfig.WithMinResponses(opts.MinTargets)) if err != nil { return nil, errors.WithMessage(err, "QueryConfig failed") } @@ -327,7 +318,7 @@ func (c *Client) calculateTargets(opts Opts) ([]fab.Peer, error) { var err error if targets == nil { // Retrieve targets from discovery - targets, err = c.discovery.GetPeers() + targets, err = c.context.DiscoveryService().GetPeers() if err != nil { return nil, err } diff --git a/pkg/common/context/context.go b/pkg/common/context/context.go index ac698e38cc..7c7621384e 100644 --- a/pkg/common/context/context.go +++ b/pkg/common/context/context.go @@ -31,6 +31,7 @@ type Channel interface { DiscoveryService() fab.DiscoveryService SelectionService() fab.SelectionService ChannelService() fab.ChannelService + ChannelID() string } //ClientProvider returns client context diff --git a/pkg/context/api/fab/channel.go b/pkg/context/api/fab/channel.go index ef65134828..62a4fc8ef6 100644 --- a/pkg/context/api/fab/channel.go +++ b/pkg/context/api/fab/channel.go @@ -9,19 +9,8 @@ package fab import ( "github.com/hyperledger/fabric-sdk-go/third_party/github.com/hyperledger/fabric/protos/common" mspCfg "github.com/hyperledger/fabric-sdk-go/third_party/github.com/hyperledger/fabric/protos/msp" - pb "github.com/hyperledger/fabric-sdk-go/third_party/github.com/hyperledger/fabric/protos/peer" ) -// ChannelLedger provides access to the underlying ledger for a channel. -type ChannelLedger interface { - QueryInfo(targets []ProposalProcessor) ([]*BlockchainInfoResponse, error) - QueryBlock(blockNumber int, targets []ProposalProcessor) ([]*common.Block, error) - QueryBlockByHash(blockHash []byte, targets []ProposalProcessor) ([]*common.Block, error) - QueryTransaction(transactionID TransactionID, targets []ProposalProcessor) ([]*pb.ProcessedTransaction, error) - QueryInstantiatedChaincodes(targets []ProposalProcessor) ([]*pb.ChaincodeQueryResponse, error) - QueryConfigBlock(targets []ProposalProcessor, minResponses int) (*common.ConfigEnvelope, error) // TODO: generalize minResponses -} - // OrgAnchorPeer contains information about an anchor peer on this channel type OrgAnchorPeer struct { Org string diff --git a/pkg/context/api/fab/provider.go b/pkg/context/api/fab/provider.go index 2f6fdf2107..e72182d892 100644 --- a/pkg/context/api/fab/provider.go +++ b/pkg/context/api/fab/provider.go @@ -28,7 +28,6 @@ type ClientContext interface { // InfraProvider enables access to fabric objects such as peer and user based on config or type InfraProvider interface { - CreateChannelLedger(ic msp.Identity, name string) (ChannelLedger, error) CreateChannelConfig(user msp.Identity, name string) (ChannelConfig, error) CreateChannelTransactor(ic msp.Identity, cfg ChannelCfg) (Transactor, error) CreateChannelMembership(cfg ChannelCfg) (ChannelMembership, error) diff --git a/pkg/context/context.go b/pkg/context/context.go index db70b80e23..838bb60131 100644 --- a/pkg/context/context.go +++ b/pkg/context/context.go @@ -30,6 +30,7 @@ type Channel struct { discovery fab.DiscoveryService selection fab.SelectionService channelService fab.ChannelService + channelID string } //Providers returns core providers @@ -52,6 +53,11 @@ func (c *Channel) ChannelService() fab.ChannelService { return c.channelService } +//ChannelID returns channel id +func (c *Channel) ChannelID() string { + return c.channelID +} + //Provider implementation for Providers interface type Provider struct { config core.Config @@ -216,6 +222,7 @@ func NewChannel(clientProvider context.ClientProvider, channelID string) (*Chann selection: selectionService, discovery: discoveryService, channelService: channelService, + channelID: channelID, }, nil } diff --git a/pkg/fab/mocks/mockfabricprovider.go b/pkg/fab/mocks/mockfabricprovider.go index 101e9c1fd6..8d68ad3d98 100644 --- a/pkg/fab/mocks/mockfabricprovider.go +++ b/pkg/fab/mocks/mockfabricprovider.go @@ -21,11 +21,6 @@ type MockInfraProvider struct { customOrderer fab.Orderer } -// CreateChannelLedger returns a new client initialized for the current instance of the SDK. -func (f *MockInfraProvider) CreateChannelLedger(ic msp.Identity, channelName string) (fab.ChannelLedger, error) { - return nil, nil -} - // CreateEventService creates the event service. func (f *MockInfraProvider) CreateEventService(ic fab.ClientContext, chConfig fab.ChannelCfg) (fab.EventService, error) { panic("not implemented") diff --git a/pkg/fabsdk/provider/fabpvdr/fabpvdr.go b/pkg/fabsdk/provider/fabpvdr/fabpvdr.go index e12da9a739..4d4d3247af 100644 --- a/pkg/fabsdk/provider/fabpvdr/fabpvdr.go +++ b/pkg/fabsdk/provider/fabpvdr/fabpvdr.go @@ -94,20 +94,6 @@ func (f *InfraProvider) CommManager() fab.CommManager { return f.commManager } -// CreateChannelLedger returns a new client initialized for the current instance of the SDK. -func (f *InfraProvider) CreateChannelLedger(ic msp.Identity, channelName string) (fab.ChannelLedger, error) { - ctx := &fabContext{ - Providers: f.providerContext, - Identity: ic, - } - ledger, err := channelImpl.NewLedger(ctx, channelName) - if err != nil { - return nil, errors.WithMessage(err, "NewLedger failed") - } - - return ledger, nil -} - // CreateEventService creates the event service. func (f *InfraProvider) CreateEventService(ctx fab.ClientContext, chConfig fab.ChannelCfg) (fab.EventService, error) { key, err := NewCacheKey(ctx, chConfig) diff --git a/test/integration/fab/channel_ledger_test.go b/test/integration/fab/channel_ledger_test.go index 312dd9bd87..10875bf0de 100644 --- a/test/integration/fab/channel_ledger_test.go +++ b/test/integration/fab/channel_ledger_test.go @@ -73,11 +73,11 @@ func TestLedgerQueries(t *testing.T) { } //prepare required contexts - clientCtx := sdk.Context(fabsdk.WithUser("Admin"), fabsdk.WithOrg(orgName)) + channelClientCtx := sdk.ChannelContext(channelID, fabsdk.WithUser("Admin"), fabsdk.WithOrg(orgName)) // Get a ledger client. - ledgerClient, err := ledger.New(clientCtx, channelID) + ledgerClient, err := ledger.New(channelClientCtx) // Test Query Info - retrieve values before transaction testTargets := targets[0:1] @@ -112,6 +112,9 @@ func TestLedgerQueries(t *testing.T) { testQueryBlock(t, ledgerClient, targets) + //prepare context + clientCtx := sdk.Context(fabsdk.WithUser("Admin"), fabsdk.WithOrg(orgName)) + resmgmtClient, err := resmgmt.New(clientCtx) testInstantiatedChaincodes(t, chaincodeID, channelID, resmgmtClient, targets) diff --git a/test/integration/orgs/multiple_orgs_test.go b/test/integration/orgs/multiple_orgs_test.go index 074b287d2c..bc25f5a9e9 100644 --- a/test/integration/orgs/multiple_orgs_test.go +++ b/test/integration/orgs/multiple_orgs_test.go @@ -74,6 +74,7 @@ func testWithOrg1(t *testing.T, sdk *fabsdk.FabricSDK) int { ordererClientContext := sdk.Context(fabsdk.WithUser(ordererAdminUser), fabsdk.WithOrg(ordererOrgName)) org1AdminClientContext := sdk.Context(fabsdk.WithUser(org1AdminUser), fabsdk.WithOrg(org1)) org2AdminClientContext := sdk.Context(fabsdk.WithUser(org2AdminUser), fabsdk.WithOrg(org2)) + org1AdminChannelContext := sdk.ChannelContext(channelID, fabsdk.WithUser(org1AdminUser), fabsdk.WithOrg(org1)) org1ChannelClientContext := sdk.ChannelContext(channelID, fabsdk.WithUser(org1User), fabsdk.WithOrg(org1)) org2ChannelClientContext := sdk.ChannelContext(channelID, fabsdk.WithUser(org2User), fabsdk.WithOrg(org2)) @@ -196,7 +197,7 @@ func testWithOrg1(t *testing.T, sdk *fabsdk.FabricSDK) int { initial, _ := strconv.Atoi(string(response.Payload)) // Ledger client will verify blockchain info - ledgerClient, err := ledger.New(org1AdminClientContext, channelID) + ledgerClient, err := ledger.New(org1AdminChannelContext) if err != nil { t.Fatalf("Failed to create new ledger client: %s", err) diff --git a/test/integration/sdk/ledger_queries_test.go b/test/integration/sdk/ledger_queries_test.go index 3a8b31edda..0beecd920d 100644 --- a/test/integration/sdk/ledger_queries_test.go +++ b/test/integration/sdk/ledger_queries_test.go @@ -41,10 +41,10 @@ func TestLedgerClientQueries(t *testing.T) { //} //prepare contexts - org1AdminClientContext := sdk.Context(fabsdk.WithUser(org1AdminUser), fabsdk.WithOrg(org1Name)) + org1AdminChannelContext := sdk.ChannelContext(testSetup.ChannelID, fabsdk.WithUser(org1AdminUser), fabsdk.WithOrg(org1Name)) // Ledger client - client, err := ledger.New(org1AdminClientContext, testSetup.ChannelID) + client, err := ledger.New(org1AdminChannelContext) if err != nil { t.Fatalf("Failed to create new resource management client: %s", err) }