LCOV - code coverage report
Current view: top level - source/common/http - http3_status_tracker_impl.cc (source / functions) Hit Total Coverage
Test: coverage.dat Lines: 0 32 0.0 %
Date: 2024-01-05 06:35:25 Functions: 0 9 0.0 %

          Line data    Source code
       1             : #include "source/common/http/http3_status_tracker_impl.h"
       2             : 
       3             : namespace Envoy {
       4             : namespace Http {
       5             : 
       6             : namespace {
       7             : 
       8             : // Initially, HTTP/3 is be marked broken for 5 minutes.
       9             : const std::chrono::minutes DefaultExpirationTime{5};
      10             : // Cap the broken period at just under 1 day.
      11             : const int MaxConsecutiveBrokenCount = 8;
      12             : } // namespace
      13             : 
      14             : Http3StatusTrackerImpl::Http3StatusTrackerImpl(Event::Dispatcher& dispatcher)
      15           0 :     : expiration_timer_(dispatcher.createTimer([this]() -> void { onExpirationTimeout(); })) {}
      16             : 
      17           0 : bool Http3StatusTrackerImpl::isHttp3Broken() const { return state_ == State::Broken; }
      18             : 
      19           0 : bool Http3StatusTrackerImpl::isHttp3Confirmed() const { return state_ == State::Confirmed; }
      20             : 
      21           0 : bool Http3StatusTrackerImpl::hasHttp3FailedRecently() const {
      22           0 :   return state_ == State::FailedRecently;
      23           0 : }
      24             : 
      25           0 : void Http3StatusTrackerImpl::markHttp3Broken() {
      26           0 :   state_ = State::Broken;
      27           0 :   if (!expiration_timer_->enabled()) {
      28           0 :     std::chrono::minutes expiration_in_min =
      29           0 :         DefaultExpirationTime * (1 << consecutive_broken_count_);
      30           0 :     expiration_timer_->enableTimer(
      31           0 :         std::chrono::duration_cast<std::chrono::milliseconds>(expiration_in_min));
      32           0 :     if (consecutive_broken_count_ < MaxConsecutiveBrokenCount) {
      33           0 :       ++consecutive_broken_count_;
      34           0 :     }
      35           0 :   }
      36           0 : }
      37             : 
      38           0 : void Http3StatusTrackerImpl::markHttp3Confirmed() {
      39           0 :   state_ = State::Confirmed;
      40           0 :   consecutive_broken_count_ = 0;
      41           0 :   if (expiration_timer_->enabled()) {
      42           0 :     expiration_timer_->disableTimer();
      43           0 :   }
      44           0 : }
      45             : 
      46           0 : void Http3StatusTrackerImpl::markHttp3FailedRecently() { state_ = State::FailedRecently; }
      47             : 
      48           0 : void Http3StatusTrackerImpl::onExpirationTimeout() {
      49           0 :   if (state_ != State::Broken) {
      50           0 :     return;
      51           0 :   }
      52           0 :   state_ = State::FailedRecently;
      53           0 : }
      54             : 
      55             : } // namespace Http
      56             : } // namespace Envoy

Generated by: LCOV version 1.15