add zip and parity stuff
This commit is contained in:
53
partitioner/partitioner.go
Normal file
53
partitioner/partitioner.go
Normal file
@ -0,0 +1,53 @@
|
||||
package partitioner
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"forever-files/db"
|
||||
"forever-files/types"
|
||||
"github.com/dustin/go-humanize"
|
||||
)
|
||||
|
||||
func CalculatePartitions(store db.DB, targetSize int64) (partitions [][]types.FileMetadata, err error) {
|
||||
totalSize, err := store.GetTotalSize()
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("error getting total size: %w", err)
|
||||
}
|
||||
if targetSize <= 0 {
|
||||
targetSize = totalSize / 2
|
||||
}
|
||||
fmt.Printf("Total Size: %v\n", totalSize)
|
||||
fmt.Printf("Target Size: %v\n", targetSize)
|
||||
|
||||
files, err := store.GetFiles()
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("error getting files: %w", err)
|
||||
}
|
||||
partitions = make([][]types.FileMetadata, 0)
|
||||
partitionSize := int64(0)
|
||||
partitionFiles := make([]types.FileMetadata, 0)
|
||||
leftOverFiles := make([]types.FileMetadata, 0)
|
||||
leftOverSize := int64(0)
|
||||
for _, file := range files {
|
||||
if partitionSize+file.Size > targetSize {
|
||||
fmt.Printf("Partition Size: %v\n", humanize.Bytes(uint64(partitionSize)))
|
||||
partitions = append(partitions, partitionFiles)
|
||||
partitionFiles = make([]types.FileMetadata, 0)
|
||||
partitionSize = 0
|
||||
}
|
||||
if partitionSize < targetSize && partitionSize+file.Size < targetSize {
|
||||
partitionFiles = append(partitionFiles, file)
|
||||
partitionSize += file.Size
|
||||
} else {
|
||||
leftOverFiles = append(leftOverFiles, file)
|
||||
leftOverSize += file.Size
|
||||
}
|
||||
}
|
||||
|
||||
for _, partition := range partitions {
|
||||
fmt.Printf("Partition File Count: %v\n", len(partition))
|
||||
}
|
||||
fmt.Printf("Left Over File Count: %v\n", len(leftOverFiles))
|
||||
fmt.Printf("Left Over Size: %v\n", humanize.Bytes(uint64(leftOverSize)))
|
||||
|
||||
return partitions, nil
|
||||
}
|
Reference in New Issue
Block a user