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  }