diff --git a/ircd/db.cc b/ircd/db.cc index 05d6a1daa..2b06f22a1 100644 --- a/ircd/db.cc +++ b/ircd/db.cc @@ -8619,7 +8619,11 @@ ircd::db::txn::append::append(txn &t, database &d, const delta &delta) { - db::column c{d[std::get<1>(delta)]}; + db::column c + { + d[std::get<1>(delta)] + }; + db::append(*t.wb, c, db::column::delta { std::get(delta), @@ -10609,7 +10613,11 @@ void ircd::db::append(rocksdb::WriteBatch &batch, const cell::delta &delta) { - auto &column(std::get(delta)->c); + auto &column + { + std::get(delta)->c + }; + append(batch, column, column::delta { std::get(delta), @@ -10623,8 +10631,21 @@ ircd::db::append(rocksdb::WriteBatch &batch, column &column, const column::delta &delta) { - database::column &c(column); + if(unlikely(!column)) + { + // Note: Unknown at this time whether allowing attempts at writing + // to a null column should be erroneous or silently ignored. It's + // highly likely this log message will be removed soon to allow + // toggling database columns for optimization without touching calls. + log::critical + { + log, "Attempting to transact a delta for a null column" + }; + return; + } + + database::column &c(column); const auto k(slice(std::get<1>(delta))); const auto v(slice(std::get<2>(delta))); switch(std::get<0>(delta))