Files
scylladb/test/boost/generic_server_test.cc
Sergey Zolotukhin 44853b3bec generic_server: Two-step connection shutdown.
When shutting down in `generic_server`, connections are now closed in two steps.
First, only the RX (receive) side is shut down. Then, after all ongoing requests
are completed, or a timeout happened the connections are fully closed.

Fixes scylladb/scylladb#24481

(cherry picked from commit ea311be12b)
2025-08-15 18:20:42 +02:00

40 lines
1.3 KiB
C++

/*
* Copyright (C) 2024-present ScyllaDB
*/
/*
* SPDX-License-Identifier: LicenseRef-ScyllaDB-Source-Available-1.0
*/
#include <chrono>
#include <seastar/core/lowres_clock.hh>
#include <seastar/core/with_timeout.hh>
#include <seastar/testing/test_case.hh>
#include <seastar/util/log.hh>
#include "generic_server.hh"
#include "utils/assert.hh"
using namespace generic_server;
using namespace logging;
using namespace seastar;
using namespace std::literals::chrono_literals;
static logger test_logger("test_server");
class test_server : public server {
public:
test_server(const utils::updateable_value_source<uint32_t>& c) : server("test_server", test_logger, config{.uninitialized_connections_semaphore_cpu_concurrency = utils::updateable_value<uint32_t>(c),.shutdown_timeout_in_seconds= utils::updateable_value<uint32_t>(30)}) {};
protected:
[[noreturn]] shared_ptr<connection> make_connection(socket_address, connected_socket&&, socket_address, named_semaphore& sem, semaphore_units<named_semaphore_exception_factory> initial_sem_units) override {
SCYLLA_ASSERT(false);
}
};
SEASTAR_TEST_CASE(stop_without_listening) {
utils::updateable_value_source<uint32_t> concurrency(1);
test_server srv(concurrency);
co_await with_timeout(lowres_clock::now() + 5min, srv.stop());
co_return;
}