diff --git a/deployment.yaml b/deployment.yaml index 1935734..62510d5 100644 --- a/deployment.yaml +++ b/deployment.yaml @@ -67,6 +67,10 @@ metadata: name: cart-ingress annotations: cert-manager.io/cluster-issuer: letsencrypt-prod + nginx.ingress.kubernetes.io/affinity: "cookie" + nginx.ingress.kubernetes.io/session-cookie-name: "cart-session" + nginx.ingress.kubernetes.io/session-cookie-expires: "172800" + nginx.ingress.kubernetes.io/session-cookie-max-age: "172800" nginx.ingress.kubernetes.io/proxy-body-size: 16m spec: ingressClassName: nginx diff --git a/main.go b/main.go index 50889b2..437a403 100644 --- a/main.go +++ b/main.go @@ -1,6 +1,7 @@ package main import ( + "fmt" "log" "net/http" "os" @@ -110,18 +111,21 @@ func main() { storage: storage, } - rpcHandler, err := NewGrainHandler(app.pool, "localhost:1337") + syncedPool := NewSyncedPool(app.pool) + + rpcHandler, err := NewGrainHandler(app.pool, ":1337") if err != nil { log.Fatalf("Error creating handler: %v\n", err) } go rpcHandler.Serve() - remotePool := NewRemoteGrainPool("localhost:1337") - remoteServer := NewPoolServer(remotePool) - localServer := NewPoolServer(app.pool) + syncedServer := NewPoolServer(syncedPool) mux := http.NewServeMux() - mux.Handle("/remote/", http.StripPrefix("/remote", remoteServer.Serve())) - mux.Handle("/local/", http.StripPrefix("/local", localServer.Serve())) + mux.Handle("/api/", http.StripPrefix("/api", syncedServer.Serve())) + mux.HandleFunc("GET /add/remote/{host}", func(w http.ResponseWriter, r *http.Request) { + remotePool := NewRemoteGrainPool(fmt.Sprintf("%s:1337", r.PathValue("host"))) + syncedPool.AddRemote(remotePool) + }) mux.HandleFunc("GET /save", app.HandleSave) http.ListenAndServe(":8080", mux) diff --git a/synced-pool.go b/synced-pool.go index fccbc50..7fe7e2d 100644 --- a/synced-pool.go +++ b/synced-pool.go @@ -2,19 +2,19 @@ package main type SyncedPool struct { local *GrainLocalPool - remotes []RemoteGrainPool + remotes []*RemoteGrainPool remoteIndex map[CartId]*RemoteGrainPool } func NewSyncedPool(local *GrainLocalPool) *SyncedPool { return &SyncedPool{ local: local, - remotes: make([]RemoteGrainPool, 0), + remotes: make([]*RemoteGrainPool, 0), remoteIndex: make(map[CartId]*RemoteGrainPool), } } -func (p *SyncedPool) AddRemote(remote RemoteGrainPool) { +func (p *SyncedPool) AddRemote(remote *RemoteGrainPool) { p.remotes = append(p.remotes, remote) // get all available grains from remote, and start syncing }