Skip to content

Commit

Permalink
[FAB-9602] Fix for recursive calling of entitymatchers
Browse files Browse the repository at this point in the history
- endpoint discovery logic refactored to avoid recursive
URL matching of peer.
- refactored bdd tests to not use parsed/matched URL in tests
to avoid recursive matching

Change-Id: I4a0855038b4945f5173f6fed81dc3b49bbcee259
Signed-off-by: Sudesh Shetty <sudesh.shetty@securekey.com>
  • Loading branch information
sudeshrshetty committed Apr 19, 2018
1 parent 50f07dd commit ed467a4
Show file tree
Hide file tree
Showing 5 changed files with 31 additions and 81 deletions.
2 changes: 1 addition & 1 deletion pkg/client/resmgmt/resmgmt.go
Expand Up @@ -919,7 +919,7 @@ func (rc *Client) prepareRequestOpts(options ...RequestOption) (requestOptions,
for _, option := range options {
err := option(rc.ctx, &opts)
if err != nil {
return opts, errors.WithMessage(err, "Failed to read opts")
return opts, errors.WithMessage(err, "failed to read opts in resmgmt")
}
}
return opts, nil
Expand Down
27 changes: 17 additions & 10 deletions pkg/fab/events/endpoint/endpointdiscovery.go
Expand Up @@ -89,15 +89,22 @@ func (s *discoveryService) GetPeers() ([]fab.Peer, error) {
}

for _, peer := range peers {
peerConfig, err := s.ctx.EndpointConfig().PeerConfigByURL(peer.URL())
if err != nil {
return nil, errors.Wrapf(err, "unable to get peer config from [%s]", peer.URL())
}
if peerConfig == nil {
return nil, errors.Errorf("unable to get peer config from [%s]", peer.URL())
}

chPeer := s.getChannelPeer(peerConfig)
var peerConfig *fab.PeerConfig
var err error

chPeer := s.getChannelPeer(peer.URL())
if chPeer != nil {
peerConfig = &chPeer.PeerConfig
} else {
peerConfig, err = s.ctx.EndpointConfig().PeerConfigByURL(peer.URL())
if err != nil || peerConfig == nil {
//TODO there shouldn't be error when peerconfig not found, will be fixed
logger.Debugf("unable to get peer config from [%s] : error [%v]", peer.URL(), err)
continue
}
chPeer = s.getChannelPeer(peerConfig.URL)
}

logger.Debugf("Channel peer config for [%s]: %#v", peer.URL(), chPeer)

Expand All @@ -116,9 +123,9 @@ func (s *discoveryService) GetPeers() ([]fab.Peer, error) {
return eventEndpoints, nil
}

func (s *discoveryService) getChannelPeer(peerConfig *fab.PeerConfig) *fab.ChannelPeer {
func (s *discoveryService) getChannelPeer(url string) *fab.ChannelPeer {
for _, chpeer := range s.chPeers {
if chpeer.URL == peerConfig.URL {
if chpeer.URL == url {
return &chpeer
}
}
Expand Down
22 changes: 1 addition & 21 deletions test/integration/base_test_setup.go
Expand Up @@ -14,7 +14,6 @@ import (

"github.com/hyperledger/fabric-sdk-go/pkg/client/resmgmt"
"github.com/hyperledger/fabric-sdk-go/pkg/common/errors/retry"
"github.com/hyperledger/fabric-sdk-go/pkg/common/providers/core"
"github.com/hyperledger/fabric-sdk-go/pkg/common/providers/msp"
"github.com/hyperledger/fabric-sdk-go/pkg/fab"
packager "github.com/hyperledger/fabric-sdk-go/pkg/fab/ccpackager/gopackager"
Expand Down Expand Up @@ -86,7 +85,7 @@ func (setup *BaseSetupImpl) Initialize(sdk *fabsdk.FabricSDK) error {
}
}

targets, err := getOrgTargets(configBackend, setup.OrgID)
targets, err := OrgTargetPeers(configBackend, []string{setup.OrgID})
if err != nil {
return errors.Wrapf(err, "loading target peers from config failed")
}
Expand All @@ -112,25 +111,6 @@ func (setup *BaseSetupImpl) Initialize(sdk *fabsdk.FabricSDK) error {
return nil
}

func getOrgTargets(configBackend core.ConfigBackend, org string) ([]string, error) {

endpointConfig, err := fab.ConfigFromBackend(configBackend)
if err != nil {
return nil, errors.WithMessage(err, "reading config failed")
}

var targets []string

peerConfig, err := endpointConfig.PeersConfig(org)
if err != nil {
return nil, errors.WithMessage(err, "reading peer config failed")
}
for _, p := range peerConfig {
targets = append(targets, p.URL)
}
return targets, nil
}

// GetDeployPath ..
func GetDeployPath() string {
pwd, _ := os.Getwd()
Expand Down
40 changes: 0 additions & 40 deletions test/integration/env.go
Expand Up @@ -10,12 +10,8 @@ import (
"os"
"strings"

"regexp"

"github.com/hyperledger/fabric-sdk-go/pkg/common/providers/core"
"github.com/hyperledger/fabric-sdk-go/pkg/common/providers/fab"
"github.com/hyperledger/fabric-sdk-go/pkg/core/config"
"github.com/hyperledger/fabric-sdk-go/pkg/core/config/lookup"
"github.com/hyperledger/fabric-sdk-go/pkg/core/mocks"
"github.com/hyperledger/fabric-sdk-go/pkg/util/pathvar"
"github.com/spf13/viper"
Expand Down Expand Up @@ -93,42 +89,6 @@ func addLocalEntityMappingToBackend(backend core.ConfigBackend) (core.ConfigBack
backendMap := make(map[string]interface{})
backendMap["entityMatchers"] = myViper.Get("entityMatchers")

//TODO delete below lines once entity matchers issue is solved
// temporary fix starts here
re := regexp.MustCompile(".*:")
networkConfig := fab.NetworkConfig{}
configLookup := lookup.New(backend)

if err = configLookup.UnmarshalKey("orderers", &networkConfig.Orderers); err != nil {
return nil, err
}
if err = configLookup.UnmarshalKey("peers", &networkConfig.Peers); err != nil {
return nil, err
}
orderer, ok := networkConfig.Orderers["local.orderer.example.com"]
if ok {
orderer.URL = re.ReplaceAllString(orderer.URL, "localhost:")
networkConfig.Orderers["local.orderer.example.com"] = orderer
}

peer1, ok := networkConfig.Peers["local.peer0.org1.example.com"]
if ok {
peer1.URL = re.ReplaceAllString(peer1.URL, "localhost:")
peer1.EventURL = re.ReplaceAllString(peer1.EventURL, "localhost:")
networkConfig.Peers["local.peer0.org1.example.com"] = peer1
}

peer2, ok := networkConfig.Peers["local.peer0.org2.example.com"]
if ok {
peer2.URL = re.ReplaceAllString(peer2.URL, "localhost:")
peer2.EventURL = re.ReplaceAllString(peer2.EventURL, "localhost:")
networkConfig.Peers["local.peer0.org2.example.com"] = peer2
}

backendMap["orderers"] = networkConfig.Orderers
backendMap["peers"] = networkConfig.Peers
// temporary fix ends here

return &mocks.MockConfigBackend{KeyValueMap: backendMap, CustomBackend: backend}, nil

}
21 changes: 12 additions & 9 deletions test/integration/utils.go
Expand Up @@ -13,11 +13,14 @@ import (

"fmt"

"strings"

"github.com/hyperledger/fabric-sdk-go/pkg/client/resmgmt"
"github.com/hyperledger/fabric-sdk-go/pkg/common/errors/retry"
"github.com/hyperledger/fabric-sdk-go/pkg/common/providers/core"
fabApi "github.com/hyperledger/fabric-sdk-go/pkg/common/providers/fab"
"github.com/hyperledger/fabric-sdk-go/pkg/core/config/lookup"
"github.com/hyperledger/fabric-sdk-go/pkg/core/cryptosuite"
"github.com/hyperledger/fabric-sdk-go/pkg/fab"
"github.com/hyperledger/fabric-sdk-go/pkg/fabsdk"
"github.com/hyperledger/fabric-sdk-go/pkg/msp"
"github.com/pkg/errors"
Expand Down Expand Up @@ -129,19 +132,19 @@ func JoinChannel(sdk *fabsdk.FabricSDK, name, orgID string) (bool, error) {

// OrgTargetPeers determines peer endpoints for orgs
func OrgTargetPeers(configBackend core.ConfigBackend, orgs []string) ([]string, error) {
endpointConfig, err := fab.ConfigFromBackend(configBackend)
networkConfig := fabApi.NetworkConfig{}
err := lookup.New(configBackend).UnmarshalKey("organizations", &networkConfig.Organizations)
if err != nil {
return nil, errors.WithMessage(err, "reading endpoint config failed")
return nil, errors.WithMessage(err, "failed to get organizations from config ")
}

var peers []string
for _, org := range orgs {
peerConfig, err := endpointConfig.PeersConfig(org)
if err != nil {
return nil, errors.WithMessage(err, "reading peer config failed")
}
for _, p := range peerConfig {
peers = append(peers, p.URL)
orgConfig, ok := networkConfig.Organizations[strings.ToLower(org)]
if !ok {
continue
}
peers = append(peers, orgConfig.Peers...)
}
return peers, nil
}
Expand Down

0 comments on commit ed467a4

Please sign in to comment.