Added check for attempting to acquire global lock

This commit is contained in:
2025-02-18 10:37:57 +11:00
parent c2de8d254a
commit 38d47cdf63

View File

@@ -16,6 +16,7 @@ type SafeConn struct {
db *sql.DB
readLockCount uint32
globalLockStatus uint32
globalLockRequested uint32
logger *zerolog.Logger
}
@@ -46,7 +47,7 @@ func (conn *SafeConn) releaseGlobalLock() {
}
func (conn *SafeConn) acquireReadLock() bool {
if conn.globalLockStatus == 1 {
if conn.globalLockStatus == 1 || conn.globalLockRequested == 1 {
return false
}
conn.readLockCount += 1
@@ -142,6 +143,7 @@ func (stx *SafeTX) Rollback() error {
// Pause blocks new transactions for a backup.
func (conn *SafeConn) Pause() {
conn.globalLockRequested = 1
for !conn.acquireGlobalLock() {
// TODO: add a timeout?
// TODO: failed to acquire lock: print info with readLockCount
@@ -150,6 +152,7 @@ func (conn *SafeConn) Pause() {
// force logger to log to Stdout
log := conn.logger.With().Logger().Output(os.Stdout)
log.Info().Msg("Global database lock acquired")
conn.globalLockRequested = 0
}
// Resume allows transactions to proceed.