aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorn-peugnet <n.peugnet@free.fr>2021-10-19 16:51:14 +0200
committern-peugnet <n.peugnet@free.fr>2021-10-19 16:51:14 +0200
commit2c6a08c5c3b0f7346fbfa3e2ee86b248ef6d78f7 (patch)
tree5dfc3701c042d16e13c6aee0ad9b1879f6cf566a
parent157e94222bc72ebc27a05f694ca8e9558435ab5a (diff)
downloaddna-backup-2c6a08c5c3b0f7346fbfa3e2ee86b248ef6d78f7.tar.gz
dna-backup-2c6a08c5c3b0f7346fbfa3e2ee86b248ef6d78f7.zip
try to make exports faster
-rw-r--r--dna/drive.go2
-rw-r--r--repo/export.go34
2 files changed, 22 insertions, 14 deletions
diff --git a/dna/drive.go b/dna/drive.go
index 0fc5b03..fd9ac06 100644
--- a/dna/drive.go
+++ b/dna/drive.go
@@ -64,7 +64,7 @@ func New(
os.MkdirAll(destination, 0755)
for i := range pools {
path := filepath.Join(destination, fmt.Sprintf("%02d", i))
- file, err := os.OpenFile(path, os.O_RDWR|os.O_CREATE, 0644)
+ file, err := os.OpenFile(path, os.O_RDWR|os.O_APPEND|os.O_CREATE, 0644)
if err != nil {
logger.Panic(err)
}
diff --git a/repo/export.go b/repo/export.go
index 7597ce4..2e23a93 100644
--- a/repo/export.go
+++ b/repo/export.go
@@ -32,31 +32,39 @@ func (r *Repo) Export(exporter export.Exporter) {
var err error
end := make(chan bool)
input := exporter.ExportVersion(end)
- if len(chunks[i]) > 0 {
- compressed := r.chunkWriteWrapper(input.Chunks)
- for _, c := range chunks[i] {
- _, err := io.Copy(compressed, c.Reader())
- if err != nil {
- logger.Error(err)
- }
- }
- compressed.Close()
- }
- input.Chunks.Close()
+ go exportChunks(chunks[i], r.chunkWriteWrapper, input.Chunks)
readDelta(r.versions[i], recipeName, utils.NopReadWrapper, func(rc io.ReadCloser) {
_, err = io.Copy(input.Recipe, rc)
if err != nil {
logger.Error("load recipe ", err)
}
- input.Recipe.Close()
+ if err = input.Recipe.Close(); err != nil {
+ logger.Error("export recipe ", err)
+ }
})
readDelta(r.versions[i], filesName, utils.NopReadWrapper, func(rc io.ReadCloser) {
_, err = io.Copy(input.Files, rc)
if err != nil {
logger.Error("load files ", err)
}
- input.Files.Close()
+ if err = input.Files.Close(); err != nil {
+ logger.Error("export files ", err)
+ }
})
<-end
}
}
+
+func exportChunks(chunks []IdentifiedChunk, wrapper utils.WriteWrapper, input io.WriteCloser) {
+ if len(chunks) > 0 {
+ compressed := wrapper(input)
+ for _, c := range chunks {
+ _, err := io.Copy(compressed, c.Reader())
+ if err != nil {
+ logger.Error(err)
+ }
+ }
+ compressed.Close()
+ }
+ input.Close()
+}