From f9a0c915c3c376b83a1537cd191315126dfca653 Mon Sep 17 00:00:00 2001 From: VeerChaurasia Date: Sun, 15 Sep 2024 18:25:52 +0530 Subject: [PATCH 1/2] Implemented Database --- consensus/database.go | 78 +++++++++++++++++++++++++++++++++++-------- 1 file changed, 65 insertions(+), 13 deletions(-) diff --git a/consensus/database.go b/consensus/database.go index 30cd63a..422398b 100644 --- a/consensus/database.go +++ b/consensus/database.go @@ -1,21 +1,73 @@ package consensus -// uses config mmodule +import ( + "errors" + "github.com/BlocSoc-iitr/selene/config" + "os" + "path/filepath" +) + type Database interface { - new() - save_checkpoint() - load_checkpoint() + New(cfg *config.BaseConfig) (Database, error) + SaveCheckpoint(checkpoint []byte) error + LoadCheckpoint() ([]byte, error) } -// NOTE: parameters are not included -type FileDB struct{ Database } +type FileDB struct { + DataDir string + defaultCheckpoint [32]byte +} -func (f FileDB) new() FileDB {} -func (f FileDB) save_checkpoint() FileDB {} -func (f FileDB) load_checkpoint() FileDB {} +func (f *FileDB) New(cfg *config.BaseConfig) (Database, error) { + if cfg.DataDir == nil || *cfg.DataDir == "" { + return nil, errors.New("data directory is not set in the config") + } + return &FileDB{ + DataDir: *cfg.DataDir, + defaultCheckpoint: cfg.DefaultCheckpoint, + }, nil +} -type ConfigDB struct{ Database } +func (f *FileDB) SaveCheckpoint(checkpoint []byte) error { + err := os.MkdirAll(f.DataDir, os.ModePerm) + if err != nil { + return err + } + return os.WriteFile(filepath.Join(f.DataDir, "checkpoint"), checkpoint, 0644) +} -func (cdb ConfigDB) new() ConfigDB {} -func (cdb ConfigDB) save_checkpoint() ConfigDB {} -func (cdb ConfigDB) load_checkpoint() ConfigDB {} +func (f *FileDB) LoadCheckpoint() ([]byte, error) { + data, err := os.ReadFile(filepath.Join(f.DataDir, "checkpoint")) + if err != nil { + if os.IsNotExist(err) { + return f.defaultCheckpoint[:], nil + } + return nil, err + } + if len(data) == 32 { + return data, nil + } + return f.defaultCheckpoint[:], nil +} + +type ConfigDB struct { + checkpoint [32]byte +} + +func (c *ConfigDB) New(cfg *config.BaseConfig) (Database, error) { + checkpoint := cfg.DefaultCheckpoint + if cfg.DataDir == nil { + return nil, errors.New("data directory is not set in the config") + } + return &ConfigDB{ + checkpoint: checkpoint, + }, nil +} + +func (c *ConfigDB) SaveCheckpoint(checkpoint []byte) error { + return nil +} + +func (c *ConfigDB) LoadCheckpoint() ([]byte, error) { + return c.checkpoint[:], nil +} From 08a6c1da1a791cfc8dae88ad8db26377aace380e Mon Sep 17 00:00:00 2001 From: VeerChaurasia Date: Sun, 15 Sep 2024 18:28:17 +0530 Subject: [PATCH 2/2] Implemented Database --- consensus/database.go | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/consensus/database.go b/consensus/database.go index 422398b..4ced62a 100644 --- a/consensus/database.go +++ b/consensus/database.go @@ -1,23 +1,19 @@ package consensus - import ( "errors" "github.com/BlocSoc-iitr/selene/config" "os" "path/filepath" ) - type Database interface { New(cfg *config.BaseConfig) (Database, error) SaveCheckpoint(checkpoint []byte) error LoadCheckpoint() ([]byte, error) } - type FileDB struct { DataDir string defaultCheckpoint [32]byte } - func (f *FileDB) New(cfg *config.BaseConfig) (Database, error) { if cfg.DataDir == nil || *cfg.DataDir == "" { return nil, errors.New("data directory is not set in the config") @@ -27,7 +23,6 @@ func (f *FileDB) New(cfg *config.BaseConfig) (Database, error) { defaultCheckpoint: cfg.DefaultCheckpoint, }, nil } - func (f *FileDB) SaveCheckpoint(checkpoint []byte) error { err := os.MkdirAll(f.DataDir, os.ModePerm) if err != nil { @@ -35,7 +30,6 @@ func (f *FileDB) SaveCheckpoint(checkpoint []byte) error { } return os.WriteFile(filepath.Join(f.DataDir, "checkpoint"), checkpoint, 0644) } - func (f *FileDB) LoadCheckpoint() ([]byte, error) { data, err := os.ReadFile(filepath.Join(f.DataDir, "checkpoint")) if err != nil { @@ -49,11 +43,9 @@ func (f *FileDB) LoadCheckpoint() ([]byte, error) { } return f.defaultCheckpoint[:], nil } - type ConfigDB struct { checkpoint [32]byte } - func (c *ConfigDB) New(cfg *config.BaseConfig) (Database, error) { checkpoint := cfg.DefaultCheckpoint if cfg.DataDir == nil { @@ -63,11 +55,9 @@ func (c *ConfigDB) New(cfg *config.BaseConfig) (Database, error) { checkpoint: checkpoint, }, nil } - func (c *ConfigDB) SaveCheckpoint(checkpoint []byte) error { return nil } - func (c *ConfigDB) LoadCheckpoint() ([]byte, error) { return c.checkpoint[:], nil }