From 2a16532c506ad3dcedddaa4462ae82623cd4d39b Mon Sep 17 00:00:00 2001 From: manish Date: Thu, 2 Feb 2017 20:52:34 +0530 Subject: [PATCH] Move Blockstorage code under /fabric/common package https://jira.hyperledger.org/browse/FAB-2022 This changes introduced by this CR - Moves the block storage code from package core/ledger/blkstorage to common/ledger/blkstorage - Splits the ledger_interface.go so as to move common interfaces and data type to common/ledger package - Moves some of the util functions to common/ledger package - Moves core/ledger/ordererledger package to orderer/ledger/fsledger orderer folks can futher rename/refactor this as seems suitable to them Change-Id: I759e16f00dc2ec9bb62196121083cf48eae76948 Signed-off-by: manish --- .../ledger/blkstorage/blockstorage.go | 6 +- .../fsblkstorage/block_serialization.go | 2 +- .../fsblkstorage/block_serialization_test.go | 2 +- .../blkstorage/fsblkstorage/block_stream.go | 0 .../fsblkstorage/block_stream_test.go | 2 +- .../blkstorage/fsblkstorage/blockfile_mgr.go | 17 +- .../fsblkstorage/blockfile_mgr_test.go | 5 +- .../blkstorage/fsblkstorage/blockfile_rw.go | 0 .../fsblkstorage/blockfile_scan_test.go | 4 +- .../blkstorage/fsblkstorage/blockindex.go | 6 +- .../fsblkstorage/blockindex_test.go | 4 +- .../blkstorage/fsblkstorage/blocks_itr.go | 2 +- .../fsblkstorage/blocks_itr_test.go | 2 +- .../ledger/blkstorage/fsblkstorage/config.go | 0 .../blkstorage/fsblkstorage/fs_blockstore.go | 9 +- .../fsblkstorage/fs_blockstore_provider.go | 6 +- .../fs_blockstore_provider_test.go | 6 +- .../blkstorage/fsblkstorage/pkg_test.go | 4 +- common/ledger/ledger_interface.go | 60 +++++++ .../ledger/testutil/test_helper.go | 7 +- common/ledger/testutil/test_util.go | 153 ++++++++++++++++++ common/ledger/testutil/test_util_test.go | 23 +++ {core => common}/ledger/util/ioutil.go | 0 {core => common}/ledger/util/ioutil_test.go | 2 +- .../util/leveldbhelper/leveldb_helper.go | 2 +- .../util/leveldbhelper/leveldb_helper_test.go | 2 +- .../util/leveldbhelper/leveldb_provider.go | 0 {core => common}/ledger/util/protobuf_util.go | 0 .../ledger/util/protobuf_util_test.go | 2 +- common/ledger/util/util.go | 62 +++++++ {core => common}/ledger/util/util_test.go | 0 core/chaincode/handler.go | 15 +- core/committer/committer_impl.go | 3 +- core/committer/committer_test.go | 8 +- .../committer/txvalidator/txvalidator_test.go | 5 +- .../dockercontroller/dockercontroller_test.go | 2 +- .../history/historydb/histmgr_helper.go | 2 +- .../history/historydb/histmgr_helper_test.go | 2 +- .../historyleveldb/historyleveldb.go | 2 +- .../historyleveldb_query_executer.go | 7 +- .../historyleveldb/historyleveldb_test.go | 2 +- .../historydb/historyleveldb/pkg_test.go | 2 +- core/ledger/kvledger/kv_ledger.go | 10 +- core/ledger/kvledger/kv_ledger_provider.go | 6 +- .../kvledger/kv_ledger_provider_test.go | 2 +- core/ledger/kvledger/kv_ledger_test.go | 31 ++-- .../txmgmt/rwset/rwset_holder_test.go | 2 +- .../kvledger/txmgmt/rwset/rwset_test.go | 2 +- .../txmgmt/statedb/commontests/test_common.go | 2 +- .../statedb/statecouchdb/statecouchdb_test.go | 5 +- .../kvledger/txmgmt/statedb/statedb_test.go | 2 +- .../statedb/stateleveldb/stateleveldb.go | 2 +- .../statedb/stateleveldb/stateleveldb_test.go | 2 +- .../kvledger/txmgmt/statedb/util_test.go | 2 +- .../txmgmt/txmgr/commontests/pkg_test.go | 5 +- .../txmgmt/txmgr/commontests/txmgr_test.go | 2 +- .../txmgmt/txmgr/lockbasedtxmgr/helper.go | 9 +- .../lockbased_query_executer.go | 2 +- .../statebasedval/combined_iterator_test.go | 2 +- .../state_based_validator_test.go | 2 +- .../ledger/kvledger/txmgmt/version/version.go | 2 +- .../kvledger/txmgmt/version/version_test.go | 2 +- core/ledger/ledger_interface.go | 72 +-------- .../ledger/ledgerconfig/ledger_config_test.go | 15 +- core/ledger/ledgermgmt/ledger_mgmt_test.go | 2 +- core/ledger/testutil/test_util.go | 152 ----------------- core/ledger/util/couchdb/couchdb_test.go | 5 +- core/ledger/util/couchdb/couchdbutil_test.go | 5 +- core/ledger/util/util.go | 42 ----- core/scc/qscc/querier.go | 5 +- .../ledger/fsledger/fsledger.go | 33 ++-- .../ledger/fsledger/fsledger_provider.go | 31 ++-- .../ledger/fsledger/fsledger_test.go | 12 +- orderer/ledger/fsledger/ledger_interface.go | 40 +++++ protos/common/common.pb.go | 2 + protos/common/ledger.pb.go | 48 ++++++ protos/common/ledger.proto | 29 ++++ protos/common/msp_principal.pb.go | 14 +- protos/common/policies.pb.go | 14 +- protos/peer/admin.pb.go | 1 - protos/peer/peer.pb.go | 50 ++---- protos/peer/peer.proto | 10 -- 82 files changed, 626 insertions(+), 490 deletions(-) rename {core => common}/ledger/blkstorage/blockstorage.go (94%) rename {core => common}/ledger/blkstorage/fsblkstorage/block_serialization.go (98%) rename {core => common}/ledger/blkstorage/fsblkstorage/block_serialization_test.go (97%) rename {core => common}/ledger/blkstorage/fsblkstorage/block_stream.go (100%) rename {core => common}/ledger/blkstorage/fsblkstorage/block_stream_test.go (98%) rename {core => common}/ledger/blkstorage/fsblkstorage/blockfile_mgr.go (98%) rename {core => common}/ledger/blkstorage/fsblkstorage/blockfile_mgr_test.go (97%) rename {core => common}/ledger/blkstorage/fsblkstorage/blockfile_rw.go (100%) rename {core => common}/ledger/blkstorage/fsblkstorage/blockfile_scan_test.go (96%) rename {core => common}/ledger/blkstorage/fsblkstorage/blockindex.go (97%) rename {core => common}/ledger/blkstorage/fsblkstorage/blockindex_test.go (98%) rename {core => common}/ledger/blkstorage/fsblkstorage/blocks_itr.go (98%) rename {core => common}/ledger/blkstorage/fsblkstorage/blocks_itr_test.go (97%) rename {core => common}/ledger/blkstorage/fsblkstorage/config.go (100%) rename {core => common}/ledger/blkstorage/fsblkstorage/fs_blockstore.go (89%) rename {core => common}/ledger/blkstorage/fsblkstorage/fs_blockstore_provider.go (92%) rename {core => common}/ledger/blkstorage/fsblkstorage/fs_blockstore_provider_test.go (94%) rename {core => common}/ledger/blkstorage/fsblkstorage/pkg_test.go (96%) create mode 100644 common/ledger/ledger_interface.go rename {core => common}/ledger/testutil/test_helper.go (94%) create mode 100644 common/ledger/testutil/test_util.go create mode 100644 common/ledger/testutil/test_util_test.go rename {core => common}/ledger/util/ioutil.go (100%) rename {core => common}/ledger/util/ioutil_test.go (98%) rename {core => common}/ledger/util/leveldbhelper/leveldb_helper.go (98%) rename {core => common}/ledger/util/leveldbhelper/leveldb_helper_test.go (98%) rename {core => common}/ledger/util/leveldbhelper/leveldb_provider.go (100%) rename {core => common}/ledger/util/protobuf_util.go (100%) rename {core => common}/ledger/util/protobuf_util_test.go (95%) create mode 100644 common/ledger/util/util.go rename {core => common}/ledger/util/util_test.go (100%) rename core/ledger/ordererledger/fs_ordererledger.go => orderer/ledger/fsledger/fsledger.go (55%) rename core/ledger/ordererledger/fs_ordererledger_provider.go => orderer/ledger/fsledger/fsledger_provider.go (60%) rename core/ledger/ordererledger/fs_ordererledger_test.go => orderer/ledger/fsledger/fsledger_test.go (87%) create mode 100644 orderer/ledger/fsledger/ledger_interface.go create mode 100644 protos/common/ledger.pb.go create mode 100644 protos/common/ledger.proto diff --git a/core/ledger/blkstorage/blockstorage.go b/common/ledger/blkstorage/blockstorage.go similarity index 94% rename from core/ledger/blkstorage/blockstorage.go rename to common/ledger/blkstorage/blockstorage.go index 2f880e8232b..0b130bc5016 100644 --- a/core/ledger/blkstorage/blockstorage.go +++ b/common/ledger/blkstorage/blockstorage.go @@ -19,10 +19,8 @@ package blkstorage import ( "errors" - "github.com/hyperledger/fabric/core/ledger" - + "github.com/hyperledger/fabric/common/ledger" "github.com/hyperledger/fabric/protos/common" - pb "github.com/hyperledger/fabric/protos/peer" ) // IndexableAttr represents an indexable attribute @@ -62,7 +60,7 @@ type BlockStoreProvider interface { // of type `IndexConfig` which configures the block store on what items should be indexed type BlockStore interface { AddBlock(block *common.Block) error - GetBlockchainInfo() (*pb.BlockchainInfo, error) + GetBlockchainInfo() (*common.BlockchainInfo, error) RetrieveBlocks(startNum uint64) (ledger.ResultsIterator, error) RetrieveBlockByHash(blockHash []byte) (*common.Block, error) RetrieveBlockByNumber(blockNum uint64) (*common.Block, error) // blockNum of math.MaxUint64 will return last block diff --git a/core/ledger/blkstorage/fsblkstorage/block_serialization.go b/common/ledger/blkstorage/fsblkstorage/block_serialization.go similarity index 98% rename from core/ledger/blkstorage/fsblkstorage/block_serialization.go rename to common/ledger/blkstorage/fsblkstorage/block_serialization.go index 809dcd46648..9019d44f479 100644 --- a/core/ledger/blkstorage/fsblkstorage/block_serialization.go +++ b/common/ledger/blkstorage/fsblkstorage/block_serialization.go @@ -20,7 +20,7 @@ import ( "fmt" "github.com/golang/protobuf/proto" - ledgerutil "github.com/hyperledger/fabric/core/ledger/util" + ledgerutil "github.com/hyperledger/fabric/common/ledger/util" "github.com/hyperledger/fabric/protos/common" "github.com/hyperledger/fabric/protos/utils" ) diff --git a/core/ledger/blkstorage/fsblkstorage/block_serialization_test.go b/common/ledger/blkstorage/fsblkstorage/block_serialization_test.go similarity index 97% rename from core/ledger/blkstorage/fsblkstorage/block_serialization_test.go rename to common/ledger/blkstorage/fsblkstorage/block_serialization_test.go index 4313d52be7a..ca714916fdc 100644 --- a/core/ledger/blkstorage/fsblkstorage/block_serialization_test.go +++ b/common/ledger/blkstorage/fsblkstorage/block_serialization_test.go @@ -20,7 +20,7 @@ import ( "testing" "github.com/golang/protobuf/proto" - "github.com/hyperledger/fabric/core/ledger/testutil" + "github.com/hyperledger/fabric/common/ledger/testutil" putils "github.com/hyperledger/fabric/protos/utils" ) diff --git a/core/ledger/blkstorage/fsblkstorage/block_stream.go b/common/ledger/blkstorage/fsblkstorage/block_stream.go similarity index 100% rename from core/ledger/blkstorage/fsblkstorage/block_stream.go rename to common/ledger/blkstorage/fsblkstorage/block_stream.go diff --git a/core/ledger/blkstorage/fsblkstorage/block_stream_test.go b/common/ledger/blkstorage/fsblkstorage/block_stream_test.go similarity index 98% rename from core/ledger/blkstorage/fsblkstorage/block_stream_test.go rename to common/ledger/blkstorage/fsblkstorage/block_stream_test.go index 55481fb9b80..4063b6f97e3 100644 --- a/core/ledger/blkstorage/fsblkstorage/block_stream_test.go +++ b/common/ledger/blkstorage/fsblkstorage/block_stream_test.go @@ -20,7 +20,7 @@ import ( "testing" "github.com/golang/protobuf/proto" - "github.com/hyperledger/fabric/core/ledger/testutil" + "github.com/hyperledger/fabric/common/ledger/testutil" ) func TestBlockfileStream(t *testing.T) { diff --git a/core/ledger/blkstorage/fsblkstorage/blockfile_mgr.go b/common/ledger/blkstorage/fsblkstorage/blockfile_mgr.go similarity index 98% rename from core/ledger/blkstorage/fsblkstorage/blockfile_mgr.go rename to common/ledger/blkstorage/fsblkstorage/blockfile_mgr.go index 19925e330fa..a465aa97d5b 100644 --- a/core/ledger/blkstorage/fsblkstorage/blockfile_mgr.go +++ b/common/ledger/blkstorage/fsblkstorage/blockfile_mgr.go @@ -23,11 +23,10 @@ import ( "sync/atomic" "github.com/golang/protobuf/proto" - "github.com/hyperledger/fabric/core/ledger/blkstorage" - "github.com/hyperledger/fabric/core/ledger/util" - "github.com/hyperledger/fabric/core/ledger/util/leveldbhelper" + "github.com/hyperledger/fabric/common/ledger/blkstorage" + "github.com/hyperledger/fabric/common/ledger/util" + "github.com/hyperledger/fabric/common/ledger/util/leveldbhelper" "github.com/hyperledger/fabric/protos/common" - pb "github.com/hyperledger/fabric/protos/peer" putil "github.com/hyperledger/fabric/protos/utils" "github.com/op/go-logging" ) @@ -153,7 +152,7 @@ func newBlockfileMgr(id string, conf *Conf, indexConfig *blkstorage.IndexConfig, mgr.syncIndex() // init BlockchainInfo for external API's - bcInfo := &pb.BlockchainInfo{ + bcInfo := &common.BlockchainInfo{ Height: 0, CurrentBlockHash: nil, PreviousBlockHash: nil} @@ -166,7 +165,7 @@ func newBlockfileMgr(id string, conf *Conf, indexConfig *blkstorage.IndexConfig, } lastBlockHash := lastBlockHeader.Hash() previousBlockHash := lastBlockHeader.PreviousHash - bcInfo = &pb.BlockchainInfo{ + bcInfo = &common.BlockchainInfo{ Height: cpInfo.lastBlockNumber, CurrentBlockHash: lastBlockHash, PreviousBlockHash: previousBlockHash} @@ -373,8 +372,8 @@ func (mgr *blockfileMgr) syncIndex() error { return nil } -func (mgr *blockfileMgr) getBlockchainInfo() *pb.BlockchainInfo { - return mgr.bcInfo.Load().(*pb.BlockchainInfo) +func (mgr *blockfileMgr) getBlockchainInfo() *common.BlockchainInfo { + return mgr.bcInfo.Load().(*common.BlockchainInfo) } func (mgr *blockfileMgr) updateCheckpoint(cpInfo *checkpointInfo) { @@ -387,7 +386,7 @@ func (mgr *blockfileMgr) updateCheckpoint(cpInfo *checkpointInfo) { func (mgr *blockfileMgr) updateBlockchainInfo(latestBlockHash []byte, latestBlock *common.Block) { currentBCInfo := mgr.getBlockchainInfo() - newBCInfo := &pb.BlockchainInfo{ + newBCInfo := &common.BlockchainInfo{ Height: currentBCInfo.Height + 1, CurrentBlockHash: latestBlockHash, PreviousBlockHash: latestBlock.Header.PreviousHash} diff --git a/core/ledger/blkstorage/fsblkstorage/blockfile_mgr_test.go b/common/ledger/blkstorage/fsblkstorage/blockfile_mgr_test.go similarity index 97% rename from core/ledger/blkstorage/fsblkstorage/blockfile_mgr_test.go rename to common/ledger/blkstorage/fsblkstorage/blockfile_mgr_test.go index 6f7dc854df9..4cb6a21281a 100644 --- a/core/ledger/blkstorage/fsblkstorage/blockfile_mgr_test.go +++ b/common/ledger/blkstorage/fsblkstorage/blockfile_mgr_test.go @@ -21,10 +21,9 @@ import ( "testing" "github.com/golang/protobuf/proto" - "github.com/hyperledger/fabric/core/ledger/testutil" + "github.com/hyperledger/fabric/common/ledger/testutil" "github.com/hyperledger/fabric/protos/common" - pb "github.com/hyperledger/fabric/protos/peer" putil "github.com/hyperledger/fabric/protos/utils" ) @@ -127,7 +126,7 @@ func TestBlockfileMgrBlockchainInfo(t *testing.T) { defer blkfileMgrWrapper.close() bcInfo := blkfileMgrWrapper.blockfileMgr.getBlockchainInfo() - testutil.AssertEquals(t, bcInfo, &pb.BlockchainInfo{Height: 0, CurrentBlockHash: nil, PreviousBlockHash: nil}) + testutil.AssertEquals(t, bcInfo, &common.BlockchainInfo{Height: 0, CurrentBlockHash: nil, PreviousBlockHash: nil}) blocks := testutil.ConstructTestBlocks(t, 10) blkfileMgrWrapper.addBlocks(blocks) diff --git a/core/ledger/blkstorage/fsblkstorage/blockfile_rw.go b/common/ledger/blkstorage/fsblkstorage/blockfile_rw.go similarity index 100% rename from core/ledger/blkstorage/fsblkstorage/blockfile_rw.go rename to common/ledger/blkstorage/fsblkstorage/blockfile_rw.go diff --git a/core/ledger/blkstorage/fsblkstorage/blockfile_scan_test.go b/common/ledger/blkstorage/fsblkstorage/blockfile_scan_test.go similarity index 96% rename from core/ledger/blkstorage/fsblkstorage/blockfile_scan_test.go rename to common/ledger/blkstorage/fsblkstorage/blockfile_scan_test.go index 1da3664c45b..92f7e6a38ed 100644 --- a/core/ledger/blkstorage/fsblkstorage/blockfile_scan_test.go +++ b/common/ledger/blkstorage/fsblkstorage/blockfile_scan_test.go @@ -20,8 +20,8 @@ import ( "os" "testing" - "github.com/hyperledger/fabric/core/ledger/testutil" - "github.com/hyperledger/fabric/core/ledger/util" + "github.com/hyperledger/fabric/common/ledger/testutil" + "github.com/hyperledger/fabric/common/ledger/util" "github.com/hyperledger/fabric/protos/common" ) diff --git a/core/ledger/blkstorage/fsblkstorage/blockindex.go b/common/ledger/blkstorage/fsblkstorage/blockindex.go similarity index 97% rename from core/ledger/blkstorage/fsblkstorage/blockindex.go rename to common/ledger/blkstorage/fsblkstorage/blockindex.go index a783056dc1d..75f1777a24f 100644 --- a/core/ledger/blkstorage/fsblkstorage/blockindex.go +++ b/common/ledger/blkstorage/fsblkstorage/blockindex.go @@ -20,9 +20,9 @@ import ( "fmt" "github.com/golang/protobuf/proto" - "github.com/hyperledger/fabric/core/ledger/blkstorage" - "github.com/hyperledger/fabric/core/ledger/util" - "github.com/hyperledger/fabric/core/ledger/util/leveldbhelper" + "github.com/hyperledger/fabric/common/ledger/blkstorage" + "github.com/hyperledger/fabric/common/ledger/util" + "github.com/hyperledger/fabric/common/ledger/util/leveldbhelper" ) const ( diff --git a/core/ledger/blkstorage/fsblkstorage/blockindex_test.go b/common/ledger/blkstorage/fsblkstorage/blockindex_test.go similarity index 98% rename from core/ledger/blkstorage/fsblkstorage/blockindex_test.go rename to common/ledger/blkstorage/fsblkstorage/blockindex_test.go index 5757ea0a530..0aaf34e53f3 100644 --- a/core/ledger/blkstorage/fsblkstorage/blockindex_test.go +++ b/common/ledger/blkstorage/fsblkstorage/blockindex_test.go @@ -20,8 +20,8 @@ import ( "fmt" "testing" - "github.com/hyperledger/fabric/core/ledger/blkstorage" - "github.com/hyperledger/fabric/core/ledger/testutil" + "github.com/hyperledger/fabric/common/ledger/blkstorage" + "github.com/hyperledger/fabric/common/ledger/testutil" putil "github.com/hyperledger/fabric/protos/utils" ) diff --git a/core/ledger/blkstorage/fsblkstorage/blocks_itr.go b/common/ledger/blkstorage/fsblkstorage/blocks_itr.go similarity index 98% rename from core/ledger/blkstorage/fsblkstorage/blocks_itr.go rename to common/ledger/blkstorage/fsblkstorage/blocks_itr.go index 1d351a90348..566e807ad55 100644 --- a/core/ledger/blkstorage/fsblkstorage/blocks_itr.go +++ b/common/ledger/blkstorage/fsblkstorage/blocks_itr.go @@ -20,7 +20,7 @@ import ( "fmt" "sync" - "github.com/hyperledger/fabric/core/ledger" + "github.com/hyperledger/fabric/common/ledger" "github.com/hyperledger/fabric/protos/common" ) diff --git a/core/ledger/blkstorage/fsblkstorage/blocks_itr_test.go b/common/ledger/blkstorage/fsblkstorage/blocks_itr_test.go similarity index 97% rename from core/ledger/blkstorage/fsblkstorage/blocks_itr_test.go rename to common/ledger/blkstorage/fsblkstorage/blocks_itr_test.go index 1e366d0a4ea..89de399eab0 100644 --- a/core/ledger/blkstorage/fsblkstorage/blocks_itr_test.go +++ b/common/ledger/blkstorage/fsblkstorage/blocks_itr_test.go @@ -20,7 +20,7 @@ import ( "testing" "time" - "github.com/hyperledger/fabric/core/ledger/testutil" + "github.com/hyperledger/fabric/common/ledger/testutil" "github.com/hyperledger/fabric/protos/common" ) diff --git a/core/ledger/blkstorage/fsblkstorage/config.go b/common/ledger/blkstorage/fsblkstorage/config.go similarity index 100% rename from core/ledger/blkstorage/fsblkstorage/config.go rename to common/ledger/blkstorage/fsblkstorage/config.go diff --git a/core/ledger/blkstorage/fsblkstorage/fs_blockstore.go b/common/ledger/blkstorage/fsblkstorage/fs_blockstore.go similarity index 89% rename from core/ledger/blkstorage/fsblkstorage/fs_blockstore.go rename to common/ledger/blkstorage/fsblkstorage/fs_blockstore.go index fc58b860d89..89afadf58b4 100644 --- a/core/ledger/blkstorage/fsblkstorage/fs_blockstore.go +++ b/common/ledger/blkstorage/fsblkstorage/fs_blockstore.go @@ -17,12 +17,11 @@ limitations under the License. package fsblkstorage import ( - "github.com/hyperledger/fabric/core/ledger" - "github.com/hyperledger/fabric/core/ledger/blkstorage" - "github.com/hyperledger/fabric/core/ledger/util/leveldbhelper" + "github.com/hyperledger/fabric/common/ledger" + "github.com/hyperledger/fabric/common/ledger/blkstorage" + "github.com/hyperledger/fabric/common/ledger/util/leveldbhelper" "github.com/hyperledger/fabric/protos/common" - pb "github.com/hyperledger/fabric/protos/peer" ) // fsBlockStore - filesystem based implementation for `BlockStore` @@ -44,7 +43,7 @@ func (store *fsBlockStore) AddBlock(block *common.Block) error { } // GetBlockchainInfo returns the current info about blockchain -func (store *fsBlockStore) GetBlockchainInfo() (*pb.BlockchainInfo, error) { +func (store *fsBlockStore) GetBlockchainInfo() (*common.BlockchainInfo, error) { return store.fileMgr.getBlockchainInfo(), nil } diff --git a/core/ledger/blkstorage/fsblkstorage/fs_blockstore_provider.go b/common/ledger/blkstorage/fsblkstorage/fs_blockstore_provider.go similarity index 92% rename from core/ledger/blkstorage/fsblkstorage/fs_blockstore_provider.go rename to common/ledger/blkstorage/fsblkstorage/fs_blockstore_provider.go index f91a6b5c1b9..4f7e4de0d11 100644 --- a/core/ledger/blkstorage/fsblkstorage/fs_blockstore_provider.go +++ b/common/ledger/blkstorage/fsblkstorage/fs_blockstore_provider.go @@ -17,9 +17,9 @@ limitations under the License. package fsblkstorage import ( - "github.com/hyperledger/fabric/core/ledger/blkstorage" - "github.com/hyperledger/fabric/core/ledger/util" - "github.com/hyperledger/fabric/core/ledger/util/leveldbhelper" + "github.com/hyperledger/fabric/common/ledger/blkstorage" + "github.com/hyperledger/fabric/common/ledger/util" + "github.com/hyperledger/fabric/common/ledger/util/leveldbhelper" ) // FsBlockstoreProvider provides handle to block storage - this is not thread-safe diff --git a/core/ledger/blkstorage/fsblkstorage/fs_blockstore_provider_test.go b/common/ledger/blkstorage/fsblkstorage/fs_blockstore_provider_test.go similarity index 94% rename from core/ledger/blkstorage/fsblkstorage/fs_blockstore_provider_test.go rename to common/ledger/blkstorage/fsblkstorage/fs_blockstore_provider_test.go index 16488cecf43..a61d138ee24 100644 --- a/core/ledger/blkstorage/fsblkstorage/fs_blockstore_provider_test.go +++ b/common/ledger/blkstorage/fsblkstorage/fs_blockstore_provider_test.go @@ -21,9 +21,9 @@ import ( "fmt" - "github.com/hyperledger/fabric/core/ledger" - "github.com/hyperledger/fabric/core/ledger/blkstorage" - "github.com/hyperledger/fabric/core/ledger/testutil" + "github.com/hyperledger/fabric/common/ledger" + "github.com/hyperledger/fabric/common/ledger/blkstorage" + "github.com/hyperledger/fabric/common/ledger/testutil" "github.com/hyperledger/fabric/protos/common" ) diff --git a/core/ledger/blkstorage/fsblkstorage/pkg_test.go b/common/ledger/blkstorage/fsblkstorage/pkg_test.go similarity index 96% rename from core/ledger/blkstorage/fsblkstorage/pkg_test.go rename to common/ledger/blkstorage/fsblkstorage/pkg_test.go index 4a3c0b96fa9..a14aa3e2d58 100644 --- a/core/ledger/blkstorage/fsblkstorage/pkg_test.go +++ b/common/ledger/blkstorage/fsblkstorage/pkg_test.go @@ -22,8 +22,8 @@ import ( "os" "testing" - "github.com/hyperledger/fabric/core/ledger/blkstorage" - "github.com/hyperledger/fabric/core/ledger/testutil" + "github.com/hyperledger/fabric/common/ledger/blkstorage" + "github.com/hyperledger/fabric/common/ledger/testutil" "github.com/hyperledger/fabric/protos/common" ) diff --git a/common/ledger/ledger_interface.go b/common/ledger/ledger_interface.go new file mode 100644 index 00000000000..6a9d92f1484 --- /dev/null +++ b/common/ledger/ledger_interface.go @@ -0,0 +1,60 @@ +/* +Copyright IBM Corp. 2016 All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package ledger + +import ( + "github.com/hyperledger/fabric/protos/common" +) + +// Ledger captures the methods that are common across the 'PeerLedger', 'OrdererLedger', and 'ValidatedLedger' +type Ledger interface { + // GetBlockchainInfo returns basic info about blockchain + GetBlockchainInfo() (*common.BlockchainInfo, error) + // GetBlockByNumber returns block at a given height + // blockNumber of math.MaxUint64 will return last block + GetBlockByNumber(blockNumber uint64) (*common.Block, error) + // GetBlocksIterator returns an iterator that starts from `startBlockNumber`(inclusive). + // The iterator is a blocking iterator i.e., it blocks till the next block gets available in the ledger + // ResultsIterator contains type BlockHolder + GetBlocksIterator(startBlockNumber uint64) (ResultsIterator, error) + // Close closes the ledger + Close() + // Commit adds a new block + Commit(block *common.Block) error +} + +// ResultsIterator - an iterator for query result set +type ResultsIterator interface { + // Next returns the next item in the result set. The `QueryResult` is expected to be nil when + // the iterator gets exhausted + Next() (QueryResult, error) + // Close releases resources occupied by the iterator + Close() +} + +// QueryResult - a general interface for supporting different types of query results. Actual types differ for different queries +type QueryResult interface{} + +// BlockHolder holds block returned by the iterator in GetBlocksIterator. +// The sole purpose of this holder is to avoid desrialization if block is desired in raw bytes form (e.g., for transfer) +type BlockHolder interface { + GetBlock() *common.Block + GetBlockBytes() []byte +} + +// PrunePolicy - a general interface for supporting different pruning policies +type PrunePolicy interface{} diff --git a/core/ledger/testutil/test_helper.go b/common/ledger/testutil/test_helper.go similarity index 94% rename from core/ledger/testutil/test_helper.go rename to common/ledger/testutil/test_helper.go index 703f0e3aa14..e224bd87ca1 100644 --- a/core/ledger/testutil/test_helper.go +++ b/common/ledger/testutil/test_helper.go @@ -22,7 +22,6 @@ import ( "github.com/golang/protobuf/proto" "github.com/hyperledger/fabric/common/util" "github.com/hyperledger/fabric/protos/common" - pb "github.com/hyperledger/fabric/protos/peer" ptestutils "github.com/hyperledger/fabric/protos/testutils" ) @@ -93,14 +92,14 @@ func ConstructTestBlocks(t *testing.T, numBlocks int) []*common.Block { // ConstructTransaction constructs a transaction for testing func ConstructTransaction(t *testing.T, simulationResults []byte, sign bool) (*common.Envelope, string, error) { ccName := "foo" - response := &pb.Response{Status: 200} + //response := &pb.Response{Status: 200} txID := util.GenerateUUID() var txEnv *common.Envelope var err error if sign { - txEnv, err = ptestutils.ConstructSingedTxEnvWithDefaultSigner(txID, util.GetTestChainID(), ccName, response, simulationResults, nil, nil) + txEnv, err = ptestutils.ConstructSingedTxEnvWithDefaultSigner(txID, util.GetTestChainID(), ccName, nil, simulationResults, nil, nil) } else { - txEnv, err = ptestutils.ConstructUnsingedTxEnv(txID, util.GetTestChainID(), ccName, response, simulationResults, nil, nil) + txEnv, err = ptestutils.ConstructUnsingedTxEnv(txID, util.GetTestChainID(), ccName, nil, simulationResults, nil, nil) } return txEnv, txID, err } diff --git a/common/ledger/testutil/test_util.go b/common/ledger/testutil/test_util.go new file mode 100644 index 00000000000..bc1f5234f6d --- /dev/null +++ b/common/ledger/testutil/test_util.go @@ -0,0 +1,153 @@ +/* +Copyright IBM Corp. 2016 All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package testutil + +import ( + "crypto/rand" + "fmt" + "reflect" + "runtime" + "testing" +) + +// AssertNil varifies that the value is nil +func AssertNil(t testing.TB, value interface{}) { + if !isNil(value) { + t.Fatalf("Value not nil. value=[%#v]\n %s", value, getCallerInfo()) + } +} + +// AssertNotNil varifies that the value is not nil +func AssertNotNil(t testing.TB, value interface{}) { + if isNil(value) { + t.Fatalf("Values is nil. %s", getCallerInfo()) + } +} + +// AssertSame varifies that the two values are same +func AssertSame(t testing.TB, actual interface{}, expected interface{}) { + t.Logf("%s: AssertSame [%#v] and [%#v]", getCallerInfo(), actual, expected) + if actual != expected { + t.Fatalf("Values actual=[%#v] and expected=[%#v] do not point to same object. %s", actual, expected, getCallerInfo()) + } +} + +// AssertEquals varifies that the two values are equal +func AssertEquals(t testing.TB, actual interface{}, expected interface{}) { + t.Logf("%s: AssertEquals [%#v] and [%#v]", getCallerInfo(), actual, expected) + if expected == nil && isNil(actual) { + return + } + if !reflect.DeepEqual(actual, expected) { + t.Fatalf("Values are not equal.\n Actual=[%#v], \n Expected=[%#v]\n %s", actual, expected, getCallerInfo()) + } +} + +// AssertNotEquals varifies that the two values are not equal +func AssertNotEquals(t testing.TB, actual interface{}, expected interface{}) { + if reflect.DeepEqual(actual, expected) { + t.Fatalf("Values are not supposed to be equal. Actual=[%#v], Expected=[%#v]\n %s", actual, expected, getCallerInfo()) + } +} + +// AssertError varifies that the err is not nil +func AssertError(t testing.TB, err error, message string) { + if err == nil { + t.Fatalf("%s\n %s", message, getCallerInfo()) + } +} + +// AssertNoError varifies that the err is nil +func AssertNoError(t testing.TB, err error, message string) { + if err != nil { + t.Fatalf("%s - Error: %s\n %s", message, err, getCallerInfo()) + } +} + +// AssertContains varifies that the slice contains the value +func AssertContains(t testing.TB, slice interface{}, value interface{}) { + if reflect.TypeOf(slice).Kind() != reflect.Slice && reflect.TypeOf(slice).Kind() != reflect.Array { + t.Fatalf("Type of argument 'slice' is expected to be a slice/array, found =[%s]\n %s", reflect.TypeOf(slice), getCallerInfo()) + } + + if !Contains(slice, value) { + t.Fatalf("Expected value [%s] not found in slice %s\n %s", value, slice, getCallerInfo()) + } +} + +// AssertContainsAll varifies that sliceActual is a superset of sliceExpected +func AssertContainsAll(t testing.TB, sliceActual interface{}, sliceExpected interface{}) { + if reflect.TypeOf(sliceActual).Kind() != reflect.Slice && reflect.TypeOf(sliceActual).Kind() != reflect.Array { + t.Fatalf("Type of argument 'sliceActual' is expected to be a slice/array, found =[%s]\n %s", reflect.TypeOf(sliceActual), getCallerInfo()) + } + + if reflect.TypeOf(sliceExpected).Kind() != reflect.Slice && reflect.TypeOf(sliceExpected).Kind() != reflect.Array { + t.Fatalf("Type of argument 'sliceExpected' is expected to be a slice/array, found =[%s]\n %s", reflect.TypeOf(sliceExpected), getCallerInfo()) + } + + array := reflect.ValueOf(sliceExpected) + for i := 0; i < array.Len(); i++ { + element := array.Index(i).Interface() + if !Contains(sliceActual, element) { + t.Fatalf("Expected value [%s] not found in slice %s\n %s", element, sliceActual, getCallerInfo()) + } + } +} + +// AssertPanic varifies that a panic is raised during a test +func AssertPanic(t testing.TB, msg string) { + x := recover() + if x == nil { + t.Fatal(msg) + } else { + t.Logf("A panic was caught successfully. Actual msg = %s", x) + } +} + +// ConstructRandomBytes constructs random bytes of given size +func ConstructRandomBytes(t testing.TB, size int) []byte { + value := make([]byte, size) + _, err := rand.Read(value) + if err != nil { + t.Fatalf("Error while generating random bytes: %s", err) + } + return value +} + +// Contains returns true iff the `value` is present in the `slice` +func Contains(slice interface{}, value interface{}) bool { + array := reflect.ValueOf(slice) + for i := 0; i < array.Len(); i++ { + element := array.Index(i).Interface() + if value == element || reflect.DeepEqual(element, value) { + return true + } + } + return false +} + +func isNil(in interface{}) bool { + return in == nil || reflect.ValueOf(in).IsNil() || (reflect.TypeOf(in).Kind() == reflect.Slice && reflect.ValueOf(in).Len() == 0) +} + +func getCallerInfo() string { + _, file, line, ok := runtime.Caller(2) + if !ok { + return "Could not retrieve caller's info" + } + return fmt.Sprintf("CallerInfo = [%s:%d]", file, line) +} diff --git a/common/ledger/testutil/test_util_test.go b/common/ledger/testutil/test_util_test.go new file mode 100644 index 00000000000..3cb0a13871f --- /dev/null +++ b/common/ledger/testutil/test_util_test.go @@ -0,0 +1,23 @@ +/* +Copyright IBM Corp. 2016 All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package testutil + +import "testing" + +func TestSkipAll(t *testing.T) { + t.Skip(`No tests in this package for now - This package contains only utility functions that are meant to be used by other functional tests`) +} diff --git a/core/ledger/util/ioutil.go b/common/ledger/util/ioutil.go similarity index 100% rename from core/ledger/util/ioutil.go rename to common/ledger/util/ioutil.go diff --git a/core/ledger/util/ioutil_test.go b/common/ledger/util/ioutil_test.go similarity index 98% rename from core/ledger/util/ioutil_test.go rename to common/ledger/util/ioutil_test.go index 4d9510f117a..abdb3abac3e 100644 --- a/core/ledger/util/ioutil_test.go +++ b/common/ledger/util/ioutil_test.go @@ -21,7 +21,7 @@ import ( "os" "testing" - "github.com/hyperledger/fabric/core/ledger/testutil" + "github.com/hyperledger/fabric/common/ledger/testutil" ) var DbPathTest = "/tmp/v2/test/util" diff --git a/core/ledger/util/leveldbhelper/leveldb_helper.go b/common/ledger/util/leveldbhelper/leveldb_helper.go similarity index 98% rename from core/ledger/util/leveldbhelper/leveldb_helper.go rename to common/ledger/util/leveldbhelper/leveldb_helper.go index 67739dd4ce3..70aea9441be 100644 --- a/core/ledger/util/leveldbhelper/leveldb_helper.go +++ b/common/ledger/util/leveldbhelper/leveldb_helper.go @@ -20,7 +20,7 @@ import ( "fmt" "sync" - "github.com/hyperledger/fabric/core/ledger/util" + "github.com/hyperledger/fabric/common/ledger/util" "github.com/op/go-logging" "github.com/syndtr/goleveldb/leveldb" "github.com/syndtr/goleveldb/leveldb/iterator" diff --git a/core/ledger/util/leveldbhelper/leveldb_helper_test.go b/common/ledger/util/leveldbhelper/leveldb_helper_test.go similarity index 98% rename from core/ledger/util/leveldbhelper/leveldb_helper_test.go rename to common/ledger/util/leveldbhelper/leveldb_helper_test.go index dfb5b64c412..6d80539f915 100644 --- a/core/ledger/util/leveldbhelper/leveldb_helper_test.go +++ b/common/ledger/util/leveldbhelper/leveldb_helper_test.go @@ -21,7 +21,7 @@ import ( "os" "testing" - "github.com/hyperledger/fabric/core/ledger/testutil" + "github.com/hyperledger/fabric/common/ledger/testutil" ) const testDBPath = "/tmp/fabric/ledgertests/util/leveldbhelper" diff --git a/core/ledger/util/leveldbhelper/leveldb_provider.go b/common/ledger/util/leveldbhelper/leveldb_provider.go similarity index 100% rename from core/ledger/util/leveldbhelper/leveldb_provider.go rename to common/ledger/util/leveldbhelper/leveldb_provider.go diff --git a/core/ledger/util/protobuf_util.go b/common/ledger/util/protobuf_util.go similarity index 100% rename from core/ledger/util/protobuf_util.go rename to common/ledger/util/protobuf_util.go diff --git a/core/ledger/util/protobuf_util_test.go b/common/ledger/util/protobuf_util_test.go similarity index 95% rename from core/ledger/util/protobuf_util_test.go rename to common/ledger/util/protobuf_util_test.go index 356f52f4cf9..3813a0020d2 100644 --- a/core/ledger/util/protobuf_util_test.go +++ b/common/ledger/util/protobuf_util_test.go @@ -20,7 +20,7 @@ import ( "testing" "github.com/golang/protobuf/proto" - "github.com/hyperledger/fabric/core/ledger/testutil" + "github.com/hyperledger/fabric/common/ledger/testutil" ) func TestBuffer(t *testing.T) { diff --git a/common/ledger/util/util.go b/common/ledger/util/util.go new file mode 100644 index 00000000000..fdc768a7e2f --- /dev/null +++ b/common/ledger/util/util.go @@ -0,0 +1,62 @@ +/* +Copyright IBM Corp. 2016 All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package util + +import ( + "encoding/binary" + "fmt" + + "github.com/golang/protobuf/proto" +) + +// EncodeOrderPreservingVarUint64 returns a byte-representation for a uint64 number such that +// all zero-bits starting bytes are trimmed in order to reduce the length of the array +// For preserving the order in a default bytes-comparison, first byte contains the number of remaining bytes. +// The presence of first byte also allows to use the returned bytes as part of other larger byte array such as a +// composite-key representation in db +func EncodeOrderPreservingVarUint64(number uint64) []byte { + bytes := make([]byte, 8) + binary.BigEndian.PutUint64(bytes, number) + startingIndex := 0 + size := 0 + for i, b := range bytes { + if b != 0x00 { + startingIndex = i + size = 8 - i + break + } + } + sizeBytes := proto.EncodeVarint(uint64(size)) + if len(sizeBytes) > 1 { + panic(fmt.Errorf("[]sizeBytes should not be more than one byte because the max number it needs to hold is 8. size=%d", size)) + } + encodedBytes := make([]byte, size+1) + encodedBytes[0] = sizeBytes[0] + copy(encodedBytes[1:], bytes[startingIndex:]) + return encodedBytes +} + +// DecodeOrderPreservingVarUint64 decodes the number from the bytes obtained from method 'EncodeOrderPreservingVarUint64'. +// Also, returns the number of bytes that are consumed in the process +func DecodeOrderPreservingVarUint64(bytes []byte) (uint64, int) { + s, _ := proto.DecodeVarint(bytes) + size := int(s) + decodedBytes := make([]byte, 8) + copy(decodedBytes[8-size:], bytes[1:size+1]) + numBytesConsumed := size + 1 + return binary.BigEndian.Uint64(decodedBytes), numBytesConsumed +} diff --git a/core/ledger/util/util_test.go b/common/ledger/util/util_test.go similarity index 100% rename from core/ledger/util/util_test.go rename to common/ledger/util/util_test.go diff --git a/core/chaincode/handler.go b/core/chaincode/handler.go index 68a0a367a9c..3c88b6267cf 100644 --- a/core/chaincode/handler.go +++ b/core/chaincode/handler.go @@ -24,6 +24,7 @@ import ( "time" "github.com/golang/protobuf/proto" + commonledger "github.com/hyperledger/fabric/common/ledger" "github.com/hyperledger/fabric/common/util" "github.com/hyperledger/fabric/core/common/ccprovider" ccintf "github.com/hyperledger/fabric/core/container/ccintf" @@ -59,7 +60,7 @@ type transactionContext struct { responseNotifier chan *pb.ChaincodeMessage // tracks open iterators used for range queries - queryIteratorMap map[string]ledger.ResultsIterator + queryIteratorMap map[string]commonledger.ResultsIterator txsimulator ledger.TxSimulator } @@ -186,7 +187,7 @@ func (handler *Handler) createTxContext(ctxt context.Context, chainID string, tx return nil, fmt.Errorf("txid:%s exists", txid) } txctx := &transactionContext{chainID: chainID, proposal: prop, responseNotifier: make(chan *pb.ChaincodeMessage, 1), - queryIteratorMap: make(map[string]ledger.ResultsIterator)} + queryIteratorMap: make(map[string]commonledger.ResultsIterator)} handler.txCtxs[txid] = txctx txctx.txsimulator = getTxSimulator(ctxt) @@ -208,13 +209,13 @@ func (handler *Handler) deleteTxContext(txid string) { } func (handler *Handler) putQueryIterator(txContext *transactionContext, txid string, - queryIterator ledger.ResultsIterator) { + queryIterator commonledger.ResultsIterator) { handler.Lock() defer handler.Unlock() txContext.queryIteratorMap[txid] = queryIterator } -func (handler *Handler) getQueryIterator(txContext *transactionContext, txid string) ledger.ResultsIterator { +func (handler *Handler) getQueryIterator(txContext *transactionContext, txid string) commonledger.ResultsIterator { handler.Lock() defer handler.Unlock() return txContext.queryIteratorMap[txid] @@ -699,7 +700,7 @@ func (handler *Handler) handleRangeQueryState(msg *pb.ChaincodeMessage) { var keysAndValues []*pb.QueryStateKeyValue var i = uint32(0) - var qresult ledger.QueryResult + var qresult commonledger.QueryResult for ; i < maxRangeQueryStateLimit; i++ { qresult, err = rangeIter.Next() if err != nil { @@ -796,7 +797,7 @@ func (handler *Handler) handleQueryStateNext(msg *pb.ChaincodeMessage) { var keysAndValues []*pb.QueryStateKeyValue var i = uint32(0) - var qresult ledger.QueryResult + var qresult commonledger.QueryResult var err error for ; i < maxRangeQueryStateLimit; i++ { qresult, err = queryIter.Next() @@ -974,7 +975,7 @@ func (handler *Handler) handleExecuteQueryState(msg *pb.ChaincodeMessage) { var keysAndValues []*pb.QueryStateKeyValue var i = uint32(0) - var qresult ledger.QueryResult + var qresult commonledger.QueryResult for ; i < maxExecuteQueryStateLimit; i++ { qresult, err = executeIter.Next() if err != nil { diff --git a/core/committer/committer_impl.go b/core/committer/committer_impl.go index 514964a690b..3e0a18625f6 100644 --- a/core/committer/committer_impl.go +++ b/core/committer/committer_impl.go @@ -23,7 +23,6 @@ import ( "github.com/hyperledger/fabric/core/ledger" "github.com/hyperledger/fabric/events/producer" "github.com/hyperledger/fabric/protos/common" - pb "github.com/hyperledger/fabric/protos/peer" "github.com/op/go-logging" ) @@ -75,7 +74,7 @@ func (lc *LedgerCommitter) Commit(block *common.Block) error { // LedgerHeight returns recently committed block sequence number func (lc *LedgerCommitter) LedgerHeight() (uint64, error) { - var info *pb.BlockchainInfo + var info *common.BlockchainInfo var err error if info, err = lc.ledger.GetBlockchainInfo(); err != nil { logger.Errorf("Cannot get blockchain info, %s\n", info) diff --git a/core/committer/committer_test.go b/core/committer/committer_test.go index 1efc67e65b5..76769aeb30d 100644 --- a/core/committer/committer_test.go +++ b/core/committer/committer_test.go @@ -19,13 +19,13 @@ package committer import ( "testing" - "github.com/hyperledger/fabric/core/ledger/testutil" + "github.com/hyperledger/fabric/common/ledger/testutil" "github.com/spf13/viper" "github.com/stretchr/testify/assert" "github.com/hyperledger/fabric/core/ledger/ledgermgmt" "github.com/hyperledger/fabric/core/mocks/validator" - pb "github.com/hyperledger/fabric/protos/peer" + "github.com/hyperledger/fabric/protos/common" ) func TestKVLedgerBlockStorage(t *testing.T) { @@ -42,7 +42,7 @@ func TestKVLedgerBlockStorage(t *testing.T) { assert.NoError(t, err) bcInfo, _ := ledger.GetBlockchainInfo() - testutil.AssertEquals(t, bcInfo, &pb.BlockchainInfo{ + testutil.AssertEquals(t, bcInfo, &common.BlockchainInfo{ Height: 0, CurrentBlockHash: nil, PreviousBlockHash: nil}) simulator, _ := ledger.NewTxSimulator() @@ -67,6 +67,6 @@ func TestKVLedgerBlockStorage(t *testing.T) { bcInfo, _ = ledger.GetBlockchainInfo() block1Hash := block1.Header.Hash() - testutil.AssertEquals(t, bcInfo, &pb.BlockchainInfo{ + testutil.AssertEquals(t, bcInfo, &common.BlockchainInfo{ Height: 1, CurrentBlockHash: block1Hash, PreviousBlockHash: []byte{}}) } diff --git a/core/committer/txvalidator/txvalidator_test.go b/core/committer/txvalidator/txvalidator_test.go index be573706f5a..196a27922bf 100644 --- a/core/committer/txvalidator/txvalidator_test.go +++ b/core/committer/txvalidator/txvalidator_test.go @@ -20,14 +20,13 @@ import ( "testing" "github.com/golang/protobuf/proto" + "github.com/hyperledger/fabric/common/ledger/testutil" util2 "github.com/hyperledger/fabric/common/util" "github.com/hyperledger/fabric/core/ledger/ledgermgmt" - "github.com/hyperledger/fabric/core/ledger/testutil" "github.com/hyperledger/fabric/core/ledger/util" mocktxvalidator "github.com/hyperledger/fabric/core/mocks/txvalidator" "github.com/hyperledger/fabric/core/mocks/validator" "github.com/hyperledger/fabric/protos/common" - pb "github.com/hyperledger/fabric/protos/peer" "github.com/hyperledger/fabric/protos/utils" "github.com/spf13/viper" "github.com/stretchr/testify/assert" @@ -43,7 +42,7 @@ func TestKVLedgerBlockStorage(t *testing.T) { validator := &txValidator{&mocktxvalidator.Support{LedgerVal: ledger}, &validator.MockVsccValidator{}} bcInfo, _ := ledger.GetBlockchainInfo() - testutil.AssertEquals(t, bcInfo, &pb.BlockchainInfo{ + testutil.AssertEquals(t, bcInfo, &common.BlockchainInfo{ Height: 0, CurrentBlockHash: nil, PreviousBlockHash: nil}) simulator, _ := ledger.NewTxSimulator() diff --git a/core/container/dockercontroller/dockercontroller_test.go b/core/container/dockercontroller/dockercontroller_test.go index a5724d8fd42..0c8b02ffdda 100644 --- a/core/container/dockercontroller/dockercontroller_test.go +++ b/core/container/dockercontroller/dockercontroller_test.go @@ -24,8 +24,8 @@ import ( "github.com/fsouza/go-dockerclient" "github.com/spf13/viper" + "github.com/hyperledger/fabric/common/ledger/testutil" "github.com/hyperledger/fabric/core/config" - "github.com/hyperledger/fabric/core/ledger/testutil" ) func TestHostConfig(t *testing.T) { diff --git a/core/ledger/kvledger/history/historydb/histmgr_helper.go b/core/ledger/kvledger/history/historydb/histmgr_helper.go index 62534e7bb3a..c7e6b470cec 100644 --- a/core/ledger/kvledger/history/historydb/histmgr_helper.go +++ b/core/ledger/kvledger/history/historydb/histmgr_helper.go @@ -19,7 +19,7 @@ package historydb import ( "bytes" - "github.com/hyperledger/fabric/core/ledger/util" + "github.com/hyperledger/fabric/common/ledger/util" ) var compositeKeySep = []byte{0x00} diff --git a/core/ledger/kvledger/history/historydb/histmgr_helper_test.go b/core/ledger/kvledger/history/historydb/histmgr_helper_test.go index 20a53b744c1..1fdb6fcf956 100644 --- a/core/ledger/kvledger/history/historydb/histmgr_helper_test.go +++ b/core/ledger/kvledger/history/historydb/histmgr_helper_test.go @@ -19,7 +19,7 @@ package historydb import ( "testing" - "github.com/hyperledger/fabric/core/ledger/testutil" + "github.com/hyperledger/fabric/common/ledger/testutil" ) var strKeySep = string(compositeKeySep) diff --git a/core/ledger/kvledger/history/historydb/historyleveldb/historyleveldb.go b/core/ledger/kvledger/history/historydb/historyleveldb/historyleveldb.go index 1071b5f6816..5dceb5bf376 100644 --- a/core/ledger/kvledger/history/historydb/historyleveldb/historyleveldb.go +++ b/core/ledger/kvledger/history/historydb/historyleveldb/historyleveldb.go @@ -17,12 +17,12 @@ limitations under the License. package historyleveldb import ( + "github.com/hyperledger/fabric/common/ledger/util/leveldbhelper" "github.com/hyperledger/fabric/core/ledger" "github.com/hyperledger/fabric/core/ledger/kvledger/history/historydb" "github.com/hyperledger/fabric/core/ledger/kvledger/txmgmt/rwset" "github.com/hyperledger/fabric/core/ledger/kvledger/txmgmt/version" "github.com/hyperledger/fabric/core/ledger/ledgerconfig" - "github.com/hyperledger/fabric/core/ledger/util/leveldbhelper" "github.com/hyperledger/fabric/protos/common" putils "github.com/hyperledger/fabric/protos/utils" logging "github.com/op/go-logging" diff --git a/core/ledger/kvledger/history/historydb/historyleveldb/historyleveldb_query_executer.go b/core/ledger/kvledger/history/historydb/historyleveldb/historyleveldb_query_executer.go index 33df7ddc32a..18745c68d0a 100644 --- a/core/ledger/kvledger/history/historydb/historyleveldb/historyleveldb_query_executer.go +++ b/core/ledger/kvledger/history/historydb/historyleveldb/historyleveldb_query_executer.go @@ -20,10 +20,11 @@ import ( "errors" "fmt" + commonledger "github.com/hyperledger/fabric/common/ledger" + "github.com/hyperledger/fabric/common/ledger/util" "github.com/hyperledger/fabric/core/ledger" "github.com/hyperledger/fabric/core/ledger/kvledger/history/historydb" "github.com/hyperledger/fabric/core/ledger/ledgerconfig" - "github.com/hyperledger/fabric/core/ledger/util" "github.com/syndtr/goleveldb/leveldb/iterator" ) @@ -33,7 +34,7 @@ type LevelHistoryDBQueryExecutor struct { } // GetHistoryForKey implements method in interface `ledger.HistoryQueryExecutor` -func (q *LevelHistoryDBQueryExecutor) GetHistoryForKey(namespace string, key string) (ledger.ResultsIterator, error) { +func (q *LevelHistoryDBQueryExecutor) GetHistoryForKey(namespace string, key string) (commonledger.ResultsIterator, error) { if ledgerconfig.IsHistoryDBEnabled() == false { return nil, errors.New("History tracking not enabled - historyDatabase is false") @@ -59,7 +60,7 @@ func newHistoryScanner(compositePartialKey []byte, dbItr iterator.Iterator) *his return &historyScanner{compositePartialKey, dbItr} } -func (scanner *historyScanner) Next() (ledger.QueryResult, error) { +func (scanner *historyScanner) Next() (commonledger.QueryResult, error) { if !scanner.dbItr.Next() { return nil, nil } diff --git a/core/ledger/kvledger/history/historydb/historyleveldb/historyleveldb_test.go b/core/ledger/kvledger/history/historydb/historyleveldb/historyleveldb_test.go index 2edbf045db0..fdbfff211fd 100644 --- a/core/ledger/kvledger/history/historydb/historyleveldb/historyleveldb_test.go +++ b/core/ledger/kvledger/history/historydb/historyleveldb/historyleveldb_test.go @@ -21,8 +21,8 @@ import ( "testing" configtxtest "github.com/hyperledger/fabric/common/configtx/test" + "github.com/hyperledger/fabric/common/ledger/testutil" "github.com/hyperledger/fabric/core/ledger" - "github.com/hyperledger/fabric/core/ledger/testutil" "github.com/spf13/viper" ) diff --git a/core/ledger/kvledger/history/historydb/historyleveldb/pkg_test.go b/core/ledger/kvledger/history/historydb/historyleveldb/pkg_test.go index 8f1609e3d56..f896f636d50 100644 --- a/core/ledger/kvledger/history/historydb/historyleveldb/pkg_test.go +++ b/core/ledger/kvledger/history/historydb/historyleveldb/pkg_test.go @@ -20,13 +20,13 @@ import ( "os" "testing" + "github.com/hyperledger/fabric/common/ledger/testutil" "github.com/hyperledger/fabric/core/ledger/kvledger/history/historydb" "github.com/hyperledger/fabric/core/ledger/kvledger/txmgmt/statedb" "github.com/hyperledger/fabric/core/ledger/kvledger/txmgmt/statedb/stateleveldb" "github.com/hyperledger/fabric/core/ledger/kvledger/txmgmt/txmgr" "github.com/hyperledger/fabric/core/ledger/kvledger/txmgmt/txmgr/lockbasedtxmgr" "github.com/hyperledger/fabric/core/ledger/ledgerconfig" - "github.com/hyperledger/fabric/core/ledger/testutil" "github.com/spf13/viper" ) diff --git a/core/ledger/kvledger/kv_ledger.go b/core/ledger/kvledger/kv_ledger.go index f3c436bc4a1..fdf2cc854f6 100644 --- a/core/ledger/kvledger/kv_ledger.go +++ b/core/ledger/kvledger/kv_ledger.go @@ -20,8 +20,9 @@ import ( "errors" "fmt" + commonledger "github.com/hyperledger/fabric/common/ledger" + "github.com/hyperledger/fabric/common/ledger/blkstorage" "github.com/hyperledger/fabric/core/ledger" - "github.com/hyperledger/fabric/core/ledger/blkstorage" "github.com/hyperledger/fabric/core/ledger/kvledger/history/historydb" "github.com/hyperledger/fabric/core/ledger/kvledger/txmgmt/statedb" "github.com/hyperledger/fabric/core/ledger/kvledger/txmgmt/txmgr" @@ -31,7 +32,6 @@ import ( logging "github.com/op/go-logging" "github.com/hyperledger/fabric/protos/common" - pb "github.com/hyperledger/fabric/protos/peer" ) var logger = logging.MustGetLogger("kvledger") @@ -205,7 +205,7 @@ func (l *kvLedger) GetTransactionByID(txID string) (*common.Envelope, error) { } // GetBlockchainInfo returns basic info about blockchain -func (l *kvLedger) GetBlockchainInfo() (*pb.BlockchainInfo, error) { +func (l *kvLedger) GetBlockchainInfo() (*common.BlockchainInfo, error) { return l.blockStore.GetBlockchainInfo() } @@ -219,7 +219,7 @@ func (l *kvLedger) GetBlockByNumber(blockNumber uint64) (*common.Block, error) { // GetBlocksIterator returns an iterator that starts from `startBlockNumber`(inclusive). // The iterator is a blocking iterator i.e., it blocks till the next block gets available in the ledger // ResultsIterator contains type BlockHolder -func (l *kvLedger) GetBlocksIterator(startBlockNumber uint64) (ledger.ResultsIterator, error) { +func (l *kvLedger) GetBlocksIterator(startBlockNumber uint64) (commonledger.ResultsIterator, error) { return l.blockStore.RetrieveBlocks(startBlockNumber) } @@ -230,7 +230,7 @@ func (l *kvLedger) GetBlockByHash(blockHash []byte) (*common.Block, error) { } //Prune prunes the blocks/transactions that satisfy the given policy -func (l *kvLedger) Prune(policy ledger.PrunePolicy) error { +func (l *kvLedger) Prune(policy commonledger.PrunePolicy) error { return errors.New("Not yet implemented") } diff --git a/core/ledger/kvledger/kv_ledger_provider.go b/core/ledger/kvledger/kv_ledger_provider.go index b425d56e955..1ce82ccf052 100644 --- a/core/ledger/kvledger/kv_ledger_provider.go +++ b/core/ledger/kvledger/kv_ledger_provider.go @@ -19,16 +19,16 @@ package kvledger import ( "errors" + "github.com/hyperledger/fabric/common/ledger/blkstorage" + "github.com/hyperledger/fabric/common/ledger/blkstorage/fsblkstorage" + "github.com/hyperledger/fabric/common/ledger/util/leveldbhelper" "github.com/hyperledger/fabric/core/ledger" - "github.com/hyperledger/fabric/core/ledger/blkstorage" - "github.com/hyperledger/fabric/core/ledger/blkstorage/fsblkstorage" "github.com/hyperledger/fabric/core/ledger/kvledger/history/historydb" "github.com/hyperledger/fabric/core/ledger/kvledger/history/historydb/historyleveldb" "github.com/hyperledger/fabric/core/ledger/kvledger/txmgmt/statedb" "github.com/hyperledger/fabric/core/ledger/kvledger/txmgmt/statedb/statecouchdb" "github.com/hyperledger/fabric/core/ledger/kvledger/txmgmt/statedb/stateleveldb" "github.com/hyperledger/fabric/core/ledger/ledgerconfig" - "github.com/hyperledger/fabric/core/ledger/util/leveldbhelper" ) var ( diff --git a/core/ledger/kvledger/kv_ledger_provider_test.go b/core/ledger/kvledger/kv_ledger_provider_test.go index d130be0090f..6a1f4f640dc 100644 --- a/core/ledger/kvledger/kv_ledger_provider_test.go +++ b/core/ledger/kvledger/kv_ledger_provider_test.go @@ -20,8 +20,8 @@ import ( "fmt" "testing" + "github.com/hyperledger/fabric/common/ledger/testutil" "github.com/hyperledger/fabric/core/ledger" - "github.com/hyperledger/fabric/core/ledger/testutil" ) func TestLedgerProvider(t *testing.T) { diff --git a/core/ledger/kvledger/kv_ledger_test.go b/core/ledger/kvledger/kv_ledger_test.go index 258865953f8..530d07a9ee5 100644 --- a/core/ledger/kvledger/kv_ledger_test.go +++ b/core/ledger/kvledger/kv_ledger_test.go @@ -20,10 +20,11 @@ import ( "fmt" "testing" + "github.com/hyperledger/fabric/common/ledger/testutil" ledgerpackage "github.com/hyperledger/fabric/core/ledger" "github.com/hyperledger/fabric/core/ledger/ledgerconfig" - "github.com/hyperledger/fabric/core/ledger/testutil" - pb "github.com/hyperledger/fabric/protos/peer" + ledgertestutil "github.com/hyperledger/fabric/core/ledger/testutil" + "github.com/hyperledger/fabric/protos/common" "github.com/stretchr/testify/assert" ) @@ -36,7 +37,7 @@ func TestKVLedgerBlockStorage(t *testing.T) { defer ledger.Close() bcInfo, _ := ledger.GetBlockchainInfo() - testutil.AssertEquals(t, bcInfo, &pb.BlockchainInfo{ + testutil.AssertEquals(t, bcInfo, &common.BlockchainInfo{ Height: 0, CurrentBlockHash: nil, PreviousBlockHash: nil}) simulator, _ := ledger.NewTxSimulator() @@ -51,7 +52,7 @@ func TestKVLedgerBlockStorage(t *testing.T) { bcInfo, _ = ledger.GetBlockchainInfo() block1Hash := block1.Header.Hash() - testutil.AssertEquals(t, bcInfo, &pb.BlockchainInfo{ + testutil.AssertEquals(t, bcInfo, &common.BlockchainInfo{ Height: 1, CurrentBlockHash: block1Hash, PreviousBlockHash: []byte{}}) simulator, _ = ledger.NewTxSimulator() @@ -65,7 +66,7 @@ func TestKVLedgerBlockStorage(t *testing.T) { bcInfo, _ = ledger.GetBlockchainInfo() block2Hash := block2.Header.Hash() - testutil.AssertEquals(t, bcInfo, &pb.BlockchainInfo{ + testutil.AssertEquals(t, bcInfo, &common.BlockchainInfo{ Height: 2, CurrentBlockHash: block2Hash, PreviousBlockHash: block1.Header.Hash()}) b1, _ := ledger.GetBlockByHash(block1Hash) @@ -82,7 +83,7 @@ func TestKVLedgerBlockStorage(t *testing.T) { } func TestKVLedgerDBRecovery(t *testing.T) { - testutil.SetupCoreYAMLConfig("./../../../peer") + ledgertestutil.SetupCoreYAMLConfig("./../../../peer") env := newTestEnv(t) defer env.cleanup() provider, _ := NewProvider() @@ -91,7 +92,7 @@ func TestKVLedgerDBRecovery(t *testing.T) { defer ledger.Close() bcInfo, _ := ledger.GetBlockchainInfo() - testutil.AssertEquals(t, bcInfo, &pb.BlockchainInfo{ + testutil.AssertEquals(t, bcInfo, &common.BlockchainInfo{ Height: 0, CurrentBlockHash: nil, PreviousBlockHash: nil}) //creating and committing the first block simulator, _ := ledger.NewTxSimulator() @@ -108,7 +109,7 @@ func TestKVLedgerDBRecovery(t *testing.T) { ledger.Commit(block1) bcInfo, _ = ledger.GetBlockchainInfo() block1Hash := block1.Header.Hash() - testutil.AssertEquals(t, bcInfo, &pb.BlockchainInfo{ + testutil.AssertEquals(t, bcInfo, &common.BlockchainInfo{ Height: 1, CurrentBlockHash: block1Hash, PreviousBlockHash: []byte{}}) //====================================================================================== @@ -134,7 +135,7 @@ func TestKVLedgerDBRecovery(t *testing.T) { bcInfo, _ = ledger.GetBlockchainInfo() block2Hash := block2.Header.Hash() - testutil.AssertEquals(t, bcInfo, &pb.BlockchainInfo{ + testutil.AssertEquals(t, bcInfo, &common.BlockchainInfo{ Height: 2, CurrentBlockHash: block2Hash, PreviousBlockHash: block1.Header.Hash()}) simulator, _ = ledger.NewTxSimulator() @@ -234,7 +235,7 @@ func TestKVLedgerDBRecovery(t *testing.T) { bcInfo, _ = ledger.GetBlockchainInfo() block3Hash := block3.Header.Hash() - testutil.AssertEquals(t, bcInfo, &pb.BlockchainInfo{ + testutil.AssertEquals(t, bcInfo, &common.BlockchainInfo{ Height: 3, CurrentBlockHash: block3Hash, PreviousBlockHash: block2.Header.Hash()}) simulator, _ = ledger.NewTxSimulator() @@ -325,7 +326,7 @@ func TestKVLedgerDBRecovery(t *testing.T) { bcInfo, _ = ledger.GetBlockchainInfo() block4Hash := block4.Header.Hash() - testutil.AssertEquals(t, bcInfo, &pb.BlockchainInfo{ + testutil.AssertEquals(t, bcInfo, &common.BlockchainInfo{ Height: 4, CurrentBlockHash: block4Hash, PreviousBlockHash: block3.Header.Hash()}) simulator, _ = ledger.NewTxSimulator() @@ -385,7 +386,7 @@ func TestKVLedgerDBRecovery(t *testing.T) { func TestLedgerWithCouchDbEnabledWithBinaryAndJSONData(t *testing.T) { //call a helper method to load the core.yaml - testutil.SetupCoreYAMLConfig("./../../../peer") + ledgertestutil.SetupCoreYAMLConfig("./../../../peer") logger.Debugf("TestLedgerWithCouchDbEnabledWithBinaryAndJSONData IsCouchDBEnabled()value: %v , IsHistoryDBEnabled()value: %v\n", ledgerconfig.IsCouchDBEnabled(), ledgerconfig.IsHistoryDBEnabled()) @@ -398,7 +399,7 @@ func TestLedgerWithCouchDbEnabledWithBinaryAndJSONData(t *testing.T) { defer ledger.Close() bcInfo, _ := ledger.GetBlockchainInfo() - testutil.AssertEquals(t, bcInfo, &pb.BlockchainInfo{ + testutil.AssertEquals(t, bcInfo, &common.BlockchainInfo{ Height: 0, CurrentBlockHash: nil, PreviousBlockHash: nil}) simulator, _ := ledger.NewTxSimulator() @@ -415,7 +416,7 @@ func TestLedgerWithCouchDbEnabledWithBinaryAndJSONData(t *testing.T) { bcInfo, _ = ledger.GetBlockchainInfo() block1Hash := block1.Header.Hash() - testutil.AssertEquals(t, bcInfo, &pb.BlockchainInfo{ + testutil.AssertEquals(t, bcInfo, &common.BlockchainInfo{ Height: 1, CurrentBlockHash: block1Hash, PreviousBlockHash: []byte{}}) simulationResults := [][]byte{} @@ -442,7 +443,7 @@ func TestLedgerWithCouchDbEnabledWithBinaryAndJSONData(t *testing.T) { bcInfo, _ = ledger.GetBlockchainInfo() block2Hash := block2.Header.Hash() - testutil.AssertEquals(t, bcInfo, &pb.BlockchainInfo{ + testutil.AssertEquals(t, bcInfo, &common.BlockchainInfo{ Height: 2, CurrentBlockHash: block2Hash, PreviousBlockHash: block1.Header.Hash()}) b1, _ := ledger.GetBlockByHash(block1Hash) diff --git a/core/ledger/kvledger/txmgmt/rwset/rwset_holder_test.go b/core/ledger/kvledger/txmgmt/rwset/rwset_holder_test.go index 8ca168bf595..13ae1c9e568 100644 --- a/core/ledger/kvledger/txmgmt/rwset/rwset_holder_test.go +++ b/core/ledger/kvledger/txmgmt/rwset/rwset_holder_test.go @@ -19,8 +19,8 @@ package rwset import ( "testing" + "github.com/hyperledger/fabric/common/ledger/testutil" "github.com/hyperledger/fabric/core/ledger/kvledger/txmgmt/version" - "github.com/hyperledger/fabric/core/ledger/testutil" ) func TestRWSetHolder(t *testing.T) { diff --git a/core/ledger/kvledger/txmgmt/rwset/rwset_test.go b/core/ledger/kvledger/txmgmt/rwset/rwset_test.go index b542bffa014..70ff260b0b3 100644 --- a/core/ledger/kvledger/txmgmt/rwset/rwset_test.go +++ b/core/ledger/kvledger/txmgmt/rwset/rwset_test.go @@ -21,8 +21,8 @@ import ( "testing" "github.com/golang/protobuf/proto" + "github.com/hyperledger/fabric/common/ledger/testutil" "github.com/hyperledger/fabric/core/ledger/kvledger/txmgmt/version" - "github.com/hyperledger/fabric/core/ledger/testutil" ) func TestNilTxRWSet(t *testing.T) { diff --git a/core/ledger/kvledger/txmgmt/statedb/commontests/test_common.go b/core/ledger/kvledger/txmgmt/statedb/commontests/test_common.go index 9b22c58bcfd..dbf0f742df7 100644 --- a/core/ledger/kvledger/txmgmt/statedb/commontests/test_common.go +++ b/core/ledger/kvledger/txmgmt/statedb/commontests/test_common.go @@ -20,9 +20,9 @@ import ( "strings" "testing" + "github.com/hyperledger/fabric/common/ledger/testutil" "github.com/hyperledger/fabric/core/ledger/kvledger/txmgmt/statedb" "github.com/hyperledger/fabric/core/ledger/kvledger/txmgmt/version" - "github.com/hyperledger/fabric/core/ledger/testutil" ) // TestBasicRW tests basic read-write diff --git a/core/ledger/kvledger/txmgmt/statedb/statecouchdb/statecouchdb_test.go b/core/ledger/kvledger/txmgmt/statedb/statecouchdb/statecouchdb_test.go index 7f5946de3f8..9c92f4feffd 100644 --- a/core/ledger/kvledger/txmgmt/statedb/statecouchdb/statecouchdb_test.go +++ b/core/ledger/kvledger/txmgmt/statedb/statecouchdb/statecouchdb_test.go @@ -20,18 +20,19 @@ import ( "os" "testing" + "github.com/hyperledger/fabric/common/ledger/testutil" "github.com/hyperledger/fabric/core/ledger/kvledger/txmgmt/statedb" "github.com/hyperledger/fabric/core/ledger/kvledger/txmgmt/statedb/commontests" "github.com/hyperledger/fabric/core/ledger/kvledger/txmgmt/version" "github.com/hyperledger/fabric/core/ledger/ledgerconfig" - "github.com/hyperledger/fabric/core/ledger/testutil" + ledgertestutil "github.com/hyperledger/fabric/core/ledger/testutil" "github.com/spf13/viper" ) func TestMain(m *testing.M) { //call a helper method to load the core.yaml, will be used to detect if CouchDB is enabled - testutil.SetupCoreYAMLConfig("./../../../../../../peer") + ledgertestutil.SetupCoreYAMLConfig("./../../../../../../peer") viper.Set("ledger.state.couchDBConfig.couchDBAddress", "127.0.0.1:5984") viper.Set("peer.fileSystemPath", "/tmp/fabric/ledgertests/kvledger/txmgmt/statedb/statecouchdb") diff --git a/core/ledger/kvledger/txmgmt/statedb/statedb_test.go b/core/ledger/kvledger/txmgmt/statedb/statedb_test.go index 511a09cfa8a..55f7cc8ea4c 100644 --- a/core/ledger/kvledger/txmgmt/statedb/statedb_test.go +++ b/core/ledger/kvledger/txmgmt/statedb/statedb_test.go @@ -19,8 +19,8 @@ package statedb import ( "testing" + "github.com/hyperledger/fabric/common/ledger/testutil" "github.com/hyperledger/fabric/core/ledger/kvledger/txmgmt/version" - "github.com/hyperledger/fabric/core/ledger/testutil" ) func TestUpdateBatchIterator(t *testing.T) { diff --git a/core/ledger/kvledger/txmgmt/statedb/stateleveldb/stateleveldb.go b/core/ledger/kvledger/txmgmt/statedb/stateleveldb/stateleveldb.go index 3f8b5c1b6f6..3652377358e 100644 --- a/core/ledger/kvledger/txmgmt/statedb/stateleveldb/stateleveldb.go +++ b/core/ledger/kvledger/txmgmt/statedb/stateleveldb/stateleveldb.go @@ -21,10 +21,10 @@ import ( "errors" "fmt" + "github.com/hyperledger/fabric/common/ledger/util/leveldbhelper" "github.com/hyperledger/fabric/core/ledger/kvledger/txmgmt/statedb" "github.com/hyperledger/fabric/core/ledger/kvledger/txmgmt/version" "github.com/hyperledger/fabric/core/ledger/ledgerconfig" - "github.com/hyperledger/fabric/core/ledger/util/leveldbhelper" logging "github.com/op/go-logging" "github.com/syndtr/goleveldb/leveldb/iterator" ) diff --git a/core/ledger/kvledger/txmgmt/statedb/stateleveldb/stateleveldb_test.go b/core/ledger/kvledger/txmgmt/statedb/stateleveldb/stateleveldb_test.go index 3e784d45041..f77b700b938 100644 --- a/core/ledger/kvledger/txmgmt/statedb/stateleveldb/stateleveldb_test.go +++ b/core/ledger/kvledger/txmgmt/statedb/stateleveldb/stateleveldb_test.go @@ -20,10 +20,10 @@ import ( "os" "testing" + "github.com/hyperledger/fabric/common/ledger/testutil" "github.com/hyperledger/fabric/core/ledger/kvledger/txmgmt/statedb" "github.com/hyperledger/fabric/core/ledger/kvledger/txmgmt/statedb/commontests" "github.com/hyperledger/fabric/core/ledger/kvledger/txmgmt/version" - "github.com/hyperledger/fabric/core/ledger/testutil" "github.com/spf13/viper" ) diff --git a/core/ledger/kvledger/txmgmt/statedb/util_test.go b/core/ledger/kvledger/txmgmt/statedb/util_test.go index df1c84ede6a..415813889c6 100644 --- a/core/ledger/kvledger/txmgmt/statedb/util_test.go +++ b/core/ledger/kvledger/txmgmt/statedb/util_test.go @@ -19,8 +19,8 @@ package statedb import ( "testing" + "github.com/hyperledger/fabric/common/ledger/testutil" "github.com/hyperledger/fabric/core/ledger/kvledger/txmgmt/version" - "github.com/hyperledger/fabric/core/ledger/testutil" ) // TestEncodeString tests encoding and decoding a string value diff --git a/core/ledger/kvledger/txmgmt/txmgr/commontests/pkg_test.go b/core/ledger/kvledger/txmgmt/txmgr/commontests/pkg_test.go index 5955f76de13..768ff459f36 100644 --- a/core/ledger/kvledger/txmgmt/txmgr/commontests/pkg_test.go +++ b/core/ledger/kvledger/txmgmt/txmgr/commontests/pkg_test.go @@ -19,13 +19,14 @@ package commontests import ( "testing" + "github.com/hyperledger/fabric/common/ledger/testutil" "github.com/hyperledger/fabric/core/ledger/kvledger/txmgmt/statedb" "github.com/hyperledger/fabric/core/ledger/kvledger/txmgmt/statedb/statecouchdb" "github.com/hyperledger/fabric/core/ledger/kvledger/txmgmt/statedb/stateleveldb" "github.com/hyperledger/fabric/core/ledger/kvledger/txmgmt/txmgr" "github.com/hyperledger/fabric/core/ledger/kvledger/txmgmt/txmgr/lockbasedtxmgr" "github.com/hyperledger/fabric/core/ledger/ledgerconfig" - "github.com/hyperledger/fabric/core/ledger/testutil" + ledgertestutil "github.com/hyperledger/fabric/core/ledger/testutil" "github.com/hyperledger/fabric/core/ledger/util" "github.com/hyperledger/fabric/protos/common" "github.com/spf13/viper" @@ -47,7 +48,7 @@ var testEnvs = []testEnv{} func init() { //call a helper method to load the core.yaml so that we can detect whether couch is configured - testutil.SetupCoreYAMLConfig("./../../../../../../peer") + ledgertestutil.SetupCoreYAMLConfig("./../../../../../../peer") //Only run the tests if CouchDB is explitily enabled in the code, //otherwise CouchDB may not be installed and all the tests would fail diff --git a/core/ledger/kvledger/txmgmt/txmgr/commontests/txmgr_test.go b/core/ledger/kvledger/txmgmt/txmgr/commontests/txmgr_test.go index 9fe322862de..daa9714025e 100644 --- a/core/ledger/kvledger/txmgmt/txmgr/commontests/txmgr_test.go +++ b/core/ledger/kvledger/txmgmt/txmgr/commontests/txmgr_test.go @@ -21,10 +21,10 @@ import ( "fmt" "testing" + "github.com/hyperledger/fabric/common/ledger/testutil" "github.com/hyperledger/fabric/core/ledger" "github.com/hyperledger/fabric/core/ledger/kvledger/txmgmt/version" "github.com/hyperledger/fabric/core/ledger/ledgerconfig" - "github.com/hyperledger/fabric/core/ledger/testutil" ) func TestTxSimulatorWithNoExistingData(t *testing.T) { diff --git a/core/ledger/kvledger/txmgmt/txmgr/lockbasedtxmgr/helper.go b/core/ledger/kvledger/txmgmt/txmgr/lockbasedtxmgr/helper.go index 1082cfad2ac..54c750fc979 100644 --- a/core/ledger/kvledger/txmgmt/txmgr/lockbasedtxmgr/helper.go +++ b/core/ledger/kvledger/txmgmt/txmgr/lockbasedtxmgr/helper.go @@ -17,6 +17,7 @@ limitations under the License. package lockbasedtxmgr import ( + commonledger "github.com/hyperledger/fabric/common/ledger" "github.com/hyperledger/fabric/core/ledger" "github.com/hyperledger/fabric/core/ledger/kvledger/txmgmt/rwset" "github.com/hyperledger/fabric/core/ledger/kvledger/txmgmt/statedb" @@ -60,7 +61,7 @@ func (h *queryHelper) getStateMultipleKeys(namespace string, keys []string) ([][ return values, nil } -func (h *queryHelper) getStateRangeScanIterator(namespace string, startKey string, endKey string) (ledger.ResultsIterator, error) { +func (h *queryHelper) getStateRangeScanIterator(namespace string, startKey string, endKey string) (commonledger.ResultsIterator, error) { h.checkDone() itr, err := newResultsItr(namespace, startKey, endKey, h.txmgr.db, h.rwset) if err != nil { @@ -70,7 +71,7 @@ func (h *queryHelper) getStateRangeScanIterator(namespace string, startKey strin return itr, nil } -func (h *queryHelper) executeQuery(query string) (ledger.ResultsIterator, error) { +func (h *queryHelper) executeQuery(query string) (commonledger.ResultsIterator, error) { dbItr, err := h.txmgr.db.ExecuteQuery(query) if err != nil { return nil, err @@ -128,7 +129,7 @@ func newResultsItr(ns string, startKey string, endKey string, db statedb.Version // caller decides to stop iterating at some intermidiate point. Alternatively, we could have // set the EndKey and ItrExhausted in the Close() function but it may not be desirable to change // transactional behaviour based on whether the Close() was invoked or not -func (itr *resultsItr) Next() (ledger.QueryResult, error) { +func (itr *resultsItr) Next() (commonledger.QueryResult, error) { queryResult, err := itr.dbItr.Next() if err != nil { return nil, err @@ -176,7 +177,7 @@ type queryResultsItr struct { } // Next implements method in interface ledger.ResultsIterator -func (itr *queryResultsItr) Next() (ledger.QueryResult, error) { +func (itr *queryResultsItr) Next() (commonledger.QueryResult, error) { queryResult, err := itr.DBItr.Next() if err != nil { diff --git a/core/ledger/kvledger/txmgmt/txmgr/lockbasedtxmgr/lockbased_query_executer.go b/core/ledger/kvledger/txmgmt/txmgr/lockbasedtxmgr/lockbased_query_executer.go index 6a2df0ab1c4..38cd684f939 100644 --- a/core/ledger/kvledger/txmgmt/txmgr/lockbasedtxmgr/lockbased_query_executer.go +++ b/core/ledger/kvledger/txmgmt/txmgr/lockbasedtxmgr/lockbased_query_executer.go @@ -17,8 +17,8 @@ limitations under the License. package lockbasedtxmgr import ( + "github.com/hyperledger/fabric/common/ledger" "github.com/hyperledger/fabric/common/util" - "github.com/hyperledger/fabric/core/ledger" ) // LockBasedQueryExecutor is a query executor used in `LockBasedTxMgr` diff --git a/core/ledger/kvledger/txmgmt/validator/statebasedval/combined_iterator_test.go b/core/ledger/kvledger/txmgmt/validator/statebasedval/combined_iterator_test.go index acde72d8582..16bae736ac9 100644 --- a/core/ledger/kvledger/txmgmt/validator/statebasedval/combined_iterator_test.go +++ b/core/ledger/kvledger/txmgmt/validator/statebasedval/combined_iterator_test.go @@ -19,10 +19,10 @@ package statebasedval import ( "testing" + "github.com/hyperledger/fabric/common/ledger/testutil" "github.com/hyperledger/fabric/core/ledger/kvledger/txmgmt/statedb" "github.com/hyperledger/fabric/core/ledger/kvledger/txmgmt/statedb/stateleveldb" "github.com/hyperledger/fabric/core/ledger/kvledger/txmgmt/version" - "github.com/hyperledger/fabric/core/ledger/testutil" ) func TestCombinedIterator(t *testing.T) { diff --git a/core/ledger/kvledger/txmgmt/validator/statebasedval/state_based_validator_test.go b/core/ledger/kvledger/txmgmt/validator/statebasedval/state_based_validator_test.go index 27b5bca2d1b..13f55bbbb7e 100644 --- a/core/ledger/kvledger/txmgmt/validator/statebasedval/state_based_validator_test.go +++ b/core/ledger/kvledger/txmgmt/validator/statebasedval/state_based_validator_test.go @@ -20,11 +20,11 @@ import ( "os" "testing" + "github.com/hyperledger/fabric/common/ledger/testutil" "github.com/hyperledger/fabric/core/ledger/kvledger/txmgmt/rwset" "github.com/hyperledger/fabric/core/ledger/kvledger/txmgmt/statedb" "github.com/hyperledger/fabric/core/ledger/kvledger/txmgmt/statedb/stateleveldb" "github.com/hyperledger/fabric/core/ledger/kvledger/txmgmt/version" - "github.com/hyperledger/fabric/core/ledger/testutil" "github.com/hyperledger/fabric/core/ledger/util" "github.com/hyperledger/fabric/protos/common" "github.com/spf13/viper" diff --git a/core/ledger/kvledger/txmgmt/version/version.go b/core/ledger/kvledger/txmgmt/version/version.go index 928d5e14ec7..81ac93b5b28 100644 --- a/core/ledger/kvledger/txmgmt/version/version.go +++ b/core/ledger/kvledger/txmgmt/version/version.go @@ -16,7 +16,7 @@ limitations under the License. package version -import "github.com/hyperledger/fabric/core/ledger/util" +import "github.com/hyperledger/fabric/common/ledger/util" // Height represents the height of a transaction in blockchain type Height struct { diff --git a/core/ledger/kvledger/txmgmt/version/version_test.go b/core/ledger/kvledger/txmgmt/version/version_test.go index f794ee2ce73..de15cbb7184 100644 --- a/core/ledger/kvledger/txmgmt/version/version_test.go +++ b/core/ledger/kvledger/txmgmt/version/version_test.go @@ -19,7 +19,7 @@ package version import ( "testing" - "github.com/hyperledger/fabric/core/ledger/testutil" + "github.com/hyperledger/fabric/common/ledger/testutil" ) func TestVersionSerialization(t *testing.T) { diff --git a/core/ledger/ledger_interface.go b/core/ledger/ledger_interface.go index 28088322c61..8a2ea27da06 100644 --- a/core/ledger/ledger_interface.go +++ b/core/ledger/ledger_interface.go @@ -17,32 +17,10 @@ limitations under the License. package ledger import ( + commonledger "github.com/hyperledger/fabric/common/ledger" "github.com/hyperledger/fabric/protos/common" - pb "github.com/hyperledger/fabric/protos/peer" ) -// Ledger captures the methods that are common across the 'PeerLedger', 'OrdererLedger', and 'ValidatedLedger' -type Ledger interface { - // GetBlockchainInfo returns basic info about blockchain - GetBlockchainInfo() (*pb.BlockchainInfo, error) - // GetBlockByNumber returns block at a given height - // blockNumber of math.MaxUint64 will return last block - GetBlockByNumber(blockNumber uint64) (*common.Block, error) - // GetBlocksIterator returns an iterator that starts from `startBlockNumber`(inclusive). - // The iterator is a blocking iterator i.e., it blocks till the next block gets available in the ledger - // ResultsIterator contains type BlockHolder - GetBlocksIterator(startBlockNumber uint64) (ResultsIterator, error) - // Close closes the ledger - Close() - // Commit adds a new block - Commit(block *common.Block) error -} - -// OrdererLedger implements methods required by 'orderer ledger' -type OrdererLedger interface { - Ledger -} - // PeerLedgerProvider provides handle to ledger instances type PeerLedgerProvider interface { // Create creates a new ledger with a given unique id @@ -57,24 +35,10 @@ type PeerLedgerProvider interface { Close() } -// OrdererLedgerProvider provides handle to raw ledger instances -type OrdererLedgerProvider interface { - // Create creates a new ledger with a given unique id - Create(ledgerID string) (OrdererLedger, error) - // Open opens an already created ledger - Open(ledgerID string) (OrdererLedger, error) - // Exists tells whether the ledger with given id exits - Exists(ledgerID string) (bool, error) - // List lists the ids of the existing ledgers - List() ([]string, error) - // Close closes the ValidatedLedgerProvider - Close() -} - // PeerLedger differs from the OrdererLedger in that PeerLedger locally maintain a bitmask // that tells apart valid transactions from invalid ones type PeerLedger interface { - Ledger + commonledger.Ledger // GetTransactionByID retrieves a transaction by id GetTransactionByID(txID string) (*common.Envelope, error) // GetBlockByHash returns a block given it's hash @@ -92,13 +56,13 @@ type PeerLedger interface { // Any synchronization should be performed at the implementation level if required NewHistoryQueryExecutor() (HistoryQueryExecutor, error) //Prune prunes the blocks/transactions that satisfy the given policy - Prune(policy PrunePolicy) error + Prune(policy commonledger.PrunePolicy) error } // ValidatedLedger represents the 'final ledger' after filtering out invalid transactions from PeerLedger. // Post-v1 type ValidatedLedger interface { - Ledger + commonledger.Ledger } // QueryExecutor executes the queries @@ -116,10 +80,10 @@ type QueryExecutor interface { // and an empty endKey refers to the last available key. For scanning all the keys, both the startKey and the endKey // can be supplied as empty strings. However, a full scan shuold be used judiciously for performance reasons. // The returned ResultsIterator contains results of type *KV - GetStateRangeScanIterator(namespace string, startKey string, endKey string) (ResultsIterator, error) + GetStateRangeScanIterator(namespace string, startKey string, endKey string) (commonledger.ResultsIterator, error) // ExecuteQuery executes the given query and returns an iterator that contains results of type specific to the underlying data store. // Only used for state databases that support query - ExecuteQuery(query string) (ResultsIterator, error) + ExecuteQuery(query string) (commonledger.ResultsIterator, error) // Done releases resources occupied by the QueryExecutor Done() } @@ -127,7 +91,7 @@ type QueryExecutor interface { // HistoryQueryExecutor executes the history queries type HistoryQueryExecutor interface { // GetHistoryForKey retrieves the history of values for a key. - GetHistoryForKey(namespace string, key string) (ResultsIterator, error) + GetHistoryForKey(namespace string, key string) (commonledger.ResultsIterator, error) } // TxSimulator simulates a transaction on a consistent snapshot of the 'as recent state as possible' @@ -153,18 +117,6 @@ type TxSimulator interface { GetTxSimulationResults() ([]byte, error) } -// ResultsIterator - an iterator for query result set -type ResultsIterator interface { - // Next returns the next item in the result set. The `QueryResult` is expected to be nil when - // the iterator gets exhausted - Next() (QueryResult, error) - // Close releases resources occupied by the iterator - Close() -} - -// QueryResult - a general interface for supporting different types of query results. Actual types differ for different queries -type QueryResult interface{} - // KV - QueryResult for KV-based datamodel. Holds a key and corresponding value. A nil value indicates a non-existent key. type KV struct { Key string @@ -184,13 +136,3 @@ type QueryRecord struct { Key string Record []byte } - -// BlockHolder holds block returned by the iterator in GetBlocksIterator. -// The sole purpose of this holder is to avoid desrialization if block is desired in raw bytes form (e.g., for transfer) -type BlockHolder interface { - GetBlock() *common.Block - GetBlockBytes() []byte -} - -// PrunePolicy - a general interface for supporting different pruning policies -type PrunePolicy interface{} diff --git a/core/ledger/ledgerconfig/ledger_config_test.go b/core/ledger/ledgerconfig/ledger_config_test.go index 33b3a18728e..5d9d2ea1c8f 100644 --- a/core/ledger/ledgerconfig/ledger_config_test.go +++ b/core/ledger/ledgerconfig/ledger_config_test.go @@ -19,7 +19,8 @@ package ledgerconfig import ( "testing" - "github.com/hyperledger/fabric/core/ledger/testutil" + "github.com/hyperledger/fabric/common/ledger/testutil" + ledgertestutil "github.com/hyperledger/fabric/core/ledger/testutil" "github.com/spf13/viper" ) @@ -30,7 +31,7 @@ func TestIsCouchDBEnabledDefault(t *testing.T) { // If the ledger test are run with CouchDb enabled, need to provide a mechanism // To let this test run but still test default values. if IsCouchDBEnabled() == true { - testutil.ResetConfigToDefaultValues() + ledgertestutil.ResetConfigToDefaultValues() defer viper.Set("ledger.state.stateDatabase", "CouchDB") } defaultValue := IsCouchDBEnabled() @@ -39,7 +40,7 @@ func TestIsCouchDBEnabledDefault(t *testing.T) { func TestIsCouchDBEnabled(t *testing.T) { setUpCoreYAMLConfig() - defer testutil.ResetConfigToDefaultValues() + defer ledgertestutil.ResetConfigToDefaultValues() viper.Set("ledger.state.stateDatabase", "CouchDB") updatedValue := IsCouchDBEnabled() testutil.AssertEquals(t, updatedValue, true) //test config returns true @@ -47,7 +48,7 @@ func TestIsCouchDBEnabled(t *testing.T) { func TestGetCouchDBDefinition(t *testing.T) { setUpCoreYAMLConfig() - defer testutil.ResetConfigToDefaultValues() + defer ledgertestutil.ResetConfigToDefaultValues() viper.Set("ledger.state.stateDatabase", "CouchDB") couchDBDef := GetCouchDBDefinition() testutil.AssertEquals(t, couchDBDef.URL, "127.0.0.1:5984") @@ -63,7 +64,7 @@ func TestIsHistoryDBEnabledDefault(t *testing.T) { func TestIsHistoryDBEnabledTrue(t *testing.T) { setUpCoreYAMLConfig() - defer testutil.ResetConfigToDefaultValues() + defer ledgertestutil.ResetConfigToDefaultValues() viper.Set("ledger.state.historyDatabase", true) updatedValue := IsHistoryDBEnabled() testutil.AssertEquals(t, updatedValue, true) //test config returns true @@ -71,7 +72,7 @@ func TestIsHistoryDBEnabledTrue(t *testing.T) { func TestIsHistoryDBEnabledFalse(t *testing.T) { setUpCoreYAMLConfig() - defer testutil.ResetConfigToDefaultValues() + defer ledgertestutil.ResetConfigToDefaultValues() viper.Set("ledger.state.historyDatabase", false) updatedValue := IsHistoryDBEnabled() testutil.AssertEquals(t, updatedValue, false) //test config returns false @@ -79,5 +80,5 @@ func TestIsHistoryDBEnabledFalse(t *testing.T) { func setUpCoreYAMLConfig() { //call a helper method to load the core.yaml - testutil.SetupCoreYAMLConfig("./../../../peer") + ledgertestutil.SetupCoreYAMLConfig("./../../../peer") } diff --git a/core/ledger/ledgermgmt/ledger_mgmt_test.go b/core/ledger/ledgermgmt/ledger_mgmt_test.go index b06f578cd13..f35c1594ab9 100644 --- a/core/ledger/ledgermgmt/ledger_mgmt_test.go +++ b/core/ledger/ledgermgmt/ledger_mgmt_test.go @@ -22,8 +22,8 @@ import ( "os" + "github.com/hyperledger/fabric/common/ledger/testutil" "github.com/hyperledger/fabric/core/ledger" - "github.com/hyperledger/fabric/core/ledger/testutil" "github.com/spf13/viper" ) diff --git a/core/ledger/testutil/test_util.go b/core/ledger/testutil/test_util.go index ca0b14ccfa4..145209c9521 100644 --- a/core/ledger/testutil/test_util.go +++ b/core/ledger/testutil/test_util.go @@ -17,18 +17,13 @@ limitations under the License. package testutil import ( - "crypto/rand" "flag" "fmt" mathRand "math/rand" - "reflect" "regexp" - "runtime" "strings" - "testing" "time" - "github.com/hyperledger/fabric/common/util" "github.com/op/go-logging" "github.com/spf13/viper" ) @@ -108,150 +103,3 @@ func ParseTestParams() []string { paramsArray := regex.Split(*testParams, -1) return paramsArray } - -// AssertNil varifies that the value is nil -func AssertNil(t testing.TB, value interface{}) { - if !isNil(value) { - t.Fatalf("Value not nil. value=[%#v]\n %s", value, getCallerInfo()) - } -} - -// AssertNotNil varifies that the value is not nil -func AssertNotNil(t testing.TB, value interface{}) { - if isNil(value) { - t.Fatalf("Values is nil. %s", getCallerInfo()) - } -} - -// AssertSame varifies that the two values are same -func AssertSame(t testing.TB, actual interface{}, expected interface{}) { - t.Logf("%s: AssertSame [%#v] and [%#v]", getCallerInfo(), actual, expected) - if actual != expected { - t.Fatalf("Values actual=[%#v] and expected=[%#v] do not point to same object. %s", actual, expected, getCallerInfo()) - } -} - -// AssertEquals varifies that the two values are equal -func AssertEquals(t testing.TB, actual interface{}, expected interface{}) { - t.Logf("%s: AssertEquals [%#v] and [%#v]", getCallerInfo(), actual, expected) - if expected == nil && isNil(actual) { - return - } - if !reflect.DeepEqual(actual, expected) { - t.Fatalf("Values are not equal.\n Actual=[%#v], \n Expected=[%#v]\n %s", actual, expected, getCallerInfo()) - } -} - -// AssertNotEquals varifies that the two values are not equal -func AssertNotEquals(t testing.TB, actual interface{}, expected interface{}) { - if reflect.DeepEqual(actual, expected) { - t.Fatalf("Values are not supposed to be equal. Actual=[%#v], Expected=[%#v]\n %s", actual, expected, getCallerInfo()) - } -} - -// AssertError varifies that the err is not nil -func AssertError(t testing.TB, err error, message string) { - if err == nil { - t.Fatalf("%s\n %s", message, getCallerInfo()) - } -} - -// AssertNoError varifies that the err is nil -func AssertNoError(t testing.TB, err error, message string) { - if err != nil { - t.Fatalf("%s - Error: %s\n %s", message, err, getCallerInfo()) - } -} - -// AssertContains varifies that the slice contains the value -func AssertContains(t testing.TB, slice interface{}, value interface{}) { - if reflect.TypeOf(slice).Kind() != reflect.Slice && reflect.TypeOf(slice).Kind() != reflect.Array { - t.Fatalf("Type of argument 'slice' is expected to be a slice/array, found =[%s]\n %s", reflect.TypeOf(slice), getCallerInfo()) - } - - if !Contains(slice, value) { - t.Fatalf("Expected value [%s] not found in slice %s\n %s", value, slice, getCallerInfo()) - } -} - -// AssertContainsAll varifies that sliceActual is a superset of sliceExpected -func AssertContainsAll(t testing.TB, sliceActual interface{}, sliceExpected interface{}) { - if reflect.TypeOf(sliceActual).Kind() != reflect.Slice && reflect.TypeOf(sliceActual).Kind() != reflect.Array { - t.Fatalf("Type of argument 'sliceActual' is expected to be a slice/array, found =[%s]\n %s", reflect.TypeOf(sliceActual), getCallerInfo()) - } - - if reflect.TypeOf(sliceExpected).Kind() != reflect.Slice && reflect.TypeOf(sliceExpected).Kind() != reflect.Array { - t.Fatalf("Type of argument 'sliceExpected' is expected to be a slice/array, found =[%s]\n %s", reflect.TypeOf(sliceExpected), getCallerInfo()) - } - - array := reflect.ValueOf(sliceExpected) - for i := 0; i < array.Len(); i++ { - element := array.Index(i).Interface() - if !Contains(sliceActual, element) { - t.Fatalf("Expected value [%s] not found in slice %s\n %s", element, sliceActual, getCallerInfo()) - } - } -} - -// AssertPanic varifies that a panic is raised during a test -func AssertPanic(t testing.TB, msg string) { - x := recover() - if x == nil { - t.Fatal(msg) - } else { - t.Logf("A panic was caught successfully. Actual msg = %s", x) - } -} - -// ComputeCryptoHash computes crypto hash for testing -func ComputeCryptoHash(content ...[]byte) []byte { - return util.ComputeCryptoHash(AppendAll(content...)) -} - -// AppendAll combines the bytes from different []byte into one []byte -func AppendAll(content ...[]byte) []byte { - combinedContent := []byte{} - for _, b := range content { - combinedContent = append(combinedContent, b...) - } - return combinedContent -} - -// GenerateID generates a uuid -func GenerateID(t *testing.T) string { - return util.GenerateUUID() -} - -// ConstructRandomBytes constructs random bytes of given size -func ConstructRandomBytes(t testing.TB, size int) []byte { - value := make([]byte, size) - _, err := rand.Read(value) - if err != nil { - t.Fatalf("Error while generating random bytes: %s", err) - } - return value -} - -// Contains returns true iff the `value` is present in the `slice` -func Contains(slice interface{}, value interface{}) bool { - array := reflect.ValueOf(slice) - for i := 0; i < array.Len(); i++ { - element := array.Index(i).Interface() - if value == element || reflect.DeepEqual(element, value) { - return true - } - } - return false -} - -func isNil(in interface{}) bool { - return in == nil || reflect.ValueOf(in).IsNil() || (reflect.TypeOf(in).Kind() == reflect.Slice && reflect.ValueOf(in).Len() == 0) -} - -func getCallerInfo() string { - _, file, line, ok := runtime.Caller(2) - if !ok { - return "Could not retrieve caller's info" - } - return fmt.Sprintf("CallerInfo = [%s:%d]", file, line) -} diff --git a/core/ledger/util/couchdb/couchdb_test.go b/core/ledger/util/couchdb/couchdb_test.go index 0847943d510..529b3abb0c9 100644 --- a/core/ledger/util/couchdb/couchdb_test.go +++ b/core/ledger/util/couchdb/couchdb_test.go @@ -21,8 +21,9 @@ import ( "fmt" "testing" + "github.com/hyperledger/fabric/common/ledger/testutil" "github.com/hyperledger/fabric/core/ledger/ledgerconfig" - "github.com/hyperledger/fabric/core/ledger/testutil" + ledgertestutil "github.com/hyperledger/fabric/core/ledger/testutil" ) //Basic setup to test couch @@ -54,7 +55,7 @@ var assetJSON = []byte(`{"asset_name":"marble1","color":"blue","size":"35","owne func TestDBConnectionDef(t *testing.T) { //call a helper method to load the core.yaml - testutil.SetupCoreYAMLConfig("./../../../../peer") + ledgertestutil.SetupCoreYAMLConfig("./../../../../peer") //create a new connection _, err := CreateConnectionDefinition(connectURL, "", "") diff --git a/core/ledger/util/couchdb/couchdbutil_test.go b/core/ledger/util/couchdb/couchdbutil_test.go index 8d1c9600c76..06ae30f95a7 100644 --- a/core/ledger/util/couchdb/couchdbutil_test.go +++ b/core/ledger/util/couchdb/couchdbutil_test.go @@ -20,15 +20,16 @@ import ( "fmt" "testing" + "github.com/hyperledger/fabric/common/ledger/testutil" "github.com/hyperledger/fabric/core/ledger/ledgerconfig" - "github.com/hyperledger/fabric/core/ledger/testutil" + ledgertestutil "github.com/hyperledger/fabric/core/ledger/testutil" ) //Unit test of couch db util functionality func TestCreateCouchDBConnectionAndDB(t *testing.T) { //call a helper method to load the core.yaml - testutil.SetupCoreYAMLConfig("./../../../../peer") + ledgertestutil.SetupCoreYAMLConfig("./../../../../peer") if ledgerconfig.IsCouchDBEnabled() == true { diff --git a/core/ledger/util/util.go b/core/ledger/util/util.go index 37ecfbbda1a..818c01ba14a 100644 --- a/core/ledger/util/util.go +++ b/core/ledger/util/util.go @@ -17,52 +17,10 @@ limitations under the License. package util import ( - "encoding/binary" - "fmt" "reflect" "sort" - - "github.com/golang/protobuf/proto" ) -// EncodeOrderPreservingVarUint64 returns a byte-representation for a uint64 number such that -// all zero-bits starting bytes are trimmed in order to reduce the length of the array -// For preserving the order in a default bytes-comparison, first byte contains the number of remaining bytes. -// The presence of first byte also allows to use the returned bytes as part of other larger byte array such as a -// composite-key representation in db -func EncodeOrderPreservingVarUint64(number uint64) []byte { - bytes := make([]byte, 8) - binary.BigEndian.PutUint64(bytes, number) - startingIndex := 0 - size := 0 - for i, b := range bytes { - if b != 0x00 { - startingIndex = i - size = 8 - i - break - } - } - sizeBytes := proto.EncodeVarint(uint64(size)) - if len(sizeBytes) > 1 { - panic(fmt.Errorf("[]sizeBytes should not be more than one byte because the max number it needs to hold is 8. size=%d", size)) - } - encodedBytes := make([]byte, size+1) - encodedBytes[0] = sizeBytes[0] - copy(encodedBytes[1:], bytes[startingIndex:]) - return encodedBytes -} - -// DecodeOrderPreservingVarUint64 decodes the number from the bytes obtained from method 'EncodeOrderPreservingVarUint64'. -// Also, returns the number of bytes that are consumed in the process -func DecodeOrderPreservingVarUint64(bytes []byte) (uint64, int) { - s, _ := proto.DecodeVarint(bytes) - size := int(s) - decodedBytes := make([]byte, 8) - copy(decodedBytes[8-size:], bytes[1:size+1]) - numBytesConsumed := size + 1 - return binary.BigEndian.Uint64(decodedBytes), numBytesConsumed -} - // GetSortedKeys returns the keys of the map in a sorted order. This function assumes that the keys are string func GetSortedKeys(m interface{}) []string { mapVal := reflect.ValueOf(m) diff --git a/core/scc/qscc/querier.go b/core/scc/qscc/querier.go index 338592929c2..5c68cdc92ac 100644 --- a/core/scc/qscc/querier.go +++ b/core/scc/qscc/querier.go @@ -24,6 +24,7 @@ import ( "github.com/op/go-logging" "github.com/spf13/viper" + commonledger "github.com/hyperledger/fabric/common/ledger" "github.com/hyperledger/fabric/core/chaincode/shim" "github.com/hyperledger/fabric/core/ledger" "github.com/hyperledger/fabric/core/peer" @@ -118,7 +119,7 @@ func getQueryResult(vledger ledger.PeerLedger, query []byte) (res pb.Response) { } qstring := string(query) var qexe ledger.QueryExecutor - var ri ledger.ResultsIterator + var ri commonledger.ResultsIterator var err error // We install a recover() to gain control in 2 cases @@ -149,7 +150,7 @@ func getQueryResult(vledger ledger.PeerLedger, query []byte) (res pb.Response) { var buffer bytes.Buffer buffer.WriteString("[") - var qresult ledger.QueryResult + var qresult commonledger.QueryResult bArrayMemberAlreadyWritten := false qresult, err = ri.Next() for r := 0; qresult != nil && err == nil && r < limit; r++ { diff --git a/core/ledger/ordererledger/fs_ordererledger.go b/orderer/ledger/fsledger/fsledger.go similarity index 55% rename from core/ledger/ordererledger/fs_ordererledger.go rename to orderer/ledger/fsledger/fsledger.go index d99a687fa04..f97a611d214 100644 --- a/core/ledger/ordererledger/fs_ordererledger.go +++ b/orderer/ledger/fsledger/fsledger.go @@ -14,55 +14,54 @@ See the License for the specific language governing permissions and limitations under the License. */ -package ordererledger +package fsledger import ( "errors" - "github.com/hyperledger/fabric/core/ledger" - "github.com/hyperledger/fabric/core/ledger/blkstorage" + "github.com/hyperledger/fabric/common/ledger" + "github.com/hyperledger/fabric/common/ledger/blkstorage" "github.com/hyperledger/fabric/protos/common" - pb "github.com/hyperledger/fabric/protos/peer" ) const ( fileSegmentSize = 64 * 1024 * 1024 ) -// fsBasedOrdererLedger - an orderer ledger implementation that persists blocks on filesystem based store -type fsBasedOrdererLedger struct { +// fsLedger - an orderer ledger implementation that persists blocks on filesystem based store +type fsLedger struct { blockStore blkstorage.BlockStore } // GetBlockchainInfo returns basic info about blockchain -func (rl *fsBasedOrdererLedger) GetBlockchainInfo() (*pb.BlockchainInfo, error) { - return rl.blockStore.GetBlockchainInfo() +func (l *fsLedger) GetBlockchainInfo() (*common.BlockchainInfo, error) { + return l.blockStore.GetBlockchainInfo() } // GetBlockByNumber returns block at a given height -func (rl *fsBasedOrdererLedger) GetBlockByNumber(blockNumber uint64) (*common.Block, error) { - return rl.blockStore.RetrieveBlockByNumber(blockNumber) +func (l *fsLedger) GetBlockByNumber(blockNumber uint64) (*common.Block, error) { + return l.blockStore.RetrieveBlockByNumber(blockNumber) } // GetBlocksIterator returns an iterator that starts from `startBlockNumber`(inclusive). // The iterator is a blocking iterator i.e., it blocks till the next block gets available in the ledger // ResultsIterator contains type BlockHolder -func (rl *fsBasedOrdererLedger) GetBlocksIterator(startBlockNumber uint64) (ledger.ResultsIterator, error) { - return rl.blockStore.RetrieveBlocks(startBlockNumber) +func (l *fsLedger) GetBlocksIterator(startBlockNumber uint64) (ledger.ResultsIterator, error) { + return l.blockStore.RetrieveBlocks(startBlockNumber) } //Prune prunes the blocks/transactions that satisfy the given policy -func (rl *fsBasedOrdererLedger) Prune(policy ledger.PrunePolicy) error { +func (l *fsLedger) Prune(policy ledger.PrunePolicy) error { return errors.New("Not yet implemented") } // Close closes the ledger -func (rl *fsBasedOrdererLedger) Close() { - rl.blockStore.Shutdown() +func (l *fsLedger) Close() { + l.blockStore.Shutdown() } // Commit adds a new block -func (rl *fsBasedOrdererLedger) Commit(block *common.Block) error { - return rl.blockStore.AddBlock(block) +func (l *fsLedger) Commit(block *common.Block) error { + return l.blockStore.AddBlock(block) } diff --git a/core/ledger/ordererledger/fs_ordererledger_provider.go b/orderer/ledger/fsledger/fsledger_provider.go similarity index 60% rename from core/ledger/ordererledger/fs_ordererledger_provider.go rename to orderer/ledger/fsledger/fsledger_provider.go index 5a5c06cf7ad..a8224b8b48b 100644 --- a/core/ledger/ordererledger/fs_ordererledger_provider.go +++ b/orderer/ledger/fsledger/fsledger_provider.go @@ -14,58 +14,57 @@ See the License for the specific language governing permissions and limitations under the License. */ -package ordererledger +package fsledger import ( - "github.com/hyperledger/fabric/core/ledger" - "github.com/hyperledger/fabric/core/ledger/blkstorage" - "github.com/hyperledger/fabric/core/ledger/blkstorage/fsblkstorage" + "github.com/hyperledger/fabric/common/ledger/blkstorage" + "github.com/hyperledger/fabric/common/ledger/blkstorage/fsblkstorage" ) -// FSBasedOrdererLedgerProvider impements interface ledger.OrdererLedgerProvider -type FSBasedOrdererLedgerProvider struct { +// Provider impements interface OrdererLedgerProvider +type Provider struct { blkStoreProvider blkstorage.BlockStoreProvider } -// NewFSBasedOrdererLedgerProvider construct a new filesystem based orderer ledger provider. Only one instance should be created -func NewFSBasedOrdererLedgerProvider(conf *fsblkstorage.Conf) *FSBasedOrdererLedgerProvider { +// NewProvider construct a new filesystem based orderer ledger provider. Only one instance should be created +func NewProvider(conf *fsblkstorage.Conf) *Provider { attrsToIndex := []blkstorage.IndexableAttr{ blkstorage.IndexableAttrBlockNum, } indexConfig := &blkstorage.IndexConfig{AttrsToIndex: attrsToIndex} fsBlkStoreProvider := fsblkstorage.NewProvider(conf, indexConfig) - return &FSBasedOrdererLedgerProvider{fsBlkStoreProvider} + return &Provider{fsBlkStoreProvider} } // Create implements corresponding method in the interface ledger.OrdererLedgerProvider -func (p *FSBasedOrdererLedgerProvider) Create(ledgerID string) (ledger.OrdererLedger, error) { +func (p *Provider) Create(ledgerID string) (OrdererLedger, error) { blkStore, err := p.blkStoreProvider.CreateBlockStore(ledgerID) if err != nil { return nil, err } - return &fsBasedOrdererLedger{blkStore}, nil + return &fsLedger{blkStore}, nil } // Open implements corresponding method in the interface ledger.OrdererLedgerProvider -func (p *FSBasedOrdererLedgerProvider) Open(ledgerID string) (ledger.OrdererLedger, error) { +func (p *Provider) Open(ledgerID string) (OrdererLedger, error) { blkStore, err := p.blkStoreProvider.OpenBlockStore(ledgerID) if err != nil { return nil, err } - return &fsBasedOrdererLedger{blkStore}, nil + return &fsLedger{blkStore}, nil } // Exists implements corresponding method in the interface ledger.OrdererLedgerProvider -func (p *FSBasedOrdererLedgerProvider) Exists(ledgerID string) (bool, error) { +func (p *Provider) Exists(ledgerID string) (bool, error) { return p.blkStoreProvider.Exists(ledgerID) } // List implements corresponding method in the interface ledger.OrdererLedgerProvider -func (p *FSBasedOrdererLedgerProvider) List() ([]string, error) { +func (p *Provider) List() ([]string, error) { return p.blkStoreProvider.List() } // Close implements corresponding method in the interface ledger.OrdererLedgerProvider -func (p *FSBasedOrdererLedgerProvider) Close() { +func (p *Provider) Close() { p.blkStoreProvider.Close() } diff --git a/core/ledger/ordererledger/fs_ordererledger_test.go b/orderer/ledger/fsledger/fsledger_test.go similarity index 87% rename from core/ledger/ordererledger/fs_ordererledger_test.go rename to orderer/ledger/fsledger/fsledger_test.go index 5a8508c9640..6e8eee7253c 100644 --- a/core/ledger/ordererledger/fs_ordererledger_test.go +++ b/orderer/ledger/fsledger/fsledger_test.go @@ -14,19 +14,19 @@ See the License for the specific language governing permissions and limitations under the License. */ -package ordererledger +package fsledger import ( "os" "testing" - "github.com/hyperledger/fabric/core/ledger" - "github.com/hyperledger/fabric/core/ledger/blkstorage/fsblkstorage" - "github.com/hyperledger/fabric/core/ledger/testutil" + "github.com/hyperledger/fabric/common/ledger" + "github.com/hyperledger/fabric/common/ledger/blkstorage/fsblkstorage" + "github.com/hyperledger/fabric/common/ledger/testutil" ) const ( - testFolder = "/tmp/fabric/ledgertests/ordererledger" + testFolder = "/tmp/fabric/orderer/ledger/fsledger" ) func TestOrdererLedger(t *testing.T) { @@ -34,7 +34,7 @@ func TestOrdererLedger(t *testing.T) { cleanup(t) defer cleanup(t) - ordererLedgerProvider := NewFSBasedOrdererLedgerProvider(conf) + ordererLedgerProvider := NewProvider(conf) defer ordererLedgerProvider.Close() ordererLedger, _ := ordererLedgerProvider.Create("testLedger") diff --git a/orderer/ledger/fsledger/ledger_interface.go b/orderer/ledger/fsledger/ledger_interface.go new file mode 100644 index 00000000000..23ae3404b7b --- /dev/null +++ b/orderer/ledger/fsledger/ledger_interface.go @@ -0,0 +1,40 @@ +/* +Copyright IBM Corp. 2016 All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package fsledger + +import ( + commonledger "github.com/hyperledger/fabric/common/ledger" +) + +// OrdererLedger implements methods required by 'orderer ledger' +type OrdererLedger interface { + commonledger.Ledger +} + +// OrdererLedgerProvider provides handle to raw ledger instances +type OrdererLedgerProvider interface { + // Create creates a new ledger with a given unique id + Create(ledgerID string) (OrdererLedger, error) + // Open opens an already created ledger + Open(ledgerID string) (OrdererLedger, error) + // Exists tells whether the ledger with given id exits + Exists(ledgerID string) (bool, error) + // List lists the ids of the existing ledgers + List() ([]string, error) + // Close closes the ValidatedLedgerProvider + Close() +} diff --git a/protos/common/common.pb.go b/protos/common/common.pb.go index 70aec0d9d69..749b98d06da 100644 --- a/protos/common/common.pb.go +++ b/protos/common/common.pb.go @@ -9,6 +9,7 @@ It is generated from these files: common/common.proto common/configtx.proto common/configuration.proto + common/ledger.proto common/msp_principal.proto common/policies.proto @@ -33,6 +34,7 @@ It has these top-level messages: HashingAlgorithm BlockDataHashingStructure OrdererAddresses + BlockchainInfo MSPPrincipal OrganizationUnit MSPRole diff --git a/protos/common/ledger.pb.go b/protos/common/ledger.pb.go new file mode 100644 index 00000000000..f19da1b3bdb --- /dev/null +++ b/protos/common/ledger.pb.go @@ -0,0 +1,48 @@ +// Code generated by protoc-gen-go. +// source: common/ledger.proto +// DO NOT EDIT! + +package common + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// Contains information about the blockchain ledger such as height, current +// block hash, and previous block hash. +type BlockchainInfo struct { + Height uint64 `protobuf:"varint,1,opt,name=height" json:"height,omitempty"` + CurrentBlockHash []byte `protobuf:"bytes,2,opt,name=currentBlockHash,proto3" json:"currentBlockHash,omitempty"` + PreviousBlockHash []byte `protobuf:"bytes,3,opt,name=previousBlockHash,proto3" json:"previousBlockHash,omitempty"` +} + +func (m *BlockchainInfo) Reset() { *m = BlockchainInfo{} } +func (m *BlockchainInfo) String() string { return proto.CompactTextString(m) } +func (*BlockchainInfo) ProtoMessage() {} +func (*BlockchainInfo) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{0} } + +func init() { + proto.RegisterType((*BlockchainInfo)(nil), "common.BlockchainInfo") +} + +func init() { proto.RegisterFile("common/ledger.proto", fileDescriptor3) } + +var fileDescriptor3 = []byte{ + // 173 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xe2, 0x12, 0x4e, 0xce, 0xcf, 0xcd, + 0xcd, 0xcf, 0xd3, 0xcf, 0x49, 0x4d, 0x49, 0x4f, 0x2d, 0xd2, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, + 0x62, 0x83, 0x08, 0x2a, 0x35, 0x31, 0x72, 0xf1, 0x39, 0xe5, 0xe4, 0x27, 0x67, 0x27, 0x67, 0x24, + 0x66, 0xe6, 0x79, 0xe6, 0xa5, 0xe5, 0x0b, 0x89, 0x71, 0xb1, 0x65, 0xa4, 0x66, 0xa6, 0x67, 0x94, + 0x48, 0x30, 0x2a, 0x30, 0x6a, 0xb0, 0x04, 0x41, 0x79, 0x42, 0x5a, 0x5c, 0x02, 0xc9, 0xa5, 0x45, + 0x45, 0xa9, 0x79, 0x25, 0x60, 0x0d, 0x1e, 0x89, 0xc5, 0x19, 0x12, 0x4c, 0x0a, 0x8c, 0x1a, 0x3c, + 0x41, 0x18, 0xe2, 0x42, 0x3a, 0x5c, 0x82, 0x05, 0x45, 0xa9, 0x65, 0x99, 0xf9, 0xa5, 0xc5, 0x08, + 0xc5, 0xcc, 0x60, 0xc5, 0x98, 0x12, 0x4e, 0xba, 0x51, 0xda, 0xe9, 0x99, 0x25, 0x19, 0xa5, 0x49, + 0x7a, 0xc9, 0xf9, 0xb9, 0xfa, 0x19, 0x95, 0x05, 0xa9, 0x45, 0x10, 0xc7, 0xea, 0xa7, 0x25, 0x26, + 0x15, 0x65, 0x26, 0xeb, 0x83, 0xdd, 0x5c, 0xac, 0x0f, 0x71, 0x73, 0x12, 0x1b, 0x98, 0x6b, 0x0c, + 0x08, 0x00, 0x00, 0xff, 0xff, 0xb5, 0x93, 0x7a, 0x44, 0xd9, 0x00, 0x00, 0x00, +} diff --git a/protos/common/ledger.proto b/protos/common/ledger.proto new file mode 100644 index 00000000000..573ca34002b --- /dev/null +++ b/protos/common/ledger.proto @@ -0,0 +1,29 @@ +/* +Copyright IBM Corp. 2016 All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ +syntax = "proto3"; + +option go_package = "github.com/hyperledger/fabric/protos/common"; + +package common; + +// Contains information about the blockchain ledger such as height, current +// block hash, and previous block hash. +message BlockchainInfo { + uint64 height = 1; + bytes currentBlockHash = 2; + bytes previousBlockHash = 3; + +} diff --git a/protos/common/msp_principal.pb.go b/protos/common/msp_principal.pb.go index 24b4e428b11..8b608e01356 100644 --- a/protos/common/msp_principal.pb.go +++ b/protos/common/msp_principal.pb.go @@ -41,7 +41,7 @@ func (x MSPPrincipal_Classification) String() string { return proto.EnumName(MSPPrincipal_Classification_name, int32(x)) } func (MSPPrincipal_Classification) EnumDescriptor() ([]byte, []int) { - return fileDescriptor3, []int{0, 0} + return fileDescriptor4, []int{0, 0} } type MSPRole_MSPRoleType int32 @@ -63,7 +63,7 @@ var MSPRole_MSPRoleType_value = map[string]int32{ func (x MSPRole_MSPRoleType) String() string { return proto.EnumName(MSPRole_MSPRoleType_name, int32(x)) } -func (MSPRole_MSPRoleType) EnumDescriptor() ([]byte, []int) { return fileDescriptor3, []int{2, 0} } +func (MSPRole_MSPRoleType) EnumDescriptor() ([]byte, []int) { return fileDescriptor4, []int{2, 0} } // MSPPrincipal aims to represent an MSP-centric set of identities. // In particular, this structure allows for definition of @@ -103,7 +103,7 @@ type MSPPrincipal struct { func (m *MSPPrincipal) Reset() { *m = MSPPrincipal{} } func (m *MSPPrincipal) String() string { return proto.CompactTextString(m) } func (*MSPPrincipal) ProtoMessage() {} -func (*MSPPrincipal) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{0} } +func (*MSPPrincipal) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{0} } // OrganizationUnit governs the organization of the Principal // field of a policy principal when a specific organization unity members @@ -120,7 +120,7 @@ type OrganizationUnit struct { func (m *OrganizationUnit) Reset() { *m = OrganizationUnit{} } func (m *OrganizationUnit) String() string { return proto.CompactTextString(m) } func (*OrganizationUnit) ProtoMessage() {} -func (*OrganizationUnit) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{1} } +func (*OrganizationUnit) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{1} } // MSPRole governs the organization of the Principal // field of an MSPPrincipal when it aims to define one of the @@ -137,7 +137,7 @@ type MSPRole struct { func (m *MSPRole) Reset() { *m = MSPRole{} } func (m *MSPRole) String() string { return proto.CompactTextString(m) } func (*MSPRole) ProtoMessage() {} -func (*MSPRole) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{2} } +func (*MSPRole) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{2} } func init() { proto.RegisterType((*MSPPrincipal)(nil), "common.MSPPrincipal") @@ -147,9 +147,9 @@ func init() { proto.RegisterEnum("common.MSPRole_MSPRoleType", MSPRole_MSPRoleType_name, MSPRole_MSPRoleType_value) } -func init() { proto.RegisterFile("common/msp_principal.proto", fileDescriptor3) } +func init() { proto.RegisterFile("common/msp_principal.proto", fileDescriptor4) } -var fileDescriptor3 = []byte{ +var fileDescriptor4 = []byte{ // 316 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x8c, 0x92, 0xc1, 0x4b, 0xc3, 0x30, 0x14, 0xc6, 0x97, 0xa1, 0x93, 0x3e, 0xb7, 0x52, 0x72, 0xd0, 0x31, 0x3d, 0x8c, 0xba, 0xc3, 0x40, diff --git a/protos/common/policies.pb.go b/protos/common/policies.pb.go index ae490bfca98..4d1dc9479d9 100644 --- a/protos/common/policies.pb.go +++ b/protos/common/policies.pb.go @@ -35,7 +35,7 @@ var Policy_PolicyType_value = map[string]int32{ func (x Policy_PolicyType) String() string { return proto.EnumName(Policy_PolicyType_name, int32(x)) } -func (Policy_PolicyType) EnumDescriptor() ([]byte, []int) { return fileDescriptor4, []int{0, 0} } +func (Policy_PolicyType) EnumDescriptor() ([]byte, []int) { return fileDescriptor5, []int{0, 0} } // Policy expresses a policy which the orderer can evaluate, because there has been some desire expressed to support // multiple policy engines, this is typed as a oneof for now @@ -47,7 +47,7 @@ type Policy struct { func (m *Policy) Reset() { *m = Policy{} } func (m *Policy) String() string { return proto.CompactTextString(m) } func (*Policy) ProtoMessage() {} -func (*Policy) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{0} } +func (*Policy) Descriptor() ([]byte, []int) { return fileDescriptor5, []int{0} } // SignaturePolicyEnvelope wraps a SignaturePolicy and includes a version for future enhancements type SignaturePolicyEnvelope struct { @@ -59,7 +59,7 @@ type SignaturePolicyEnvelope struct { func (m *SignaturePolicyEnvelope) Reset() { *m = SignaturePolicyEnvelope{} } func (m *SignaturePolicyEnvelope) String() string { return proto.CompactTextString(m) } func (*SignaturePolicyEnvelope) ProtoMessage() {} -func (*SignaturePolicyEnvelope) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{1} } +func (*SignaturePolicyEnvelope) Descriptor() ([]byte, []int) { return fileDescriptor5, []int{1} } func (m *SignaturePolicyEnvelope) GetPolicy() *SignaturePolicy { if m != nil { @@ -91,7 +91,7 @@ type SignaturePolicy struct { func (m *SignaturePolicy) Reset() { *m = SignaturePolicy{} } func (m *SignaturePolicy) String() string { return proto.CompactTextString(m) } func (*SignaturePolicy) ProtoMessage() {} -func (*SignaturePolicy) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{2} } +func (*SignaturePolicy) Descriptor() ([]byte, []int) { return fileDescriptor5, []int{2} } type isSignaturePolicy_Type interface { isSignaturePolicy_Type() @@ -205,7 +205,7 @@ type SignaturePolicy_NOutOf struct { func (m *SignaturePolicy_NOutOf) Reset() { *m = SignaturePolicy_NOutOf{} } func (m *SignaturePolicy_NOutOf) String() string { return proto.CompactTextString(m) } func (*SignaturePolicy_NOutOf) ProtoMessage() {} -func (*SignaturePolicy_NOutOf) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{2, 0} } +func (*SignaturePolicy_NOutOf) Descriptor() ([]byte, []int) { return fileDescriptor5, []int{2, 0} } func (m *SignaturePolicy_NOutOf) GetPolicies() []*SignaturePolicy { if m != nil { @@ -222,9 +222,9 @@ func init() { proto.RegisterEnum("common.Policy_PolicyType", Policy_PolicyType_name, Policy_PolicyType_value) } -func init() { proto.RegisterFile("common/policies.proto", fileDescriptor4) } +func init() { proto.RegisterFile("common/policies.proto", fileDescriptor5) } -var fileDescriptor4 = []byte{ +var fileDescriptor5 = []byte{ // 357 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x74, 0x51, 0xe1, 0x6a, 0xc2, 0x30, 0x18, 0x34, 0xea, 0xaa, 0xfb, 0x74, 0x4c, 0xc2, 0x36, 0x8b, 0x8c, 0x21, 0xfd, 0x25, 0x8c, 0xb5, diff --git a/protos/peer/admin.pb.go b/protos/peer/admin.pb.go index 84538f6471f..81621e43c15 100644 --- a/protos/peer/admin.pb.go +++ b/protos/peer/admin.pb.go @@ -45,7 +45,6 @@ It has these top-level messages: Event PeerID PeerEndpoint - BlockchainInfo SignedProposal Proposal ChaincodeHeaderExtension diff --git a/protos/peer/peer.pb.go b/protos/peer/peer.pb.go index b808b543bd5..484d3a0597c 100644 --- a/protos/peer/peer.pb.go +++ b/protos/peer/peer.pb.go @@ -44,23 +44,9 @@ func (m *PeerEndpoint) GetID() *PeerID { return nil } -// Contains information about the blockchain ledger such as height, current -// block hash, and previous block hash. -type BlockchainInfo struct { - Height uint64 `protobuf:"varint,1,opt,name=height" json:"height,omitempty"` - CurrentBlockHash []byte `protobuf:"bytes,2,opt,name=currentBlockHash,proto3" json:"currentBlockHash,omitempty"` - PreviousBlockHash []byte `protobuf:"bytes,3,opt,name=previousBlockHash,proto3" json:"previousBlockHash,omitempty"` -} - -func (m *BlockchainInfo) Reset() { *m = BlockchainInfo{} } -func (m *BlockchainInfo) String() string { return proto.CompactTextString(m) } -func (*BlockchainInfo) ProtoMessage() {} -func (*BlockchainInfo) Descriptor() ([]byte, []int) { return fileDescriptor5, []int{2} } - func init() { proto.RegisterType((*PeerID)(nil), "protos.PeerID") proto.RegisterType((*PeerEndpoint)(nil), "protos.PeerEndpoint") - proto.RegisterType((*BlockchainInfo)(nil), "protos.BlockchainInfo") } // Reference imports to suppress errors if they are not otherwise used. @@ -138,24 +124,20 @@ var _Endorser_serviceDesc = grpc.ServiceDesc{ func init() { proto.RegisterFile("peer/peer.proto", fileDescriptor5) } var fileDescriptor5 = []byte{ - // 297 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x64, 0x51, 0x4d, 0x6b, 0xf2, 0x40, - 0x10, 0x7e, 0xf5, 0x15, 0xdb, 0x4e, 0x45, 0xdb, 0x2d, 0x48, 0x10, 0x29, 0x25, 0xa7, 0x7e, 0x61, - 0xc0, 0xfe, 0x03, 0x51, 0x30, 0x37, 0x9b, 0xde, 0x7a, 0x29, 0x31, 0x19, 0x93, 0xa5, 0xba, 0xb3, - 0xcc, 0xc4, 0x42, 0xaf, 0xfd, 0xe5, 0xc5, 0xdd, 0xa4, 0xa5, 0x78, 0xd9, 0x9d, 0x79, 0xbe, 0x60, - 0x66, 0x60, 0x60, 0x11, 0x39, 0x3a, 0x3c, 0x13, 0xcb, 0x54, 0x91, 0xea, 0xba, 0x4f, 0x46, 0x57, - 0x9e, 0x60, 0xb2, 0x24, 0xe9, 0xd6, 0x93, 0xa3, 0xf1, 0x1f, 0xf0, 0x8d, 0x51, 0x2c, 0x19, 0x41, - 0xcf, 0x86, 0x63, 0xe8, 0xae, 0x10, 0x39, 0x9e, 0x2b, 0x05, 0x1d, 0x93, 0xee, 0x30, 0x68, 0xdd, - 0xb4, 0x6e, 0xcf, 0x12, 0x57, 0x87, 0x4b, 0xe8, 0x1d, 0xd8, 0x85, 0xc9, 0x2d, 0x69, 0x53, 0xa9, - 0x6b, 0x68, 0xc7, 0x73, 0xa7, 0x38, 0x9f, 0xf6, 0x7d, 0x82, 0x4c, 0xbc, 0x3f, 0x69, 0xc7, 0x73, - 0x15, 0xc0, 0x49, 0x9a, 0xe7, 0x8c, 0x22, 0x41, 0xdb, 0xc5, 0x34, 0x6d, 0xf8, 0xd5, 0x82, 0xfe, - 0x6c, 0x4b, 0xd9, 0x7b, 0x56, 0xa6, 0xda, 0xc4, 0x66, 0x43, 0x6a, 0x08, 0xdd, 0x12, 0x75, 0x51, - 0x56, 0x2e, 0xb0, 0x93, 0xd4, 0x9d, 0xba, 0x87, 0x8b, 0x6c, 0xcf, 0x8c, 0xa6, 0x72, 0x86, 0x65, - 0x2a, 0xa5, 0x4b, 0xeb, 0x25, 0x47, 0xb8, 0x7a, 0x84, 0x4b, 0xcb, 0xf8, 0xa1, 0x69, 0x2f, 0xbf, - 0xe2, 0xff, 0x4e, 0x7c, 0x4c, 0x4c, 0x9f, 0xe1, 0x74, 0x61, 0x72, 0x62, 0x41, 0x56, 0x0b, 0x18, - 0xac, 0x98, 0x32, 0x14, 0x59, 0xd5, 0xab, 0x51, 0xc3, 0x66, 0xa2, 0x17, 0x5d, 0x18, 0xcc, 0x1b, - 0x7c, 0x14, 0xfc, 0x4c, 0x5a, 0x23, 0x49, 0xbd, 0xc3, 0xf0, 0xdf, 0xec, 0xe1, 0xf5, 0xae, 0xd0, - 0x55, 0xb9, 0x5f, 0x4f, 0x32, 0xda, 0x45, 0xe5, 0xa7, 0x45, 0xde, 0x62, 0x5e, 0x20, 0x47, 0x9b, - 0x74, 0xcd, 0x3a, 0x8b, 0xbc, 0xd5, 0x5d, 0x6b, 0xed, 0xef, 0xf4, 0xf4, 0x1d, 0x00, 0x00, 0xff, - 0xff, 0x33, 0xcf, 0xcc, 0xdb, 0xc1, 0x01, 0x00, 0x00, + // 235 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x54, 0x90, 0x4f, 0x4b, 0xc4, 0x30, + 0x10, 0xc5, 0xdd, 0x22, 0xab, 0x8e, 0xe2, 0x42, 0x04, 0x29, 0x65, 0x11, 0xe9, 0x49, 0x11, 0x5a, + 0x58, 0xbf, 0x81, 0xb4, 0x60, 0x6f, 0xb5, 0xde, 0xbc, 0x48, 0xdb, 0x8c, 0xdd, 0xc0, 0x6e, 0x26, + 0xcc, 0xd4, 0x83, 0xdf, 0x5e, 0x9a, 0xb4, 0x82, 0x97, 0xfc, 0x79, 0xbf, 0xcc, 0xcb, 0xe3, 0xc1, + 0xc6, 0x21, 0x72, 0x3e, 0x2d, 0x99, 0x63, 0x1a, 0x49, 0xad, 0xfd, 0x26, 0xc9, 0x4d, 0x00, 0x4c, + 0x8e, 0xa4, 0x3d, 0x04, 0x98, 0x6c, 0xff, 0x89, 0x9f, 0x8c, 0xe2, 0xc8, 0x0a, 0x06, 0x9a, 0x6e, + 0x61, 0x5d, 0x23, 0x72, 0x55, 0x28, 0x05, 0xa7, 0xb6, 0x3d, 0x62, 0xbc, 0xba, 0x5f, 0x3d, 0x5c, + 0x34, 0xfe, 0x9c, 0xbe, 0xc2, 0xd5, 0x44, 0x4b, 0xab, 0x1d, 0x19, 0x3b, 0xaa, 0x3b, 0x88, 0xaa, + 0xc2, 0xbf, 0xb8, 0xdc, 0x5d, 0x07, 0x07, 0xc9, 0xc2, 0x7c, 0x13, 0x55, 0x85, 0x8a, 0xe1, 0xac, + 0xd5, 0x9a, 0x51, 0x24, 0x8e, 0xbc, 0xcd, 0x72, 0xdd, 0xbd, 0xc1, 0x79, 0x69, 0x35, 0xb1, 0x20, + 0xab, 0x12, 0x36, 0x35, 0x53, 0x8f, 0x22, 0xf5, 0x9c, 0x4a, 0xdd, 0x2e, 0x66, 0xef, 0x66, 0xb0, + 0xa8, 0x17, 0x3d, 0x89, 0xff, 0x3e, 0x99, 0x95, 0x66, 0x8e, 0x9f, 0x9e, 0xbc, 0x3c, 0x7d, 0x3c, + 0x0e, 0x66, 0xdc, 0x7f, 0x77, 0x59, 0x4f, 0xc7, 0x7c, 0xff, 0xe3, 0x90, 0x0f, 0xa8, 0x07, 0xe4, + 0xfc, 0xab, 0xed, 0xd8, 0xf4, 0x79, 0x18, 0xf5, 0x45, 0x75, 0xa1, 0xa2, 0xe7, 0xdf, 0x00, 0x00, + 0x00, 0xff, 0xff, 0x7f, 0x48, 0x87, 0xef, 0x3c, 0x01, 0x00, 0x00, } diff --git a/protos/peer/peer.proto b/protos/peer/peer.proto index ded24eaf483..5b0e2041c8b 100644 --- a/protos/peer/peer.proto +++ b/protos/peer/peer.proto @@ -31,16 +31,6 @@ message PeerEndpoint { string address = 2; } -// Contains information about the blockchain ledger such as height, current -// block hash, and previous block hash. -message BlockchainInfo { - - uint64 height = 1; - bytes currentBlockHash = 2; - bytes previousBlockHash = 3; - -} - //-------- the Endorser service ------------ service Endorser {