[cache_dump, cache_restore] restore/dump cycle works

This commit is contained in:
Joe Thornber
2013-09-19 13:45:56 +01:00
parent c476de1756
commit 61e90998c0
13 changed files with 129 additions and 39 deletions

View File

@@ -4,14 +4,24 @@
#include <iostream>
#include "version.h"
#include "caching/metadata.h"
#include "caching/xml_format.h"
#include "persistent-data/file_utils.h"
using namespace std;
using namespace caching;
using namespace caching::superblock_detail;
//----------------------------------------------------------------
namespace {
string to_string(unsigned char const *data) {
// FIXME: we're assuming the data is zero terminated here
return std::string(reinterpret_cast<char const *>(data));
}
//--------------------------------
string const STDOUT_PATH("-");
bool want_stdout(string const &output) {
@@ -19,16 +29,30 @@ namespace {
}
int dump_(string const &dev, ostream &out) {
block_manager<>::ptr bm = open_bm(dev, block_io<>::READ_ONLY);
metadata::ptr md(new metadata(bm, metadata::OPEN));
emitter::ptr e = create_xml_emitter(out);
superblock const &sb = md->sb_;
e->begin_superblock(to_string(sb.uuid), sb.data_block_size, sb.cache_blocks, to_string(sb.policy_name));
e->end_superblock();
return 0;
}
int dump(string const &dev, string const &output) {
if (want_stdout(output)) {
ofstream out(output.c_str());
return dump_(dev, out);
} else
return dump_(dev, cout);
try {
if (want_stdout(output))
return dump_(dev, cout);
else {
ofstream out(output.c_str());
return dump_(dev, out);
}
} catch (std::exception &e) {
cerr << e.what() << endl;
return 1;
}
}
void usage(ostream &out, string const &cmd) {