From 5645f550a94bd2d4977f61a00e4df847610f8ba2 Mon Sep 17 00:00:00 2001 From: Vishal Dalwadi Date: Mon, 2 Jun 2025 17:48:00 +0530 Subject: [PATCH] feat(go): store new tables in the same place. 1. Add _v1 suffix to new tables. 2. Remove archival code. --- db/sqlite.go | 2 +- migrate/migrate_schema.go | 117 +------------------------------------- schema/acl.go | 4 ++ schema/host.go | 4 ++ schema/job.go | 4 ++ schema/network.go | 4 ++ schema/network_acl.go | 4 ++ schema/node.go | 4 ++ 8 files changed, 28 insertions(+), 115 deletions(-) diff --git a/db/sqlite.go b/db/sqlite.go index ec50d82e..3b770d96 100644 --- a/db/sqlite.go +++ b/db/sqlite.go @@ -31,7 +31,7 @@ func (s *sqliteConnector) connect() (*gorm.DB, error) { dbFilePath := filepath.Join("data", "netmaker.db") - // ensure netmaker_v1.db exists. + // ensure netmaker.db exists. _, err = os.Stat(dbFilePath) if err != nil { if os.IsNotExist(err) { diff --git a/migrate/migrate_schema.go b/migrate/migrate_schema.go index 330c883f..fec445cd 100644 --- a/migrate/migrate_schema.go +++ b/migrate/migrate_schema.go @@ -3,14 +3,10 @@ package migrate import ( "context" "errors" - "fmt" "github.com/gravitl/netmaker/database" "github.com/gravitl/netmaker/db" "github.com/gravitl/netmaker/schema" - "github.com/gravitl/netmaker/servercfg" "gorm.io/gorm" - "os" - "path/filepath" ) // ToSQLSchema migrates the data from key-value @@ -18,15 +14,6 @@ import ( // // This function archives the old data and does not // delete it. -// -// Based on the db server, the archival is done in the -// following way: -// -// 1. Sqlite: Moves the old data to a -// netmaker_archive.db file. -// -// 2. Postgres: Moves the data to a netmaker_archive -// schema within the same database. func ToSQLSchema() error { // initialize sql schema db. err := db.InitializeDB(schema.ListModels()...) @@ -34,17 +21,10 @@ func ToSQLSchema() error { return err } + defer db.CloseDB() + // migrate, if not done already. - err = migrate() - if err != nil { - return err - } - - // archive key-value schema db, if not done already. - // ignore errors. - _ = archive() - - return nil + return migrate() } func migrate() error { @@ -90,94 +70,3 @@ func migrate() error { return nil } - -func archive() error { - dbServer := servercfg.GetDB() - if dbServer != "sqlite" && dbServer != "postgres" { - return nil - } - - // begin a new transaction. - dbctx := db.BeginTx(context.TODO()) - commit := false - defer func() { - if commit { - db.FromContext(dbctx).Commit() - } else { - db.FromContext(dbctx).Rollback() - } - }() - - // check if key-value schema db archived already. - archivalJob := &schema.Job{ - ID: "archival-v1.0.0", - } - err := archivalJob.Get(dbctx) - if err != nil { - if !errors.Is(err, gorm.ErrRecordNotFound) { - return err - } - - // archive. - switch dbServer { - case "sqlite": - err = sqliteArchiveOldData() - default: - err = pgArchiveOldData() - } - if err != nil { - return err - } - - // mark archival job completed. - err = archivalJob.Create(dbctx) - if err != nil { - return err - } - - commit = true - } else { - // remove the residual - if dbServer == "sqlite" { - _ = os.Remove(filepath.Join("data", "netmaker.db")) - } - } - - return nil -} - -func sqliteArchiveOldData() error { - oldDBFilePath := filepath.Join("data", "netmaker.db") - archiveDBFilePath := filepath.Join("data", "netmaker_archive.db") - - // check if netmaker_archive.db exist. - _, err := os.Stat(archiveDBFilePath) - if err == nil { - return nil - } else if !os.IsNotExist(err) { - return err - } - - // rename old db file to netmaker_archive.db. - return os.Rename(oldDBFilePath, archiveDBFilePath) -} - -func pgArchiveOldData() error { - _, err := database.PGDB.Exec("CREATE SCHEMA IF NOT EXISTS netmaker_archive") - if err != nil { - return err - } - - for _, table := range database.Tables { - _, err := database.PGDB.Exec( - fmt.Sprintf( - "ALTER TABLE public.%s SET SCHEMA netmaker_archive", - table, - ), - ) - if err != nil { - return err - } - } - return nil -} diff --git a/schema/acl.go b/schema/acl.go index 7834cb23..8241f585 100644 --- a/schema/acl.go +++ b/schema/acl.go @@ -30,6 +30,10 @@ type PolicyGroupTag struct { Tag string } +func (a *ACL) TableName() string { + return "acls_v1" +} + func (a *ACL) Create(ctx context.Context) error { return db.FromContext(ctx).Model(&ACL{}).Create(a).Error } diff --git a/schema/host.go b/schema/host.go index 0fa81e3d..b7bc415b 100644 --- a/schema/host.go +++ b/schema/host.go @@ -48,6 +48,10 @@ type Interface struct { Address string } +func (h *Host) TableName() string { + return "hosts_v1" +} + func (h *Host) Create(ctx context.Context) error { return db.FromContext(ctx).Model(&Host{}).Create(h).Error } diff --git a/schema/job.go b/schema/job.go index 4db18735..7fd3a23c 100644 --- a/schema/job.go +++ b/schema/job.go @@ -20,6 +20,10 @@ type Job struct { CreatedAt time.Time } +func (j *Job) TableName() string { + return "jobs_v1" +} + // Create creates a job record in the jobs table. func (j *Job) Create(ctx context.Context) error { return db.FromContext(ctx).Model(&Job{}).Create(j).Error diff --git a/schema/network.go b/schema/network.go index d6cd7d9e..2e902c57 100644 --- a/schema/network.go +++ b/schema/network.go @@ -37,6 +37,10 @@ type Network struct { FailOverNode *Node `gorm:"foreignKey:FailOverNodeID;constraint:OnUpdate:CASCADE,OnDelete:SET NULL"` } +func (n *Network) TableName() string { + return "networks_v1" +} + func (n *Network) Create(ctx context.Context) error { return db.FromContext(ctx).Model(&Network{}).Create(n).Error } diff --git a/schema/network_acl.go b/schema/network_acl.go index 732f2f50..c4218107 100644 --- a/schema/network_acl.go +++ b/schema/network_acl.go @@ -11,6 +11,10 @@ type NetworkACL struct { Access datatypes.JSONType[map[string]map[string]byte] } +func (n *NetworkACL) TableName() string { + return "network_acls_v1" +} + func (n *NetworkACL) Create(ctx context.Context) error { if n.Access.Data() == nil { n.Access = datatypes.NewJSONType(map[string]map[string]byte{}) diff --git a/schema/node.go b/schema/node.go index a2010382..62a26723 100644 --- a/schema/node.go +++ b/schema/node.go @@ -107,6 +107,10 @@ type RangeWithMetric struct { Metric uint32 `json:"metric"` } +func (n *Node) TableName() string { + return "nodes_v1" +} + func (n *Node) Create(ctx context.Context) error { return db.FromContext(ctx).Model(&Node{}).Create(n).Error }