GC: Tasklist removed from packages (#440)

Tasklist struct removed from code base
This commit is contained in:
Danny 2022-07-29 08:32:58 -04:00 committed by GitHub
parent 9ea0409125
commit 9eb6a5dd0c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 14 additions and 66 deletions

View File

@ -67,11 +67,9 @@ func (eoc *Collection) PopulateCollection(newData *Stream) {
eoc.data <- newData eoc.data <- newData
} }
// NOTE: Refactor has not happened moving into folders
// populateFromTaskList async call to fill DataCollection via channel implementation // populateFromTaskList async call to fill DataCollection via channel implementation
func PopulateFromTaskList( func PopulateFromCollection(
ctx context.Context, ctx context.Context,
tasklist support.TaskList,
service graph.Service, service graph.Service,
collections map[string]*Collection, collections map[string]*Collection,
statusChannel chan<- *support.ConnectorOperationStatus, statusChannel chan<- *support.ConnectorOperationStatus,
@ -80,18 +78,9 @@ func PopulateFromTaskList(
var attemptedItems, success int var attemptedItems, success int
objectWriter := kw.NewJsonSerializationWriter() objectWriter := kw.NewJsonSerializationWriter()
//Todo this has to return all the errors in the status for _, edc := range collections {
for aFolder, tasks := range tasklist {
// Get the same folder
edc := collections[aFolder]
if edc == nil {
for _, task := range tasks {
errs = support.WrapAndAppend(task, errors.New("unable to query: collection not found during populateFromTaskList"), errs)
}
continue
}
for _, task := range tasks { for _, task := range edc.jobs {
response, err := service.Client().UsersById(edc.user).MessagesById(task).Get() response, err := service.Client().UsersById(edc.user).MessagesById(task).Get()
if err != nil { if err != nil {
details := support.ConnectorStackErrorTrace(err) details := support.ConnectorStackErrorTrace(err)
@ -109,10 +98,10 @@ func PopulateFromTaskList(
} }
} }
close(edc.data) close(edc.data)
attemptedItems += len(tasks) attemptedItems += len(edc.jobs)
} }
status := support.CreateStatus(ctx, support.Backup, attemptedItems, success, len(tasklist), errs) status := support.CreateStatus(ctx, support.Backup, attemptedItems, success, len(collections), errs)
logger.Ctx(ctx).Debug(status.String()) logger.Ctx(ctx).Debug(status.String())
statusChannel <- status statusChannel <- status
} }

View File

@ -319,7 +319,8 @@ func (gc *GraphConnector) serializeMessages(ctx context.Context, user string) (m
if err != nil { if err != nil {
return nil, err return nil, err
} }
tasklist := support.NewTaskList() // map[folder][] messageIds // Create collection of ExchangeDataCollection and create data Holder
collections := make(map[string]*exchange.Collection)
callbackFunc := func(messageItem any) bool { callbackFunc := func(messageItem any) bool {
message, ok := messageItem.(models.Messageable) message, ok := messageItem.(models.Messageable)
if !ok { if !ok {
@ -327,7 +328,12 @@ func (gc *GraphConnector) serializeMessages(ctx context.Context, user string) (m
return true return true
} }
// Saving to messages to list. Indexed by folder // Saving to messages to list. Indexed by folder
tasklist.AddTask(*message.GetParentFolderId(), *message.GetId()) directory := *message.GetParentFolderId()
if _, ok = collections[directory]; !ok {
edc := exchange.NewCollection(user, []string{gc.tenant, user, mailCategory, directory})
collections[directory] = &edc
}
collections[directory].AddJob(*message.GetId())
return true return true
} }
iterateError := pageIterator.Iterate(callbackFunc) iterateError := pageIterator.Iterate(callbackFunc)
@ -337,31 +343,13 @@ func (gc *GraphConnector) serializeMessages(ctx context.Context, user string) (m
if err != nil { if err != nil {
return nil, err // return error if snapshot is incomplete return nil, err // return error if snapshot is incomplete
} }
// Create collection of ExchangeDataCollection and create data Holder
collections := make(map[string]*exchange.Collection)
for aFolder := range tasklist {
// prep the items for handoff to the backup consumer
edc := exchange.NewCollection(user, []string{gc.tenant, user, mailCategory, aFolder})
collections[aFolder] = &edc
}
if len(collections) == 0 {
if len(tasklist) != 0 {
// Below error message needs revising. Assumption is that it should always
// find both items to fetch and a DataCollection to put them in
return nil, support.WrapAndAppend(
user, errors.New("found items but no directories"), err)
}
// return empty collection when no items found
return nil, err
}
service, err := gc.createService(gc.failFast) service, err := gc.createService(gc.failFast)
if err != nil { if err != nil {
return nil, support.WrapAndAppend(user, err, err) return nil, support.WrapAndAppend(user, err, err)
} }
// async call to populate // async call to populate
go exchange.PopulateFromTaskList(ctx, tasklist, service, collections, gc.statusCh) go exchange.PopulateFromCollection(ctx, service, collections, gc.statusCh)
gc.incrementAwaitingMessages() gc.incrementAwaitingMessages()
return collections, err return collections, err

View File

@ -6,25 +6,6 @@ import (
"github.com/microsoftgraph/msgraph-sdk-go/models" "github.com/microsoftgraph/msgraph-sdk-go/models"
) )
// TaskList is a a generic map of a list of items with a string index
type TaskList map[string][]string
// NewTaskList constructor for TaskList
func NewTaskList() TaskList {
return make(map[string][]string, 0)
}
// AddTask helper method to ensure that keys and items are created properly
func (tl *TaskList) AddTask(key, value string) {
aMap := *tl
_, isCreated := aMap[key]
if isCreated {
aMap[key] = append(aMap[key], value)
} else {
aMap[key] = []string{value}
}
}
// CreateFromBytes helper function to initialize m365 object form bytes. // CreateFromBytes helper function to initialize m365 object form bytes.
// @param bytes -> source, createFunc -> abstract function for initialization // @param bytes -> source, createFunc -> abstract function for initialization
func CreateFromBytes(bytes []byte, createFunc absser.ParsableFactory) (absser.Parsable, error) { func CreateFromBytes(bytes []byte, createFunc absser.ParsableFactory) (absser.Parsable, error) {

View File

@ -59,13 +59,3 @@ func (suite *DataSupportSuite) TestCreateMessageFromBytes() {
test.checkObject(suite.T(), result) test.checkObject(suite.T(), result)
} }
} }
func (suite *DataSupportSuite) TestDataSupport_TaskList() {
tasks := NewTaskList()
tasks.AddTask("person1", "Go to store")
tasks.AddTask("person1", "drop off mail")
values := tasks["person1"]
suite.Equal(len(values), 2)
nonValues := tasks["unknown"]
suite.Zero(len(nonValues))
}