sstables: update compaction history at the end of compaction

When compaction job finishes, call function to update the system
table COMPACTION_HISTORY. That's also needed for the compaction
history API.

Signed-off-by: Raphael S. Carvalho <raphaelsc@scylladb.com>
This commit is contained in:
Raphael S. Carvalho
2015-11-25 19:39:27 -02:00
parent 433ed60ca3
commit a2fb0ec9a3

View File

@@ -57,6 +57,8 @@
#include "schema.hh"
#include "cql3/statements/property_definitions.hh"
#include "leveled_manifest.hh"
#include "db/system_keyspace.hh"
#include "db/query_context.hh"
namespace sstables {
@@ -266,7 +268,7 @@ future<> compact_sstables(std::vector<shared_sstable> sstables,
if (ex.size()) {
throw std::runtime_error(ex);
}
}).then([start_time, stats] {
}).then([start_time, stats, schema] {
double ratio = double(stats->end_size) / double(stats->start_size);
auto end_time = std::chrono::high_resolution_clock::now();
// time taken by compaction in seconds.
@@ -288,7 +290,21 @@ future<> compact_sstables(std::vector<shared_sstable> sstables,
stats->sstables, new_sstables_msg, stats->start_size, stats->end_size, (int) (ratio * 100),
std::chrono::duration_cast<std::chrono::milliseconds>(duration).count(), throughput,
stats->total_partitions, stats->total_keys_written);
return make_ready_future<>();
// If compaction is running for testing purposes, detect that there is
// no query context and skip code that updates compaction history.
if (!db::qctx) {
return make_ready_future<>();
}
auto compacted_at = std::chrono::duration_cast<std::chrono::milliseconds>(end_time.time_since_epoch()).count();
// FIXME: add support to merged_rows. merged_rows is a histogram that
// shows how many sstables each row is merged from. This information
// cannot be accessed until we make combined_reader more generic,
// for example, by adding a reducer method.
return db::system_keyspace::update_compaction_history(schema->ks_name(), schema->cf_name(), compacted_at,
stats->start_size, stats->end_size, {});
});
}