storage: revert to reslicing on every .Next
Reverts CLs:
* https://code-review.googlesource.com/c/gocloud/+/45313
* https://code-review.googlesource.com/c/gocloud/+/45673
because the interaction between the logic for detecting
when to refetch elements and reslicing isn't working
properly hence triggered bug #1623.
When we figure out what the issue was with the iterator,
we can then re-apply the performance alleviation.
Updates #1623
Change-Id: I332fda49db18b08af4926fa265a7adb30bb24a3a
Reviewed-on: https://code-review.googlesource.com/c/gocloud/+/47110
Reviewed-by: kokoro <noreply+kokoro@google.com>
Reviewed-by: Jean de Klerk <deklerk@google.com>
diff --git a/storage/bucket.go b/storage/bucket.go
index 8091cdf..15cb01e 100644
--- a/storage/bucket.go
+++ b/storage/bucket.go
@@ -1046,13 +1046,8 @@
}
it.pageInfo, it.nextFunc = iterator.NewPageInfo(
it.fetch,
- func() int { return len(it.items) - it.index },
- func() interface{} {
- b := it.items
- it.items = nil
- it.index = 0
- return b
- })
+ func() int { return len(it.items) },
+ func() interface{} { b := it.items; it.items = nil; return b })
if q != nil {
it.query = *q
}
@@ -1069,7 +1064,6 @@
pageInfo *iterator.PageInfo
nextFunc func() error
items []*ObjectAttrs
- index int
}
// PageInfo supports pagination. See the google.golang.org/api/iterator package for details.
@@ -1090,10 +1084,8 @@
if err := it.nextFunc(); err != nil {
return nil, err
}
-
- item := it.items[it.index]
- it.index++
-
+ item := it.items[0]
+ it.items = it.items[1:]
return item, nil
}
@@ -1146,13 +1138,9 @@
}
it.pageInfo, it.nextFunc = iterator.NewPageInfo(
it.fetch,
- func() int { return len(it.buckets) - it.index },
- func() interface{} {
- b := it.buckets
- it.buckets = nil
- it.index = 0
- return b
- })
+ func() int { return len(it.buckets) },
+ func() interface{} { b := it.buckets; it.buckets = nil; return b })
+
return it
}
@@ -1169,7 +1157,6 @@
buckets []*BucketAttrs
pageInfo *iterator.PageInfo
nextFunc func() error
- index int
}
// Next returns the next result. Its second return value is iterator.Done if
@@ -1181,11 +1168,9 @@
if err := it.nextFunc(); err != nil {
return nil, err
}
-
- b := it.buckets[it.index]
- it.index++
-
- return b, nil
+ item := it.items[0]
+ it.items = it.items[1:]
+ return item, nil
}
// PageInfo supports pagination. See the google.golang.org/api/iterator package for details.