Skip to content

Commit

Permalink
Remove write state from store and minor changes
Browse files Browse the repository at this point in the history
Use simplified return pattern. Change to var for slice declarations and
simplified read-write-set unmarshal.
  • Loading branch information
twoGiants committed Feb 27, 2025
1 parent fde0cd5 commit ae8c74b
Show file tree
Hide file tree
Showing 5 changed files with 28 additions and 65 deletions.
8 changes: 4 additions & 4 deletions off_chain_data/application-go/parser/block.go
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand All @@ -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 {
Expand All @@ -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]

Expand All @@ -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))
}
Expand Down
32 changes: 9 additions & 23 deletions off_chain_data/application-go/parser/endorserTransaction.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
}
Expand All @@ -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)
Expand All @@ -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 {
Expand All @@ -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 {
Expand All @@ -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)
Expand Down
3 changes: 1 addition & 2 deletions off_chain_data/application-go/parser/transaction.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
}

Expand Down
37 changes: 12 additions & 25 deletions off_chain_data/application-go/store.go
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -30,17 +29,12 @@ func (ocs *offChainStore) write(data ledgerUpdate) error {
return err
}

ocs.clearLastWrites()

if err := ocs.marshal(data.Writes); err != nil {
return err
}

if err := ocs.persist(); err != nil {
writes, err := ocs.marshal(data.Writes)
if err != nil {
return err
}

return nil
return ocs.persist(writes)
}

func (ocs *offChainStore) simulateFailureIfRequired() error {
Expand All @@ -54,40 +48,33 @@ 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)
}

return writeErr
}

if err := f.Close(); err != nil {
return err
}

return nil
return f.Close()
}
13 changes: 2 additions & 11 deletions off_chain_data/application-go/transact.go
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down Expand Up @@ -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 {
Expand Down

0 comments on commit ae8c74b

Please sign in to comment.