diff --git a/src/internal/data/item.go b/src/internal/data/item.go index 81d4befe5..2403e63aa 100644 --- a/src/internal/data/item.go +++ b/src/internal/data/item.go @@ -14,6 +14,15 @@ import ( "github.com/alcionai/corso/src/pkg/logger" ) +var ( + _ Item = &prefetchedItem{} + _ ItemInfo = &prefetchedItem{} + _ ItemModTime = &prefetchedItem{} + _ Item = &lazyItem{} + _ ItemInfo = &lazyItem{} + _ ItemModTime = &lazyItem{} +) + func NewDeletedItem(itemID string) Item { return &prefetchedItem{ id: itemID, @@ -74,7 +83,10 @@ func (i prefetchedItem) ModTime() time.Time { } type ItemDataGetter interface { - GetData(context.Context) (io.ReadCloser, *details.ItemInfo, bool, error) + GetData( + context.Context, + *fault.Bus, + ) (io.ReadCloser, *details.ItemInfo, bool, error) } func NewLazyItem( @@ -121,12 +133,9 @@ func (i lazyItem) ID() string { func (i *lazyItem) ToReader() io.ReadCloser { return lazy.NewLazyReadCloser(func() (io.ReadCloser, error) { - reader, info, delInFlight, err := i.itemGetter.GetData(i.ctx) + reader, info, delInFlight, err := i.itemGetter.GetData(i.ctx, i.errs) if err != nil { - err = clues.Stack(err) - i.errs.AddRecoverable(i.ctx, err) - - return nil, err + return nil, clues.Stack(err) } // If an item was deleted then return an empty file so we don't fail the diff --git a/src/internal/data/item_test.go b/src/internal/data/item_test.go index c1b91e3df..864e70890 100644 --- a/src/internal/data/item_test.go +++ b/src/internal/data/item_test.go @@ -146,9 +146,15 @@ func (mid *mockItemDataGetter) check(t *testing.T, expectCalled bool) { } func (mid *mockItemDataGetter) GetData( - context.Context, + ctx context.Context, + errs *fault.Bus, ) (io.ReadCloser, *details.ItemInfo, bool, error) { mid.getCalled = true + + if mid.err != nil { + errs.AddRecoverable(ctx, mid.err) + } + return mid.reader, mid.info, mid.delInFlight, mid.err } diff --git a/src/internal/m365/collection/exchange/collection.go b/src/internal/m365/collection/exchange/collection.go index 14d3cf301..30f28672d 100644 --- a/src/internal/m365/collection/exchange/collection.go +++ b/src/internal/m365/collection/exchange/collection.go @@ -425,6 +425,7 @@ type lazyItemGetter struct { func (lig *lazyItemGetter) GetData( ctx context.Context, + errs *fault.Bus, ) (io.ReadCloser, *details.ItemInfo, bool, error) { itemData, info, err := getItemAndInfo( ctx, @@ -446,6 +447,7 @@ func (lig *lazyItemGetter) GetData( } err = clues.Stack(err) + errs.AddRecoverable(ctx, err) return nil, nil, false, err }