feat(go): use single db handle; use connection pool;

This commit is contained in:
Vishal Dalwadi 2025-06-06 15:26:23 +05:30
parent 0b03b2cdbf
commit 48957c02fa
3 changed files with 32 additions and 25 deletions

View file

@ -1,9 +1,12 @@
package database
import (
"context"
"database/sql"
"errors"
"fmt"
"github.com/gravitl/netmaker/db"
"time"
"github.com/gravitl/netmaker/servercfg"
_ "github.com/lib/pq"
@ -34,15 +37,18 @@ func getPGConnString() string {
}
func initPGDB() error {
connString := getPGConnString()
gormDB := db.FromContext(db.WithContext(context.TODO()))
var dbOpenErr error
PGDB, dbOpenErr = sql.Open("postgres", connString)
PGDB, dbOpenErr = gormDB.DB()
if dbOpenErr != nil {
return dbOpenErr
}
dbOpenErr = PGDB.Ping()
return dbOpenErr
PGDB.SetMaxOpenConns(5)
PGDB.SetConnMaxLifetime(time.Hour)
return PGDB.Ping()
}
func pgCreateTable(tableName string) error {
@ -134,7 +140,7 @@ func pgFetchRecords(tableName string) (map[string]string, error) {
}
func pgCloseDB() {
PGDB.Close()
//PGDB.Close()
}
func pgIsConnected() bool {

View file

@ -1,10 +1,11 @@
package database
import (
"context"
"database/sql"
"errors"
"os"
"path/filepath"
"github.com/gravitl/netmaker/db"
"time"
_ "github.com/mattn/go-sqlite3" // need to blank import this package
)
@ -29,21 +30,17 @@ var SQLITE_FUNCTIONS = map[string]interface{}{
}
func initSqliteDB() error {
// == create db file if not present ==
if _, err := os.Stat("data"); os.IsNotExist(err) {
os.Mkdir("data", 0700)
}
dbFilePath := filepath.Join("data", dbFilename)
if _, err := os.Stat(dbFilePath); os.IsNotExist(err) {
os.Create(dbFilePath)
}
// == "connect" the database ==
gormDB := db.FromContext(db.WithContext(context.TODO()))
var dbOpenErr error
SqliteDB, dbOpenErr = sql.Open("sqlite3", dbFilePath)
SqliteDB, dbOpenErr = gormDB.DB()
if dbOpenErr != nil {
return dbOpenErr
}
SqliteDB.SetMaxOpenConns(1)
SqliteDB.SetMaxOpenConns(5)
SqliteDB.SetConnMaxLifetime(time.Hour)
return nil
}
@ -134,7 +131,7 @@ func sqliteFetchRecords(tableName string) (map[string]string, error) {
}
func sqliteCloseDB() {
SqliteDB.Close()
//SqliteDB.Close()
}
func sqliteConnected() bool {

16
main.go
View file

@ -7,6 +7,8 @@ import (
"encoding/json"
"flag"
"fmt"
"github.com/gravitl/netmaker/db"
"github.com/gravitl/netmaker/schema"
"os"
"os/signal"
"path/filepath"
@ -18,7 +20,6 @@ import (
"github.com/gravitl/netmaker/config"
controller "github.com/gravitl/netmaker/controllers"
"github.com/gravitl/netmaker/database"
"github.com/gravitl/netmaker/db"
"github.com/gravitl/netmaker/functions"
"github.com/gravitl/netmaker/logger"
"github.com/gravitl/netmaker/logic"
@ -26,7 +27,6 @@ import (
"github.com/gravitl/netmaker/models"
"github.com/gravitl/netmaker/mq"
"github.com/gravitl/netmaker/netclient/ncutils"
"github.com/gravitl/netmaker/schema"
"github.com/gravitl/netmaker/servercfg"
"github.com/gravitl/netmaker/serverctl"
_ "go.uber.org/automaxprocs"
@ -102,15 +102,19 @@ func initialize() { // Client Mode Prereq Check
logger.FatalLog("error: must set NODE_ID, currently blank")
}
if err = database.InitializeDatabase(); err != nil {
logger.FatalLog("Error connecting to database: ", err.Error())
}
// initialize sql schema db.
err = db.InitializeDB(schema.ListModels()...)
if err != nil {
logger.FatalLog("Error connecting to v1 database: ", err.Error())
logger.FatalLog("error connecting to database: ", err.Error())
}
logger.Log(0, "database successfully connected")
// initialize kv schema db.
if err = database.InitializeDatabase(); err != nil {
logger.FatalLog("error initializing database: ", err.Error())
}
initializeUUID()
//initialize cache
_, _ = logic.GetNetworks()