|
|
@ -1,6 +1,7 @@ |
|
|
|
package filer |
|
|
|
|
|
|
|
import ( |
|
|
|
"math" |
|
|
|
"strings" |
|
|
|
"time" |
|
|
|
|
|
|
@ -129,6 +130,12 @@ func (f *Filer) DeleteChunks(chunks []*filer_pb.FileChunk) { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
func (f *Filer) DeleteChunksNotRecursive(chunks []*filer_pb.FileChunk) { |
|
|
|
for _, chunk := range chunks { |
|
|
|
f.fileIdDeletionQueue.EnQueue(chunk.GetFileIdString()) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
func (f *Filer) deleteChunksIfNotNew(oldEntry, newEntry *Entry) { |
|
|
|
|
|
|
|
if oldEntry == nil { |
|
|
@ -141,14 +148,36 @@ func (f *Filer) deleteChunksIfNotNew(oldEntry, newEntry *Entry) { |
|
|
|
|
|
|
|
var toDelete []*filer_pb.FileChunk |
|
|
|
newChunkIds := make(map[string]bool) |
|
|
|
for _, newChunk := range newEntry.Chunks { |
|
|
|
newDataChunks, newManifestChunks, err := ResolveChunkManifest(f.MasterClient.GetLookupFileIdFunction(), |
|
|
|
newEntry.Chunks, 0, math.MaxInt64) |
|
|
|
if err != nil { |
|
|
|
glog.Errorf("Failed to resolve new entry chunks when delete old entry chunks. new: %s, old: %s", |
|
|
|
newEntry.Chunks, oldEntry.Chunks) |
|
|
|
return |
|
|
|
} |
|
|
|
for _, newChunk := range newDataChunks { |
|
|
|
newChunkIds[newChunk.GetFileIdString()] = true |
|
|
|
} |
|
|
|
for _, newChunk := range newManifestChunks { |
|
|
|
newChunkIds[newChunk.GetFileIdString()] = true |
|
|
|
} |
|
|
|
|
|
|
|
for _, oldChunk := range oldEntry.Chunks { |
|
|
|
oldDataChunks, oldManifestChunks, err := ResolveChunkManifest(f.MasterClient.GetLookupFileIdFunction(), |
|
|
|
oldEntry.Chunks, 0, math.MaxInt64) |
|
|
|
if err != nil { |
|
|
|
glog.Errorf("Failed to resolve old entry chunks when delete old entry chunks. new: %s, old: %s", |
|
|
|
newEntry.Chunks, oldEntry.Chunks) |
|
|
|
return |
|
|
|
} |
|
|
|
for _, oldChunk := range oldDataChunks { |
|
|
|
if _, found := newChunkIds[oldChunk.GetFileIdString()]; !found { |
|
|
|
toDelete = append(toDelete, oldChunk) |
|
|
|
} |
|
|
|
} |
|
|
|
for _, oldChunk := range oldManifestChunks { |
|
|
|
if _, found := newChunkIds[oldChunk.GetFileIdString()]; !found { |
|
|
|
toDelete = append(toDelete, oldChunk) |
|
|
|
} |
|
|
|
} |
|
|
|
f.DeleteChunks(toDelete) |
|
|
|
f.DeleteChunksNotRecursive(toDelete) |
|
|
|
} |