예제 #1
0
        public override async Task DoPut(
            FlightServerRecordBatchStreamReader requestStream,
            IAsyncStreamWriter <FlightPutResult> responseStream,
            ServerCallContext context
            )
        {
            var newTable = new List <RecordBatch> {
            };
            long numRows = 0;

            await foreach (var batch in requestStream.ReadAllAsync(context.CancellationToken))
            {
                newTable.Add(batch);
                numRows += batch.Length;
            }

            var descriptor = await requestStream.FlightDescriptor;
            var ticket     = DescriptorAsTicket(descriptor);
            var schema     = await requestStream.Schema;

            _flightData.Flights.Add(ticket, new FlightInfo(
                                        schema,
                                        descriptor,
                                        new List <FlightEndpoint> {
                GetEndpoint(ticket, $"http://{context.Host}")
            },
                                        numRows,
                                        -1 // Unknown
                                        ));
            _flightData.Tables.Add(ticket, newTable);

            await responseStream.WriteAsync(new FlightPutResult("Table saved."));
        }
예제 #2
0
        public override async Task DoPut(FlightServerRecordBatchStreamReader requestStream, IAsyncStreamWriter <FlightPutResult> responseStream, ServerCallContext context)
        {
            var flightDescriptor = await requestStream.FlightDescriptor;

            if (!_flightStore.Flights.TryGetValue(flightDescriptor, out var flightHolder))
            {
                flightHolder = new FlightHolder(flightDescriptor, await requestStream.Schema, $"http://{context.Host}");
                _flightStore.Flights.Add(flightDescriptor, flightHolder);
            }

            while (await requestStream.MoveNext())
            {
                flightHolder.AddBatch(new RecordBatchWithMetadata(requestStream.Current, requestStream.ApplicationMetadata.FirstOrDefault()));
                await responseStream.WriteAsync(FlightPutResult.Empty);
            }
        }
 public override async Task DoPut(IAsyncStreamReader <FlightData> requestStream, IServerStreamWriter <Protocol.PutResult> responseStream, ServerCallContext context)
 {
     var readStream  = new FlightServerRecordBatchStreamReader(requestStream);
     var writeStream = new StreamWriter <FlightPutResult, Protocol.PutResult>(responseStream, putResult => putResult.ToProtocol());
     await _flightServer.DoPut(readStream, writeStream, context).ConfigureAwait(false);
 }