Store schema_ptr in reader permit instead of storing a const pointer to schema to ensure that the schema doesn't get changed elsewhere when the permit is holding on to it. Also update the constructors and all the relevant callers to pass down schema_ptr instead of a raw pointer. Fixes #16180 Signed-off-by: Lakshmi Narayanan Sreethar <lakshmi.sreethar@scylladb.com> Closes scylladb/scylladb#16658
34 lines
956 B
C++
34 lines
956 B
C++
/*
|
|
* Copyright (C) 2021-present ScyllaDB
|
|
*/
|
|
|
|
/*
|
|
* SPDX-License-Identifier: AGPL-3.0-or-later
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include "../../reader_concurrency_semaphore.hh"
|
|
#include "schema/schema.hh"
|
|
|
|
namespace tests {
|
|
|
|
// Must be used in a seastar thread.
|
|
class reader_concurrency_semaphore_wrapper {
|
|
std::unique_ptr<::reader_concurrency_semaphore> _semaphore;
|
|
|
|
public:
|
|
reader_concurrency_semaphore_wrapper(const char* name = nullptr)
|
|
: _semaphore(std::make_unique<::reader_concurrency_semaphore>(::reader_concurrency_semaphore::no_limits{}, name ? name : "test",
|
|
reader_concurrency_semaphore::register_metrics::no))
|
|
{ }
|
|
~reader_concurrency_semaphore_wrapper() {
|
|
_semaphore->stop().get();
|
|
}
|
|
|
|
reader_concurrency_semaphore& semaphore() { return *_semaphore; };
|
|
reader_permit make_permit() { return _semaphore->make_tracking_only_permit(nullptr, "test", db::no_timeout, {}); }
|
|
};
|
|
|
|
} // namespace tests
|