diff options
| author | Chris Lu <chris.lu@gmail.com> | 2018-10-15 21:44:41 -0700 |
|---|---|---|
| committer | Chris Lu <chris.lu@gmail.com> | 2018-10-15 21:44:41 -0700 |
| commit | eec951cad2b276afb1a416152b049e380706ebed (patch) | |
| tree | 6ef348a3db597b0808a3f34bee2887f0d3dbcabd /weed/operation/sync_volume.go | |
| parent | f8b2d3cacc8d8724a7082c9587e8157a3db64a7b (diff) | |
| download | seaweedfs-eec951cad2b276afb1a416152b049e380706ebed.tar.xz seaweedfs-eec951cad2b276afb1a416152b049e380706ebed.zip | |
migrate volume sync to gRpc
Diffstat (limited to 'weed/operation/sync_volume.go')
| -rw-r--r-- | weed/operation/sync_volume.go | 35 |
1 files changed, 21 insertions, 14 deletions
diff --git a/weed/operation/sync_volume.go b/weed/operation/sync_volume.go index 390d5b504..662184656 100644 --- a/weed/operation/sync_volume.go +++ b/weed/operation/sync_volume.go @@ -2,7 +2,6 @@ package operation import ( "context" - "net/url" "github.com/chrislusf/seaweedfs/weed/pb/volume_server_pb" . "github.com/chrislusf/seaweedfs/weed/storage/types" @@ -21,18 +20,26 @@ func GetVolumeSyncStatus(server string, vid uint32) (resp *volume_server_pb.Volu return } -func GetVolumeIdxEntries(server string, vid string, eachEntryFn func(key NeedleId, offset Offset, size uint32)) error { - values := make(url.Values) - values.Add("volume", vid) - line := make([]byte, NeedleEntrySize) - err := util.GetBufferStream("http://"+server+"/admin/sync/index", values, line, func(bytes []byte) { - key := BytesToNeedleId(line[:NeedleIdSize]) - offset := BytesToOffset(line[NeedleIdSize : NeedleIdSize+OffsetSize]) - size := util.BytesToUint32(line[NeedleIdSize+OffsetSize : NeedleIdSize+OffsetSize+SizeSize]) - eachEntryFn(key, offset, size) +func GetVolumeIdxEntries(server string, vid uint32, eachEntryFn func(key NeedleId, offset Offset, size uint32)) error { + + return WithVolumeServerClient(server, func(client volume_server_pb.VolumeServerClient) error { + resp, err := client.VolumeSyncIndex(context.Background(), &volume_server_pb.VolumeSyncIndexRequest{ + VolumdId: vid, + }) + if err != nil { + return err + } + + dataSize := len(resp.IndexFileContent) + + for idx := 0; idx+NeedleEntrySize <= dataSize; idx += NeedleEntrySize { + line := resp.IndexFileContent[idx : idx+NeedleEntrySize] + key := BytesToNeedleId(line[:NeedleIdSize]) + offset := BytesToOffset(line[NeedleIdSize : NeedleIdSize+OffsetSize]) + size := util.BytesToUint32(line[NeedleIdSize+OffsetSize : NeedleIdSize+OffsetSize+SizeSize]) + eachEntryFn(key, offset, size) + } + + return nil }) - if err != nil { - return err - } - return nil } |
