Skip to content

Commit 60cab9c

Browse files
committed
[FAB-12327] Return regular envelopes in gossip support
This change set makes gossip support for discovery, return only regular envelopes. Change-Id: I5bab9c59579b33680c16af18c7f955264eae766a Signed-off-by: yacovm <yacovm@il.ibm.com>
1 parent d0d31a5 commit 60cab9c

File tree

4 files changed

+64
-5
lines changed

4 files changed

+64
-5
lines changed

discovery/support/gossip/support.go

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010
"github.com/hyperledger/fabric/gossip/common"
1111
"github.com/hyperledger/fabric/gossip/discovery"
1212
gossip2 "github.com/hyperledger/fabric/gossip/gossip"
13+
"github.com/hyperledger/fabric/protos/gossip"
1314
)
1415

1516
// DiscoverySupport implements support that is used for service discovery
@@ -48,6 +49,19 @@ func (s *DiscoverySupport) PeersOfChannel(chain common.ChainID) discovery.Member
4849
func (s *DiscoverySupport) Peers() discovery.Members {
4950
peers := s.Gossip.Peers()
5051
peers = append(peers, s.Gossip.SelfMembershipInfo())
51-
// Return only the peers that have an external endpoint.
52-
return discovery.Members(peers).Filter(discovery.HasExternalEndpoint)
52+
// Return only the peers that have an external endpoint, and sanitizes the envelopes.
53+
return discovery.Members(peers).Filter(discovery.HasExternalEndpoint).Map(sanitizeEnvelope)
54+
}
55+
56+
func sanitizeEnvelope(member discovery.NetworkMember) discovery.NetworkMember {
57+
// Make a local copy of the member
58+
returnedMember := member
59+
if returnedMember.Envelope == nil {
60+
return returnedMember
61+
}
62+
returnedMember.Envelope = &gossip.Envelope{
63+
Payload: member.Envelope.Payload,
64+
Signature: member.Envelope.Signature,
65+
}
66+
return returnedMember
5367
}

discovery/support/gossip/support_test.go

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,24 @@ func TestChannelExists(t *testing.T) {
2626
func TestPeers(t *testing.T) {
2727
g := &mocks.Gossip{}
2828
sup := gossipSupport.NewDiscoverySupport(g)
29-
peers := []discovery.NetworkMember{{PKIid: common.PKIidType("p1"), Endpoint: "p1"}, {PKIid: common.PKIidType("p2")}}
29+
p1Envelope := &gossip.Envelope{
30+
Payload: []byte{4, 5, 6},
31+
SecretEnvelope: &gossip.SecretEnvelope{
32+
Payload: []byte{1, 2, 3},
33+
},
34+
}
35+
peers := []discovery.NetworkMember{
36+
{PKIid: common.PKIidType("p1"), Endpoint: "p1", Envelope: p1Envelope},
37+
{PKIid: common.PKIidType("p2")},
38+
}
3039
g.PeersReturnsOnCall(0, peers)
3140
g.SelfMembershipInfoReturnsOnCall(0, discovery.NetworkMember{PKIid: common.PKIidType("p0"), Endpoint: "p0"})
32-
expected := discovery.Members{{PKIid: common.PKIidType("p1"), Endpoint: "p1"}, {PKIid: common.PKIidType("p0"), Endpoint: "p0"}}
33-
assert.Equal(t, expected, sup.Peers())
41+
p1ExpectedEnvelope := &gossip.Envelope{
42+
Payload: []byte{4, 5, 6},
43+
}
44+
expected := discovery.Members{{PKIid: common.PKIidType("p1"), Endpoint: "p1", Envelope: p1ExpectedEnvelope}, {PKIid: common.PKIidType("p0"), Endpoint: "p0"}}
45+
actual := sup.Peers()
46+
assert.Equal(t, expected, actual)
3447
}
3548

3649
func TestPeersOfChannel(t *testing.T) {

gossip/discovery/discovery.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,15 @@ func (members Members) Filter(filter func(member NetworkMember) bool) Members {
171171
return res
172172
}
173173

174+
// Map invokes the given function to every NetworkMember among the Members
175+
func (members Members) Map(f func(member NetworkMember) NetworkMember) Members {
176+
var res Members
177+
for _, m := range members {
178+
res = append(res, f(m))
179+
}
180+
return res
181+
}
182+
174183
// HaveExternalEndpoints selects network members that have external endpoints
175184
func HasExternalEndpoint(member NetworkMember) bool {
176185
return member.Endpoint != ""

gossip/discovery/discovery_test.go

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1282,6 +1282,29 @@ func TestFilter(t *testing.T) {
12821282
assert.Equal(t, Members{members[1]}, res)
12831283
}
12841284

1285+
func TestMap(t *testing.T) {
1286+
members := Members{
1287+
{PKIid: common.PKIidType("p0"), Endpoint: "p0"},
1288+
{PKIid: common.PKIidType("p1"), Endpoint: "p1"},
1289+
}
1290+
expectedMembers := Members{
1291+
{PKIid: common.PKIidType("p0"), Endpoint: "p0", Properties: &proto.Properties{LedgerHeight: 2}},
1292+
{PKIid: common.PKIidType("p1"), Endpoint: "p1", Properties: &proto.Properties{LedgerHeight: 2}},
1293+
}
1294+
1295+
addProperty := func(member NetworkMember) NetworkMember {
1296+
member.Properties = &proto.Properties{
1297+
LedgerHeight: 2,
1298+
}
1299+
return member
1300+
}
1301+
1302+
assert.Equal(t, expectedMembers, members.Map(addProperty))
1303+
// Ensure original members didn't change
1304+
assert.Nil(t, members[0].Properties)
1305+
assert.Nil(t, members[1].Properties)
1306+
}
1307+
12851308
func TestMembersIntersect(t *testing.T) {
12861309
members1 := Members{
12871310
{PKIid: common.PKIidType("p0"), Endpoint: "p0"},

0 commit comments

Comments
 (0)