carlos / platform Public

console: read CARLOS_HOST_CLAIM once at start and wire the own-region version store (claim Plan 7 Task 3)

Co-Authored-By: Codex <noreply@openai.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
codex agent, operated by paul@keymail.dev pushed by claude agent, operated by paul@keymail.dev 9393b99d3f4fd6231e03d113313f214d06266921 parent 4519638
2 files changed, +35 −0
  • cmd/console/hostclaim_test.go +20 −0
  • cmd/console/main.go +15 −0
diff --git a/cmd/console/hostclaim_test.go b/cmd/console/hostclaim_test.go
new file mode 100644
index 000000000..0972abea4
--- /dev/null
+++ b/cmd/console/hostclaim_test.go
@@ -0,0 +1,20 @@
+package main
+
+import "testing"
+
+func TestHostClaimEnabled(t *testing.T) {
+ for _, v := range []string{"", " ", "1", "true", "0"} {
+ calls := 0
+ got := hostClaimEnabled(func(k string) string {
+ calls++
+ if k != "CARLOS_HOST_CLAIM" {
+ t.Fatal(k)
+ }
+ return v
+ })
+ want := v != "" && v != " "
+ if got != want || calls != 1 {
+ t.Fatalf("%q: %v calls %d", v, got, calls)
+ }
+ }
+}
diff --git a/cmd/console/main.go b/cmd/console/main.go
index e2ee59ee9..804cfc5ad 100644
--- a/cmd/console/main.go
+++ b/cmd/console/main.go
@@ -73,6 +73,7 @@ import (
"crypto/ed25519"
"flag"
"fmt"
+ "github.com/carlosframework/platform/internal/lease"
"log"
"net"
"net/http"
@@ -269,6 +270,14 @@ func serve() {
// same one the server got.
rel := openStore()
dbBucket, dbRegion, dbPrefix, placement := dbDoorWiring()
+ hostClaim := hostClaimEnabled(os.Getenv)
+ var dbVersions lease.VersionedStore
+ if hostClaim && dbBucket != "" {
+ dbVersions, err = lease.NewVersionedS3(context.Background(), map[string]string{dbBucket: dbRegion})
+ if err != nil {
+ log.Fatalf("console: versioned database reader: %v", err)
+ }
+ }
// Before the server exists: every door that seals reads this switch.
appconfig.SetBoundSealing(secretsEnvelopeV2())
srv, err := console.NewServer(console.Config{
@@ -286,6 +295,8 @@ func serve() {
GeoIP: openGeoIP(strings.TrimSpace(os.Getenv("CONSOLE_GEOIP_DB"))),
// The carlos db door's data bucket and this box's placement
// (dbDoorWiring).
+ HostClaim: hostClaim,
+ DBVersions: dbVersions,
HibernateBucket: dbBucket,
HibernateRegion: dbRegion,
HibernatePrefix: dbPrefix,
@@ -1176,3 +1187,7 @@ func dbDoorWiring() (bucket, region, prefix, placement string) {
}
return cfg.Bucket, cfg.Region, cfg.Prefix, placement
}
+
+func hostClaimEnabled(getenv func(string) string) bool {
+ return strings.TrimSpace(getenv("CARLOS_HOST_CLAIM")) != ""
+}