Complete refactor to new grpc control plane and only http proxy for carts #4
@@ -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
14
main.go
@@ -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) {
|
||||||
|
|||||||
Reference in New Issue
Block a user