forked from apache/arrow
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
apacheGH-40690: [C#][FlightRPC] Add do_exchange csharp implementation (…
…apache#40691) ### Rationale for this change This is a draft implementation of DoExchange. A simple usage demo is in FlightTests.cs and TestFlightServer.cs. I've tried to share the implementation with DoGet/DoPut as much as possible. ### What changes are included in this PR? - FlightServer.cs and related FlightServerImplementation.cs - FlightClient.cs with (new) FlightRecordBatchExchangeCall.cs wrapper call. ### Are these changes tested? Yes, tests are added in FlightTest.cs and TestFlightServer.cs I've tested locally with the C++ implementation. ### Are there any user-facing changes? No and the DoExchange documentation is already present * GitHub Issue: apache#40690 Lead-authored-by: Marco Malagoli <[email protected]> Co-authored-by: qmmk <[email protected]> Signed-off-by: Curt Hagenlocher <[email protected]>
- Loading branch information
Showing
6 changed files
with
182 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
93 changes: 93 additions & 0 deletions
93
csharp/src/Apache.Arrow.Flight/Client/FlightRecordBatchExchangeCall.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,93 @@ | ||
// Licensed to the Apache Software Foundation (ASF) under one or more | ||
// contributor license agreements. See the NOTICE file distributed with | ||
// this work for additional information regarding copyright ownership. | ||
// The ASF licenses this file to You under the Apache License, Version 2.0 | ||
// (the "License"); you may not use this file except in compliance with | ||
// the License. You may obtain a copy of the License at | ||
// | ||
// http://www.apache.org/licenses/LICENSE-2.0 | ||
// | ||
// Unless required by applicable law or agreed to in writing, software | ||
// distributed under the License is distributed on an "AS IS" BASIS, | ||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
// See the License for the specific language governing permissions and | ||
// limitations under the License. | ||
|
||
using System; | ||
using Grpc.Core; | ||
using System.Threading.Tasks; | ||
|
||
namespace Apache.Arrow.Flight.Client | ||
{ | ||
public class FlightRecordBatchExchangeCall : IDisposable | ||
{ | ||
private readonly Func<Status> _getStatusFunc; | ||
private readonly Func<Metadata> _getTrailersFunc; | ||
private readonly Action _disposeAction; | ||
|
||
internal FlightRecordBatchExchangeCall( | ||
FlightClientRecordBatchStreamWriter requestStream, | ||
FlightClientRecordBatchStreamReader responseStream, | ||
Task<Metadata> responseHeadersAsync, | ||
Func<Status> getStatusFunc, | ||
Func<Metadata> getTrailersFunc, | ||
Action disposeAction) | ||
{ | ||
RequestStream = requestStream; | ||
ResponseStream = responseStream; | ||
ResponseHeadersAsync = responseHeadersAsync; | ||
_getStatusFunc = getStatusFunc; | ||
_getTrailersFunc = getTrailersFunc; | ||
_disposeAction = disposeAction; | ||
} | ||
|
||
/// <summary> | ||
/// Async stream to read streaming responses. | ||
/// </summary> | ||
public FlightClientRecordBatchStreamReader ResponseStream { get; } | ||
|
||
/// <summary> | ||
/// Async stream to send streaming requests. | ||
/// </summary> | ||
public FlightClientRecordBatchStreamWriter RequestStream { get; } | ||
|
||
/// <summary> | ||
/// Asynchronous access to response headers. | ||
/// </summary> | ||
public Task<Metadata> ResponseHeadersAsync { get; } | ||
|
||
/// <summary> | ||
/// Provides means to cleanup after the call. If the call has already finished normally | ||
/// (response stream has been fully read), doesn't do anything. Otherwise, requests | ||
/// cancellation of the call which should terminate all pending async operations | ||
/// associated with the call. As a result, all resources being used by the call should | ||
/// be released eventually. | ||
/// </summary> | ||
/// <remarks> | ||
/// Normally, there is no need for you to dispose the call unless you want to utilize | ||
/// the "Cancel" semantics of invoking Dispose. | ||
/// </remarks> | ||
public void Dispose() | ||
{ | ||
_disposeAction(); | ||
} | ||
|
||
/// <summary> | ||
/// Gets the call status if the call has already finished. Throws InvalidOperationException otherwise. | ||
/// </summary> | ||
/// <returns></returns> | ||
public Status GetStatus() | ||
{ | ||
return _getStatusFunc(); | ||
} | ||
|
||
/// <summary> | ||
/// Gets the call trailing metadata if the call has already finished. Throws InvalidOperationException otherwise. | ||
/// </summary> | ||
/// <returns></returns> | ||
public Metadata GetTrailers() | ||
{ | ||
return _getTrailersFunc(); | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters