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.