0
0
Fork 0
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:
Jason Volk 2018-12-19 13:50:42 -08:00
parent f683e60df4
commit 605cce9ed1
4 changed files with 36 additions and 10 deletions

View file

@ -64,7 +64,7 @@ namespace ircd::db
void setopt(column &, const string_view &key, const string_view &val); 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<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 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 void drop(column &); // danger
} }

View file

@ -55,7 +55,7 @@ namespace ircd::db
void check(database &); void check(database &);
void compact(database &, const std::pair<int, int> &level, const compactor & = {}); void compact(database &, const std::pair<int, int> &level, const compactor & = {});
void compact(database &, 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 flush(database &, const bool &sync = false);
void sync(database &); void sync(database &);
} }

View file

@ -409,12 +409,13 @@ ircd::db::flush(database &d,
/// Note that if blocking=true, blocking may occur for each column individually. /// Note that if blocking=true, blocking may occur for each column individually.
void void
ircd::db::sort(database &d, ircd::db::sort(database &d,
const bool &blocking) const bool &blocking,
const bool &now)
{ {
for(const auto &c : d.columns) for(const auto &c : d.columns)
{ {
db::column column{*c}; db::column column{*c};
db::sort(column, blocking); db::sort(column, blocking, now);
} }
} }
@ -9455,23 +9456,26 @@ ircd::db::drop(column &column)
void void
ircd::db::sort(column &column, ircd::db::sort(column &column,
const bool &blocking) const bool &blocking,
const bool &now)
{ {
database::column &c(column); database::column &c(column);
database &d(*c.d); database &d(*c.d);
rocksdb::FlushOptions opts; rocksdb::FlushOptions opts;
opts.wait = blocking; opts.wait = blocking;
opts.allow_write_stall = now;
const ctx::uninterruptible::nothrow ui; const ctx::uninterruptible::nothrow ui;
const std::lock_guard<decltype(write_mutex)> lock{write_mutex}; const std::lock_guard<decltype(write_mutex)> lock{write_mutex};
log::debug log::debug
{ {
log, "'%s':'%s' @%lu FLUSH (sort) %s", log, "'%s':'%s' @%lu FLUSH (sort) %s %s",
name(d), name(d),
name(c), name(c),
sequence(d), sequence(d),
blocking? "blocking"_sv: "non-blocking"_sv blocking? "blocking"_sv: "non-blocking"_sv,
now? "now"_sv: "later"_sv
}; };
throw_on_error throw_on_error

View file

@ -1600,7 +1600,7 @@ try
{ {
const params param{line, " ", const params param{line, " ",
{ {
"dbname", "[blocking]" "dbname", "column", "[blocking]", "[now]"
}}; }};
const auto dbname const auto dbname
@ -1608,9 +1608,19 @@ try
param.at(0) param.at(0)
}; };
const auto colname
{
param.at("column", "*"_sv)
};
const auto blocking const auto blocking
{ {
param.at(1, false) param.at("[blocking]", true)
};
const auto now
{
param.at("[now]", true)
}; };
auto &database auto &database
@ -1618,7 +1628,19 @@ try
db::database::get(dbname) 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; out << "done" << std::endl;
return true; return true;
} }