internal/store: rename from state

This reduces collision with local variable names, and generally makes sense for the new store package, since it no longer specifies the state struct.

Signed-off-by: Ophestra <cat@gensokyo.uk>
This commit is contained in:
2025-10-30 18:43:55 +09:00
parent 46c5ce4936
commit ebdcff1049
16 changed files with 34 additions and 35 deletions

View File

@@ -20,7 +20,7 @@ import (
"hakurei.app/internal" "hakurei.app/internal"
"hakurei.app/internal/env" "hakurei.app/internal/env"
"hakurei.app/internal/outcome" "hakurei.app/internal/outcome"
"hakurei.app/internal/state" "hakurei.app/internal/store"
"hakurei.app/message" "hakurei.app/message"
"hakurei.app/system/dbus" "hakurei.app/system/dbus"
) )
@@ -322,7 +322,7 @@ func buildCommand(ctx context.Context, msg message.Msg, early *earlyHardeningErr
c.NewCommand("ps", "List active instances", func(args []string) error { c.NewCommand("ps", "List active instances", func(args []string) error {
var sc hst.Paths var sc hst.Paths
env.CopyPaths().Copy(&sc, new(outcome.Hsu).MustID(nil)) env.CopyPaths().Copy(&sc, new(outcome.Hsu).MustID(nil))
printPs(os.Stdout, time.Now().UTC(), state.NewMulti(msg, sc.RunDirPath), flagShort, flagJSON) printPs(os.Stdout, time.Now().UTC(), store.NewMulti(msg, sc.RunDirPath), flagShort, flagJSON)
return errSuccess return errSuccess
}).Flag(&flagShort, "short", command.BoolFlag(false), "Print instance id") }).Flag(&flagShort, "short", command.BoolFlag(false), "Print instance id")
} }

View File

@@ -13,7 +13,7 @@ import (
"hakurei.app/hst" "hakurei.app/hst"
"hakurei.app/internal/env" "hakurei.app/internal/env"
"hakurei.app/internal/outcome" "hakurei.app/internal/outcome"
"hakurei.app/internal/state" "hakurei.app/internal/store"
"hakurei.app/message" "hakurei.app/message"
) )
@@ -85,8 +85,8 @@ func tryIdentifier(msg message.Msg, name string) (config *hst.Config, entry *hst
return tryIdentifierEntries(msg, name, func() map[hst.ID]*hst.State { return tryIdentifierEntries(msg, name, func() map[hst.ID]*hst.State {
var sc hst.Paths var sc hst.Paths
env.CopyPaths().Copy(&sc, new(outcome.Hsu).MustID(nil)) env.CopyPaths().Copy(&sc, new(outcome.Hsu).MustID(nil))
s := state.NewMulti(msg, sc.RunDirPath) s := store.NewMulti(msg, sc.RunDirPath)
if entries, err := state.Join(s); err != nil { if entries, err := store.Join(s); err != nil {
msg.GetLogger().Printf("cannot join store: %v", err) // not fatal msg.GetLogger().Printf("cannot join store: %v", err) // not fatal
return nil return nil
} else { } else {

View File

@@ -14,7 +14,7 @@ import (
"hakurei.app/internal" "hakurei.app/internal"
"hakurei.app/internal/env" "hakurei.app/internal/env"
"hakurei.app/internal/outcome" "hakurei.app/internal/outcome"
"hakurei.app/internal/state" "hakurei.app/internal/store"
"hakurei.app/message" "hakurei.app/message"
) )
@@ -168,9 +168,9 @@ func printShowInstance(
} }
// printPs writes a representation of active instances to output. // printPs writes a representation of active instances to output.
func printPs(output io.Writer, now time.Time, s state.Store, short, flagJSON bool) { func printPs(output io.Writer, now time.Time, s store.Store, short, flagJSON bool) {
var entries map[hst.ID]*hst.State var entries map[hst.ID]*hst.State
if e, err := state.Join(s); err != nil { if e, err := store.Join(s); err != nil {
log.Fatalf("cannot join store: %v", err) log.Fatalf("cannot join store: %v", err)
} else { } else {
entries = e entries = e

View File

@@ -6,7 +6,7 @@ import (
"time" "time"
"hakurei.app/hst" "hakurei.app/hst"
"hakurei.app/internal/state" "hakurei.app/internal/store"
) )
var ( var (
@@ -709,6 +709,6 @@ func TestPrintPs(t *testing.T) {
type stubStore map[hst.ID]*hst.State type stubStore map[hst.ID]*hst.State
func (s stubStore) Join() (map[hst.ID]*hst.State, error) { return s, nil } func (s stubStore) Join() (map[hst.ID]*hst.State, error) { return s, nil }
func (s stubStore) Do(int, func(c state.Cursor)) (bool, error) { panic("unreachable") } func (s stubStore) Do(int, func(c store.Cursor)) (bool, error) { panic("unreachable") }
func (s stubStore) List() ([]int, error) { panic("unreachable") } func (s stubStore) List() ([]int, error) { panic("unreachable") }
func (s stubStore) Close() error { return nil } func (s stubStore) Close() error { return nil }

View File

@@ -15,7 +15,7 @@ import (
"hakurei.app/container/fhs" "hakurei.app/container/fhs"
"hakurei.app/hst" "hakurei.app/hst"
"hakurei.app/internal" "hakurei.app/internal"
"hakurei.app/internal/state" "hakurei.app/internal/store"
"hakurei.app/message" "hakurei.app/message"
"hakurei.app/system" "hakurei.app/system"
) )
@@ -34,7 +34,7 @@ type mainState struct {
// Time is nil if no process was ever created. // Time is nil if no process was ever created.
Time *time.Time Time *time.Time
store state.Store store store.Store
cancel context.CancelFunc cancel context.CancelFunc
cmd *exec.Cmd cmd *exec.Cmd
cmdWait chan error cmdWait chan error
@@ -127,7 +127,7 @@ func (ms mainState) beforeExit(isFault bool) {
} }
if ms.uintptr&mainNeedsRevert != 0 { if ms.uintptr&mainNeedsRevert != 0 {
if ok, err := ms.store.Do(ms.k.state.identity.unwrap(), func(c state.Cursor) { if ok, err := ms.store.Do(ms.k.state.identity.unwrap(), func(c store.Cursor) {
if ms.uintptr&mainNeedsDestroy != 0 { if ms.uintptr&mainNeedsDestroy != 0 {
if err := c.Destroy(ms.k.state.id.unwrap()); err != nil { if err := c.Destroy(ms.k.state.id.unwrap()); err != nil {
perror(err, "destroy state entry") perror(err, "destroy state entry")
@@ -220,7 +220,7 @@ func (k *outcome) main(msg message.Msg) {
ms.fatal("cannot commit system setup:", err) ms.fatal("cannot commit system setup:", err)
} }
ms.uintptr |= mainNeedsRevert ms.uintptr |= mainNeedsRevert
ms.store = state.NewMulti(msg, k.state.sc.RunDirPath) ms.store = store.NewMulti(msg, k.state.sc.RunDirPath)
ctx, cancel := context.WithCancel(k.ctx) ctx, cancel := context.WithCancel(k.ctx)
defer cancel() defer cancel()
@@ -281,7 +281,7 @@ func (k *outcome) main(msg message.Msg) {
} }
// shim accepted setup payload, create process state // shim accepted setup payload, create process state
if ok, err := ms.store.Do(k.state.identity.unwrap(), func(c state.Cursor) { if ok, err := ms.store.Do(k.state.identity.unwrap(), func(c store.Cursor) {
if err := c.Save(&hst.State{ if err := c.Save(&hst.State{
ID: k.state.id.unwrap(), ID: k.state.id.unwrap(),
PID: os.Getpid(), PID: os.Getpid(),

View File

@@ -1,5 +1,4 @@
// Package state provides cross-process state tracking for hakurei container instances. package store
package state
import ( import (
"strconv" "strconv"

View File

@@ -1,4 +1,4 @@
package state_test package store_test
import ( import (
"log" "log"
@@ -10,12 +10,12 @@ import (
"hakurei.app/container/check" "hakurei.app/container/check"
"hakurei.app/hst" "hakurei.app/hst"
"hakurei.app/internal/state" "hakurei.app/internal/store"
"hakurei.app/message" "hakurei.app/message"
) )
func TestMulti(t *testing.T) { func TestMulti(t *testing.T) {
s := state.NewMulti(message.NewMsg(log.New(log.Writer(), "multi: ", 0)), check.MustAbs(t.TempDir())) s := store.NewMulti(message.NewMsg(log.New(log.Writer(), "multi: ", 0)), check.MustAbs(t.TempDir()))
t.Run("list empty store", func(t *testing.T) { t.Run("list empty store", func(t *testing.T) {
if identities, err := s.List(); err != nil { if identities, err := s.List(); err != nil {
@@ -43,14 +43,14 @@ func TestMulti(t *testing.T) {
tc[i].Time = time.Now() tc[i].Time = time.Now()
} }
do := func(identity int, f func(c state.Cursor)) { do := func(identity int, f func(c store.Cursor)) {
if ok, err := s.Do(identity, f); err != nil { if ok, err := s.Do(identity, f); err != nil {
t.Fatalf("Do: ok = %v, error = %v", ok, err) t.Fatalf("Do: ok = %v, error = %v", ok, err)
} }
} }
insert := func(i, identity int) { insert := func(i, identity int) {
do(identity, func(c state.Cursor) { do(identity, func(c store.Cursor) {
if err := c.Save(&tc[i]); err != nil { if err := c.Save(&tc[i]); err != nil {
t.Fatalf("Save: error = %v", err) t.Fatalf("Save: error = %v", err)
} }
@@ -58,7 +58,7 @@ func TestMulti(t *testing.T) {
} }
check := func(i, identity int) { check := func(i, identity int) {
do(identity, func(c state.Cursor) { do(identity, func(c store.Cursor) {
if entries, err := c.Load(); err != nil { if entries, err := c.Load(); err != nil {
t.Fatalf("Load: error = %v", err) t.Fatalf("Load: error = %v", err)
} else if got, ok := entries[tc[i].ID]; !ok { } else if got, ok := entries[tc[i].ID]; !ok {
@@ -98,19 +98,19 @@ func TestMulti(t *testing.T) {
} }
// join store // join store
if entries, err := state.Join(s); err != nil { if entries, err := store.Join(s); err != nil {
t.Fatalf("Join: error = %v", err) t.Fatalf("Join: error = %v", err)
} else if len(entries) != 3 { } else if len(entries) != 3 {
t.Fatalf("Join(s) = %#v", entries) t.Fatalf("Join(s) = %#v", entries)
} }
// clear identity 1 // clear identity 1
do(1, func(c state.Cursor) { do(1, func(c store.Cursor) {
if err := c.Destroy(tc[insertEntryOtherApp].ID); err != nil { if err := c.Destroy(tc[insertEntryOtherApp].ID); err != nil {
t.Fatalf("Destroy: error = %v", err) t.Fatalf("Destroy: error = %v", err)
} }
}) })
do(1, func(c state.Cursor) { do(1, func(c store.Cursor) {
if l, err := c.Len(); err != nil { if l, err := c.Len(); err != nil {
t.Fatalf("Len: error = %v", err) t.Fatalf("Len: error = %v", err)
} else if l != 0 { } else if l != 0 {

View File

@@ -1,4 +1,4 @@
package state package store
import ( import (
"encoding/gob" "encoding/gob"

View File

@@ -1,4 +1,4 @@
package state package store
import ( import (
"bytes" "bytes"

View File

@@ -1,4 +1,4 @@
package state package store
import ( import (
"encoding/hex" "encoding/hex"

View File

@@ -1,4 +1,4 @@
package state package store
import ( import (
"bytes" "bytes"

View File

@@ -1,4 +1,4 @@
package state package store
import ( import (
"errors" "errors"

View File

@@ -1,4 +1,4 @@
package state package store
import ( import (
"errors" "errors"

View File

@@ -1,4 +1,4 @@
package state package store
import ( import (
"errors" "errors"

View File

@@ -1,4 +1,4 @@
package state package store
import ( import (
"errors" "errors"

View File

@@ -1,4 +1,4 @@
package state package store
import ( import (
"cmp" "cmp"