Skip to content

Commit

Permalink
[FAB-9602] refactoring network peers logic
Browse files Browse the repository at this point in the history
- endpoint config now goes through all the
peers by each org to get network peers


Change-Id: I335925aeb2e56b810b7bde3794c7addc436b21ec
Signed-off-by: Sudesh Shetty <sudesh.shetty@securekey.com>
  • Loading branch information
sudeshrshetty committed Apr 27, 2018
1 parent 63b9e48 commit 08038bf
Show file tree
Hide file tree
Showing 4 changed files with 63 additions and 23 deletions.
3 changes: 3 additions & 0 deletions pkg/core/config/lookup/lookup.go
Expand Up @@ -46,6 +46,9 @@ type ConfigLookup struct {
func (c *ConfigLookup) Lookup(key string) (interface{}, bool) {
//loop through each backend to find the value by key, fallback to next one if not found
for _, backend := range c.backends {
if backend == nil {
continue
}
val, ok := backend.Lookup(key)
if ok {
return val, true
Expand Down
4 changes: 2 additions & 2 deletions pkg/fab/comm/network.go
Expand Up @@ -55,8 +55,8 @@ func SearchPeerConfigFromURL(cfg fab.EndpointConfig, url string) (*fab.PeerConfi
return nil, errors.Wrapf(err, "unable to get peer config from [%s]", url)
}
}

//May be url is already matched, search through all network peers
//If the given url is already parsed URL through entity matcher, then 'cfg.PeerConfig()'
//may return NoMatchingPeerEntity error. So retry with network peer URLs
networkPeers, err := cfg.NetworkPeers()
if err != nil {
return nil, errors.WithMessage(err, "unable to load network peer config")
Expand Down
28 changes: 7 additions & 21 deletions pkg/fab/endpointconfig.go
Expand Up @@ -297,37 +297,23 @@ func (c *EndpointConfig) NetworkConfig() (*fab.NetworkConfig, error) {
}

// NetworkPeers returns the network peers configuration
//returns network peers from all the peers from all the
func (c *EndpointConfig) NetworkPeers() ([]fab.NetworkPeer, error) {
netConfig, err := c.NetworkConfig()
if err != nil {
return nil, err
}

netPeers := []fab.NetworkPeer{}

for name, p := range netConfig.Peers {

matchedPeer := c.tryMatchingPeerConfig(netConfig, name)
if matchedPeer != nil {
//if found in entity matcher then use the matched one
p = *matchedPeer
}

if err = c.verifyPeerConfig(p, name, endpoint.IsTLSEnabled(p.URL)); err != nil {
var netPeers []fab.NetworkPeer
for org, orgConfig := range netConfig.Organizations {
orgPeers, err := c.PeersConfig(org)
if err != nil {
return nil, err
}

if p.TLSCACerts.Path != "" {
p.TLSCACerts.Path = pathvar.Subst(p.TLSCACerts.Path)
}

mspID, err := c.PeerMSPID(name)
if err != nil {
return nil, errors.Errorf("failed to retrieve msp id for peer %s", name)
for _, orgPeer := range orgPeers {
netPeers = append(netPeers, fab.NetworkPeer{PeerConfig: orgPeer, MSPID: orgConfig.MSPID})
}

netPeer := fab.NetworkPeer{PeerConfig: p, MSPID: mspID}
netPeers = append(netPeers, netPeer)
}

return netPeers, nil
Expand Down
51 changes: 51 additions & 0 deletions pkg/fab/endpointconfig_test.go
Expand Up @@ -1278,6 +1278,57 @@ func TestEndpointConfigWithMultipleBackends(t *testing.T) {

}

func TestNetworkPeers(t *testing.T) {

endpointConfig, err := ConfigFromBackend(configBackend)
if err != nil {
t.Fatal("Failed to get endpoint config from backend")
}

testNetworkPeers(t, endpointConfig)
}

func TestNetworkPeersWithEntityMatchers(t *testing.T) {

endpointConfig, err := ConfigFromBackend(getMatcherConfig())
if err != nil {
t.Fatal("Failed to get endpoint config from backend")
}
testNetworkPeers(t, endpointConfig)

}

func testNetworkPeers(t *testing.T, endpointConfig fab.EndpointConfig) {
networkPeers, err := endpointConfig.NetworkPeers()

assert.Nil(t, err, "not suppopsed to get error")
assert.NotNil(t, networkPeers, "supposed to get valid network peers")
assert.Equal(t, 2, len(networkPeers), "supposed to get 2 network peers")
assert.NotEmpty(t, networkPeers[0].MSPID)
assert.NotEmpty(t, networkPeers[1].MSPID)
assert.NotEmpty(t, networkPeers[0].PeerConfig)
assert.NotEmpty(t, networkPeers[1].PeerConfig)

//cross check with peer config for org1
peerConfigOrg1, err := endpointConfig.PeersConfig("org1")
assert.Nil(t, err, "not suppopsed to get error")

//cross check with peer config for org2
peerConfigOrg2, err := endpointConfig.PeersConfig("org2")
assert.Nil(t, err, "not suppopsed to get error")

if networkPeers[0].MSPID == "Org1MSP" {
assert.Equal(t, peerConfigOrg1[0], networkPeers[0].PeerConfig)
assert.Equal(t, peerConfigOrg2[0], networkPeers[1].PeerConfig)

} else if networkPeers[0].MSPID == "Org2MSP" {
assert.Equal(t, peerConfigOrg2[0], networkPeers[0].PeerConfig)
assert.Equal(t, peerConfigOrg1[0], networkPeers[1].PeerConfig)
} else {
t.Fatal("invalid MSPID found")
}
}

func tamperPeerChannelConfig(backend *mocks.MockConfigBackend) {
channelsMap := backend.KeyValueMap["channels"]
orgChannel := map[string]interface{}{
Expand Down

0 comments on commit 08038bf

Please sign in to comment.