Skip to content

Commit

Permalink
[FAB-8571] ledger to use channelcontext
Browse files Browse the repository at this point in the history
- ledger client to use channel context
- removed ChannelLedger interface
- removed CreateChannelLedger() from InfraProvider



Change-Id: Iba16e8005aef49719660da829391f10b615464b0
Signed-off-by: Sudesh Shetty <sudesh.shetty@securekey.com>
  • Loading branch information
sudeshrshetty committed Mar 11, 2018
1 parent fd0faf2 commit 5d117af
Show file tree
Hide file tree
Showing 10 changed files with 30 additions and 58 deletions.
35 changes: 13 additions & 22 deletions pkg/client/ledger/ledger.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
)
Expand All @@ -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
Expand All @@ -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 {
Expand All @@ -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
}

Expand Down Expand Up @@ -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")
}
Expand Down Expand Up @@ -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
}
Expand Down
1 change: 1 addition & 0 deletions pkg/common/context/context.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ type Channel interface {
DiscoveryService() fab.DiscoveryService
SelectionService() fab.SelectionService
ChannelService() fab.ChannelService
ChannelID() string
}

//ClientProvider returns client context
Expand Down
11 changes: 0 additions & 11 deletions pkg/context/api/fab/channel.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
1 change: 0 additions & 1 deletion pkg/context/api/fab/provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
7 changes: 7 additions & 0 deletions pkg/context/context.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ type Channel struct {
discovery fab.DiscoveryService
selection fab.SelectionService
channelService fab.ChannelService
channelID string
}

//Providers returns core providers
Expand All @@ -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
Expand Down Expand Up @@ -216,6 +222,7 @@ func NewChannel(clientProvider context.ClientProvider, channelID string) (*Chann
selection: selectionService,
discovery: discoveryService,
channelService: channelService,
channelID: channelID,
}, nil
}

Expand Down
5 changes: 0 additions & 5 deletions pkg/fab/mocks/mockfabricprovider.go
Original file line number Diff line number Diff line change
Expand Up @@ -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")
Expand Down
14 changes: 0 additions & 14 deletions pkg/fabsdk/provider/fabpvdr/fabpvdr.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
7 changes: 5 additions & 2 deletions test/integration/fab/channel_ledger_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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]
Expand Down Expand Up @@ -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)
Expand Down
3 changes: 2 additions & 1 deletion test/integration/orgs/multiple_orgs_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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))

Expand Down Expand Up @@ -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)
Expand Down
4 changes: 2 additions & 2 deletions test/integration/sdk/ledger_queries_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}
Expand Down

0 comments on commit 5d117af

Please sign in to comment.