github.com/avahowell/sia@v0.5.1-beta.0.20160524050156-83dcc3d37c94/modules/renter/hostdb/persist.go (about) 1 package hostdb 2 3 import ( 4 "github.com/NebulousLabs/Sia/modules" 5 ) 6 7 // hdbPersist defines what HostDB data persists across sessions. 8 type hdbPersist struct { 9 AllHosts []hostEntry 10 ActiveHosts []hostEntry 11 LastChange modules.ConsensusChangeID 12 } 13 14 // persistData returns the data in the hostdb that will be saved to disk. 15 func (hdb *HostDB) persistData() hdbPersist { 16 var data hdbPersist 17 for _, entry := range hdb.allHosts { 18 data.AllHosts = append(data.AllHosts, *entry) 19 } 20 for _, node := range hdb.activeHosts { 21 data.ActiveHosts = append(data.ActiveHosts, *node.hostEntry) 22 } 23 data.LastChange = hdb.lastChange 24 return data 25 } 26 27 // save saves the hostdb persistence data to disk. 28 func (hdb *HostDB) save() error { 29 return hdb.persist.save(hdb.persistData()) 30 } 31 32 // saveSync saves the hostdb persistence data to disk and then syncs to disk. 33 func (hdb *HostDB) saveSync() error { 34 return hdb.persist.saveSync(hdb.persistData()) 35 } 36 37 // load loads the hostdb persistence data from disk. 38 func (hdb *HostDB) load() error { 39 var data hdbPersist 40 err := hdb.persist.load(&data) 41 if err != nil { 42 return err 43 } 44 for i := range data.AllHosts { 45 hdb.allHosts[data.AllHosts[i].NetAddress] = &data.AllHosts[i] 46 } 47 for i := range data.ActiveHosts { 48 hdb.insertNode(&data.AllHosts[i]) 49 } 50 hdb.lastChange = data.LastChange 51 return nil 52 }