indigophox commented on code in PR #34817:
URL: https://github.com/apache/arrow/pull/34817#discussion_r1423095132
##########
format/Flight.proto:
##########
@@ -525,3 +525,108 @@ message FlightData {
message PutResult {
bytes app_metadata = 1;
}
+
+/*
+ * EXPERIMENTAL: Union of possible value types for a Session Option to be set
to.
+ */
+message SessionOptionValue {
+ message StringListValue {
+ repeated string values = 1;
+ }
+
+ oneof option_value {
+ string string_value = 1;
+ bool bool_value = 2;
+ sfixed32 int32_value = 3;
+ sfixed64 int64_value = 4;
+ float float_value = 5;
+ double double_value = 6;
+ StringListValue string_list_value = 7;
+ }
+}
+
+/*
+ * EXPERIMENTAL: A request to set session options for an existing or new
(implicit)
+ * server session.
+ *
+ * Sessions are persisted and referenced via RFC 6265 HTTP cookies, canonically
+ * 'arrow_flight_session_id', although implementations may freely choose their
own name.
+ */
+message SetSessionOptionsRequest {
+ map<string, SessionOptionValue> session_options = 1;
+}
+
+/*
+ * EXPERIMENTAL: The results (individually) of setting a set of session
options.
+ */
+message SetSessionOptionsResult {
+ enum Status {
+ // The status of setting the option is unknown. Servers should avoid using
+ // this value (send a NOT_FOUND error if the requested query is
+ // not known). Clients can retry the request.
+ UNSPECIFIED = 0;
+ // The session option setting completed successfully.
+ OK = 1;
+ // The given session option name was an alias for another option name.
+ OK_MAPPED = 2;
+ // The given session option name is invalid.
+ INVALID_NAME = 3;
+ // The session option value is invalid.
+ INVALID_VALUE = 4;
+ // The session option cannot be set.
+ ERROR = 5;
+ }
+
+ message Result {
+ Status status = 1;
+ }
+
+ map<string, Result> results = 1;
+}
+
+/*
+ * EXPERIMENTAL: A request to access the session options for the current
server session.
+ *
+ * The existing session is referenced via a cookie header; it is an error to
make this
+ * request with a missing, invalid, or expired session cookie header.
+ */
+message GetSessionOptionsRequest {
+}
+
+/*
+ * EXPERIMENTAL: The result containing the current server session options.
+ */
+message GetSessionOptionsResult {
+ map<string, SessionOptionValue> session_options = 1;
+}
+
+/*
+ * Request message for the "Close Session" action.
+ *
+ * The exiting session is referenced via a cookie header.
+ */
+message CloseSessionRequest {
+}
Review Comment:
> For the initial session creation, shouldn't it be possible to combine with
the handshake? It is used only for auth, but it could be changed to be used
also if session options and/or auth is to be configured? (otherwise to be
skipped?) (I'm assuming that most people may actually set auth already)
Again a server implementation detail, but any other handler that can touch
the middleware stack can freely tell custom middleware to create a session
which can be used for any other purpose in addition to the session option
functionality. For example with a "common" case of auth headers, a common
session middleware can be used which would then trigger session creation either
on (depending on client behaviour/feature support) (a) an initial
SetSessionOptions call OR (b) any other initial call where the auth headers
would be examined by the auth middleware.
For any implementation that's set up to have an explicit auth RPC, there's
not much we can do to combine that with SetSessionOptions, and that becomes
more a matter of rolling Action(/etc) batching/streaming into Arrow, i.e. a
"DoActions" sort of thing.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]