From ca00f89a2119380697bb8e4b10a628b7b172d97f Mon Sep 17 00:00:00 2001 From: Rod Vagg Date: Wed, 8 Mar 2023 14:46:17 +1100 Subject: [PATCH] fix: update state to allow iter continuance on NotFound errors --- .../wikipedia-cryptographic-hash-function.car | Bin 0 -> 161731 bytes hamt/shardeddir.go | 14 +-- hamt/shardeddir_test.go | 83 ++++++++++++++++++ 3 files changed, 90 insertions(+), 7 deletions(-) create mode 100644 hamt/fixtures/wikipedia-cryptographic-hash-function.car diff --git a/hamt/fixtures/wikipedia-cryptographic-hash-function.car b/hamt/fixtures/wikipedia-cryptographic-hash-function.car new file mode 100644 index 0000000000000000000000000000000000000000..c914805e7136312bcdda3ab2039f1d76ecbfa53d GIT binary patch literal 161731 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�(AsN1(udpy5WJUk2 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 Mv0_(~>wfzG14P_fZvX%Q literal 0 HcmV?d00001 diff --git a/hamt/shardeddir.go b/hamt/shardeddir.go index 2f329b9..a273b29 100644 --- a/hamt/shardeddir.go +++ b/hamt/shardeddir.go @@ -197,6 +197,8 @@ type _UnixFSShardedDir__ListItr struct { } func (itr *_UnixFSShardedDir__ListItr) Next() (int64, dagpb.PBLink, error) { + total := itr.total + itr.total++ next, err := itr.next() if err != nil { return -1, nil, err @@ -204,13 +206,10 @@ func (itr *_UnixFSShardedDir__ListItr) Next() (int64, dagpb.PBLink, error) { if next == nil { return -1, nil, nil } - total := itr.total - itr.total++ return total, next, nil } func (itr *_UnixFSShardedDir__ListItr) next() (dagpb.PBLink, error) { - if itr.childIter == nil { if itr._substrate.Done() { return nil, nil @@ -232,15 +231,16 @@ func (itr *_UnixFSShardedDir__ListItr) next() (dagpb.PBLink, error) { nd: child, maxPadLen: maxPadLength(child.data), } - } _, next, err := itr.childIter.Next() - if err != nil { - return nil, err - } if itr.childIter.Done() { + // do this even on error to make sure we don't overrun a shard where the + // end is missing and the user is ignoring NotFound errors itr.childIter = nil } + if err != nil { + return nil, err + } return next, nil } diff --git a/hamt/shardeddir_test.go b/hamt/shardeddir_test.go index dd1f217..fcc7601 100644 --- a/hamt/shardeddir_test.go +++ b/hamt/shardeddir_test.go @@ -6,6 +6,7 @@ import ( "fmt" "io" "math/rand" + "os" "sort" "testing" "time" @@ -16,10 +17,12 @@ import ( ft "github.com/ipfs/go-unixfs" legacy "github.com/ipfs/go-unixfs/hamt" "github.com/ipfs/go-unixfsnode/hamt" + "github.com/ipld/go-car/v2/storage" dagpb "github.com/ipld/go-codec-dagpb" "github.com/ipld/go-ipld-prime" "github.com/ipld/go-ipld-prime/fluent/qp" cidlink "github.com/ipld/go-ipld-prime/linking/cid" + basicnode "github.com/ipld/go-ipld-prime/node/basic" "github.com/ipld/go-ipld-prime/schema" "github.com/stretchr/testify/require" ) @@ -206,3 +209,83 @@ func TestFindNonExisting(t *testing.T) { require.EqualError(t, err, schema.ErrNoSuchField{Field: ipld.PathSegmentOfString(key)}.Error()) } } + +func TestIncompleteShardedIteration(t *testing.T) { + ctx := context.Background() + req := require.New(t) + + fixture := "./fixtures/wikipedia-cryptographic-hash-function.car" + f, err := os.Open(fixture) + req.NoError(err) + defer f.Close() + carstore, err := storage.OpenReadable(f) + req.NoError(err) + lsys := cidlink.DefaultLinkSystem() + lsys.TrustedStorage = true + lsys.SetReadStorage(carstore) + + // classic recursive go-ipld-prime map iteration, being forgiving about + // NotFound block loads to see what we end up with + + kvs := make(map[string]string) + var iterNotFound int + blockNotFound := make(map[string]struct{}) + + var iter func(string, ipld.Link) + iter = func(dir string, lnk ipld.Link) { + nd, err := lsys.Load(ipld.LinkContext{Ctx: ctx}, lnk, basicnode.Prototype.Any) + if nf, ok := err.(interface{ NotFound() bool }); ok && nf.NotFound() { + // got a named link that we can't load + blockNotFound[dir] = struct{}{} + return + } + req.NoError(err) + if nd.Kind() == ipld.Kind_Bytes { + bv, err := nd.AsBytes() + req.NoError(err) + kvs[dir] = string(bv) + return + } + + nb := dagpb.Type.PBNode.NewBuilder() + req.NoError(nb.AssignNode(nd)) + pbn := nb.Build() + hamtShard, err := hamt.AttemptHAMTShardFromNode(ctx, pbn, &lsys) + req.NoError(err) + + mi := hamtShard.MapIterator() + for !mi.Done() { + k, v, err := mi.Next() + if nf, ok := err.(interface{ NotFound() bool }); ok && nf.NotFound() { + // internal shard link that won't load, we don't know what it might + // point to + iterNotFound++ + continue + } + req.NoError(err) + ks, err := k.AsString() + req.NoError(err) + req.Equal(ipld.Kind_Link, v.Kind()) + lv, err := v.AsLink() + req.NoError(err) + iter(dir+"/"+ks, lv) + } + } + // walk the tree + iter("", cidlink.Link{Cid: carstore.Roots()[0]}) + + req.Len(kvs, 1) + req.Contains(kvs, "/wiki/Cryptographic_hash_function") + req.Contains(kvs["/wiki/Cryptographic_hash_function"], "Cryptographic hash function\n") + req.Equal(iterNotFound, 570) // tried to load 570 blocks that were not in the CAR + req.Len(blockNotFound, 110) // 110 blocks, for named links, were not found in the CAR + // some of the root block links + req.Contains(blockNotFound, "/favicon.ico") + req.Contains(blockNotFound, "/index.html") + req.Contains(blockNotFound, "/zimdump_version") + // some of the shard links + req.Contains(blockNotFound, "/wiki/UK_railway_Signal") + req.Contains(blockNotFound, "/wiki/Australian_House") + req.Contains(blockNotFound, "/wiki/ICloud_Drive") + req.Contains(blockNotFound, "/wiki/Édouard_Bamberger") +}