db shared sessions: set key and type as primary key

Signed-off-by: Nicola Murino <nicola.murino@gmail.com>
This commit is contained in:
Nicola Murino
2025-03-23 11:34:10 +01:00
parent 5a088daf97
commit e590deebe0
15 changed files with 250 additions and 58 deletions

View File

@@ -212,6 +212,17 @@ INSERT INTO {{schema_version}} (version) VALUES (29);
ipListsLikeIndex = `CREATE INDEX "{{prefix}}ip_lists_ipornet_like_idx" ON "{{ip_lists}}" ("ipornet" varchar_pattern_ops);`
pgsqlV30SQL = `ALTER TABLE "{{shares}}" ADD COLUMN "options" text NULL;`
pgsqlV30DownSQL = `ALTER TABLE "{{shares}}" DROP COLUMN "options" CASCADE;`
pgsqlV31SQL = `DROP TABLE "{{shared_sessions}}";
CREATE TABLE "{{shared_sessions}}" ("key" varchar(128) NOT NULL, "type" integer NOT NULL,
"data" text NOT NULL, "timestamp" bigint NOT NULL, PRIMARY KEY ("key", "type"));
CREATE INDEX "{{prefix}}shared_sessions_type_idx" ON "{{shared_sessions}}" ("type");
CREATE INDEX "{{prefix}}shared_sessions_timestamp_idx" ON "{{shared_sessions}}" ("timestamp");
`
pgsqlV31DownSQL = `DROP TABLE "{{shared_sessions}}" CASCADE;
CREATE TABLE "{{shared_sessions}}" ("key" varchar(128) NOT NULL PRIMARY KEY,
"data" text NOT NULL, "type" integer NOT NULL, "timestamp" bigint NOT NULL);
CREATE INDEX "{{prefix}}shared_sessions_type_idx" ON "{{shared_sessions}}" ("type");
CREATE INDEX "{{prefix}}shared_sessions_timestamp_idx" ON "{{shared_sessions}}" ("timestamp");`
)
var (
@@ -607,12 +618,12 @@ func (p *PGSQLProvider) addSharedSession(session Session) error {
return sqlCommonAddSession(session, p.dbHandle)
}
func (p *PGSQLProvider) deleteSharedSession(key string) error {
return sqlCommonDeleteSession(key, p.dbHandle)
func (p *PGSQLProvider) deleteSharedSession(key string, sessionType SessionType) error {
return sqlCommonDeleteSession(key, sessionType, p.dbHandle)
}
func (p *PGSQLProvider) getSharedSession(key string) (Session, error) {
return sqlCommonGetSession(key, p.dbHandle)
func (p *PGSQLProvider) getSharedSession(key string, sessionType SessionType) (Session, error) {
return sqlCommonGetSession(key, sessionType, p.dbHandle)
}
func (p *PGSQLProvider) cleanupSharedSessions(sessionType SessionType, before int64) error {
@@ -830,6 +841,8 @@ func (p *PGSQLProvider) migrateDatabase() error { //nolint:dupl
return err
case version == 29:
return updatePGSQLDatabaseFromV29(p.dbHandle)
case version == 30:
return updatePGSQLDatabaseFromV30(p.dbHandle)
default:
if version > sqlDatabaseVersion {
providerLog(logger.LevelError, "database schema version %d is newer than the supported one: %d", version,
@@ -854,6 +867,8 @@ func (p *PGSQLProvider) revertDatabase(targetVersion int) error {
switch dbVersion.Version {
case 30:
return downgradePGSQLDatabaseFromV30(p.dbHandle)
case 31:
return downgradePGSQLDatabaseFromV31(p.dbHandle)
default:
return fmt.Errorf("database schema version not handled: %d", dbVersion.Version)
}
@@ -893,13 +908,27 @@ func (p *PGSQLProvider) normalizeError(err error, fieldType int) error {
}
func updatePGSQLDatabaseFromV29(dbHandle *sql.DB) error {
return updatePGSQLDatabaseFrom29To30(dbHandle)
if err := updatePGSQLDatabaseFrom29To30(dbHandle); err != nil {
return err
}
return updatePGSQLDatabaseFromV30(dbHandle)
}
func updatePGSQLDatabaseFromV30(dbHandle *sql.DB) error {
return updatePGSQLDatabaseFrom30To31(dbHandle)
}
func downgradePGSQLDatabaseFromV30(dbHandle *sql.DB) error {
return downgradePGSQLDatabaseFrom30To29(dbHandle)
}
func downgradePGSQLDatabaseFromV31(dbHandle *sql.DB) error {
if err := downgradePGSQLDatabaseFrom31To30(dbHandle); err != nil {
return err
}
return downgradePGSQLDatabaseFromV30(dbHandle)
}
func updatePGSQLDatabaseFrom29To30(dbHandle *sql.DB) error {
logger.InfoToConsole("updating database schema version: 29 -> 30")
providerLog(logger.LevelInfo, "updating database schema version: 29 -> 30")
@@ -915,3 +944,21 @@ func downgradePGSQLDatabaseFrom30To29(dbHandle *sql.DB) error {
sql := strings.ReplaceAll(pgsqlV30DownSQL, "{{shares}}", sqlTableShares)
return sqlCommonExecSQLAndUpdateDBVersion(dbHandle, []string{sql}, 29, false)
}
func updatePGSQLDatabaseFrom30To31(dbHandle *sql.DB) error {
logger.InfoToConsole("updating database schema version: 30 -> 31")
providerLog(logger.LevelInfo, "updating database schema version: 30 -> 31")
sql := strings.ReplaceAll(pgsqlV31SQL, "{{shared_sessions}}", sqlTableSharedSessions)
sql = strings.ReplaceAll(sql, "{{prefix}}", config.SQLTablesPrefix)
return sqlCommonExecSQLAndUpdateDBVersion(dbHandle, []string{sql}, 31, true)
}
func downgradePGSQLDatabaseFrom31To30(dbHandle *sql.DB) error {
logger.InfoToConsole("downgrading database schema version: 31 -> 30")
providerLog(logger.LevelInfo, "downgrading database schema version: 31 -> 30")
sql := strings.ReplaceAll(pgsqlV31DownSQL, "{{shared_sessions}}", sqlTableSharedSessions)
sql = strings.ReplaceAll(sql, "{{prefix}}", config.SQLTablesPrefix)
return sqlCommonExecSQLAndUpdateDBVersion(dbHandle, []string{sql}, 30, false)
}