Skip to content

Commit 4c38b4f

Browse files
manish-sethinirrozenbaum
authored andcommitted
Declare ledger dependency for coll membership info
This CR enables ledger to take an external dependency that ledger can use for determining whether the peer is a member of a given collection on a channel. The intended usage of this dependency is to detemine a situation when the peer becomes a memeber of a new collection. FAB-11436 #done Change-Id: Id5d342ea12974aa16d84aaa6ae99db5e04716877 Signed-off-by: manish <manish.sethi@gmail.com> Signed-off-by: nirro <nirro@il.ibm.com>
1 parent 38ad642 commit 4c38b4f

File tree

4 files changed

+22
-16
lines changed

4 files changed

+22
-16
lines changed

core/common/privdata/membershipinfo.go

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -10,24 +10,20 @@ import (
1010
"github.com/hyperledger/fabric/protos/common"
1111
)
1212

13-
// MembershipInfoProvider interface defines an interface to check whether a peer is eligible to a collection or not
14-
type MembershipInfoProvider interface {
15-
// AmMemberOf checks whether the current peer is a member of the given collection config
16-
AmMemberOf(collectionPolicyConfig *common.CollectionPolicyConfig) (bool, error)
17-
}
18-
19-
type membershipProvider struct {
13+
// MembershipProvider can be used to check whether a peer is eligible to a collection or not
14+
type MembershipProvider struct {
2015
selfSignedData common.SignedData
2116
cf CollectionFilter
22-
channelName string
2317
}
2418

25-
func NewMembershipInfoProvider(channelName string, selfSignedData common.SignedData, filter CollectionFilter) MembershipInfoProvider {
26-
return &membershipProvider{channelName: channelName, selfSignedData: selfSignedData, cf: filter}
19+
// NewMembershipInfoProvider returns MembershipProvider
20+
func NewMembershipInfoProvider(selfSignedData common.SignedData, filter CollectionFilter) *MembershipProvider {
21+
return &MembershipProvider{selfSignedData: selfSignedData, cf: filter}
2722
}
2823

29-
func (m *membershipProvider) AmMemberOf(collectionPolicyConfig *common.CollectionPolicyConfig) (bool, error) {
30-
filt, err := m.cf.AccessFilter(m.channelName, collectionPolicyConfig)
24+
// AmMemberOf checks whether the current peer is a member of the given collection config
25+
func (m *MembershipProvider) AmMemberOf(channelName string, collectionPolicyConfig *common.CollectionPolicyConfig) (bool, error) {
26+
filt, err := m.cf.AccessFilter(channelName, collectionPolicyConfig)
3127
if err != nil {
3228
return false, err
3329
}

core/common/privdata/membershipinfo_test.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,18 +25,18 @@ func TestMembershipInfoProvider(t *testing.T) {
2525
collectionStore := NewSimpleCollectionStore(&mockStoreSupport{})
2626

2727
// verify membership provider returns true
28-
membershipProvider := NewMembershipInfoProvider("test1", peerSelfSignedData, collectionStore)
29-
res, err := membershipProvider.AmMemberOf(getAccessPolicy([]string{"peer0", "peer1"}))
28+
membershipProvider := NewMembershipInfoProvider(peerSelfSignedData, collectionStore)
29+
res, err := membershipProvider.AmMemberOf("test1", getAccessPolicy([]string{"peer0", "peer1"}))
3030
assert.True(t, res)
3131
assert.Nil(t, err)
3232

3333
// verify membership provider returns false
34-
res, err = membershipProvider.AmMemberOf(getAccessPolicy([]string{"peer2", "peer3"}))
34+
res, err = membershipProvider.AmMemberOf("test1", getAccessPolicy([]string{"peer2", "peer3"}))
3535
assert.False(t, res)
3636
assert.Nil(t, err)
3737

3838
// verify membership provider returns nil and error
39-
res, err = membershipProvider.AmMemberOf(nil)
39+
res, err = membershipProvider.AmMemberOf("test1", nil)
4040
assert.False(t, res)
4141
assert.Error(t, err)
4242
assert.Equal(t, "Collection config policy is nil", err.Error())

core/ledger/ledger_interface.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import (
1919
type Initializer struct {
2020
StateListeners []StateListener
2121
DeployedChaincodeInfoProvider DeployedChaincodeInfoProvider
22+
MembershipInfoProvider MembershipInfoProvider
2223
}
2324

2425
// PeerLedgerProvider provides handle to ledger instances
@@ -414,4 +415,11 @@ type ChaincodeLifecycleDetails struct {
414415
CollectionsRemoved []string // names of the collections that are removed
415416
}
416417

418+
// MembershipInfoProvider is a dependency that is used by ledger to determine whether the current peer is
419+
// a member of a collection. Gossip module is expected to provide the dependency to ledger
420+
type MembershipInfoProvider interface {
421+
// AmMemberOf checks whether the current peer is a member of the given collection
422+
AmMemberOf(channelName string, collectionPolicyConfig *common.CollectionPolicyConfig) (bool, error)
423+
}
424+
417425
//go:generate counterfeiter -o mock/deployed_ccinfo_provider.go -fake-name DeployedChaincodeInfoProvider . DeployedChaincodeInfoProvider

core/ledger/ledgermgmt/ledger_mgmt.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ type Initializer struct {
3939
CustomTxProcessors customtx.Processors
4040
PlatformRegistry *platforms.Registry
4141
DeployedChaincodeInfoProvider ledger.DeployedChaincodeInfoProvider
42+
MembershipInfoProvider ledger.MembershipInfoProvider
4243
}
4344

4445
// Initialize initializes ledgermgmt
@@ -64,6 +65,7 @@ func initialize(initializer *Initializer) {
6465
provider.Initialize(&ledger.Initializer{
6566
StateListeners: finalStateListeners,
6667
DeployedChaincodeInfoProvider: initializer.DeployedChaincodeInfoProvider,
68+
MembershipInfoProvider: initializer.MembershipInfoProvider,
6769
})
6870

6971
ledgerProvider = provider

0 commit comments

Comments
 (0)