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 {
gs graph.Servicer
driveID string
builder *msdrives.ItemRootDeltaRequestBuilder
options *msdrives.ItemRootDeltaRequestBuilderGetRequestConfiguration
}
@ -49,6 +50,7 @@ func NewItemPager(
res := &driveItemPager{
gs: gs,
driveID: driveID,
options: requestConfig,
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())
}
func (p *driveItemPager) Reset() {
p.builder = p.gs.Client().DrivesById(p.driveID).Root().Delta()
}
func (p *driveItemPager) ValuesIn(l api.DeltaPageLinker) ([]models.DriveItemable, error) {
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) Reset() {}
func (p *mockItemPager) ValuesIn(gapi.DeltaPageLinker) ([]models.DriveItemable, error) {
idx := p.getIdx
@ -1497,7 +1498,6 @@ func (suite *OneDriveCollectionsSuite) TestCollectItems() {
name string
items []deltaPagerResult
deltaURL string
prevDelta string
prevDeltaSuccess bool
err error
}{
@ -1522,7 +1522,7 @@ func (suite *OneDriveCollectionsSuite) TestCollectItems() {
name: "invalid prev delta",
deltaURL: delta,
items: []deltaPagerResult{
{nextLink: &next, err: deltaError},
{err: deltaError},
{deltaLink: &delta}, // works on retry
},
prevDeltaSuccess: false,
@ -1531,7 +1531,7 @@ func (suite *OneDriveCollectionsSuite) TestCollectItems() {
name: "fail a normal delta query",
items: []deltaPagerResult{
{nextLink: &next},
{nextLink: &next, err: assert.AnError},
{err: assert.AnError},
},
prevDeltaSuccess: true,
err: assert.AnError,
@ -1566,9 +1566,9 @@ func (suite *OneDriveCollectionsSuite) TestCollectItems() {
"",
)
require.ErrorIs(suite.T(), err, test.err)
require.Equal(suite.T(), test.deltaURL, delta.URL)
require.Equal(suite.T(), !test.prevDeltaSuccess, delta.Reset)
require.ErrorIs(suite.T(), err, test.err, "delta fetch err")
require.Equal(suite.T(), test.deltaURL, delta.URL, "delta url")
require.Equal(suite.T(), !test.prevDeltaSuccess, delta.Reset, "delta reset")
})
}
}

View File

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