1 |
|
|
/** |
2 |
|
|
* This file is part of the CernVM File System. |
3 |
|
|
*/ |
4 |
|
|
|
5 |
|
|
#include "catalog_counters.h" |
6 |
|
|
|
7 |
|
|
#include "directory_entry.h" |
8 |
|
|
|
9 |
|
|
namespace catalog { |
10 |
|
|
|
11 |
|
242 |
void DeltaCounters::ApplyDelta(const DirectoryEntry &dirent, const int delta) { |
12 |
✓✓ |
242 |
if (dirent.IsRegular()) { |
13 |
|
128 |
self.regular_files += delta; |
14 |
|
128 |
self.file_size += delta * dirent.size(); |
15 |
✓✓ |
128 |
if (dirent.IsChunkedFile()) { |
16 |
|
18 |
self.chunked_files += delta; |
17 |
|
18 |
self.chunked_file_size += delta * dirent.size(); |
18 |
|
|
} |
19 |
✓✓ |
128 |
if (dirent.IsExternalFile()) { |
20 |
|
3 |
self.externals += delta; |
21 |
|
3 |
self.external_file_size += delta * dirent.size(); |
22 |
|
|
} |
23 |
✓✓ |
114 |
} else if (dirent.IsLink()) { |
24 |
|
18 |
self.symlinks += delta; |
25 |
✓✓ |
96 |
} else if (dirent.IsSpecial()) { |
26 |
|
4 |
self.specials += delta; |
27 |
✓✗ |
92 |
} else if (dirent.IsDirectory()) { |
28 |
|
92 |
self.directories += delta; |
29 |
|
|
} else { |
30 |
|
|
assert(false); |
31 |
|
|
} |
32 |
✗✓ |
242 |
if (dirent.HasXattrs()) { |
33 |
|
|
self.xattrs += delta; |
34 |
|
|
} |
35 |
|
242 |
} |
36 |
|
|
|
37 |
|
|
|
38 |
|
9 |
void DeltaCounters::PopulateToParent(DeltaCounters *parent) const { |
39 |
|
9 |
parent->subtree.Add(self); |
40 |
|
9 |
parent->subtree.Add(subtree); |
41 |
|
9 |
} |
42 |
|
|
|
43 |
|
|
|
44 |
|
1 |
void Counters::ApplyDelta(const DeltaCounters &delta) { |
45 |
|
1 |
self.Add(delta.self); |
46 |
|
1 |
subtree.Add(delta.subtree); |
47 |
|
1 |
} |
48 |
|
|
|
49 |
|
|
|
50 |
|
1 |
void Counters::AddAsSubtree(DeltaCounters *delta) const { |
51 |
|
1 |
delta->subtree.Add(self); |
52 |
|
1 |
delta->subtree.Add(subtree); |
53 |
|
1 |
} |
54 |
|
|
|
55 |
|
|
|
56 |
|
1 |
void Counters::MergeIntoParent(DeltaCounters *parent_delta) const { |
57 |
|
1 |
parent_delta->self.Add(self); |
58 |
|
1 |
parent_delta->subtree.Subtract(self); |
59 |
|
1 |
} |
60 |
|
|
|
61 |
|
|
|
62 |
|
88 |
Counters_t Counters::GetSelfEntries() const { |
63 |
|
88 |
return self.regular_files + self.symlinks + self.specials + self.directories; |
64 |
|
|
} |
65 |
|
|
|
66 |
|
|
|
67 |
|
44 |
Counters_t Counters::GetSubtreeEntries() const { |
68 |
|
|
return subtree.regular_files + subtree.symlinks + subtree.specials + |
69 |
|
44 |
subtree.directories; |
70 |
|
|
} |
71 |
|
|
|
72 |
|
|
|
73 |
|
42 |
Counters_t Counters::GetAllEntries() const { |
74 |
|
42 |
return GetSelfEntries() + GetSubtreeEntries(); |
75 |
|
|
} |
76 |
|
|
|
77 |
|
|
|
78 |
|
3 |
DeltaCounters Counters::Diff(const Counters &from, const Counters &to) { |
79 |
|
3 |
DeltaCounters result; |
80 |
|
3 |
result.self.Add(to.self); |
81 |
|
3 |
result.subtree.Add(to.subtree); |
82 |
|
3 |
result.self.Subtract(from.self); |
83 |
|
3 |
result.subtree.Subtract(from.subtree); |
84 |
|
3 |
return result; |
85 |
|
|
} |
86 |
|
|
|
87 |
|
|
} // namespace catalog |