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 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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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 &);
|
||||||
}
|
}
|
||||||
|
|
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.
|
/// 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
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue