Ver Fonte

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

Vishal Dalwadi há 3 meses atrás
pai
commit
48957c02fa
3 ficheiros alterados com 32 adições e 25 exclusões
  1. 11 5
      database/postgres.go
  2. 11 14
      database/sqlite.go
  3. 10 6
      main.go

+ 11 - 5
database/postgres.go

@@ -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 {

+ 11 - 14
database/sqlite.go

@@ -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 {

+ 10 - 6
main.go

@@ -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()