1
0
mirror of https://github.com/Zygo/bees.git synced 2025-05-17 13:25:45 +02:00

roots: replace BEES_TRANSID_FACTOR with BEES_TRANSID_POLL_INTERVAL

Restart crawl_more (and update crawl roots and flush FD caches) every
time the transid changes, and only when the transid changes, but
not more often than a reasonable minimum poll interval.

Clean up the log message:  use the proper thread name and remove
the wildly inaccurate estimate of when crawl will resume.

Signed-off-by: Zygo Blaxell <bees@furryterror.org>
This commit is contained in:
Zygo Blaxell 2022-11-29 22:44:42 -05:00
parent d6d3e1045e
commit bbcfd9daa6
2 changed files with 8 additions and 11 deletions

View File

@ -707,12 +707,10 @@ BeesRoots::crawl_roots()
return true;
}
BEESNOTE("Crawl done");
BEESCOUNT(crawl_done);
auto want_transid = m_transid_re.count() + m_transid_factor;
auto ran_out_time = m_crawl_timer.lap();
BEESLOGINFO("Crawl more ran out of data after " << ran_out_time << "s, waiting about " << m_transid_re.seconds_until(want_transid) << "s for transid " << want_transid << "...");
const auto ran_out_time = m_crawl_timer.lap();
BEESLOGINFO("crawl_more ran out of data after " << ran_out_time << "s");
// Do not run again
return false;
@ -748,7 +746,7 @@ BeesRoots::crawl_thread()
// Monitor transid_max and wake up roots when it changes
BEESNOTE("tracking transid");
auto last_transid = m_transid_re.count();
uint64_t last_transid = 0;
while (!m_stop_requested) {
BEESTRACE("Measure current transid");
catch_all([&]() {
@ -771,9 +769,9 @@ BeesRoots::crawl_thread()
}
last_transid = new_transid;
auto poll_time = m_transid_re.seconds_for(m_transid_factor);
BEESLOGDEBUG("Polling " << poll_time << "s for next " << m_transid_factor << " transid " << m_transid_re);
BEESNOTE("waiting " << poll_time << "s for next " << m_transid_factor << " transid " << m_transid_re);
const auto poll_time = max(BEES_TRANSID_POLL_INTERVAL, m_transid_re.seconds_for(1));
BEESLOGDEBUG("Polling " << poll_time << "s for next transid " << m_transid_re);
BEESNOTE("waiting " << poll_time << "s for next transid " << m_transid_re);
unique_lock<mutex> lock(m_stop_mutex);
if (m_stop_requested) {
BEESLOGDEBUG("Stop requested in crawl thread");

View File

@ -100,8 +100,8 @@ const size_t BEES_MAX_EXTENT_REF_COUNT = (16 * 1024 * 1024 / 24) - 1;
// How long between hash table histograms
const double BEES_HASH_TABLE_ANALYZE_INTERVAL = BEES_STATS_INTERVAL;
// Wait this many transids between crawls
const size_t BEES_TRANSID_FACTOR = 10;
// Wait at least this long for a new transid
const double BEES_TRANSID_POLL_INTERVAL = 30.0;
// Workaround for silly dedupe / ineffective readahead behavior
const size_t BEES_READAHEAD_SIZE = 1024 * 1024;
@ -543,7 +543,6 @@ class BeesRoots : public enable_shared_from_this<BeesRoots> {
BeesThread m_crawl_thread;
BeesThread m_writeback_thread;
RateEstimator m_transid_re;
size_t m_transid_factor = BEES_TRANSID_FACTOR;
bool m_workaround_btrfs_send = false;
shared_ptr<BeesScanMode> m_scanner;