예제 #1
0
        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);
        }
예제 #2
0
파일: Scanner.cs 프로젝트: hsxian/HBaseNet
        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);
        }
예제 #3
0
파일: Scanner.cs 프로젝트: hsxian/HBaseNet
 public Scanner(IStandardClient client, ScanCall rpc)
 {
     _logger   = HBaseConfig.Instance.LoggerFactory?.CreateLogger <Scanner>() ?? new DebugLogger <Scanner>();
     _client   = client;
     _rpc      = rpc;
     _startRow = _rpc.StartRow;
 }
예제 #4
0
        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}");
        }
예제 #5
0
        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}");
        }
예제 #6
0
 public IScanner Scan(ScanCall scan, CancellationToken?token = null)
 {
     return(new Scanner(this, scan));
 }