Skip to content

Commit

Permalink
feat: add v6 db migration
Browse files Browse the repository at this point in the history
  • Loading branch information
dadamu committed Apr 22, 2024
1 parent 421b663 commit e2f2767
Show file tree
Hide file tree
Showing 5 changed files with 134 additions and 0 deletions.
2 changes: 2 additions & 0 deletions cmd/migrate/cmd.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import (

v3 "github.com/forbole/callisto/v4/cmd/migrate/v3"
v5 "github.com/forbole/callisto/v4/cmd/migrate/v5"
v6 "github.com/forbole/callisto/v4/cmd/migrate/v6"
)

type Migrator func(parseCfg *parsecmdtypes.Config) error
Expand All @@ -17,6 +18,7 @@ var (
migrations = map[string]Migrator{
"v3": v3.RunMigration,
"v5": v5.RunMigration,
"v6": v6.RunMigration,
}
)

Expand Down
43 changes: 43 additions & 0 deletions cmd/migrate/v6/migrate.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package v6

import (
"fmt"

v6db "github.com/forbole/callisto/v4/database/migrate/v6"
parse "github.com/forbole/juno/v5/cmd/parse/types"
"github.com/forbole/juno/v5/database"
"github.com/forbole/juno/v5/database/postgresql"
"github.com/forbole/juno/v5/types/config"
)

// RunMigration runs the migrations to v5
func RunMigration(parseConfig *parse.Config) error {
cfg, err := GetConfig()
if err != nil {
return fmt.Errorf("error while reading config: %s", err)
}

// Migrate the database
err = migrateDb(cfg, parseConfig)
if err != nil {
return fmt.Errorf("error while migrating database: %s", err)
}

return nil
}

func migrateDb(cfg config.Config, parseConfig *parse.Config) error {
// Build the codec
encodingConfig := parseConfig.GetEncodingConfigBuilder()()

// Get the db
databaseCtx := database.NewContext(cfg.Database, encodingConfig, parseConfig.GetLogger())
db, err := postgresql.Builder(databaseCtx)
if err != nil {
return fmt.Errorf("error while building the db: %s", err)
}

// Build the migrator and perform the migrations
migrator := v6db.NewMigrator(db.(*postgresql.Database))
return migrator.Migrate()
}
29 changes: 29 additions & 0 deletions cmd/migrate/v6/utils.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package v6

import (
"fmt"
"os"
"path"

"github.com/forbole/juno/v5/types/config"
"gopkg.in/yaml.v3"
)

// GetConfig returns the configuration reading it from the config.yaml file present inside the home directory
func GetConfig() (config.Config, error) {
file := path.Join(config.HomePath, "config.yaml")

// Make sure the path exists
if _, err := os.Stat(file); os.IsNotExist(err) {
return config.Config{}, fmt.Errorf("config file does not exist")
}

bz, err := os.ReadFile(file)
if err != nil {
return config.Config{}, fmt.Errorf("error while reading config file: %s", err)
}

var cfg config.Config
err = yaml.Unmarshal(bz, &cfg)
return cfg, err
}
39 changes: 39 additions & 0 deletions database/migrate/v6/migrate.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package v6

// Migrate implements database.Migrator
func (db *Migrator) Migrate() error {
stmt := `
BEGIN;
DROP TABLE gov_params;
CREATE TABLE gov_params
(
one_row_id BOOLEAN NOT NULL DEFAULT TRUE PRIMARY KEY,
params JSONB NOT NULL,
height BIGINT NOT NULL,
CHECK (one_row_id)
);
ALTER TABLE proposal ADD COLUMN metadata TEXT NOT NULL DEFAULT '';
ALTER TABLE proposal DROP COLUMN proposal_route;
ALTER TABLE proposal DROP COLUMN proposal_type;
ALTER TABLE proposal_deposit ADD COLUMN transaction_hash TEXT NOT NULL DEFAULT '';
ALTER TABLE proposal_deposit DROP CONSTRAINT unique_deposit;
ALTER TABLE proposal_deposit ADD CONSTRAINT unique_deposit UNIQUE (proposal_id, depositor_address, transaction_hash);
ALTER TABLE proposal_vote ADD COLUMN weight TEXT NOT NULL DEFAULT '1.0';
ALTER TABLE proposal_vote DROP CONSTRAINT unique_vote;
ALTER TABLE proposal_vote ADD CONSTRAINT unique_vote UNIQUE (proposal_id, voter_address, option);
ALTER TABLE validator_voting_power ALTER COLUMN voting_power TYPE BIGINT USING voting_power::BIGINT;
ALTER TABLE proposal_validator_status_snapshot ALTER COLUMN voting_power TYPE BIGINT USING voting_power::BIGINT;
COMMIT;
`

_, err := db.SQL.Exec(stmt)

return err
}
21 changes: 21 additions & 0 deletions database/migrate/v6/migrator.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package v6

import (
"github.com/jmoiron/sqlx"

"github.com/forbole/juno/v5/database"
"github.com/forbole/juno/v5/database/postgresql"
)

var _ database.Migrator = &Migrator{}

// Migrator represents the database migrator that should be used to migrate from v4 of the database to v5
type Migrator struct {
SQL *sqlx.DB
}

func NewMigrator(db *postgresql.Database) *Migrator {
return &Migrator{
SQL: db.SQL,
}
}

0 comments on commit e2f2767

Please sign in to comment.