GC: Update Error Messages (#1252)

## Description

<!-- Insert PR description-->

## Type of change

- [x] 🗺️ Documentation

## Issue(s)

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

## Test Plan

<!-- How will this be tested prior to merging.-->
- [x] 💪 Manual
This commit is contained in:
Danny 2022-10-21 18:11:29 -04:00 committed by GitHub
parent 6047805d6c
commit 597e689417
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 65 additions and 50 deletions

View File

@ -39,7 +39,9 @@ func (cfc *contactFolderCache) populateContactRoot(
ContactFoldersById(directoryID).
Get(ctx, opts)
if err != nil {
return errors.Wrapf(err, "fetching root contact folder")
return errors.Wrapf(
err,
"fetching root contact folder: "+support.ConnectorStackErrorTrace(err))
}
idPtr := f.GetId()
@ -92,14 +94,14 @@ func (cfc *contactFolderCache) Populate(
iter, err := msgraphgocore.NewPageIterator(query, cfc.gs.Adapter(),
models.CreateContactFolderCollectionResponseFromDiscriminatorValue)
if err != nil {
return err
return errors.Wrap(err, support.ConnectorStackErrorTrace(err))
}
cb := IterativeCollectContactContainers(containers,
"",
errUpdater)
if err := iter.Iterate(ctx, cb); err != nil {
return err
return errors.Wrap(err, support.ConnectorStackErrorTrace(err))
}
if errs != nil {
@ -141,7 +143,7 @@ func (cfc *contactFolderCache) IDToPath(
) (*path.Builder, error) {
c, ok := cfc.cache[folderID]
if !ok {
return nil, errors.Errorf("folder %s not cached", folderID)
return nil, errors.Errorf("contact folder %s not cached", folderID)
}
p := c.Path()

View File

@ -37,10 +37,13 @@ func (ecc *eventCalendarCache) Populate(
return err
}
directories := make(map[string]graph.Container)
errUpdater := func(s string, e error) {
err = support.WrapAndAppend(s, e, err)
}
var (
asyncError error
directories = make(map[string]graph.Container)
errUpdater = func(s string, e error) {
asyncError = support.WrapAndAppend(s, e, err)
}
)
query, err := ecc.gs.Client().UsersById(ecc.userID).Calendars().Get(ctx, options)
if err != nil {
@ -64,10 +67,11 @@ func (ecc *eventCalendarCache) Populate(
iterateErr := iter.Iterate(ctx, cb)
if iterateErr != nil {
return iterateErr
return errors.Wrap(iterateErr, support.ConnectorStackErrorTrace(iterateErr))
}
if err != nil {
// check for errors created during iteration
if asyncError != nil {
return err
}

View File

@ -48,7 +48,7 @@ func createService(credentials account.M365Config, shouldFailFast bool) (*exchan
credentials.AzureClientSecret,
)
if err != nil {
return nil, err
return nil, errors.Wrap(err, "creating microsoft graph service for exchange")
}
service := exchangeService{
@ -58,7 +58,7 @@ func createService(credentials account.M365Config, shouldFailFast bool) (*exchan
credentials: credentials,
}
return &service, err
return &service, nil
}
// CreateMailFolder makes a mail folder iff a folder of the same name does not exist
@ -142,7 +142,7 @@ func GetAllMailFolders(
resolver, err := PopulateExchangeContainerResolver(ctx, qp, path.EmailCategory)
if err != nil {
return nil, err
return nil, errors.Wrap(err, "building directory resolver in GetAllMailFolders")
}
for _, c := range resolver.Items() {
@ -171,7 +171,7 @@ func GetAllCalendars(
resolver, err := PopulateExchangeContainerResolver(ctx, qp, path.EventsCategory)
if err != nil {
return nil, err
return nil, errors.Wrap(err, "building calendar resolver in GetAllCalendars")
}
for _, c := range resolver.Items() {
@ -200,7 +200,7 @@ func GetAllContactFolders(
resolver, err := PopulateExchangeContainerResolver(ctx, qp, path.ContactsCategory)
if err != nil {
return nil, err
return nil, errors.Wrap(err, "building directory resolver in GetAllContactFolders")
}
for _, c := range resolver.Items() {

View File

@ -40,7 +40,7 @@ func FilterContainersAndFillCollections(
service, err := createService(qp.Credentials, qp.FailFast)
if err != nil {
errs = support.WrapAndAppend(
qp.User+" failed to create service during FilterContainerAndFillCollection",
qp.User+" FilterContainerAndFillCollection",
err,
errs)
@ -98,7 +98,8 @@ func IterativeCollectContactContainers(
return func(entry any) bool {
folder, ok := entry.(models.ContactFolderable)
if !ok {
errUpdater("", errors.New("casting item to models.ContactFolderable"))
errUpdater("iterateCollectContactContainers",
errors.New("casting item to models.ContactFolderable"))
return false
}
@ -121,7 +122,7 @@ func IterativeCollectCalendarContainers(
return func(entry any) bool {
cal, ok := entry.(models.Calendarable)
if !ok {
errUpdater("failure during IterativeCollectCalendarContainers",
errUpdater("iterativeCollectCalendarContainers",
errors.New("casting item to models.Calendarable"))
return false
}
@ -190,6 +191,7 @@ func FetchEventIDsFromCalendar(
if entry.GetId() == nil {
errs = multierror.Append(errs, errors.New("item with nil ID"))
return true
}
ids = append(ids, *entry.GetId())
@ -201,7 +203,7 @@ func FetchEventIDsFromCalendar(
return nil, errors.Wrap(
err,
support.ConnectorStackErrorTrace(err)+
" :iterateFailure for fetching events from calendar "+calendarID,
" :fetching events from calendar "+calendarID,
)
}
@ -233,7 +235,7 @@ func FetchContactIDsFromDirectory(ctx context.Context, gs graph.Service, user, d
models.CreateContactCollectionResponseFromDiscriminatorValue,
)
if err != nil {
return nil, errors.Wrap(err, "failure to create iterator during FecthContactIDs")
return nil, errors.Wrap(err, "iterator creation during FetchContactIDs")
}
var errs *multierror.Error
@ -249,6 +251,11 @@ func FetchContactIDsFromDirectory(ctx context.Context, gs graph.Service, user, d
return true
}
if entry.GetId() == nil {
errs = multierror.Append(errs, errors.New("item with nil ID"))
return true
}
ids = append(ids, *entry.GetId())
return true
@ -259,7 +266,7 @@ func FetchContactIDsFromDirectory(ctx context.Context, gs graph.Service, user, d
errors.Wrap(
err,
support.ConnectorStackErrorTrace(err)+
" :iterate failure during fetching contactIDs from directory "+directoryID,
" :fetching contactIDs from directory "+directoryID,
)
}
@ -286,10 +293,8 @@ func FetchMessageIDsFromDirectory(
Messages().
Get(ctx, options)
if err != nil {
return nil, errors.Wrap(
errors.Wrap(err, support.ConnectorStackErrorTrace(err)),
"initial folder query",
)
return nil,
errors.Wrap(err, support.ConnectorStackErrorTrace(err))
}
pageIter, err := msgraphgocore.NewPageIterator(
@ -324,7 +329,7 @@ func FetchMessageIDsFromDirectory(
return nil, errors.Wrap(
err,
support.ConnectorStackErrorTrace(err)+
" :iterateFailure for fetching messages from directory "+directoryID,
" :fetching messages from directory "+directoryID,
)
}

View File

@ -65,7 +65,7 @@ func RestoreExchangeContact(
) (*details.ExchangeInfo, error) {
contact, err := support.CreateContactFromBytes(bits)
if err != nil {
return nil, errors.Wrap(err, "failure to create contact from bytes: RestoreExchangeContact")
return nil, errors.Wrap(err, "creating contact from bytes: RestoreExchangeContact")
}
response, err := service.Client().UsersById(user).ContactFoldersById(destination).Contacts().Post(ctx, contact, nil)
@ -74,7 +74,7 @@ func RestoreExchangeContact(
return nil, errors.Wrap(
err,
"failure to create Contact during RestoreExchangeContact: "+name+" "+
"uploading Contact during RestoreExchangeContact: "+name+" "+
support.ConnectorStackErrorTrace(err),
)
}
@ -101,7 +101,7 @@ func RestoreExchangeEvent(
) (*details.ExchangeInfo, error) {
event, err := support.CreateEventFromBytes(bits)
if err != nil {
return nil, err
return nil, errors.Wrap(err, "creating event from bytes: RestoreExchangeEvent")
}
transformedEvent := support.ToEventSimplified(event)
@ -110,7 +110,7 @@ func RestoreExchangeEvent(
if err != nil {
return nil, errors.Wrap(err,
fmt.Sprintf(
"failure to event creation failure during RestoreExchangeEvent: %s",
"uploading event during RestoreExchangeEvent: %s",
support.ConnectorStackErrorTrace(err)),
)
}
@ -138,7 +138,7 @@ func RestoreMailMessage(
// Creates messageable object from original bytes
originalMessage, err := support.CreateMessageFromBytes(bits)
if err != nil {
return nil, err
return nil, errors.Wrap(err, "creating email from bytes: RestoreMailMessage")
}
// Sets fields from original message from storage
clone := support.ToMessage(originalMessage)
@ -226,7 +226,9 @@ func SendMailToBackStore(
for _, attachment := range attached {
err := uploadAttachment(ctx, service, user, destination, id, attachment)
if err != nil {
errs = support.WrapAndAppend(fmt.Sprintf("uploading attachment for message %s", id),
errs = support.WrapAndAppend(
fmt.Sprintf("uploading attachment for message %s: %s",
id, support.ConnectorStackErrorTrace(err)),
err,
errs,
)

View File

@ -12,6 +12,7 @@ import (
khttp "github.com/microsoft/kiota-http-go"
msgraphsdk "github.com/microsoftgraph/msgraph-sdk-go"
msgraphgocore "github.com/microsoftgraph/msgraph-sdk-go-core"
"github.com/pkg/errors"
"github.com/alcionai/corso/src/pkg/logger"
"github.com/alcionai/corso/src/pkg/path"
@ -29,7 +30,7 @@ func CreateAdapter(tenant, client, secret string) (*msgraphsdk.GraphRequestAdapt
// Client Provider: Uses Secret for access to tenant-level data
cred, err := az.NewClientSecretCredential(tenant, client, secret, nil)
if err != nil {
return nil, err
return nil, errors.Wrap(err, "creating m365 client secret credentials")
}
auth, err := ka.NewAzureIdentityAuthenticationProviderWithScopes(
@ -37,7 +38,7 @@ func CreateAdapter(tenant, client, secret string) (*msgraphsdk.GraphRequestAdapt
[]string{"https://graph.microsoft.com/.default"},
)
if err != nil {
return nil, err
return nil, errors.Wrap(err, "creating new AzureIdentityAuthentication")
}
clientOptions := msgraphsdk.GetDefaultClientOptions()

View File

@ -84,14 +84,14 @@ func NewGraphConnector(ctx context.Context, acct account.Account) (*GraphConnect
aService, err := gc.createService(false)
if err != nil {
return nil, err
return nil, errors.Wrap(err, "creating service connection")
}
gc.graphService = *aService
err = gc.setTenantUsers(ctx)
if err != nil {
return nil, err
return nil, errors.Wrap(err, "retrieving tenant user list")
}
return &gc, nil
@ -114,7 +114,7 @@ func (gc *GraphConnector) createService(shouldFailFast bool) (*graphService, err
failFast: shouldFailFast,
}
return &connector, err
return &connector, nil
}
func (gs *graphService) EnableFailFast() {
@ -149,7 +149,7 @@ func (gc *GraphConnector) setTenantUsers(ctx context.Context) error {
callbackFunc := func(userItem interface{}) bool {
user, ok := userItem.(models.Userable)
if !ok {
err = support.WrapAndAppend(gc.graphService.adapter.GetBaseUrl(), errors.New("user iteration failure"), err)
err = support.WrapAndAppend(gc.graphService.adapter.GetBaseUrl(), errors.New("received non-User on iteration"), err)
return true
}
@ -216,7 +216,7 @@ func (gc *GraphConnector) ExchangeDataCollection(
) ([]data.Collection, error) {
eb, err := selector.ToExchangeBackup()
if err != nil {
return nil, errors.Wrap(err, "exchangeDataCollection: unable to parse selector")
return nil, errors.Wrap(err, "exchangeDataCollection: parsing selector")
}
var (
@ -386,7 +386,7 @@ func (gc *GraphConnector) DataCollections(ctx context.Context, sels selectors.Se
case selectors.ServiceOneDrive:
return gc.OneDriveDataCollections(ctx, sels)
default:
return nil, errors.Errorf("Service %s not supported", sels)
return nil, errors.Errorf("service %s not supported", sels)
}
}
@ -398,7 +398,7 @@ func (gc *GraphConnector) OneDriveDataCollections(
) ([]data.Collection, error) {
odb, err := selector.ToOneDriveBackup()
if err != nil {
return nil, errors.Wrap(err, "collecting onedrive data")
return nil, errors.Wrap(err, "oneDriveDataCollection: parsing selector")
}
collections := []data.Collection{}

View File

@ -4,6 +4,7 @@ import (
absser "github.com/microsoft/kiota-abstractions-go/serialization"
js "github.com/microsoft/kiota-serialization-json-go"
"github.com/microsoftgraph/msgraph-sdk-go/models"
"github.com/pkg/errors"
)
// CreateFromBytes helper function to initialize m365 object form bytes.
@ -11,12 +12,12 @@ import (
func CreateFromBytes(bytes []byte, createFunc absser.ParsableFactory) (absser.Parsable, error) {
parseNode, err := js.NewJsonParseNodeFactory().GetRootParseNode("application/json", bytes)
if err != nil {
return nil, err
return nil, errors.Wrap(err, "parsing byte array into m365 object")
}
anObject, err := parseNode.GetObjectValue(createFunc)
if err != nil {
return nil, err
return nil, errors.Wrap(err, "parsing m365 object factory")
}
return anObject, nil
@ -26,7 +27,7 @@ func CreateFromBytes(bytes []byte, createFunc absser.ParsableFactory) (absser.Pa
func CreateMessageFromBytes(bytes []byte) (models.Messageable, error) {
aMessage, err := CreateFromBytes(bytes, models.CreateMessageFromDiscriminatorValue)
if err != nil {
return nil, err
return nil, errors.Wrap(err, "creating m365 exchange.Mail object from provided bytes")
}
message := aMessage.(models.Messageable)
@ -39,7 +40,7 @@ func CreateMessageFromBytes(bytes []byte) (models.Messageable, error) {
func CreateContactFromBytes(bytes []byte) (models.Contactable, error) {
parsable, err := CreateFromBytes(bytes, models.CreateContactFromDiscriminatorValue)
if err != nil {
return nil, err
return nil, errors.Wrap(err, "creating m365 exchange.Contact object from provided bytes")
}
contact := parsable.(models.Contactable)
@ -51,7 +52,7 @@ func CreateContactFromBytes(bytes []byte) (models.Contactable, error) {
func CreateEventFromBytes(bytes []byte) (models.Eventable, error) {
parsable, err := CreateFromBytes(bytes, models.CreateEventFromDiscriminatorValue)
if err != nil {
return nil, err
return nil, errors.Wrap(err, "creating m365 exchange.Event object from provided bytes")
}
event := parsable.(models.Eventable)

View File

@ -90,7 +90,7 @@ func SetEventMessageRequest(orig models.Messageable, adtl map[string]any) (model
eventMessage, err := setEventRequestableFields(message, additional)
if err != nil {
return nil, err
return nil, errors.Wrap(err, "unable to set all fields for eventMessageRequestable")
}
return eventMessage, nil
@ -275,7 +275,7 @@ func SetAdditionalDataToEventMessage(
value, err := node.GetStringValue()
if err != nil {
return nil, err
return nil, errors.Wrapf(err, "could not parse string value for %s", key)
}
switch key {
@ -304,7 +304,7 @@ func SetAdditionalDataToEventMessage(
value, err := node.GetStringValue()
if err != nil {
return nil, err
return nil, errors.Wrapf(err, "could not parse string value for %s", key)
}
switch key {
@ -333,7 +333,7 @@ func SetAdditionalDataToEventMessage(
value, err := node.GetStringValue()
if err != nil {
return nil, errors.New("map[string]*JsonParseNode conversion failure")
return nil, errors.Wrapf(err, "could not parse string value for key %s", key)
}
switch key {