Skip to content

Commit 5e5bed7

Browse files
committed
Cleanup
1 parent 3a9f5bb commit 5e5bed7

File tree

11 files changed

+78
-67
lines changed

11 files changed

+78
-67
lines changed

cmd/postcli/main.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -292,8 +292,8 @@ func cmdVerifyPos(opts config.InitOpts, fraction float64, logger *zap.Logger) {
292292
}
293293
pub := ed25519.NewKeyFromSeed(dst[:ed25519.SeedSize]).Public().(ed25519.PublicKey)
294294

295-
metafile := filepath.Join(opts.DataDir, shared.MetadataFileName)
296-
meta, err := shared.LoadMetadata(opts.DataDir)
295+
metafile := filepath.Join(opts.DataDir, initialization.MetadataFileName)
296+
meta, err := initialization.LoadMetadata(opts.DataDir)
297297
if err != nil {
298298
log.Fatalf("failed to load metadata from %s: %s\n", opts.DataDir, err)
299299
}

go.mod

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ go 1.19
55
require (
66
github.com/davecgh/go-spew v1.1.1
77
github.com/golang/mock v1.6.0
8+
github.com/natefinch/atomic v1.0.1
89
github.com/stretchr/testify v1.8.4
910
github.com/zeebo/blake3 v0.2.3
1011
go.uber.org/zap v1.24.0

go.sum

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
1616
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
1717
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
1818
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
19+
github.com/natefinch/atomic v1.0.1 h1:ZPYKxkqQOx3KZ+RsbnP/YsgvxWQPGxjC0oBt2AhwV0A=
20+
github.com/natefinch/atomic v1.0.1/go.mod h1:N/D/ELrljoqDyT3rZrsUmtsuzvHkeB/wWjHV22AZRbM=
1921
github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA=
2022
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
2123
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=

initialization/initialization.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -407,7 +407,7 @@ func removeRedundantFiles(cfg config.Config, opts config.InitOpts, logger *zap.L
407407
for _, file := range files {
408408
name := file.Name()
409409
fileIndex, err := shared.ParseFileIndex(name)
410-
if err != nil && name != shared.MetadataFileName {
410+
if err != nil && name != MetadataFileName {
411411
logger.Warn("found unrecognized file", zap.String("fileName", name))
412412
continue
413413
}
@@ -457,7 +457,7 @@ func (init *Initializer) Reset() error {
457457
continue
458458
}
459459
name := file.Name()
460-
if shared.IsInitFile(info) || name == shared.MetadataFileName {
460+
if shared.IsInitFile(info) || name == MetadataFileName {
461461
path := filepath.Join(init.opts.DataDir, name)
462462
if err := os.Remove(path); err != nil {
463463
return fmt.Errorf("failed to delete file (%v): %w", path, err)
@@ -689,10 +689,10 @@ func (init *Initializer) saveMetadata() error {
689689
if init.nonceValue.Load() != nil {
690690
v.NonceValue = *init.nonceValue.Load()
691691
}
692-
return shared.SaveMetadata(init.opts.DataDir, &v)
692+
return SaveMetadata(init.opts.DataDir, &v)
693693
}
694694

695695
func (init *Initializer) loadMetadata() (*shared.PostMetadata, error) {
696696
// TODO(mafa): migrate metadata if needed before loading it
697-
return shared.LoadMetadata(init.opts.DataDir)
697+
return LoadMetadata(init.opts.DataDir)
698698
}

initialization/initialization_test.go

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -95,15 +95,15 @@ func TestInitialize_BeforeNonceValue(t *testing.T) {
9595
cancel()
9696
require.Equal(t, uint64(cfg.MinNumUnits)*cfg.LabelsPerUnit, init.NumLabelsWritten())
9797

98-
meta, err := shared.LoadMetadata(opts.DataDir)
98+
meta, err := LoadMetadata(opts.DataDir)
9999
require.NoError(t, err)
100100
require.NotNil(t, meta.Nonce)
101101
require.NotNil(t, meta.NonceValue)
102102
nonceValue := meta.NonceValue
103103

104104
// delete nonce value
105105
meta.NonceValue = nil
106-
require.NoError(t, shared.SaveMetadata(opts.DataDir, meta))
106+
require.NoError(t, SaveMetadata(opts.DataDir, meta))
107107

108108
// just creating a new initializer should update the metadata
109109
init, err = NewInitializer(
@@ -116,7 +116,7 @@ func TestInitialize_BeforeNonceValue(t *testing.T) {
116116
require.NoError(t, err)
117117
require.NotNil(t, init)
118118

119-
meta, err = shared.LoadMetadata(opts.DataDir)
119+
meta, err = LoadMetadata(opts.DataDir)
120120
require.NoError(t, err)
121121
require.NotNil(t, meta.Nonce)
122122
require.NotNil(t, meta.NonceValue)
@@ -218,7 +218,7 @@ func TestInitialize_ContinueWithLastPos(t *testing.T) {
218218
r.NoError(init.Initialize(context.Background()))
219219
r.Equal(uint64(cfg.MinNumUnits)*cfg.LabelsPerUnit, init.NumLabelsWritten())
220220

221-
m, err := shared.LoadMetadata(opts.DataDir)
221+
m, err := LoadMetadata(opts.DataDir)
222222
r.NoError(err)
223223
r.Equal(origNonce, *m.Nonce)
224224
r.EqualValues(origNonceValue, m.NonceValue)
@@ -227,7 +227,7 @@ func TestInitialize_ContinueWithLastPos(t *testing.T) {
227227
// lastPos lower than numLabels is ignored
228228
m.LastPosition = new(uint64)
229229
*m.LastPosition = uint64(cfg.MinNumUnits)*cfg.LabelsPerUnit - 10
230-
r.NoError(shared.SaveMetadata(opts.DataDir, m))
230+
r.NoError(SaveMetadata(opts.DataDir, m))
231231

232232
init, err = NewInitializer(
233233
WithNodeId(nodeId),
@@ -241,7 +241,7 @@ func TestInitialize_ContinueWithLastPos(t *testing.T) {
241241
r.NoError(init.Initialize(context.Background()))
242242
r.Equal(uint64(cfg.MinNumUnits)*cfg.LabelsPerUnit, init.NumLabelsWritten())
243243

244-
m, err = shared.LoadMetadata(opts.DataDir)
244+
m, err = LoadMetadata(opts.DataDir)
245245
r.NoError(err)
246246
r.Equal(origNonce, *m.Nonce)
247247

@@ -251,7 +251,7 @@ func TestInitialize_ContinueWithLastPos(t *testing.T) {
251251
// the range of the PoST
252252
m.Nonce = nil
253253
m.LastPosition = nil
254-
r.NoError(shared.SaveMetadata(opts.DataDir, m))
254+
r.NoError(SaveMetadata(opts.DataDir, m))
255255

256256
init, err = NewInitializer(
257257
WithNodeId(nodeId),
@@ -265,7 +265,7 @@ func TestInitialize_ContinueWithLastPos(t *testing.T) {
265265
r.NoError(init.Initialize(context.Background()))
266266
r.Equal(uint64(cfg.MinNumUnits)*cfg.LabelsPerUnit, init.NumLabelsWritten())
267267

268-
m, err = shared.LoadMetadata(opts.DataDir)
268+
m, err = LoadMetadata(opts.DataDir)
269269
r.NoError(err)
270270
r.NotNil(m.Nonce)
271271
r.NotNil(m.NonceValue)
@@ -285,7 +285,7 @@ func TestInitialize_ContinueWithLastPos(t *testing.T) {
285285
lastPos := *m.Nonce + 10
286286
*m.LastPosition = lastPos
287287
m.Nonce = nil
288-
r.NoError(shared.SaveMetadata(opts.DataDir, m))
288+
r.NoError(SaveMetadata(opts.DataDir, m))
289289

290290
init, err = NewInitializer(
291291
WithNodeId(nodeId),
@@ -299,7 +299,7 @@ func TestInitialize_ContinueWithLastPos(t *testing.T) {
299299
r.NoError(init.Initialize(context.Background()))
300300
r.Equal(uint64(cfg.MinNumUnits)*cfg.LabelsPerUnit, init.NumLabelsWritten())
301301

302-
m, err = shared.LoadMetadata(opts.DataDir)
302+
m, err = LoadMetadata(opts.DataDir)
303303
r.NoError(err)
304304
r.NotNil(m.Nonce)
305305
r.NotNil(m.LastPosition)
@@ -1073,7 +1073,7 @@ func TestInitializeSubset_NoNonce(t *testing.T) {
10731073
require.Nil(t, init.Nonce())
10741074
require.Nil(t, init.NonceValue())
10751075

1076-
meta, err := shared.LoadMetadata(opts.DataDir)
1076+
meta, err := LoadMetadata(opts.DataDir)
10771077
require.NoError(t, err)
10781078
require.Nil(t, meta.Nonce)
10791079

initialization/metadata.go

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package initialization
2+
3+
import (
4+
"encoding/json"
5+
"fmt"
6+
"os"
7+
"path/filepath"
8+
9+
"github.com/spacemeshos/post/shared"
10+
)
11+
12+
const MetadataFileName = "postdata_metadata.json"
13+
14+
func SaveMetadata(dir string, v *shared.PostMetadata) error {
15+
err := os.MkdirAll(dir, shared.OwnerReadWriteExec)
16+
if err != nil && !os.IsExist(err) {
17+
return fmt.Errorf("dir creation failure: %w", err)
18+
}
19+
20+
data, err := json.Marshal(v)
21+
if err != nil {
22+
return fmt.Errorf("serialization failure: %w", err)
23+
}
24+
25+
err = os.WriteFile(filepath.Join(dir, MetadataFileName), data, shared.OwnerReadWrite)
26+
if err != nil {
27+
return fmt.Errorf("write to disk failure: %w", err)
28+
}
29+
30+
return nil
31+
}
32+
33+
func LoadMetadata(dir string) (*shared.PostMetadata, error) {
34+
filename := filepath.Join(dir, MetadataFileName)
35+
data, err := os.ReadFile(filename)
36+
if err != nil {
37+
if os.IsNotExist(err) {
38+
return nil, shared.ErrStateMetadataFileMissing
39+
}
40+
return nil, fmt.Errorf("read file failure: %w", err)
41+
}
42+
43+
metadata := shared.PostMetadata{}
44+
if err := json.Unmarshal(data, &metadata); err != nil {
45+
return nil, err
46+
}
47+
48+
return &metadata, nil
49+
}

initialization/migrate_metadata.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ type MetadataVersion struct {
2929
func MigratePoST(dir string, logger *zap.Logger) (err error) {
3030
logger.Info("checking PoST for migrations")
3131

32-
filename := filepath.Join(dir, shared.MetadataFileName)
32+
filename := filepath.Join(dir, MetadataFileName)
3333
file, err := os.Open(filename)
3434
switch {
3535
case os.IsNotExist(err):
@@ -85,7 +85,7 @@ type postMetadataV0 struct {
8585
// - add NonceValue field to postdata_metadata.json if missing (was introduced before migrations, not every PoST version 0 metadata file has it)
8686
// - re-encode NodeId and CommitmentAtxId as hex strings.
8787
func migrateV0(dir string, logger *zap.Logger) (err error) {
88-
filename := filepath.Join(dir, shared.MetadataFileName)
88+
filename := filepath.Join(dir, MetadataFileName)
8989
file, err := os.Open(filename)
9090
switch {
9191
case os.IsNotExist(err):

initialization/vrf_search.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ func SearchForNonce(ctx context.Context, cfg Config, initOpts InitOpts, opts ...
5454
}
5555
logger := options.logger
5656

57-
metadata, err := shared.LoadMetadata(initOpts.DataDir)
57+
metadata, err := LoadMetadata(initOpts.DataDir)
5858
if err != nil {
5959
return 0, nil, fmt.Errorf("failed to load metadata: %w", err)
6060
}
@@ -145,7 +145,7 @@ func persistNonce(nonce uint64, label []byte, metadata *shared.PostMetadata, dat
145145
logger.Info("found nonce: updating postdata_metadata.json", zap.Uint64("nonce", nonce), zap.String("NonceValue", hex.EncodeToString(label)))
146146
metadata.Nonce = &nonce
147147
metadata.NonceValue = shared.NonceValue(label)
148-
if err := shared.SaveMetadata(datadir, metadata); err != nil {
148+
if err := SaveMetadata(datadir, metadata); err != nil {
149149
return fmt.Errorf("failed to save metadata: %w", err)
150150
}
151151
return nil

initialization/vrf_search_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -93,15 +93,15 @@ func TestSearchForNonce(t *testing.T) {
9393
err = init.Initialize(context.Background())
9494
require.NoError(t, err)
9595

96-
metadata, err := shared.LoadMetadata(opts.DataDir)
96+
metadata, err := LoadMetadata(opts.DataDir)
9797
require.NoError(t, err)
9898

9999
expectedNonce := metadata.Nonce
100100
expectedNonceValue := metadata.NonceValue
101101
// remove Nonce and NonceValue from metadata
102102
metadata.Nonce = nil
103103
metadata.NonceValue = nil
104-
err = shared.SaveMetadata(opts.DataDir, metadata)
104+
err = SaveMetadata(opts.DataDir, metadata)
105105
require.NoError(t, err)
106106

107107
nonce, value, err := SearchForNonce(
@@ -115,7 +115,7 @@ func TestSearchForNonce(t *testing.T) {
115115
require.EqualValues(t, expectedNonceValue, value)
116116

117117
// Verify that nonce was written to the metatada file
118-
metadata, err = shared.LoadMetadata(opts.DataDir)
118+
metadata, err = LoadMetadata(opts.DataDir)
119119
require.NoError(t, err)
120120
require.Equal(t, expectedNonce, metadata.Nonce)
121121
require.EqualValues(t, expectedNonceValue, metadata.NonceValue)

proving/proving_options.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"errors"
55

66
"github.com/spacemeshos/post/config"
7+
"github.com/spacemeshos/post/initialization"
78
"github.com/spacemeshos/post/shared"
89
)
910

@@ -38,7 +39,7 @@ type OptionFunc func(*option) error
3839
// WithDataSource sets the data source to use for the proof.
3940
func WithDataSource(cfg config.Config, nodeId, commitmentAtxId []byte, datadir string) OptionFunc {
4041
return func(o *option) error {
41-
m, err := shared.LoadMetadata(datadir)
42+
m, err := initialization.LoadMetadata(datadir)
4243
if err != nil {
4344
return err
4445
}

0 commit comments

Comments
 (0)