Remove write state from store and minor changes

Use simplified return pattern. Change to var for slice declarations and
simplified read-write-set unmarshal.

Signed-off-by: Stanislav Jakuschevskij <stas@two-giants.com>
This commit is contained in:
Stanislav Jakuschevskij 2025-02-27 16:26:57 +01:00
parent fde0cd58cc
commit 97b89dce26
No known key found for this signature in database
GPG key ID: 78195D2E6998E2EB
5 changed files with 28 additions and 65 deletions

View file

@ -46,7 +46,7 @@ func (b *Block) unmarshalTransactions() ([]*Transaction, error) {
}
func (b *Block) unmarshalEnvelopes() ([]*common.Envelope, error) {
result := []*common.Envelope{}
var result []*common.Envelope
for _, blockData := range b.block.GetData().GetData() {
envelope := &common.Envelope{}
if err := proto.Unmarshal(blockData, envelope); err != nil {
@ -58,7 +58,7 @@ func (b *Block) unmarshalEnvelopes() ([]*common.Envelope, error) {
}
func (*Block) unmarshalPayloadsFrom(envelopes []*common.Envelope) ([]*common.Payload, error) {
result := []*common.Payload{}
var result []*common.Payload
for _, envelope := range envelopes {
commonPayload := &common.Payload{}
if err := proto.Unmarshal(envelope.GetPayload(), commonPayload); err != nil {
@ -72,7 +72,7 @@ func (*Block) unmarshalPayloadsFrom(envelopes []*common.Envelope) ([]*common.Pay
func (b *Block) parse(commonPayloads []*common.Payload) ([]*payload, error) {
validationCodes := b.block.GetMetadata().GetMetadata()[common.BlockMetadataIndex_TRANSACTIONS_FILTER]
result := []*payload{}
var result []*payload
for i, commonPayload := range commonPayloads {
statusCode := validationCodes[i]
@ -90,7 +90,7 @@ func (b *Block) parse(commonPayloads []*common.Payload) ([]*payload, error) {
}
func (*Block) createTransactionsFrom(payloads []*payload) []*Transaction {
result := []*Transaction{}
var result []*Transaction
for _, payload := range payloads {
result = append(result, newTransaction(payload))
}

View file

@ -25,12 +25,7 @@ func (p *endorserTransaction) unmarshalReadWriteSets() ([]*readWriteSet, error)
return nil, err
}
chaincodeEndorsedActions, err := p.extractChaincodeEndorsedActionsFrom(chaincodeActionPayloads)
if err != nil {
return nil, err
}
proposalResponsePayloads, err := p.unmarshalProposalResponsePayloadsFrom(chaincodeEndorsedActions)
proposalResponsePayloads, err := p.unmarshalProposalResponsePayloadsFrom(chaincodeActionPayloads)
if err != nil {
return nil, err
}
@ -49,31 +44,22 @@ func (p *endorserTransaction) unmarshalReadWriteSets() ([]*readWriteSet, error)
}
func (p *endorserTransaction) unmarshalChaincodeActionPayloads() ([]*peer.ChaincodeActionPayload, error) {
result := []*peer.ChaincodeActionPayload{}
var result []*peer.ChaincodeActionPayload
for _, transactionAction := range p.transaction.GetActions() {
chaincodeActionPayload := &peer.ChaincodeActionPayload{}
if err := proto.Unmarshal(transactionAction.GetPayload(), chaincodeActionPayload); err != nil {
return nil, err
}
result = append(result, chaincodeActionPayload)
}
return result, nil
}
func (*endorserTransaction) extractChaincodeEndorsedActionsFrom(chaincodeActionPayloads []*peer.ChaincodeActionPayload) ([]*peer.ChaincodeEndorsedAction, error) {
result := []*peer.ChaincodeEndorsedAction{}
for _, payload := range chaincodeActionPayloads {
result = append(result, payload.GetAction())
}
return result, nil
}
func (*endorserTransaction) unmarshalProposalResponsePayloadsFrom(chaincodeEndorsedActions []*peer.ChaincodeEndorsedAction) ([]*peer.ProposalResponsePayload, error) {
result := []*peer.ProposalResponsePayload{}
for _, endorsedAction := range chaincodeEndorsedActions {
func (*endorserTransaction) unmarshalProposalResponsePayloadsFrom(chaincodeActionPayloads []*peer.ChaincodeActionPayload) ([]*peer.ProposalResponsePayload, error) {
var result []*peer.ProposalResponsePayload
for _, chaincodeActionPayload := range chaincodeActionPayloads {
proposalResponsePayload := &peer.ProposalResponsePayload{}
if err := proto.Unmarshal(endorsedAction.GetProposalResponsePayload(), proposalResponsePayload); err != nil {
if err := proto.Unmarshal(chaincodeActionPayload.GetAction().GetProposalResponsePayload(), proposalResponsePayload); err != nil {
return nil, err
}
result = append(result, proposalResponsePayload)
@ -82,7 +68,7 @@ func (*endorserTransaction) unmarshalProposalResponsePayloadsFrom(chaincodeEndor
}
func (*endorserTransaction) unmarshalChaincodeActionsFrom(proposalResponsePayloads []*peer.ProposalResponsePayload) ([]*peer.ChaincodeAction, error) {
result := []*peer.ChaincodeAction{}
var result []*peer.ChaincodeAction
for _, proposalResponsePayload := range proposalResponsePayloads {
chaincodeAction := &peer.ChaincodeAction{}
if err := proto.Unmarshal(proposalResponsePayload.GetExtension(), chaincodeAction); err != nil {
@ -94,7 +80,7 @@ func (*endorserTransaction) unmarshalChaincodeActionsFrom(proposalResponsePayloa
}
func (*endorserTransaction) unmarshalTxReadWriteSetsFrom(chaincodeActions []*peer.ChaincodeAction) ([]*rwset.TxReadWriteSet, error) {
result := []*rwset.TxReadWriteSet{}
var result []*rwset.TxReadWriteSet
for _, chaincodeAction := range chaincodeActions {
txReadWriteSet := &rwset.TxReadWriteSet{}
if err := proto.Unmarshal(chaincodeAction.GetResults(), txReadWriteSet); err != nil {
@ -106,7 +92,7 @@ func (*endorserTransaction) unmarshalTxReadWriteSetsFrom(chaincodeActions []*pee
}
func (*endorserTransaction) parseReadWriteSets(txReadWriteSets []*rwset.TxReadWriteSet) []*readWriteSet {
result := []*readWriteSet{}
var result []*readWriteSet
for _, txReadWriteSet := range txReadWriteSets {
parsedReadWriteSet := parseReadWriteSet(txReadWriteSet)
result = append(result, parsedReadWriteSet)

View file

@ -27,11 +27,10 @@ func (t *Transaction) NamespaceReadWriteSets() ([]*NamespaceReadWriteSet, error)
return nil, err
}
result := []*NamespaceReadWriteSet{}
var result []*NamespaceReadWriteSet
for _, readWriteSet := range txReadWriteSets {
result = append(result, readWriteSet.namespaceReadWriteSets()...)
}
return result, nil
}

View file

@ -10,13 +10,12 @@ import (
var errExpected = errors.New("expected error: simulated write failure")
type offChainStore struct {
writes, path string
path string
simulatedFailureCount, transactionCount uint
}
func newOffChainStore(path string, simulatedFailureCount uint) *offChainStore {
return &offChainStore{
"",
path,
uint(simulatedFailureCount),
0,
@ -30,17 +29,12 @@ func (ocs *offChainStore) write(data ledgerUpdate) error {
return err
}
ocs.clearLastWrites()
if err := ocs.marshal(data.Writes); err != nil {
writes, err := ocs.marshal(data.Writes)
if err != nil {
return err
}
if err := ocs.persist(); err != nil {
return err
}
return nil
return ocs.persist(writes)
}
func (ocs *offChainStore) simulateFailureIfRequired() error {
@ -54,30 +48,27 @@ func (ocs *offChainStore) simulateFailureIfRequired() error {
return nil
}
func (ocs *offChainStore) clearLastWrites() {
ocs.writes = ""
}
func (ocs *offChainStore) marshal(writes []write) error {
func (ocs *offChainStore) marshal(writes []write) (string, error) {
var marshaledWrites string
for _, write := range writes {
marshaled, err := json.Marshal(write)
if err != nil {
return err
return "", err
}
ocs.writes += string(marshaled) + "\n"
marshaledWrites += string(marshaled) + "\n"
}
return nil
return marshaledWrites, nil
}
func (ocs *offChainStore) persist() error {
func (ocs *offChainStore) persist(marshaledWrites string) error {
f, err := os.OpenFile(ocs.path, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
if err != nil {
return err
}
if _, writeErr := f.Write([]byte(ocs.writes)); writeErr != nil {
if _, writeErr := f.Write([]byte(marshaledWrites)); writeErr != nil {
if closeErr := f.Close(); closeErr != nil {
return fmt.Errorf("write error: %v, close error: %v", writeErr, closeErr)
}
@ -85,9 +76,5 @@ func (ocs *offChainStore) persist() error {
return writeErr
}
if err := f.Close(); err != nil {
return err
}
return nil
return f.Close()
}

View file

@ -27,14 +27,9 @@ func transact(clientConnection grpc.ClientConnInterface) error {
}()
contract := gateway.GetNetwork(channelName).GetContract(chaincodeName)
smartContract := atb.NewAssetTransferBasic(contract)
app := newTransactApp(smartContract)
if err := app.run(); err != nil {
return err
}
return nil
return app.run()
}
type transactApp struct {
@ -71,11 +66,7 @@ func (t *transactApp) run() error {
wg.Wait()
if err := context.Cause(ctx); err != nil {
return err
}
return nil
return context.Cause(ctx)
}
func (t *transactApp) transact() error {