Skip to content

Commit

Permalink
construct unreconciled missing pvtdata (#1699)
Browse files Browse the repository at this point in the history
Signed-off-by: senthil <cendhu@gmail.com>
  • Loading branch information
cendhu authored and denyeart committed Sep 16, 2020
1 parent e500de9 commit bc00758
Show file tree
Hide file tree
Showing 2 changed files with 191 additions and 0 deletions.
25 changes: 25 additions & 0 deletions gossip/privdata/reconcile.go
Expand Up @@ -316,3 +316,28 @@ func (r *Reconciler) groupRwsetByBlock(elements []*protosgossip.PvtDataElement)
}
return rwSetByBlockByKeys
}

func constructUnreconciledMissingData(requestedMissingData privdatacommon.Dig2CollectionConfig, fetchedData []*protosgossip.PvtDataElement) ledger.MissingPvtDataInfo {
fetchedDataKeys := make(map[privdatacommon.DigKey]struct{})
for _, pvtData := range fetchedData {
key := privdatacommon.DigKey{
TxId: pvtData.Digest.TxId,
Namespace: pvtData.Digest.Namespace,
Collection: pvtData.Digest.Collection,
BlockSeq: pvtData.Digest.BlockSeq,
SeqInBlock: pvtData.Digest.SeqInBlock,
}
fetchedDataKeys[key] = struct{}{}
}

var unreconciledMissingDataInfo ledger.MissingPvtDataInfo
for key := range requestedMissingData {
if _, ok := fetchedDataKeys[key]; !ok {
if unreconciledMissingDataInfo == nil {
unreconciledMissingDataInfo = make(ledger.MissingPvtDataInfo)
}
unreconciledMissingDataInfo.Add(key.BlockSeq, key.SeqInBlock, key.Namespace, key.Collection)
}
}
return unreconciledMissingDataInfo
}
166 changes: 166 additions & 0 deletions gossip/privdata/reconcile_test.go
Expand Up @@ -23,6 +23,7 @@ import (
"github.com/hyperledger/fabric/gossip/privdata/mocks"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/mock"
"github.com/stretchr/testify/require"
)

func TestNoItemsToReconcile(t *testing.T) {
Expand Down Expand Up @@ -512,3 +513,168 @@ func TestFailuresWhileReconcilingMissingPvtData(t *testing.T) {
assert.Error(t, err)
assert.Contains(t, "failed get missing pvt data for recent blocks", err.Error())
}

func TestConstructUnreconciledMissingData(t *testing.T) {
requestedMissingData := func() privdatacommon.Dig2CollectionConfig {
return privdatacommon.Dig2CollectionConfig{
privdatacommon.DigKey{
TxId: "tx1",
Namespace: "ns1",
Collection: "coll1",
BlockSeq: 1,
SeqInBlock: 1,
}: nil,
privdatacommon.DigKey{
TxId: "tx1",
Namespace: "ns2",
Collection: "coll2",
BlockSeq: 1,
SeqInBlock: 1,
}: nil,
privdatacommon.DigKey{
TxId: "tx1",
Namespace: "ns3",
Collection: "coll3",
BlockSeq: 1,
SeqInBlock: 3,
}: nil,
privdatacommon.DigKey{
TxId: "tx2",
Namespace: "ns4",
Collection: "coll4",
BlockSeq: 4,
SeqInBlock: 4,
}: nil,
}
}

testCases := []struct {
description string
fetchedData []*gossip2.PvtDataElement
expectedUnreconciledMissingData ledger.MissingPvtDataInfo
}{
{
description: "none-reconciled",
fetchedData: nil,
expectedUnreconciledMissingData: ledger.MissingPvtDataInfo{
1: ledger.MissingBlockPvtdataInfo{
1: []*ledger.MissingCollectionPvtDataInfo{
{
Namespace: "ns1",
Collection: "coll1",
},
{
Namespace: "ns2",
Collection: "coll2",
},
},
3: []*ledger.MissingCollectionPvtDataInfo{
{
Namespace: "ns3",
Collection: "coll3",
},
},
},
4: ledger.MissingBlockPvtdataInfo{
4: []*ledger.MissingCollectionPvtDataInfo{
{
Namespace: "ns4",
Collection: "coll4",
},
},
},
},
},
{
description: "all-reconciled",
fetchedData: []*gossip2.PvtDataElement{
{
Digest: &gossip2.PvtDataDigest{
TxId: "tx1",
Namespace: "ns1",
Collection: "coll1",
BlockSeq: 1,
SeqInBlock: 1,
},
},
{
Digest: &gossip2.PvtDataDigest{
TxId: "tx1",
Namespace: "ns2",
Collection: "coll2",
BlockSeq: 1,
SeqInBlock: 1,
},
},
{
Digest: &gossip2.PvtDataDigest{
TxId: "tx1",
Namespace: "ns3",
Collection: "coll3",
BlockSeq: 1,
SeqInBlock: 3,
},
},
{
Digest: &gossip2.PvtDataDigest{
TxId: "tx2",
Namespace: "ns4",
Collection: "coll4",
BlockSeq: 4,
SeqInBlock: 4,
},
},
},
expectedUnreconciledMissingData: nil,
},
{
description: "some-unreconciled",
fetchedData: []*gossip2.PvtDataElement{
{
Digest: &gossip2.PvtDataDigest{
TxId: "tx1",
Namespace: "ns1",
Collection: "coll1",
BlockSeq: 1,
SeqInBlock: 1,
},
},
{
Digest: &gossip2.PvtDataDigest{
TxId: "tx1",
Namespace: "ns3",
Collection: "coll3",
BlockSeq: 1,
SeqInBlock: 3,
},
},
{
Digest: &gossip2.PvtDataDigest{
TxId: "tx2",
Namespace: "ns4",
Collection: "coll4",
BlockSeq: 4,
SeqInBlock: 4,
},
},
},
expectedUnreconciledMissingData: ledger.MissingPvtDataInfo{
1: ledger.MissingBlockPvtdataInfo{
1: []*ledger.MissingCollectionPvtDataInfo{
{
Namespace: "ns2",
Collection: "coll2",
},
},
},
},
},
}

for _, testCase := range testCases {
t.Run(testCase.description, func(t *testing.T) {
unreconciledData := constructUnreconciledMissingData(requestedMissingData(), testCase.fetchedData)
require.Equal(t, testCase.expectedUnreconciledMissingData, unreconciledData)
})
}
}

0 comments on commit bc00758

Please sign in to comment.