aboutsummaryrefslogtreecommitdiff
path: root/weed/command
diff options
context:
space:
mode:
authorChris Lu <chris.lu@uber.com>2019-03-25 09:16:12 -0700
committerChris Lu <chris.lu@uber.com>2019-03-25 09:16:12 -0700
commit70815e91249f481b71ca1fbca14ff41430e42681 (patch)
tree3a476da560702cc9249e15a09eff0cc777ebca63 /weed/command
parenteaa42c3865f65153d12fc8e9b63bdf45b13ea9c3 (diff)
downloadseaweedfs-70815e91249f481b71ca1fbca14ff41430e42681.tar.xz
seaweedfs-70815e91249f481b71ca1fbca14ff41430e42681.zip
WIP
Diffstat (limited to 'weed/command')
-rw-r--r--weed/command/backup.go27
1 files changed, 26 insertions, 1 deletions
diff --git a/weed/command/backup.go b/weed/command/backup.go
index 86391f9c4..9c0bcbc52 100644
--- a/weed/command/backup.go
+++ b/weed/command/backup.go
@@ -88,7 +88,32 @@ func runBackup(cmd *Command, args []string) bool {
return true
}
- if err := v.Synchronize(volumeServer, grpcDialOption); err != nil {
+ if v.SuperBlock.CompactRevision < uint16(stats.CompactRevision) {
+ if err = v.Compact(0); err != nil {
+ fmt.Printf("Compact Volume before synchronizing %v\n", err)
+ return true
+ }
+ if err = v.CommitCompact(); err != nil {
+ fmt.Printf("Commit Compact before synchronizing %v\n", err)
+ return true
+ }
+ v.SuperBlock.CompactRevision = uint16(stats.CompactRevision)
+ v.DataFile().WriteAt(v.SuperBlock.Bytes(),0)
+ }
+
+ if uint64(v.Size()) > stats.TailOffset {
+ // remove the old data
+ v.Destroy()
+ // recreate an empty volume
+ v, err = storage.NewVolume(*s.dir, *s.collection, vid, storage.NeedleMapInMemory, replication, ttl, 0)
+ if err != nil {
+ fmt.Printf("Error creating or reading from volume %d: %v\n", vid, err)
+ return true
+ }
+ }
+ defer v.Close()
+
+ if err := v.Follow(volumeServer, grpcDialOption); err != nil {
fmt.Printf("Error synchronizing volume %d: %v\n", vid, err)
return true
}