...

Package pvtdatastorage

import "github.com/hyperledger/fabric/core/ledger/pvtdatastorage"
Overview
Index

Overview ▾

Index ▾

type CollElgInfo
    func (*CollElgInfo) Descriptor() ([]byte, []int)
    func (m *CollElgInfo) GetNsCollMap() map[string]*CollNames
    func (*CollElgInfo) ProtoMessage()
    func (m *CollElgInfo) Reset()
    func (m *CollElgInfo) String() string
    func (m *CollElgInfo) XXX_DiscardUnknown()
    func (m *CollElgInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)
    func (dst *CollElgInfo) XXX_Merge(src proto.Message)
    func (m *CollElgInfo) XXX_Size() int
    func (m *CollElgInfo) XXX_Unmarshal(b []byte) error
type CollNames
    func (*CollNames) Descriptor() ([]byte, []int)
    func (m *CollNames) GetEntries() []string
    func (*CollNames) ProtoMessage()
    func (m *CollNames) Reset()
    func (m *CollNames) String() string
    func (m *CollNames) XXX_DiscardUnknown()
    func (m *CollNames) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)
    func (dst *CollNames) XXX_Merge(src proto.Message)
    func (m *CollNames) XXX_Size() int
    func (m *CollNames) XXX_Unmarshal(b []byte) error
type Collections
    func (*Collections) Descriptor() ([]byte, []int)
    func (m *Collections) GetMap() map[string]*TxNums
    func (m *Collections) GetMissingDataMap() map[string]bool
    func (*Collections) ProtoMessage()
    func (m *Collections) Reset()
    func (m *Collections) String() string
    func (m *Collections) XXX_DiscardUnknown()
    func (m *Collections) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)
    func (dst *Collections) XXX_Merge(src proto.Message)
    func (m *Collections) XXX_Size() int
    func (m *Collections) XXX_Unmarshal(b []byte) error
type ErrIllegalArgs
    func (err *ErrIllegalArgs) Error() string
type ErrIllegalCall
    func (err *ErrIllegalCall) Error() string
type ErrOutOfRange
    func (err *ErrOutOfRange) Error() string
type ExpiryData
    func (*ExpiryData) Descriptor() ([]byte, []int)
    func (m *ExpiryData) GetMap() map[string]*Collections
    func (*ExpiryData) ProtoMessage()
    func (m *ExpiryData) Reset()
    func (m *ExpiryData) String() string
    func (m *ExpiryData) XXX_DiscardUnknown()
    func (m *ExpiryData) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)
    func (dst *ExpiryData) XXX_Merge(src proto.Message)
    func (m *ExpiryData) XXX_Size() int
    func (m *ExpiryData) XXX_Unmarshal(b []byte) error
type Provider
    func NewProvider() Provider
type Store
type StoreEnv
    func NewTestStoreEnv(t *testing.T, ledgerid string, btlPolicy pvtdatapolicy.BTLPolicy) *StoreEnv
    func (env *StoreEnv) Cleanup()
    func (env *StoreEnv) CloseAndReopen()
type TxNums
    func (*TxNums) Descriptor() ([]byte, []int)
    func (m *TxNums) GetList() []uint64
    func (*TxNums) ProtoMessage()
    func (m *TxNums) Reset()
    func (m *TxNums) String() string
    func (m *TxNums) XXX_DiscardUnknown()
    func (m *TxNums) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)
    func (dst *TxNums) XXX_Merge(src proto.Message)
    func (m *TxNums) XXX_Size() int
    func (m *TxNums) XXX_Unmarshal(b []byte) error

Package files

helper.go kv_encoding.go persistent_msgs.pb.go persistent_msgs_helper.go store.go store_impl.go test_exports.go v11.go

type CollElgInfo

type CollElgInfo struct {
    NsCollMap            map[string]*CollNames `protobuf:"bytes,1,rep,name=nsCollMap,proto3" json:"nsCollMap,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
    XXX_NoUnkeyedLiteral struct{}              `json:"-"`
    XXX_unrecognized     []byte                `json:"-"`
    XXX_sizecache        int32                 `json:"-"`
}

func (*CollElgInfo) Descriptor

func (*CollElgInfo) Descriptor() ([]byte, []int)

func (*CollElgInfo) GetNsCollMap

func (m *CollElgInfo) GetNsCollMap() map[string]*CollNames

func (*CollElgInfo) ProtoMessage

func (*CollElgInfo) ProtoMessage()

func (*CollElgInfo) Reset

func (m *CollElgInfo) Reset()

func (*CollElgInfo) String

func (m *CollElgInfo) String() string

func (*CollElgInfo) XXX_DiscardUnknown

func (m *CollElgInfo) XXX_DiscardUnknown()

func (*CollElgInfo) XXX_Marshal

func (m *CollElgInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)

func (*CollElgInfo) XXX_Merge

func (dst *CollElgInfo) XXX_Merge(src proto.Message)

func (*CollElgInfo) XXX_Size

func (m *CollElgInfo) XXX_Size() int

func (*CollElgInfo) XXX_Unmarshal

func (m *CollElgInfo) XXX_Unmarshal(b []byte) error

type CollNames

type CollNames struct {
    Entries              []string `protobuf:"bytes,1,rep,name=entries,proto3" json:"entries,omitempty"`
    XXX_NoUnkeyedLiteral struct{} `json:"-"`
    XXX_unrecognized     []byte   `json:"-"`
    XXX_sizecache        int32    `json:"-"`
}

func (*CollNames) Descriptor

func (*CollNames) Descriptor() ([]byte, []int)

func (*CollNames) GetEntries

func (m *CollNames) GetEntries() []string

func (*CollNames) ProtoMessage

func (*CollNames) ProtoMessage()

func (*CollNames) Reset

func (m *CollNames) Reset()

func (*CollNames) String

func (m *CollNames) String() string

func (*CollNames) XXX_DiscardUnknown

func (m *CollNames) XXX_DiscardUnknown()

func (*CollNames) XXX_Marshal

func (m *CollNames) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)

func (*CollNames) XXX_Merge

func (dst *CollNames) XXX_Merge(src proto.Message)

func (*CollNames) XXX_Size

func (m *CollNames) XXX_Size() int

func (*CollNames) XXX_Unmarshal

func (m *CollNames) XXX_Unmarshal(b []byte) error

type Collections

type Collections struct {
    // for pvt data, there would be an
    // entry in TxNums
    Map map[string]*TxNums `protobuf:"bytes,1,rep,name=map,proto3" json:"map,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
    // for any number of missing pvt data of a collection,
    // there would be an entry in the map
    MissingDataMap       map[string]bool `protobuf:"bytes,2,rep,name=missingDataMap,proto3" json:"missingDataMap,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"`
    XXX_NoUnkeyedLiteral struct{}        `json:"-"`
    XXX_unrecognized     []byte          `json:"-"`
    XXX_sizecache        int32           `json:"-"`
}

func (*Collections) Descriptor

func (*Collections) Descriptor() ([]byte, []int)

func (*Collections) GetMap

func (m *Collections) GetMap() map[string]*TxNums

func (*Collections) GetMissingDataMap

func (m *Collections) GetMissingDataMap() map[string]bool

func (*Collections) ProtoMessage

func (*Collections) ProtoMessage()

func (*Collections) Reset

func (m *Collections) Reset()

func (*Collections) String

func (m *Collections) String() string

func (*Collections) XXX_DiscardUnknown

func (m *Collections) XXX_DiscardUnknown()

func (*Collections) XXX_Marshal

func (m *Collections) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)

func (*Collections) XXX_Merge

func (dst *Collections) XXX_Merge(src proto.Message)

func (*Collections) XXX_Size

func (m *Collections) XXX_Size() int

func (*Collections) XXX_Unmarshal

func (m *Collections) XXX_Unmarshal(b []byte) error

type ErrIllegalArgs

ErrIllegalArgs is to be thrown by a store impl if the args passed are not allowed

type ErrIllegalArgs struct {
    // contains filtered or unexported fields
}

func (*ErrIllegalArgs) Error

func (err *ErrIllegalArgs) Error() string

type ErrIllegalCall

ErrIllegalCall is to be thrown by a store impl if the store does not expect a call to Prepare/Commit/Rollback/InitLastCommittedBlock

type ErrIllegalCall struct {
    // contains filtered or unexported fields
}

func (*ErrIllegalCall) Error

func (err *ErrIllegalCall) Error() string

type ErrOutOfRange

ErrOutOfRange is to be thrown for the request for the data that is not yet committed

type ErrOutOfRange struct {
    // contains filtered or unexported fields
}

func (*ErrOutOfRange) Error

func (err *ErrOutOfRange) Error() string

type ExpiryData

type ExpiryData struct {
    Map                  map[string]*Collections `protobuf:"bytes,1,rep,name=map,proto3" json:"map,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
    XXX_NoUnkeyedLiteral struct{}                `json:"-"`
    XXX_unrecognized     []byte                  `json:"-"`
    XXX_sizecache        int32                   `json:"-"`
}

func (*ExpiryData) Descriptor

func (*ExpiryData) Descriptor() ([]byte, []int)

func (*ExpiryData) GetMap

func (m *ExpiryData) GetMap() map[string]*Collections

func (*ExpiryData) ProtoMessage

func (*ExpiryData) ProtoMessage()

func (*ExpiryData) Reset

func (m *ExpiryData) Reset()

func (*ExpiryData) String

func (m *ExpiryData) String() string

func (*ExpiryData) XXX_DiscardUnknown

func (m *ExpiryData) XXX_DiscardUnknown()

func (*ExpiryData) XXX_Marshal

func (m *ExpiryData) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)

func (*ExpiryData) XXX_Merge

func (dst *ExpiryData) XXX_Merge(src proto.Message)

func (*ExpiryData) XXX_Size

func (m *ExpiryData) XXX_Size() int

func (*ExpiryData) XXX_Unmarshal

func (m *ExpiryData) XXX_Unmarshal(b []byte) error

type Provider

Provider provides handle to specific 'Store' that in turn manages private write sets for a ledger

type Provider interface {
    OpenStore(id string) (Store, error)
    Close()
}

func NewProvider

func NewProvider() Provider

NewProvider instantiates a StoreProvider

type Store

Store manages the permanent storage of private write sets for a ledger Beacsue the pvt data is supposed to be in sync with the blocks in the ledger, both should logically happen in an atomic operation. In order to accomplish this, an implementation of this store should provide support for a two-phase like commit/rollback capability. The expected use is such that - first the private data will be given to this store (via `Prepare` funtion) and then the block is appended to the block storage. Finally, one of the functions `Commit` or `Rollback` is invoked on this store based on whether the block was written successfully or not. The store implementation is expected to survive a server crash between the call to `Prepare` and `Commit`/`Rollback`

type Store interface {
    // Init initializes the store. This function is expected to be invoked before using the store
    Init(btlPolicy pvtdatapolicy.BTLPolicy)
    // InitLastCommittedBlockHeight sets the last commited block height into the pvt data store
    // This function is used in a special case where the peer is started up with the blockchain
    // from an earlier version of a peer when the pvt data feature (and hence this store) was not
    // available. This function is expected to be called only this situation and hence is
    // expected to throw an error if the store is not empty. On a successful return from this
    // fucntion the state of the store is expected to be same as of calling the prepare/commit
    // function for block `0` through `blockNum` with no pvt data
    InitLastCommittedBlock(blockNum uint64) error
    // GetPvtDataByBlockNum returns only the pvt data  corresponding to the given block number
    // The pvt data is filtered by the list of 'ns/collections' supplied in the filter
    // A nil filter does not filter any results
    GetPvtDataByBlockNum(blockNum uint64, filter ledger.PvtNsCollFilter) ([]*ledger.TxPvtData, error)
    // GetMissingPvtDataInfoForMostRecentBlocks returns the missing private data information for the
    // most recent `maxBlock` blocks which miss at least a private data of a eligible collection.
    GetMissingPvtDataInfoForMostRecentBlocks(maxBlock int) (ledger.MissingPvtDataInfo, error)
    // Prepare prepares the Store for commiting the pvt data and storing both eligible and ineligible
    // missing private data --- `eligible` denotes that the missing private data belongs to a collection
    // for which this peer is a member; `ineligible` denotes that the missing private data belong to a
    // collection for which this peer is not a member.
    // This call does not commit the pvt data and store missing private data. Subsequently, the caller
    // is expected to call either `Commit` or `Rollback` function. Return from this should ensure
    // that enough preparation is done such that `Commit` function invoked afterwards can commit the
    // data and the store is capable of surviving a crash between this function call and the next
    // invoke to the `Commit`
    Prepare(blockNum uint64, pvtData []*ledger.TxPvtData, missingPvtData ledger.TxMissingPvtDataMap) error
    // Commit commits the pvt data passed in the previous invoke to the `Prepare` function
    Commit() error
    // Rollback rolls back the pvt data passed in the previous invoke to the `Prepare` function
    Rollback() error
    // ProcessCollsEligibilityEnabled notifies the store when the peer becomes eligible to recieve data for an
    // existing collection. Parameter 'committingBlk' refers to the block number that contains the corresponding
    // collection upgrade transaction and the parameter 'nsCollMap' contains the collections for which the peer
    // is now eligible to recieve pvt data
    ProcessCollsEligibilityEnabled(committingBlk uint64, nsCollMap map[string][]string) error
    // CommitPvtDataOfOldBlocks commits the pvtData (i.e., previously missing data) of old blocks.
    // The parameter `blocksPvtData` refers a list of old block's pvtdata which are missing in the pvtstore.
    // This call stores an additional entry called `lastUpdatedOldBlocksList` which keeps the exact list
    // of updated blocks. This list would be used during recovery process. Once the stateDB is updated with
    // these pvtData, the `lastUpdatedOldBlocksList` must be removed. During the peer startup,
    // if the `lastUpdatedOldBlocksList` exists, stateDB needs to be updated with the appropriate pvtData.
    CommitPvtDataOfOldBlocks(blocksPvtData map[uint64][]*ledger.TxPvtData) error
    // GetLastUpdatedOldBlocksPvtData returns the pvtdata of blocks listed in `lastUpdatedOldBlocksList`
    GetLastUpdatedOldBlocksPvtData() (map[uint64][]*ledger.TxPvtData, error)
    // ResetLastUpdatedOldBlocksList removes the `lastUpdatedOldBlocksList` entry from the store
    ResetLastUpdatedOldBlocksList() error
    // IsEmpty returns true if the store does not have any block committed yet
    IsEmpty() (bool, error)
    // LastCommittedBlockHeight returns the height of the last committed block
    LastCommittedBlockHeight() (uint64, error)
    // HasPendingBatch returns if the store has a pending batch
    HasPendingBatch() (bool, error)
    // Shutdown stops the store
    Shutdown()
}

type StoreEnv

StoreEnv provides the store env for testing

type StoreEnv struct {
    TestStoreProvider Provider
    TestStore         Store
    // contains filtered or unexported fields
}

func NewTestStoreEnv

func NewTestStoreEnv(t *testing.T, ledgerid string, btlPolicy pvtdatapolicy.BTLPolicy) *StoreEnv

NewTestStoreEnv construct a StoreEnv for testing

func (*StoreEnv) Cleanup

func (env *StoreEnv) Cleanup()

Cleanup cleansup the store env after testing

func (*StoreEnv) CloseAndReopen

func (env *StoreEnv) CloseAndReopen()

CloseAndReopen closes and opens the store provider

type TxNums

type TxNums struct {
    List                 []uint64 `protobuf:"varint,1,rep,packed,name=list,proto3" json:"list,omitempty"`
    XXX_NoUnkeyedLiteral struct{} `json:"-"`
    XXX_unrecognized     []byte   `json:"-"`
    XXX_sizecache        int32    `json:"-"`
}

func (*TxNums) Descriptor

func (*TxNums) Descriptor() ([]byte, []int)

func (*TxNums) GetList

func (m *TxNums) GetList() []uint64

func (*TxNums) ProtoMessage

func (*TxNums) ProtoMessage()

func (*TxNums) Reset

func (m *TxNums) Reset()

func (*TxNums) String

func (m *TxNums) String() string

func (*TxNums) XXX_DiscardUnknown

func (m *TxNums) XXX_DiscardUnknown()

func (*TxNums) XXX_Marshal

func (m *TxNums) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)

func (*TxNums) XXX_Merge

func (dst *TxNums) XXX_Merge(src proto.Message)

func (*TxNums) XXX_Size

func (m *TxNums) XXX_Size() int

func (*TxNums) XXX_Unmarshal

func (m *TxNums) XXX_Unmarshal(b []byte) error