1
#pragma once
2

            
3
#include "envoy/common/io/io_uring.h"
4
#include "envoy/thread_local/thread_local.h"
5

            
6
namespace Envoy {
7
namespace Io {
8

            
9
class IoUringWorkerFactoryImpl : public IoUringWorkerFactory {
10
public:
11
  IoUringWorkerFactoryImpl(uint32_t io_uring_size, bool use_submission_queue_polling,
12
                           uint32_t read_buffer_size, uint32_t write_timeout_ms,
13
                           ThreadLocal::SlotAllocator& tls);
14

            
15
  OptRef<IoUringWorker> getIoUringWorker() override;
16

            
17
  void onWorkerThreadInitialized() override;
18
  bool currentThreadRegistered() override;
19

            
20
private:
21
  const uint32_t io_uring_size_;
22
  const bool use_submission_queue_polling_;
23
  const uint32_t read_buffer_size_;
24
  const uint32_t write_timeout_ms_;
25
  ThreadLocal::TypedSlot<IoUringWorker> tls_;
26
};
27

            
28
} // namespace Io
29
} // namespace Envoy