From 2ef69be7b2f2419302c9edf138a9f148130afbc3 Mon Sep 17 00:00:00 2001 From: Sutou Kouhei Date: Sun, 25 Jun 2023 05:58:55 +0900 Subject: [PATCH] Add CancelFlightInfoRequest --- cpp/src/arrow/flight/client.cc | 4 +- cpp/src/arrow/flight/client.h | 8 +- .../integration_tests/test_integration.cc | 17 +- .../arrow/flight/serialization_internal.cc | 16 + cpp/src/arrow/flight/serialization_internal.h | 4 + cpp/src/arrow/flight/sql/client.h | 4 +- cpp/src/arrow/flight/sql/server.cc | 10 +- cpp/src/arrow/flight/sql/server.h | 4 +- cpp/src/arrow/flight/sql/server_test.cc | 3 +- cpp/src/arrow/flight/types.cc | 42 +- cpp/src/arrow/flight/types.h | 24 + format/Flight.proto | 9 + go/arrow/flight/client.go | 6 +- go/arrow/flight/flightsql/client.go | 4 +- go/arrow/flight/flightsql/client_test.go | 9 +- go/arrow/flight/flightsql/server.go | 17 +- go/arrow/flight/flightsql/server_test.go | 4 +- go/arrow/flight/internal/flight/Flight.pb.go | 529 ++++++++++-------- go/arrow/flight/server.go | 1 + .../internal/flight_integration/scenario.go | 15 +- 20 files changed, 450 insertions(+), 280 deletions(-) diff --git a/cpp/src/arrow/flight/client.cc b/cpp/src/arrow/flight/client.cc index 8692bd0170a9a..0f0727e929dbb 100644 --- a/cpp/src/arrow/flight/client.cc +++ b/cpp/src/arrow/flight/client.cc @@ -570,8 +570,8 @@ Status FlightClient::DoAction(const FlightCallOptions& options, const Action& ac } arrow::Result FlightClient::CancelFlightInfo( - const FlightCallOptions& options, const FlightInfo& info) { - ARROW_ASSIGN_OR_RAISE(auto body, info.SerializeToString()); + const FlightCallOptions& options, const CancelFlightInfoRequest& request) { + ARROW_ASSIGN_OR_RAISE(auto body, request.SerializeToString()); Action action{ActionType::kCancelFlightInfo.type, Buffer::FromString(body)}; ARROW_ASSIGN_OR_RAISE(auto stream, DoAction(options, action)); ARROW_ASSIGN_OR_RAISE(auto result, stream->Next()); diff --git a/cpp/src/arrow/flight/client.h b/cpp/src/arrow/flight/client.h index e450ea99a5759..3db14adad0995 100644 --- a/cpp/src/arrow/flight/client.h +++ b/cpp/src/arrow/flight/client.h @@ -251,12 +251,12 @@ class ARROW_FLIGHT_EXPORT FlightClient { /// CancelFlightInfoResult /// /// \param[in] options Per-RPC options - /// \param[in] info The FlightInfo to be cancelled + /// \param[in] request The CancelFlightInfoRequest /// \return Arrow result with a CancelFlightInfoResult arrow::Result CancelFlightInfo(const FlightCallOptions& options, - const FlightInfo& info); - arrow::Result CancelFlightInfo(const FlightInfo& info) { - return CancelFlightInfo({}, info); + const CancelFlightInfoRequest& request); + arrow::Result CancelFlightInfo(const CancelFlightInfoRequest& request) { + return CancelFlightInfo({}, request); } /// \brief Perform the CloseFlightInfo action diff --git a/cpp/src/arrow/flight/integration_tests/test_integration.cc b/cpp/src/arrow/flight/integration_tests/test_integration.cc index 41b5c70413e81..dfbef0f18c250 100644 --- a/cpp/src/arrow/flight/integration_tests/test_integration.cc +++ b/cpp/src/arrow/flight/integration_tests/test_integration.cc @@ -510,10 +510,10 @@ class ExpirationTimeServer : public FlightServerBase { std::unique_ptr* result_stream) override { std::vector results; if (action.type == ActionType::kCancelFlightInfo.type) { - ARROW_ASSIGN_OR_RAISE(auto info, - FlightInfo::Deserialize(std::string_view(*action.body))); + ARROW_ASSIGN_OR_RAISE(auto request, + CancelFlightInfoRequest::Deserialize(std::string_view(*action.body))); auto cancel_status = CancelStatus::kUnspecified; - for (const auto& endpoint : info->endpoints()) { + for (const auto& endpoint : request.info->endpoints()) { auto index_result = ExtractIndexFromTicket(endpoint.ticket.ticket); if (index_result.ok()) { auto index = *index_result; @@ -710,11 +710,13 @@ class ExpirationTimeCancelFlightInfoScenario : public Scenario { Status RunClient(std::unique_ptr client) override { ARROW_ASSIGN_OR_RAISE(auto info, client->GetFlightInfo(FlightDescriptor::Command("expiration"))); - ARROW_ASSIGN_OR_RAISE(auto cancel_result, client->CancelFlightInfo(*info)); + CancelFlightInfoRequest request{std::move(info)}; + ARROW_ASSIGN_OR_RAISE(auto cancel_result, client->CancelFlightInfo(request)); if (cancel_result.status != CancelStatus::kCancelled) { return Status::Invalid("CancelFlightInfo must return CANCEL_STATUS_CANCELLED: ", cancel_result.ToString()); } + info = std::move(request.info); for (const auto& endpoint : info->endpoints()) { auto reader = client->DoGet(endpoint.ticket); if (reader.ok()) { @@ -1326,10 +1328,11 @@ class FlightSqlScenarioServer : public sql::FlightSqlServerBase { } arrow::Result CancelFlightInfo( - const ServerCallContext& context, const FlightInfo& info) override { - ARROW_RETURN_NOT_OK(AssertEq(1, info.endpoints().size(), + const ServerCallContext& context, const CancelFlightInfoRequest& request) override { + const auto& info = request.info; + ARROW_RETURN_NOT_OK(AssertEq(1, info->endpoints().size(), "Expected 1 endpoint for CancelFlightInfo")); - const FlightEndpoint& endpoint = info.endpoints()[0]; + const auto& endpoint = info->endpoints()[0]; ARROW_ASSIGN_OR_RAISE(auto ticket, sql::StatementQueryTicket::Deserialize(endpoint.ticket.ticket)); ARROW_RETURN_NOT_OK(AssertEq("PLAN HANDLE", ticket.statement_handle, diff --git a/cpp/src/arrow/flight/serialization_internal.cc b/cpp/src/arrow/flight/serialization_internal.cc index 04e76194e4ac3..577451b71d2e2 100644 --- a/cpp/src/arrow/flight/serialization_internal.cc +++ b/cpp/src/arrow/flight/serialization_internal.cc @@ -246,6 +246,16 @@ Status FromProto(const pb::FlightInfo& pb_info, FlightInfo::Data* info) { return Status::OK(); } +// CancelFlightInfoRequest + +Status FromProto(const pb::CancelFlightInfoRequest& pb_request, + CancelFlightInfoRequest* request) { + FlightInfo::Data data; + RETURN_NOT_OK(FromProto(pb_request.info(), &data)); + request->info = std::make_unique(std::move(data)); + return Status::OK(); +} + Status FromProto(const pb::BasicAuth& pb_basic_auth, BasicAuth* basic_auth) { basic_auth->password = pb_basic_auth.password(); basic_auth->username = pb_basic_auth.username(); @@ -287,6 +297,12 @@ Status ToProto(const FlightInfo& info, pb::FlightInfo* pb_info) { return Status::OK(); } +Status ToProto(const CancelFlightInfoRequest& request, + pb::CancelFlightInfoRequest* pb_request) { + RETURN_NOT_OK(ToProto(*request.info, pb_request->mutable_info())); + return Status::OK(); +} + Status ToProto(const SchemaResult& result, pb::SchemaResult* pb_result) { pb_result->set_schema(result.serialized_schema()); return Status::OK(); diff --git a/cpp/src/arrow/flight/serialization_internal.h b/cpp/src/arrow/flight/serialization_internal.h index 48642dd84298e..b0a3491ac261d 100644 --- a/cpp/src/arrow/flight/serialization_internal.h +++ b/cpp/src/arrow/flight/serialization_internal.h @@ -60,6 +60,8 @@ Status FromProto(const pb::FlightEndpoint& pb_endpoint, FlightEndpoint* endpoint Status FromProto(const pb::RenewFlightEndpointRequest& pb_request, RenewFlightEndpointRequest* request); Status FromProto(const pb::FlightInfo& pb_info, FlightInfo::Data* info); +Status FromProto(const pb::CancelFlightInfoRequest& pb_request, + CancelFlightInfoRequest* request); Status FromProto(const pb::SchemaResult& pb_result, std::string* result); Status FromProto(const pb::BasicAuth& pb_basic_auth, BasicAuth* info); @@ -68,6 +70,8 @@ Status ToProto(const FlightEndpoint& endpoint, pb::FlightEndpoint* pb_endpoint); Status ToProto(const RenewFlightEndpointRequest& request, pb::RenewFlightEndpointRequest* pb_request); Status ToProto(const FlightInfo& info, pb::FlightInfo* pb_info); +Status ToProto(const CancelFlightInfoRequest& request, + pb::CancelFlightInfoRequest* pb_request); Status ToProto(const ActionType& type, pb::ActionType* pb_type); Status ToProto(const Action& action, pb::Action* pb_action); Status ToProto(const Result& result, pb::Result* pb_result); diff --git a/cpp/src/arrow/flight/sql/client.h b/cpp/src/arrow/flight/sql/client.h index 9ed43b394593b..f03095cfb7fe5 100644 --- a/cpp/src/arrow/flight/sql/client.h +++ b/cpp/src/arrow/flight/sql/client.h @@ -329,8 +329,8 @@ class ARROW_FLIGHT_SQL_EXPORT FlightSqlClient { /// \param[in] info The FlightInfo to cancel. /// \return Arrow result with a canceled result. ::arrow::Result CancelFlightInfo( - const FlightCallOptions& options, const FlightInfo& info) { - return impl_->CancelFlightInfo(options, info); + const FlightCallOptions& options, const CancelFlightInfoRequest& request) { + return impl_->CancelFlightInfo(options, request); } /// \brief Explicitly cancel a query. diff --git a/cpp/src/arrow/flight/sql/server.cc b/cpp/src/arrow/flight/sql/server.cc index 414965c0266c8..cf7e330c09bed 100644 --- a/cpp/src/arrow/flight/sql/server.cc +++ b/cpp/src/arrow/flight/sql/server.cc @@ -781,8 +781,8 @@ Status FlightSqlServerBase::DoAction(const ServerCallContext& context, std::vector results; if (action.type == ActionType::kCancelFlightInfo.type) { std::string_view body(*action.body); - ARROW_ASSIGN_OR_RAISE(auto info, FlightInfo::Deserialize(body)); - ARROW_ASSIGN_OR_RAISE(auto result, CancelFlightInfo(context, *info)); + ARROW_ASSIGN_OR_RAISE(auto request, CancelFlightInfoRequest::Deserialize(body)); + ARROW_ASSIGN_OR_RAISE(auto result, CancelFlightInfo(context, request)); ARROW_ASSIGN_OR_RAISE(auto packed_result, PackActionResult(std::move(result))); results.push_back(std::move(packed_result)); @@ -1085,13 +1085,15 @@ arrow::Result FlightSqlServerBase::BeginTransactio } arrow::Result FlightSqlServerBase::CancelFlightInfo( - const ServerCallContext& context, const FlightInfo& info) { + const ServerCallContext& context, const CancelFlightInfoRequest& request) { return Status::NotImplemented("CancelFlightInfo not implemented"); } arrow::Result FlightSqlServerBase::CancelQuery( const ServerCallContext& context, const ActionCancelQueryRequest& request) { - ARROW_ASSIGN_OR_RAISE(auto result, CancelFlightInfo(context, *request.info)); + CancelFlightInfoRequest cancel_flight_info_request; + cancel_flight_info_request.info = std::make_unique(*request.info); + ARROW_ASSIGN_OR_RAISE(auto result, CancelFlightInfo(context, cancel_flight_info_request)); return static_cast(result.status); } diff --git a/cpp/src/arrow/flight/sql/server.h b/cpp/src/arrow/flight/sql/server.h index e01f9ba35a1f7..e848225577641 100644 --- a/cpp/src/arrow/flight/sql/server.h +++ b/cpp/src/arrow/flight/sql/server.h @@ -596,10 +596,10 @@ class ARROW_FLIGHT_SQL_EXPORT FlightSqlServerBase : public FlightServerBase { /// \brief Attempt to explicitly cancel a FlightInfo. /// \param[in] context The call context. - /// \param[in] info The FlightInfo to cancel. + /// \param[in] request The CancelFlightInfoRequest. /// \return The cancellation result. virtual arrow::Result CancelFlightInfo( - const ServerCallContext& context, const FlightInfo& info); + const ServerCallContext& context, const CancelFlightInfoRequest& request); /// \brief Attempt to explicitly cancel a query. /// diff --git a/cpp/src/arrow/flight/sql/server_test.cc b/cpp/src/arrow/flight/sql/server_test.cc index 3617c20888bb4..e06736f3a0ddd 100644 --- a/cpp/src/arrow/flight/sql/server_test.cc +++ b/cpp/src/arrow/flight/sql/server_test.cc @@ -763,7 +763,8 @@ TEST_F(TestFlightSqlServer, TestCommandGetSqlInfoNoInfo) { TEST_F(TestFlightSqlServer, CancelFlightInfo) { // Not supported ASSERT_OK_AND_ASSIGN(auto flight_info, sql_client->GetSqlInfo({}, {})); - ASSERT_RAISES(NotImplemented, sql_client->CancelFlightInfo({}, *flight_info)); + CancelFlightInfoRequest request{std::move(flight_info)}; + ASSERT_RAISES(NotImplemented, sql_client->CancelFlightInfo({}, request)); } TEST_F(TestFlightSqlServer, CancelQuery) { diff --git a/cpp/src/arrow/flight/types.cc b/cpp/src/arrow/flight/types.cc index 63f9038cdb64e..7070455f65ad5 100644 --- a/cpp/src/arrow/flight/types.cc +++ b/cpp/src/arrow/flight/types.cc @@ -372,6 +372,44 @@ bool FlightInfo::Equals(const FlightInfo& other) const { data_.ordered == other.data_.ordered; } +std::string CancelFlightInfoRequest::ToString() const { + std::stringstream ss; + ss << ""; + return ss.str(); +} + +bool CancelFlightInfoRequest::Equals(const CancelFlightInfoRequest& other) const { + return info == other.info; +} + +arrow::Result CancelFlightInfoRequest::SerializeToString() const { + pb::CancelFlightInfoRequest pb_request; + RETURN_NOT_OK(internal::ToProto(*this, &pb_request)); + + std::string out; + if (!pb_request.SerializeToString(&out)) { + return Status::IOError("Serialized CancelFlightInfoRequest exceeded 2 GiB limit"); + } + return out; +} + +arrow::Result CancelFlightInfoRequest::Deserialize( + std::string_view serialized) { + pb::CancelFlightInfoRequest pb_request; + if (serialized.size() > static_cast(std::numeric_limits::max())) { + return Status::Invalid( + "Serialized CancelFlightInfoRequest size should not exceed 2 GiB"); + } + google::protobuf::io::ArrayInputStream input(serialized.data(), + static_cast(serialized.size())); + if (!pb_request.ParseFromZeroCopyStream(&input)) { + return Status::Invalid("Not a valid CancelFlightInfoRequest"); + } + CancelFlightInfoRequest out; + RETURN_NOT_OK(internal::FromProto(pb_request, &out)); + return out; +} + Location::Location() { uri_ = std::make_shared(); } Status FlightListing::Next(std::unique_ptr* info) { @@ -556,8 +594,8 @@ std::string ActionType::ToString() const { const ActionType ActionType::kCancelFlightInfo = ActionType{"CancelFlightInfo", "Explicitly cancel a running FlightInfo.\n" - "Request Message: FlightInfo to be canceled\n" - "Response Message: ActionCancelFlightInfoResult"}; + "Request Message: CancelFlightInfoRequest\n" + "Response Message: CancelFlightInfoResult"}; const ActionType ActionType::kCloseFlightInfo = ActionType{"CloseFlightInfo", "Close the given FlightInfo explicitly.\n" diff --git a/cpp/src/arrow/flight/types.h b/cpp/src/arrow/flight/types.h index 5a9f4e5e9ef69..4f06fd622b75e 100644 --- a/cpp/src/arrow/flight/types.h +++ b/cpp/src/arrow/flight/types.h @@ -696,6 +696,30 @@ class ARROW_FLIGHT_EXPORT FlightInfo { mutable bool reconstructed_schema_; }; +/// \brief The request of the CancelFlightInfoRequest action. +struct ARROW_FLIGHT_EXPORT CancelFlightInfoRequest { + std::unique_ptr info; + + std::string ToString() const; + bool Equals(const CancelFlightInfoRequest& other) const; + + friend bool operator==(const CancelFlightInfoRequest& left, + const CancelFlightInfoRequest& right) { + return left.Equals(right); + } + friend bool operator!=(const CancelFlightInfoRequest& left, + const CancelFlightInfoRequest& right) { + return !(left == right); + } + + /// \brief Serialize this message to its wire-format representation. + arrow::Result SerializeToString() const; + + /// \brief Deserialize this message from its wire-format representation. + static arrow::Result Deserialize( + std::string_view serialized); +}; + /// \brief An iterator to FlightInfo instances returned by ListFlights. class ARROW_FLIGHT_EXPORT FlightListing { public: diff --git a/format/Flight.proto b/format/Flight.proto index 23f8a48926e24..107e95765406e 100644 --- a/format/Flight.proto +++ b/format/Flight.proto @@ -183,6 +183,15 @@ message Action { bytes body = 2; } +/* + * The request of the CancelFlightInfo action. + * + * The request should be stored in Action.body. + */ +message CancelFlightInfoRequest { + FlightInfo info = 1; +} + /* * The request of the RenewFlightEndpoint action. * diff --git a/go/arrow/flight/client.go b/go/arrow/flight/client.go index 015c5386fba0e..dbeced4384ca9 100644 --- a/go/arrow/flight/client.go +++ b/go/arrow/flight/client.go @@ -66,7 +66,7 @@ type Client interface { // in order to use the Handshake endpoints of the service. Authenticate(context.Context, ...grpc.CallOption) error AuthenticateBasicToken(ctx context.Context, username string, password string, opts ...grpc.CallOption) (context.Context, error) - CancelFlightInfo(ctx context.Context, info *FlightInfo, opts ...grpc.CallOption) (CancelFlightInfoResult, error) + CancelFlightInfo(ctx context.Context, request *CancelFlightInfoRequest, opts ...grpc.CallOption) (CancelFlightInfoResult, error) Close() error CloseFlightInfo(ctx context.Context, info *FlightInfo, opts ...grpc.CallOption) error RenewFlightEndpoint(ctx context.Context, request *RenewFlightEndpointRequest, opts ...grpc.CallOption) (*FlightEndpoint, error) @@ -365,10 +365,10 @@ func ReadUntilEOF(stream FlightService_DoActionClient) error { } } -func (c *client) CancelFlightInfo(ctx context.Context, info *FlightInfo, opts ...grpc.CallOption) (result CancelFlightInfoResult, err error) { +func (c *client) CancelFlightInfo(ctx context.Context, request *CancelFlightInfoRequest, opts ...grpc.CallOption) (result CancelFlightInfoResult, err error) { var action flight.Action action.Type = CancelFlightInfoActionType - action.Body, err = proto.Marshal(info) + action.Body, err = proto.Marshal(request) if err != nil { return } diff --git a/go/arrow/flight/flightsql/client.go b/go/arrow/flight/flightsql/client.go index 5f234488f3e6e..4b1c95d78b182 100644 --- a/go/arrow/flight/flightsql/client.go +++ b/go/arrow/flight/flightsql/client.go @@ -534,8 +534,8 @@ func (c *Client) CancelQuery(ctx context.Context, info *flight.FlightInfo, opts return } -func (c *Client) CancelFlightInfo(ctx context.Context, info *flight.FlightInfo, opts ...grpc.CallOption) (flight.CancelFlightInfoResult, error) { - return c.Client.CancelFlightInfo(ctx, info, opts...) +func (c *Client) CancelFlightInfo(ctx context.Context, request *flight.CancelFlightInfoRequest, opts ...grpc.CallOption) (flight.CancelFlightInfoResult, error) { + return c.Client.CancelFlightInfo(ctx, request, opts...) } func (c *Client) CloseFlightInfo(ctx context.Context, info *flight.FlightInfo, opts ...grpc.CallOption) error { diff --git a/go/arrow/flight/flightsql/client_test.go b/go/arrow/flight/flightsql/client_test.go index a035121d31d92..cfb017c73f1e8 100644 --- a/go/arrow/flight/flightsql/client_test.go +++ b/go/arrow/flight/flightsql/client_test.go @@ -60,8 +60,8 @@ func (m *FlightServiceClientMock) AuthenticateBasicToken(_ context.Context, user return args.Get(0).(context.Context), args.Error(1) } -func (m *FlightServiceClientMock) CancelFlightInfo(ctx context.Context, info *flight.FlightInfo, opts ...grpc.CallOption) (flight.CancelFlightInfoResult, error) { - args := m.Called(info, opts) +func (m *FlightServiceClientMock) CancelFlightInfo(ctx context.Context, request *flight.CancelFlightInfoRequest, opts ...grpc.CallOption) (flight.CancelFlightInfoResult, error) { + args := m.Called(request, opts) return args.Get(0).(flight.CancelFlightInfoResult), args.Error(1) } @@ -624,11 +624,12 @@ func (s *FlightSqlClientSuite) TestCancelFlightInfo() { info, err := s.sqlClient.Execute(context.Background(), query, s.callOpts...) s.NoError(err) s.Equal(&emptyFlightInfo, info) + request := flight.CancelFlightInfoRequest{Info: info} mockedCancelResult := flight.CancelFlightInfoResult{ Status: flight.CancelStatusCancelled, } - s.mockClient.On("CancelFlightInfo", info, s.callOpts).Return(mockedCancelResult, nil) - cancelResult, err := s.sqlClient.CancelFlightInfo(context.TODO(), info, s.callOpts...) + s.mockClient.On("CancelFlightInfo", &request, s.callOpts).Return(mockedCancelResult, nil) + cancelResult, err := s.sqlClient.CancelFlightInfo(context.TODO(), &request, s.callOpts...) s.NoError(err) s.Equal(mockedCancelResult, cancelResult) } diff --git a/go/arrow/flight/flightsql/server.go b/go/arrow/flight/flightsql/server.go index 37de8789d34fb..319142727770a 100644 --- a/go/arrow/flight/flightsql/server.go +++ b/go/arrow/flight/flightsql/server.go @@ -515,7 +515,7 @@ func (BaseServer) BeginSavepoint(context.Context, ActionBeginSavepointRequest) ( return nil, status.Error(codes.Unimplemented, "BeginSavepoint not implemented") } -func (BaseServer) CancelFlightInfo(context.Context, *flight.FlightInfo) (flight.CancelFlightInfoResult, error) { +func (BaseServer) CancelFlightInfo(context.Context, *flight.CancelFlightInfoRequest) (flight.CancelFlightInfoResult, error) { return flight.CancelFlightInfoResult{Status: flight.CancelStatusUnspecified}, status.Error(codes.Unimplemented, "CancelFlightInfo not implemented") } @@ -653,7 +653,7 @@ type Server interface { // EndTransaction commits or rollsback a transaction EndTransaction(context.Context, ActionEndTransactionRequest) error // CancelFlightInfo attempts to explicitly cancel a FlightInfo - CancelFlightInfo(context.Context, *flight.FlightInfo) (flight.CancelFlightInfoResult, error) + CancelFlightInfo(context.Context, *flight.CancelFlightInfoRequest) (flight.CancelFlightInfoResult, error) // CloseFlightInfo attempts to explicitly close a FlightInfo CloseFlightInfo(context.Context, *flight.FlightInfo) error // RenewFlightEndpoint attempts to extend the expiration of a FlightEndpoint @@ -983,23 +983,23 @@ func (f *flightSqlServer) DoAction(cmd *flight.Action, stream flight.FlightServi switch cmd.Type { case flight.CancelFlightInfoActionType: var ( - info flight.FlightInfo + request flight.CancelFlightInfoRequest result flight.CancelFlightInfoResult err error ) - if err = proto.Unmarshal(cmd.Body, &info); err != nil { - return status.Errorf(codes.InvalidArgument, "unable to unmarshal FlightInfo for CancelFlightInfo: %s", err.Error()) + if err = proto.Unmarshal(cmd.Body, &request); err != nil { + return status.Errorf(codes.InvalidArgument, "unable to unmarshal CancelFlightInfoRequest for CancelFlightInfo: %s", err.Error()) } if cancel, ok := f.srv.(cancelQueryServer); ok { - cancelResult, err := cancel.CancelQuery(stream.Context(), &cancelQueryRequest{&info}) + cancelResult, err := cancel.CancelQuery(stream.Context(), &cancelQueryRequest{request.Info}) if err != nil { return err } result.Status = cancelResultToCancelStatus(cancelResult) } else { - result, err = f.srv.CancelFlightInfo(stream.Context(), &info) + result, err = f.srv.CancelFlightInfo(stream.Context(), &request) if err != nil { return err } @@ -1121,7 +1121,8 @@ func (f *flightSqlServer) DoAction(cmd *flight.Action, stream flight.FlightServi return err } } else { - cancelFlightInfoResult, err := f.srv.CancelFlightInfo(stream.Context(), &info) + cancelFlightInfoRequest := flight.CancelFlightInfoRequest{Info: &info} + cancelFlightInfoResult, err := f.srv.CancelFlightInfo(stream.Context(), &cancelFlightInfoRequest) if err != nil { return err } diff --git a/go/arrow/flight/flightsql/server_test.go b/go/arrow/flight/flightsql/server_test.go index 557ceaaa99cc4..cd8fcc27e5d6d 100644 --- a/go/arrow/flight/flightsql/server_test.go +++ b/go/arrow/flight/flightsql/server_test.go @@ -361,8 +361,8 @@ func (s *UnimplementedFlightSqlServerSuite) TestDoAction() { } func (s *UnimplementedFlightSqlServerSuite) TestCancelFlightInfo() { - info := flight.FlightInfo{} - result, err := s.cl.CancelFlightInfo(context.TODO(), &info) + request := flight.CancelFlightInfoRequest{} + result, err := s.cl.CancelFlightInfo(context.TODO(), &request) s.Equal(flight.CancelFlightInfoResult{Status: flight.CancelStatusUnspecified}, result) st, ok := status.FromError(err) diff --git a/go/arrow/flight/internal/flight/Flight.pb.go b/go/arrow/flight/internal/flight/Flight.pb.go index bebfee3360adf..7b4d1e2fd9298 100644 --- a/go/arrow/flight/internal/flight/Flight.pb.go +++ b/go/arrow/flight/internal/flight/Flight.pb.go @@ -155,7 +155,7 @@ func (x FlightDescriptor_DescriptorType) Number() protoreflect.EnumNumber { // Deprecated: Use FlightDescriptor_DescriptorType.Descriptor instead. func (FlightDescriptor_DescriptorType) EnumDescriptor() ([]byte, []int) { - return file_Flight_proto_rawDescGZIP(), []int{11, 0} + return file_Flight_proto_rawDescGZIP(), []int{12, 0} } // The request that a client provides to a server on handshake. @@ -529,6 +529,56 @@ func (x *Action) GetBody() []byte { return nil } +// The request of the CancelFlightInfo action. +// +// The request should be stored in Action.body. +type CancelFlightInfoRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Info *FlightInfo `protobuf:"bytes,1,opt,name=info,proto3" json:"info,omitempty"` +} + +func (x *CancelFlightInfoRequest) Reset() { + *x = CancelFlightInfoRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_Flight_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CancelFlightInfoRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CancelFlightInfoRequest) ProtoMessage() {} + +func (x *CancelFlightInfoRequest) ProtoReflect() protoreflect.Message { + mi := &file_Flight_proto_msgTypes[7] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CancelFlightInfoRequest.ProtoReflect.Descriptor instead. +func (*CancelFlightInfoRequest) Descriptor() ([]byte, []int) { + return file_Flight_proto_rawDescGZIP(), []int{7} +} + +func (x *CancelFlightInfoRequest) GetInfo() *FlightInfo { + if x != nil { + return x.Info + } + return nil +} + // The request of the RenewFlightEndpoint action. // // The request should be stored in Action.body. @@ -543,7 +593,7 @@ type RenewFlightEndpointRequest struct { func (x *RenewFlightEndpointRequest) Reset() { *x = RenewFlightEndpointRequest{} if protoimpl.UnsafeEnabled { - mi := &file_Flight_proto_msgTypes[7] + mi := &file_Flight_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -556,7 +606,7 @@ func (x *RenewFlightEndpointRequest) String() string { func (*RenewFlightEndpointRequest) ProtoMessage() {} func (x *RenewFlightEndpointRequest) ProtoReflect() protoreflect.Message { - mi := &file_Flight_proto_msgTypes[7] + mi := &file_Flight_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -569,7 +619,7 @@ func (x *RenewFlightEndpointRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RenewFlightEndpointRequest.ProtoReflect.Descriptor instead. func (*RenewFlightEndpointRequest) Descriptor() ([]byte, []int) { - return file_Flight_proto_rawDescGZIP(), []int{7} + return file_Flight_proto_rawDescGZIP(), []int{8} } func (x *RenewFlightEndpointRequest) GetEndpoint() *FlightEndpoint { @@ -591,7 +641,7 @@ type Result struct { func (x *Result) Reset() { *x = Result{} if protoimpl.UnsafeEnabled { - mi := &file_Flight_proto_msgTypes[8] + mi := &file_Flight_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -604,7 +654,7 @@ func (x *Result) String() string { func (*Result) ProtoMessage() {} func (x *Result) ProtoReflect() protoreflect.Message { - mi := &file_Flight_proto_msgTypes[8] + mi := &file_Flight_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -617,7 +667,7 @@ func (x *Result) ProtoReflect() protoreflect.Message { // Deprecated: Use Result.ProtoReflect.Descriptor instead. func (*Result) Descriptor() ([]byte, []int) { - return file_Flight_proto_rawDescGZIP(), []int{8} + return file_Flight_proto_rawDescGZIP(), []int{9} } func (x *Result) GetBody() []byte { @@ -641,7 +691,7 @@ type CancelFlightInfoResult struct { func (x *CancelFlightInfoResult) Reset() { *x = CancelFlightInfoResult{} if protoimpl.UnsafeEnabled { - mi := &file_Flight_proto_msgTypes[9] + mi := &file_Flight_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -654,7 +704,7 @@ func (x *CancelFlightInfoResult) String() string { func (*CancelFlightInfoResult) ProtoMessage() {} func (x *CancelFlightInfoResult) ProtoReflect() protoreflect.Message { - mi := &file_Flight_proto_msgTypes[9] + mi := &file_Flight_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -667,7 +717,7 @@ func (x *CancelFlightInfoResult) ProtoReflect() protoreflect.Message { // Deprecated: Use CancelFlightInfoResult.ProtoReflect.Descriptor instead. func (*CancelFlightInfoResult) Descriptor() ([]byte, []int) { - return file_Flight_proto_rawDescGZIP(), []int{9} + return file_Flight_proto_rawDescGZIP(), []int{10} } func (x *CancelFlightInfoResult) GetStatus() CancelStatus { @@ -694,7 +744,7 @@ type SchemaResult struct { func (x *SchemaResult) Reset() { *x = SchemaResult{} if protoimpl.UnsafeEnabled { - mi := &file_Flight_proto_msgTypes[10] + mi := &file_Flight_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -707,7 +757,7 @@ func (x *SchemaResult) String() string { func (*SchemaResult) ProtoMessage() {} func (x *SchemaResult) ProtoReflect() protoreflect.Message { - mi := &file_Flight_proto_msgTypes[10] + mi := &file_Flight_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -720,7 +770,7 @@ func (x *SchemaResult) ProtoReflect() protoreflect.Message { // Deprecated: Use SchemaResult.ProtoReflect.Descriptor instead. func (*SchemaResult) Descriptor() ([]byte, []int) { - return file_Flight_proto_rawDescGZIP(), []int{10} + return file_Flight_proto_rawDescGZIP(), []int{11} } func (x *SchemaResult) GetSchema() []byte { @@ -749,7 +799,7 @@ type FlightDescriptor struct { func (x *FlightDescriptor) Reset() { *x = FlightDescriptor{} if protoimpl.UnsafeEnabled { - mi := &file_Flight_proto_msgTypes[11] + mi := &file_Flight_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -762,7 +812,7 @@ func (x *FlightDescriptor) String() string { func (*FlightDescriptor) ProtoMessage() {} func (x *FlightDescriptor) ProtoReflect() protoreflect.Message { - mi := &file_Flight_proto_msgTypes[11] + mi := &file_Flight_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -775,7 +825,7 @@ func (x *FlightDescriptor) ProtoReflect() protoreflect.Message { // Deprecated: Use FlightDescriptor.ProtoReflect.Descriptor instead. func (*FlightDescriptor) Descriptor() ([]byte, []int) { - return file_Flight_proto_rawDescGZIP(), []int{11} + return file_Flight_proto_rawDescGZIP(), []int{12} } func (x *FlightDescriptor) GetType() FlightDescriptor_DescriptorType { @@ -847,7 +897,7 @@ type FlightInfo struct { func (x *FlightInfo) Reset() { *x = FlightInfo{} if protoimpl.UnsafeEnabled { - mi := &file_Flight_proto_msgTypes[12] + mi := &file_Flight_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -860,7 +910,7 @@ func (x *FlightInfo) String() string { func (*FlightInfo) ProtoMessage() {} func (x *FlightInfo) ProtoReflect() protoreflect.Message { - mi := &file_Flight_proto_msgTypes[12] + mi := &file_Flight_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -873,7 +923,7 @@ func (x *FlightInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use FlightInfo.ProtoReflect.Descriptor instead. func (*FlightInfo) Descriptor() ([]byte, []int) { - return file_Flight_proto_rawDescGZIP(), []int{12} + return file_Flight_proto_rawDescGZIP(), []int{13} } func (x *FlightInfo) GetSchema() []byte { @@ -950,7 +1000,7 @@ type FlightEndpoint struct { func (x *FlightEndpoint) Reset() { *x = FlightEndpoint{} if protoimpl.UnsafeEnabled { - mi := &file_Flight_proto_msgTypes[13] + mi := &file_Flight_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -963,7 +1013,7 @@ func (x *FlightEndpoint) String() string { func (*FlightEndpoint) ProtoMessage() {} func (x *FlightEndpoint) ProtoReflect() protoreflect.Message { - mi := &file_Flight_proto_msgTypes[13] + mi := &file_Flight_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -976,7 +1026,7 @@ func (x *FlightEndpoint) ProtoReflect() protoreflect.Message { // Deprecated: Use FlightEndpoint.ProtoReflect.Descriptor instead. func (*FlightEndpoint) Descriptor() ([]byte, []int) { - return file_Flight_proto_rawDescGZIP(), []int{13} + return file_Flight_proto_rawDescGZIP(), []int{14} } func (x *FlightEndpoint) GetTicket() *Ticket { @@ -1013,7 +1063,7 @@ type Location struct { func (x *Location) Reset() { *x = Location{} if protoimpl.UnsafeEnabled { - mi := &file_Flight_proto_msgTypes[14] + mi := &file_Flight_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1026,7 +1076,7 @@ func (x *Location) String() string { func (*Location) ProtoMessage() {} func (x *Location) ProtoReflect() protoreflect.Message { - mi := &file_Flight_proto_msgTypes[14] + mi := &file_Flight_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1039,7 +1089,7 @@ func (x *Location) ProtoReflect() protoreflect.Message { // Deprecated: Use Location.ProtoReflect.Descriptor instead. func (*Location) Descriptor() ([]byte, []int) { - return file_Flight_proto_rawDescGZIP(), []int{14} + return file_Flight_proto_rawDescGZIP(), []int{15} } func (x *Location) GetUri() string { @@ -1065,7 +1115,7 @@ type Ticket struct { func (x *Ticket) Reset() { *x = Ticket{} if protoimpl.UnsafeEnabled { - mi := &file_Flight_proto_msgTypes[15] + mi := &file_Flight_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1078,7 +1128,7 @@ func (x *Ticket) String() string { func (*Ticket) ProtoMessage() {} func (x *Ticket) ProtoReflect() protoreflect.Message { - mi := &file_Flight_proto_msgTypes[15] + mi := &file_Flight_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1091,7 +1141,7 @@ func (x *Ticket) ProtoReflect() protoreflect.Message { // Deprecated: Use Ticket.ProtoReflect.Descriptor instead. func (*Ticket) Descriptor() ([]byte, []int) { - return file_Flight_proto_rawDescGZIP(), []int{15} + return file_Flight_proto_rawDescGZIP(), []int{16} } func (x *Ticket) GetTicket() []byte { @@ -1124,7 +1174,7 @@ type FlightData struct { func (x *FlightData) Reset() { *x = FlightData{} if protoimpl.UnsafeEnabled { - mi := &file_Flight_proto_msgTypes[16] + mi := &file_Flight_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1137,7 +1187,7 @@ func (x *FlightData) String() string { func (*FlightData) ProtoMessage() {} func (x *FlightData) ProtoReflect() protoreflect.Message { - mi := &file_Flight_proto_msgTypes[16] + mi := &file_Flight_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1150,7 +1200,7 @@ func (x *FlightData) ProtoReflect() protoreflect.Message { // Deprecated: Use FlightData.ProtoReflect.Descriptor instead. func (*FlightData) Descriptor() ([]byte, []int) { - return file_Flight_proto_rawDescGZIP(), []int{16} + return file_Flight_proto_rawDescGZIP(), []int{17} } func (x *FlightData) GetFlightDescriptor() *FlightDescriptor { @@ -1194,7 +1244,7 @@ type PutResult struct { func (x *PutResult) Reset() { *x = PutResult{} if protoimpl.UnsafeEnabled { - mi := &file_Flight_proto_msgTypes[17] + mi := &file_Flight_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1207,7 +1257,7 @@ func (x *PutResult) String() string { func (*PutResult) ProtoMessage() {} func (x *PutResult) ProtoReflect() protoreflect.Message { - mi := &file_Flight_proto_msgTypes[17] + mi := &file_Flight_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1220,7 +1270,7 @@ func (x *PutResult) ProtoReflect() protoreflect.Message { // Deprecated: Use PutResult.ProtoReflect.Descriptor instead. func (*PutResult) Descriptor() ([]byte, []int) { - return file_Flight_proto_rawDescGZIP(), []int{17} + return file_Flight_proto_rawDescGZIP(), []int{18} } func (x *PutResult) GetAppMetadata() []byte { @@ -1263,152 +1313,157 @@ var file_Flight_proto_rawDesc = []byte{ 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x30, 0x0a, 0x06, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0c, 0x52, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x22, 0x5f, 0x0a, 0x1a, 0x52, 0x65, 0x6e, - 0x65, 0x77, 0x46, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x41, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, - 0x69, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x61, 0x72, 0x72, 0x6f, - 0x77, 0x2e, 0x66, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, - 0x6c, 0x2e, 0x46, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, - 0x52, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x22, 0x1c, 0x0a, 0x06, 0x52, 0x65, - 0x73, 0x75, 0x6c, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0c, 0x52, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x22, 0x55, 0x0a, 0x16, 0x43, 0x61, 0x6e, 0x63, - 0x65, 0x6c, 0x46, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x12, 0x3b, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x23, 0x2e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x2e, 0x66, 0x6c, 0x69, 0x67, 0x68, - 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x43, 0x61, 0x6e, 0x63, 0x65, - 0x6c, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, - 0x26, 0x0a, 0x0c, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, - 0x16, 0x0a, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, - 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x22, 0xb6, 0x01, 0x0a, 0x10, 0x46, 0x6c, 0x69, 0x67, - 0x68, 0x74, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x12, 0x4a, 0x0a, 0x04, - 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x36, 0x2e, 0x61, 0x72, 0x72, - 0x6f, 0x77, 0x2e, 0x66, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, - 0x6f, 0x6c, 0x2e, 0x46, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, - 0x74, 0x6f, 0x72, 0x2e, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x54, 0x79, - 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x63, 0x6d, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x63, 0x6d, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, - 0x74, 0x68, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x22, 0x30, - 0x0a, 0x0e, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x54, 0x79, 0x70, 0x65, - 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, 0x0a, - 0x04, 0x50, 0x41, 0x54, 0x48, 0x10, 0x01, 0x12, 0x07, 0x0a, 0x03, 0x43, 0x4d, 0x44, 0x10, 0x02, - 0x22, 0x9d, 0x02, 0x0a, 0x0a, 0x46, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, - 0x16, 0x0a, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, - 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x54, 0x0a, 0x11, 0x66, 0x6c, 0x69, 0x67, 0x68, - 0x74, 0x5f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x2e, 0x66, 0x6c, 0x69, 0x67, 0x68, + 0x01, 0x28, 0x0c, 0x52, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x22, 0x50, 0x0a, 0x17, 0x43, 0x61, 0x6e, + 0x63, 0x65, 0x6c, 0x46, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x35, 0x0a, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x2e, 0x66, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x46, 0x6c, 0x69, 0x67, 0x68, - 0x74, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x52, 0x10, 0x66, 0x6c, 0x69, - 0x67, 0x68, 0x74, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x12, 0x41, 0x0a, - 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x25, 0x2e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x2e, 0x66, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x46, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x45, 0x6e, - 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, - 0x12, 0x23, 0x0a, 0x0d, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, - 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x52, 0x65, - 0x63, 0x6f, 0x72, 0x64, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x62, - 0x79, 0x74, 0x65, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x74, 0x6f, 0x74, 0x61, - 0x6c, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x65, - 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x65, 0x64, - 0x22, 0xc9, 0x01, 0x0a, 0x0e, 0x46, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x45, 0x6e, 0x64, 0x70, 0x6f, - 0x69, 0x6e, 0x74, 0x12, 0x35, 0x0a, 0x06, 0x74, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x2e, 0x66, 0x6c, 0x69, 0x67, - 0x68, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x54, 0x69, 0x63, 0x6b, - 0x65, 0x74, 0x52, 0x06, 0x74, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x3b, 0x0a, 0x08, 0x6c, 0x6f, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x61, + 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x22, 0x5f, 0x0a, 0x1a, 0x52, + 0x65, 0x6e, 0x65, 0x77, 0x46, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, + 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x41, 0x0a, 0x08, 0x65, 0x6e, 0x64, + 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x61, 0x72, + 0x72, 0x6f, 0x77, 0x2e, 0x66, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x63, 0x6f, 0x6c, 0x2e, 0x46, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, + 0x6e, 0x74, 0x52, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x22, 0x1c, 0x0a, 0x06, + 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x22, 0x55, 0x0a, 0x16, 0x43, 0x61, + 0x6e, 0x63, 0x65, 0x6c, 0x46, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x12, 0x3b, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x23, 0x2e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x2e, 0x66, 0x6c, 0x69, + 0x67, 0x68, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x43, 0x61, 0x6e, + 0x63, 0x65, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x22, 0x26, 0x0a, 0x0c, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x73, 0x75, 0x6c, + 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x22, 0xb6, 0x01, 0x0a, 0x10, 0x46, 0x6c, + 0x69, 0x67, 0x68, 0x74, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x12, 0x4a, + 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x36, 0x2e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x2e, 0x66, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x6c, - 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x43, 0x0a, 0x0f, 0x65, 0x78, 0x70, 0x69, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0e, 0x65, 0x78, - 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x1c, 0x0a, 0x08, - 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x69, 0x22, 0x20, 0x0a, 0x06, 0x54, 0x69, - 0x63, 0x6b, 0x65, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x74, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x22, 0xc4, 0x01, 0x0a, - 0x0a, 0x46, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x44, 0x61, 0x74, 0x61, 0x12, 0x54, 0x0a, 0x11, 0x66, - 0x6c, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x2e, 0x66, - 0x6c, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x46, - 0x6c, 0x69, 0x67, 0x68, 0x74, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x52, - 0x10, 0x66, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, - 0x72, 0x12, 0x1f, 0x0a, 0x0b, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x64, 0x61, 0x74, 0x61, 0x48, 0x65, 0x61, 0x64, - 0x65, 0x72, 0x12, 0x21, 0x0a, 0x0c, 0x61, 0x70, 0x70, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, - 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0b, 0x61, 0x70, 0x70, 0x4d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x1c, 0x0a, 0x09, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x62, 0x6f, - 0x64, 0x79, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, 0x42, - 0x6f, 0x64, 0x79, 0x22, 0x2e, 0x0a, 0x09, 0x50, 0x75, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x12, 0x21, 0x0a, 0x0c, 0x61, 0x70, 0x70, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0b, 0x61, 0x70, 0x70, 0x4d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0x2a, 0x8b, 0x01, 0x0a, 0x0c, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x12, 0x1d, 0x0a, 0x19, 0x43, 0x41, 0x4e, 0x43, 0x45, 0x4c, 0x5f, 0x53, - 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, - 0x44, 0x10, 0x00, 0x12, 0x1b, 0x0a, 0x17, 0x43, 0x41, 0x4e, 0x43, 0x45, 0x4c, 0x5f, 0x53, 0x54, - 0x41, 0x54, 0x55, 0x53, 0x5f, 0x43, 0x41, 0x4e, 0x43, 0x45, 0x4c, 0x4c, 0x45, 0x44, 0x10, 0x01, - 0x12, 0x1c, 0x0a, 0x18, 0x43, 0x41, 0x4e, 0x43, 0x45, 0x4c, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, - 0x53, 0x5f, 0x43, 0x41, 0x4e, 0x43, 0x45, 0x4c, 0x4c, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x12, 0x21, - 0x0a, 0x1d, 0x43, 0x41, 0x4e, 0x43, 0x45, 0x4c, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, - 0x4e, 0x4f, 0x54, 0x5f, 0x43, 0x41, 0x4e, 0x43, 0x45, 0x4c, 0x4c, 0x41, 0x42, 0x4c, 0x45, 0x10, - 0x03, 0x32, 0xa7, 0x06, 0x0a, 0x0d, 0x46, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x53, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x12, 0x64, 0x0a, 0x09, 0x48, 0x61, 0x6e, 0x64, 0x73, 0x68, 0x61, 0x6b, 0x65, - 0x12, 0x27, 0x2e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x2e, 0x66, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x48, 0x61, 0x6e, 0x64, 0x73, 0x68, 0x61, - 0x6b, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x61, 0x72, 0x72, 0x6f, - 0x77, 0x2e, 0x66, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, - 0x6c, 0x2e, 0x48, 0x61, 0x6e, 0x64, 0x73, 0x68, 0x61, 0x6b, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, 0x12, 0x55, 0x0a, 0x0b, 0x4c, 0x69, 0x73, - 0x74, 0x46, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x73, 0x12, 0x1f, 0x2e, 0x61, 0x72, 0x72, 0x6f, 0x77, - 0x2e, 0x66, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, - 0x2e, 0x43, 0x72, 0x69, 0x74, 0x65, 0x72, 0x69, 0x61, 0x1a, 0x21, 0x2e, 0x61, 0x72, 0x72, 0x6f, - 0x77, 0x2e, 0x66, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, - 0x6c, 0x2e, 0x46, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x00, 0x30, 0x01, - 0x12, 0x5d, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x46, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x49, 0x6e, 0x66, - 0x6f, 0x12, 0x27, 0x2e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x2e, 0x66, 0x6c, 0x69, 0x67, 0x68, 0x74, + 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x46, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x44, 0x65, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, + 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x63, 0x6d, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x63, 0x6d, 0x64, 0x12, 0x12, 0x0a, 0x04, + 0x70, 0x61, 0x74, 0x68, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, + 0x22, 0x30, 0x0a, 0x0e, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x54, 0x79, + 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, + 0x08, 0x0a, 0x04, 0x50, 0x41, 0x54, 0x48, 0x10, 0x01, 0x12, 0x07, 0x0a, 0x03, 0x43, 0x4d, 0x44, + 0x10, 0x02, 0x22, 0x9d, 0x02, 0x0a, 0x0a, 0x46, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x49, 0x6e, 0x66, + 0x6f, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x54, 0x0a, 0x11, 0x66, 0x6c, 0x69, + 0x67, 0x68, 0x74, 0x5f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x2e, 0x66, 0x6c, 0x69, + 0x67, 0x68, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x46, 0x6c, 0x69, + 0x67, 0x68, 0x74, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x52, 0x10, 0x66, + 0x6c, 0x69, 0x67, 0x68, 0x74, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x12, + 0x41, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x25, 0x2e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x2e, 0x66, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x46, 0x6c, 0x69, 0x67, 0x68, 0x74, - 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x1a, 0x21, 0x2e, 0x61, 0x72, 0x72, + 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, + 0x6e, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x72, 0x65, 0x63, 0x6f, + 0x72, 0x64, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x74, 0x6f, 0x74, 0x61, 0x6c, + 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, + 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x74, 0x6f, + 0x74, 0x61, 0x6c, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x6f, 0x72, 0x64, 0x65, + 0x72, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x6f, 0x72, 0x64, 0x65, 0x72, + 0x65, 0x64, 0x22, 0xc9, 0x01, 0x0a, 0x0e, 0x46, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x45, 0x6e, 0x64, + 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x35, 0x0a, 0x06, 0x74, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x2e, 0x66, 0x6c, + 0x69, 0x67, 0x68, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x54, 0x69, + 0x63, 0x6b, 0x65, 0x74, 0x52, 0x06, 0x74, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x3b, 0x0a, 0x08, + 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, + 0x2e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x2e, 0x66, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x43, 0x0a, 0x0f, 0x65, 0x78, 0x70, + 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0e, + 0x65, 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x1c, + 0x0a, 0x08, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, + 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x69, 0x22, 0x20, 0x0a, 0x06, + 0x54, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x69, 0x63, 0x6b, 0x65, 0x74, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x74, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x22, 0xc4, + 0x01, 0x0a, 0x0a, 0x46, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x44, 0x61, 0x74, 0x61, 0x12, 0x54, 0x0a, + 0x11, 0x66, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, + 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x61, 0x72, 0x72, 0x6f, 0x77, + 0x2e, 0x66, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, + 0x2e, 0x46, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, + 0x72, 0x52, 0x10, 0x66, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x6f, 0x72, 0x12, 0x1f, 0x0a, 0x0b, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x68, 0x65, 0x61, 0x64, + 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x64, 0x61, 0x74, 0x61, 0x48, 0x65, + 0x61, 0x64, 0x65, 0x72, 0x12, 0x21, 0x0a, 0x0c, 0x61, 0x70, 0x70, 0x5f, 0x6d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0b, 0x61, 0x70, 0x70, 0x4d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x1c, 0x0a, 0x09, 0x64, 0x61, 0x74, 0x61, 0x5f, + 0x62, 0x6f, 0x64, 0x79, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x64, 0x61, 0x74, + 0x61, 0x42, 0x6f, 0x64, 0x79, 0x22, 0x2e, 0x0a, 0x09, 0x50, 0x75, 0x74, 0x52, 0x65, 0x73, 0x75, + 0x6c, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x61, 0x70, 0x70, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0b, 0x61, 0x70, 0x70, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x2a, 0x8b, 0x01, 0x0a, 0x0c, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1d, 0x0a, 0x19, 0x43, 0x41, 0x4e, 0x43, 0x45, 0x4c, + 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, + 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1b, 0x0a, 0x17, 0x43, 0x41, 0x4e, 0x43, 0x45, 0x4c, 0x5f, + 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x43, 0x41, 0x4e, 0x43, 0x45, 0x4c, 0x4c, 0x45, 0x44, + 0x10, 0x01, 0x12, 0x1c, 0x0a, 0x18, 0x43, 0x41, 0x4e, 0x43, 0x45, 0x4c, 0x5f, 0x53, 0x54, 0x41, + 0x54, 0x55, 0x53, 0x5f, 0x43, 0x41, 0x4e, 0x43, 0x45, 0x4c, 0x4c, 0x49, 0x4e, 0x47, 0x10, 0x02, + 0x12, 0x21, 0x0a, 0x1d, 0x43, 0x41, 0x4e, 0x43, 0x45, 0x4c, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, + 0x53, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x43, 0x41, 0x4e, 0x43, 0x45, 0x4c, 0x4c, 0x41, 0x42, 0x4c, + 0x45, 0x10, 0x03, 0x32, 0xa7, 0x06, 0x0a, 0x0d, 0x46, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x53, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x64, 0x0a, 0x09, 0x48, 0x61, 0x6e, 0x64, 0x73, 0x68, 0x61, + 0x6b, 0x65, 0x12, 0x27, 0x2e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x2e, 0x66, 0x6c, 0x69, 0x67, 0x68, + 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x48, 0x61, 0x6e, 0x64, 0x73, + 0x68, 0x61, 0x6b, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x61, 0x72, + 0x72, 0x6f, 0x77, 0x2e, 0x66, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x63, 0x6f, 0x6c, 0x2e, 0x48, 0x61, 0x6e, 0x64, 0x73, 0x68, 0x61, 0x6b, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, 0x12, 0x55, 0x0a, 0x0b, 0x4c, + 0x69, 0x73, 0x74, 0x46, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x73, 0x12, 0x1f, 0x2e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x2e, 0x66, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, - 0x6f, 0x6c, 0x2e, 0x46, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x00, 0x12, - 0x5b, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x27, 0x2e, 0x61, + 0x6f, 0x6c, 0x2e, 0x43, 0x72, 0x69, 0x74, 0x65, 0x72, 0x69, 0x61, 0x1a, 0x21, 0x2e, 0x61, 0x72, + 0x72, 0x6f, 0x77, 0x2e, 0x66, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x63, 0x6f, 0x6c, 0x2e, 0x46, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x00, + 0x30, 0x01, 0x12, 0x5d, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x46, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x49, + 0x6e, 0x66, 0x6f, 0x12, 0x27, 0x2e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x2e, 0x66, 0x6c, 0x69, 0x67, + 0x68, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x46, 0x6c, 0x69, 0x67, + 0x68, 0x74, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x1a, 0x21, 0x2e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x2e, 0x66, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x46, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x44, 0x65, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x6f, 0x72, 0x1a, 0x23, 0x2e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x2e, 0x66, 0x6c, - 0x69, 0x67, 0x68, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x53, 0x63, - 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x00, 0x12, 0x4d, 0x0a, 0x05, - 0x44, 0x6f, 0x47, 0x65, 0x74, 0x12, 0x1d, 0x2e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x2e, 0x66, 0x6c, - 0x69, 0x67, 0x68, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x54, 0x69, - 0x63, 0x6b, 0x65, 0x74, 0x1a, 0x21, 0x2e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x2e, 0x66, 0x6c, 0x69, - 0x67, 0x68, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x46, 0x6c, 0x69, - 0x67, 0x68, 0x74, 0x44, 0x61, 0x74, 0x61, 0x22, 0x00, 0x30, 0x01, 0x12, 0x52, 0x0a, 0x05, 0x44, - 0x6f, 0x50, 0x75, 0x74, 0x12, 0x21, 0x2e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x2e, 0x66, 0x6c, 0x69, - 0x67, 0x68, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x46, 0x6c, 0x69, - 0x67, 0x68, 0x74, 0x44, 0x61, 0x74, 0x61, 0x1a, 0x20, 0x2e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x2e, + 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x46, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x22, + 0x00, 0x12, 0x5b, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x27, + 0x2e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x2e, 0x66, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x46, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x44, 0x65, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x1a, 0x23, 0x2e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x2e, 0x66, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, - 0x50, 0x75, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, 0x12, - 0x58, 0x0a, 0x0a, 0x44, 0x6f, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x21, 0x2e, - 0x61, 0x72, 0x72, 0x6f, 0x77, 0x2e, 0x66, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x46, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x44, 0x61, 0x74, 0x61, - 0x1a, 0x21, 0x2e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x2e, 0x66, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x46, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x44, - 0x61, 0x74, 0x61, 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, 0x12, 0x4c, 0x0a, 0x08, 0x44, 0x6f, 0x41, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x2e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x2e, 0x66, 0x6c, - 0x69, 0x67, 0x68, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x41, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x1d, 0x2e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x2e, 0x66, 0x6c, 0x69, - 0x67, 0x68, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x52, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x22, 0x00, 0x30, 0x01, 0x12, 0x52, 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x41, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1c, 0x2e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x2e, 0x66, - 0x6c, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x45, - 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x21, 0x2e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x2e, 0x66, 0x6c, 0x69, - 0x67, 0x68, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x41, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x22, 0x00, 0x30, 0x01, 0x42, 0x76, 0x0a, 0x1c, 0x6f, - 0x72, 0x67, 0x2e, 0x61, 0x70, 0x61, 0x63, 0x68, 0x65, 0x2e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x2e, - 0x66, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x5a, 0x37, 0x67, 0x69, 0x74, - 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x70, 0x61, 0x63, 0x68, 0x65, 0x2f, 0x61, - 0x72, 0x72, 0x6f, 0x77, 0x2f, 0x67, 0x6f, 0x2f, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x2f, 0x66, 0x6c, - 0x69, 0x67, 0x68, 0x74, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x66, 0x6c, - 0x69, 0x67, 0x68, 0x74, 0xaa, 0x02, 0x1c, 0x41, 0x70, 0x61, 0x63, 0x68, 0x65, 0x2e, 0x41, 0x72, - 0x72, 0x6f, 0x77, 0x2e, 0x46, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, - 0x63, 0x6f, 0x6c, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x00, 0x12, 0x4d, + 0x0a, 0x05, 0x44, 0x6f, 0x47, 0x65, 0x74, 0x12, 0x1d, 0x2e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x2e, + 0x66, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, + 0x54, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x1a, 0x21, 0x2e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x2e, 0x66, + 0x6c, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x46, + 0x6c, 0x69, 0x67, 0x68, 0x74, 0x44, 0x61, 0x74, 0x61, 0x22, 0x00, 0x30, 0x01, 0x12, 0x52, 0x0a, + 0x05, 0x44, 0x6f, 0x50, 0x75, 0x74, 0x12, 0x21, 0x2e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x2e, 0x66, + 0x6c, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x46, + 0x6c, 0x69, 0x67, 0x68, 0x74, 0x44, 0x61, 0x74, 0x61, 0x1a, 0x20, 0x2e, 0x61, 0x72, 0x72, 0x6f, + 0x77, 0x2e, 0x66, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, + 0x6c, 0x2e, 0x50, 0x75, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x00, 0x28, 0x01, 0x30, + 0x01, 0x12, 0x58, 0x0a, 0x0a, 0x44, 0x6f, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, + 0x21, 0x2e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x2e, 0x66, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x46, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x44, 0x61, + 0x74, 0x61, 0x1a, 0x21, 0x2e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x2e, 0x66, 0x6c, 0x69, 0x67, 0x68, + 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x46, 0x6c, 0x69, 0x67, 0x68, + 0x74, 0x44, 0x61, 0x74, 0x61, 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, 0x12, 0x4c, 0x0a, 0x08, 0x44, + 0x6f, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x2e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x2e, + 0x66, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, + 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x1d, 0x2e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x2e, 0x66, + 0x6c, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x52, + 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x00, 0x30, 0x01, 0x12, 0x52, 0x0a, 0x0b, 0x4c, 0x69, 0x73, + 0x74, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1c, 0x2e, 0x61, 0x72, 0x72, 0x6f, 0x77, + 0x2e, 0x66, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, + 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x21, 0x2e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x2e, 0x66, + 0x6c, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x41, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x22, 0x00, 0x30, 0x01, 0x42, 0x76, 0x0a, + 0x1c, 0x6f, 0x72, 0x67, 0x2e, 0x61, 0x70, 0x61, 0x63, 0x68, 0x65, 0x2e, 0x61, 0x72, 0x72, 0x6f, + 0x77, 0x2e, 0x66, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x69, 0x6d, 0x70, 0x6c, 0x5a, 0x37, 0x67, + 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x70, 0x61, 0x63, 0x68, 0x65, + 0x2f, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x2f, 0x67, 0x6f, 0x2f, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x2f, + 0x66, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, + 0x66, 0x6c, 0x69, 0x67, 0x68, 0x74, 0xaa, 0x02, 0x1c, 0x41, 0x70, 0x61, 0x63, 0x68, 0x65, 0x2e, + 0x41, 0x72, 0x72, 0x6f, 0x77, 0x2e, 0x46, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x50, 0x72, 0x6f, + 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1424,7 +1479,7 @@ func file_Flight_proto_rawDescGZIP() []byte { } var file_Flight_proto_enumTypes = make([]protoimpl.EnumInfo, 2) -var file_Flight_proto_msgTypes = make([]protoimpl.MessageInfo, 18) +var file_Flight_proto_msgTypes = make([]protoimpl.MessageInfo, 19) var file_Flight_proto_goTypes = []interface{}{ (CancelStatus)(0), // 0: arrow.flight.protocol.CancelStatus (FlightDescriptor_DescriptorType)(0), // 1: arrow.flight.protocol.FlightDescriptor.DescriptorType @@ -1435,52 +1490,54 @@ var file_Flight_proto_goTypes = []interface{}{ (*ActionType)(nil), // 6: arrow.flight.protocol.ActionType (*Criteria)(nil), // 7: arrow.flight.protocol.Criteria (*Action)(nil), // 8: arrow.flight.protocol.Action - (*RenewFlightEndpointRequest)(nil), // 9: arrow.flight.protocol.RenewFlightEndpointRequest - (*Result)(nil), // 10: arrow.flight.protocol.Result - (*CancelFlightInfoResult)(nil), // 11: arrow.flight.protocol.CancelFlightInfoResult - (*SchemaResult)(nil), // 12: arrow.flight.protocol.SchemaResult - (*FlightDescriptor)(nil), // 13: arrow.flight.protocol.FlightDescriptor - (*FlightInfo)(nil), // 14: arrow.flight.protocol.FlightInfo - (*FlightEndpoint)(nil), // 15: arrow.flight.protocol.FlightEndpoint - (*Location)(nil), // 16: arrow.flight.protocol.Location - (*Ticket)(nil), // 17: arrow.flight.protocol.Ticket - (*FlightData)(nil), // 18: arrow.flight.protocol.FlightData - (*PutResult)(nil), // 19: arrow.flight.protocol.PutResult - (*timestamppb.Timestamp)(nil), // 20: google.protobuf.Timestamp + (*CancelFlightInfoRequest)(nil), // 9: arrow.flight.protocol.CancelFlightInfoRequest + (*RenewFlightEndpointRequest)(nil), // 10: arrow.flight.protocol.RenewFlightEndpointRequest + (*Result)(nil), // 11: arrow.flight.protocol.Result + (*CancelFlightInfoResult)(nil), // 12: arrow.flight.protocol.CancelFlightInfoResult + (*SchemaResult)(nil), // 13: arrow.flight.protocol.SchemaResult + (*FlightDescriptor)(nil), // 14: arrow.flight.protocol.FlightDescriptor + (*FlightInfo)(nil), // 15: arrow.flight.protocol.FlightInfo + (*FlightEndpoint)(nil), // 16: arrow.flight.protocol.FlightEndpoint + (*Location)(nil), // 17: arrow.flight.protocol.Location + (*Ticket)(nil), // 18: arrow.flight.protocol.Ticket + (*FlightData)(nil), // 19: arrow.flight.protocol.FlightData + (*PutResult)(nil), // 20: arrow.flight.protocol.PutResult + (*timestamppb.Timestamp)(nil), // 21: google.protobuf.Timestamp } var file_Flight_proto_depIdxs = []int32{ - 15, // 0: arrow.flight.protocol.RenewFlightEndpointRequest.endpoint:type_name -> arrow.flight.protocol.FlightEndpoint - 0, // 1: arrow.flight.protocol.CancelFlightInfoResult.status:type_name -> arrow.flight.protocol.CancelStatus - 1, // 2: arrow.flight.protocol.FlightDescriptor.type:type_name -> arrow.flight.protocol.FlightDescriptor.DescriptorType - 13, // 3: arrow.flight.protocol.FlightInfo.flight_descriptor:type_name -> arrow.flight.protocol.FlightDescriptor - 15, // 4: arrow.flight.protocol.FlightInfo.endpoint:type_name -> arrow.flight.protocol.FlightEndpoint - 17, // 5: arrow.flight.protocol.FlightEndpoint.ticket:type_name -> arrow.flight.protocol.Ticket - 16, // 6: arrow.flight.protocol.FlightEndpoint.location:type_name -> arrow.flight.protocol.Location - 20, // 7: arrow.flight.protocol.FlightEndpoint.expiration_time:type_name -> google.protobuf.Timestamp - 13, // 8: arrow.flight.protocol.FlightData.flight_descriptor:type_name -> arrow.flight.protocol.FlightDescriptor - 2, // 9: arrow.flight.protocol.FlightService.Handshake:input_type -> arrow.flight.protocol.HandshakeRequest - 7, // 10: arrow.flight.protocol.FlightService.ListFlights:input_type -> arrow.flight.protocol.Criteria - 13, // 11: arrow.flight.protocol.FlightService.GetFlightInfo:input_type -> arrow.flight.protocol.FlightDescriptor - 13, // 12: arrow.flight.protocol.FlightService.GetSchema:input_type -> arrow.flight.protocol.FlightDescriptor - 17, // 13: arrow.flight.protocol.FlightService.DoGet:input_type -> arrow.flight.protocol.Ticket - 18, // 14: arrow.flight.protocol.FlightService.DoPut:input_type -> arrow.flight.protocol.FlightData - 18, // 15: arrow.flight.protocol.FlightService.DoExchange:input_type -> arrow.flight.protocol.FlightData - 8, // 16: arrow.flight.protocol.FlightService.DoAction:input_type -> arrow.flight.protocol.Action - 5, // 17: arrow.flight.protocol.FlightService.ListActions:input_type -> arrow.flight.protocol.Empty - 3, // 18: arrow.flight.protocol.FlightService.Handshake:output_type -> arrow.flight.protocol.HandshakeResponse - 14, // 19: arrow.flight.protocol.FlightService.ListFlights:output_type -> arrow.flight.protocol.FlightInfo - 14, // 20: arrow.flight.protocol.FlightService.GetFlightInfo:output_type -> arrow.flight.protocol.FlightInfo - 12, // 21: arrow.flight.protocol.FlightService.GetSchema:output_type -> arrow.flight.protocol.SchemaResult - 18, // 22: arrow.flight.protocol.FlightService.DoGet:output_type -> arrow.flight.protocol.FlightData - 19, // 23: arrow.flight.protocol.FlightService.DoPut:output_type -> arrow.flight.protocol.PutResult - 18, // 24: arrow.flight.protocol.FlightService.DoExchange:output_type -> arrow.flight.protocol.FlightData - 10, // 25: arrow.flight.protocol.FlightService.DoAction:output_type -> arrow.flight.protocol.Result - 6, // 26: arrow.flight.protocol.FlightService.ListActions:output_type -> arrow.flight.protocol.ActionType - 18, // [18:27] is the sub-list for method output_type - 9, // [9:18] is the sub-list for method input_type - 9, // [9:9] is the sub-list for extension type_name - 9, // [9:9] is the sub-list for extension extendee - 0, // [0:9] is the sub-list for field type_name + 15, // 0: arrow.flight.protocol.CancelFlightInfoRequest.info:type_name -> arrow.flight.protocol.FlightInfo + 16, // 1: arrow.flight.protocol.RenewFlightEndpointRequest.endpoint:type_name -> arrow.flight.protocol.FlightEndpoint + 0, // 2: arrow.flight.protocol.CancelFlightInfoResult.status:type_name -> arrow.flight.protocol.CancelStatus + 1, // 3: arrow.flight.protocol.FlightDescriptor.type:type_name -> arrow.flight.protocol.FlightDescriptor.DescriptorType + 14, // 4: arrow.flight.protocol.FlightInfo.flight_descriptor:type_name -> arrow.flight.protocol.FlightDescriptor + 16, // 5: arrow.flight.protocol.FlightInfo.endpoint:type_name -> arrow.flight.protocol.FlightEndpoint + 18, // 6: arrow.flight.protocol.FlightEndpoint.ticket:type_name -> arrow.flight.protocol.Ticket + 17, // 7: arrow.flight.protocol.FlightEndpoint.location:type_name -> arrow.flight.protocol.Location + 21, // 8: arrow.flight.protocol.FlightEndpoint.expiration_time:type_name -> google.protobuf.Timestamp + 14, // 9: arrow.flight.protocol.FlightData.flight_descriptor:type_name -> arrow.flight.protocol.FlightDescriptor + 2, // 10: arrow.flight.protocol.FlightService.Handshake:input_type -> arrow.flight.protocol.HandshakeRequest + 7, // 11: arrow.flight.protocol.FlightService.ListFlights:input_type -> arrow.flight.protocol.Criteria + 14, // 12: arrow.flight.protocol.FlightService.GetFlightInfo:input_type -> arrow.flight.protocol.FlightDescriptor + 14, // 13: arrow.flight.protocol.FlightService.GetSchema:input_type -> arrow.flight.protocol.FlightDescriptor + 18, // 14: arrow.flight.protocol.FlightService.DoGet:input_type -> arrow.flight.protocol.Ticket + 19, // 15: arrow.flight.protocol.FlightService.DoPut:input_type -> arrow.flight.protocol.FlightData + 19, // 16: arrow.flight.protocol.FlightService.DoExchange:input_type -> arrow.flight.protocol.FlightData + 8, // 17: arrow.flight.protocol.FlightService.DoAction:input_type -> arrow.flight.protocol.Action + 5, // 18: arrow.flight.protocol.FlightService.ListActions:input_type -> arrow.flight.protocol.Empty + 3, // 19: arrow.flight.protocol.FlightService.Handshake:output_type -> arrow.flight.protocol.HandshakeResponse + 15, // 20: arrow.flight.protocol.FlightService.ListFlights:output_type -> arrow.flight.protocol.FlightInfo + 15, // 21: arrow.flight.protocol.FlightService.GetFlightInfo:output_type -> arrow.flight.protocol.FlightInfo + 13, // 22: arrow.flight.protocol.FlightService.GetSchema:output_type -> arrow.flight.protocol.SchemaResult + 19, // 23: arrow.flight.protocol.FlightService.DoGet:output_type -> arrow.flight.protocol.FlightData + 20, // 24: arrow.flight.protocol.FlightService.DoPut:output_type -> arrow.flight.protocol.PutResult + 19, // 25: arrow.flight.protocol.FlightService.DoExchange:output_type -> arrow.flight.protocol.FlightData + 11, // 26: arrow.flight.protocol.FlightService.DoAction:output_type -> arrow.flight.protocol.Result + 6, // 27: arrow.flight.protocol.FlightService.ListActions:output_type -> arrow.flight.protocol.ActionType + 19, // [19:28] is the sub-list for method output_type + 10, // [10:19] is the sub-list for method input_type + 10, // [10:10] is the sub-list for extension type_name + 10, // [10:10] is the sub-list for extension extendee + 0, // [0:10] is the sub-list for field type_name } func init() { file_Flight_proto_init() } @@ -1574,7 +1631,7 @@ func file_Flight_proto_init() { } } file_Flight_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RenewFlightEndpointRequest); i { + switch v := v.(*CancelFlightInfoRequest); i { case 0: return &v.state case 1: @@ -1586,7 +1643,7 @@ func file_Flight_proto_init() { } } file_Flight_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Result); i { + switch v := v.(*RenewFlightEndpointRequest); i { case 0: return &v.state case 1: @@ -1598,7 +1655,7 @@ func file_Flight_proto_init() { } } file_Flight_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CancelFlightInfoResult); i { + switch v := v.(*Result); i { case 0: return &v.state case 1: @@ -1610,7 +1667,7 @@ func file_Flight_proto_init() { } } file_Flight_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SchemaResult); i { + switch v := v.(*CancelFlightInfoResult); i { case 0: return &v.state case 1: @@ -1622,7 +1679,7 @@ func file_Flight_proto_init() { } } file_Flight_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FlightDescriptor); i { + switch v := v.(*SchemaResult); i { case 0: return &v.state case 1: @@ -1634,7 +1691,7 @@ func file_Flight_proto_init() { } } file_Flight_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FlightInfo); i { + switch v := v.(*FlightDescriptor); i { case 0: return &v.state case 1: @@ -1646,7 +1703,7 @@ func file_Flight_proto_init() { } } file_Flight_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FlightEndpoint); i { + switch v := v.(*FlightInfo); i { case 0: return &v.state case 1: @@ -1658,7 +1715,7 @@ func file_Flight_proto_init() { } } file_Flight_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Location); i { + switch v := v.(*FlightEndpoint); i { case 0: return &v.state case 1: @@ -1670,7 +1727,7 @@ func file_Flight_proto_init() { } } file_Flight_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Ticket); i { + switch v := v.(*Location); i { case 0: return &v.state case 1: @@ -1682,7 +1739,7 @@ func file_Flight_proto_init() { } } file_Flight_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FlightData); i { + switch v := v.(*Ticket); i { case 0: return &v.state case 1: @@ -1694,6 +1751,18 @@ func file_Flight_proto_init() { } } file_Flight_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*FlightData); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_Flight_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PutResult); i { case 0: return &v.state @@ -1712,7 +1781,7 @@ func file_Flight_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_Flight_proto_rawDesc, NumEnums: 2, - NumMessages: 18, + NumMessages: 19, NumExtensions: 0, NumServices: 1, }, diff --git a/go/arrow/flight/server.go b/go/arrow/flight/server.go index 6bfa24504e70c..b469f069be94a 100644 --- a/go/arrow/flight/server.go +++ b/go/arrow/flight/server.go @@ -48,6 +48,7 @@ type ( SchemaResult = flight.SchemaResult Action = flight.Action ActionType = flight.ActionType + CancelFlightInfoRequest = flight.CancelFlightInfoRequest RenewFlightEndpointRequest = flight.RenewFlightEndpointRequest Result = flight.Result CancelFlightInfoResult = flight.CancelFlightInfoResult diff --git a/go/arrow/internal/flight_integration/scenario.go b/go/arrow/internal/flight_integration/scenario.go index e6ce1f5841a01..12a1754e5bfe1 100644 --- a/go/arrow/internal/flight_integration/scenario.go +++ b/go/arrow/internal/flight_integration/scenario.go @@ -851,13 +851,13 @@ func packActionResult(msg proto.Message) (*flight.Result, error) { func (tester *expirationTimeScenarioTester) DoAction(cmd *flight.Action, stream flight.FlightService_DoActionServer) error { switch cmd.Type { case flight.CancelFlightInfoActionType: - var info flight.FlightInfo - if err := proto.Unmarshal(cmd.Body, &info); err != nil { + var request flight.CancelFlightInfoRequest + if err := proto.Unmarshal(cmd.Body, &request); err != nil { return status.Errorf(codes.InvalidArgument, "unable to parse command: %s", err.Error()) } cancelStatus := flight.CancelStatusUnspecified - for _, ep := range info.Endpoint { + for _, ep := range request.Info.Endpoint { ticket := string(ep.Ticket.Ticket) index, err := tester.ExtractIndexFromTicket(ticket) if err == nil { @@ -1092,7 +1092,8 @@ func (tester *expirationTimeCancelFlightInfoScenarioTester) RunClient(addr strin return err } - result, err := client.CancelFlightInfo(ctx, info) + request := flight.CancelFlightInfoRequest{Info: info} + result, err := client.CancelFlightInfo(ctx, &request) if err != nil && !errors.Is(err, io.EOF) { return err } @@ -2012,13 +2013,13 @@ func (m *flightSqlScenarioTester) BeginTransaction(context.Context, flightsql.Ac return []byte(transactionID), nil } -func (m *flightSqlScenarioTester) CancelFlightInfo(_ context.Context, info *flight.FlightInfo) (flight.CancelFlightInfoResult, error) { +func (m *flightSqlScenarioTester) CancelFlightInfo(_ context.Context, request *flight.CancelFlightInfoRequest) (flight.CancelFlightInfoResult, error) { result := flight.CancelFlightInfoResult{Status: flight.CancelStatusUnspecified} - if err := assertEq(1, len(info.Endpoint)); err != nil { + if err := assertEq(1, len(request.Info.Endpoint)); err != nil { return result, fmt.Errorf("%w: expected 1 endpoint for CancelQuery", err) } - endpoint := info.Endpoint[0] + endpoint := request.Info.Endpoint[0] tkt, err := flightsql.GetStatementQueryTicket(endpoint.Ticket) if err != nil { return result, err