diff --git a/weed/pb/filer_pb/filer_pb_helper.go b/weed/pb/filer_pb/filer_pb_helper.go index 361b0f57d..ef216610b 100644 --- a/weed/pb/filer_pb/filer_pb_helper.go +++ b/weed/pb/filer_pb/filer_pb_helper.go @@ -4,7 +4,7 @@ import ( "github.com/chrislusf/seaweedfs/weed/storage/needle" ) -func toFileId(fileIdStr string) (*FileId, error) { +func toFileIdObject(fileIdStr string) (*FileId, error) { t, err := needle.ParseFileIdFromString(fileIdStr) if err != nil { return nil, err @@ -17,33 +17,44 @@ func toFileId(fileIdStr string) (*FileId, error) { } -func (fid *FileId) toFileId() string { +func (fid *FileId) toFileIdString() string { return needle.NewFileId(needle.VolumeId(fid.VolumeId), fid.FileKey, fid.Cookie).String() } func ChunkEquals(this, that *FileChunk) bool { if this.Fid == nil{ - this.Fid, _ = toFileId(this.FileId) + this.Fid, _ = toFileIdObject(this.FileId) } if that.Fid == nil{ - that.Fid, _ = toFileId(that.FileId) + that.Fid, _ = toFileIdObject(that.FileId) } return this.Fid.FileKey == that.Fid.FileKey && this.Fid.VolumeId == that.Fid.VolumeId && this.Fid.Cookie == that.Fid.Cookie } +func (c *FileChunk) GetFileIdString() string { + if c.FileId != "" { + return c.FileId + } + if c.Fid != nil { + c.FileId = c.Fid.toFileIdString() + return c.FileId + } + return "" +} + func BeforeEntrySerialization(chunks []*FileChunk) { for _, chunk := range chunks { if chunk.FileId != "" { - if fid, err := toFileId(chunk.FileId); err == nil { + if fid, err := toFileIdObject(chunk.FileId); err == nil { chunk.Fid = fid chunk.FileId = "" } } if chunk.SourceFileId != "" { - if fid, err := toFileId(chunk.SourceFileId); err == nil { + if fid, err := toFileIdObject(chunk.SourceFileId); err == nil { chunk.SourceFid = fid chunk.SourceFileId = "" } @@ -57,11 +68,11 @@ func AfterEntryDeserialization(chunks []*FileChunk) { for _, chunk := range chunks { if chunk.Fid != nil && chunk.FileId == "" { - chunk.FileId = chunk.Fid.toFileId() + chunk.FileId = chunk.Fid.toFileIdString() } if chunk.SourceFid != nil && chunk.SourceFileId == "" { - chunk.SourceFileId = chunk.SourceFid.toFileId() + chunk.SourceFileId = chunk.SourceFid.toFileIdString() } } diff --git a/weed/pb/filer_pb/filer_pb_helper_test.go b/weed/pb/filer_pb/filer_pb_helper_test.go index 02c7842c9..d4468c011 100644 --- a/weed/pb/filer_pb/filer_pb_helper_test.go +++ b/weed/pb/filer_pb/filer_pb_helper_test.go @@ -9,7 +9,7 @@ import ( func TestFileIdSize(t *testing.T) { fileIdStr := "11745,0293434534cbb9892b" - fid, _ := toFileId(fileIdStr) + fid, _ := toFileIdObject(fileIdStr) bytes, _ := proto.Marshal(fid) println(len(fileIdStr)) diff --git a/weed/shell/command_volume_fix_replication.go b/weed/shell/command_volume_fix_replication.go index 0b3b0363c..4c7a794c0 100644 --- a/weed/shell/command_volume_fix_replication.go +++ b/weed/shell/command_volume_fix_replication.go @@ -64,7 +64,7 @@ func (c *commandVolumeFixReplication) Do(args []string, commandEnv *CommandEnv, replicatedVolumeInfo := make(map[uint32]*master_pb.VolumeInformationMessage) var allLocations []location eachDataNode(resp.TopologyInfo, func(dc string, rack RackId, dn *master_pb.DataNodeInfo) { - loc := newLocation(dc.Id, rack.Id, dn) + loc := newLocation(dc, string(rack), dn) for _, v := range dn.VolumeInfos { if v.ReplicaPlacement > 0 { replicatedVolumeLocations[v.Id] = append(replicatedVolumeLocations[v.Id], loc)