1
0
mirror of https://github.com/facebook/rocksdb.git synced 2026-10-23 08:09:02 +03:00
Files
rocksdb/util/threadpool_imp.h
Josh Kang da82001d81 Mark overriding methods and destructors override (#15366)
Summary:
Pull Request resolved: https://github.com/facebook/rocksdb/pull/15366

## Summary

RocksDB's `.clang-tidy` enables `modernize-use-override`, and clang
reports `-Winconsistent-missing-destructor-override` when a class marks
its other overrides `override` but not its destructor. A full scan finds
190 `modernize-use-override`, 100
`inconsistent-missing-destructor-override` and 2 `suggest-override`
findings in existing code. Each one comes back whenever a nearby line is
edited. They also leave classes where it isn't obvious which methods are
overrides and which introduce new virtuals.

This diff marks every overriding member function and destructor
`override` and drops the redundant `virtual` on them. It also changes
`final override` to plain `final`, following the check's default. Methods
that introduce a new virtual keep `virtual`. Most edits are clang-tidy's
own fix-its, applied mechanically and then clang-formatted.

Compatibility: no signatures change. In public headers the only effect is
`override` on existing overrides (mostly destructors, plus
`Cache::Name()` and `Cache::GetPrintableOptions()`, whose base
declarations are unconditional), so user code that subclasses these types
is unaffected. Every touched class now marks all of its overrides
consistently. This matters because a partially-marked class would make
clang emit `-Winconsistent-missing-override` in user builds.

Reviewed By: rban1

Differential Revision: D123186308

fbshipit-source-id: 1f489ea32d938e3ec0faf9abc4f7ff49e042d37a
2026-10-09 14:39:14 -07:00

121 lines
4.0 KiB
C++

// Copyright (c) 2011-present, Facebook, Inc. All rights reserved.
// This source code is licensed under both the GPLv2 (found in the
// COPYING file in the root directory) and Apache 2.0 License
// (found in the LICENSE.Apache file in the root directory).
//
// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. See the AUTHORS file for names of contributors.
#pragma once
#include <functional>
#include <memory>
#include "rocksdb/env.h"
#include "rocksdb/threadpool.h"
namespace ROCKSDB_NAMESPACE {
class ThreadPoolImpl : public ThreadPool {
public:
ThreadPoolImpl();
~ThreadPoolImpl() override;
ThreadPoolImpl(ThreadPoolImpl&&) = delete;
ThreadPoolImpl& operator=(ThreadPoolImpl&&) = delete;
// Implement ThreadPool interfaces
// Wait for all threads to finish.
// Discards all the jobs that did not
// start executing and waits for those running
// to complete
void JoinAllThreads() override;
// Set the number of background threads that will be executing the
// scheduled jobs.
void SetBackgroundThreads(int num) override;
int GetBackgroundThreads() override;
// Get the number of jobs scheduled in the ThreadPool queue.
unsigned int GetQueueLen() const override;
// Waits for all jobs to complete those
// that already started running and those that did not
// start yet
void WaitForJobsAndJoinAllThreads() override;
// Make threads to run at a lower kernel IO priority
// Currently only has effect on Linux
void LowerIOPriority();
// Make threads to run at a lower kernel CPU priority
// Currently only has effect on Linux
void LowerCPUPriority(CpuPriority pri);
// Ensure there is at aleast num threads in the pool
// but do not kill threads if there are more
void IncBackgroundThreadsIfNeeded(int num);
// Submit a fire and forget job
// These jobs can not be unscheduled
// This allows to submit the same job multiple times
void SubmitJob(const std::function<void()>&) override;
// This moves the function in for efficiency
void SubmitJob(std::function<void()>&&) override;
// Schedule a job with an unschedule tag and unschedule function
// Can be used to filter and unschedule jobs by a tag
// that are still in the queue and did not start running
void Schedule(void (*function)(void* arg1), void* arg, void* tag,
void (*unschedFunction)(void* arg));
// Filter jobs that are still in a queue and match
// the given tag. Remove them from a queue if any
// and for each such job execute an unschedule function
// if such was given at scheduling time.
int UnSchedule(void* tag);
void SetHostEnv(Env* env);
Env* GetHostEnv() const;
// Return the thread priority.
// This would allow its member-thread to know its priority.
Env::Priority GetThreadPriority() const;
// Set the thread priority.
void SetThreadPriority(Env::Priority priority);
// Reserve a specific number of threads, prevent them from running other
// functions The number of reserved threads could be fewer than the desired
// one
int ReserveThreads(int threads_to_be_reserved) override;
// Release a specific number of threads
int ReleaseThreads(int threads_to_be_released) override;
static void PthreadCall(const char* label, int result);
struct Impl;
private:
// Current public interface does not provide usable
// functionality and thus can not be used internally to
// facade different implementations.
//
// We propose a pimpl idiom in order to easily replace the thread pool impl
// w/o touching the header file but providing a different .cc potentially
// CMake option driven.
//
// Another option is to introduce a Env::MakeThreadPool() virtual interface
// and override the environment. This would require refactoring ThreadPool
// usage.
//
// We can also combine these two approaches
std::unique_ptr<Impl> impl_;
};
} // namespace ROCKSDB_NAMESPACE