mirror of
https://github.com/matrix-construct/construct
synced 2024-10-02 13:48:53 +02:00
ircd::db: Propagate the FlushOptions.allow_write_stall option; improve sort cmd.
This commit is contained in:
parent
f683e60df4
commit
605cce9ed1
4 changed files with 36 additions and 10 deletions
|
@ -64,7 +64,7 @@ namespace ircd::db
|
|||
void setopt(column &, const string_view &key, const string_view &val);
|
||||
void compact(column &, const std::pair<string_view, string_view> &, const int &to_level = -1, const compactor & = {});
|
||||
void compact(column &, const std::pair<int, int> &level = {-1, -1}, const compactor & = {});
|
||||
void sort(column &, const bool &blocking = false);
|
||||
void sort(column &, const bool &blocking = false, const bool &now = false);
|
||||
void drop(column &); // danger
|
||||
}
|
||||
|
||||
|
|
|
@ -55,7 +55,7 @@ namespace ircd::db
|
|||
void check(database &);
|
||||
void compact(database &, const std::pair<int, int> &level, const compactor & = {});
|
||||
void compact(database &, const compactor & = {});
|
||||
void sort(database &, const bool &blocking = true);
|
||||
void sort(database &, const bool &blocking = true, const bool &now = true);
|
||||
void flush(database &, const bool &sync = false);
|
||||
void sync(database &);
|
||||
}
|
||||
|
|
14
ircd/db.cc
14
ircd/db.cc
|
@ -409,12 +409,13 @@ ircd::db::flush(database &d,
|
|||
/// Note that if blocking=true, blocking may occur for each column individually.
|
||||
void
|
||||
ircd::db::sort(database &d,
|
||||
const bool &blocking)
|
||||
const bool &blocking,
|
||||
const bool &now)
|
||||
{
|
||||
for(const auto &c : d.columns)
|
||||
{
|
||||
db::column column{*c};
|
||||
db::sort(column, blocking);
|
||||
db::sort(column, blocking, now);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -9455,23 +9456,26 @@ ircd::db::drop(column &column)
|
|||
|
||||
void
|
||||
ircd::db::sort(column &column,
|
||||
const bool &blocking)
|
||||
const bool &blocking,
|
||||
const bool &now)
|
||||
{
|
||||
database::column &c(column);
|
||||
database &d(*c.d);
|
||||
|
||||
rocksdb::FlushOptions opts;
|
||||
opts.wait = blocking;
|
||||
opts.allow_write_stall = now;
|
||||
|
||||
const ctx::uninterruptible::nothrow ui;
|
||||
const std::lock_guard<decltype(write_mutex)> lock{write_mutex};
|
||||
log::debug
|
||||
{
|
||||
log, "'%s':'%s' @%lu FLUSH (sort) %s",
|
||||
log, "'%s':'%s' @%lu FLUSH (sort) %s %s",
|
||||
name(d),
|
||||
name(c),
|
||||
sequence(d),
|
||||
blocking? "blocking"_sv: "non-blocking"_sv
|
||||
blocking? "blocking"_sv: "non-blocking"_sv,
|
||||
now? "now"_sv: "later"_sv
|
||||
};
|
||||
|
||||
throw_on_error
|
||||
|
|
|
@ -1600,7 +1600,7 @@ try
|
|||
{
|
||||
const params param{line, " ",
|
||||
{
|
||||
"dbname", "[blocking]"
|
||||
"dbname", "column", "[blocking]", "[now]"
|
||||
}};
|
||||
|
||||
const auto dbname
|
||||
|
@ -1608,9 +1608,19 @@ try
|
|||
param.at(0)
|
||||
};
|
||||
|
||||
const auto colname
|
||||
{
|
||||
param.at("column", "*"_sv)
|
||||
};
|
||||
|
||||
const auto blocking
|
||||
{
|
||||
param.at(1, false)
|
||||
param.at("[blocking]", true)
|
||||
};
|
||||
|
||||
const auto now
|
||||
{
|
||||
param.at("[now]", true)
|
||||
};
|
||||
|
||||
auto &database
|
||||
|
@ -1618,7 +1628,19 @@ try
|
|||
db::database::get(dbname)
|
||||
};
|
||||
|
||||
sort(database, blocking);
|
||||
if(colname == "*")
|
||||
{
|
||||
db::sort(database, blocking, now);
|
||||
out << "done" << std::endl;
|
||||
return true;
|
||||
}
|
||||
|
||||
db::column column
|
||||
{
|
||||
database, colname
|
||||
};
|
||||
|
||||
db::sort(column, blocking, now);
|
||||
out << "done" << std::endl;
|
||||
return true;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue