private async Task <RegionInfo> FindRegionInfoForRPC(byte[] table, byte[] key, CancellationToken token) { var result = default(RegionInfo); var searchKey = RegionInfo.CreateRegionSearchKey(table, key); var rpc = new ScanCall(_metaTableName, searchKey, table) { Families = _infoFamily, CloseScanner = true, Reversed = true, NumberOfRows = 1, Info = _metaRegionInfo }; await _metaClient.QueueRPC(rpc); var res = await _metaClient.GetRPCResult(rpc.CallId); if (res?.Msg is ScanResponse scanResponse) { result = RegionInfo.ParseFromScanResponse(scanResponse); } if (result != null) { _logger.LogInformation($"Find region info :{result.Name.ToUtf8String()}, at {result.Host}:{result.Port}"); } return(result); }
private async Task <(ScanResponse, RegionInfo)> Request() { ScanCall rpc; if (IsRegionScannerClosed()) { rpc = new ScanCall(_rpc.Table, _startRow, _rpc.StopRow) { Families = _rpc.Families, Filters = _rpc.Filters, TimeRange = _rpc.TimeRange, MaxVersions = _rpc.MaxVersions, NumberOfRows = _rpc.NumberOfRows, Reversed = _rpc.Reversed }; } else { rpc = new ScanCall(_rpc.Table, _scannerID, _startRow, false) { NumberOfRows = _rpc.NumberOfRows }; } var result = await _client.SendRPCToRegion <ScanResponse>(rpc, CancellationToken); return(result, rpc.Info); }
public Scanner(IStandardClient client, ScanCall rpc) { _logger = HBaseConfig.Instance.LoggerFactory?.CreateLogger <Scanner>() ?? new DebugLogger <Scanner>(); _client = client; _rpc = rpc; _startRow = _rpc.StartRow; }
public async Task ExecScan() { var sc = new ScanCall(Program.Table, "", "g") { // Families = Program.Family, // TimeRange = new TimeRange // { // From = new DateTime(2018, 1, 1).ToUnixU13(), // To = new DateTime(2019, 1, 2).ToUnixU13() // }, NumberOfRows = 100000, }; using var scanner = _client.Scan(sc); var scanResults = new List <Result>(); while (scanner.CanContinueNext) { var per = await scanner.Next(); if (true != per?.Any()) { continue; } scanResults.AddRange(per); } Log.Information($"scan result count:{scanResults.Count}"); }
public async Task ExecScan() { var sc = new ScanCall(Program.Table, "", "g") { // Families = Program.Family, // TimeRange = new TimeRange // { // From = new DateTime(2018, 1, 1).ToUnixU13(), // To = new DateTime(2019, 1, 2).ToUnixU13() // }, NumberOfRows = 100000, }; using var scanner = _client.Scan(sc); var scanResults = new List <Student>(); var sth = Stopwatch.StartNew(); var convertCache = new ConvertCache().BuildCache <Student>(EndianBitConverter.BigEndian); while (scanner.CanContinueNext) { sth.Restart(); var per = await scanner.Next(); var reqSpan = sth.Elapsed; if (true != per?.Any()) { continue; } sth.Restart(); var stus = HBaseConvert.Instance.ConvertToCustom <Student>(per, convertCache); Debug.WriteLine($"scanner count:{per.Count}, elapesd: {reqSpan}, convert elapesad: {sth.Elapsed}."); scanResults.AddRange(stus); } Log.Information($"scan 'student' count:{scanResults.Count}"); }
public IScanner Scan(ScanCall scan, CancellationToken?token = null) { return(new Scanner(this, scan)); }