github.com/avahowell/sia@v0.5.1-beta.0.20160524050156-83dcc3d37c94/modules/renter/contractor/persist.go (about)

     1  package contractor
     2  
     3  import (
     4  	"github.com/NebulousLabs/Sia/modules"
     5  	"github.com/NebulousLabs/Sia/types"
     6  )
     7  
     8  // contractorPersist defines what Contractor data persists across sessions.
     9  type contractorPersist struct {
    10  	Allowance   modules.Allowance
    11  	BlockHeight types.BlockHeight
    12  	Contracts   []modules.RenterContract
    13  	LastChange  modules.ConsensusChangeID
    14  	RenewHeight types.BlockHeight
    15  	// metrics
    16  	DownloadSpending types.Currency
    17  	StorageSpending  types.Currency
    18  	UploadSpending   types.Currency
    19  }
    20  
    21  // persistData returns the data in the Contractor that will be saved to disk.
    22  func (c *Contractor) persistData() contractorPersist {
    23  	data := contractorPersist{
    24  		Allowance:        c.allowance,
    25  		BlockHeight:      c.blockHeight,
    26  		LastChange:       c.lastChange,
    27  		RenewHeight:      c.renewHeight,
    28  		DownloadSpending: c.downloadSpending,
    29  		StorageSpending:  c.storageSpending,
    30  		UploadSpending:   c.uploadSpending,
    31  	}
    32  	for _, contract := range c.contracts {
    33  		data.Contracts = append(data.Contracts, contract)
    34  	}
    35  	return data
    36  }
    37  
    38  // load loads the Contractor persistence data from disk.
    39  func (c *Contractor) load() error {
    40  	var data contractorPersist
    41  	err := c.persist.load(&data)
    42  	if err != nil {
    43  		return err
    44  	}
    45  	c.allowance = data.Allowance
    46  	c.blockHeight = data.BlockHeight
    47  	for _, contract := range data.Contracts {
    48  		c.contracts[contract.ID] = contract
    49  	}
    50  	c.lastChange = data.LastChange
    51  	c.renewHeight = data.RenewHeight
    52  	c.downloadSpending = data.DownloadSpending
    53  	c.storageSpending = data.StorageSpending
    54  	c.uploadSpending = data.UploadSpending
    55  	return nil
    56  }
    57  
    58  // save saves the Contractor persistence data to disk.
    59  func (c *Contractor) save() error {
    60  	return c.persist.save(c.persistData())
    61  }
    62  
    63  // saveSync saves the Contractor persistence data to disk and then syncs to disk.
    64  func (c *Contractor) saveSync() error {
    65  	return c.persist.saveSync(c.persistData())
    66  }