refactor!: separate runtime releases from panel source

This commit is contained in:
2026-10-14 15:05:10 +08:00
parent 20635ffaec
commit a2dd6ee27d
51 changed files with 221 additions and 2017 deletions
+11 -39
View File
@@ -7,26 +7,19 @@ import (
"testing"
)
func TestIntentReservationConcurrencyAndRestart(t *testing.T) {
func TestInstanceReservationConcurrencyAndRestart(t *testing.T) {
path := filepath.Join(t.TempDir(), "store.db")
s, err := Open(path)
if err != nil {
t.Fatal(err)
}
if err = s.EnsureIntents(); err != nil {
t.Fatal(err)
}
var wg sync.WaitGroup
result := make(chan error, 30)
for n := 0; n < 30; n++ {
wg.Add(1)
go func(n int) {
defer wg.Done()
if n%2 == 0 {
result <- s.ReserveIntent(Intent{ID: ID(), UID: "u", Name: "test", Version: "1.2.3"})
} else {
result <- s.ReserveInstance(Instance{ID: ID(), UID: "u"})
}
result <- s.ReserveInstance(Instance{ID: ID(), UID: "u"})
}(n)
}
wg.Wait()
@@ -48,47 +41,26 @@ func TestIntentReservationConcurrencyAndRestart(t *testing.T) {
t.Fatal(err)
}
defer s.Close()
if err = s.ReserveIntent(Intent{ID: ID(), UID: "u"}); !errors.Is(err, ErrInstanceLimit) {
if err = s.ReserveInstance(Instance{ID: ID(), UID: "u"}); !errors.Is(err, ErrInstanceLimit) {
t.Fatalf("restart lost reservation: %v", err)
}
}
func TestIntentClaimCancelAndVersion(t *testing.T) {
func TestRetiredIntentsDoNotReserveInstanceSlots(t *testing.T) {
s, err := Open(filepath.Join(t.TempDir(), "store.db"))
if err != nil {
t.Fatal(err)
}
defer s.Close()
if err = s.EnsureIntents(); err != nil {
if _, err := s.DB.Exec("CREATE TABLE creation_intents(uid TEXT,status TEXT); INSERT INTO creation_intents VALUES('u','waiting'),('u','creating')"); err != nil {
t.Fatal(err)
}
in := Intent{ID: ID(), UID: "u", Version: "1.2.3"}
if err = s.ReserveIntent(in); err != nil {
t.Fatal(err)
for n := 0; n < 2; n++ {
if err := s.ReserveInstance(Instance{ID: ID(), UID: "u"}); err != nil {
t.Fatal(err)
}
}
i := Instance{ID: ID(), UID: "u", Version: "1.2.4"}
if err = s.ClaimIntent(in.ID, i); !errors.Is(err, ErrIntentState) {
t.Fatal(err)
}
if err = s.CancelIntent(in.ID, "other"); !errors.Is(err, ErrIntentState) {
t.Fatal(err)
}
i.Version = in.Version
if err = s.ClaimIntent(in.ID, i); err != nil {
t.Fatal(err)
}
if err = s.CancelIntent(in.ID, in.UID); !errors.Is(err, ErrIntentState) {
t.Fatal(err)
}
if err = s.ReserveIntent(Intent{ID: "second", UID: "u"}); err != nil {
t.Fatal(err)
}
if err = s.ReserveIntent(Intent{ID: "third", UID: "u"}); !errors.Is(err, ErrInstanceLimit) {
t.Fatal(err)
}
if err = s.CancelIntent("second", "u"); err != nil {
t.Fatal(err)
}
if err = s.ReserveIntent(Intent{ID: "third", UID: "u"}); err != nil {
if err := s.ReserveInstance(Instance{ID: ID(), UID: "u"}); !errors.Is(err, ErrInstanceLimit) {
t.Fatal(err)
}
}