62 lines
1.5 KiB
C
Raw Normal View History

2013-09-11 11:40:46 +01:00
#ifndef CACHE_METADATA_H
#define CACHE_METADATA_H
2013-11-19 10:23:35 +00:00
#include "base/endian_utils.h"
2013-09-11 11:40:46 +01:00
#include "persistent-data/block.h"
#include "persistent-data/data-structures/array.h"
#include "persistent-data/data-structures/bitset.h"
2013-09-11 11:40:46 +01:00
#include "persistent-data/space-maps/disk.h"
#include "persistent-data/transaction_manager.h"
#include "caching/superblock.h"
2013-09-12 12:33:32 +01:00
#include "caching/hint_array.h"
#include "caching/mapping_array.h"
2013-09-11 11:40:46 +01:00
//----------------------------------------------------------------
namespace caching {
class metadata {
public:
enum open_type {
CREATE
2013-09-11 11:40:46 +01:00
};
typedef block_manager::read_ref read_ref;
typedef block_manager::write_ref write_ref;
typedef std::shared_ptr<metadata> ptr;
2013-09-11 11:40:46 +01:00
metadata(block_manager::ptr bm, open_type ot, unsigned metadata_version = 2); // Create only
metadata(block_manager::ptr bm);
2013-09-18 13:00:26 +01:00
2013-10-29 12:46:23 +00:00
void commit(bool clean_shutdown = true);
void setup_hint_array(size_t width);
2013-09-12 12:33:32 +01:00
typedef persistent_data::transaction_manager tm;
tm::ptr tm_;
superblock sb_;
2013-09-12 12:33:32 +01:00
checked_space_map::ptr metadata_sm_;
mapping_array::ptr mappings_;
2013-09-24 12:00:09 +01:00
hint_array::ptr hints_;
persistent_data::bitset::ptr discard_bits_;
2016-09-30 11:21:20 -04:00
persistent_data::bitset::ptr dirty_bits_;
private:
void init_superblock();
void create_metadata(block_manager::ptr bm, unsigned metadata_version);
void open_metadata(block_manager::ptr bm);
void commit_space_map();
void commit_mappings();
2013-09-24 12:00:09 +01:00
void commit_hints();
void commit_discard_bits();
2013-10-29 12:46:23 +00:00
void commit_superblock(bool clean_shutdown);
2013-09-11 11:40:46 +01:00
};
};
//----------------------------------------------------------------
#endif