Skip to content

Commit d58d51b

Browse files
committed
[FAB-1390] Refactor ledger interface names
https://jira.hyperledger.org/browse/FAB-1390 A few things changed according to FAB-1390 description and the latest NCAP 1. renamed RawLedger interface to OrdererLedger 2. added PeerLedger interface which keeps a bitmask to indicate invalid transactions as described in NCAP 3. changed ledger API description in Next-Ledger-Architecture-Proposal 4. refactored rawledger package to ordererledger in orderer directory Please notice that with this change set, there'll be cases of inconsistent package names with import path. This is a tradeoff to avoid stuttering path names These cases are listed as below. Package name, import path (ordererledger, github.com/hyperledger/fabric/orderer/ledger) (ramledger, github.com/hyperledger/fabric/orderer/ledger/ram) (fileledger, github.com/hyperledger/fabric/orderer/ledger/file) Change-Id: Ie9580678ee9012ff865d1dc507066f46e106f250 Signed-off-by: Xi Xue Jia <[email protected]>
1 parent a158adb commit d58d51b

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

44 files changed

+248
-238
lines changed

core/chaincode/ccproviderimpl.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ type ccProviderContextImpl struct {
3535
}
3636

3737
// GetContext returns a context for the supplied ledger, with the appropriate tx simulator
38-
func (c *ccProviderImpl) GetContext(ledger ledger.ValidatedLedger) (context.Context, error) {
38+
func (c *ccProviderImpl) GetContext(ledger ledger.PeerLedger) (context.Context, error) {
3939
var err error
4040
// get context for the chaincode execution
4141
c.txsim, err = ledger.NewTxSimulator()

core/chaincode/querier.go

+5-5
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ func (e *LedgerQuerier) Invoke(stub shim.ChaincodeStubInterface) ([]byte, error)
111111
}
112112

113113
// Execute the specified query string
114-
func getQueryResult(vledger ledger.ValidatedLedger, query []byte) (ret []byte, err error) {
114+
func getQueryResult(vledger ledger.PeerLedger, query []byte) (ret []byte, err error) {
115115
if query == nil {
116116
return nil, fmt.Errorf("Query string must not be nil.")
117117
}
@@ -186,7 +186,7 @@ func collectRecord(buffer *bytes.Buffer, rec *ledger.QueryRecord) {
186186
buffer.WriteString("}")
187187
}
188188

189-
func getTransactionByID(vledger ledger.ValidatedLedger, tid []byte) ([]byte, error) {
189+
func getTransactionByID(vledger ledger.PeerLedger, tid []byte) ([]byte, error) {
190190
if tid == nil {
191191
return nil, fmt.Errorf("Transaction ID must not be nil.")
192192
}
@@ -199,7 +199,7 @@ func getTransactionByID(vledger ledger.ValidatedLedger, tid []byte) ([]byte, err
199199
return utils.Marshal(tx)
200200
}
201201

202-
func getBlockByNumber(vledger ledger.ValidatedLedger, number []byte) ([]byte, error) {
202+
func getBlockByNumber(vledger ledger.PeerLedger, number []byte) ([]byte, error) {
203203
if number == nil {
204204
return nil, fmt.Errorf("Block number must not be nil.")
205205
}
@@ -216,7 +216,7 @@ func getBlockByNumber(vledger ledger.ValidatedLedger, number []byte) ([]byte, er
216216
return utils.Marshal(block)
217217
}
218218

219-
func getBlockByHash(vledger ledger.ValidatedLedger, hash []byte) ([]byte, error) {
219+
func getBlockByHash(vledger ledger.PeerLedger, hash []byte) ([]byte, error) {
220220
if hash == nil {
221221
return nil, fmt.Errorf("Block hash must not be nil.")
222222
}
@@ -229,7 +229,7 @@ func getBlockByHash(vledger ledger.ValidatedLedger, hash []byte) ([]byte, error)
229229
return utils.Marshal(block)
230230
}
231231

232-
func getChainInfo(vledger ledger.ValidatedLedger) ([]byte, error) {
232+
func getChainInfo(vledger ledger.PeerLedger) ([]byte, error) {
233233
binfo, err := vledger.GetBlockchainInfo()
234234
if err != nil {
235235
return nil, fmt.Errorf("Failed to get block info with error %s", err)

core/committer/committer_impl.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -39,12 +39,12 @@ func init() {
3939
// it keeps the reference to the ledger to commit blocks and retreive
4040
// chain information
4141
type LedgerCommitter struct {
42-
ledger ledger.ValidatedLedger
42+
ledger ledger.PeerLedger
4343
validator txvalidator.Validator
4444
}
4545

4646
// NewLedgerCommitter is a factory function to create an instance of the committer
47-
func NewLedgerCommitter(ledger ledger.ValidatedLedger, validator txvalidator.Validator) *LedgerCommitter {
47+
func NewLedgerCommitter(ledger ledger.PeerLedger, validator txvalidator.Validator) *LedgerCommitter {
4848
return &LedgerCommitter{ledger: ledger, validator: validator}
4949
}
5050

core/committer/txvalidator/validator.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -47,15 +47,15 @@ type vsccValidator interface {
4747
// vsccValidator implementation which used to call
4848
// vscc chaincode and validate block transactions
4949
type vsccValidatorImpl struct {
50-
ledger ledger.ValidatedLedger
50+
ledger ledger.PeerLedger
5151
ccprovider ccprovider.ChaincodeProvider
5252
}
5353

5454
// implementation of Validator interface, keeps
5555
// reference to the ledger to enable tx simulation
5656
// and execution of vscc
5757
type txValidator struct {
58-
ledger ledger.ValidatedLedger
58+
ledger ledger.PeerLedger
5959
vscc vsccValidator
6060
}
6161

@@ -67,7 +67,7 @@ func init() {
6767
}
6868

6969
// NewTxValidator creates new transactions validator
70-
func NewTxValidator(ledger ledger.ValidatedLedger) Validator {
70+
func NewTxValidator(ledger ledger.PeerLedger) Validator {
7171
// Encapsulates interface implementation
7272
return &txValidator{ledger, &vsccValidatorImpl{ledger: ledger, ccprovider: ccprovider.GetChaincodeProvider()}}
7373
}

core/common/ccprovider/ccprovider.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import (
1313
// should be added below if necessary
1414
type ChaincodeProvider interface {
1515
// GetContext returns a ledger context
16-
GetContext(ledger ledger.ValidatedLedger) (context.Context, error)
16+
GetContext(ledger ledger.PeerLedger) (context.Context, error)
1717
// GetCCContext returns an opaque chaincode context
1818
GetCCContext(cid, name, version, txid string, syscc bool, prop *peer.Proposal) interface{}
1919
// GetVSCCFromLCCC returns the VSCC listed by LCCC for the supplied chaincode

core/ledger/kvledger/example/app.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,11 @@ import (
3030
// App - a sample fund transfer app
3131
type App struct {
3232
name string
33-
ledger ledger.ValidatedLedger
33+
ledger ledger.PeerLedger
3434
}
3535

3636
// ConstructAppInstance constructs an instance of an app
37-
func ConstructAppInstance(ledger ledger.ValidatedLedger) *App {
37+
func ConstructAppInstance(ledger ledger.PeerLedger) *App {
3838
return &App{"PaymentApp", ledger}
3939
}
4040

core/ledger/kvledger/example/committer.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,11 @@ import (
2424

2525
// Committer a toy committer
2626
type Committer struct {
27-
ledger ledger.ValidatedLedger
27+
ledger ledger.PeerLedger
2828
}
2929

3030
// ConstructCommitter constructs a committer for the example
31-
func ConstructCommitter(ledger ledger.ValidatedLedger) *Committer {
31+
func ConstructCommitter(ledger ledger.PeerLedger) *Committer {
3232
return &Committer{ledger}
3333
}
3434

core/ledger/kvledger/example/main/example.go

+4-4
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ const (
3636
ledgerID = "Default"
3737
)
3838

39-
var finalLedger ledger.ValidatedLedger
39+
var peerLedger ledger.PeerLedger
4040
var app *example.App
4141
var committer *example.Committer
4242
var consenter *example.Consenter
@@ -54,12 +54,12 @@ func init() {
5454
cleanup()
5555
ledgermgmt.Initialize()
5656
var err error
57-
finalLedger, err = ledgermgmt.CreateLedger(ledgerID)
57+
peerLedger, err = ledgermgmt.CreateLedger(ledgerID)
5858
if err != nil {
5959
panic(fmt.Errorf("Error in NewKVLedger(): %s", err))
6060
}
61-
app = example.ConstructAppInstance(finalLedger)
62-
committer = example.ConstructCommitter(finalLedger)
61+
app = example.ConstructAppInstance(peerLedger)
62+
committer = example.ConstructCommitter(peerLedger)
6363
consenter = example.ConstructConsenter()
6464
}
6565

core/ledger/kvledger/example/marble_app.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -33,11 +33,11 @@ var logger = logging.MustGetLogger("example")
3333
// App - a sample fund transfer app
3434
type MarbleApp struct {
3535
name string
36-
ledger ledger.ValidatedLedger
36+
ledger ledger.PeerLedger
3737
}
3838

3939
// ConstructAppInstance constructs an instance of an app
40-
func ConstructMarbleAppInstance(ledger ledger.ValidatedLedger) *MarbleApp {
40+
func ConstructMarbleAppInstance(ledger ledger.PeerLedger) *MarbleApp {
4141
return &MarbleApp{"marbles_app", ledger}
4242
}
4343

core/ledger/kvledger/kv_ledger.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ import (
3737

3838
var logger = logging.MustGetLogger("kvledger")
3939

40-
// KVLedger provides an implementation of `ledger.ValidatedLedger`.
40+
// KVLedger provides an implementation of `ledger.PeerLedger`.
4141
// This implementation provides a key-value based data model
4242
type KVLedger struct {
4343
ledgerID string

core/ledger/kvledger/kv_ledger_provider.go

+9-9
Original file line numberDiff line numberDiff line change
@@ -36,15 +36,15 @@ var (
3636
ErrLedgerNotOpened = errors.New("Ledger is not opened yet")
3737
)
3838

39-
// Provider implements interface ledger.ValidatedLedgerProvider
39+
// Provider implements interface ledger.PeerLedgerProvider
4040
type Provider struct {
4141
idStore *idStore
4242
vdbProvider statedb.VersionedDBProvider
4343
}
4444

4545
// NewProvider instantiates a new Provider.
4646
// This is not thread-safe and assumed to be synchronized be the caller
47-
func NewProvider() (ledger.ValidatedLedgerProvider, error) {
47+
func NewProvider() (ledger.PeerLedgerProvider, error) {
4848
logger.Info("Initializing ledger provider")
4949
var vdbProvider statedb.VersionedDBProvider
5050
if !ledgerconfig.IsCouchDBEnabled() {
@@ -64,8 +64,8 @@ func NewProvider() (ledger.ValidatedLedgerProvider, error) {
6464
return &Provider{idStore, vdbProvider}, nil
6565
}
6666

67-
// Create implements the corresponding method from interface ledger.ValidatedLedgerProvider
68-
func (provider *Provider) Create(ledgerID string) (ledger.ValidatedLedger, error) {
67+
// Create implements the corresponding method from interface ledger.PeerLedgerProvider
68+
func (provider *Provider) Create(ledgerID string) (ledger.PeerLedger, error) {
6969
exists, err := provider.idStore.ledgerIDExists(ledgerID)
7070
if err != nil {
7171
return nil, err
@@ -81,8 +81,8 @@ func (provider *Provider) Create(ledgerID string) (ledger.ValidatedLedger, error
8181
return l, nil
8282
}
8383

84-
// Open implements the corresponding method from interface ledger.ValidatedLedgerProvider
85-
func (provider *Provider) Open(ledgerID string) (ledger.ValidatedLedger, error) {
84+
// Open implements the corresponding method from interface ledger.PeerLedgerProvider
85+
func (provider *Provider) Open(ledgerID string) (ledger.PeerLedger, error) {
8686
exists, err := provider.idStore.ledgerIDExists(ledgerID)
8787
if err != nil {
8888
return nil, err
@@ -97,17 +97,17 @@ func (provider *Provider) Open(ledgerID string) (ledger.ValidatedLedger, error)
9797
return l, nil
9898
}
9999

100-
// Exists implements the corresponding method from interface ledger.ValidatedLedgerProvider
100+
// Exists implements the corresponding method from interface ledger.PeerLedgerProvider
101101
func (provider *Provider) Exists(ledgerID string) (bool, error) {
102102
return provider.idStore.ledgerIDExists(ledgerID)
103103
}
104104

105-
// List implements the corresponding method from interface ledger.ValidatedLedgerProvider
105+
// List implements the corresponding method from interface ledger.PeerLedgerProvider
106106
func (provider *Provider) List() ([]string, error) {
107107
return provider.idStore.getAllLedgerIds()
108108
}
109109

110-
// Close implements the corresponding method from interface ledger.ValidatedLedgerProvider
110+
// Close implements the corresponding method from interface ledger.PeerLedgerProvider
111111
func (provider *Provider) Close() {
112112
provider.vdbProvider.Close()
113113
provider.idStore.close()

core/ledger/kvledger/kv_ledger_provider_test.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ func TestMultipleLedgerBasicRW(t *testing.T) {
6161
defer env.cleanup()
6262
numLedgers := 10
6363
provider, _ := NewProvider()
64-
ledgers := make([]ledger.ValidatedLedger, numLedgers)
64+
ledgers := make([]ledger.PeerLedger, numLedgers)
6565
for i := 0; i < numLedgers; i++ {
6666
l, err := provider.Create(constructTestLedgerID(i))
6767
testutil.AssertNoError(t, err, "")
@@ -85,7 +85,7 @@ func TestMultipleLedgerBasicRW(t *testing.T) {
8585

8686
provider, _ = NewProvider()
8787
defer provider.Close()
88-
ledgers = make([]ledger.ValidatedLedger, numLedgers)
88+
ledgers = make([]ledger.PeerLedger, numLedgers)
8989
for i := 0; i < numLedgers; i++ {
9090
l, err := provider.Open(constructTestLedgerID(i))
9191
testutil.AssertNoError(t, err, "")

core/ledger/kvledger/marble_example/main/marble_example.go

+4-4
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ const (
3737

3838
var logger = logging.MustGetLogger("main")
3939

40-
var finalLedger ledger.ValidatedLedger
40+
var peerLedger ledger.PeerLedger
4141
var marbleApp *example.MarbleApp
4242
var committer *example.Committer
4343
var consenter *example.Consenter
@@ -55,12 +55,12 @@ func init() {
5555
cleanup()
5656
ledgermgmt.Initialize()
5757
var err error
58-
finalLedger, err = ledgermgmt.CreateLedger(ledgerID)
58+
peerLedger, err = ledgermgmt.CreateLedger(ledgerID)
5959
if err != nil {
6060
panic(fmt.Errorf("Error in NewKVLedger(): %s", err))
6161
}
62-
marbleApp = example.ConstructMarbleAppInstance(finalLedger)
63-
committer = example.ConstructCommitter(finalLedger)
62+
marbleApp = example.ConstructMarbleAppInstance(peerLedger)
63+
committer = example.ConstructCommitter(peerLedger)
6464
consenter = example.ConstructConsenter()
6565
}
6666

core/ledger/ledger_interface.go

+19-13
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ import (
2121
pb "github.com/hyperledger/fabric/protos/peer"
2222
)
2323

24-
// Ledger captures the methods that are common across the 'raw ledger' and the 'final ledger'
24+
// Ledger captures the methods that are common across the 'PeerLedger', 'OrdererLedger', and 'ValidatedLedger'
2525
type Ledger interface {
2626
// GetBlockchainInfo returns basic info about blockchain
2727
GetBlockchainInfo() (*pb.BlockchainInfo, error)
@@ -32,36 +32,34 @@ type Ledger interface {
3232
// The iterator is a blocking iterator i.e., it blocks till the next block gets available in the ledger
3333
// ResultsIterator contains type BlockHolder
3434
GetBlocksIterator(startBlockNumber uint64) (ResultsIterator, error)
35-
//Prune prunes the blocks/transactions that satisfy the given policy
36-
Prune(policy PrunePolicy) error
3735
// Close closes the ledger
3836
Close()
3937
}
4038

41-
// RawLedger implements methods required by 'raw ledger'
42-
type RawLedger interface {
39+
// OrdererLedger implements methods required by 'orderer ledger'
40+
type OrdererLedger interface {
4341
Ledger
4442
// CommitBlock adds a new block
4543
CommitBlock(block *common.Block) error
4644
}
4745

48-
// ValidatedLedgerProvider provides handle to ledger instances
49-
type ValidatedLedgerProvider interface {
46+
// PeerLedgerProvider provides handle to ledger instances
47+
type PeerLedgerProvider interface {
5048
// CreateLedger creates a new ledger with a given unique id
51-
Create(ledgerID string) (ValidatedLedger, error)
49+
Create(ledgerID string) (PeerLedger, error)
5250
// OpenLedger opens an already created ledger
53-
Open(ledgerID string) (ValidatedLedger, error)
51+
Open(ledgerID string) (PeerLedger, error)
5452
// Exists tells whether the ledger with given id exits
5553
Exists(ledgerID string) (bool, error)
5654
// List lists the ids of the existing ledgers
5755
List() ([]string, error)
58-
// Close closes the ValidatedLedgerProvider
56+
// Close closes the PeerLedgerProvider
5957
Close()
6058
}
6159

62-
// ValidatedLedger represents the 'final ledger'. In addition to implement the methods inherited from the Ledger,
63-
// it provides the handle to objects for querying the state and executing transactions.
64-
type ValidatedLedger interface {
60+
// PeerLedger differs from the OrdererLedger in that PeerLedger locally maintain a bitmask
61+
// that tells apart valid transactions from invalid ones
62+
type PeerLedger interface {
6563
Ledger
6664
// GetTransactionByID retrieves a transaction by id
6765
GetTransactionByID(txID string) (*pb.Transaction, error)
@@ -81,6 +79,14 @@ type ValidatedLedger interface {
8179
NewHistoryQueryExecutor() (HistoryQueryExecutor, error)
8280
// Commits block into the ledger
8381
Commit(block *common.Block) error
82+
//Prune prunes the blocks/transactions that satisfy the given policy
83+
Prune(policy PrunePolicy) error
84+
}
85+
86+
// ValidatedLedger represents the 'final ledger' after filtering out invalid transactions from PeerLedger.
87+
// Post-v1
88+
type ValidatedLedger interface {
89+
Ledger
8490
}
8591

8692
// QueryExecutor executes the queries

0 commit comments

Comments
 (0)