24 #include <seastar/core/sharded.hh>
25 #include <seastar/core/internal/pollable_fd.hh>
26 #include <seastar/net/stack.hh>
27 #include <seastar/core/polymorphic_temporary_buffer.hh>
28 #include <seastar/core/internal/buffer_allocator.hh>
29 #include <seastar/util/program-options.hh>
44 std::vector<unsigned> _cpu_load;
46 load_balancer() : _cpu_load(
size_t(smp::count), 0) {}
47 void closed_cpu(shard_id cpu) {
54 auto min_el = std::min_element(_cpu_load.begin(), _cpu_load.end());
55 auto cpu = shard_id(std::distance(_cpu_load.begin(), min_el));
59 shard_id force_cpu(shard_id cpu) {
66 void closed_cpu(shard_id cpu) {
79 , _lb(make_foreign(std::move(lb))) {}
88 (void)
smp::submit_to(_host_cpu, [cpu = _target_cpu, lb = std::move(_lb)] {
98 conntrack() : _lb(make_lw_shared<load_balancer>()) {}
100 return handle(_lb->next_cpu(), _lb);
102 handle get_handle(shard_id cpu) {
103 return handle(_lb->force_cpu(cpu), _lb);
108 std::pmr::polymorphic_allocator<char>* _buffer_allocator;
115 std::pmr::polymorphic_allocator<char>* allocator=memory::malloc_allocator)
116 : _buffer_allocator(allocator), _fd(std::move(fd)), _config(config) {
127 using data_sink_impl::put;
131 bool can_batch_flushes()
const noexcept
override {
return true; }
132 void on_batch_flush_error() noexcept
override;
136 using protocol_and_socket_address = std::tuple<int, socket_address>;
143 using sockets_map_t = std::unordered_map<protocol_and_socket_address, promise<accept_result>>;
144 using conn_map_t = std::unordered_multimap<protocol_and_socket_address, connection>;
145 static thread_local sockets_map_t sockets;
146 static thread_local conn_map_t conn_q;
149 std::pmr::polymorphic_allocator<char>* _allocator;
151 explicit posix_ap_server_socket_impl(
int protocol,
socket_address sa, std::pmr::polymorphic_allocator<char>* allocator = memory::malloc_allocator) : _protocol(protocol), _sa(sa), _allocator(allocator) {}
153 virtual void abort_accept()
override;
159 template <
typename T>
160 friend class std::hash;
168 server_socket::load_balancing_algorithm _lba;
170 std::pmr::polymorphic_allocator<char>* _allocator;
173 server_socket::load_balancing_algorithm lba, shard_id fixed_cpu,
174 std::pmr::polymorphic_allocator<char>* allocator=memory::malloc_allocator) : _sa(sa), _protocol(protocol), _lfd(std::move(lfd)), _lba(lba), _fixed_cpu(fixed_cpu), _allocator(allocator) {}
176 virtual void abort_accept()
override;
184 std::pmr::polymorphic_allocator<char>* _allocator;
187 std::pmr::polymorphic_allocator<char>* allocator=memory::malloc_allocator) : _sa(sa), _protocol(protocol), _lfd(std::move(lfd)), _allocator(allocator) {}
189 virtual void abort_accept()
override;
195 const bool _reuseport;
197 std::pmr::polymorphic_allocator<char>* _allocator;
201 virtual ::seastar::socket
socket()
override;
206 return make_ready_future<std::unique_ptr<network_stack>>(std::unique_ptr<network_stack>(
new posix_network_stack(opts, allocator)));
208 virtual bool has_per_core_namespace()
override {
return _reuseport; };
209 bool supports_ipv6()
const override;
215 const bool _reuseport;
220 return make_ready_future<std::unique_ptr<network_stack>>(std::unique_ptr<network_stack>(
new posix_ap_network_stack(opts, allocator)));
Definition: iostream.hh:103
Definition: iostream.hh:60
Definition: sharded.hh:845
A representation of a possibly not-yet-computed value.
Definition: future.hh:1238
Definition: posix-stack.hh:70
Definition: posix-stack.hh:42
Definition: posix-stack.hh:213
Definition: posix-stack.hh:135
Definition: posix-stack.hh:122
Definition: posix-stack.hh:107
Definition: posix-stack.hh:193
std::vector< network_interface > network_interfaces() override
Definition: posix-stack.hh:180
Definition: posix-stack.hh:163
Definition: pollable_fd.hh:137
Definition: program-options.hh:290
A listening socket, waiting to accept incoming network connections.
Definition: api.hh:325
static futurize_t< std::invoke_result_t< Func > > submit_to(unsigned t, smp_submit_to_options options, Func &&func) noexcept
Definition: smp.hh:354
Definition: socket_defs.hh:47
server_socket listen(socket_address sa)
net::udp_channel make_udp_channel()
net::datagram_channel make_unbound_datagram_channel(sa_family_t family)
net::datagram_channel make_bound_datagram_channel(const socket_address &local)
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
SEASTAR_MODULE_EXPORT_BEGIN shard_id this_shard_id() noexcept
Returns shard_id of the of the current shard.
Definition: shard_id.hh:50