Skip to content
This repository was archived by the owner on Apr 25, 2025. It is now read-only.

Commit 4816364

Browse files
committed
[FAB-8639] Create peers via factory
Peers should be created by factory method. This allows injecting of caches into the Peer implementation. Follow-up changes will refactor additional code to create peers via the factory, along with orderers. Change-Id: Ic763748bb09f2b9341bcb1962e3ba853c10ebc54 Signed-off-by: Troy Ronda <troy@troyronda.com>
1 parent 6b39e3a commit 4816364

File tree

11 files changed

+82
-23
lines changed

11 files changed

+82
-23
lines changed

pkg/client/common/discovery/discoveryfilter_test.go

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,10 @@ import (
1010
"testing"
1111

1212
"github.com/hyperledger/fabric-sdk-go/pkg/client/common/discovery/staticdiscovery"
13+
"github.com/hyperledger/fabric-sdk-go/pkg/context/api/core"
1314
"github.com/hyperledger/fabric-sdk-go/pkg/context/api/fab"
1415
"github.com/hyperledger/fabric-sdk-go/pkg/core/config"
16+
"github.com/hyperledger/fabric-sdk-go/pkg/fab/peer"
1517
)
1618

1719
type mockFilter struct {
@@ -31,7 +33,8 @@ func TestDiscoveryFilter(t *testing.T) {
3133
t.Fatalf(err.Error())
3234
}
3335

34-
discoveryProvider, err := staticdiscovery.New(config)
36+
peerCreator := defPeerCreator{config: config}
37+
discoveryProvider, err := staticdiscovery.New(config, &peerCreator)
3538
if err != nil {
3639
t.Fatalf("Failed to setup discovery provider: %s", err)
3740
}
@@ -61,3 +64,11 @@ func TestDiscoveryFilter(t *testing.T) {
6164
}
6265

6366
}
67+
68+
type defPeerCreator struct {
69+
config core.Config
70+
}
71+
72+
func (pc *defPeerCreator) CreatePeerFromConfig(peerCfg *core.NetworkPeer) (fab.Peer, error) {
73+
return peer.New(pc.config, peer.FromPeerConfig(peerCfg))
74+
}

pkg/client/common/discovery/staticdiscovery/staticdiscovery.go

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,17 +10,21 @@ import (
1010
"github.com/hyperledger/fabric-sdk-go/pkg/context/api/core"
1111
"github.com/hyperledger/fabric-sdk-go/pkg/context/api/fab"
1212

13-
"github.com/hyperledger/fabric-sdk-go/pkg/fab/peer"
1413
"github.com/pkg/errors"
1514
)
1615

16+
type peerCreator interface {
17+
CreatePeerFromConfig(peerCfg *core.NetworkPeer) (fab.Peer, error)
18+
}
19+
1720
/**
1821
* Discovery Provider is used to discover peers on the network
1922
*/
2023

2124
// DiscoveryProvider implements discovery provider
2225
type DiscoveryProvider struct {
23-
config core.Config
26+
config core.Config
27+
fabPvdr peerCreator
2428
}
2529

2630
// discoveryService implements discovery service
@@ -30,8 +34,8 @@ type discoveryService struct {
3034
}
3135

3236
// New returns discovery provider
33-
func New(config core.Config) (*DiscoveryProvider, error) {
34-
return &DiscoveryProvider{config: config}, nil
37+
func New(config core.Config, fabPvdr peerCreator) (*DiscoveryProvider, error) {
38+
return &DiscoveryProvider{config: config, fabPvdr: fabPvdr}, nil
3539
}
3640

3741
// NewDiscoveryService return discovery service for specific channel
@@ -49,7 +53,7 @@ func (dp *DiscoveryProvider) NewDiscoveryService(channelID string) (fab.Discover
4953

5054
for _, p := range chPeers {
5155

52-
newPeer, err := peer.New(dp.config, peer.FromPeerConfig(&p.NetworkPeer))
56+
newPeer, err := dp.fabPvdr.CreatePeerFromConfig(&p.NetworkPeer)
5357
if err != nil || newPeer == nil {
5458
return nil, errors.WithMessage(err, "NewPeer failed")
5559
}
@@ -65,7 +69,7 @@ func (dp *DiscoveryProvider) NewDiscoveryService(channelID string) (fab.Discover
6569
}
6670

6771
for _, p := range netPeers {
68-
newPeer, err := peer.New(dp.config, peer.FromPeerConfig(&p))
72+
newPeer, err := dp.fabPvdr.CreatePeerFromConfig(&p)
6973
if err != nil {
7074
return nil, errors.WithMessage(err, "NewPeerFromConfig failed")
7175
}

pkg/client/common/discovery/staticdiscovery/staticdiscovery_test.go

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,10 @@ package staticdiscovery
99
import (
1010
"testing"
1111

12+
"github.com/hyperledger/fabric-sdk-go/pkg/context/api/core"
13+
"github.com/hyperledger/fabric-sdk-go/pkg/context/api/fab"
1214
"github.com/hyperledger/fabric-sdk-go/pkg/core/config"
15+
"github.com/hyperledger/fabric-sdk-go/pkg/fab/peer"
1316
)
1417

1518
func TestStaticDiscovery(t *testing.T) {
@@ -19,7 +22,8 @@ func TestStaticDiscovery(t *testing.T) {
1922
t.Fatalf(err.Error())
2023
}
2124

22-
discoveryProvider, err := New(config)
25+
peerCreator := defPeerCreator{config: config}
26+
discoveryProvider, err := New(config, &peerCreator)
2327
if err != nil {
2428
t.Fatalf("Failed to setup discovery provider: %s", err)
2529
}
@@ -63,3 +67,11 @@ func TestStaticDiscovery(t *testing.T) {
6367
}
6468

6569
}
70+
71+
type defPeerCreator struct {
72+
config core.Config
73+
}
74+
75+
func (pc *defPeerCreator) CreatePeerFromConfig(peerCfg *core.NetworkPeer) (fab.Peer, error) {
76+
return peer.New(pc.config, peer.FromPeerConfig(peerCfg))
77+
}

pkg/client/common/selection/dynamicselection/ccpolicyprovider.go

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import (
1717

1818
"github.com/hyperledger/fabric-sdk-go/pkg/client/channel"
1919
"github.com/hyperledger/fabric-sdk-go/pkg/context/api/core"
20-
peerImpl "github.com/hyperledger/fabric-sdk-go/pkg/fab/peer"
20+
"github.com/hyperledger/fabric-sdk-go/pkg/context/api/fab"
2121
"github.com/hyperledger/fabric-sdk-go/pkg/fabsdk"
2222
"github.com/hyperledger/fabric-sdk-go/pkg/logging"
2323
"github.com/hyperledger/fabric-sdk-go/third_party/github.com/hyperledger/fabric/core/common/ccprovider"
@@ -31,6 +31,10 @@ const (
3131
ccDataProviderfunction = "getccdata"
3232
)
3333

34+
type peerCreator interface {
35+
CreatePeerFromConfig(peerCfg *core.NetworkPeer) (fab.Peer, error)
36+
}
37+
3438
// CCPolicyProvider retrieves policy for the given chaincode ID
3539
type CCPolicyProvider interface {
3640
GetChaincodePolicy(chaincodeID string) (*common.SignaturePolicyEnvelope, error)
@@ -54,7 +58,15 @@ func newCCPolicyProvider(sdk *fabsdk.FabricSDK, channelID string, userName strin
5458
return nil, errors.WithMessage(err, "unable to read configuration for channel peers")
5559
}
5660

57-
return &ccPolicyProvider{config: sdk.Config(), client: client, channelID: channelID, targetPeers: targetPeers, ccDataMap: make(map[string]*ccprovider.ChaincodeData)}, nil
61+
cpp := ccPolicyProvider{
62+
config: sdk.Config(),
63+
client: client,
64+
channelID: channelID,
65+
targetPeers: targetPeers,
66+
ccDataMap: make(map[string]*ccprovider.ChaincodeData),
67+
provider: sdk.FabricProvider(),
68+
}
69+
return &cpp, nil
5870
}
5971

6072
type ccPolicyProvider struct {
@@ -64,6 +76,7 @@ type ccPolicyProvider struct {
6476
targetPeers []core.ChannelPeer
6577
ccDataMap map[string]*ccprovider.ChaincodeData // TODO: Add expiry and configurable timeout for map entries
6678
mutex sync.RWMutex
79+
provider peerCreator
6780
}
6881

6982
func (dp *ccPolicyProvider) GetChaincodePolicy(chaincodeID string) (*common.SignaturePolicyEnvelope, error) {
@@ -123,7 +136,7 @@ func (dp *ccPolicyProvider) queryChaincode(ccID string, ccFcn string, ccArgs [][
123136

124137
for _, p := range dp.targetPeers {
125138

126-
peer, err := peerImpl.New(dp.config, peerImpl.FromPeerConfig(&p.NetworkPeer))
139+
peer, err := dp.provider.CreatePeerFromConfig(&p.NetworkPeer)
127140
if err != nil {
128141
queryErrors = append(queryErrors, err.Error())
129142
continue

pkg/fabsdk/api/factory.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ type CoreProviderFactory interface {
2525

2626
// ServiceProviderFactory allows overriding default service providers (such as peer discovery)
2727
type ServiceProviderFactory interface {
28-
CreateDiscoveryProvider(config core.Config) (fab.DiscoveryProvider, error)
28+
CreateDiscoveryProvider(config core.Config, fabPvdr FabricProvider) (fab.DiscoveryProvider, error)
2929
CreateSelectionProvider(config core.Config) (fab.SelectionProvider, error)
3030
//CreateChannelProvider(ctx Context, channelID string) (ChannelProvider, error)
3131
}

pkg/fabsdk/fabsdk.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,7 @@ func initSDK(sdk *FabricSDK, opts []Option) error {
211211
sdk.fabricProvider = fabricProvider
212212

213213
// Initialize discovery provider
214-
discoveryProvider, err := sdk.opts.Service.CreateDiscoveryProvider(sdk.config)
214+
discoveryProvider, err := sdk.opts.Service.CreateDiscoveryProvider(sdk.config, fabricProvider)
215215
if err != nil {
216216
return errors.WithMessage(err, "failed to initialize discovery provider")
217217
}

pkg/fabsdk/fabsdk_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ func TestWithServicePkg(t *testing.T) {
109109
defer mockCtrl.Finish()
110110
factory := mockapisdk.NewMockServiceProviderFactory(mockCtrl)
111111

112-
factory.EXPECT().CreateDiscoveryProvider(c).Return(nil, nil)
112+
factory.EXPECT().CreateDiscoveryProvider(c, gomock.Any()).Return(nil, nil)
113113
factory.EXPECT().CreateSelectionProvider(c).Return(nil, nil)
114114

115115
_, err = New(WithConfig(c), WithServicePkg(factory))

pkg/fabsdk/factory/defclient/sessfactory_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ func newMockProviders(t *testing.T) *mockProviders {
108108
t.Fatalf("Unexpected error creating fabric provider %v", err)
109109
}
110110

111-
dp, err := svcFactory.CreateDiscoveryProvider(config)
111+
dp, err := svcFactory.CreateDiscoveryProvider(config, fabricProvider)
112112
if err != nil {
113113
t.Fatalf("Unexpected error creating discovery provider %v", err)
114114
}

pkg/fabsdk/factory/defsvc/svcfactory.go

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,16 @@ package defsvc
99
import (
1010
"github.com/hyperledger/fabric-sdk-go/pkg/context/api/core"
1111
"github.com/hyperledger/fabric-sdk-go/pkg/context/api/fab"
12+
"github.com/hyperledger/fabric-sdk-go/pkg/fabsdk/api"
1213

1314
discovery "github.com/hyperledger/fabric-sdk-go/pkg/client/common/discovery/staticdiscovery"
1415
selection "github.com/hyperledger/fabric-sdk-go/pkg/client/common/selection/staticselection"
1516
)
1617

18+
type peerCreator interface {
19+
CreatePeerFromConfig(peerCfg *core.NetworkPeer) (fab.Peer, error)
20+
}
21+
1722
// ProviderFactory represents the default SDK provider factory for services.
1823
type ProviderFactory struct{}
1924

@@ -24,8 +29,8 @@ func NewProviderFactory() *ProviderFactory {
2429
}
2530

2631
// CreateDiscoveryProvider returns a new default implementation of discovery provider
27-
func (f *ProviderFactory) CreateDiscoveryProvider(config core.Config) (fab.DiscoveryProvider, error) {
28-
return discovery.New(config)
32+
func (f *ProviderFactory) CreateDiscoveryProvider(config core.Config, fabPvdr api.FabricProvider) (fab.DiscoveryProvider, error) {
33+
return discovery.New(config, fabPvdr)
2934
}
3035

3136
// CreateSelectionProvider returns a new default implementation of selection service

pkg/fabsdk/factory/defsvc/svcfactory_test.go

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,21 @@ import (
1111

1212
discovery "github.com/hyperledger/fabric-sdk-go/pkg/client/common/discovery/staticdiscovery"
1313
selection "github.com/hyperledger/fabric-sdk-go/pkg/client/common/selection/staticselection"
14+
"github.com/hyperledger/fabric-sdk-go/pkg/context/api/core"
15+
"github.com/hyperledger/fabric-sdk-go/pkg/context/api/fab"
1416
"github.com/hyperledger/fabric-sdk-go/pkg/fab/mocks"
17+
"github.com/hyperledger/fabric-sdk-go/pkg/fab/peer"
18+
"github.com/hyperledger/fabric-sdk-go/pkg/fabsdk/provider/fabpvdr"
1519
)
1620

1721
func TestCreateDiscoveryProvider(t *testing.T) {
18-
factory := NewProviderFactory()
22+
ctx := mocks.NewMockContext(mocks.NewMockUser("testuser"))
23+
fabPvdr := fabpvdr.New(ctx)
1924

25+
factory := NewProviderFactory()
2026
config := mocks.NewMockConfig()
2127

22-
dp, err := factory.CreateDiscoveryProvider(config)
28+
dp, err := factory.CreateDiscoveryProvider(config, fabPvdr)
2329
if err != nil {
2430
t.Fatalf("Unexpected error creating discovery provider %v", err)
2531
}
@@ -45,3 +51,11 @@ func TestCreateSelectionProvider(t *testing.T) {
4551
t.Fatalf("Unexpected selection provider created")
4652
}
4753
}
54+
55+
type defPeerCreator struct {
56+
config core.Config
57+
}
58+
59+
func (pc *defPeerCreator) CreatePeerFromConfig(peerCfg *core.NetworkPeer) (fab.Peer, error) {
60+
return peer.New(pc.config, peer.FromPeerConfig(peerCfg))
61+
}

0 commit comments

Comments
 (0)