mirror of
https://github.com/ton-blockchain/ton
synced 2025-02-12 19:22:37 +00:00
Fix test-validator-session-state (#869)
Co-authored-by: SpyCheese <mikle98@yandex.ru>
This commit is contained in:
parent
42d4c051ef
commit
20f9271b72
2 changed files with 9 additions and 24 deletions
|
@ -34,6 +34,7 @@
|
||||||
|
|
||||||
#include "validator-session/validator-session-description.h"
|
#include "validator-session/validator-session-description.h"
|
||||||
#include "validator-session/validator-session-state.h"
|
#include "validator-session/validator-session-state.h"
|
||||||
|
#include "validator-session/validator-session-description.hpp"
|
||||||
|
|
||||||
#include <limits>
|
#include <limits>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
@ -48,17 +49,13 @@ class Description : public ton::validatorsession::ValidatorSessionDescription {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
void *alloc(size_t size, size_t align, bool temp) override {
|
void *alloc(size_t size, size_t align, bool temp) override {
|
||||||
size = (size + 15) / 16 * 16;
|
return (temp ? mem_temp_ : mem_perm_).alloc(size, align);
|
||||||
td::uint32 idx = temp ? 1 : 0;
|
|
||||||
auto s = pdata_cur_[idx].fetch_add(size);
|
|
||||||
CHECK(s + size <= pdata_size_[idx]);
|
|
||||||
return static_cast<void *>(pdata_[idx] + s);
|
|
||||||
}
|
}
|
||||||
bool is_persistent(const void *ptr) const override {
|
bool is_persistent(const void *ptr) const override {
|
||||||
return ptr == nullptr || (ptr >= pdata_[0] && ptr < pdata_[0] + pdata_size_[0]);
|
return mem_perm_.contains(ptr);
|
||||||
}
|
}
|
||||||
void clear_temp_memory() override {
|
void clear_temp_memory() override {
|
||||||
pdata_cur_[1] = 0;
|
mem_temp_.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
ton::PublicKeyHash get_source_id(td::uint32 idx) const override {
|
ton::PublicKeyHash get_source_id(td::uint32 idx) const override {
|
||||||
|
@ -189,21 +186,8 @@ class Description : public ton::validatorsession::ValidatorSessionDescription {
|
||||||
return opts_;
|
return opts_;
|
||||||
}
|
}
|
||||||
|
|
||||||
~Description() {
|
|
||||||
delete[] pdata_[0];
|
|
||||||
delete[] pdata_[1];
|
|
||||||
}
|
|
||||||
|
|
||||||
Description(ton::validatorsession::ValidatorSessionOptions opts, td::uint32 total_nodes)
|
Description(ton::validatorsession::ValidatorSessionOptions opts, td::uint32 total_nodes)
|
||||||
: opts_(opts), total_nodes_(total_nodes) {
|
: opts_(opts), total_nodes_(total_nodes), mem_perm_(1 << 30), mem_temp_(1 << 22) {
|
||||||
pdata_size_[0] =
|
|
||||||
static_cast<std::size_t>(std::numeric_limits<std::size_t>::max() < (1ull << 32) ? 1ull << 30 : 1ull << 33);
|
|
||||||
pdata_size_[1] = 1 << 22;
|
|
||||||
pdata_[0] = new td::uint8[pdata_size_[0]];
|
|
||||||
pdata_[1] = new td::uint8[pdata_size_[1]];
|
|
||||||
pdata_cur_[0] = 0;
|
|
||||||
pdata_cur_[1] = 0;
|
|
||||||
|
|
||||||
for (auto &el : cache_) {
|
for (auto &el : cache_) {
|
||||||
Cached v{nullptr};
|
Cached v{nullptr};
|
||||||
el.store(v, std::memory_order_relaxed);
|
el.store(v, std::memory_order_relaxed);
|
||||||
|
@ -224,9 +208,7 @@ class Description : public ton::validatorsession::ValidatorSessionDescription {
|
||||||
};
|
};
|
||||||
std::array<std::atomic<Cached>, cache_size> cache_;
|
std::array<std::atomic<Cached>, cache_size> cache_;
|
||||||
|
|
||||||
td::uint8 *pdata_[2];
|
ton::validatorsession::ValidatorSessionDescriptionImpl::MemPool mem_perm_, mem_temp_;
|
||||||
std::atomic<size_t> pdata_cur_[2];
|
|
||||||
size_t pdata_size_[2];
|
|
||||||
};
|
};
|
||||||
|
|
||||||
double myrand() {
|
double myrand() {
|
||||||
|
|
|
@ -58,6 +58,7 @@ class ValidatorSessionDescriptionImpl : public ValidatorSessionDescription {
|
||||||
};
|
};
|
||||||
std::array<std::atomic<Cached>, cache_size> cache_;
|
std::array<std::atomic<Cached>, cache_size> cache_;
|
||||||
|
|
||||||
|
public:
|
||||||
class MemPool {
|
class MemPool {
|
||||||
public:
|
public:
|
||||||
explicit MemPool(size_t chunk_size);
|
explicit MemPool(size_t chunk_size);
|
||||||
|
@ -71,6 +72,8 @@ class ValidatorSessionDescriptionImpl : public ValidatorSessionDescription {
|
||||||
std::vector<td::uint8 *> data_;
|
std::vector<td::uint8 *> data_;
|
||||||
size_t ptr_ = 0;
|
size_t ptr_ = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
private:
|
||||||
MemPool mem_perm_ = MemPool(mem_chunk_size_perm);
|
MemPool mem_perm_ = MemPool(mem_chunk_size_perm);
|
||||||
MemPool mem_temp_ = MemPool(mem_chunk_size_temp);
|
MemPool mem_temp_ = MemPool(mem_chunk_size_temp);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue