Clear availability for disconnected node

This commit is contained in:
Jakob Borg
2014-01-13 11:22:57 -07:00
parent ba0e4ded65
commit 8d5aed410f
4 changed files with 57 additions and 29 deletions

View File

@@ -192,6 +192,15 @@ func (q *FileQueue) deleteAt(i int) {
q.files = q.files[:i+copy(q.files[i:], q.files[i+1:])]
}
func (q *FileQueue) deleteFile(n string) {
for i, file := range q.files {
if n == file.name {
q.deleteAt(i)
return
}
}
}
func (q *FileQueue) SetAvailable(file, node string) {
q.lock.Lock()
defer q.lock.Unlock()
@@ -209,3 +218,19 @@ func (q *FileQueue) AddAvailable(file, node string) {
}
q.availability[file] = append(q.availability[file], node)
}
func (q *FileQueue) RemoveAvailable(toRemove string) {
q.lock.Lock()
defer q.lock.Unlock()
for file, nodes := range q.availability {
for i, node := range nodes {
if node == toRemove {
q.availability[file] = nodes[:i+copy(nodes[i:], nodes[i+1:])]
if len(q.availability[file]) == 0 {
q.deleteFile(file)
}
}
break
}
}
}