Reverted multithreaded compression due to not wanting to work

Me sad :c
This commit is contained in:
netbenix 2021-11-28 12:33:47 +01:00
parent 675a8dafb3
commit d51cf67997

View file

@ -2,6 +2,7 @@ package Compressor
import ( import (
"archive/tar" "archive/tar"
"bytes"
"compress/flate" "compress/flate"
"compress/gzip" "compress/gzip"
"fmt" "fmt"
@ -14,83 +15,75 @@ import (
"time" "time"
) )
func CreateBakFile(fileName string, folderPath string, destinationPath string) string { func CreateBakFile(fileName string, folderPath string, destinationPath string, backupName string) string {
logger := Logging.DetailedLogger("Compression", "CreateBakFile") logger := Logging.DetailedLogger("Compression", "CreateBakFile")
var buf bytes.Buffer
compress(folderPath, &buf, backupName)
pathToFile := destinationPath + string(os.PathSeparator) + fileName + ".bak" pathToFile := destinationPath + string(os.PathSeparator) + fileName + ".bak"
fileToWrite, err := os.OpenFile(pathToFile, os.O_CREATE|os.O_RDWR, os.FileMode(600)) fileToWrite, err := os.OpenFile(pathToFile, os.O_CREATE|os.O_RDWR, os.FileMode(600))
if err != nil { if err != nil {
logger.Fatal(err) logger.Fatal(err)
} }
compress(fileToWrite, folderPath)
SQL.NewLogEntry(SQL.GetSQLInstance(), uuid.New(), SQL.LogInfo, filepath.Base(folderPath), SQL.SQLStage_Compress, SQL.REMOTE_NONE, "File successfully written.", time.Now()) if _, err := io.Copy(fileToWrite, &buf); err != nil {
fileToWrite.Close() logger.Fatal(err)
return pathToFile }
SQL.NewLogEntry(SQL.GetSQLInstance(), uuid.New(), SQL.LogInfo, backupName, SQL.SQLStage_Compress, SQL.REMOTE_NONE, "File successfully written.", time.Now())
return fileName
} }
func compressFile(targetFile *os.File, file string, fi os.FileInfo, folderPath string) error {
fileWriter, _ := gzip.NewWriterLevel(targetFile, flate.BestCompression) func compress(folderPath string, buf io.Writer, backupName string){
tw := tar.NewWriter(fileWriter) logger := Logging.DetailedLogger("Gzip", "compress")
zr, _ := gzip.NewWriterLevel(buf, flate.BestCompression)
tw := tar.NewWriter(zr)
fmt.Printf("[%s] Start compression...\n", filepath.Base(folderPath))
SQL.NewLogEntry(SQL.GetSQLInstance(), uuid.New(), SQL.LogInfo, backupName, SQL.SQLStage_Compress, SQL.REMOTE_NONE, "Start compression", time.Now())
filepath.Walk(folderPath, func(file string, fi os.FileInfo, err error) error {
header, err := tar.FileInfoHeader(fi, file) header, err := tar.FileInfoHeader(fi, file)
if err != nil{ if err != nil {
return err logger.Fatal(err)
} }
relPath, _ := filepath.Rel(filepath.Dir(folderPath), file) relPath, _ := filepath.Rel(filepath.Dir(folderPath), file)
header.Name = relPath
header.Name = relPath
if err := tw.WriteHeader(header); err != nil { if err := tw.WriteHeader(header); err != nil {
return err logger.Fatal(err)
} }
if !fi.IsDir(){ if !fi.IsDir(){
data, err := os.Open(file) data, err := os.Open(file)
if err != nil { if err != nil {
return err logger.Fatal(err)
} }
fmt.Printf("[%s] Compressing: %s (%d bytes)\n", filepath.Base(folderPath) ,relPath, fi.Size()) fmt.Printf("[%s] Compressing: %s (%d bytes)\n", filepath.Base(folderPath) ,relPath, fi.Size())
if _, err := io.Copy(tw, data); err != nil { if _, err := io.Copy(tw, data); err != nil {
return err
}
}
if err := tw.Close(); err != nil {
return err
}
if err := fileWriter.Close(); err != nil {
return err
}
return nil
}
func compress(targetFile *os.File, folderPath string) {
logger := Logging.DetailedLogger("Gzip", "compress")
fmt.Printf("[%s] Start compression...\n", filepath.Base(folderPath))
SQL.NewLogEntry(SQL.GetSQLInstance(), uuid.New(), SQL.LogInfo, filepath.Base(folderPath), SQL.SQLStage_Compress, SQL.REMOTE_NONE, "Start compression", time.Now())
filepath.Walk(folderPath, func(file string, fi os.FileInfo, err error) error {
//This delay is to ensure the files don't get a sudden "file aleady close" error
time.Sleep(20 * time.Millisecond)
go func() {
err := compressFile(targetFile, file, fi, folderPath)
if err != nil {
logger.Fatal(err) logger.Fatal(err)
} }
}() }
return nil return nil
}) })
//Wait until all file writes all done if err := tw.Close(); err != nil {
time.Sleep(5 * time.Second) logger.Fatal(err)
}
if err := zr.Close(); err != nil {
logger.Fatal(err)
}
fmt.Printf("[%s] Compression Done.\n", filepath.Base(folderPath)) fmt.Printf("[%s] Compression Done.\n", filepath.Base(folderPath))
SQL.NewLogEntry(SQL.GetSQLInstance(), uuid.New(), SQL.LogInfo, filepath.Base(folderPath), SQL.SQLStage_Compress, SQL.REMOTE_NONE, "Compression complete.", time.Now()) SQL.NewLogEntry(SQL.GetSQLInstance(), uuid.New(), SQL.LogInfo, backupName, SQL.SQLStage_Compress, SQL.REMOTE_NONE, "Compression complete.", time.Now())
} }