Skip to content

Commit

Permalink
fix SSD
Browse files Browse the repository at this point in the history
  • Loading branch information
reddec committed Mar 19, 2021
1 parent 155d619 commit 999edec
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 13 deletions.
11 changes: 7 additions & 4 deletions cmd/tinc-boot/run/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -157,8 +157,7 @@ func (cmd *Cmd) Execute([]string) error {
}
for _, host := range hosts {
ssd.ReplaceIfNewer(discovery.Entity{
Name: host,
Version: 0,
Name: host,
}, nil)
}

Expand Down Expand Up @@ -243,7 +242,9 @@ func (cmd *Cmd) Execute([]string) error {
}, nil) {
log.Println("got new node", name, "from", url)
}
_ = ssd.Save()
if err := ssd.Save(); err != nil {
log.Println("failed save discovery metadata after exchange:", err)
}
}
greetClients.Add(1)
go func(client *boot.Client) {
Expand All @@ -260,7 +261,9 @@ func (cmd *Cmd) Execute([]string) error {
Name: info.Name,
Version: 0,
}, nil)
_ = ssd.Save()
if err := ssd.Save(); err != nil {
log.Println("failed save discovery metadata:", err)
}
}

greetServer := &http.Server{
Expand Down
2 changes: 1 addition & 1 deletion tincd/discovery/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ func (srv *server) getOne(writer http.ResponseWriter, request *http.Request) {

log.Println("asking for", name, "after", version)

info, ok := srv.ssd.GetIfNewer(name, version)
info, ok := srv.ssd.GetAfter(name, version)
if !ok {
http.NotFound(writer, request)
return
Expand Down
21 changes: 13 additions & 8 deletions tincd/discovery/ssd.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,16 +28,18 @@ type SSD struct {
lock sync.RWMutex
entities map[string]Entity
file string
fileLock sync.Mutex
}

func (ssd *SSD) unsafeIsNewer(name string, desired int64) bool {
old, exists := ssd.entities[name]
return !exists || desired > old.Version
}

func (ssd *SSD) CanBeMerged(entity Entity) bool {
ssd.lock.RLock()
defer ssd.lock.RUnlock()
old, hasOld := ssd.entities[entity.Name]
if !hasOld || old.Version <= entity.Version {
return false
}
return true
return ssd.unsafeIsNewer(entity.Name, entity.Version)
}

func (ssd *SSD) ReplaceIfNewer(entity Entity, block func() bool) bool {
Expand All @@ -46,8 +48,7 @@ func (ssd *SSD) ReplaceIfNewer(entity Entity, block func() bool) bool {
if ssd.entities == nil {
ssd.entities = make(map[string]Entity)
}
old, hasOld := ssd.entities[entity.Name]
if hasOld && old.Version <= entity.Version {
if !ssd.unsafeIsNewer(entity.Name, entity.Version) {
return false
}
if block != nil && !block() {
Expand All @@ -66,7 +67,7 @@ func (ssd *SSD) Replace(entity Entity) {
ssd.entities[entity.Name] = entity
}

func (ssd *SSD) GetIfNewer(name string, version int64) (Entity, bool) {
func (ssd *SSD) GetAfter(name string, version int64) (Entity, bool) {
ssd.lock.RLock()
defer ssd.lock.RUnlock()
old, hasOld := ssd.entities[name]
Expand Down Expand Up @@ -158,10 +159,14 @@ func (ssd *SSD) ReadFile(filename string) error {
}

func (ssd *SSD) Read() error {
ssd.fileLock.Lock()
defer ssd.fileLock.Unlock()
return ssd.ReadFile(ssd.file)
}

func (ssd *SSD) Save() error {
ssd.fileLock.Lock()
defer ssd.fileLock.Unlock()
return ssd.SaveFile(ssd.file)
}

Expand Down

0 comments on commit 999edec

Please sign in to comment.