0
0
Fork 0
mirror of https://github.com/matrix-construct/construct synced 2024-07-02 16:58:19 +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 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
}

View file

@ -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 &);
}

View file

@ -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

View file

@ -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;
}