Coverage Report

Created: 2023-11-12 09:30

/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