Implement router assignment and lease retries

This commit is contained in:
kami
2026-07-26 19:04:23 +04:00
parent 7980839393
commit a3b9f63892
4 changed files with 222 additions and 11 deletions
+28 -1
View File
@@ -6,6 +6,7 @@ import (
"net/http"
"orchestra/internal/domain"
"orchestra/internal/registry"
"orchestra/internal/router"
"orchestra/internal/store"
"os"
"strconv"
@@ -23,10 +24,13 @@ func main() {
if err != nil {
log.Fatal(err)
}
var rr registry.Registry
var rt *router.Router
if config := os.Getenv("ORCHESTRA_CONFIG"); config != "" {
if _, err := registry.Load(config); err != nil {
if rr, err = registry.Load(config); err != nil {
log.Fatalf("load orchestra config: %v", err)
}
rt = &router.Router{Store: s, Registry: rr, Reachability: registry.TCPReachability{}, Timeout: time.Second, Retry: router.RetryPolicy{MaxAttempts: 3, Backoff: time.Minute}}
}
mux := http.NewServeMux()
mux.HandleFunc("/v1/tasks", func(w http.ResponseWriter, r *http.Request) {
@@ -49,6 +53,11 @@ func main() {
http.Error(w, err.Error(), 400)
return
}
if rt != nil {
if _, err := rt.HandleEvent(e); err != nil {
log.Printf("route task: %v", err)
}
}
e = s.Events(0)[len(s.Events(0))-1]
w.WriteHeader(201)
json.NewEncoder(w).Encode(e)
@@ -100,8 +109,26 @@ func main() {
http.Error(w, err.Error(), 409)
return
}
if rt != nil {
if _, routeErr := rt.HandleEvent(e); routeErr != nil {
log.Printf("route task: %v", routeErr)
}
}
json.NewEncoder(w).Encode(e)
})
if rt != nil {
go func() {
ticker := time.NewTicker(time.Second)
defer ticker.Stop()
for range ticker.C {
if _, err := s.ExpireLeases(time.Now()); err != nil {
log.Printf("expire leases: %v", err)
} else if _, err := rt.AssignPending(); err != nil {
log.Printf("route expired task: %v", err)
}
}
}()
}
mux.HandleFunc("/healthz", func(w http.ResponseWriter, r *http.Request) { w.Write([]byte("ok\n")) })
port := os.Getenv("ORCHESTRA_PORT")
if port == "" {