Update ec_decoder.go

This commit is contained in:
chrislu
2025-08-13 01:41:27 -07:00
parent 30a88615ba
commit e44a6189fa

View File

@@ -16,22 +16,26 @@ import (
// write .idx file from .ecx and .ecj files
func WriteIdxFileFromEcIndex(baseFileName string) (err error) {
return WriteIdxFileFromEcIndexToTarget(baseFileName, baseFileName)
}
ecxFile, openErr := os.OpenFile(baseFileName+".ecx", os.O_RDONLY, 0644)
// WriteIdxFileFromEcIndexToTarget writes .idx file from .ecx and .ecj files with separate source and target
func WriteIdxFileFromEcIndexToTarget(sourceBaseName, targetBaseName string) (err error) {
ecxFile, openErr := os.OpenFile(sourceBaseName+".ecx", os.O_RDONLY, 0644)
if openErr != nil {
return fmt.Errorf("cannot open ec index %s.ecx: %v", baseFileName, openErr)
return fmt.Errorf("cannot open ec index %s.ecx: %v", sourceBaseName, openErr)
}
defer ecxFile.Close()
idxFile, openErr := os.OpenFile(baseFileName+".idx", os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0644)
idxFile, openErr := os.OpenFile(targetBaseName+".idx", os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0644)
if openErr != nil {
return fmt.Errorf("cannot open %s.idx: %v", baseFileName, openErr)
return fmt.Errorf("cannot open %s.idx: %v", targetBaseName, openErr)
}
defer idxFile.Close()
io.Copy(idxFile, ecxFile)
err = iterateEcjFile(baseFileName, func(key types.NeedleId) error {
err = iterateEcjFile(sourceBaseName, func(key types.NeedleId) error {
bytes := needle_map.ToBytes(key, types.Offset{}, types.TombstoneFileSize)
idxFile.Write(bytes)
@@ -224,7 +228,8 @@ func WriteDatFileAndVacuum(baseFileName string, shardFileNames []string) error {
}
tempDatFile := baseFileName + ".tmp.dat"
err = WriteDatFile(tempDatFile, datFileSize, shardFileNames)
tempBaseName := baseFileName + ".tmp" // WriteDatFile expects base name without .dat extension
err = WriteDatFile(tempBaseName, datFileSize, shardFileNames)
if err != nil {
return fmt.Errorf("failed to reconstruct volume with WriteDatFile: %w", err)
}
@@ -232,7 +237,7 @@ func WriteDatFileAndVacuum(baseFileName string, shardFileNames []string) error {
// Step 2: Create index file with deleted entries marked (use actual .ecx/.ecj files directly)
tempIdxFile := baseFileName + ".tmp.idx"
err = WriteIdxFileFromEcIndex(baseFileName) // Use actual .ecx/.ecj files directly
err = WriteIdxFileFromEcIndexToTarget(baseFileName, tempBaseName) // Read from actual files, create temp idx
if err != nil {
return fmt.Errorf("failed to create index file: %w", err)
}