fix: order command controls after dispatch

This commit is contained in:
2026-09-11 08:56:00 +00:00
parent f6f900e597
commit 684981c235
13 changed files with 360 additions and 38 deletions
+11 -4
View File
@@ -6,6 +6,7 @@ import (
"errors"
"flag"
"fmt"
"io"
"log"
"net"
"net/http"
@@ -58,6 +59,12 @@ func run(configPath string) error {
if err != nil {
return err
}
runtimeLog, err := observability.OpenRotatingFile(configured.Observability.LogFile, configured.Observability.LogMaxBytes, configured.Observability.LogMaxFiles)
if err != nil {
return fmt.Errorf("open server rotating log: %w", err)
}
defer runtimeLog.Close()
logger := log.New(io.MultiWriter(os.Stderr, observability.FormatLog(runtimeLog, configured.Observability.LogFormat)), "rvbox-server: ", log.LstdFlags|log.LUTC)
persistence, err := store.Open(context.Background(), store.Options{
DataDir: configured.Server.DataDir, BusyTimeout: configured.Storage.SQLiteBusyTimeout,
SegmentTargetSize: configured.Storage.SegmentTargetBytes,
@@ -84,7 +91,7 @@ func run(configPath string) error {
if configured.Observability.Listen != "" {
healthListener, err = net.Listen("tcp", configured.Observability.Listen)
if err != nil {
log.Printf("rvbox-server: observability endpoint unavailable (continuing without it): %v", err)
logger.Printf("observability endpoint unavailable (continuing without it): %v", err)
}
}
if healthListener != nil {
@@ -104,10 +111,10 @@ func run(configPath string) error {
Scope: store.IncidentScopeGlobal, ScopeKey: "server-startup-recovery", Summary: "startup storage recovery failed",
Evidence: []byte(recoverErr.Error()), AutomaticallyRepairable: false,
}); incidentErr != nil {
log.Printf("rvbox-server: could not persist recovery incident: %v", incidentErr)
logger.Printf("could not persist recovery incident: %v", incidentErr)
}
}
log.Printf("rvbox-server: storage recovery left readiness disabled: %v", recoverErr)
logger.Printf("storage recovery left readiness disabled: %v", recoverErr)
return
}
health.SetReady(true)
@@ -143,7 +150,7 @@ func run(configPath string) error {
}
defer rpcListener.Close()
if configured.JSONRPC.NonLoopbackBind {
log.Printf("rvbox-server: WARNING JSON-RPC is unauthenticated and bound to non-loopback address %s", configured.JSONRPC.Listen)
logger.Printf("WARNING JSON-RPC is unauthenticated and bound to non-loopback address %s", configured.JSONRPC.Listen)
}
rpcServer = &http.Server{Handler: control.NewJSONRPCHandler(controlService, int64(configured.Protocol.MaxJSONRPCBodyBytes)), ReadHeaderTimeout: configured.Flow.WriteDeadline}
}
+11
View File
@@ -150,6 +150,17 @@ func runClientDaemon(ctx context.Context, configPath string, diagnostics io.Writ
if err != nil {
return err
}
runtimeLog, err := observability.OpenRotatingFile(configured.Observability.LogFile, configured.Observability.LogMaxBytes, configured.Observability.LogMaxFiles)
if err != nil {
return fmt.Errorf("open client rotating log: %w", err)
}
defer runtimeLog.Close()
formattedRuntimeLog := observability.FormatLog(runtimeLog, configured.Observability.LogFormat)
if diagnostics == nil {
diagnostics = formattedRuntimeLog
} else {
diagnostics = io.MultiWriter(formattedRuntimeLog, diagnostics)
}
health := observability.New()
go func() {
if serveErr := health.Serve(ctx, configured.Observability.Listen, observability.Paths{Liveness: configured.Observability.LivenessPath, Readiness: configured.Observability.ReadinessPath, Metrics: configured.Observability.MetricsPath}); serveErr != nil && ctx.Err() == nil && diagnostics != nil {