Complete refactor to new grpc control plane and only http proxy for carts #4

Merged
mats merged 75 commits from refactor/http-proxy into main 2025-10-14 22:31:28 +02:00
2 changed files with 43 additions and 47 deletions
Showing only changes of commit 6345d91ef7 - Show all commits

View File

@@ -2,8 +2,6 @@ package main
import ( import (
"encoding/gob" "encoding/gob"
"fmt"
"os"
"time" "time"
) )
@@ -23,48 +21,48 @@ func NewDiskStorage(stateFile string) (*DiskStorage, error) {
stateFile: stateFile, stateFile: stateFile,
LastSaves: make(map[uint64]int64), LastSaves: make(map[uint64]int64),
} }
err := ret.loadState() //err := ret.loadState()
return ret, err return ret, nil
} }
func saveMessages(_ interface{}, _ CartId) error { // func saveMessages(_ interface{}, _ CartId) error {
// No-op: legacy event log persistence removed in oneof refactor. // // No-op: legacy event log persistence removed in oneof refactor.
return nil // return nil
} // }
func getCartPath(id string) string { // func getCartPath(id string) string {
return fmt.Sprintf("data/%s.prot", id) // return fmt.Sprintf("data/%s.prot", id)
} // }
func loadMessages(_ Grain, _ CartId) error { // func loadMessages(_ Grain, _ CartId) error {
// No-op: legacy replay removed in oneof refactor. // // No-op: legacy replay removed in oneof refactor.
return nil // return nil
} // }
func (s *DiskStorage) saveState() error { // func (s *DiskStorage) saveState() error {
tmpFile := s.stateFile + "_tmp" // tmpFile := s.stateFile + "_tmp"
file, err := os.Create(tmpFile) // file, err := os.Create(tmpFile)
if err != nil { // if err != nil {
return err // return err
} // }
defer file.Close() // defer file.Close()
err = gob.NewEncoder(file).Encode(s.LastSaves) // err = gob.NewEncoder(file).Encode(s.LastSaves)
if err != nil { // if err != nil {
return err // return err
} // }
os.Remove(s.stateFile + ".bak") // os.Remove(s.stateFile + ".bak")
os.Rename(s.stateFile, s.stateFile+".bak") // os.Rename(s.stateFile, s.stateFile+".bak")
return os.Rename(tmpFile, s.stateFile) // return os.Rename(tmpFile, s.stateFile)
} // }
func (s *DiskStorage) loadState() error { // func (s *DiskStorage) loadState() error {
file, err := os.Open(s.stateFile) // file, err := os.Open(s.stateFile)
if err != nil { // if err != nil {
return err // return err
} // }
defer file.Close() // defer file.Close()
return gob.NewDecoder(file).Decode(&s.LastSaves) // return gob.NewDecoder(file).Decode(&s.LastSaves)
} // }
func (s *DiskStorage) Store(id CartId, _ *CartGrain) error { func (s *DiskStorage) Store(id CartId, _ *CartGrain) error {
// With the removal of the legacy message log, we only update the timestamp. // With the removal of the legacy message log, we only update the timestamp.

14
main.go
View File

@@ -49,10 +49,10 @@ func spawn(id CartId) (*CartGrain, error) {
ret.lastChange = time.Now().Unix() ret.lastChange = time.Now().Unix()
// Legacy loadMessages (no-op) retained; then replay append-only event log // Legacy loadMessages (no-op) retained; then replay append-only event log
_ = loadMessages(ret, id) //_ = loadMessages(ret, id)
_ = ReplayCartEvents(ret, id) err := ReplayCartEvents(ret, id)
return ret, nil return ret, err
} }
func init() { func init() {
@@ -65,7 +65,7 @@ type App struct {
} }
func (a *App) Save() error { func (a *App) Save() error {
hasChanges := false
a.pool.mu.RLock() a.pool.mu.RLock()
defer a.pool.mu.RUnlock() defer a.pool.mu.RUnlock()
for id, grain := range a.pool.GetGrains() { for id, grain := range a.pool.GetGrains() {
@@ -73,7 +73,7 @@ func (a *App) Save() error {
continue continue
} }
if grain.GetLastChange() > a.storage.LastSaves[uint64(id)] { if grain.GetLastChange() > a.storage.LastSaves[uint64(id)] {
hasChanges = true
err := a.storage.Store(id, grain) err := a.storage.Store(id, grain)
if err != nil { if err != nil {
log.Printf("Error saving grain %s: %v\n", id, err) log.Printf("Error saving grain %s: %v\n", id, err)
@@ -81,10 +81,8 @@ func (a *App) Save() error {
} }
} }
if !hasChanges {
return nil return nil
}
return a.storage.saveState()
} }
func (a *App) HandleSave(w http.ResponseWriter, r *http.Request) { func (a *App) HandleSave(w http.ResponseWriter, r *http.Request) {