/proc/self/cwd/source/extensions/filters/network/thrift_proxy/router/upstream_request.h
Line | Count | Source (jump to first uncovered line) |
1 | | #pragma once |
2 | | |
3 | | #include "envoy/common/time.h" |
4 | | #include "envoy/tcp/conn_pool.h" |
5 | | |
6 | | #include "source/common/common/logger.h" |
7 | | #include "source/extensions/filters/network/thrift_proxy/decoder_events.h" |
8 | | #include "source/extensions/filters/network/thrift_proxy/filters/filter.h" |
9 | | #include "source/extensions/filters/network/thrift_proxy/metadata.h" |
10 | | #include "source/extensions/filters/network/thrift_proxy/router/router.h" |
11 | | #include "source/extensions/filters/network/thrift_proxy/thrift.h" |
12 | | |
13 | | namespace Envoy { |
14 | | namespace Extensions { |
15 | | namespace NetworkFilters { |
16 | | namespace ThriftProxy { |
17 | | namespace Router { |
18 | | |
19 | | class UpstreamResponseCallbacks { |
20 | | public: |
21 | 0 | virtual ~UpstreamResponseCallbacks() = default; |
22 | | |
23 | | virtual void startUpstreamResponse(Transport& transport, Protocol& protocol) PURE; |
24 | | virtual ThriftFilters::ResponseStatus upstreamData(Buffer::Instance& buffer) PURE; |
25 | | virtual MessageMetadataSharedPtr responseMetadata() PURE; |
26 | | virtual bool responseSuccess() PURE; |
27 | | }; |
28 | | |
29 | | struct UpstreamRequest : public Tcp::ConnectionPool::Callbacks, |
30 | | Logger::Loggable<Logger::Id::thrift> { |
31 | | UpstreamRequest(RequestOwner& parent, Upstream::TcpPoolData& pool_data, |
32 | | MessageMetadataSharedPtr& metadata, TransportType transport_type, |
33 | | ProtocolType protocol_type, bool close_downstream_on_error); |
34 | | ~UpstreamRequest() override; |
35 | | |
36 | | FilterStatus start(); |
37 | | void resetStream(); |
38 | | void releaseConnection(bool close); |
39 | | |
40 | | // Tcp::ConnectionPool::Callbacks |
41 | | void onPoolFailure(ConnectionPool::PoolFailureReason reason, |
42 | | absl::string_view transport_failure_reason, |
43 | | Upstream::HostDescriptionConstSharedPtr host) override; |
44 | | void onPoolReady(Tcp::ConnectionPool::ConnectionDataPtr&& conn, |
45 | | Upstream::HostDescriptionConstSharedPtr host) override; |
46 | | |
47 | | bool handleUpstreamData(Buffer::Instance& data, bool end_stream, |
48 | | UpstreamResponseCallbacks& callbacks); |
49 | | void handleUpgradeResponse(Buffer::Instance& data); |
50 | | ThriftFilters::ResponseStatus handleRegularResponse(Buffer::Instance& data, |
51 | | UpstreamResponseCallbacks& callbacks); |
52 | | uint64_t encodeAndWrite(Buffer::OwnedImpl& request_buffer); |
53 | | void onEvent(Network::ConnectionEvent event); |
54 | | void onRequestStart(bool continue_decoding); |
55 | | void onRequestComplete(); |
56 | | void onResponseComplete(); |
57 | | void onUpstreamHostSelected(Upstream::HostDescriptionConstSharedPtr host); |
58 | | bool onResetStream(ConnectionPool::PoolFailureReason reason); |
59 | | void chargeResponseTiming(); |
60 | | |
61 | | RequestOwner& parent_; |
62 | | const RouterStats& stats_; |
63 | | Upstream::TcpPoolData& conn_pool_data_; |
64 | | MessageMetadataSharedPtr metadata_; |
65 | | |
66 | | Tcp::ConnectionPool::Cancellable* conn_pool_handle_{}; |
67 | | Tcp::ConnectionPool::ConnectionDataPtr conn_data_; |
68 | | Upstream::HostDescriptionConstSharedPtr upstream_host_; |
69 | | ThriftConnectionState* conn_state_{}; |
70 | | TransportPtr transport_; |
71 | | ProtocolPtr protocol_; |
72 | | ThriftObjectPtr upgrade_response_; |
73 | | |
74 | | enum class ResponseState : uint8_t { |
75 | | None = 0, |
76 | | Started = 1, |
77 | | Completed = 2, |
78 | | ConnectionReleased = 3 |
79 | | }; |
80 | | |
81 | | ResponseState response_state_{ResponseState::None}; |
82 | | bool request_complete_ : 1; |
83 | | bool response_underflow_ : 1; |
84 | | bool charged_response_timing_ : 1; |
85 | | bool close_downstream_on_error_ : 1; |
86 | | |
87 | | absl::optional<MonotonicTime> downstream_request_complete_time_; |
88 | | uint64_t response_size_{}; |
89 | | }; |
90 | | |
91 | | } // namespace Router |
92 | | } // namespace ThriftProxy |
93 | | } // namespace NetworkFilters |
94 | | } // namespace Extensions |
95 | | } // namespace Envoy |