MCPcopy
hub / github.com/lxc/incus / DownloadAllFiles

Method DownloadAllFiles

internal/server/storage/s3/transfer_manager.go:44–110  ·  view source on GitHub ↗

DownloadAllFiles downloads all files from a bucket and writes them to a tar writer.

(bucketName string, tarWriter *instancewriter.InstanceTarWriter)

Source from the content-addressed store, hash-verified

42
43// DownloadAllFiles downloads all files from a bucket and writes them to a tar writer.
44func (t TransferManager) DownloadAllFiles(bucketName string, tarWriter *instancewriter.InstanceTarWriter) error {
45 logger.Debugf("Downloading all files from bucket %s", bucketName)
46 logger.Debugf("Endpoint: %s", t.getEndpoint())
47
48 s3Client, err := t.getS3Client()
49 if err != nil {
50 return err
51 }
52
53 ctx, cancel := context.WithCancel(context.TODO())
54 defer cancel()
55
56 paginator := s3.NewListObjectsV2Paginator(s3Client, &s3.ListObjectsV2Input{
57 Bucket: aws.String(bucketName),
58 })
59
60 for paginator.HasMorePages() {
61 page, err := paginator.NextPage(ctx)
62 if err != nil {
63 logger.Errorf("Failed to list objects: %v", err)
64 return err
65 }
66
67 for _, obj := range page.Contents {
68 key := aws.ToString(obj.Key)
69
70 // Skip directories because they are part of the key of an actual file
71 if strings.HasSuffix(key, "/") {
72 continue
73 }
74
75 out, err := s3Client.GetObject(ctx, &s3.GetObjectInput{
76 Bucket: aws.String(bucketName),
77 Key: aws.String(key),
78 })
79 if err != nil {
80 logger.Errorf("Failed to get object: %v", err)
81 return err
82 }
83
84 fi := instancewriter.FileInfo{
85 FileName: fmt.Sprintf("backup/bucket/%s", key),
86 FileSize: aws.ToInt64(obj.Size),
87 FileMode: 0o600,
88 FileModTime: time.Now(),
89 }
90
91 logger.Debugf("Writing file %s to tar writer", key)
92 logger.Debugf("File size: %d", fi.FileSize)
93
94 err = tarWriter.WriteFileFromReader(out.Body, &fi)
95 if err != nil {
96 logger.Errorf("Failed to write file to tar writer: %v", err)
97 _ = out.Body.Close()
98 return err
99 }
100
101 err = out.Body.Close()

Callers 1

BackupBucketMethod · 0.95

Calls 7

getEndpointMethod · 0.95
getS3ClientMethod · 0.95
DebugfFunction · 0.92
ErrorfFunction · 0.92
StringMethod · 0.65
WriteFileFromReaderMethod · 0.65
CloseMethod · 0.65

Tested by

no test coverage detected