]> git.proxmox.com Git - ceph.git/blame - ceph/src/rocksdb/memory/allocator.h
update source to Ceph Pacific 16.2.2
[ceph.git] / ceph / src / rocksdb / memory / allocator.h
CommitLineData
7c673cae 1// Copyright (c) 2011-present, Facebook, Inc. All rights reserved.
11fdf7f2
TL
2// This source code is licensed under both the GPLv2 (found in the
3// COPYING file in the root directory) and Apache 2.0 License
4// (found in the LICENSE.Apache file in the root directory).
7c673cae
FG
5//
6// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
7// Use of this source code is governed by a BSD-style license that can be
8// found in the LICENSE file. See the AUTHORS file for names of contributors.
9//
10// Abstract interface for allocating memory in blocks. This memory is freed
11// when the allocator object is destroyed. See the Arena class for more info.
12
13#pragma once
7c673cae 14#include <cerrno>
11fdf7f2
TL
15#include <cstddef>
16#include "rocksdb/write_buffer_manager.h"
7c673cae 17
f67539c2 18namespace ROCKSDB_NAMESPACE {
7c673cae
FG
19
20class Logger;
21
22class Allocator {
23 public:
24 virtual ~Allocator() {}
25
26 virtual char* Allocate(size_t bytes) = 0;
27 virtual char* AllocateAligned(size_t bytes, size_t huge_page_size = 0,
28 Logger* logger = nullptr) = 0;
29
30 virtual size_t BlockSize() const = 0;
31};
32
11fdf7f2
TL
33class AllocTracker {
34 public:
35 explicit AllocTracker(WriteBufferManager* write_buffer_manager);
f67539c2
TL
36 // No copying allowed
37 AllocTracker(const AllocTracker&) = delete;
38 void operator=(const AllocTracker&) = delete;
39
11fdf7f2
TL
40 ~AllocTracker();
41 void Allocate(size_t bytes);
42 // Call when we're finished allocating memory so we can free it from
43 // the write buffer's limit.
44 void DoneAllocating();
45
46 void FreeMem();
47
48 bool is_freed() const { return write_buffer_manager_ == nullptr || freed_; }
49
50 private:
51 WriteBufferManager* write_buffer_manager_;
52 std::atomic<size_t> bytes_allocated_;
53 bool done_allocating_;
54 bool freed_;
11fdf7f2
TL
55};
56
f67539c2 57} // namespace ROCKSDB_NAMESPACE