txmgr

package
v0.0.0-...-98d3023 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 6, 2021 License: Apache-2.0 Imports: 27 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type ErrPvtdataNotAvailable

type ErrPvtdataNotAvailable struct {
	Msg string
}

ErrPvtdataNotAvailable is to be thrown when an application seeks a private data item during simulation and the simulator is not capable of returning the version of the private data item consistent with the snapshot exposed to the simulation

func (*ErrPvtdataNotAvailable) Error

func (e *ErrPvtdataNotAvailable) Error() string

type ErrUnsupportedTransaction

type ErrUnsupportedTransaction struct {
	Msg string
}

ErrUnsupportedTransaction is expected to be thrown if a unsupported query is performed in an update transaction

func (*ErrUnsupportedTransaction) Error

func (e *ErrUnsupportedTransaction) Error() string

type Initializer

type Initializer struct {
	LedgerID            string
	DB                  *privacyenabledstate.DB
	StateListeners      []ledger.StateListener
	BtlPolicy           pvtdatapolicy.BTLPolicy
	BookkeepingProvider bookkeeping.Provider
	CCInfoProvider      ledger.DeployedChaincodeInfoProvider
	CustomTxProcessors  map[common.HeaderType]ledger.CustomTxProcessor
	HashFunc            rwsetutil.HashFunc
}

Initializer captures the dependencies for tx manager

type KVWrite

type KVWrite struct {
	Namespace            string   `protobuf:"bytes,1,opt,name=namespace,proto3" json:"namespace,omitempty"`
	Collection           string   `protobuf:"bytes,2,opt,name=collection,proto3" json:"collection,omitempty"`
	Key                  []byte   `protobuf:"bytes,3,opt,name=key,proto3" json:"key,omitempty"`
	IsDelete             bool     `protobuf:"varint,4,opt,name=isDelete,proto3" json:"isDelete,omitempty"`
	Value                []byte   `protobuf:"bytes,5,opt,name=value,proto3" json:"value,omitempty"`
	VersionBytes         []byte   `protobuf:"bytes,6,opt,name=version_bytes,json=versionBytes,proto3" json:"version_bytes,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (*KVWrite) Descriptor

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

func (*KVWrite) GetCollection

func (m *KVWrite) GetCollection() string

func (*KVWrite) GetIsDelete

func (m *KVWrite) GetIsDelete() bool

func (*KVWrite) GetKey

func (m *KVWrite) GetKey() []byte

func (*KVWrite) GetNamespace

func (m *KVWrite) GetNamespace() string

func (*KVWrite) GetValue

func (m *KVWrite) GetValue() []byte

func (*KVWrite) GetVersionBytes

func (m *KVWrite) GetVersionBytes() []byte

func (*KVWrite) ProtoMessage

func (*KVWrite) ProtoMessage()

func (*KVWrite) Reset

func (m *KVWrite) Reset()

func (*KVWrite) String

func (m *KVWrite) String() string

func (*KVWrite) XXX_DiscardUnknown

func (m *KVWrite) XXX_DiscardUnknown()

func (*KVWrite) XXX_Marshal

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

func (*KVWrite) XXX_Merge

func (m *KVWrite) XXX_Merge(src proto.Message)

func (*KVWrite) XXX_Size

func (m *KVWrite) XXX_Size() int

func (*KVWrite) XXX_Unmarshal

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

type LockBasedTxMgr

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

LockBasedTxMgr a simple implementation of interface `txmgmt.TxMgr`. This implementation uses a read-write lock to prevent conflicts between transaction simulation and committing

func NewLockBasedTxMgr

func NewLockBasedTxMgr(initializer *Initializer) (*LockBasedTxMgr, error)

NewLockBasedTxMgr constructs a new instance of NewLockBasedTxMgr

func (*LockBasedTxMgr) Commit

func (txmgr *LockBasedTxMgr) Commit() error

Commit implements method in interface `txmgmt.TxMgr`

func (*LockBasedTxMgr) CommitLostBlock

func (txmgr *LockBasedTxMgr) CommitLostBlock(blockAndPvtdata *ledger.BlockAndPvtData) error

CommitLostBlock implements method in interface kvledger.Recoverer

func (*LockBasedTxMgr) ExportPubStateAndPvtStateHashes

func (txmgr *LockBasedTxMgr) ExportPubStateAndPvtStateHashes(dir string, newHashFunc snapshot.NewHashFunc) (map[string][]byte, error)

ExportPubStateAndPvtStateHashes simply delegates the call to the statedb for exporting the data for a snapshot. It is assumed that the consumer would invoke this function when the commits are paused

func (*LockBasedTxMgr) GetLastSavepoint

func (txmgr *LockBasedTxMgr) GetLastSavepoint() (*version.Height, error)

GetLastSavepoint returns the block num recorded in savepoint, returns 0 if NO savepoint is found

func (*LockBasedTxMgr) Name

func (txmgr *LockBasedTxMgr) Name() string

Name returns the name of the database that manages all active states.

func (*LockBasedTxMgr) NewQueryExecutor

func (txmgr *LockBasedTxMgr) NewQueryExecutor(txid string) (ledger.QueryExecutor, error)

NewQueryExecutor implements method in interface `txmgmt.TxMgr`

func (*LockBasedTxMgr) NewQueryExecutorNoCollChecks

func (txmgr *LockBasedTxMgr) NewQueryExecutorNoCollChecks() (ledger.QueryExecutor, error)

NewQueryExecutorNoCollChecks is a workaround to make the initilization of lifecycle cache work. The issue is that in the current lifecycle code the cache is initialized via Initialize function of a statelistener which gets invoked during ledger opening. This invovation eventually leads to a call to DeployedChaincodeInfoProvider which inturn needs the channel config in order to varify the name of the implicit collection. And the channelconfig is loaded only after the ledger is opened. So, as a workaround, we skip the check of collection name in this function by supplying a relaxed query executor - This is perfectly safe otherwise. As a proper fix, the initialization of other components should take place outside ledger by explicit querying the ledger state so that the sequence of initialization is explicitly controlled. However that needs a bigger refactoring of code.

func (*LockBasedTxMgr) NewTxSimulator

func (txmgr *LockBasedTxMgr) NewTxSimulator(txid string) (ledger.TxSimulator, error)

NewTxSimulator implements method in interface `txmgmt.TxMgr`

func (*LockBasedTxMgr) RemoveStaleAndCommitPvtDataOfOldBlocks

func (txmgr *LockBasedTxMgr) RemoveStaleAndCommitPvtDataOfOldBlocks(reconciledPvtdata map[uint64][]*ledger.TxPvtData) error

RemoveStaleAndCommitPvtDataOfOldBlocks implements method in interface `txmgmt.TxMgr` The following six operations are performed: (1) constructs the unique pvt data from the passed reconciledPvtdata (2) acquire a lock on oldBlockCommit (3) checks for stale pvtData by comparing [version, valueHash] and removes stale data (4) creates update batch from the the non-stale pvtData (5) update the BTL bookkeeping managed by the purge manager and update expiring keys. (6) commit the non-stale pvt data to the stateDB This function assumes that the passed input contains only transactions that had been marked "Valid". In the current design, kvledger (a single consumer of this function), filters out the data of "invalid" transactions and supplies the data for "valid" transactions only.

func (*LockBasedTxMgr) Rollback

func (txmgr *LockBasedTxMgr) Rollback()

Rollback implements method in interface `txmgmt.TxMgr`

func (*LockBasedTxMgr) ShouldRecover

func (txmgr *LockBasedTxMgr) ShouldRecover(lastAvailableBlock uint64) (bool, uint64, error)

ShouldRecover implements method in interface kvledger.Recoverer

func (*LockBasedTxMgr) Shutdown

func (txmgr *LockBasedTxMgr) Shutdown()

Shutdown implements method in interface `txmgmt.TxMgr`

func (*LockBasedTxMgr) ValidateAndPrepare

func (txmgr *LockBasedTxMgr) ValidateAndPrepare(blockAndPvtdata *ledger.BlockAndPvtData, doMVCCValidation bool) (
	[]*validation.TxStatInfo, []byte, error,
)

ValidateAndPrepare implements method in interface `txmgmt.TxMgr`

type Updates

type Updates struct {
	Kvwrites             []*KVWrite `protobuf:"bytes,1,rep,name=kvwrites,proto3" json:"kvwrites,omitempty"`
	XXX_NoUnkeyedLiteral struct{}   `json:"-"`
	XXX_unrecognized     []byte     `json:"-"`
	XXX_sizecache        int32      `json:"-"`
}

func (*Updates) Descriptor

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

func (*Updates) GetKvwrites

func (m *Updates) GetKvwrites() []*KVWrite

func (*Updates) ProtoMessage

func (*Updates) ProtoMessage()

func (*Updates) Reset

func (m *Updates) Reset()

func (*Updates) String

func (m *Updates) String() string

func (*Updates) XXX_DiscardUnknown

func (m *Updates) XXX_DiscardUnknown()

func (*Updates) XXX_Marshal

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

func (*Updates) XXX_Merge

func (m *Updates) XXX_Merge(src proto.Message)

func (*Updates) XXX_Size

func (m *Updates) XXX_Size() int

func (*Updates) XXX_Unmarshal

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

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL