src/
Coverage:
low: ≥ 0%
medium: ≥ 75.0%
high: ≥ 90.0%
Lines:
0 / 82
0.0%
Branches:
0 / 136
0.0%
Functions:
0 / 3
0.0%

storage/ssd_layout/main.cc
Line Branch Exec Source
1 #include "storage/ssd_layout/ssd_layout.h"
2
3 #include <cstdlib>
4 #include <iostream>
5 #include <string>
6
7 namespace {
8
9 ✗ void Usage() {
10 std::cerr << "usage:\n"
11 << " recstore_ssd_layout partition --query PATH --output PATH\n"
12 << " --row-size N [--page-size 4096] [--keys PATH]\n"
13 << " [--binary]\n"
14 << " recstore_ssd_layout replicate --query PATH --mapping PATH\n"
15 << " --output PATH --rep-ratio F [--keys PATH] [--binary]\n"
16 << " recstore_ssd_layout shrink --mapping PATH --output PATH\n"
17 << " --rep-ratio F\n"
18 ✗ << " recstore_ssd_layout inspect --mapping PATH\n";
19 ✗ }
20
21 ✗ std::string Need(int argc, char** argv, int* i) {
22
0/2
✗ Branch 0 not taken.
✗ Branch 1 not taken.
✗ if (*i + 1 >= argc) {
23 ✗ Usage();
24 ✗ std::exit(2);
25 }
26
0/2
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ return argv[++(*i)];
27 }
28
29 } // namespace
30
31 ✗ int main(int argc, char** argv) {
32 try {
33
0/2
✗ Branch 0 not taken.
✗ Branch 1 not taken.
✗ if (argc < 2) {
34
0/2
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Usage();
35 ✗ return 2;
36 }
37
0/2
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ const std::string command = argv[1];
38 ✗ std::string query;
39 ✗ std::string mapping;
40 ✗ std::string output;
41 ✗ std::string keys_path;
42 ✗ uint32_t row_size = 0;
43 ✗ uint32_t page_size = 4096;
44 ✗ double rep_ratio = 0;
45 ✗ bool binary = false;
46
0/2
✗ Branch 0 not taken.
✗ Branch 1 not taken.
✗ for (int i = 2; i < argc; ++i) {
47
0/2
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ const std::string flag = argv[i];
48
0/2
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ if (flag == "--binary") {
49 ✗ binary = true;
50
0/2
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ } else if (flag == "--query") {
51
0/2
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ query = Need(argc, argv, &i);
52
0/2
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ } else if (flag == "--mapping") {
53
0/2
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ mapping = Need(argc, argv, &i);
54
0/2
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ } else if (flag == "--output") {
55
0/2
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ output = Need(argc, argv, &i);
56
0/2
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ } else if (flag == "--keys") {
57
0/2
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ keys_path = Need(argc, argv, &i);
58
0/2
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ } else if (flag == "--row-size") {
59
0/4
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ row_size = static_cast<uint32_t>(std::stoul(Need(argc, argv, &i)));
60
0/2
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ } else if (flag == "--page-size") {
61
0/4
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ page_size = static_cast<uint32_t>(std::stoul(Need(argc, argv, &i)));
62
0/2
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ } else if (flag == "--rep-ratio") {
63
0/4
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ rep_ratio = std::stod(Need(argc, argv, &i));
64 } else {
65
0/2
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Usage();
66 ✗ return 2;
67 }
68
0/2
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ }
69
70
0/2
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ if (command == "inspect") {
71
0/2
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ const ssd_layout::Artifact artifact = ssd_layout::LoadArtifact(mapping);
72 ✗ uint64_t copies = 0;
73
0/2
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ for (const auto& row : artifact.copies) {
74 ✗ copies += row.size();
75 }
76 ✗ std::cout << "strategy=" << ssd_layout::StrategyName(artifact.strategy)
77
0/12
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ << " page_size=" << artifact.page_size << " row_size="
78
0/6
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ << artifact.row_size << " keys=" << artifact.keys.size()
79
0/8
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ << " pages=" << artifact.pages.size() << " copies=" << copies
80
0/6
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ << " checksum=" << artifact.checksum << "\n";
81 ✗ return 0;
82 ✗ }
83
0/2
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ if (output.empty()) {
84
0/2
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Usage();
85 ✗ return 2;
86 }
87
0/2
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ if (command == "partition") {
88 const ssd_layout::Hypergraph graph =
89
0/2
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ ssd_layout::ReadQueryLog(query, binary);
90
0/2
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ const auto keys = ssd_layout::ReadKeyMap(keys_path, graph.vertex_count);
91
0/2
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ ssd_layout::SaveArtifact(
92
0/2
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ ssd_layout::Partition(graph, keys, page_size, row_size), output);
93 ✗ return 0;
94 ✗ }
95
0/2
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ if (command == "replicate") {
96 const ssd_layout::Hypergraph graph =
97
0/2
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ ssd_layout::ReadQueryLog(query, binary);
98
0/2
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ const auto keys = ssd_layout::ReadKeyMap(keys_path, graph.vertex_count);
99
0/2
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ const ssd_layout::Artifact base = ssd_layout::LoadArtifact(mapping);
100
0/2
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ auto replicated = ssd_layout::Replicate(base, graph, keys, rep_ratio);
101
0/2
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ ssd_layout::SaveArtifact(replicated, output);
102 ✗ return 0;
103 ✗ }
104
0/2
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ if (command == "shrink") {
105
0/2
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ ssd_layout::SaveArtifact(
106
0/4
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ ssd_layout::Shrink(ssd_layout::LoadArtifact(mapping), rep_ratio),
107 output);
108 ✗ return 0;
109 }
110
0/2
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Usage();
111 ✗ return 2;
112
0/2
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ } catch (const std::exception& error) {
113
0/6
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ std::cerr << "recstore_ssd_layout: " << error.what() << "\n";
114 ✗ return 1;
115 ✗ }
116 }
117