LCOV - code coverage report
Current view: top level - source/server - null_overload_manager.h (source / functions) Hit Total Coverage
Test: coverage.dat Lines: 12 34 35.3 %
Date: 2024-01-05 06:35:25 Functions: 7 15 46.7 %

          Line data    Source code
       1             : #pragma once
       2             : 
       3             : #include "envoy/server/overload/overload_manager.h"
       4             : 
       5             : #include "source/common/event/scaled_range_timer_manager_impl.h"
       6             : 
       7             : namespace Envoy {
       8             : namespace Server {
       9             : 
      10             : /** Implementation of OverloadManager that is never overloaded. Using this instead of the real
      11             :  *  OverloadManager keeps the admin interface accessible even when the proxy is overloaded.
      12             :  */
      13             : class NullOverloadManager : public OverloadManager {
      14             : public:
      15             :   struct OverloadState : public ThreadLocalOverloadState {
      16             :     OverloadState(Event::Dispatcher& dispatcher, bool permissive)
      17         192 :         : dispatcher_(dispatcher), permissive_(permissive) {}
      18         196 :     const OverloadActionState& getState(const std::string&) override { return inactive_; }
      19           0 :     bool tryAllocateResource(OverloadProactiveResourceName, int64_t) override {
      20           0 :       return permissive_;
      21           0 :     }
      22           0 :     bool tryDeallocateResource(OverloadProactiveResourceName, int64_t) override {
      23           0 :       return permissive_;
      24           0 :     }
      25           0 :     bool isResourceMonitorEnabled(OverloadProactiveResourceName) override { return false; }
      26             :     ProactiveResourceMonitorOptRef
      27           0 :     getProactiveResourceMonitorForTest(OverloadProactiveResourceName) override {
      28           0 :       return makeOptRefFromPtr<ProactiveResourceMonitor>(nullptr);
      29           0 :     }
      30             :     Event::Dispatcher& dispatcher_;
      31             :     const bool permissive_;
      32             :     const OverloadActionState inactive_ = OverloadActionState::inactive();
      33             :   };
      34             : 
      35             :   NullOverloadManager(ThreadLocal::SlotAllocator& slot_allocator, bool permissive)
      36         134 :       : tls_(slot_allocator.allocateSlot()), permissive_(permissive) {}
      37             : 
      38          98 :   void start() override {
      39         192 :     tls_->set([this](Event::Dispatcher& dispatcher) -> ThreadLocal::ThreadLocalObjectSharedPtr {
      40         192 :       return std::make_shared<OverloadState>(dispatcher, permissive_);
      41         192 :     });
      42          98 :   }
      43             : 
      44          98 :   ThreadLocalOverloadState& getThreadLocalOverloadState() override {
      45          98 :     return tls_->getTyped<OverloadState>();
      46          98 :   }
      47             : 
      48         196 :   LoadShedPoint* getLoadShedPoint(absl::string_view) override { return nullptr; }
      49             : 
      50           0 :   Event::ScaledRangeTimerManagerFactory scaledTimerFactory() override {
      51           0 :     if (!permissive_) {
      52           0 :       return nullptr;
      53           0 :     }
      54           0 :     return [](Event::Dispatcher& dispatcher) {
      55           0 :       return std::make_unique<Event::ScaledRangeTimerManagerImpl>(dispatcher, nullptr);
      56           0 :     };
      57           0 :   }
      58             : 
      59           0 :   bool registerForAction(const std::string&, Event::Dispatcher&, OverloadActionCb) override {
      60           0 :     return true;
      61           0 :   }
      62           0 :   void stop() override {}
      63             : 
      64             :   ThreadLocal::SlotPtr tls_;
      65             :   // The admin code runs in non-permissive mode, rejecting connections and
      66             :   // ensuring timer code is not called. Envoy mobile uses permissive mode and
      67             :   // does the opposite.
      68             :   const bool permissive_;
      69             : };
      70             : 
      71             : } // namespace Server
      72             : } // namespace Envoy

Generated by: LCOV version 1.15