Files
Agent-System-Backend/internal/store/instance_guard.go
agent-exec-transport 7b379d28e7
governance / governance (pull_request) Successful in 17s
ci / vet-and-test (pull_request) Successful in 1m6s
agent-exec transport d2c63b4a83821a5716997a28174233b1/d6e403e1e778
2026-10-18 09:20:03 +00:00

48 lines
1.5 KiB
Go

package store
import (
"database/sql"
"errors"
)
// InstanceGuardMarker 是 instance_guard 表的唯一一行。
type InstanceGuardMarker struct {
DBDev uint64
DBIno uint64
LockDev uint64
LockIno uint64
InstanceID string
LockGen string
}
// LoadInstanceGuard 读取守卫标记。没有行时 ok 为 false。
func (s *Store) LoadInstanceGuard() (InstanceGuardMarker, bool, error) {
var m InstanceGuardMarker
var dbDev, dbIno, lockDev, lockIno int64
err := s.db.QueryRow(`SELECT db_dev, db_ino, lock_dev, lock_ino, instance_id, lock_gen FROM instance_guard WHERE id=1`).
Scan(&dbDev, &dbIno, &lockDev, &lockIno, &m.InstanceID, &m.LockGen)
if errors.Is(err, sql.ErrNoRows) {
return InstanceGuardMarker{}, false, nil
}
if err != nil {
return InstanceGuardMarker{}, false, err
}
m.DBDev = uint64(dbDev)
m.DBIno = uint64(dbIno)
m.LockDev = uint64(lockDev)
m.LockIno = uint64(lockIno)
return m, true, nil
}
// SaveInstanceGuard 写入或覆盖唯一一行。
func (s *Store) SaveInstanceGuard(m InstanceGuardMarker) error {
_, err := s.db.Exec(s.q(`INSERT INTO instance_guard(id, db_dev, db_ino, lock_dev, lock_ino, instance_id, lock_gen)
VALUES(1,?,?,?,?,?,?)
ON CONFLICT(id) DO UPDATE SET
db_dev=excluded.db_dev, db_ino=excluded.db_ino,
lock_dev=excluded.lock_dev, lock_ino=excluded.lock_ino,
instance_id=excluded.instance_id, lock_gen=excluded.lock_gen`),
int64(m.DBDev), int64(m.DBIno), int64(m.LockDev), int64(m.LockIno), m.InstanceID, m.LockGen)
return err
}