Skip to content

Commit 4246971

Browse files
committed
Prevent CLI to connect to ordering service on join.
Currently peer cli commands tries to get connected to the ordering service regardless whenever it's needed or not, this commit introduce lazy initialization and therefore cli connected to the ordering only when needed. Change-Id: I590fa69473ec89194e7c609603d19f1de27ab68f Signed-off-by: Artem Barger <[email protected]>
1 parent 6daec3f commit 4246971

File tree

6 files changed

+55
-60
lines changed

6 files changed

+55
-60
lines changed

peer/channel/channel.go

+11-5
Original file line numberDiff line numberDiff line change
@@ -74,12 +74,15 @@ var channelCmd = &cobra.Command{
7474
Long: fmt.Sprintf("%s specific commands.", channelFuncName),
7575
}
7676

77+
type BroadcastClientFactory func() (common.BroadcastClient, error)
78+
7779
// ChannelCmdFactory holds the clients used by ChannelCmdFactory
7880
type ChannelCmdFactory struct {
79-
EndorserClient pb.EndorserClient
80-
Signer msp.SigningIdentity
81-
BroadcastClient common.BroadcastClient
82-
DeliverClient deliverClientIntf
81+
EndorserClient pb.EndorserClient
82+
Signer msp.SigningIdentity
83+
BroadcastClient common.BroadcastClient
84+
DeliverClient deliverClientIntf
85+
BroadcastFactory BroadcastClientFactory
8386
}
8487

8588
// InitCmdFactory init the ChannelCmdFactor with default clients
@@ -93,7 +96,10 @@ func InitCmdFactory(isOrdererRequired bool) (*ChannelCmdFactory, error) {
9396
return nil, fmt.Errorf("Error getting default signer: %s", err)
9497
}
9598

96-
cmdFact.BroadcastClient, err = common.GetBroadcastClient()
99+
cmdFact.BroadcastFactory = func() (common.BroadcastClient, error) {
100+
return common.GetBroadcastClient()
101+
}
102+
97103
if err != nil {
98104
return nil, fmt.Errorf("Error getting broadcast client: %s", err)
99105
}

peer/channel/create.go

+7-3
Original file line numberDiff line numberDiff line change
@@ -123,15 +123,19 @@ func sendCreateChainTransaction(cf *ChannelCmdFactory) error {
123123
return err
124124
}
125125
}
126+
var broadcastClient common.BroadcastClient
127+
broadcastClient, err = cf.BroadcastFactory()
128+
if err != nil {
129+
return err
130+
}
126131

127-
err = cf.BroadcastClient.Send(chCrtEnv)
132+
defer broadcastClient.Close()
133+
err = broadcastClient.Send(chCrtEnv)
128134

129135
return err
130136
}
131137

132138
func executeCreate(cf *ChannelCmdFactory) error {
133-
defer cf.BroadcastClient.Close()
134-
135139
var err error
136140

137141
if err = sendCreateChainTransaction(cf); err != nil {

peer/channel/create_test.go

+25-30
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,10 @@ func initMSP() {
7777
}
7878
}
7979

80+
func mockBroadcastClientFactory() (common.BroadcastClient, error) {
81+
return common.GetMockBroadcastClient(nil), nil
82+
}
83+
8084
func TestCreateChain(t *testing.T) {
8185
InitMSP()
8286

@@ -89,12 +93,10 @@ func TestCreateChain(t *testing.T) {
8993
t.Fatalf("Get default signer error: %v", err)
9094
}
9195

92-
mockBroadcastClient := common.GetMockBroadcastClient(nil)
93-
9496
mockCF := &ChannelCmdFactory{
95-
BroadcastClient: mockBroadcastClient,
96-
Signer: signer,
97-
DeliverClient: &mockDeliverClient{},
97+
BroadcastFactory: mockBroadcastClientFactory,
98+
Signer: signer,
99+
DeliverClient: &mockDeliverClient{},
98100
}
99101

100102
cmd := createCmd(mockCF)
@@ -122,12 +124,10 @@ func TestCreateChainWithDefaultAnchorPeers(t *testing.T) {
122124
t.Fatalf("Get default signer error: %v", err)
123125
}
124126

125-
mockBroadcastClient := common.GetMockBroadcastClient(nil)
126-
127127
mockCF := &ChannelCmdFactory{
128-
BroadcastClient: mockBroadcastClient,
129-
Signer: signer,
130-
DeliverClient: &mockDeliverClient{},
128+
BroadcastFactory: mockBroadcastClientFactory,
129+
Signer: signer,
130+
DeliverClient: &mockDeliverClient{},
131131
}
132132

133133
cmd := createCmd(mockCF)
@@ -156,12 +156,13 @@ func TestCreateChainBCFail(t *testing.T) {
156156
}
157157

158158
sendErr := fmt.Errorf("send create tx failed")
159-
mockBroadcastClient := common.GetMockBroadcastClient(sendErr)
160159

161160
mockCF := &ChannelCmdFactory{
162-
BroadcastClient: mockBroadcastClient,
163-
Signer: signer,
164-
DeliverClient: &mockDeliverClient{},
161+
BroadcastFactory: func() (common.BroadcastClient, error) {
162+
return common.GetMockBroadcastClient(sendErr), nil
163+
},
164+
Signer: signer,
165+
DeliverClient: &mockDeliverClient{},
165166
}
166167

167168
cmd := createCmd(mockCF)
@@ -173,7 +174,7 @@ func TestCreateChainBCFail(t *testing.T) {
173174

174175
expectedErrMsg := sendErr.Error()
175176
if err := cmd.Execute(); err == nil {
176-
t.Errorf("expected create chain to fail with broadcast error")
177+
t.Error("expected create chain to fail with broadcast error")
177178
} else {
178179
if err.Error() != expectedErrMsg {
179180
t.Errorf("Run create chain get unexpected error: %s(expected %s)", err.Error(), expectedErrMsg)
@@ -193,14 +194,12 @@ func TestCreateChainDeliverFail(t *testing.T) {
193194
t.Fatalf("Get default signer error: %v", err)
194195
}
195196

196-
mockBroadcastClient := common.GetMockBroadcastClient(nil)
197-
198197
recvErr := fmt.Errorf("deliver create tx failed")
199198

200199
mockCF := &ChannelCmdFactory{
201-
BroadcastClient: mockBroadcastClient,
202-
Signer: signer,
203-
DeliverClient: &mockDeliverClient{recvErr},
200+
BroadcastFactory: mockBroadcastClientFactory,
201+
Signer: signer,
202+
DeliverClient: &mockDeliverClient{recvErr},
204203
}
205204

206205
cmd := createCmd(mockCF)
@@ -268,12 +267,10 @@ func TestCreateChainFromTx(t *testing.T) {
268267
t.Fatalf("Get default signer error: %v", err)
269268
}
270269

271-
mockBroadcastClient := common.GetMockBroadcastClient(nil)
272-
273270
mockCF := &ChannelCmdFactory{
274-
BroadcastClient: mockBroadcastClient,
275-
Signer: signer,
276-
DeliverClient: &mockDeliverClient{},
271+
BroadcastFactory: mockBroadcastClientFactory,
272+
Signer: signer,
273+
DeliverClient: &mockDeliverClient{},
277274
}
278275

279276
cmd := createCmd(mockCF)
@@ -314,12 +311,10 @@ func TestCreateChainInvalidTx(t *testing.T) {
314311
t.Fatalf("Get default signer error: %v", err)
315312
}
316313

317-
mockBroadcastClient := common.GetMockBroadcastClient(nil)
318-
319314
mockCF := &ChannelCmdFactory{
320-
BroadcastClient: mockBroadcastClient,
321-
Signer: signer,
322-
DeliverClient: &mockDeliverClient{},
315+
BroadcastFactory: mockBroadcastClientFactory,
316+
Signer: signer,
317+
DeliverClient: &mockDeliverClient{},
323318
}
324319

325320
cmd := createCmd(mockCF)

peer/channel/fetchconfig.go

-2
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,6 @@ func fetch(cmd *cobra.Command, args []string, cf *ChannelCmdFactory) error {
4646
}
4747
}
4848

49-
defer cf.BroadcastClient.Close()
50-
5149
var block *cb.Block
5250
if block, err = cf.DeliverClient.getBlock(); err != nil {
5351
return err

peer/channel/fetchconfig_test.go

+3-5
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,10 @@ func TestFetchChain(t *testing.T) {
3333
t.Fatalf("Get default signer error: %v", err)
3434
}
3535

36-
mockBroadcastClient := common.GetMockBroadcastClient(nil)
37-
3836
mockCF := &ChannelCmdFactory{
39-
BroadcastClient: mockBroadcastClient,
40-
Signer: signer,
41-
DeliverClient: &mockDeliverClient{},
37+
BroadcastFactory: mockBroadcastClientFactory,
38+
Signer: signer,
39+
DeliverClient: &mockDeliverClient{},
4240
}
4341

4442
cmd := createCmd(mockCF)

peer/channel/join_test.go

+9-15
Original file line numberDiff line numberDiff line change
@@ -43,12 +43,10 @@ func TestJoin(t *testing.T) {
4343

4444
mockEndorerClient := common.GetMockEndorserClient(mockResponse, nil)
4545

46-
mockBroadcastClient := common.GetMockBroadcastClient(nil)
47-
4846
mockCF := &ChannelCmdFactory{
49-
EndorserClient: mockEndorerClient,
50-
BroadcastClient: mockBroadcastClient,
51-
Signer: signer,
47+
EndorserClient: mockEndorerClient,
48+
BroadcastFactory: mockBroadcastClientFactory,
49+
Signer: signer,
5250
}
5351

5452
cmd := joinCmd(mockCF)
@@ -79,12 +77,10 @@ func TestJoinNonExistentBlock(t *testing.T) {
7977

8078
mockEndorerClient := common.GetMockEndorserClient(mockResponse, nil)
8179

82-
mockBroadcastClient := common.GetMockBroadcastClient(nil)
83-
8480
mockCF := &ChannelCmdFactory{
85-
EndorserClient: mockEndorerClient,
86-
BroadcastClient: mockBroadcastClient,
87-
Signer: signer,
81+
EndorserClient: mockEndorerClient,
82+
BroadcastFactory: mockBroadcastClientFactory,
83+
Signer: signer,
8884
}
8985

9086
cmd := joinCmd(mockCF)
@@ -121,12 +117,10 @@ func TestBadProposalResponse(t *testing.T) {
121117

122118
mockEndorerClient := common.GetMockEndorserClient(mockResponse, nil)
123119

124-
mockBroadcastClient := common.GetMockBroadcastClient(nil)
125-
126120
mockCF := &ChannelCmdFactory{
127-
EndorserClient: mockEndorerClient,
128-
BroadcastClient: mockBroadcastClient,
129-
Signer: signer,
121+
EndorserClient: mockEndorerClient,
122+
BroadcastFactory: mockBroadcastClientFactory,
123+
Signer: signer,
130124
}
131125

132126
cmd := joinCmd(mockCF)

0 commit comments

Comments
 (0)