| 1 | package sessioncatalog |
| 2 | |
| 3 | import ( |
| 4 | "context" |
| 5 | ) |
| 6 | |
| 7 | func (c *Catalog) loadStatus(ctx context.Context) error { |
| 8 | var revision uint64 |
| 9 | if err := c.readDB(ctx).QueryRowContext(ctx, `SELECT revision FROM catalog_state WHERE id=1`).Scan(&revision); err != nil { |
| 10 | return err |
| 11 | } |
| 12 | c.revision.Store(revision) |
| 13 | c.statusMu.Lock() |
| 14 | c.status.Revision = revision |
| 15 | c.statusMu.Unlock() |
| 16 | c.refreshCounts(ctx) |
| 17 | return nil |
| 18 | } |
| 19 | |
| 20 | func (c *Catalog) Status() Status { |
| 21 | if c == nil { |
| 22 | return Status{State: StateDegraded, Mode: ModeMemory, LastError: "session catalog unavailable"} |
| 23 | } |
| 24 | c.statusMu.RLock() |
| 25 | defer c.statusMu.RUnlock() |
| 26 | status := c.status |
| 27 | if c.readable() != nil && status.State != StateClosed { |
| 28 | status.State, status.LastError = StateDegraded, c.invalidReason.Error() |
| 29 | } |
| 30 | return status |
| 31 | } |
| 32 |