lib/backup/actions/backup.go:
// 118 行 partsToCopy := common.PartsDifference(srcParts, dstParts) //要上传的文件列表 originCopyParts := common.PartsIntersect(originParts, partsToCopy) // 旧的备份地址中的文件列表,与要上传的文件列表取交集。 // 交集的文件列表,只要调用对象存储的云端COPY能力就行,这样就节省了带宽,不用浪费再上传一次。 // 对于云端对象存储而言,同一个文件复制多份,就是增加一个引用计数,而不必真正的产生拷贝。因此对象存储中的大量相同文件并不浪费空间。 copySize := getPartsSize(originCopyParts) if len(originCopyParts) > 0 { logger.Infof("server-side copying %d parts from origin %s to dst %s", len(originCopyParts), origin, dst) copiedParts := uint64(0) err = runParallel(concurrency, originCopyParts, func(p common.Part) error { logger.Infof("server-side copying %s from origin %s to dst %s", &p, origin, dst) // 使用 CopyPart 的方法来在云端复制文件 if err := dst.CopyPart(origin, p); err != nil { return fmt.Errorf("cannot copy %s from origin %s to dst %s: %w", &p, origin, dst, err) } atomic.AddUint64(&copiedParts, 1) return nil }, func(elapsed time.Duration) { n := atomic.LoadUint64(&copiedParts) logger.Infof("server-side copied %d out of %d parts from origin %s to dst %s in %s", n, len(originCopyParts), origin, dst, elapsed) }) if err != nil { return err } }
总结:
-retentionPeriod
指定的时间长度的完整TSDB数据;