From 4566e396c95724b81d13e5de9474b6b70487df42 Mon Sep 17 00:00:00 2001 From: Ingar Shu Date: Mon, 19 Oct 2020 16:01:42 -0700 Subject: [PATCH] If available, SetAsk will use a previously-stored ask for default values for Min/Max piece sizes (#438) --- storagemarket/impl/storedask/storedask.go | 8 +++-- .../impl/storedask/storedask_test.go | 31 +++++++++++++------ 2 files changed, 26 insertions(+), 13 deletions(-) diff --git a/storagemarket/impl/storedask/storedask.go b/storagemarket/impl/storedask/storedask.go index ee615db4..27ea6b03 100644 --- a/storagemarket/impl/storedask/storedask.go +++ b/storagemarket/impl/storedask/storedask.go @@ -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() @@ -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 { diff --git a/storagemarket/impl/storedask/storedask_test.go b/storagemarket/impl/storedask/storedask_test.go index 474dd949..27268da0 100644 --- a/storagemarket/impl/storedask/storedask_test.go +++ b/storagemarket/impl/storedask/storedask_test.go @@ -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{ @@ -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) {