Generic item api update (#4356)

Minor updates to error handling for
generic item implementation

---

#### 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

- [ ] 🌻 Feature
- [ ] 🐛 Bugfix
- [ ] 🗺️ Documentation
- [ ] 🤖 Supportability/Tests
- [ ] 💻 CI/Deployment
- [x] 🧹 Tech Debt/Cleanup

#### Issue(s)

* #4191

#### Test Plan

- [ ] 💪 Manual
- [x]  Unit test
- [x] 💚 E2E
This commit is contained in:
ashmrtn 2023-09-25 18:59:57 -07:00 committed by GitHub
parent 6690fd3ea2
commit a91c823e42
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 24 additions and 7 deletions

View File

@ -14,6 +14,15 @@ import (
"github.com/alcionai/corso/src/pkg/logger" "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 { func NewDeletedItem(itemID string) Item {
return &prefetchedItem{ return &prefetchedItem{
id: itemID, id: itemID,
@ -74,7 +83,10 @@ func (i prefetchedItem) ModTime() time.Time {
} }
type ItemDataGetter interface { 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( func NewLazyItem(
@ -121,12 +133,9 @@ func (i lazyItem) ID() string {
func (i *lazyItem) ToReader() io.ReadCloser { func (i *lazyItem) ToReader() io.ReadCloser {
return lazy.NewLazyReadCloser(func() (io.ReadCloser, error) { 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 { if err != nil {
err = clues.Stack(err) return nil, clues.Stack(err)
i.errs.AddRecoverable(i.ctx, err)
return nil, err
} }
// If an item was deleted then return an empty file so we don't fail the // If an item was deleted then return an empty file so we don't fail the

View File

@ -146,9 +146,15 @@ func (mid *mockItemDataGetter) check(t *testing.T, expectCalled bool) {
} }
func (mid *mockItemDataGetter) GetData( func (mid *mockItemDataGetter) GetData(
context.Context, ctx context.Context,
errs *fault.Bus,
) (io.ReadCloser, *details.ItemInfo, bool, error) { ) (io.ReadCloser, *details.ItemInfo, bool, error) {
mid.getCalled = true mid.getCalled = true
if mid.err != nil {
errs.AddRecoverable(ctx, mid.err)
}
return mid.reader, mid.info, mid.delInFlight, mid.err return mid.reader, mid.info, mid.delInFlight, mid.err
} }

View File

@ -425,6 +425,7 @@ type lazyItemGetter struct {
func (lig *lazyItemGetter) GetData( func (lig *lazyItemGetter) GetData(
ctx context.Context, ctx context.Context,
errs *fault.Bus,
) (io.ReadCloser, *details.ItemInfo, bool, error) { ) (io.ReadCloser, *details.ItemInfo, bool, error) {
itemData, info, err := getItemAndInfo( itemData, info, err := getItemAndInfo(
ctx, ctx,
@ -446,6 +447,7 @@ func (lig *lazyItemGetter) GetData(
} }
err = clues.Stack(err) err = clues.Stack(err)
errs.AddRecoverable(ctx, err)
return nil, nil, false, err return nil, nil, false, err
} }