mirror of
https://github.com/Zygo/bees.git
synced 2025-08-02 13:53:28 +02:00
Compare commits
2 Commits
v0.6.5
...
extra-trac
Author | SHA1 | Date | |
---|---|---|---|
|
a92b122161 | ||
|
74d4a8fe01 |
@@ -13,7 +13,7 @@ namespace crucible {
|
||||
|
||||
template <class T>
|
||||
class ProgressTracker {
|
||||
struct ProgressTrackerState;
|
||||
class ProgressTrackerState;
|
||||
class ProgressHolderState;
|
||||
public:
|
||||
using value_type = T;
|
||||
|
@@ -20,7 +20,6 @@ CRUCIBLE_OBJS = \
|
||||
uuid.o \
|
||||
|
||||
include ../makeflags
|
||||
-include ../localconf
|
||||
include ../Defines.mk
|
||||
|
||||
configure.h: configure.h.in
|
||||
|
@@ -124,7 +124,6 @@ namespace crucible {
|
||||
} else if (!chatter_names->empty()) {
|
||||
cerr << "CRUCIBLE_CHATTER does not list '" << m_file << "' or '" << m_pretty_function << "'" << endl;
|
||||
}
|
||||
(void)m_line; // not implemented yet
|
||||
// cerr << "ChatterBox " << reinterpret_cast<void*>(this) << " constructed" << endl;
|
||||
}
|
||||
|
||||
|
@@ -14,6 +14,7 @@ namespace crucible {
|
||||
// fm_start, fm_length, fm_flags, m_extents
|
||||
// fe_logical, fe_physical, fe_length, fe_flags
|
||||
|
||||
static const off_t MAX_OFFSET = numeric_limits<off_t>::max();
|
||||
static const off_t FIEMAP_BLOCK_SIZE = 4096;
|
||||
|
||||
static bool __ew_do_log = getenv("EXTENTWALKER_DEBUG");
|
||||
|
@@ -110,6 +110,9 @@ namespace crucible {
|
||||
}
|
||||
}
|
||||
|
||||
template<>
|
||||
struct ResourceHandle<Process::id, Process>;
|
||||
|
||||
pid_t
|
||||
gettid()
|
||||
{
|
||||
|
@@ -6,7 +6,6 @@ PROGRAMS = \
|
||||
all: $(PROGRAMS)
|
||||
|
||||
include ../makeflags
|
||||
-include ../localconf
|
||||
|
||||
LIBS = -lcrucible -lpthread
|
||||
LDFLAGS = -L../lib
|
||||
|
@@ -11,6 +11,17 @@
|
||||
using namespace crucible;
|
||||
using namespace std;
|
||||
|
||||
static inline
|
||||
const char *
|
||||
getenv_or_die(const char *name)
|
||||
{
|
||||
const char *rv = getenv(name);
|
||||
if (!rv) {
|
||||
THROW_ERROR(runtime_error, "Environment variable " << name << " not defined");
|
||||
}
|
||||
return rv;
|
||||
}
|
||||
|
||||
BeesFdCache::BeesFdCache()
|
||||
{
|
||||
m_root_cache.func([&](shared_ptr<BeesContext> ctx, uint64_t root) -> Fd {
|
||||
|
@@ -219,6 +219,7 @@ BeesRoots::transid_max_nocache()
|
||||
|
||||
while (true) {
|
||||
sk.nr_items = 1024;
|
||||
BEESTRACE("transid_max search sk " << sk);
|
||||
sk.do_ioctl(m_ctx->root_fd());
|
||||
|
||||
if (sk.m_result.empty()) {
|
||||
@@ -415,13 +416,15 @@ BeesRoots::crawl_thread()
|
||||
BEESNOTE("tracking transid");
|
||||
auto last_count = m_transid_re.count();
|
||||
while (true) {
|
||||
// Measure current transid
|
||||
BEESTRACE("Measure current transid");
|
||||
catch_all([&]() {
|
||||
BEESTRACE("calling transid_max_nocache");
|
||||
m_transid_re.update(transid_max_nocache());
|
||||
});
|
||||
|
||||
// Make sure we have a full complement of crawlers
|
||||
BEESTRACE("Make sure we have a full complement of crawlers");
|
||||
catch_all([&]() {
|
||||
BEESTRACE("calling insert_new_crawl");
|
||||
insert_new_crawl();
|
||||
});
|
||||
|
||||
@@ -489,19 +492,24 @@ BeesRoots::insert_new_crawl()
|
||||
unique_lock<mutex> lock(m_mutex);
|
||||
set<uint64_t> excess_roots;
|
||||
for (auto i : m_root_crawl_map) {
|
||||
BEESTRACE("excess_roots.insert(" << i.first << ")");
|
||||
excess_roots.insert(i.first);
|
||||
}
|
||||
lock.unlock();
|
||||
|
||||
while (new_bcs.m_root) {
|
||||
BEESTRACE("excess_roots.erase(" << new_bcs.m_root << ")");
|
||||
excess_roots.erase(new_bcs.m_root);
|
||||
BEESTRACE("insert_root(" << new_bcs << ")");
|
||||
insert_root(new_bcs);
|
||||
BEESCOUNT(crawl_create);
|
||||
BEESTRACE("next_root(" << new_bcs.m_root << ")");
|
||||
new_bcs.m_root = next_root(new_bcs.m_root);
|
||||
}
|
||||
|
||||
for (auto i : excess_roots) {
|
||||
new_bcs.m_root = i;
|
||||
BEESTRACE("crawl_state_erase(" << new_bcs << ")");
|
||||
crawl_state_erase(new_bcs);
|
||||
}
|
||||
}
|
||||
@@ -973,7 +981,7 @@ BeesCrawl::fetch_extents()
|
||||
// Lock in the old state
|
||||
set_state(old_state);
|
||||
|
||||
BEESTRACE("Searching crawl sk " << sk);
|
||||
BEESTRACE("Searching crawl sk " << static_cast<btrfs_ioctl_search_key&>(sk));
|
||||
bool ioctl_ok = false;
|
||||
{
|
||||
BEESNOTE("searching crawl sk " << static_cast<btrfs_ioctl_search_key&>(sk));
|
||||
|
14
src/bees.cc
14
src/bees.cc
@@ -204,6 +204,20 @@ BeesNote::get_status()
|
||||
|
||||
// static inline helpers ----------------------------------------
|
||||
|
||||
static inline
|
||||
bool
|
||||
bees_addr_check(uint64_t v)
|
||||
{
|
||||
return !(v & (1ULL << 63));
|
||||
}
|
||||
|
||||
static inline
|
||||
bool
|
||||
bees_addr_check(int64_t v)
|
||||
{
|
||||
return !(v & (1ULL << 63));
|
||||
}
|
||||
|
||||
string
|
||||
pretty(double d)
|
||||
{
|
||||
|
@@ -173,7 +173,7 @@ public:
|
||||
T at(string idx) const;
|
||||
|
||||
friend ostream& operator<< <>(ostream &os, const BeesStatTmpl<T> &bs);
|
||||
friend struct BeesStats;
|
||||
friend class BeesStats;
|
||||
};
|
||||
|
||||
using BeesRates = BeesStatTmpl<double>;
|
||||
|
@@ -14,7 +14,6 @@ test: $(PROGRAMS:%=%.txt) Makefile
|
||||
FORCE:
|
||||
|
||||
include ../makeflags
|
||||
-include ../localconf
|
||||
|
||||
LIBS = -lcrucible -lpthread
|
||||
LDFLAGS = -L../lib -Wl,-rpath=$(shell realpath ../lib)
|
||||
|
@@ -99,7 +99,7 @@ test_barrier(size_t count)
|
||||
oss << "task #" << c;
|
||||
Task t(
|
||||
oss.str(),
|
||||
[c, &task_done, &mtx, bl]() mutable {
|
||||
[c, &task_done, &mtx, &cv, bl]() mutable {
|
||||
// cerr << "Task #" << c << endl;
|
||||
unique_lock<mutex> lock(mtx);
|
||||
task_done.at(c) = true;
|
||||
@@ -166,9 +166,8 @@ test_exclusion(size_t count)
|
||||
oss << "task #" << c;
|
||||
Task t(
|
||||
oss.str(),
|
||||
[c, &only_one, &excl, bl]() mutable {
|
||||
[c, &only_one, &mtx, &excl, bl]() mutable {
|
||||
// cerr << "Task #" << c << endl;
|
||||
(void)c;
|
||||
auto lock = excl.try_lock();
|
||||
if (!lock) {
|
||||
excl.insert_task(Task::current_task());
|
||||
|
Reference in New Issue
Block a user