From 1704f9ad3c70da4472b6ba5f05bd170e4dfd75b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20Garamv=C3=B6lgyi?= Date: Thu, 29 Jun 2023 10:29:14 +0200 Subject: [PATCH] move bridge/internal/orm/migrate into database/migrate --- bridge/internal/orm/migrate/migrate.go | 61 ------------- bridge/internal/orm/migrate/migrate_test.go | 86 ------------------- database/migrate/migrate.go | 1 - database/migrate/migrate_test.go | 2 +- .../migrate/migrations/00001_block_trace.sql | 38 -------- .../migrate/migrations/00001_l1_message.sql | 0 .../migrate/migrations/00002_l1_message.sql | 50 ----------- .../migrate/migrations/00002_l2_message.sql | 0 .../migrate/migrations/00003_l1_block.sql | 0 .../migrate/migrations/00003_l2_message.sql | 50 ----------- .../migrate/migrations/00004_block_batch.sql | 49 ----------- .../migrate/migrations/00004_l2_block.sql | 0 .../migrate/migrations/00005_chunk.sql | 0 .../migrate/migrations/00005_session_info.sql | 18 ---- .../migrate/migrations/00006_batch.sql | 0 .../migrate/migrations/00006_l1_block.sql | 33 ------- .../migrate/migrations/00007_agg_task.sql | 38 -------- 17 files changed, 1 insertion(+), 425 deletions(-) delete mode 100644 bridge/internal/orm/migrate/migrate.go delete mode 100644 bridge/internal/orm/migrate/migrate_test.go delete mode 100644 database/migrate/migrations/00001_block_trace.sql rename {bridge/internal/orm => database}/migrate/migrations/00001_l1_message.sql (100%) delete mode 100644 database/migrate/migrations/00002_l1_message.sql rename {bridge/internal/orm => database}/migrate/migrations/00002_l2_message.sql (100%) rename {bridge/internal/orm => database}/migrate/migrations/00003_l1_block.sql (100%) delete mode 100644 database/migrate/migrations/00003_l2_message.sql delete mode 100644 database/migrate/migrations/00004_block_batch.sql rename {bridge/internal/orm => database}/migrate/migrations/00004_l2_block.sql (100%) rename {bridge/internal/orm => database}/migrate/migrations/00005_chunk.sql (100%) delete mode 100644 database/migrate/migrations/00005_session_info.sql rename {bridge/internal/orm => database}/migrate/migrations/00006_batch.sql (100%) delete mode 100644 database/migrate/migrations/00006_l1_block.sql delete mode 100644 database/migrate/migrations/00007_agg_task.sql diff --git a/bridge/internal/orm/migrate/migrate.go b/bridge/internal/orm/migrate/migrate.go deleted file mode 100644 index 87d025593..000000000 --- a/bridge/internal/orm/migrate/migrate.go +++ /dev/null @@ -1,61 +0,0 @@ -package migrate - -import ( - "database/sql" - "embed" - "os" - "strconv" - - "github.com/pressly/goose/v3" -) - -//go:embed migrations/*.sql -var embedMigrations embed.FS - -// MigrationsDir migration dir -const MigrationsDir string = "migrations" - -func init() { - goose.SetBaseFS(embedMigrations) - goose.SetSequential(true) - goose.SetTableName("scroll_migrations") - - verbose, _ := strconv.ParseBool(os.Getenv("LOG_SQL_MIGRATIONS")) - goose.SetVerbose(verbose) -} - -// Migrate migrate db -func Migrate(db *sql.DB) error { - return goose.Up(db, MigrationsDir, goose.WithAllowMissing()) -} - -// Rollback rollback to the given version -func Rollback(db *sql.DB, version *int64) error { - if version != nil { - return goose.DownTo(db, MigrationsDir, *version) - } - return goose.Down(db, MigrationsDir) -} - -// ResetDB clean and migrate db. -func ResetDB(db *sql.DB) error { - if err := Rollback(db, new(int64)); err != nil { - return err - } - return Migrate(db) -} - -// Current get current version -func Current(db *sql.DB) (int64, error) { - return goose.GetDBVersion(db) -} - -// Status is normal or not -func Status(db *sql.DB) error { - return goose.Version(db, MigrationsDir) -} - -// Create a new migration folder -func Create(db *sql.DB, name, migrationType string) error { - return goose.Create(db, MigrationsDir, name, migrationType) -} diff --git a/bridge/internal/orm/migrate/migrate_test.go b/bridge/internal/orm/migrate/migrate_test.go deleted file mode 100644 index 74cf7d2af..000000000 --- a/bridge/internal/orm/migrate/migrate_test.go +++ /dev/null @@ -1,86 +0,0 @@ -package migrate - -import ( - "testing" - - "github.com/jmoiron/sqlx" - _ "github.com/lib/pq" - "github.com/stretchr/testify/assert" - - "scroll-tech/common/docker" - - "scroll-tech/database" -) - -var ( - base *docker.App - pgDB *sqlx.DB -) - -func initEnv(t *testing.T) error { - // Start db container. - base.RunDBImage(t) - - // Create db orm handler. - factory, err := database.NewOrmFactory(base.DBConfig) - if err != nil { - return err - } - pgDB = factory.GetDB() - return nil -} - -func TestMigrate(t *testing.T) { - base = docker.NewDockerApp() - if err := initEnv(t); err != nil { - t.Fatal(err) - } - - t.Run("testCurrent", testCurrent) - t.Run("testStatus", testStatus) - t.Run("testResetDB", testResetDB) - t.Run("testMigrate", testMigrate) - t.Run("testRollback", testRollback) - - t.Cleanup(func() { - base.Free() - }) -} - -func testCurrent(t *testing.T) { - cur, err := Current(pgDB.DB) - assert.NoError(t, err) - assert.Equal(t, 0, int(cur)) -} - -func testStatus(t *testing.T) { - status := Status(pgDB.DB) - assert.NoError(t, status) -} - -func testResetDB(t *testing.T) { - assert.NoError(t, ResetDB(pgDB.DB)) - cur, err := Current(pgDB.DB) - assert.NoError(t, err) - // total number of tables. - assert.Equal(t, 6, int(cur)) -} - -func testMigrate(t *testing.T) { - assert.NoError(t, Migrate(pgDB.DB)) - cur, err := Current(pgDB.DB) - assert.NoError(t, err) - assert.Equal(t, true, cur > 0) -} - -func testRollback(t *testing.T) { - version, err := Current(pgDB.DB) - assert.NoError(t, err) - assert.Equal(t, true, version > 0) - - assert.NoError(t, Rollback(pgDB.DB, nil)) - - cur, err := Current(pgDB.DB) - assert.NoError(t, err) - assert.Equal(t, true, cur+1 == version) -} diff --git a/database/migrate/migrate.go b/database/migrate/migrate.go index a7ee89430..87d025593 100644 --- a/database/migrate/migrate.go +++ b/database/migrate/migrate.go @@ -26,7 +26,6 @@ func init() { // Migrate migrate db func Migrate(db *sql.DB) error { - //return goose.Up(db, MIGRATIONS_DIR, goose.WithAllowMissing()) return goose.Up(db, MigrationsDir, goose.WithAllowMissing()) } diff --git a/database/migrate/migrate_test.go b/database/migrate/migrate_test.go index 5431dc779..74cf7d2af 100644 --- a/database/migrate/migrate_test.go +++ b/database/migrate/migrate_test.go @@ -63,7 +63,7 @@ func testResetDB(t *testing.T) { cur, err := Current(pgDB.DB) assert.NoError(t, err) // total number of tables. - assert.Equal(t, 7, int(cur)) + assert.Equal(t, 6, int(cur)) } func testMigrate(t *testing.T) { diff --git a/database/migrate/migrations/00001_block_trace.sql b/database/migrate/migrations/00001_block_trace.sql deleted file mode 100644 index 2b8fc4454..000000000 --- a/database/migrate/migrations/00001_block_trace.sql +++ /dev/null @@ -1,38 +0,0 @@ --- +goose Up --- +goose StatementBegin - --- TODO: use foreign key for batch_id? --- TODO: why tx_num is bigint? -create table block_trace -( - number BIGINT NOT NULL, - hash VARCHAR NOT NULL, - parent_hash VARCHAR NOT NULL, - trace JSON NOT NULL, - batch_hash VARCHAR DEFAULT NULL, - tx_num INTEGER NOT NULL, - gas_used BIGINT NOT NULL, - block_timestamp NUMERIC NOT NULL -); - -create unique index block_trace_hash_uindex - on block_trace (hash); - -create unique index block_trace_number_uindex - on block_trace (number); - -create unique index block_trace_parent_uindex - on block_trace (number, parent_hash); - -create unique index block_trace_parent_hash_uindex - on block_trace (hash, parent_hash); - -create index block_trace_batch_hash_index - on block_trace (batch_hash); - --- +goose StatementEnd - --- +goose Down --- +goose StatementBegin -drop table if exists block_trace; --- +goose StatementEnd diff --git a/bridge/internal/orm/migrate/migrations/00001_l1_message.sql b/database/migrate/migrations/00001_l1_message.sql similarity index 100% rename from bridge/internal/orm/migrate/migrations/00001_l1_message.sql rename to database/migrate/migrations/00001_l1_message.sql diff --git a/database/migrate/migrations/00002_l1_message.sql b/database/migrate/migrations/00002_l1_message.sql deleted file mode 100644 index bba72c857..000000000 --- a/database/migrate/migrations/00002_l1_message.sql +++ /dev/null @@ -1,50 +0,0 @@ --- +goose Up --- +goose StatementBegin -create table l1_message -( - queue_index BIGINT NOT NULL, - msg_hash VARCHAR NOT NULL, - height BIGINT NOT NULL, - gas_limit BIGINT NOT NULL, - sender VARCHAR NOT NULL, - target VARCHAR NOT NULL, - value VARCHAR NOT NULL, - calldata TEXT NOT NULL, - layer1_hash VARCHAR NOT NULL, - layer2_hash VARCHAR DEFAULT NULL, - status INTEGER DEFAULT 1, - created_at TIMESTAMP(0) NOT NULL DEFAULT CURRENT_TIMESTAMP, - updated_at TIMESTAMP(0) NOT NULL DEFAULT CURRENT_TIMESTAMP -); - -comment -on column l1_message.status is 'undefined, pending, submitted, confirmed, failed, expired, relay_failed'; - -create unique index l1_message_hash_uindex -on l1_message (msg_hash); - -create unique index l1_message_nonce_uindex -on l1_message (queue_index); - -create index l1_message_height_index - on l1_message (height); - -CREATE OR REPLACE FUNCTION update_timestamp() -RETURNS TRIGGER AS $$ -BEGIN - NEW.updated_at = CURRENT_TIMESTAMP; - RETURN NEW; -END; -$$ language 'plpgsql'; - -CREATE TRIGGER update_timestamp BEFORE UPDATE -ON l1_message FOR EACH ROW EXECUTE PROCEDURE -update_timestamp(); - - --- +goose StatementEnd - --- +goose Down --- +goose StatementBegin -drop table if exists l1_message; --- +goose StatementEnd \ No newline at end of file diff --git a/bridge/internal/orm/migrate/migrations/00002_l2_message.sql b/database/migrate/migrations/00002_l2_message.sql similarity index 100% rename from bridge/internal/orm/migrate/migrations/00002_l2_message.sql rename to database/migrate/migrations/00002_l2_message.sql diff --git a/bridge/internal/orm/migrate/migrations/00003_l1_block.sql b/database/migrate/migrations/00003_l1_block.sql similarity index 100% rename from bridge/internal/orm/migrate/migrations/00003_l1_block.sql rename to database/migrate/migrations/00003_l1_block.sql diff --git a/database/migrate/migrations/00003_l2_message.sql b/database/migrate/migrations/00003_l2_message.sql deleted file mode 100644 index fa2c06d0f..000000000 --- a/database/migrate/migrations/00003_l2_message.sql +++ /dev/null @@ -1,50 +0,0 @@ --- +goose Up --- +goose StatementBegin -create table l2_message -( - nonce BIGINT NOT NULL, - msg_hash VARCHAR NOT NULL, - height BIGINT NOT NULL, - sender VARCHAR NOT NULL, - target VARCHAR NOT NULL, - value VARCHAR NOT NULL, - calldata TEXT NOT NULL, - layer2_hash VARCHAR NOT NULL, - layer1_hash VARCHAR DEFAULT NULL, - proof TEXT DEFAULT NULL, - status INTEGER DEFAULT 1, - created_at TIMESTAMP(0) NOT NULL DEFAULT CURRENT_TIMESTAMP, - updated_at TIMESTAMP(0) NOT NULL DEFAULT CURRENT_TIMESTAMP -); - -comment -on column l2_message.status is 'undefined, pending, submitted, confirmed, failed, expired, relay_failed'; - -create unique index l2_message_hash_uindex -on l2_message (msg_hash); - -create unique index l2_message_nonce_uindex -on l2_message (nonce); - -create index l2_message_height_index - on l2_message (height); - -CREATE OR REPLACE FUNCTION update_timestamp() -RETURNS TRIGGER AS $$ -BEGIN - NEW.updated_at = CURRENT_TIMESTAMP; - RETURN NEW; -END; -$$ language 'plpgsql'; - -CREATE TRIGGER update_timestamp BEFORE UPDATE -ON l2_message FOR EACH ROW EXECUTE PROCEDURE -update_timestamp(); - - --- +goose StatementEnd - --- +goose Down --- +goose StatementBegin -drop table if exists l2_message; --- +goose StatementEnd \ No newline at end of file diff --git a/database/migrate/migrations/00004_block_batch.sql b/database/migrate/migrations/00004_block_batch.sql deleted file mode 100644 index 4a9d3f12a..000000000 --- a/database/migrate/migrations/00004_block_batch.sql +++ /dev/null @@ -1,49 +0,0 @@ --- +goose Up --- +goose StatementBegin - -create table block_batch -( - hash VARCHAR NOT NULL, - index BIGINT NOT NULL, - start_block_number BIGINT NOT NULL, - start_block_hash VARCHAR NOT NULL, - end_block_number BIGINT NOT NULL, - end_block_hash VARCHAR NOT NULL, - parent_hash VARCHAR NOT NULL, - state_root VARCHAR NOT NULL, - total_tx_num BIGINT NOT NULL, - total_l1_tx_num BIGINT NOT NULL, - total_l2_gas BIGINT NOT NULL, - proving_status INTEGER DEFAULT 1, - proof BYTEA DEFAULT NULL, - proof_time_sec INTEGER DEFAULT 0, - rollup_status INTEGER DEFAULT 1, - commit_tx_hash VARCHAR DEFAULT NULL, - finalize_tx_hash VARCHAR DEFAULT NULL, - oracle_status INTEGER DEFAULT 1, - oracle_tx_hash VARCHAR DEFAULT NULL, - created_at TIMESTAMP(0) NOT NULL DEFAULT CURRENT_TIMESTAMP, - prover_assigned_at TIMESTAMP(0) DEFAULT NULL, - proved_at TIMESTAMP(0) DEFAULT NULL, - committed_at TIMESTAMP(0) DEFAULT NULL, - finalized_at TIMESTAMP(0) DEFAULT NULL -); - -comment -on column block_batch.proving_status is 'undefined, unassigned, skipped, assigned, proved, verified, failed'; -comment -on column block_batch.rollup_status is 'undefined, pending, committing, committed, finalizing, finalized, finalization_skipped, commit_failed, finalize_failed'; -comment -on column block_batch.oracle_status is 'undefined, pending, importing, imported, failed'; - -create unique index block_batch_hash_uindex - on block_batch (hash); -create unique index block_batch_index_uindex - on block_batch (index); - --- +goose StatementEnd - --- +goose Down --- +goose StatementBegin -drop table if exists block_batch; --- +goose StatementEnd diff --git a/bridge/internal/orm/migrate/migrations/00004_l2_block.sql b/database/migrate/migrations/00004_l2_block.sql similarity index 100% rename from bridge/internal/orm/migrate/migrations/00004_l2_block.sql rename to database/migrate/migrations/00004_l2_block.sql diff --git a/bridge/internal/orm/migrate/migrations/00005_chunk.sql b/database/migrate/migrations/00005_chunk.sql similarity index 100% rename from bridge/internal/orm/migrate/migrations/00005_chunk.sql rename to database/migrate/migrations/00005_chunk.sql diff --git a/database/migrate/migrations/00005_session_info.sql b/database/migrate/migrations/00005_session_info.sql deleted file mode 100644 index e97841fc1..000000000 --- a/database/migrate/migrations/00005_session_info.sql +++ /dev/null @@ -1,18 +0,0 @@ --- +goose Up --- +goose StatementBegin - -create table session_info -( - hash VARCHAR NOT NULL, - rollers_info BYTEA NOT NULL -); - -create unique index session_info_hash_uindex - on session_info (hash); - --- +goose StatementEnd - --- +goose Down --- +goose StatementBegin -drop table if exists session_info; --- +goose StatementEnd diff --git a/bridge/internal/orm/migrate/migrations/00006_batch.sql b/database/migrate/migrations/00006_batch.sql similarity index 100% rename from bridge/internal/orm/migrate/migrations/00006_batch.sql rename to database/migrate/migrations/00006_batch.sql diff --git a/database/migrate/migrations/00006_l1_block.sql b/database/migrate/migrations/00006_l1_block.sql deleted file mode 100644 index a9a32f59e..000000000 --- a/database/migrate/migrations/00006_l1_block.sql +++ /dev/null @@ -1,33 +0,0 @@ --- +goose Up --- +goose StatementBegin - -create table l1_block -( - number BIGINT NOT NULL, - hash VARCHAR NOT NULL, - header_rlp TEXT NOT NULL, - base_fee BIGINT NOT NULL, - block_status INTEGER DEFAULT 1, - import_tx_hash VARCHAR DEFAULT NULL, - oracle_status INTEGER DEFAULT 1, - oracle_tx_hash VARCHAR DEFAULT NULL -); - -comment -on column l1_block.block_status is 'undefined, pending, importing, imported, failed'; - -comment -on column l1_block.oracle_status is 'undefined, pending, importing, imported, failed'; - -create unique index l1_block_hash_uindex -on l1_block (hash); - -create unique index l1_block_number_uindex -on l1_block (number); - --- +goose StatementEnd - --- +goose Down --- +goose StatementBegin -drop table if exists l1_block; --- +goose StatementEnd \ No newline at end of file diff --git a/database/migrate/migrations/00007_agg_task.sql b/database/migrate/migrations/00007_agg_task.sql deleted file mode 100644 index a2718fb48..000000000 --- a/database/migrate/migrations/00007_agg_task.sql +++ /dev/null @@ -1,38 +0,0 @@ --- +goose Up --- +goose StatementBegin - -create table agg_task -( - id VARCHAR NOT NULL, - start_batch_index BIGINT NOT NULL, - start_batch_hash VARCHAR NOT NULL, - end_batch_index BIGINT NOT NULL, - end_batch_hash VARCHAR NOT NULL, - proving_status SMALLINT DEFAULT 1, - proof BYTEA DEFAULT NULL, - created_at TIMESTAMP(0) NOT NULL DEFAULT CURRENT_TIMESTAMP, - updated_at TIMESTAMP(0) DEFAULT CURRENT_TIMESTAMP -); - -create unique index agg_task_hash_uindex - on agg_task (id); - - -CREATE OR REPLACE FUNCTION update_timestamp() -RETURNS TRIGGER AS $$ -BEGIN - NEW.updated_at = CURRENT_TIMESTAMP; - RETURN NEW; -END; -$$ language 'plpgsql'; - -CREATE TRIGGER update_timestamp BEFORE UPDATE -ON agg_task FOR EACH ROW EXECUTE PROCEDURE -update_timestamp(); - --- +goose StatementEnd - --- +goose Down --- +goose StatementBegin -drop table if exists agg_task; --- +goose StatementEnd