Skip to content

Commit

Permalink
If available, SetAsk will use a previously-stored ask for default val…
Browse files Browse the repository at this point in the history
…ues for Min/Max piece sizes (#438)
  • Loading branch information
ingar authored Oct 19, 2020
1 parent d011e10 commit 4566e39
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 13 deletions.
8 changes: 5 additions & 3 deletions storagemarket/impl/storedask/storedask.go
Original file line number Diff line number Diff line change
Expand Up @@ -95,17 +95,19 @@ func NewStoredAsk(ds datastore.Batching, dsKey datastore.Key, spn storagemarket.
}

// SetAsk configures the storage miner's ask with the provided prices (for unverified and verified deals),
// duration, and options. Any previously-existing ask is replaced.
// duration, and options. Any previously-existing ask is replaced. If no options are passed to configure
// MinPieceSize and MaxPieceSize, the previous ask's values will be used, if available.
// It also increments the sequence number on the ask
func (s *StoredAsk) SetAsk(price abi.TokenAmount, verifiedPrice abi.TokenAmount, duration abi.ChainEpoch, options ...storagemarket.StorageAskOption) error {
s.askLk.Lock()
defer s.askLk.Unlock()
var seqno uint64
minPieceSize := DefaultMinPieceSize
maxPieceSize := DefaultMaxPieceSize
if s.ask != nil {
seqno = s.ask.Ask.SeqNo + 1
minPieceSize = s.ask.Ask.MinPieceSize

maxPieceSize = s.ask.Ask.MaxPieceSize
}

ctx := context.TODO()
Expand All @@ -122,7 +124,7 @@ func (s *StoredAsk) SetAsk(price abi.TokenAmount, verifiedPrice abi.TokenAmount,
Miner: s.actor,
SeqNo: seqno,
MinPieceSize: minPieceSize,
MaxPieceSize: DefaultMaxPieceSize,
MaxPieceSize: maxPieceSize,
}

for _, option := range options {
Expand Down
31 changes: 21 additions & 10 deletions storagemarket/impl/storedask/storedask_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ func TestStoredAsk(t *testing.T) {
})
}

func TestMinPieceSize(t *testing.T) {
func TestPieceSizeLimits(t *testing.T) {
// create ask with options
ds := dss.MutexWrap(datastore.NewMapDatastore())
spn := &testnodes.FakeProviderNode{
Expand All @@ -105,22 +105,33 @@ func TestMinPieceSize(t *testing.T) {
},
}
actor := address.TestAddress2
ms := abi.PaddedPieceSize(1024)
storedAsk2, err := storedask.NewStoredAsk(ds, datastore.NewKey("latest-ask"), spn, actor, storagemarket.MinPieceSize(ms))
min := abi.PaddedPieceSize(1024)
max := abi.PaddedPieceSize(4096)
sa, err := storedask.NewStoredAsk(ds, datastore.NewKey("latest-ask"), spn, actor, storagemarket.MinPieceSize(min), storagemarket.MaxPieceSize(max))
require.NoError(t, err)
ask := storedAsk2.GetAsk()
require.EqualValues(t, ms, ask.Ask.MinPieceSize)
ask := sa.GetAsk()
require.EqualValues(t, min, ask.Ask.MinPieceSize)
require.EqualValues(t, max, ask.Ask.MaxPieceSize)

// now change the min piece size via set ask
// SetAsk should not clobber previously-set options
require.NoError(t, sa.SetAsk(ask.Ask.Price, ask.Ask.VerifiedPrice, ask.Ask.Expiry))
require.NoError(t, err)
ask = sa.GetAsk()
require.EqualValues(t, min, ask.Ask.MinPieceSize)
require.EqualValues(t, max, ask.Ask.MaxPieceSize)

// now change the size limits via set ask
testPrice := abi.NewTokenAmount(1000000000)
testVerifiedPrice := abi.NewTokenAmount(100000000)
testDuration := abi.ChainEpoch(200)
newSize := abi.PaddedPieceSize(150)
require.NoError(t, storedAsk2.SetAsk(testPrice, testVerifiedPrice, testDuration, storagemarket.MinPieceSize(newSize)))
newMin := abi.PaddedPieceSize(150)
newMax := abi.PaddedPieceSize(12345)
require.NoError(t, sa.SetAsk(testPrice, testVerifiedPrice, testDuration, storagemarket.MinPieceSize(newMin), storagemarket.MaxPieceSize(newMax)))

// call get
ask = storedAsk2.GetAsk()
require.EqualValues(t, newSize, ask.Ask.MinPieceSize)
ask = sa.GetAsk()
require.EqualValues(t, newMin, ask.Ask.MinPieceSize)
require.EqualValues(t, newMax, ask.Ask.MaxPieceSize)
}

func TestMigrations(t *testing.T) {
Expand Down

0 comments on commit 4566e39

Please sign in to comment.