From 94d685c71d42702f71a0fd51097379b71cb6ef38 Mon Sep 17 00:00:00 2001 From: yukionfire Date: Thu, 4 Jul 2024 14:58:26 +0800 Subject: [PATCH 1/3] fix: using `defer` to ensure close db handle --- store/v2/commitment/metadata.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/store/v2/commitment/metadata.go b/store/v2/commitment/metadata.go index 258f32672d5d..f5fc586cec5f 100644 --- a/store/v2/commitment/metadata.go +++ b/store/v2/commitment/metadata.go @@ -66,6 +66,7 @@ func (m *MetadataStore) flushCommitInfo(version uint64, cInfo *proof.CommitInfo) } batch := m.kv.NewBatch() + defer batch.Close() cInfoKey := []byte(fmt.Sprintf(commitInfoKeyFmt, version)) value, err := cInfo.Marshal() if err != nil { @@ -87,7 +88,7 @@ func (m *MetadataStore) flushCommitInfo(version uint64, cInfo *proof.CommitInfo) if err := batch.WriteSync(); err != nil { return err } - return batch.Close() + return nil } func (m *MetadataStore) deleteCommitInfo(version uint64) error { From 50f86014b334c00d30b30a8fac0d708569acfcb9 Mon Sep 17 00:00:00 2001 From: yukionfire Date: Wed, 17 Jul 2024 18:30:18 +0800 Subject: [PATCH 2/3] fix: retain the `batch.Close` error --- store/v2/commitment/metadata.go | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/store/v2/commitment/metadata.go b/store/v2/commitment/metadata.go index f5fc586cec5f..e5e35c4f8da0 100644 --- a/store/v2/commitment/metadata.go +++ b/store/v2/commitment/metadata.go @@ -59,36 +59,41 @@ func (m *MetadataStore) GetCommitInfo(version uint64) (*proof.CommitInfo, error) return cInfo, nil } -func (m *MetadataStore) flushCommitInfo(version uint64, cInfo *proof.CommitInfo) error { +func (m *MetadataStore) flushCommitInfo(version uint64, cInfo *proof.CommitInfo) (err error) { // do nothing if commit info is nil, as will be the case for an empty, initializing store if cInfo == nil { - return nil + return } batch := m.kv.NewBatch() - defer batch.Close() + defer func() { + cErr := batch.Close() + if err == nil { + err = cErr + } + }() cInfoKey := []byte(fmt.Sprintf(commitInfoKeyFmt, version)) value, err := cInfo.Marshal() if err != nil { - return err + return } - if err := batch.Set(cInfoKey, value); err != nil { - return err + if err = batch.Set(cInfoKey, value); err != nil { + return } var buf bytes.Buffer buf.Grow(encoding.EncodeUvarintSize(version)) - if err := encoding.EncodeUvarint(&buf, version); err != nil { - return err + if err = encoding.EncodeUvarint(&buf, version); err != nil { + return } - if err := batch.Set([]byte(latestVersionKey), buf.Bytes()); err != nil { - return err + if err = batch.Set([]byte(latestVersionKey), buf.Bytes()); err != nil { + return } - if err := batch.WriteSync(); err != nil { - return err + if err = batch.WriteSync(); err != nil { + return } - return nil + return } func (m *MetadataStore) deleteCommitInfo(version uint64) error { From f27eaaf69eb414791e286f012b4e852bb905a6da Mon Sep 17 00:00:00 2001 From: yukionfire Date: Wed, 17 Jul 2024 22:00:12 +0800 Subject: [PATCH 3/3] revert: change `err :=` to `err =` --- store/v2/commitment/metadata.go | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/store/v2/commitment/metadata.go b/store/v2/commitment/metadata.go index e5e35c4f8da0..6b98ef22577d 100644 --- a/store/v2/commitment/metadata.go +++ b/store/v2/commitment/metadata.go @@ -62,7 +62,7 @@ func (m *MetadataStore) GetCommitInfo(version uint64) (*proof.CommitInfo, error) func (m *MetadataStore) flushCommitInfo(version uint64, cInfo *proof.CommitInfo) (err error) { // do nothing if commit info is nil, as will be the case for an empty, initializing store if cInfo == nil { - return + return nil } batch := m.kv.NewBatch() @@ -75,25 +75,25 @@ func (m *MetadataStore) flushCommitInfo(version uint64, cInfo *proof.CommitInfo) cInfoKey := []byte(fmt.Sprintf(commitInfoKeyFmt, version)) value, err := cInfo.Marshal() if err != nil { - return + return err } - if err = batch.Set(cInfoKey, value); err != nil { - return + if err := batch.Set(cInfoKey, value); err != nil { + return err } var buf bytes.Buffer buf.Grow(encoding.EncodeUvarintSize(version)) - if err = encoding.EncodeUvarint(&buf, version); err != nil { - return + if err := encoding.EncodeUvarint(&buf, version); err != nil { + return err } - if err = batch.Set([]byte(latestVersionKey), buf.Bytes()); err != nil { - return + if err := batch.Set([]byte(latestVersionKey), buf.Bytes()); err != nil { + return err } - if err = batch.WriteSync(); err != nil { - return + if err := batch.WriteSync(); err != nil { + return err } - return + return nil } func (m *MetadataStore) deleteCommitInfo(version uint64) error {