diff --git a/models/bucketSetFiles/bucketSetFiles.go b/models/bucketSetFiles/bucketSetFiles.go index e3b986e..f2e56ed 100644 --- a/models/bucketSetFiles/bucketSetFiles.go +++ b/models/bucketSetFiles/bucketSetFiles.go @@ -70,16 +70,25 @@ func PullFiles(systemInfo *types.System_meta, client *cb.DevClient, bucketSetNam return err } - fileContents, err := client.ReadBucketSetFile(systemInfo.Key, bucketSetName, fileMeta.BucketName, fileMeta.RelativeName) - if err != nil { - return err - } + //the fileMeta structure contains entries for folders. These cause the client.ReadBucketSetFile API call to fail with an error: + // + //[ERROR] Failed to pull all bucket set files. map[error:map[detail:storage: object doesn't exist id:5a65c441-e7f1-47bc-8e07-753ea81dc9e2 + // line:clearblade/bucket_sets/api.go:171 message:storage: object doesn't exist] statusCode:500] + // + //We therefore need to ensure we are dealing with a file (size > 0). + // + //We need to ensure all other fields are not empty to avoid a panic: panic: interface conversion: interface {} is nil, not string + if bucketSetName != "" && fileMeta.BucketName != "" && fileMeta.RelativeName != "" && fileMeta.Size > 0 { + fileContents, err := client.ReadBucketSetFile(systemInfo.Key, bucketSetName, fileMeta.BucketName, fileMeta.RelativeName) + if err != nil { + return err + } - err = writeBucketSetFile(bucketSetName, fileMeta, fileContents) - if err != nil { - return err + err = writeBucketSetFile(bucketSetName, fileMeta, fileContents) + if err != nil { + return err + } } - } return nil diff --git a/push.go b/push.go index 6961dce..f613de9 100644 --- a/push.go +++ b/push.go @@ -2057,7 +2057,15 @@ func updateEdge(systemKey string, edge map[string]interface{}, client *cb.DevCli for columnName, value := range edge { switch strings.ToLower(columnName) { case "system_key", "system_secret", "token", "description", "location", "mac_address", "policy_name", "resolver_func", "sync_edge_tables", "last_seen_version": - originalColumns[columnName] = value + + //We need to make sure there are valid values in the JSON to prevent an error when creating or updating edges: + // + //[[message:Create Edge: Bad type for key 'resolver_func'] statusCode:500] + if value == nil || value == "null" { + originalColumns[columnName] = "" + } else { + originalColumns[columnName] = value + } break default: customColumns[columnName] = value @@ -2547,7 +2555,15 @@ func createEdge(systemKey, name string, edge map[string]interface{}, client *cb. for columnName, value := range edge { switch strings.ToLower(columnName) { case "system_key", "system_secret", "token", "description", "location", "mac_address", "policy_name", "resolver_func", "sync_edge_tables", "last_seen_version": - originalColumns[columnName] = value + //We need to make sure there are valid values in the JSON to prevent an error when creating or updating edges: + // + //[[message:Create Edge: Bad type for key 'resolver_func'] statusCode:500] + if value == nil || value == "null" { + originalColumns[columnName] = "" + } else { + originalColumns[columnName] = value + } + break default: if value != nil { customColumns[columnName] = value