taco-db  0.1.0
FileManager_private.h
Go to the documentation of this file.
1 #ifndef STORAGE_FILEMANAGER_PRIVATE_H
2 #define STORAGE_FILEMANAGER_PRIVATE_H
3 
4 #include "FileManager.h"
5 
6 namespace taco {
7 
8 constexpr uint64_t DBFILE_MAGIC = 0xdefabc1221cbafedul;
10 
17 
19 constexpr PageNumber PageGroupSize = 64;
20 
21 // FormatMeta() assumes there are at least 3 pages in the first page group.
22 static_assert(PageGroupSize >= 3);
23 
25 constexpr size_t MaxFileSize = (size_t) 64 * 1024 * 1024 * 1024;
26 
29 
31 constexpr uint64_t MaxNumDataFiles =
32  ((((uint64_t) MaxPageNumber) + 1) + MaxNumPagesPerFile - 1) /
34 
35 // There're many reasons why we don't want too many physical files:
36 // 1. We don't want an excessive amount of files in a single directory.
37 // 2. We preallocate the main data file vector, and we don't want that to be
38 // huge.
39 static_assert(MaxNumDataFiles <= 4096);
40 
50  uint16_t m_flags;
51  uint16_t m_reserved;
52 };
53 static_assert(sizeof(MetaPageHeaderData) == 4);
54 
55 static_assert(FileIdBits <= 19, "we support at most 2^19 files at this time");
56 
57 constexpr FileId
59  return fid / 1023;
60 }
61 
62 constexpr FileId
64  return fid % 1023;
65 }
66 
67 constexpr uint64_t
69  return pid / MaxNumPagesPerFile;
70 }
71 
72 constexpr PageNumber
74  return pid % MaxNumPagesPerFile;
75 }
76 
77 constexpr PageNumber
78 DataFileIdAndPageIdGetPageNumber(uint64_t fsfileid, PageNumber fspid) {
79  return fsfileid * MaxNumPagesPerFile + fspid;
80 }
81 
88 #define DataFileNameLength 3
89 static_assert(MaxNumDataFiles <= 1 << (DataFileNameLength * 4));
90 
91 struct FreePageList {
92  atomic<PageNumber> m_next_fp_in_last_pg;
93  atomic<PageNumber> m_last_pg;
94 
95  // list head of the free page list
96  atomic<PageNumber> m_fp_list;
97 };
98 
101  uint64_t m_magic;
104 
112  atomic<FileId> m_last_free_fid;
113 };
114 
117  atomic<PageNumber> m_pid[1023];
118 };
119 static_assert(sizeof(FileDirectoryData) <= PAGE_SIZE);
120 
123 
129 
136  atomic<PageNumber> m_last_pid;
137 
140 };
141 
142 }
143 
144 #endif // STORAGE_FILEMANAGER_PRIVATE_H
taco::DataFileIdAndPageIdGetPageNumber
constexpr PageNumber DataFileIdAndPageIdGetPageNumber(uint64_t fsfileid, PageNumber fspid)
Definition: FileManager_private.h:78
PAGE_SIZE
constexpr const size_t PAGE_SIZE
Definition: tdb_base.h:159
taco::INVALID_PID
constexpr PageNumber INVALID_PID
The invalid page number.
Definition: tdb_base.h:236
taco::MetaPageHeaderData::m_flags
uint16_t m_flags
Definition: FileManager_private.h:50
taco::PageGroupSize
constexpr PageNumber PageGroupSize
Size of allocation in pages.
Definition: FileManager_private.h:19
taco::MaxNumPagesPerFile
constexpr PageNumber MaxNumPagesPerFile
Maximum number of pages in a single data file.
Definition: FileManager_private.h:28
taco::RESERVED_PID
constexpr PageNumber RESERVED_PID
An invalid page number reserved for file manager internal use.
Definition: tdb_base.h:243
taco::FMMetaPageData::m_fdir1_pid
PageNumber m_fdir1_pid
Definition: FileManager_private.h:102
taco::FreePageList::m_last_pg
atomic< PageNumber > m_last_pg
Definition: FileManager_private.h:93
taco::RegularFileMetaPageData::m_first_pid
PageNumber m_first_pid
The first page ID of this file.
Definition: FileManager_private.h:128
taco
Definition: datum.h:28
taco::FreePageList
Definition: FileManager_private.h:91
taco::FreePageList::m_fp_list
atomic< PageNumber > m_fp_list
Definition: FileManager_private.h:96
taco::FileIdBits
constexpr int FileIdBits
Definition: FileManager.h:105
taco::FileDirectoryData::m_pid
atomic< PageNumber > m_pid[1023]
Definition: FileManager_private.h:117
taco::MaxFileSize
constexpr size_t MaxFileSize
Maximum size of a single data file.
Definition: FileManager_private.h:25
taco::MetaPageHeaderData
This is a truncated and private version of PageHeaderData.
Definition: FileManager_private.h:49
taco::FileIdGetDir1Offset
constexpr FileId FileIdGetDir1Offset(FileId fid)
Definition: FileManager_private.h:58
taco::FMMetaPageData::m_ph
MetaPageHeaderData m_ph
Definition: FileManager_private.h:100
taco::PageHeaderData
PageHeaderData defines the header of every virtual file data page.
Definition: FileManager.h:23
taco::DBFILE_MAGIC
constexpr uint64_t DBFILE_MAGIC
Definition: FileManager_private.h:8
taco::FileDirectoryData
Definition: FileManager_private.h:115
taco::MaxNumDataFiles
constexpr uint64_t MaxNumDataFiles
Maximum number of data files.
Definition: FileManager_private.h:31
taco::FM_META_PID
constexpr PageNumber FM_META_PID
The FM meta page is always the first page in the file.
Definition: FileManager_private.h:16
taco::FileId
uint32_t FileId
The file ID.
Definition: tdb_base.h:222
taco::RegularFileMetaPageData::m_ph
PageHeaderData m_ph
Definition: FileManager_private.h:122
taco::RegularFileMetaPageData::m_last_pid
atomic< PageNumber > m_last_pid
The last page ID of this file.
Definition: FileManager_private.h:136
taco::PageNumberGetDataFilePageId
constexpr PageNumber PageNumberGetDataFilePageId(PageNumber pid)
Definition: FileManager_private.h:73
taco::FileIdGetDir2Offset
constexpr FileId FileIdGetDir2Offset(FileId fid)
Definition: FileManager_private.h:63
taco::FMMetaPageData::m_magic
uint64_t m_magic
Definition: FileManager_private.h:101
DataFileNameLength
#define DataFileNameLength
The length of the file name of main data files.
Definition: FileManager_private.h:88
taco::FMMetaPageData
Definition: FileManager_private.h:99
taco::FileDirectoryData::m_ph
MetaPageHeaderData m_ph
Definition: FileManager_private.h:116
taco::MetaPageHeaderData::m_reserved
uint16_t m_reserved
Definition: FileManager_private.h:51
taco::FMMetaPageData::m_fpl
FreePageList m_fpl
Definition: FileManager_private.h:103
taco::FMMetaPageData::m_last_free_fid
atomic< FileId > m_last_free_fid
m_last_free_fid serves as a hint to locate the last allocated free file id.
Definition: FileManager_private.h:112
taco::PENDING_CREATION_PID
constexpr PageNumber PENDING_CREATION_PID
Definition: FileManager_private.h:9
FileManager.h
taco::PageNumberGetDataFileId
constexpr uint64_t PageNumberGetDataFileId(PageNumber pid)
Definition: FileManager_private.h:68
taco::RegularFileMetaPageData
Definition: FileManager_private.h:121
taco::RegularFileMetaPageData::m_fpl
FreePageList m_fpl
The free page list of this file.
Definition: FileManager_private.h:139
taco::MaxPageNumber
constexpr PageNumber MaxPageNumber
The maximum valid page number.
Definition: tdb_base.h:248
taco::FreePageList::m_next_fp_in_last_pg
atomic< PageNumber > m_next_fp_in_last_pg
Definition: FileManager_private.h:92
taco::PageNumber
uint32_t PageNumber
Definition: tdb_base.h:214