From 605cce9ed15b7b7f2c40b1a8aa6072257ca7a841 Mon Sep 17 00:00:00 2001 From: Jason Volk Date: Wed, 19 Dec 2018 13:50:42 -0800 Subject: [PATCH] ircd::db: Propagate the FlushOptions.allow_write_stall option; improve sort cmd. --- include/ircd/db/column.h | 2 +- include/ircd/db/database/database.h | 2 +- ircd/db.cc | 14 +++++++++----- modules/console.cc | 28 +++++++++++++++++++++++++--- 4 files changed, 36 insertions(+), 10 deletions(-) diff --git a/include/ircd/db/column.h b/include/ircd/db/column.h index c43dbb190..7d252603f 100644 --- a/include/ircd/db/column.h +++ b/include/ircd/db/column.h @@ -64,7 +64,7 @@ namespace ircd::db void setopt(column &, const string_view &key, const string_view &val); void compact(column &, const std::pair &, const int &to_level = -1, const compactor & = {}); void compact(column &, const std::pair &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 } diff --git a/include/ircd/db/database/database.h b/include/ircd/db/database/database.h index de1ed9c48..2f0fdab46 100644 --- a/include/ircd/db/database/database.h +++ b/include/ircd/db/database/database.h @@ -55,7 +55,7 @@ namespace ircd::db void check(database &); void compact(database &, const std::pair &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 &); } diff --git a/ircd/db.cc b/ircd/db.cc index 694ecfa49..273b82df5 100644 --- a/ircd/db.cc +++ b/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 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 diff --git a/modules/console.cc b/modules/console.cc index 8f9b48f66..f02f754fb 100644 --- a/modules/console.cc +++ b/modules/console.cc @@ -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; }