Pass in prev delta to collectItems cont. (#2400)

## Description

Forgot to push the review changes  in https://github.com/alcionai/corso/pull/2371 .

## Does this PR need a docs update or release note?

- [ ]  Yes, it's included
- [ ] 🕐 Yes, but in a later PR
- [x]  No 

## Type of change

<!--- Please check the type of change your PR introduces: --->
- [ ] 🌻 Feature
- [x] 🐛 Bugfix
- [ ] 🗺️ Documentation
- [ ] 🤖 Test
- [ ] 💻 CI/Deployment
- [ ] 🧹 Tech Debt/Cleanup

## Issue(s)

<!-- Can reference multiple issues. Use one of the following "magic words" - "closes, fixes" to auto-close the Github issue. -->
* #<issue>

## Test Plan

<!-- How will this be tested prior to merging.-->
- [ ] 💪 Manual
- [x]  Unit test
- [ ] 💚 E2E
This commit is contained in:
Abin Simon 2023-02-07 10:55:22 +05:30 committed by GitHub
parent 17b698b854
commit b327de5801
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 15 additions and 10 deletions

View File

@ -30,6 +30,7 @@ const pageSize = int32(999)
type driveItemPager struct { type driveItemPager struct {
gs graph.Servicer gs graph.Servicer
driveID string
builder *msdrives.ItemRootDeltaRequestBuilder builder *msdrives.ItemRootDeltaRequestBuilder
options *msdrives.ItemRootDeltaRequestBuilderGetRequestConfiguration options *msdrives.ItemRootDeltaRequestBuilderGetRequestConfiguration
} }
@ -49,6 +50,7 @@ func NewItemPager(
res := &driveItemPager{ res := &driveItemPager{
gs: gs, gs: gs,
driveID: driveID,
options: requestConfig, options: requestConfig,
builder: gs.Client().DrivesById(driveID).Root().Delta(), builder: gs.Client().DrivesById(driveID).Root().Delta(),
} }
@ -78,6 +80,10 @@ func (p *driveItemPager) SetNext(link string) {
p.builder = msdrives.NewItemRootDeltaRequestBuilder(link, p.gs.Adapter()) p.builder = msdrives.NewItemRootDeltaRequestBuilder(link, p.gs.Adapter())
} }
func (p *driveItemPager) Reset() {
p.builder = p.gs.Client().DrivesById(p.driveID).Root().Delta()
}
func (p *driveItemPager) ValuesIn(l api.DeltaPageLinker) ([]models.DriveItemable, error) { func (p *driveItemPager) ValuesIn(l api.DeltaPageLinker) ([]models.DriveItemable, error) {
return getValues[models.DriveItemable](l) return getValues[models.DriveItemable](l)
} }

View File

@ -1048,6 +1048,7 @@ func (p *mockItemPager) GetPage(context.Context) (gapi.DeltaPageLinker, error) {
} }
func (p *mockItemPager) SetNext(string) {} func (p *mockItemPager) SetNext(string) {}
func (p *mockItemPager) Reset() {}
func (p *mockItemPager) ValuesIn(gapi.DeltaPageLinker) ([]models.DriveItemable, error) { func (p *mockItemPager) ValuesIn(gapi.DeltaPageLinker) ([]models.DriveItemable, error) {
idx := p.getIdx idx := p.getIdx
@ -1497,7 +1498,6 @@ func (suite *OneDriveCollectionsSuite) TestCollectItems() {
name string name string
items []deltaPagerResult items []deltaPagerResult
deltaURL string deltaURL string
prevDelta string
prevDeltaSuccess bool prevDeltaSuccess bool
err error err error
}{ }{
@ -1522,7 +1522,7 @@ func (suite *OneDriveCollectionsSuite) TestCollectItems() {
name: "invalid prev delta", name: "invalid prev delta",
deltaURL: delta, deltaURL: delta,
items: []deltaPagerResult{ items: []deltaPagerResult{
{nextLink: &next, err: deltaError}, {err: deltaError},
{deltaLink: &delta}, // works on retry {deltaLink: &delta}, // works on retry
}, },
prevDeltaSuccess: false, prevDeltaSuccess: false,
@ -1531,7 +1531,7 @@ func (suite *OneDriveCollectionsSuite) TestCollectItems() {
name: "fail a normal delta query", name: "fail a normal delta query",
items: []deltaPagerResult{ items: []deltaPagerResult{
{nextLink: &next}, {nextLink: &next},
{nextLink: &next, err: assert.AnError}, {err: assert.AnError},
}, },
prevDeltaSuccess: true, prevDeltaSuccess: true,
err: assert.AnError, err: assert.AnError,
@ -1566,9 +1566,9 @@ func (suite *OneDriveCollectionsSuite) TestCollectItems() {
"", "",
) )
require.ErrorIs(suite.T(), err, test.err) require.ErrorIs(suite.T(), err, test.err, "delta fetch err")
require.Equal(suite.T(), test.deltaURL, delta.URL) require.Equal(suite.T(), test.deltaURL, delta.URL, "delta url")
require.Equal(suite.T(), !test.prevDeltaSuccess, delta.Reset) require.Equal(suite.T(), !test.prevDeltaSuccess, delta.Reset, "delta reset")
}) })
} }
} }

View File

@ -148,6 +148,7 @@ type itemCollector func(
type itemPager interface { type itemPager interface {
GetPage(context.Context) (gapi.DeltaPageLinker, error) GetPage(context.Context) (gapi.DeltaPageLinker, error)
SetNext(nextLink string) SetNext(nextLink string)
Reset()
ValuesIn(gapi.DeltaPageLinker) ([]models.DriveItemable, error) ValuesIn(gapi.DeltaPageLinker) ([]models.DriveItemable, error)
} }
@ -193,7 +194,6 @@ func collectItems(
newPaths = map[string]string{} newPaths = map[string]string{}
excluded = map[string]struct{}{} excluded = map[string]struct{}{}
invalidPrevDelta = false invalidPrevDelta = false
triedPrevDelta = false
) )
maps.Copy(newPaths, oldPaths) maps.Copy(newPaths, oldPaths)
@ -205,13 +205,12 @@ func collectItems(
for { for {
page, err := pager.GetPage(ctx) page, err := pager.GetPage(ctx)
if !triedPrevDelta && graph.IsErrInvalidDelta(err) { if graph.IsErrInvalidDelta(err) {
logger.Ctx(ctx).Infow("Invalid previous delta link", "link", prevDelta) logger.Ctx(ctx).Infow("Invalid previous delta link", "link", prevDelta)
triedPrevDelta = true // TODO(meain): Do we need this check?
invalidPrevDelta = true invalidPrevDelta = true
pager.SetNext("") pager.Reset()
continue continue
} }