From 3d3ec9af8e7edfa32fb62ca37a9d2ef5e47344c5 Mon Sep 17 00:00:00 2001 From: "github-merge-queue[bot]" Date: Mon, 20 Oct 2025 18:20:00 -0700 Subject: [PATCH] deploy: a7792ebcae63db64e9ae3d7704576252837c2512 --- Backend_8h_source.html | 123 +- NuDBFactory_8cpp_source.html | 973 ++--- NuDBFactory__test_8cpp_source.html | 646 +++ annotated.html | 25 +- ...d__associative__container__test__base.html | 2 +- classbeast_1_1unit__test_1_1suite.html | 2 +- classes.html | 2 +- ...ipple_1_1NodeStore_1_1Backend-members.html | 23 +- classripple_1_1NodeStore_1_1Backend.html | 38 +- ...1_1NodeStore_1_1MemoryBackend-members.html | 33 +- ...sripple_1_1NodeStore_1_1MemoryBackend.html | 38 +- ...e_1_1NodeStore_1_1NuDBBackend-members.html | 37 +- classripple_1_1NodeStore_1_1NuDBBackend.html | 186 +- ...1NodeStore_1_1NuDBBackend__coll__graph.map | 28 +- ...1NodeStore_1_1NuDBBackend__coll__graph.md5 | 2 +- ...1NodeStore_1_1NuDBBackend__coll__graph.png | Bin 39524 -> 41042 bytes classripple_1_1NodeStore_1_1NuDBFactory.html | 12 +- ...odeStore_1_1NuDBFactory__test-members.html | 140 + ...ple_1_1NodeStore_1_1NuDBFactory__test.html | 1846 +++++++++ ...tore_1_1NuDBFactory__test__coll__graph.map | 45 + ...tore_1_1NuDBFactory__test__coll__graph.md5 | 1 + ...tore_1_1NuDBFactory__test__coll__graph.png | Bin 0 -> 99936 bytes ...e_1_1NuDBFactory__test__inherit__graph.map | 7 + ...e_1_1NuDBFactory__test__inherit__graph.md5 | 1 + ...e_1_1NuDBFactory__test__inherit__graph.png | Bin 0 -> 9228 bytes ...e_1_1NodeStore_1_1NullBackend-members.html | 27 +- classripple_1_1NodeStore_1_1NullBackend.html | 38 +- classripple_1_1NodeStore_1_1TestBase.html | 16 +- ...1NodeStore_1_1TestBase__inherit__graph.map | 14 +- ...1NodeStore_1_1TestBase__inherit__graph.md5 | 2 +- ...1NodeStore_1_1TestBase__inherit__graph.png | Bin 16937 -> 23271 bytes classripple_1_1TestSuite.html | 2 +- classripple_1_1test_1_1TestOutputSuite.html | 2 +- classripple_1_1test_1_1jtx_1_1AMMTest.html | 2 +- ...sripple_1_1test_1_1jtx_1_1AMMTestBase.html | 2 +- dir_dfcebd9d0776d19b63297011168b92d5.html | 2 + functions_a.html | 2 +- functions_b.html | 12 +- functions_c.html | 39 +- functions_d.html | 2 +- functions_e.html | 2 +- functions_func.html | 2 +- functions_func_b.html | 4 +- functions_func_c.html | 21 +- functions_func_d.html | 2 +- functions_func_e.html | 2 +- functions_func_g.html | 13 +- functions_func_j.html | 8 +- functions_func_m.html | 8 +- functions_func_n.html | 2 +- functions_func_o.html | 12 +- functions_func_p.html | 9 +- functions_func_r.html | 12 +- functions_func_s.html | 10 +- functions_func_t.html | 26 +- functions_g.html | 7 +- functions_i.html | 22 +- functions_j.html | 6 +- functions_l.html | 2 +- functions_m.html | 2 +- functions_n.html | 4 +- functions_o.html | 2 +- functions_p.html | 24 +- functions_r.html | 8 +- functions_s.html | 12 +- functions_t.html | 34 +- functions_u.html | 4 +- functions_vars_b.html | 2 +- functions_w.html | 4 +- hierarchy.html | 1 + inherit_graph_100.map | 2 +- inherit_graph_100.md5 | 2 +- inherit_graph_1001.map | 2 +- inherit_graph_1001.md5 | 2 +- inherit_graph_1002.map | 2 +- inherit_graph_1002.md5 | 2 +- inherit_graph_1004.map | 2 +- inherit_graph_1004.md5 | 2 +- inherit_graph_1005.map | 2 +- inherit_graph_1005.md5 | 2 +- inherit_graph_101.map | 2 +- inherit_graph_101.md5 | 2 +- inherit_graph_1012.map | 2 +- inherit_graph_1012.md5 | 2 +- inherit_graph_1013.map | 8 +- inherit_graph_1013.md5 | 2 +- inherit_graph_1014.map | 2 +- inherit_graph_1014.md5 | 2 +- inherit_graph_1015.map | 2 +- inherit_graph_1015.md5 | 2 +- inherit_graph_1016.map | 4 +- inherit_graph_1016.md5 | 2 +- inherit_graph_1017.map | 2 +- inherit_graph_1017.md5 | 2 +- inherit_graph_1018.map | 2 +- inherit_graph_1018.md5 | 2 +- inherit_graph_1019.map | 34 +- inherit_graph_1019.md5 | 2 +- inherit_graph_102.map | 2 +- inherit_graph_102.md5 | 2 +- inherit_graph_1020.map | 54 +- inherit_graph_1020.md5 | 2 +- inherit_graph_1021.map | 6 +- inherit_graph_1021.md5 | 2 +- inherit_graph_1022.map | 4 +- inherit_graph_1022.md5 | 2 +- inherit_graph_1023.map | 2 +- inherit_graph_1023.md5 | 2 +- inherit_graph_1024.map | 2 +- inherit_graph_1024.md5 | 2 +- inherit_graph_1025.map | 18 +- inherit_graph_1025.md5 | 2 +- inherit_graph_1026.map | 4 +- inherit_graph_1026.md5 | 2 +- inherit_graph_1027.map | 26 +- inherit_graph_1027.md5 | 2 +- inherit_graph_1028.map | 10 +- inherit_graph_1028.md5 | 2 +- inherit_graph_1029.map | 2 +- inherit_graph_1029.md5 | 2 +- inherit_graph_103.map | 2 +- inherit_graph_103.md5 | 2 +- inherit_graph_1031.map | 4 +- inherit_graph_1031.md5 | 2 +- inherit_graph_1032.map | 2 +- inherit_graph_1032.md5 | 2 +- inherit_graph_1033.map | 2 +- inherit_graph_1033.md5 | 2 +- inherit_graph_1034.map | 2 +- inherit_graph_1034.md5 | 2 +- inherit_graph_1035.map | 2 +- inherit_graph_1035.md5 | 2 +- inherit_graph_1036.map | 2 +- inherit_graph_1036.md5 | 2 +- inherit_graph_1037.map | 2 +- inherit_graph_1037.md5 | 2 +- inherit_graph_1038.map | 10 +- inherit_graph_1038.md5 | 2 +- inherit_graph_1039.map | 10 +- inherit_graph_1039.md5 | 2 +- inherit_graph_104.map | 2 +- inherit_graph_104.md5 | 2 +- inherit_graph_1041.map | 2 +- inherit_graph_1041.md5 | 2 +- inherit_graph_1042.map | 2 +- inherit_graph_1042.md5 | 2 +- inherit_graph_1043.map | 38 +- inherit_graph_1043.md5 | 2 +- inherit_graph_1044.map | 2 +- inherit_graph_1044.md5 | 2 +- inherit_graph_1045.map | 30 +- inherit_graph_1045.md5 | 2 +- inherit_graph_1046.map | 2 +- inherit_graph_1046.md5 | 2 +- inherit_graph_1049.map | 4 +- inherit_graph_1049.md5 | 2 +- inherit_graph_117.map | 62 +- inherit_graph_117.md5 | 2 +- inherit_graph_118.map | 8 +- inherit_graph_118.md5 | 2 +- inherit_graph_119.map | 2 +- inherit_graph_119.md5 | 2 +- inherit_graph_122.map | 14 +- inherit_graph_122.md5 | 2 +- inherit_graph_123.map | 2 +- inherit_graph_123.md5 | 2 +- inherit_graph_124.map | 6 +- inherit_graph_124.md5 | 2 +- inherit_graph_125.map | 4 +- inherit_graph_125.md5 | 2 +- inherit_graph_126.map | 20 +- inherit_graph_126.md5 | 2 +- inherit_graph_127.map | 2 +- inherit_graph_127.md5 | 2 +- inherit_graph_128.map | 2 +- inherit_graph_128.md5 | 2 +- inherit_graph_130.map | 6 +- inherit_graph_130.md5 | 2 +- inherit_graph_142.map | 2 +- inherit_graph_142.md5 | 2 +- inherit_graph_143.map | 4 +- inherit_graph_143.md5 | 2 +- inherit_graph_147.map | 4 +- inherit_graph_147.md5 | 2 +- inherit_graph_149.map | 2 +- inherit_graph_149.md5 | 2 +- inherit_graph_150.map | 2 +- inherit_graph_150.md5 | 2 +- inherit_graph_151.map | 2 +- inherit_graph_151.md5 | 2 +- inherit_graph_156.map | 2 +- inherit_graph_156.md5 | 2 +- inherit_graph_168.map | 6 +- inherit_graph_168.md5 | 2 +- inherit_graph_169.map | 4 +- inherit_graph_169.md5 | 2 +- inherit_graph_182.map | 2 +- inherit_graph_182.md5 | 2 +- inherit_graph_202.map | 2 +- inherit_graph_202.md5 | 2 +- inherit_graph_219.map | 2 +- inherit_graph_219.md5 | 2 +- inherit_graph_220.map | 2 +- inherit_graph_220.md5 | 2 +- inherit_graph_221.map | 2 +- inherit_graph_221.md5 | 2 +- inherit_graph_222.map | 2 +- inherit_graph_222.md5 | 2 +- inherit_graph_223.map | 2 +- inherit_graph_223.md5 | 2 +- inherit_graph_224.map | 2 +- inherit_graph_224.md5 | 2 +- inherit_graph_225.map | 30 +- inherit_graph_225.md5 | 2 +- inherit_graph_226.map | 8 +- inherit_graph_226.md5 | 2 +- inherit_graph_227.map | 8 +- inherit_graph_227.md5 | 2 +- inherit_graph_228.map | 2 +- inherit_graph_228.md5 | 2 +- inherit_graph_229.map | 32 +- inherit_graph_229.md5 | 2 +- inherit_graph_230.map | 2 +- inherit_graph_230.md5 | 2 +- inherit_graph_231.map | 2 +- inherit_graph_231.md5 | 2 +- inherit_graph_232.map | 2 +- inherit_graph_232.md5 | 2 +- inherit_graph_234.map | 2 +- inherit_graph_234.md5 | 2 +- inherit_graph_235.map | 8 +- inherit_graph_235.md5 | 2 +- inherit_graph_236.map | 2 +- inherit_graph_236.md5 | 2 +- inherit_graph_237.map | 20 +- inherit_graph_237.md5 | 2 +- inherit_graph_238.map | 2 +- inherit_graph_238.md5 | 2 +- inherit_graph_239.map | 2 +- inherit_graph_239.md5 | 2 +- inherit_graph_240.map | 62 +- inherit_graph_240.md5 | 2 +- inherit_graph_241.map | 2 +- inherit_graph_241.md5 | 2 +- inherit_graph_242.map | 2 +- inherit_graph_242.md5 | 2 +- inherit_graph_243.map | 4 +- inherit_graph_243.md5 | 2 +- inherit_graph_249.map | 2 +- inherit_graph_249.md5 | 2 +- inherit_graph_251.map | 2 +- inherit_graph_251.md5 | 2 +- inherit_graph_276.map | 6 +- inherit_graph_276.md5 | 2 +- inherit_graph_278.map | 4 +- inherit_graph_278.md5 | 2 +- inherit_graph_281.map | 2 +- inherit_graph_281.md5 | 2 +- inherit_graph_283.map | 8 +- inherit_graph_283.md5 | 2 +- inherit_graph_286.map | 2 +- inherit_graph_286.md5 | 2 +- inherit_graph_295.map | 2 +- inherit_graph_295.md5 | 2 +- inherit_graph_297.map | 2 +- inherit_graph_297.md5 | 2 +- inherit_graph_298.map | 2 +- inherit_graph_298.md5 | 2 +- inherit_graph_316.map | 4 +- inherit_graph_316.md5 | 2 +- inherit_graph_319.map | 2 +- inherit_graph_319.md5 | 2 +- inherit_graph_323.map | 2 +- inherit_graph_323.md5 | 2 +- inherit_graph_328.map | 4 +- inherit_graph_328.md5 | 2 +- inherit_graph_329.map | 2 +- inherit_graph_329.md5 | 2 +- inherit_graph_331.map | 4 +- inherit_graph_331.md5 | 2 +- inherit_graph_350.map | 2 +- inherit_graph_350.md5 | 2 +- inherit_graph_353.map | 2 +- inherit_graph_353.md5 | 2 +- inherit_graph_354.map | 2 +- inherit_graph_354.md5 | 2 +- inherit_graph_379.map | 2 +- inherit_graph_379.md5 | 2 +- inherit_graph_382.map | 6 +- inherit_graph_382.md5 | 2 +- inherit_graph_411.map | 2 +- inherit_graph_411.md5 | 2 +- inherit_graph_413.map | 6 +- inherit_graph_413.md5 | 2 +- inherit_graph_416.map | 6 +- inherit_graph_416.md5 | 2 +- inherit_graph_419.map | 6 +- inherit_graph_419.md5 | 2 +- inherit_graph_422.map | 2 +- inherit_graph_422.md5 | 2 +- inherit_graph_425.map | 4 +- inherit_graph_425.md5 | 2 +- inherit_graph_427.map | 2 +- inherit_graph_427.md5 | 2 +- inherit_graph_449.map | 24 +- inherit_graph_449.md5 | 2 +- inherit_graph_481.map | 2 +- inherit_graph_481.md5 | 2 +- inherit_graph_493.map | 2 +- inherit_graph_493.md5 | 2 +- inherit_graph_496.map | 4 +- inherit_graph_496.md5 | 2 +- inherit_graph_498.map | 4 +- inherit_graph_498.md5 | 2 +- inherit_graph_504.map | 6 +- inherit_graph_504.md5 | 2 +- inherit_graph_505.map | 4 +- inherit_graph_505.md5 | 2 +- inherit_graph_510.map | 4 +- inherit_graph_510.md5 | 2 +- inherit_graph_552.map | 4 +- inherit_graph_552.md5 | 2 +- inherit_graph_573.map | 4 +- inherit_graph_573.md5 | 2 +- inherit_graph_607.map | 2 +- inherit_graph_607.md5 | 2 +- inherit_graph_612.map | 2 +- inherit_graph_612.md5 | 2 +- inherit_graph_619.map | 2 +- inherit_graph_619.md5 | 2 +- inherit_graph_621.map | 8 +- inherit_graph_621.md5 | 2 +- inherit_graph_628.map | 4 +- inherit_graph_628.md5 | 2 +- inherit_graph_629.map | 12 +- inherit_graph_629.md5 | 2 +- inherit_graph_651.map | 4 +- inherit_graph_651.md5 | 2 +- inherit_graph_674.map | 6 +- inherit_graph_674.md5 | 2 +- inherit_graph_694.map | 2 +- inherit_graph_694.md5 | 2 +- inherit_graph_771.map | 2 +- inherit_graph_771.md5 | 2 +- inherit_graph_806.map | 2 +- inherit_graph_806.md5 | 2 +- inherit_graph_807.map | 2 +- inherit_graph_807.md5 | 2 +- inherit_graph_808.map | 2 +- inherit_graph_808.md5 | 2 +- inherit_graph_809.map | 2 +- inherit_graph_809.md5 | 2 +- inherit_graph_812.map | 2 +- inherit_graph_812.md5 | 2 +- inherit_graph_920.map | 2 +- inherit_graph_920.md5 | 2 +- inherit_graph_921.map | 2 +- inherit_graph_921.md5 | 2 +- inherit_graph_930.map | 6 +- inherit_graph_930.md5 | 2 +- inherit_graph_931.map | 2 +- inherit_graph_931.md5 | 2 +- inherit_graph_932.map | 2 +- inherit_graph_932.md5 | 2 +- inherit_graph_94.map | 944 ++--- inherit_graph_94.md5 | 2 +- inherit_graph_94.png | Bin 2453445 -> 2457348 bytes inherit_graph_941.map | 128 +- inherit_graph_941.md5 | 2 +- inherit_graph_963.map | 2 +- inherit_graph_963.md5 | 2 +- inherit_graph_999.map | 4 +- inherit_graph_999.md5 | 2 +- inherits.html | 166 +- namespacemembers_b.html | 2 +- namespacemembers_func_b.html | 2 +- namespaceripple_1_1NodeStore.html | 46 +- namespaces.html | 25 +- search/all_10.js | 8 +- search/all_11.js | 4 +- search/all_13.js | 8 +- search/all_14.js | 12 +- search/all_15.js | 195 +- search/all_16.js | 8 +- search/all_17.js | 1309 +++--- search/all_19.js | 24 +- search/all_1a.js | 32 +- search/all_1b.js | 3588 +++++++++-------- search/all_1c.js | 2 +- search/all_1d.js | 2 +- search/all_1e.js | 8 +- search/all_20.js | 2 +- search/all_22.js | 2 +- search/all_8.js | 18 +- search/all_9.js | 102 +- search/all_a.js | 279 +- search/all_b.js | 4 +- search/all_c.js | 8 +- search/all_d.js | 8 +- search/all_e.js | 1123 +++--- search/all_f.js | 4 +- search/classes_d.js | 45 +- search/enumvalues_19.js | 2 +- search/enumvalues_e.js | 2 +- search/functions_1.js | 10 +- search/functions_10.js | 765 ++-- search/functions_12.js | 12 +- search/functions_13.js | 18 +- search/functions_14.js | 2680 ++++++------ search/functions_15.js | 2 +- search/functions_17.js | 2 +- search/functions_1b.js | 2 +- search/functions_2.js | 8 +- search/functions_3.js | 133 +- search/functions_4.js | 4 +- search/functions_5.js | 4 +- search/functions_6.js | 4 +- search/functions_7.js | 1029 ++--- search/functions_9.js | 6 +- search/functions_a.js | 4 +- search/functions_d.js | 8 +- search/functions_e.js | 4 +- search/functions_f.js | 4 +- search/typedefs_2.js | 2 +- search/typedefs_8.js | 2 +- search/variables_1.js | 4 +- search/variables_13.js | 2 +- search/variables_16.js | 2 +- search/variables_c.js | 2 +- search/variables_d.js | 2 +- 430 files changed, 10880 insertions(+), 7794 deletions(-) create mode 100644 NuDBFactory__test_8cpp_source.html create mode 100644 classripple_1_1NodeStore_1_1NuDBFactory__test-members.html create mode 100644 classripple_1_1NodeStore_1_1NuDBFactory__test.html create mode 100644 classripple_1_1NodeStore_1_1NuDBFactory__test__coll__graph.map create mode 100644 classripple_1_1NodeStore_1_1NuDBFactory__test__coll__graph.md5 create mode 100644 classripple_1_1NodeStore_1_1NuDBFactory__test__coll__graph.png create mode 100644 classripple_1_1NodeStore_1_1NuDBFactory__test__inherit__graph.map create mode 100644 classripple_1_1NodeStore_1_1NuDBFactory__test__inherit__graph.md5 create mode 100644 classripple_1_1NodeStore_1_1NuDBFactory__test__inherit__graph.png diff --git a/Backend_8h_source.html b/Backend_8h_source.html index ebb7deed43..b69ddd964c 100644 --- a/Backend_8h_source.html +++ b/Backend_8h_source.html @@ -119,70 +119,79 @@ $(document).ready(function() { init_codefold(0); });
53 virtual std::string
54 getName() = 0;
55
-
60 virtual void
-
61 open(bool createIfMissing = true) = 0;
-
62
-
65 virtual bool
-
66 isOpen() = 0;
-
67
-
75 virtual void
-
-
76 open(bool createIfMissing, uint64_t appType, uint64_t uid, uint64_t salt)
-
77 {
-
78 Throw<std::runtime_error>(
-
79 "Deterministic appType/uid/salt not supported by backend " +
-
80 getName());
-
81 }
+ +
+ +
60 {
+
61 return std::nullopt;
+
62 }
-
82
-
86 virtual void
-
87 close() = 0;
-
88
-
97 virtual Status
-
98 fetch(void const* key, std::shared_ptr<NodeObject>* pObject) = 0;
-
99
- - -
103
-
110 virtual void
- -
112
-
117 virtual void
-
118 storeBatch(Batch const& batch) = 0;
-
119
-
120 virtual void
-
121 sync() = 0;
-
122
-
129 virtual void
- -
131
-
133 virtual int
- -
135
+
63
+
68 virtual void
+
69 open(bool createIfMissing = true) = 0;
+
70
+
73 virtual bool
+
74 isOpen() = 0;
+
75
+
83 virtual void
+
+
84 open(bool createIfMissing, uint64_t appType, uint64_t uid, uint64_t salt)
+
85 {
+
86 Throw<std::runtime_error>(
+
87 "Deterministic appType/uid/salt not supported by backend " +
+
88 getName());
+
89 }
+
+
90
+
94 virtual void
+
95 close() = 0;
+
96
+
105 virtual Status
+
106 fetch(void const* key, std::shared_ptr<NodeObject>* pObject) = 0;
+
107
+ + +
111
+
118 virtual void
+ +
120
+
125 virtual void
+
126 storeBatch(Batch const& batch) = 0;
+
127
+
128 virtual void
+
129 sync() = 0;
+
130
137 virtual void
- +
139
-
146 virtual void
-
- -
148 {
-
149 }
+
141 virtual int
+ +
143
+
145 virtual void
+ +
147
+
154 virtual void
+
+ +
156 {
+
157 }
-
150
-
152 virtual int
-
153 fdRequired() const = 0;
-
154};
-
-
155
-
156} // namespace NodeStore
-
157} // namespace ripple
158
-
159#endif
+
160 virtual int
+
161 fdRequired() const = 0;
+
162};
+
+
163
+
164} // namespace NodeStore
+
165} // namespace ripple
+
166
+
167#endif
A backend used for the NodeStore.
Definition Backend.h:40
virtual void sync()=0
virtual std::string getName()=0
Get the human-readable name of this backend.
virtual void open(bool createIfMissing=true)=0
Open the backend.
+
virtual std::optional< std::size_t > getBlockSize() const
Get the block size for backends that support it.
Definition Backend.h:59
virtual void close()=0
Close the backend.
virtual void for_each(std::function< void(std::shared_ptr< NodeObject >)> f)=0
Visit every object in the database This is usually called during import.
virtual ~Backend()=default
Destroy the backend.
@@ -194,13 +203,15 @@ $(document).ready(function() { init_codefold(0); });
virtual int getWriteLoad()=0
Estimate the number of write operations pending.
virtual void storeBatch(Batch const &batch)=0
Store a group of objects.
virtual bool isOpen()=0
Returns true is the database is open.
-
virtual void open(bool createIfMissing, uint64_t appType, uint64_t uid, uint64_t salt)
Open the backend.
Definition Backend.h:76
-
virtual void verify()
Perform consistency checks on database.
Definition Backend.h:147
+
virtual void open(bool createIfMissing, uint64_t appType, uint64_t uid, uint64_t salt)
Open the backend.
Definition Backend.h:84
+
virtual void verify()
Perform consistency checks on database.
Definition Backend.h:155
+
T is_same_v
Status
Return codes from Backend operations.
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition algorithm.h:25
@ batch
Batch.
+
diff --git a/NuDBFactory_8cpp_source.html b/NuDBFactory_8cpp_source.html index 927ad60f2c..80b043c833 100644 --- a/NuDBFactory_8cpp_source.html +++ b/NuDBFactory_8cpp_source.html @@ -107,454 +107,520 @@ $(document).ready(function() { init_codefold(0); });
24#include <xrpld/nodestore/detail/codec.h>
25
26#include <xrpl/basics/contract.h>
-
27#include <xrpl/beast/utility/instrumentation.h>
-
28
-
29#include <boost/filesystem.hpp>
-
30
-
31#include <nudb/nudb.hpp>
-
32
-
33#include <chrono>
-
34#include <cstdint>
-
35#include <cstdio>
-
36#include <exception>
-
37#include <memory>
-
38
-
39namespace ripple {
-
40namespace NodeStore {
-
41
-
-
42class NuDBBackend : public Backend
-
43{
-
44public:
-
45 // "appnum" is an application-defined constant stored in the header of a
-
46 // NuDB database. We used it to identify shard databases before that code
-
47 // was removed. For now, its only use is a sanity check that the database
-
48 // was created by xrpld.
-
49 static constexpr std::uint64_t appnum = 1;
-
50
- -
52 size_t const keyBytes_;
- - -
55 nudb::store db_;
- - -
58
-
- -
60 size_t keyBytes,
-
61 Section const& keyValues,
- -
63 Scheduler& scheduler,
-
64 beast::Journal journal)
-
65 : j_(journal)
-
66 , keyBytes_(keyBytes)
- -
68 , name_(get(keyValues, "path"))
-
69 , deletePath_(false)
-
70 , scheduler_(scheduler)
-
71 {
-
72 if (name_.empty())
-
73 Throw<std::runtime_error>(
-
74 "nodestore: Missing path in NuDB backend");
-
75 }
+
27#include <xrpl/beast/core/LexicalCast.h>
+
28#include <xrpl/beast/utility/instrumentation.h>
+
29
+
30#include <boost/filesystem.hpp>
+
31
+
32#include <nudb/nudb.hpp>
+
33
+
34#include <chrono>
+
35#include <cstdint>
+
36#include <cstdio>
+
37#include <exception>
+
38#include <memory>
+
39
+
40namespace ripple {
+
41namespace NodeStore {
+
42
+
+
43class NuDBBackend : public Backend
+
44{
+
45public:
+
46 // "appnum" is an application-defined constant stored in the header of a
+
47 // NuDB database. We used it to identify shard databases before that code
+
48 // was removed. For now, its only use is a sanity check that the database
+
49 // was created by xrpld.
+
50 static constexpr std::uint64_t appnum = 1;
+
51
+ +
53 size_t const keyBytes_;
+ + + +
57 nudb::store db_;
+ + +
60
+
+ +
62 size_t keyBytes,
+
63 Section const& keyValues,
+ +
65 Scheduler& scheduler,
+
66 beast::Journal journal)
+
67 : j_(journal)
+
68 , keyBytes_(keyBytes)
+ +
70 , name_(get(keyValues, "path"))
+
71 , blockSize_(parseBlockSize(name_, keyValues, journal))
+
72 , deletePath_(false)
+
73 , scheduler_(scheduler)
+
74 {
+
75 if (name_.empty())
+
76 Throw<std::runtime_error>(
+
77 "nodestore: Missing path in NuDB backend");
+
78 }
-
76
-
- -
78 size_t keyBytes,
-
79 Section const& keyValues,
- -
81 Scheduler& scheduler,
-
82 nudb::context& context,
-
83 beast::Journal journal)
-
84 : j_(journal)
-
85 , keyBytes_(keyBytes)
- -
87 , name_(get(keyValues, "path"))
-
88 , db_(context)
-
89 , deletePath_(false)
-
90 , scheduler_(scheduler)
-
91 {
-
92 if (name_.empty())
-
93 Throw<std::runtime_error>(
-
94 "nodestore: Missing path in NuDB backend");
-
95 }
+
79
+
+ +
81 size_t keyBytes,
+
82 Section const& keyValues,
+ +
84 Scheduler& scheduler,
+
85 nudb::context& context,
+
86 beast::Journal journal)
+
87 : j_(journal)
+
88 , keyBytes_(keyBytes)
+ +
90 , name_(get(keyValues, "path"))
+
91 , blockSize_(parseBlockSize(name_, keyValues, journal))
+
92 , db_(context)
+
93 , deletePath_(false)
+
94 , scheduler_(scheduler)
+
95 {
+
96 if (name_.empty())
+
97 Throw<std::runtime_error>(
+
98 "nodestore: Missing path in NuDB backend");
+
99 }
-
96
-
-
97 ~NuDBBackend() override
-
98 {
-
99 try
-
100 {
-
101 // close can throw and we don't want the destructor to throw.
-
102 close();
-
103 }
-
104 catch (nudb::system_error const&)
-
105 {
-
106 // Don't allow exceptions to propagate out of destructors.
-
107 // close() has already logged the error.
-
108 }
-
109 }
+
100
+
+
101 ~NuDBBackend() override
+
102 {
+
103 try
+
104 {
+
105 // close can throw and we don't want the destructor to throw.
+
106 close();
+
107 }
+
108 catch (nudb::system_error const&)
+
109 {
+
110 // Don't allow exceptions to propagate out of destructors.
+
111 // close() has already logged the error.
+
112 }
+
113 }
-
110
- -
-
112 getName() override
-
113 {
-
114 return name_;
-
115 }
+
114
+ +
+
116 getName() override
+
117 {
+
118 return name_;
+
119 }
-
116
-
117 void
-
-
118 open(bool createIfMissing, uint64_t appType, uint64_t uid, uint64_t salt)
-
119 override
-
120 {
-
121 using namespace boost::filesystem;
-
122 if (db_.is_open())
-
123 {
-
124 // LCOV_EXCL_START
-
125 UNREACHABLE(
-
126 "ripple::NodeStore::NuDBBackend::open : database is already "
-
127 "open");
-
128 JLOG(j_.error()) << "database is already open";
-
129 return;
-
130 // LCOV_EXCL_STOP
-
131 }
-
132 auto const folder = path(name_);
-
133 auto const dp = (folder / "nudb.dat").string();
-
134 auto const kp = (folder / "nudb.key").string();
-
135 auto const lp = (folder / "nudb.log").string();
-
136 nudb::error_code ec;
-
137 if (createIfMissing)
-
138 {
-
139 create_directories(folder);
-
140 nudb::create<nudb::xxhasher>(
-
141 dp,
-
142 kp,
-
143 lp,
-
144 appType,
-
145 uid,
-
146 salt,
-
147 keyBytes_,
-
148 nudb::block_size(kp),
-
149 0.50,
-
150 ec);
-
151 if (ec == nudb::errc::file_exists)
-
152 ec = {};
-
153 if (ec)
-
154 Throw<nudb::system_error>(ec);
-
155 }
-
156 db_.open(dp, kp, lp, ec);
-
157 if (ec)
-
158 Throw<nudb::system_error>(ec);
-
159
-
160 if (db_.appnum() != appnum)
-
161 Throw<std::runtime_error>("nodestore: unknown appnum");
-
162 db_.set_burst(burstSize_);
-
163 }
+
120
+ +
+
122 getBlockSize() const override
+
123 {
+
124 return blockSize_;
+
125 }
-
164
-
165 bool
-
-
166 isOpen() override
-
167 {
-
168 return db_.is_open();
-
169 }
+
126
+
127 void
+
+
128 open(bool createIfMissing, uint64_t appType, uint64_t uid, uint64_t salt)
+
129 override
+
130 {
+
131 using namespace boost::filesystem;
+
132 if (db_.is_open())
+
133 {
+
134 // LCOV_EXCL_START
+
135 UNREACHABLE(
+
136 "ripple::NodeStore::NuDBBackend::open : database is already "
+
137 "open");
+
138 JLOG(j_.error()) << "database is already open";
+
139 return;
+
140 // LCOV_EXCL_STOP
+
141 }
+
142 auto const folder = path(name_);
+
143 auto const dp = (folder / "nudb.dat").string();
+
144 auto const kp = (folder / "nudb.key").string();
+
145 auto const lp = (folder / "nudb.log").string();
+
146 nudb::error_code ec;
+
147 if (createIfMissing)
+
148 {
+
149 create_directories(folder);
+
150 nudb::create<nudb::xxhasher>(
+
151 dp,
+
152 kp,
+
153 lp,
+
154 appType,
+
155 uid,
+
156 salt,
+
157 keyBytes_,
+ +
159 0.50,
+
160 ec);
+
161 if (ec == nudb::errc::file_exists)
+
162 ec = {};
+
163 if (ec)
+
164 Throw<nudb::system_error>(ec);
+
165 }
+
166 db_.open(dp, kp, lp, ec);
+
167 if (ec)
+
168 Throw<nudb::system_error>(ec);
+
169
+
170 if (db_.appnum() != appnum)
+
171 Throw<std::runtime_error>("nodestore: unknown appnum");
+
172 db_.set_burst(burstSize_);
+
173 }
-
170
-
171 void
-
-
172 open(bool createIfMissing) override
-
173 {
-
174 open(createIfMissing, appnum, nudb::make_uid(), nudb::make_salt());
-
175 }
+
174
+
175 bool
+
+
176 isOpen() override
+
177 {
+
178 return db_.is_open();
+
179 }
-
176
-
177 void
-
-
178 close() override
-
179 {
-
180 if (db_.is_open())
-
181 {
-
182 nudb::error_code ec;
-
183 db_.close(ec);
-
184 if (ec)
-
185 {
-
186 // Log to make sure the nature of the error gets to the user.
-
187 JLOG(j_.fatal()) << "NuBD close() failed: " << ec.message();
-
188 Throw<nudb::system_error>(ec);
-
189 }
-
190
-
191 if (deletePath_)
-
192 {
-
193 boost::filesystem::remove_all(name_, ec);
-
194 if (ec)
-
195 {
-
196 JLOG(j_.fatal()) << "Filesystem remove_all of " << name_
-
197 << " failed with: " << ec.message();
-
198 }
+
180
+
181 void
+
+
182 open(bool createIfMissing) override
+
183 {
+
184 open(createIfMissing, appnum, nudb::make_uid(), nudb::make_salt());
+
185 }
+
+
186
+
187 void
+
+
188 close() override
+
189 {
+
190 if (db_.is_open())
+
191 {
+
192 nudb::error_code ec;
+
193 db_.close(ec);
+
194 if (ec)
+
195 {
+
196 // Log to make sure the nature of the error gets to the user.
+
197 JLOG(j_.fatal()) << "NuBD close() failed: " << ec.message();
+
198 Throw<nudb::system_error>(ec);
199 }
-
200 }
-
201 }
+
200
+
201 if (deletePath_)
+
202 {
+
203 boost::filesystem::remove_all(name_, ec);
+
204 if (ec)
+
205 {
+
206 JLOG(j_.fatal()) << "Filesystem remove_all of " << name_
+
207 << " failed with: " << ec.message();
+
208 }
+
209 }
+
210 }
+
211 }
-
202
-
203 Status
-
-
204 fetch(void const* key, std::shared_ptr<NodeObject>* pno) override
-
205 {
-
206 Status status;
-
207 pno->reset();
-
208 nudb::error_code ec;
-
209 db_.fetch(
-
210 key,
-
211 [key, pno, &status](void const* data, std::size_t size) {
-
212 nudb::detail::buffer bf;
-
213 auto const result = nodeobject_decompress(data, size, bf);
-
214 DecodedBlob decoded(key, result.first, result.second);
-
215 if (!decoded.wasOk())
-
216 {
-
217 status = dataCorrupt;
-
218 return;
-
219 }
-
220 *pno = decoded.createObject();
-
221 status = ok;
-
222 },
-
223 ec);
-
224 if (ec == nudb::error::key_not_found)
-
225 return notFound;
-
226 if (ec)
-
227 Throw<nudb::system_error>(ec);
-
228 return status;
-
229 }
+
212
+
213 Status
+
+
214 fetch(void const* key, std::shared_ptr<NodeObject>* pno) override
+
215 {
+
216 Status status;
+
217 pno->reset();
+
218 nudb::error_code ec;
+
219 db_.fetch(
+
220 key,
+
221 [key, pno, &status](void const* data, std::size_t size) {
+
222 nudb::detail::buffer bf;
+
223 auto const result = nodeobject_decompress(data, size, bf);
+
224 DecodedBlob decoded(key, result.first, result.second);
+
225 if (!decoded.wasOk())
+
226 {
+
227 status = dataCorrupt;
+
228 return;
+
229 }
+
230 *pno = decoded.createObject();
+
231 status = ok;
+
232 },
+
233 ec);
+
234 if (ec == nudb::error::key_not_found)
+
235 return notFound;
+
236 if (ec)
+
237 Throw<nudb::system_error>(ec);
+
238 return status;
+
239 }
-
230
- -
- -
233 {
- -
235 results.reserve(hashes.size());
-
236 for (auto const& h : hashes)
-
237 {
- -
239 Status status = fetch(h->begin(), &nObj);
-
240 if (status != ok)
-
241 results.push_back({});
-
242 else
-
243 results.push_back(nObj);
-
244 }
-
245
-
246 return {results, ok};
-
247 }
+
240
+ +
+ +
243 {
+ +
245 results.reserve(hashes.size());
+
246 for (auto const& h : hashes)
+
247 {
+ +
249 Status status = fetch(h->begin(), &nObj);
+
250 if (status != ok)
+
251 results.push_back({});
+
252 else
+
253 results.push_back(nObj);
+
254 }
+
255
+
256 return {results, ok};
+
257 }
-
248
-
249 void
-
- -
251 {
-
252 EncodedBlob e(no);
-
253 nudb::error_code ec;
-
254 nudb::detail::buffer bf;
-
255 auto const result = nodeobject_compress(e.getData(), e.getSize(), bf);
-
256 db_.insert(e.getKey(), result.first, result.second, ec);
-
257 if (ec && ec != nudb::error::key_exists)
-
258 Throw<nudb::system_error>(ec);
-
259 }
+
258
+
259 void
+
+ +
261 {
+
262 EncodedBlob e(no);
+
263 nudb::error_code ec;
+
264 nudb::detail::buffer bf;
+
265 auto const result = nodeobject_compress(e.getData(), e.getSize(), bf);
+
266 db_.insert(e.getKey(), result.first, result.second, ec);
+
267 if (ec && ec != nudb::error::key_exists)
+
268 Throw<nudb::system_error>(ec);
+
269 }
-
260
-
261 void
-
- -
263 {
-
264 BatchWriteReport report;
-
265 report.writeCount = 1;
-
266 auto const start = std::chrono::steady_clock::now();
-
267 do_insert(no);
-
268 report.elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(
- -
270 scheduler_.onBatchWrite(report);
-
271 }
+
270
+
271 void
+
+ +
273 {
+
274 BatchWriteReport report;
+
275 report.writeCount = 1;
+
276 auto const start = std::chrono::steady_clock::now();
+
277 do_insert(no);
+
278 report.elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(
+ +
280 scheduler_.onBatchWrite(report);
+
281 }
-
272
-
273 void
-
-
274 storeBatch(Batch const& batch) override
-
275 {
-
276 BatchWriteReport report;
-
277 report.writeCount = batch.size();
-
278 auto const start = std::chrono::steady_clock::now();
-
279 for (auto const& e : batch)
-
280 do_insert(e);
-
281 report.elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(
- -
283 scheduler_.onBatchWrite(report);
-
284 }
+
282
+
283 void
+
+
284 storeBatch(Batch const& batch) override
+
285 {
+
286 BatchWriteReport report;
+
287 report.writeCount = batch.size();
+
288 auto const start = std::chrono::steady_clock::now();
+
289 for (auto const& e : batch)
+
290 do_insert(e);
+
291 report.elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(
+ +
293 scheduler_.onBatchWrite(report);
+
294 }
-
285
-
286 void
-
-
287 sync() override
-
288 {
-
289 }
+
295
+
296 void
+
+
297 sync() override
+
298 {
+
299 }
-
290
-
291 void
-
- -
293 {
-
294 auto const dp = db_.dat_path();
-
295 auto const kp = db_.key_path();
-
296 auto const lp = db_.log_path();
-
297 // auto const appnum = db_.appnum();
-
298 nudb::error_code ec;
-
299 db_.close(ec);
-
300 if (ec)
-
301 Throw<nudb::system_error>(ec);
-
302 nudb::visit(
-
303 dp,
-
304 [&](void const* key,
-
305 std::size_t key_bytes,
-
306 void const* data,
-
307 std::size_t size,
-
308 nudb::error_code&) {
-
309 nudb::detail::buffer bf;
-
310 auto const result = nodeobject_decompress(data, size, bf);
-
311 DecodedBlob decoded(key, result.first, result.second);
-
312 if (!decoded.wasOk())
-
313 {
-
314 ec = make_error_code(nudb::error::missing_value);
-
315 return;
-
316 }
-
317 f(decoded.createObject());
-
318 },
-
319 nudb::no_progress{},
-
320 ec);
-
321 if (ec)
-
322 Throw<nudb::system_error>(ec);
-
323 db_.open(dp, kp, lp, ec);
-
324 if (ec)
-
325 Throw<nudb::system_error>(ec);
-
326 }
+
300
+
301 void
+
+ +
303 {
+
304 auto const dp = db_.dat_path();
+
305 auto const kp = db_.key_path();
+
306 auto const lp = db_.log_path();
+
307 // auto const appnum = db_.appnum();
+
308 nudb::error_code ec;
+
309 db_.close(ec);
+
310 if (ec)
+
311 Throw<nudb::system_error>(ec);
+
312 nudb::visit(
+
313 dp,
+
314 [&](void const* key,
+
315 std::size_t key_bytes,
+
316 void const* data,
+
317 std::size_t size,
+
318 nudb::error_code&) {
+
319 nudb::detail::buffer bf;
+
320 auto const result = nodeobject_decompress(data, size, bf);
+
321 DecodedBlob decoded(key, result.first, result.second);
+
322 if (!decoded.wasOk())
+
323 {
+
324 ec = make_error_code(nudb::error::missing_value);
+
325 return;
+
326 }
+
327 f(decoded.createObject());
+
328 },
+
329 nudb::no_progress{},
+
330 ec);
+
331 if (ec)
+
332 Throw<nudb::system_error>(ec);
+
333 db_.open(dp, kp, lp, ec);
+
334 if (ec)
+
335 Throw<nudb::system_error>(ec);
+
336 }
-
327
-
328 int
-
-
329 getWriteLoad() override
-
330 {
-
331 return 0;
-
332 }
+
337
+
338 int
+
+
339 getWriteLoad() override
+
340 {
+
341 return 0;
+
342 }
-
333
-
334 void
-
-
335 setDeletePath() override
-
336 {
-
337 deletePath_ = true;
-
338 }
+
343
+
344 void
+
+
345 setDeletePath() override
+
346 {
+
347 deletePath_ = true;
+
348 }
-
339
-
340 void
-
-
341 verify() override
-
342 {
-
343 auto const dp = db_.dat_path();
-
344 auto const kp = db_.key_path();
-
345 auto const lp = db_.log_path();
-
346 nudb::error_code ec;
-
347 db_.close(ec);
-
348 if (ec)
-
349 Throw<nudb::system_error>(ec);
-
350 nudb::verify_info vi;
-
351 nudb::verify<nudb::xxhasher>(vi, dp, kp, 0, nudb::no_progress{}, ec);
-
352 if (ec)
-
353 Throw<nudb::system_error>(ec);
-
354 db_.open(dp, kp, lp, ec);
-
355 if (ec)
-
356 Throw<nudb::system_error>(ec);
-
357 }
+
349
+
350 void
+
+
351 verify() override
+
352 {
+
353 auto const dp = db_.dat_path();
+
354 auto const kp = db_.key_path();
+
355 auto const lp = db_.log_path();
+
356 nudb::error_code ec;
+
357 db_.close(ec);
+
358 if (ec)
+
359 Throw<nudb::system_error>(ec);
+
360 nudb::verify_info vi;
+
361 nudb::verify<nudb::xxhasher>(vi, dp, kp, 0, nudb::no_progress{}, ec);
+
362 if (ec)
+
363 Throw<nudb::system_error>(ec);
+
364 db_.open(dp, kp, lp, ec);
+
365 if (ec)
+
366 Throw<nudb::system_error>(ec);
+
367 }
-
358
-
359 int
-
-
360 fdRequired() const override
-
361 {
-
362 return 3;
-
363 }
+
368
+
369 int
+
+
370 fdRequired() const override
+
371 {
+
372 return 3;
+
373 }
-
364};
+
374
+
375private:
+
376 static std::size_t
+
+ +
378 std::string const& name,
+
379 Section const& keyValues,
+
380 beast::Journal journal)
+
381 {
+
382 using namespace boost::filesystem;
+
383 auto const folder = path(name);
+
384 auto const kp = (folder / "nudb.key").string();
+
385
+
386 std::size_t const defaultSize =
+
387 nudb::block_size(kp); // Default 4K from NuDB
+
388 std::size_t blockSize = defaultSize;
+
389 std::string blockSizeStr;
+
390
+
391 if (!get_if_exists(keyValues, "nudb_block_size", blockSizeStr))
+
392 {
+
393 return blockSize; // Early return with default
+
394 }
+
395
+
396 try
+
397 {
+
398 std::size_t const parsedBlockSize =
+
399 beast::lexicalCastThrow<std::size_t>(blockSizeStr);
+
400
+
401 // Validate: must be power of 2 between 4K and 32K
+
402 if (parsedBlockSize < 4096 || parsedBlockSize > 32768 ||
+
403 (parsedBlockSize & (parsedBlockSize - 1)) != 0)
+
404 {
+ +
406 s << "Invalid nudb_block_size: " << parsedBlockSize
+
407 << ". Must be power of 2 between 4096 and 32768.";
+
408 Throw<std::runtime_error>(s.str());
+
409 }
+
410
+
411 JLOG(journal.info())
+
412 << "Using custom NuDB block size: " << parsedBlockSize
+
413 << " bytes";
+
414 return parsedBlockSize;
+
415 }
+
416 catch (std::exception const& e)
+
417 {
+ +
419 s << "Invalid nudb_block_size value: " << blockSizeStr
+
420 << ". Error: " << e.what();
+
421 Throw<std::runtime_error>(s.str());
+
422 }
+
423 }
-
365
-
366//------------------------------------------------------------------------------
-
367
-
-
368class NuDBFactory : public Factory
-
369{
-
370public:
-
- -
372 {
-
373 Manager::instance().insert(*this);
-
374 }
+
424};
-
375
-
-
376 ~NuDBFactory() override
-
377 {
-
378 Manager::instance().erase(*this);
-
379 }
+
425
+
426//------------------------------------------------------------------------------
+
427
+
+
428class NuDBFactory : public Factory
+
429{
+
430public:
+
+ +
432 {
+
433 Manager::instance().insert(*this);
+
434 }
-
380
- -
-
382 getName() const override
-
383 {
-
384 return "NuDB";
-
385 }
+
435
+
+
436 ~NuDBFactory() override
+
437 {
+
438 Manager::instance().erase(*this);
+
439 }
-
386
- -
- -
389 size_t keyBytes,
-
390 Section const& keyValues,
- -
392 Scheduler& scheduler,
-
393 beast::Journal journal) override
-
394 {
- -
396 keyBytes, keyValues, burstSize, scheduler, journal);
-
397 }
+
440
+ +
+
442 getName() const override
+
443 {
+
444 return "NuDB";
+
445 }
-
398
- -
- -
401 size_t keyBytes,
-
402 Section const& keyValues,
- -
404 Scheduler& scheduler,
-
405 nudb::context& context,
-
406 beast::Journal journal) override
-
407 {
- -
409 keyBytes, keyValues, burstSize, scheduler, context, journal);
-
410 }
+
446
+ +
+ +
449 size_t keyBytes,
+
450 Section const& keyValues,
+ +
452 Scheduler& scheduler,
+
453 beast::Journal journal) override
+
454 {
+ +
456 keyBytes, keyValues, burstSize, scheduler, journal);
+
457 }
-
411};
+
458
+ +
+ +
461 size_t keyBytes,
+
462 Section const& keyValues,
+ +
464 Scheduler& scheduler,
+
465 nudb::context& context,
+
466 beast::Journal journal) override
+
467 {
+ +
469 keyBytes, keyValues, burstSize, scheduler, context, journal);
+
470 }
-
412
- -
414
-
415} // namespace NodeStore
-
416} // namespace ripple
+
471};
+
+
472
+ +
474
+
475} // namespace NodeStore
+
476} // namespace ripple
+
A generic endpoint for log messages.
Definition Journal.h:60
Stream fatal() const
Definition Journal.h:352
Stream error() const
Definition Journal.h:346
+
Stream info() const
Definition Journal.h:334
A backend used for the NodeStore.
Definition Backend.h:40
Parsed key/value blob into NodeObject components.
Definition DecodedBlob.h:39
std::shared_ptr< NodeObject > createObject()
Create a NodeObject from this data.
@@ -567,40 +633,43 @@ $(document).ready(function() { init_codefold(0); });
static Manager & instance()
Returns the instance of the manager singleton.
virtual void erase(Factory &factory)=0
Remove a factory.
virtual void insert(Factory &factory)=0
Add a factory.
- -
void store(std::shared_ptr< NodeObject > const &no) override
Store a single object.
-
NuDBBackend(size_t keyBytes, Section const &keyValues, std::size_t burstSize, Scheduler &scheduler, beast::Journal journal)
-
Status fetch(void const *key, std::shared_ptr< NodeObject > *pno) override
Fetch a single object.
-
void open(bool createIfMissing) override
Open the backend.
- -
std::pair< std::vector< std::shared_ptr< NodeObject > >, Status > fetchBatch(std::vector< uint256 const * > const &hashes) override
Fetch a batch synchronously.
- -
static constexpr std::uint64_t appnum
-
void close() override
Close the backend.
-
NuDBBackend(size_t keyBytes, Section const &keyValues, std::size_t burstSize, Scheduler &scheduler, nudb::context &context, beast::Journal journal)
- -
void storeBatch(Batch const &batch) override
Store a group of objects.
-
void do_insert(std::shared_ptr< NodeObject > const &no)
- - -
int fdRequired() const override
Returns the number of file descriptors the backend expects to need.
- -
std::string getName() override
Get the human-readable name of this backend.
- -
void open(bool createIfMissing, uint64_t appType, uint64_t uid, uint64_t salt) override
Open the backend.
-
void verify() override
Perform consistency checks on database.
-
void for_each(std::function< void(std::shared_ptr< NodeObject >)> f) override
Visit every object in the database This is usually called during import.
-
std::atomic< bool > deletePath_
-
bool isOpen() override
Returns true is the database is open.
-
int getWriteLoad() override
Estimate the number of write operations pending.
-
void setDeletePath() override
Remove contents on disk upon destruction.
- - -
std::unique_ptr< Backend > createInstance(size_t keyBytes, Section const &keyValues, std::size_t burstSize, Scheduler &scheduler, nudb::context &context, beast::Journal journal) override
Create an instance of this factory's backend.
- -
std::string getName() const override
Retrieve the name of this factory.
-
std::unique_ptr< Backend > createInstance(size_t keyBytes, Section const &keyValues, std::size_t burstSize, Scheduler &scheduler, beast::Journal journal) override
Create an instance of this factory's backend.
- + +
void store(std::shared_ptr< NodeObject > const &no) override
Store a single object.
+
NuDBBackend(size_t keyBytes, Section const &keyValues, std::size_t burstSize, Scheduler &scheduler, beast::Journal journal)
+
Status fetch(void const *key, std::shared_ptr< NodeObject > *pno) override
Fetch a single object.
+
void open(bool createIfMissing) override
Open the backend.
+ +
std::pair< std::vector< std::shared_ptr< NodeObject > >, Status > fetchBatch(std::vector< uint256 const * > const &hashes) override
Fetch a batch synchronously.
+ +
static std::size_t parseBlockSize(std::string const &name, Section const &keyValues, beast::Journal journal)
+
static constexpr std::uint64_t appnum
+
void close() override
Close the backend.
+
NuDBBackend(size_t keyBytes, Section const &keyValues, std::size_t burstSize, Scheduler &scheduler, nudb::context &context, beast::Journal journal)
+ +
void storeBatch(Batch const &batch) override
Store a group of objects.
+
void do_insert(std::shared_ptr< NodeObject > const &no)
+ + +
std::optional< std::size_t > getBlockSize() const override
Get the block size for backends that support it.
+
int fdRequired() const override
Returns the number of file descriptors the backend expects to need.
+ +
std::string getName() override
Get the human-readable name of this backend.
+ +
void open(bool createIfMissing, uint64_t appType, uint64_t uid, uint64_t salt) override
Open the backend.
+
void verify() override
Perform consistency checks on database.
+
void for_each(std::function< void(std::shared_ptr< NodeObject >)> f) override
Visit every object in the database This is usually called during import.
+
std::atomic< bool > deletePath_
+ +
bool isOpen() override
Returns true is the database is open.
+
int getWriteLoad() override
Estimate the number of write operations pending.
+
void setDeletePath() override
Remove contents on disk upon destruction.
+ + +
std::unique_ptr< Backend > createInstance(size_t keyBytes, Section const &keyValues, std::size_t burstSize, Scheduler &scheduler, nudb::context &context, beast::Journal journal) override
Create an instance of this factory's backend.
+ +
std::string getName() const override
Retrieve the name of this factory.
+
std::unique_ptr< Backend > createInstance(size_t keyBytes, Section const &keyValues, std::size_t burstSize, Scheduler &scheduler, beast::Journal journal) override
Create an instance of this factory's backend.
+
Scheduling for asynchronous backend activity.
virtual void onBatchWrite(BatchWriteReport const &report)=0
Reports the completion of a batch write Allows the scheduler to monitor the node store's performance.
Holds a collection of configuration values.
Definition BasicConfig.h:45
@@ -612,7 +681,7 @@ $(document).ready(function() { init_codefold(0); });
T is_same_v
-
static NuDBFactory nuDBFactory
+
static NuDBFactory nuDBFactory
std::pair< void const *, std::size_t > nodeobject_decompress(void const *in, std::size_t in_size, BufferFactory &&bf)
Definition codec.h:111
std::pair< void const *, std::size_t > nodeobject_compress(void const *in, std::size_t in_size, BufferFactory &&bf)
Definition codec.h:222
Status
Return codes from Backend operations.
@@ -621,12 +690,14 @@ $(document).ready(function() { init_codefold(0); });
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition algorithm.h:25
+
bool get_if_exists(Section const &section, std::string const &name, T &v)
std::error_code make_error_code(ripple::TokenCodecErrc e)
@ open
We haven't closed our ledger yet, but others might have.
@ no
Definition Steps.h:45
T get(Section const &section, std::string const &name, T const &defaultValue=T{})
Retrieve a key/value pair from a section.
+
T push_back(T... args)
T reserve(T... args)
@@ -634,11 +705,13 @@ $(document).ready(function() { init_codefold(0); });
T size(T... args)
+
T str(T... args)
Contains information about a batch write operation.
+
T what(T... args)

Runs the suite.

-

Implemented in ripple::test::AccountDelete_test, ripple::AccountTxPaging_test, ripple::AmendmentTable_test, ripple::test::AMM_test, ripple::test::AMMCalc_test, ripple::test::AMMClawback_test, ripple::test::AMMExtended_test, ripple::test::Batch_test, ripple::Check_test, ripple::Clawback_test, ripple::test::Credentials_test, ripple::test::CrossingLimits_test, ripple::test::Delegate_test, ripple::test::DeliverMin_test, ripple::test::DepositAuth_test, ripple::test::DepositPreauth_test, ripple::test::DID_test, ripple::Discrepancy_test, ripple::test::DNS_test, ripple::test::Escrow_test, ripple::test::EscrowToken_test, ripple::test::FeeVote_test, ripple::FixNFTokenPageLinks_test, ripple::test::Flow_test, ripple::test::Flow_manual_test, ripple::Freeze_test, ripple::test::HashRouter_test, ripple::test::Invariants_test, ripple::test::LedgerHistory_test, ripple::LedgerLoad_test, ripple::test::LedgerMaster_test, ripple::test::LedgerReplay_test, ripple::test::LedgerReplayer_test, ripple::test::LedgerReplayerTimeout_test, ripple::test::LedgerReplayerLong_test, ripple::LoadFeeTrack_test, ripple::test::LPTokenTransfer_test, ripple::test::Manifest_test, ripple::test::MPToken_test, ripple::test::MultiSign_test, ripple::test::NetworkID_test, ripple::test::NetworkOPs_test, ripple::NFTokenBaseUtil_test, ripple::NFTokenDisallowIncoming_test, ripple::NFTokenWOfixV1_test, ripple::NFTokenWOTokenRemint_test, ripple::NFTokenWOTokenReserve_test, ripple::NFTokenWOMintOffer_test, ripple::NFTokenWOModify_test, ripple::NFTokenAllFeatures_test, ripple::NFTokenAuth_test, ripple::NFTokenBurnBaseUtil_test, ripple::NFTokenBurnWOfixFungTokens_test, ripple::NFTokenBurnWOFixTokenRemint_test, ripple::NFTokenBurnWOFixNFTPageLinks_test, ripple::NFTokenBurnAllFeatures_test, ripple::NFTokenDir_test, ripple::test::OfferBaseUtil_test, ripple::test::OfferWTakerDryOffer_test, ripple::test::OfferWOSmallQOffers_test, ripple::test::OfferWOFillOrKill_test, ripple::test::OfferWOPermDEX_test, ripple::test::OfferAllFeatures_test, ripple::test::Offer_manual_test, ripple::OfferStream_test, ripple::test::jtx::oracle::Oracle_test, ripple::test::PlumpBook_test, ripple::test::ThinBook_test, ripple::test::OversizeMeta_test, ripple::test::FindOversizeCross_test, ripple::test::Path_test, ripple::test::PayChan_test, ripple::test::PayStrand_test, ripple::test::PermissionedDEX_test, ripple::test::PermissionedDomains_test, ripple::test::PseudoTx_test, ripple::test::RCLValidations_test, ripple::test::ReducedOffer_test, ripple::test::Regression_test, ripple::test::SetAuth_test, ripple::SetRegularKey_test, ripple::test::SetTrust_test, ripple::test::SHAMapStore_test, ripple::test::TheoreticalQuality_test, ripple::Ticket_test, ripple::test::Transaction_ordering_test, ripple::TrustAndBalance_test, ripple::Apply_test, ripple::test::TxQPosNegFlows_test, ripple::test::TxQMetaInfo_test, ripple::test::ValidatorKeys_test, ripple::test::ValidatorList_test, ripple::test::ValidatorSite_test, ripple::Vault_test, ripple::test::XChain_test, ripple::test::XChainSim_test, ripple::test::base_uint_test, ripple::test::Buffer_test, ripple::test::DetectCrash_test, ripple::test::Expected_test, ripple::FileUtilities_test, ripple::hardened_hash_test, ripple::tests::IntrusiveShared_test, ripple::IOUAmount_test, ripple::test::join_test, ripple::KeyCache_test, ripple::Number_test, ripple::PerfLog_test, ripple::StringUtilities_test, ripple::TaggedCache_test, ripple::test::units_test, ripple::XRPAmount_test, beast::aged_set_test, beast::aged_map_test, beast::aged_multiset_test, beast::aged_multimap_test, beast::aged_unordered_set_test, beast::aged_unordered_map_test, beast::aged_unordered_multiset_test, beast::aged_unordered_multimap_test, beast::abstract_clock_test, beast::basic_seconds_clock_test, ripple::test::CurrentThreadName_test, io_latency_probe_test, beast::Journal_test, beast::PropertyStream_test, beast::Zero_test, beast::unit_test::print_test, beast::IP::IPEndpoint_test, beast::LexicalCast_test, beast::SemanticVersion_test, beast::XXHasher_test, ripple::cryptoconditions::PreimageSha256_test, ripple::test::ByzantineFailureSim_test, ripple::test::Consensus_test, ripple::test::DistributedValidators_test, ripple::test::LedgerTiming_test, ripple::test::LedgerTrie_test, ripple::test::NegativeUNL_test, ripple::test::NegativeUNLNoAmendment_test, ripple::test::NegativeUNLVoteInternal_test, ripple::test::NegativeUNLVoteScoreTable_test, ripple::test::NegativeUNLVoteGoodScore_test, ripple::test::NegativeUNLVoteOffline_test, ripple::test::NegativeUNLVoteMaxListed_test, ripple::test::NegativeUNLVoteRetiredValidator_test, ripple::test::NegativeUNLVoteNewValidator_test, ripple::test::NegativeUNLVoteFilterValidations_test, ripple::test::RCLCensorshipDetector_test, ripple::test::ScaleFreeSim_test, ripple::test::csf::Validations_test, ripple::test::ClosureCounter_test, ripple::Config_test, ripple::test::Coroutine_test, ripple::test::JobQueue_test, ripple::SociDB_test, ripple::Workers_test, ripple::test::BasicNetwork_test, ripple::test::Digraph_test, ripple::test::Histogram_test, ripple::test::Scheduler_test, ripple::json_value_test, Json::JsonObject_test, Json::Output_test, Json::JsonWriter_test, ripple::test::Env_test, ripple::test::WSClient_test, ripple::test::BookDirs_test, ripple::test::Directory_test, ripple::test::PaymentSandbox_test, ripple::test::PendingSaves_test, ripple::test::SkipList_test, ripple::test::View_test, ripple::test::GetAmendments_test, ripple::NodeStore::Backend_test, ripple::NodeStore::NodeStoreBasic_test, ripple::NodeStore::Database_test, ripple::NodeStore::Timing_test, ripple::NodeStore::tests::varint_test, ripple::tests::cluster_test, ripple::test::compression_test, ripple::test::handshake_test, ripple::ProtocolVersion_test, ripple::test::reduce_relay_test, ripple::test::reduce_relay_simulate_test, ripple::short_read_test, ripple::test::traffic_count_test, ripple::test::tx_reduce_relay_test, ripple::PeerFinder::Livecache_test, ripple::PeerFinder::PeerFinder_test, ripple::test::ApiVersion_test, ripple::BuildInfo_test, ripple::Hooks_test, ripple::InnerObjectFormatsParsedJSON_test, ripple::Issue_test, ripple::Memo_test, ripple::test::MultiApiJson_test, ripple::PublicKey_test, ripple::Quality_test, ripple::SecretKey_test, ripple::Seed_test, ripple::SeqProxy_test, ripple::Serializer_test, ripple::STAccount_test, ripple::STAmount_test, ripple::STInteger_test, ripple::test::STIssue_test, ripple::STNumber_test, ripple::STObject_test, ripple::STParsedJSON_test, ripple::STTx_test, ripple::InnerObjectFormatsSerializer_test, ripple::STValidation_test, ripple::TER_test, ripple::Resource::ResourceManager_test, ripple::AccountCurrencies_test, ripple::test::AccountInfo_test, ripple::RPC::AccountLines_test, ripple::test::AccountObjects_test, ripple::test::AccountOffers_test, ripple::AccountSet_test, ripple::test::AccountTx_test, ripple::AmendmentBlocked_test, ripple::test::AMMInfo_test, ripple::test::Book_test, ripple::test::BookChanges_test, ripple::Connect_test, ripple::test::DeliveredAmount_test, ripple::test::DepositAuthorized_test, ripple::Feature_test, ripple::test::GatewayBalances_test, ripple::test::jtx::oracle::GetAggregatePrice_test, ripple::GetCounts_test, ripple::test::Handler_test, ripple::RPC::JSONRPC_test, ripple::RPC::WalletPropose_test, ripple::LedgerClosed_test, ripple::LedgerData_test, ripple::test::LedgerEntry_test, ripple::test::LedgerEntry_XChain_test, ripple::LedgerHeader_test, ripple::RPC::LedgerRequestRPC_test, ripple::test::LedgerRPC_test, ripple::test::ManifestRPC_test, ripple::test::NoRipple_test, ripple::NoRippleCheck_test, ripple::NoRippleCheckLimits_test, ripple::OwnerInfo_test, ripple::Peers_test, ripple::test::RobustTransaction_test, ripple::test::Roles_test, ripple::test::RPCCall_test, ripple::test::RPCHelpers_test, ripple::test::RPCOverload_test, ripple::test::ServerDefinitions_test, ripple::test::ServerInfo_test, ripple::test::Simulate_test, ripple::RPC::codeString_test, ripple::RPC::fillJson_test, ripple::test::Subscribe_test, ripple::Transaction_test, ripple::TransactionEntry_test, ripple::TransactionHistory_test, ripple::test::ValidatorInfo_test, ripple::test::ValidatorRPC_test, ripple::Version_test, ripple::test::Server_test, ripple::test::ServerStatus_test, ripple::tests::FetchPack_test, ripple::tests::SHAMap_test, ripple::tests::SHAMapPathProof_test, and ripple::tests::SHAMapSync_test.

+

Implemented in ripple::test::AccountDelete_test, ripple::AccountTxPaging_test, ripple::AmendmentTable_test, ripple::test::AMM_test, ripple::test::AMMCalc_test, ripple::test::AMMClawback_test, ripple::test::AMMExtended_test, ripple::test::Batch_test, ripple::Check_test, ripple::Clawback_test, ripple::test::Credentials_test, ripple::test::CrossingLimits_test, ripple::test::Delegate_test, ripple::test::DeliverMin_test, ripple::test::DepositAuth_test, ripple::test::DepositPreauth_test, ripple::test::DID_test, ripple::Discrepancy_test, ripple::test::DNS_test, ripple::test::Escrow_test, ripple::test::EscrowToken_test, ripple::test::FeeVote_test, ripple::FixNFTokenPageLinks_test, ripple::test::Flow_test, ripple::test::Flow_manual_test, ripple::Freeze_test, ripple::test::HashRouter_test, ripple::test::Invariants_test, ripple::test::LedgerHistory_test, ripple::LedgerLoad_test, ripple::test::LedgerMaster_test, ripple::test::LedgerReplay_test, ripple::test::LedgerReplayer_test, ripple::test::LedgerReplayerTimeout_test, ripple::test::LedgerReplayerLong_test, ripple::LoadFeeTrack_test, ripple::test::LPTokenTransfer_test, ripple::test::Manifest_test, ripple::test::MPToken_test, ripple::test::MultiSign_test, ripple::test::NetworkID_test, ripple::test::NetworkOPs_test, ripple::NFTokenBaseUtil_test, ripple::NFTokenDisallowIncoming_test, ripple::NFTokenWOfixV1_test, ripple::NFTokenWOTokenRemint_test, ripple::NFTokenWOTokenReserve_test, ripple::NFTokenWOMintOffer_test, ripple::NFTokenWOModify_test, ripple::NFTokenAllFeatures_test, ripple::NFTokenAuth_test, ripple::NFTokenBurnBaseUtil_test, ripple::NFTokenBurnWOfixFungTokens_test, ripple::NFTokenBurnWOFixTokenRemint_test, ripple::NFTokenBurnWOFixNFTPageLinks_test, ripple::NFTokenBurnAllFeatures_test, ripple::NFTokenDir_test, ripple::test::OfferBaseUtil_test, ripple::test::OfferWTakerDryOffer_test, ripple::test::OfferWOSmallQOffers_test, ripple::test::OfferWOFillOrKill_test, ripple::test::OfferWOPermDEX_test, ripple::test::OfferAllFeatures_test, ripple::test::Offer_manual_test, ripple::OfferStream_test, ripple::test::jtx::oracle::Oracle_test, ripple::test::PlumpBook_test, ripple::test::ThinBook_test, ripple::test::OversizeMeta_test, ripple::test::FindOversizeCross_test, ripple::test::Path_test, ripple::test::PayChan_test, ripple::test::PayStrand_test, ripple::test::PermissionedDEX_test, ripple::test::PermissionedDomains_test, ripple::test::PseudoTx_test, ripple::test::RCLValidations_test, ripple::test::ReducedOffer_test, ripple::test::Regression_test, ripple::test::SetAuth_test, ripple::SetRegularKey_test, ripple::test::SetTrust_test, ripple::test::SHAMapStore_test, ripple::test::TheoreticalQuality_test, ripple::Ticket_test, ripple::test::Transaction_ordering_test, ripple::TrustAndBalance_test, ripple::Apply_test, ripple::test::TxQPosNegFlows_test, ripple::test::TxQMetaInfo_test, ripple::test::ValidatorKeys_test, ripple::test::ValidatorList_test, ripple::test::ValidatorSite_test, ripple::Vault_test, ripple::test::XChain_test, ripple::test::XChainSim_test, ripple::test::base_uint_test, ripple::test::Buffer_test, ripple::test::DetectCrash_test, ripple::test::Expected_test, ripple::FileUtilities_test, ripple::hardened_hash_test, ripple::tests::IntrusiveShared_test, ripple::IOUAmount_test, ripple::test::join_test, ripple::KeyCache_test, ripple::Number_test, ripple::PerfLog_test, ripple::StringUtilities_test, ripple::TaggedCache_test, ripple::test::units_test, ripple::XRPAmount_test, beast::aged_set_test, beast::aged_map_test, beast::aged_multiset_test, beast::aged_multimap_test, beast::aged_unordered_set_test, beast::aged_unordered_map_test, beast::aged_unordered_multiset_test, beast::aged_unordered_multimap_test, beast::abstract_clock_test, beast::basic_seconds_clock_test, ripple::test::CurrentThreadName_test, io_latency_probe_test, beast::Journal_test, beast::PropertyStream_test, beast::Zero_test, beast::unit_test::print_test, beast::IP::IPEndpoint_test, beast::LexicalCast_test, beast::SemanticVersion_test, beast::XXHasher_test, ripple::cryptoconditions::PreimageSha256_test, ripple::test::ByzantineFailureSim_test, ripple::test::Consensus_test, ripple::test::DistributedValidators_test, ripple::test::LedgerTiming_test, ripple::test::LedgerTrie_test, ripple::test::NegativeUNL_test, ripple::test::NegativeUNLNoAmendment_test, ripple::test::NegativeUNLVoteInternal_test, ripple::test::NegativeUNLVoteScoreTable_test, ripple::test::NegativeUNLVoteGoodScore_test, ripple::test::NegativeUNLVoteOffline_test, ripple::test::NegativeUNLVoteMaxListed_test, ripple::test::NegativeUNLVoteRetiredValidator_test, ripple::test::NegativeUNLVoteNewValidator_test, ripple::test::NegativeUNLVoteFilterValidations_test, ripple::test::RCLCensorshipDetector_test, ripple::test::ScaleFreeSim_test, ripple::test::csf::Validations_test, ripple::test::ClosureCounter_test, ripple::Config_test, ripple::test::Coroutine_test, ripple::test::JobQueue_test, ripple::SociDB_test, ripple::Workers_test, ripple::test::BasicNetwork_test, ripple::test::Digraph_test, ripple::test::Histogram_test, ripple::test::Scheduler_test, ripple::json_value_test, Json::JsonObject_test, Json::Output_test, Json::JsonWriter_test, ripple::test::Env_test, ripple::test::WSClient_test, ripple::test::BookDirs_test, ripple::test::Directory_test, ripple::test::PaymentSandbox_test, ripple::test::PendingSaves_test, ripple::test::SkipList_test, ripple::test::View_test, ripple::test::GetAmendments_test, ripple::NodeStore::Backend_test, ripple::NodeStore::NodeStoreBasic_test, ripple::NodeStore::Database_test, ripple::NodeStore::NuDBFactory_test, ripple::NodeStore::Timing_test, ripple::NodeStore::tests::varint_test, ripple::tests::cluster_test, ripple::test::compression_test, ripple::test::handshake_test, ripple::ProtocolVersion_test, ripple::test::reduce_relay_test, ripple::test::reduce_relay_simulate_test, ripple::short_read_test, ripple::test::traffic_count_test, ripple::test::tx_reduce_relay_test, ripple::PeerFinder::Livecache_test, ripple::PeerFinder::PeerFinder_test, ripple::test::ApiVersion_test, ripple::BuildInfo_test, ripple::Hooks_test, ripple::InnerObjectFormatsParsedJSON_test, ripple::Issue_test, ripple::Memo_test, ripple::test::MultiApiJson_test, ripple::PublicKey_test, ripple::Quality_test, ripple::SecretKey_test, ripple::Seed_test, ripple::SeqProxy_test, ripple::Serializer_test, ripple::STAccount_test, ripple::STAmount_test, ripple::STInteger_test, ripple::test::STIssue_test, ripple::STNumber_test, ripple::STObject_test, ripple::STParsedJSON_test, ripple::STTx_test, ripple::InnerObjectFormatsSerializer_test, ripple::STValidation_test, ripple::TER_test, ripple::Resource::ResourceManager_test, ripple::AccountCurrencies_test, ripple::test::AccountInfo_test, ripple::RPC::AccountLines_test, ripple::test::AccountObjects_test, ripple::test::AccountOffers_test, ripple::AccountSet_test, ripple::test::AccountTx_test, ripple::AmendmentBlocked_test, ripple::test::AMMInfo_test, ripple::test::Book_test, ripple::test::BookChanges_test, ripple::Connect_test, ripple::test::DeliveredAmount_test, ripple::test::DepositAuthorized_test, ripple::Feature_test, ripple::test::GatewayBalances_test, ripple::test::jtx::oracle::GetAggregatePrice_test, ripple::GetCounts_test, ripple::test::Handler_test, ripple::RPC::JSONRPC_test, ripple::RPC::WalletPropose_test, ripple::LedgerClosed_test, ripple::LedgerData_test, ripple::test::LedgerEntry_test, ripple::test::LedgerEntry_XChain_test, ripple::LedgerHeader_test, ripple::RPC::LedgerRequestRPC_test, ripple::test::LedgerRPC_test, ripple::test::ManifestRPC_test, ripple::test::NoRipple_test, ripple::NoRippleCheck_test, ripple::NoRippleCheckLimits_test, ripple::OwnerInfo_test, ripple::Peers_test, ripple::test::RobustTransaction_test, ripple::test::Roles_test, ripple::test::RPCCall_test, ripple::test::RPCHelpers_test, ripple::test::RPCOverload_test, ripple::test::ServerDefinitions_test, ripple::test::ServerInfo_test, ripple::test::Simulate_test, ripple::RPC::codeString_test, ripple::RPC::fillJson_test, ripple::test::Subscribe_test, ripple::Transaction_test, ripple::TransactionEntry_test, ripple::TransactionHistory_test, ripple::test::ValidatorInfo_test, ripple::test::ValidatorRPC_test, ripple::Version_test, ripple::test::Server_test, ripple::test::ServerStatus_test, ripple::tests::FetchPack_test, ripple::tests::SHAMap_test, ripple::tests::SHAMapPathProof_test, and ripple::tests::SHAMapSync_test.

diff --git a/classbeast_1_1unit__test_1_1suite.html b/classbeast_1_1unit__test_1_1suite.html index f127818ddd..52034fc4ce 100644 --- a/classbeast_1_1unit__test_1_1suite.html +++ b/classbeast_1_1unit__test_1_1suite.html @@ -953,7 +953,7 @@ template<class Condition >

Runs the suite.

-

Implemented in ripple::test::AccountDelete_test, ripple::AccountTxPaging_test, ripple::AmendmentTable_test, ripple::test::AMM_test, ripple::test::AMMCalc_test, ripple::test::AMMClawback_test, ripple::test::AMMExtended_test, ripple::test::Batch_test, ripple::Check_test, ripple::Clawback_test, ripple::test::Credentials_test, ripple::test::CrossingLimits_test, ripple::test::Delegate_test, ripple::test::DeliverMin_test, ripple::test::DepositAuth_test, ripple::test::DepositPreauth_test, ripple::test::DID_test, ripple::Discrepancy_test, ripple::test::DNS_test, ripple::test::Escrow_test, ripple::test::EscrowToken_test, ripple::test::FeeVote_test, ripple::FixNFTokenPageLinks_test, ripple::test::Flow_test, ripple::test::Flow_manual_test, ripple::Freeze_test, ripple::test::HashRouter_test, ripple::test::Invariants_test, ripple::test::LedgerHistory_test, ripple::LedgerLoad_test, ripple::test::LedgerMaster_test, ripple::test::LedgerReplay_test, ripple::test::LedgerReplayer_test, ripple::test::LedgerReplayerTimeout_test, ripple::test::LedgerReplayerLong_test, ripple::LoadFeeTrack_test, ripple::test::LPTokenTransfer_test, ripple::test::Manifest_test, ripple::test::MPToken_test, ripple::test::MultiSign_test, ripple::test::NetworkID_test, ripple::test::NetworkOPs_test, ripple::NFTokenBaseUtil_test, ripple::NFTokenDisallowIncoming_test, ripple::NFTokenWOfixV1_test, ripple::NFTokenWOTokenRemint_test, ripple::NFTokenWOTokenReserve_test, ripple::NFTokenWOMintOffer_test, ripple::NFTokenWOModify_test, ripple::NFTokenAllFeatures_test, ripple::NFTokenAuth_test, ripple::NFTokenBurnBaseUtil_test, ripple::NFTokenBurnWOfixFungTokens_test, ripple::NFTokenBurnWOFixTokenRemint_test, ripple::NFTokenBurnWOFixNFTPageLinks_test, ripple::NFTokenBurnAllFeatures_test, ripple::NFTokenDir_test, ripple::test::OfferBaseUtil_test, ripple::test::OfferWTakerDryOffer_test, ripple::test::OfferWOSmallQOffers_test, ripple::test::OfferWOFillOrKill_test, ripple::test::OfferWOPermDEX_test, ripple::test::OfferAllFeatures_test, ripple::test::Offer_manual_test, ripple::OfferStream_test, ripple::test::jtx::oracle::Oracle_test, ripple::test::PlumpBook_test, ripple::test::ThinBook_test, ripple::test::OversizeMeta_test, ripple::test::FindOversizeCross_test, ripple::test::Path_test, ripple::test::PayChan_test, ripple::test::PayStrand_test, ripple::test::PermissionedDEX_test, ripple::test::PermissionedDomains_test, ripple::test::PseudoTx_test, ripple::test::RCLValidations_test, ripple::test::ReducedOffer_test, ripple::test::Regression_test, ripple::test::SetAuth_test, ripple::SetRegularKey_test, ripple::test::SetTrust_test, ripple::test::SHAMapStore_test, ripple::test::TheoreticalQuality_test, ripple::Ticket_test, ripple::test::Transaction_ordering_test, ripple::TrustAndBalance_test, ripple::Apply_test, ripple::test::TxQPosNegFlows_test, ripple::test::TxQMetaInfo_test, ripple::test::ValidatorKeys_test, ripple::test::ValidatorList_test, ripple::test::ValidatorSite_test, ripple::Vault_test, ripple::test::XChain_test, ripple::test::XChainSim_test, ripple::test::base_uint_test, ripple::test::Buffer_test, ripple::test::DetectCrash_test, ripple::test::Expected_test, ripple::FileUtilities_test, ripple::hardened_hash_test, ripple::tests::IntrusiveShared_test, ripple::IOUAmount_test, ripple::test::join_test, ripple::KeyCache_test, ripple::Number_test, ripple::PerfLog_test, ripple::StringUtilities_test, ripple::TaggedCache_test, ripple::test::units_test, ripple::XRPAmount_test, beast::aged_set_test, beast::aged_map_test, beast::aged_multiset_test, beast::aged_multimap_test, beast::aged_unordered_set_test, beast::aged_unordered_map_test, beast::aged_unordered_multiset_test, beast::aged_unordered_multimap_test, beast::abstract_clock_test, beast::basic_seconds_clock_test, ripple::test::CurrentThreadName_test, io_latency_probe_test, beast::Journal_test, beast::PropertyStream_test, beast::Zero_test, beast::unit_test::print_test, beast::IP::IPEndpoint_test, beast::LexicalCast_test, beast::SemanticVersion_test, beast::XXHasher_test, ripple::cryptoconditions::PreimageSha256_test, ripple::test::ByzantineFailureSim_test, ripple::test::Consensus_test, ripple::test::DistributedValidators_test, ripple::test::LedgerTiming_test, ripple::test::LedgerTrie_test, ripple::test::NegativeUNL_test, ripple::test::NegativeUNLNoAmendment_test, ripple::test::NegativeUNLVoteInternal_test, ripple::test::NegativeUNLVoteScoreTable_test, ripple::test::NegativeUNLVoteGoodScore_test, ripple::test::NegativeUNLVoteOffline_test, ripple::test::NegativeUNLVoteMaxListed_test, ripple::test::NegativeUNLVoteRetiredValidator_test, ripple::test::NegativeUNLVoteNewValidator_test, ripple::test::NegativeUNLVoteFilterValidations_test, ripple::test::RCLCensorshipDetector_test, ripple::test::ScaleFreeSim_test, ripple::test::csf::Validations_test, ripple::test::ClosureCounter_test, ripple::Config_test, ripple::test::Coroutine_test, ripple::test::JobQueue_test, ripple::SociDB_test, ripple::Workers_test, ripple::test::BasicNetwork_test, ripple::test::Digraph_test, ripple::test::Histogram_test, ripple::test::Scheduler_test, ripple::json_value_test, Json::JsonObject_test, Json::Output_test, Json::JsonWriter_test, ripple::test::Env_test, ripple::test::WSClient_test, ripple::test::BookDirs_test, ripple::test::Directory_test, ripple::test::PaymentSandbox_test, ripple::test::PendingSaves_test, ripple::test::SkipList_test, ripple::test::View_test, ripple::test::GetAmendments_test, ripple::NodeStore::Backend_test, ripple::NodeStore::NodeStoreBasic_test, ripple::NodeStore::Database_test, ripple::NodeStore::Timing_test, ripple::NodeStore::tests::varint_test, ripple::tests::cluster_test, ripple::test::compression_test, ripple::test::handshake_test, ripple::ProtocolVersion_test, ripple::test::reduce_relay_test, ripple::test::reduce_relay_simulate_test, ripple::short_read_test, ripple::test::traffic_count_test, ripple::test::tx_reduce_relay_test, ripple::PeerFinder::Livecache_test, ripple::PeerFinder::PeerFinder_test, ripple::test::ApiVersion_test, ripple::BuildInfo_test, ripple::Hooks_test, ripple::InnerObjectFormatsParsedJSON_test, ripple::Issue_test, ripple::Memo_test, ripple::test::MultiApiJson_test, ripple::PublicKey_test, ripple::Quality_test, ripple::SecretKey_test, ripple::Seed_test, ripple::SeqProxy_test, ripple::Serializer_test, ripple::STAccount_test, ripple::STAmount_test, ripple::STInteger_test, ripple::test::STIssue_test, ripple::STNumber_test, ripple::STObject_test, ripple::STParsedJSON_test, ripple::STTx_test, ripple::InnerObjectFormatsSerializer_test, ripple::STValidation_test, ripple::TER_test, ripple::Resource::ResourceManager_test, ripple::AccountCurrencies_test, ripple::test::AccountInfo_test, ripple::RPC::AccountLines_test, ripple::test::AccountObjects_test, ripple::test::AccountOffers_test, ripple::AccountSet_test, ripple::test::AccountTx_test, ripple::AmendmentBlocked_test, ripple::test::AMMInfo_test, ripple::test::Book_test, ripple::test::BookChanges_test, ripple::Connect_test, ripple::test::DeliveredAmount_test, ripple::test::DepositAuthorized_test, ripple::Feature_test, ripple::test::GatewayBalances_test, ripple::test::jtx::oracle::GetAggregatePrice_test, ripple::GetCounts_test, ripple::test::Handler_test, ripple::RPC::JSONRPC_test, ripple::RPC::WalletPropose_test, ripple::LedgerClosed_test, ripple::LedgerData_test, ripple::test::LedgerEntry_test, ripple::test::LedgerEntry_XChain_test, ripple::LedgerHeader_test, ripple::RPC::LedgerRequestRPC_test, ripple::test::LedgerRPC_test, ripple::test::ManifestRPC_test, ripple::test::NoRipple_test, ripple::NoRippleCheck_test, ripple::NoRippleCheckLimits_test, ripple::OwnerInfo_test, ripple::Peers_test, ripple::test::RobustTransaction_test, ripple::test::Roles_test, ripple::test::RPCCall_test, ripple::test::RPCHelpers_test, ripple::test::RPCOverload_test, ripple::test::ServerDefinitions_test, ripple::test::ServerInfo_test, ripple::test::Simulate_test, ripple::RPC::codeString_test, ripple::RPC::fillJson_test, ripple::test::Subscribe_test, ripple::Transaction_test, ripple::TransactionEntry_test, ripple::TransactionHistory_test, ripple::test::ValidatorInfo_test, ripple::test::ValidatorRPC_test, ripple::Version_test, ripple::test::Server_test, ripple::test::ServerStatus_test, ripple::tests::FetchPack_test, ripple::tests::SHAMap_test, ripple::tests::SHAMapPathProof_test, and ripple::tests::SHAMapSync_test.

+

Implemented in ripple::test::AccountDelete_test, ripple::AccountTxPaging_test, ripple::AmendmentTable_test, ripple::test::AMM_test, ripple::test::AMMCalc_test, ripple::test::AMMClawback_test, ripple::test::AMMExtended_test, ripple::test::Batch_test, ripple::Check_test, ripple::Clawback_test, ripple::test::Credentials_test, ripple::test::CrossingLimits_test, ripple::test::Delegate_test, ripple::test::DeliverMin_test, ripple::test::DepositAuth_test, ripple::test::DepositPreauth_test, ripple::test::DID_test, ripple::Discrepancy_test, ripple::test::DNS_test, ripple::test::Escrow_test, ripple::test::EscrowToken_test, ripple::test::FeeVote_test, ripple::FixNFTokenPageLinks_test, ripple::test::Flow_test, ripple::test::Flow_manual_test, ripple::Freeze_test, ripple::test::HashRouter_test, ripple::test::Invariants_test, ripple::test::LedgerHistory_test, ripple::LedgerLoad_test, ripple::test::LedgerMaster_test, ripple::test::LedgerReplay_test, ripple::test::LedgerReplayer_test, ripple::test::LedgerReplayerTimeout_test, ripple::test::LedgerReplayerLong_test, ripple::LoadFeeTrack_test, ripple::test::LPTokenTransfer_test, ripple::test::Manifest_test, ripple::test::MPToken_test, ripple::test::MultiSign_test, ripple::test::NetworkID_test, ripple::test::NetworkOPs_test, ripple::NFTokenBaseUtil_test, ripple::NFTokenDisallowIncoming_test, ripple::NFTokenWOfixV1_test, ripple::NFTokenWOTokenRemint_test, ripple::NFTokenWOTokenReserve_test, ripple::NFTokenWOMintOffer_test, ripple::NFTokenWOModify_test, ripple::NFTokenAllFeatures_test, ripple::NFTokenAuth_test, ripple::NFTokenBurnBaseUtil_test, ripple::NFTokenBurnWOfixFungTokens_test, ripple::NFTokenBurnWOFixTokenRemint_test, ripple::NFTokenBurnWOFixNFTPageLinks_test, ripple::NFTokenBurnAllFeatures_test, ripple::NFTokenDir_test, ripple::test::OfferBaseUtil_test, ripple::test::OfferWTakerDryOffer_test, ripple::test::OfferWOSmallQOffers_test, ripple::test::OfferWOFillOrKill_test, ripple::test::OfferWOPermDEX_test, ripple::test::OfferAllFeatures_test, ripple::test::Offer_manual_test, ripple::OfferStream_test, ripple::test::jtx::oracle::Oracle_test, ripple::test::PlumpBook_test, ripple::test::ThinBook_test, ripple::test::OversizeMeta_test, ripple::test::FindOversizeCross_test, ripple::test::Path_test, ripple::test::PayChan_test, ripple::test::PayStrand_test, ripple::test::PermissionedDEX_test, ripple::test::PermissionedDomains_test, ripple::test::PseudoTx_test, ripple::test::RCLValidations_test, ripple::test::ReducedOffer_test, ripple::test::Regression_test, ripple::test::SetAuth_test, ripple::SetRegularKey_test, ripple::test::SetTrust_test, ripple::test::SHAMapStore_test, ripple::test::TheoreticalQuality_test, ripple::Ticket_test, ripple::test::Transaction_ordering_test, ripple::TrustAndBalance_test, ripple::Apply_test, ripple::test::TxQPosNegFlows_test, ripple::test::TxQMetaInfo_test, ripple::test::ValidatorKeys_test, ripple::test::ValidatorList_test, ripple::test::ValidatorSite_test, ripple::Vault_test, ripple::test::XChain_test, ripple::test::XChainSim_test, ripple::test::base_uint_test, ripple::test::Buffer_test, ripple::test::DetectCrash_test, ripple::test::Expected_test, ripple::FileUtilities_test, ripple::hardened_hash_test, ripple::tests::IntrusiveShared_test, ripple::IOUAmount_test, ripple::test::join_test, ripple::KeyCache_test, ripple::Number_test, ripple::PerfLog_test, ripple::StringUtilities_test, ripple::TaggedCache_test, ripple::test::units_test, ripple::XRPAmount_test, beast::aged_set_test, beast::aged_map_test, beast::aged_multiset_test, beast::aged_multimap_test, beast::aged_unordered_set_test, beast::aged_unordered_map_test, beast::aged_unordered_multiset_test, beast::aged_unordered_multimap_test, beast::abstract_clock_test, beast::basic_seconds_clock_test, ripple::test::CurrentThreadName_test, io_latency_probe_test, beast::Journal_test, beast::PropertyStream_test, beast::Zero_test, beast::unit_test::print_test, beast::IP::IPEndpoint_test, beast::LexicalCast_test, beast::SemanticVersion_test, beast::XXHasher_test, ripple::cryptoconditions::PreimageSha256_test, ripple::test::ByzantineFailureSim_test, ripple::test::Consensus_test, ripple::test::DistributedValidators_test, ripple::test::LedgerTiming_test, ripple::test::LedgerTrie_test, ripple::test::NegativeUNL_test, ripple::test::NegativeUNLNoAmendment_test, ripple::test::NegativeUNLVoteInternal_test, ripple::test::NegativeUNLVoteScoreTable_test, ripple::test::NegativeUNLVoteGoodScore_test, ripple::test::NegativeUNLVoteOffline_test, ripple::test::NegativeUNLVoteMaxListed_test, ripple::test::NegativeUNLVoteRetiredValidator_test, ripple::test::NegativeUNLVoteNewValidator_test, ripple::test::NegativeUNLVoteFilterValidations_test, ripple::test::RCLCensorshipDetector_test, ripple::test::ScaleFreeSim_test, ripple::test::csf::Validations_test, ripple::test::ClosureCounter_test, ripple::Config_test, ripple::test::Coroutine_test, ripple::test::JobQueue_test, ripple::SociDB_test, ripple::Workers_test, ripple::test::BasicNetwork_test, ripple::test::Digraph_test, ripple::test::Histogram_test, ripple::test::Scheduler_test, ripple::json_value_test, Json::JsonObject_test, Json::Output_test, Json::JsonWriter_test, ripple::test::Env_test, ripple::test::WSClient_test, ripple::test::BookDirs_test, ripple::test::Directory_test, ripple::test::PaymentSandbox_test, ripple::test::PendingSaves_test, ripple::test::SkipList_test, ripple::test::View_test, ripple::test::GetAmendments_test, ripple::NodeStore::Backend_test, ripple::NodeStore::NodeStoreBasic_test, ripple::NodeStore::Database_test, ripple::NodeStore::NuDBFactory_test, ripple::NodeStore::Timing_test, ripple::NodeStore::tests::varint_test, ripple::tests::cluster_test, ripple::test::compression_test, ripple::test::handshake_test, ripple::ProtocolVersion_test, ripple::test::reduce_relay_test, ripple::test::reduce_relay_simulate_test, ripple::short_read_test, ripple::test::traffic_count_test, ripple::test::tx_reduce_relay_test, ripple::PeerFinder::Livecache_test, ripple::PeerFinder::PeerFinder_test, ripple::test::ApiVersion_test, ripple::BuildInfo_test, ripple::Hooks_test, ripple::InnerObjectFormatsParsedJSON_test, ripple::Issue_test, ripple::Memo_test, ripple::test::MultiApiJson_test, ripple::PublicKey_test, ripple::Quality_test, ripple::SecretKey_test, ripple::Seed_test, ripple::SeqProxy_test, ripple::Serializer_test, ripple::STAccount_test, ripple::STAmount_test, ripple::STInteger_test, ripple::test::STIssue_test, ripple::STNumber_test, ripple::STObject_test, ripple::STParsedJSON_test, ripple::STTx_test, ripple::InnerObjectFormatsSerializer_test, ripple::STValidation_test, ripple::TER_test, ripple::Resource::ResourceManager_test, ripple::AccountCurrencies_test, ripple::test::AccountInfo_test, ripple::RPC::AccountLines_test, ripple::test::AccountObjects_test, ripple::test::AccountOffers_test, ripple::AccountSet_test, ripple::test::AccountTx_test, ripple::AmendmentBlocked_test, ripple::test::AMMInfo_test, ripple::test::Book_test, ripple::test::BookChanges_test, ripple::Connect_test, ripple::test::DeliveredAmount_test, ripple::test::DepositAuthorized_test, ripple::Feature_test, ripple::test::GatewayBalances_test, ripple::test::jtx::oracle::GetAggregatePrice_test, ripple::GetCounts_test, ripple::test::Handler_test, ripple::RPC::JSONRPC_test, ripple::RPC::WalletPropose_test, ripple::LedgerClosed_test, ripple::LedgerData_test, ripple::test::LedgerEntry_test, ripple::test::LedgerEntry_XChain_test, ripple::LedgerHeader_test, ripple::RPC::LedgerRequestRPC_test, ripple::test::LedgerRPC_test, ripple::test::ManifestRPC_test, ripple::test::NoRipple_test, ripple::NoRippleCheck_test, ripple::NoRippleCheckLimits_test, ripple::OwnerInfo_test, ripple::Peers_test, ripple::test::RobustTransaction_test, ripple::test::Roles_test, ripple::test::RPCCall_test, ripple::test::RPCHelpers_test, ripple::test::RPCOverload_test, ripple::test::ServerDefinitions_test, ripple::test::ServerInfo_test, ripple::test::Simulate_test, ripple::RPC::codeString_test, ripple::RPC::fillJson_test, ripple::test::Subscribe_test, ripple::Transaction_test, ripple::TransactionEntry_test, ripple::TransactionHistory_test, ripple::test::ValidatorInfo_test, ripple::test::ValidatorRPC_test, ripple::Version_test, ripple::test::Server_test, ripple::test::ServerStatus_test, ripple::tests::FetchPack_test, ripple::tests::SHAMap_test, ripple::tests::SHAMapPathProof_test, and ripple::tests::SHAMapSync_test.

diff --git a/classes.html b/classes.html index 25ed90f19e..4da0088f67 100644 --- a/classes.html +++ b/classes.html @@ -115,7 +115,7 @@ $(function() {
MagicInboundLedgers (ripple::test)
RCLValidatedLedger::MakeGenesis (ripple)
Ledger::MakeGenesis (ripple::test::csf)
Manager (ripple::NodeStore)
Manager (ripple::Resource)
Manager (ripple::PeerFinder)
ManagerImp (ripple::NodeStore)
ManagerImp (ripple::PeerFinder)
ManagerImp (ripple::Resource)
Manifest (ripple)
Manifest_test (ripple::test)
ManifestCache (ripple)
ManifestRPC_test (ripple::test)
manual_clock (beast)
ManualClock (ripple::test)
ManualTimeKeeper (ripple::test)
PropertyStream::Map (beast)
match_peer (ripple)
XChainClaimAttestation::MatchFields (ripple)
XChainCreateAccountAttestation::MatchFields (ripple)
maybe_const (beast)
aged_associative_container_test_base::MaybeMap (beast)
aged_associative_container_test_base::MaybeMap< Base, true > (beast)
aged_associative_container_test_base::MaybeMulti (beast)
aged_associative_container_test_base::MaybeMulti< Base, true > (beast)
TxQ::MaybeTx (ripple)
aged_associative_container_test_base::MaybeUnordered (beast)
aged_associative_container_test_base::MaybeUnordered< Base, true > (beast)
memo (ripple::test::jtx)
Memo_test (ripple)
memodata (ripple::test::jtx)
memoformat (ripple::test::jtx)
memondata (ripple::test::jtx)
memonformat (ripple::test::jtx)
memontype (ripple::test::jtx)
MemoryBackend (ripple::NodeStore)
MemoryDB (ripple::NodeStore)
MemoryFactory (ripple::NodeStore)
memotype (ripple::test::jtx)
Message (ripple)
MessageHeader (ripple::detail)
ValidatorList::MessageWithHash (ripple)
Meter (beast::insight)
MeterImpl (beast::insight)
TxQ::Metrics (ripple)
PeerImp::Metrics (ripple)
SHAMap::MissingNodes (ripple)
Consensus::MonitoredMode (ripple)
MPT (ripple::test::jtx)
MPTAmount (ripple)
MPTAuthorize (ripple::test::jtx)
MPTAuthorizeArgs (ripple)
mptbalance (ripple::test::jtx)
MPTCreate (ripple::test::jtx)
MPTCreateArgs (ripple)
MPTDestroy (ripple::test::jtx)
mptflags (ripple::test::jtx)
MPTInit (ripple::test::jtx)
MPTIssue (ripple)
MPTMutabilityFlags (ripple)
MPToken_test (ripple::test)
MPTokenAuthorize (ripple)
MPTokenIssuanceCreate (ripple)
MPTokenIssuanceDestroy (ripple)
MPTokenIssuanceSet (ripple)
MPTSet (ripple::test::jtx)
MPTTester (ripple::test::jtx)
WSClientImpl::msg (ripple::test)
msig (ripple::test::jtx::batch)
msig (ripple::test::jtx)
multi_runner_base (ripple::detail)
multi_runner_child (ripple::test)
multi_runner_parent (ripple::test)
MultiApiJson (ripple::detail)
MultiApiJson_test (ripple::test)
MultipleMetrics (ripple::metrics)
MultiSign_test (ripple::test)
RCLTxSet::MutableTxSet (ripple)
TxSet::MutableTxSet (ripple::test::csf)
Peer::ValAdaptor::Mutex (ripple::test::csf)
Validations_test::Adaptor::Mutex (ripple::test::csf)
ServerStatus_test::myFields (ripple::test)
N
-
NegativeUNL_test (ripple::test)
NegativeUNLNoAmendment_test (ripple::test)
NegativeUNLVote (ripple)
NegativeUNLVoteFilterValidations_test (ripple::test)
NegativeUNLVoteGoodScore_test (ripple::test)
NegativeUNLVoteInternal_test (ripple::test)
NegativeUNLVoteMaxListed_test (ripple::test)
NegativeUNLVoteNewValidator_test (ripple::test)
NegativeUNLVoteOffline_test (ripple::test)
NegativeUNLVoteRetiredValidator_test (ripple::test)
NegativeUNLVoteScoreTable_test (ripple::test)
NetClock (ripple)
Network (ripple::test)
NetworkHistory (ripple::test)
NetworkID_test (ripple::test)
NetworkOfTwo (ripple::test)
NetworkOPs (ripple)
NetworkOPs_test (ripple::test)
NetworkOPsImp (ripple)
next_t (ripple::keylet)
nflags (ripple::test::jtx)
NFTokenAcceptOffer (ripple)
NFTokenAllFeatures_test (ripple)
NFTokenAuth_test (ripple)
NFTokenBaseUtil_test (ripple)
NFTokenBurn (ripple)
NFTokenBurnAllFeatures_test (ripple)
NFTokenBurnBaseUtil_test (ripple)
NFTokenBurnWOfixFungTokens_test (ripple)
NFTokenBurnWOFixNFTPageLinks_test (ripple)
NFTokenBurnWOFixTokenRemint_test (ripple)
NFTokenCancelOffer (ripple)
NFTokenCountTracking (ripple)
NFTokenCreateOffer (ripple)
NFTokenDir_test (ripple)
NFTokenDisallowIncoming_test (ripple)
NFTokenMint (ripple)
NFTokenModify (ripple)
NFTokenWOfixV1_test (ripple)
NFTokenWOMintOffer_test (ripple)
NFTokenWOModify_test (ripple)
NFTokenWOTokenRemint_test (ripple)
NFTokenWOTokenReserve_test (ripple)
NoBadOffers (ripple)
Node (ripple::ledger_trie_detail)
Validations_test::Node (ripple::test::csf)
LockFreeStack::Node (beast)
NoDeepFreezeTrustLinesWithoutFreeze (ripple)
NodeFamily (ripple)
NodeIDTag (ripple::detail)
NodeObject (ripple)
AccountTx_test::NodeSanity (ripple::test)
NodeStoreBasic_test (ripple::NodeStore)
NodeStoreScheduler (ripple)
NoEdgeData (ripple::detail)
None (ripple::test::jtx)
none_t (ripple::test::jtx)
nonhash (ripple::test)
nonPresentObject_t (ripple::detail)
NoRipple_test (ripple::test)
NoRippleCheck_test (ripple)
NoRippleCheckLimits_test (ripple)
TER_test::NotConvertible (ripple)
NoXRPTrustLines (ripple)
NoZeroEscrow (ripple)
NuDBBackend (ripple::NodeStore)
NuDBFactory (ripple::NodeStore)
NullBackend (ripple::NodeStore)
NullCollector (beast::insight)
NullCollector (ripple::test::csf)
NullCollectorImp (beast::insight::detail)
NullCounterImpl (beast::insight::detail)
NullEventImpl (beast::insight::detail)
NullFactory (ripple::NodeStore)
NullGaugeImpl (beast::insight::detail)
NullHookImpl (beast::insight::detail)
NullJournalSink (beast)
NullMeterImpl (beast::insight::detail)
Number (ripple)
Number_test (ripple)
NumberParts (ripple)
NumberRoundModeGuard (ripple)
NumberSO (ripple)
+
NegativeUNL_test (ripple::test)
NegativeUNLNoAmendment_test (ripple::test)
NegativeUNLVote (ripple)
NegativeUNLVoteFilterValidations_test (ripple::test)
NegativeUNLVoteGoodScore_test (ripple::test)
NegativeUNLVoteInternal_test (ripple::test)
NegativeUNLVoteMaxListed_test (ripple::test)
NegativeUNLVoteNewValidator_test (ripple::test)
NegativeUNLVoteOffline_test (ripple::test)
NegativeUNLVoteRetiredValidator_test (ripple::test)
NegativeUNLVoteScoreTable_test (ripple::test)
NetClock (ripple)
Network (ripple::test)
NetworkHistory (ripple::test)
NetworkID_test (ripple::test)
NetworkOfTwo (ripple::test)
NetworkOPs (ripple)
NetworkOPs_test (ripple::test)
NetworkOPsImp (ripple)
next_t (ripple::keylet)
nflags (ripple::test::jtx)
NFTokenAcceptOffer (ripple)
NFTokenAllFeatures_test (ripple)
NFTokenAuth_test (ripple)
NFTokenBaseUtil_test (ripple)
NFTokenBurn (ripple)
NFTokenBurnAllFeatures_test (ripple)
NFTokenBurnBaseUtil_test (ripple)
NFTokenBurnWOfixFungTokens_test (ripple)
NFTokenBurnWOFixNFTPageLinks_test (ripple)
NFTokenBurnWOFixTokenRemint_test (ripple)
NFTokenCancelOffer (ripple)
NFTokenCountTracking (ripple)
NFTokenCreateOffer (ripple)
NFTokenDir_test (ripple)
NFTokenDisallowIncoming_test (ripple)
NFTokenMint (ripple)
NFTokenModify (ripple)
NFTokenWOfixV1_test (ripple)
NFTokenWOMintOffer_test (ripple)
NFTokenWOModify_test (ripple)
NFTokenWOTokenRemint_test (ripple)
NFTokenWOTokenReserve_test (ripple)
NoBadOffers (ripple)
LockFreeStack::Node (beast)
Validations_test::Node (ripple::test::csf)
Node (ripple::ledger_trie_detail)
NoDeepFreezeTrustLinesWithoutFreeze (ripple)
NodeFamily (ripple)
NodeIDTag (ripple::detail)
NodeObject (ripple)
AccountTx_test::NodeSanity (ripple::test)
NodeStoreBasic_test (ripple::NodeStore)
NodeStoreScheduler (ripple)
NoEdgeData (ripple::detail)
None (ripple::test::jtx)
none_t (ripple::test::jtx)
nonhash (ripple::test)
nonPresentObject_t (ripple::detail)
NoRipple_test (ripple::test)
NoRippleCheck_test (ripple)
NoRippleCheckLimits_test (ripple)
TER_test::NotConvertible (ripple)
NoXRPTrustLines (ripple)
NoZeroEscrow (ripple)
NuDBBackend (ripple::NodeStore)
NuDBFactory (ripple::NodeStore)
NuDBFactory_test (ripple::NodeStore)
NullBackend (ripple::NodeStore)
NullCollector (beast::insight)
NullCollector (ripple::test::csf)
NullCollectorImp (beast::insight::detail)
NullCounterImpl (beast::insight::detail)
NullEventImpl (beast::insight::detail)
NullFactory (ripple::NodeStore)
NullGaugeImpl (beast::insight::detail)
NullHookImpl (beast::insight::detail)
NullJournalSink (beast)
NullMeterImpl (beast::insight::detail)
Number (ripple)
Number_test (ripple)
NumberParts (ripple)
NumberRoundModeGuard (ripple)
NumberSO (ripple)
O
Object (Json)
Offer_manual_test (ripple::test)
OfferAllFeatures_test (ripple::test)
OfferBaseUtil_test (ripple::test)
OfferStream (ripple)
OfferStream_test (ripple)
OfferWOFillOrKill_test (ripple::test)
OfferWOPermDEX_test (ripple::test)
OfferWOSmallQOffers_test (ripple::test)
OfferWTakerDryOffer_test (ripple::test)
open_ledger_t (ripple)
OpenLedger (ripple)
openssl_ripemd160_hasher (ripple)
openssl_sha256_hasher (ripple)
openssl_sha512_hasher (ripple)
OpenView (ripple)
OptionaledField (ripple)
STObject::OptionalProxy (ripple)
Oracle (ripple::test::jtx::oracle)
Oracle_test (ripple::test::jtx::oracle)
OrderBookDB (ripple)
TxQ::OrderCandidates (ripple)
RippleCalc::Output (ripple::path)
Output_test (Json)
Overlay (ripple)
Overlay (ripple::test)
OverlayImpl (ripple)
OverlaySim (ripple::test)
OversizeMeta_test (ripple::test)
owner (ripple::test::jtx::token)
owner_count (ripple::test::jtx)
OwnerInfo_test (ripple)
owners (ripple::test::jtx)
diff --git a/classripple_1_1NodeStore_1_1Backend-members.html b/classripple_1_1NodeStore_1_1Backend-members.html index c0bdb1df6e..7428a4fedd 100644 --- a/classripple_1_1NodeStore_1_1Backend-members.html +++ b/classripple_1_1NodeStore_1_1Backend-members.html @@ -84,17 +84,18 @@ $(function() { fetch(void const *key, std::shared_ptr< NodeObject > *pObject)=0ripple::NodeStore::Backendpure virtual fetchBatch(std::vector< uint256 const * > const &hashes)=0ripple::NodeStore::Backendpure virtual for_each(std::function< void(std::shared_ptr< NodeObject >)> f)=0ripple::NodeStore::Backendpure virtual - getName()=0ripple::NodeStore::Backendpure virtual - getWriteLoad()=0ripple::NodeStore::Backendpure virtual - isOpen()=0ripple::NodeStore::Backendpure virtual - open(bool createIfMissing=true)=0ripple::NodeStore::Backendpure virtual - open(bool createIfMissing, uint64_t appType, uint64_t uid, uint64_t salt)ripple::NodeStore::Backendvirtual - setDeletePath()=0ripple::NodeStore::Backendpure virtual - store(std::shared_ptr< NodeObject > const &object)=0ripple::NodeStore::Backendpure virtual - storeBatch(Batch const &batch)=0ripple::NodeStore::Backendpure virtual - sync()=0ripple::NodeStore::Backendpure virtual - verify()ripple::NodeStore::Backendvirtual - ~Backend()=defaultripple::NodeStore::Backendvirtual + getBlockSize() constripple::NodeStore::Backendvirtual + getName()=0ripple::NodeStore::Backendpure virtual + getWriteLoad()=0ripple::NodeStore::Backendpure virtual + isOpen()=0ripple::NodeStore::Backendpure virtual + open(bool createIfMissing=true)=0ripple::NodeStore::Backendpure virtual + open(bool createIfMissing, uint64_t appType, uint64_t uid, uint64_t salt)ripple::NodeStore::Backendvirtual + setDeletePath()=0ripple::NodeStore::Backendpure virtual + store(std::shared_ptr< NodeObject > const &object)=0ripple::NodeStore::Backendpure virtual + storeBatch(Batch const &batch)=0ripple::NodeStore::Backendpure virtual + sync()=0ripple::NodeStore::Backendpure virtual + verify()ripple::NodeStore::Backendvirtual + ~Backend()=defaultripple::NodeStore::Backendvirtual
+
+ +

◆ getBlockSize()

+ +
+
+ + + + + +
+ + + + + + + +
virtual std::optional< std::size_t > ripple::NodeStore::Backend::getBlockSize () const
+
+virtual
+
+ +

Get the block size for backends that support it.

+ +

Reimplemented in ripple::NodeStore::NuDBBackend.

+ +

Definition at line 59 of file Backend.h.

+
@@ -345,7 +379,7 @@ Public Member Functions

Reimplemented in ripple::NodeStore::NuDBBackend.

-

Definition at line 76 of file Backend.h.

+

Definition at line 84 of file Backend.h.

@@ -671,7 +705,7 @@ Public Member Functions

Reimplemented in ripple::NodeStore::NuDBBackend.

-

Definition at line 147 of file Backend.h.

+

Definition at line 155 of file Backend.h.

diff --git a/classripple_1_1NodeStore_1_1MemoryBackend-members.html b/classripple_1_1NodeStore_1_1MemoryBackend-members.html index 2082a1d621..bc1eefed95 100644 --- a/classripple_1_1NodeStore_1_1MemoryBackend-members.html +++ b/classripple_1_1NodeStore_1_1MemoryBackend-members.html @@ -85,22 +85,23 @@ $(function() { fetch(void const *key, std::shared_ptr< NodeObject > *pObject) overrideripple::NodeStore::MemoryBackendvirtual fetchBatch(std::vector< uint256 const * > const &hashes) overrideripple::NodeStore::MemoryBackendvirtual for_each(std::function< void(std::shared_ptr< NodeObject >)> f) overrideripple::NodeStore::MemoryBackendvirtual - getName() overrideripple::NodeStore::MemoryBackendvirtual - getWriteLoad() overrideripple::NodeStore::MemoryBackendvirtual - isOpen() overrideripple::NodeStore::MemoryBackendvirtual - journal_ripple::NodeStore::MemoryBackendprivate - Map typedefripple::NodeStore::MemoryBackendprivate - MemoryBackend(size_t keyBytes, Section const &keyValues, beast::Journal journal)ripple::NodeStore::MemoryBackend - name_ripple::NodeStore::MemoryBackendprivate - open(bool createIfMissing) overrideripple::NodeStore::MemoryBackendvirtual - ripple::NodeStore::Backend::open(bool createIfMissing, uint64_t appType, uint64_t uid, uint64_t salt)ripple::NodeStore::Backendvirtual - setDeletePath() overrideripple::NodeStore::MemoryBackendvirtual - store(std::shared_ptr< NodeObject > const &object) overrideripple::NodeStore::MemoryBackendvirtual - storeBatch(Batch const &batch) overrideripple::NodeStore::MemoryBackendvirtual - sync() overrideripple::NodeStore::MemoryBackendvirtual - verify()ripple::NodeStore::Backendvirtual - ~Backend()=defaultripple::NodeStore::Backendvirtual - ~MemoryBackend() overrideripple::NodeStore::MemoryBackend + getBlockSize() constripple::NodeStore::Backendvirtual + getName() overrideripple::NodeStore::MemoryBackendvirtual + getWriteLoad() overrideripple::NodeStore::MemoryBackendvirtual + isOpen() overrideripple::NodeStore::MemoryBackendvirtual + journal_ripple::NodeStore::MemoryBackendprivate + Map typedefripple::NodeStore::MemoryBackendprivate + MemoryBackend(size_t keyBytes, Section const &keyValues, beast::Journal journal)ripple::NodeStore::MemoryBackend + name_ripple::NodeStore::MemoryBackendprivate + open(bool createIfMissing) overrideripple::NodeStore::MemoryBackendvirtual + ripple::NodeStore::Backend::open(bool createIfMissing, uint64_t appType, uint64_t uid, uint64_t salt)ripple::NodeStore::Backendvirtual + setDeletePath() overrideripple::NodeStore::MemoryBackendvirtual + store(std::shared_ptr< NodeObject > const &object) overrideripple::NodeStore::MemoryBackendvirtual + storeBatch(Batch const &batch) overrideripple::NodeStore::MemoryBackendvirtual + sync() overrideripple::NodeStore::MemoryBackendvirtual + verify()ripple::NodeStore::Backendvirtual + ~Backend()=defaultripple::NodeStore::Backendvirtual + ~MemoryBackend() overrideripple::NodeStore::MemoryBackend
+
+ +

◆ getBlockSize()

+ +
+
+ + + + + +
+ + + + + + + +
virtual std::optional< std::size_t > ripple::NodeStore::Backend::getBlockSize () const
+
+virtualinherited
+
+ +

Get the block size for backends that support it.

+ +

Reimplemented in ripple::NodeStore::NuDBBackend.

+ +

Definition at line 59 of file Backend.h.

+
@@ -803,7 +837,7 @@ Private Attributes

Reimplemented in ripple::NodeStore::NuDBBackend.

-

Definition at line 76 of file Backend.h.

+

Definition at line 84 of file Backend.h.

@@ -835,7 +869,7 @@ Private Attributes

Reimplemented in ripple::NodeStore::NuDBBackend.

-

Definition at line 147 of file Backend.h.

+

Definition at line 155 of file Backend.h.

diff --git a/classripple_1_1NodeStore_1_1NuDBBackend-members.html b/classripple_1_1NodeStore_1_1NuDBBackend-members.html index 607be3de72..4d21e81bcc 100644 --- a/classripple_1_1NodeStore_1_1NuDBBackend-members.html +++ b/classripple_1_1NodeStore_1_1NuDBBackend-members.html @@ -80,15 +80,17 @@ $(function() {

This is the complete list of members for ripple::NodeStore::NuDBBackend, including all inherited members.

- - - - - - - - - + + + + + + + + + + + @@ -99,14 +101,15 @@ $(function() { - - - - - - - - + + + + + + + + +
appnumripple::NodeStore::NuDBBackendstatic
burstSize_ripple::NodeStore::NuDBBackend
close() overrideripple::NodeStore::NuDBBackendvirtual
db_ripple::NodeStore::NuDBBackend
deletePath_ripple::NodeStore::NuDBBackend
do_insert(std::shared_ptr< NodeObject > const &no)ripple::NodeStore::NuDBBackend
fdRequired() const overrideripple::NodeStore::NuDBBackendvirtual
fetch(void const *key, std::shared_ptr< NodeObject > *pno) overrideripple::NodeStore::NuDBBackendvirtual
fetchBatch(std::vector< uint256 const * > const &hashes) overrideripple::NodeStore::NuDBBackendvirtual
for_each(std::function< void(std::shared_ptr< NodeObject >)> f) overrideripple::NodeStore::NuDBBackendvirtual
blockSize_ripple::NodeStore::NuDBBackend
burstSize_ripple::NodeStore::NuDBBackend
close() overrideripple::NodeStore::NuDBBackendvirtual
db_ripple::NodeStore::NuDBBackend
deletePath_ripple::NodeStore::NuDBBackend
do_insert(std::shared_ptr< NodeObject > const &no)ripple::NodeStore::NuDBBackend
fdRequired() const overrideripple::NodeStore::NuDBBackendvirtual
fetch(void const *key, std::shared_ptr< NodeObject > *pno) overrideripple::NodeStore::NuDBBackendvirtual
fetchBatch(std::vector< uint256 const * > const &hashes) overrideripple::NodeStore::NuDBBackendvirtual
for_each(std::function< void(std::shared_ptr< NodeObject >)> f) overrideripple::NodeStore::NuDBBackendvirtual
getBlockSize() const overrideripple::NodeStore::NuDBBackendvirtual
getName() overrideripple::NodeStore::NuDBBackendvirtual
getWriteLoad() overrideripple::NodeStore::NuDBBackendvirtual
isOpen() overrideripple::NodeStore::NuDBBackendvirtual
NuDBBackend(size_t keyBytes, Section const &keyValues, std::size_t burstSize, Scheduler &scheduler, nudb::context &context, beast::Journal journal)ripple::NodeStore::NuDBBackend
open(bool createIfMissing, uint64_t appType, uint64_t uid, uint64_t salt) overrideripple::NodeStore::NuDBBackendvirtual
open(bool createIfMissing) overrideripple::NodeStore::NuDBBackendvirtual
scheduler_ripple::NodeStore::NuDBBackend
setDeletePath() overrideripple::NodeStore::NuDBBackendvirtual
store(std::shared_ptr< NodeObject > const &no) overrideripple::NodeStore::NuDBBackendvirtual
storeBatch(Batch const &batch) overrideripple::NodeStore::NuDBBackendvirtual
sync() overrideripple::NodeStore::NuDBBackendvirtual
verify() overrideripple::NodeStore::NuDBBackendvirtual
~Backend()=defaultripple::NodeStore::Backendvirtual
~NuDBBackend() overrideripple::NodeStore::NuDBBackend
parseBlockSize(std::string const &name, Section const &keyValues, beast::Journal journal)ripple::NodeStore::NuDBBackendprivatestatic
scheduler_ripple::NodeStore::NuDBBackend
setDeletePath() overrideripple::NodeStore::NuDBBackendvirtual
store(std::shared_ptr< NodeObject > const &no) overrideripple::NodeStore::NuDBBackendvirtual
storeBatch(Batch const &batch) overrideripple::NodeStore::NuDBBackendvirtual
sync() overrideripple::NodeStore::NuDBBackendvirtual
verify() overrideripple::NodeStore::NuDBBackendvirtual
~Backend()=defaultripple::NodeStore::Backendvirtual
~NuDBBackend() overrideripple::NodeStore::NuDBBackend
ripple::NodeStore::NuDBBackend Class Reference
@@ -96,25 +97,25 @@ Collaboration diagram for ripple::NodeStore::NuDBBackend:
Collaboration graph
- + - + - + - + - - - - - - - - - - + + + + + + + + + +
[legend]
@@ -129,6 +130,9 @@ Public Member Functions + + + @@ -183,6 +187,8 @@ Public Attributes + + @@ -194,10 +200,15 @@ Public Attributes Static Public Attributes +
std::string getName () override
 Get the human-readable name of this backend.
 
std::optional< std::size_tgetBlockSize () const override
 Get the block size for backends that support it.
 
void open (bool createIfMissing, uint64_t appType, uint64_t uid, uint64_t salt) override
 Open the backend.
 
 
std::string const name_
 
std::size_t const blockSize_
 
nudb::store db_
 
std::atomic< bool > deletePath_
static constexpr std::uint64_t appnum = 1
 
+ + +

+Static Private Member Functions

static std::size_t parseBlockSize (std::string const &name, Section const &keyValues, beast::Journal journal)
 

Detailed Description

-

Definition at line 42 of file NuDBFactory.cpp.

+

Definition at line 43 of file NuDBFactory.cpp.

Constructor & Destructor Documentation

◆ NuDBBackend() [1/2]

@@ -243,7 +254,7 @@ Static Public Attributes
-

Definition at line 59 of file NuDBFactory.cpp.

+

Definition at line 61 of file NuDBFactory.cpp.

@@ -297,7 +308,7 @@ Static Public Attributes
-

Definition at line 77 of file NuDBFactory.cpp.

+

Definition at line 80 of file NuDBFactory.cpp.

@@ -324,7 +335,7 @@ Static Public Attributes
-

Definition at line 97 of file NuDBFactory.cpp.

+

Definition at line 101 of file NuDBFactory.cpp.

@@ -357,7 +368,38 @@ Static Public Attributes

Implements ripple::NodeStore::Backend.

-

Definition at line 112 of file NuDBFactory.cpp.

+

Definition at line 116 of file NuDBFactory.cpp.

+ + + + +

◆ getBlockSize()

+ +
+
+ + + + + +
+ + + + + + + +
std::optional< std::size_t > ripple::NodeStore::NuDBBackend::getBlockSize () const
+
+overridevirtual
+
+ +

Get the block size for backends that support it.

+ +

Reimplemented from ripple::NodeStore::Backend.

+ +

Definition at line 122 of file NuDBFactory.cpp.

@@ -426,7 +468,7 @@ Static Public Attributes

Reimplemented from ripple::NodeStore::Backend.

-

Definition at line 118 of file NuDBFactory.cpp.

+

Definition at line 128 of file NuDBFactory.cpp.

@@ -457,7 +499,7 @@ Static Public Attributes

Implements ripple::NodeStore::Backend.

-

Definition at line 166 of file NuDBFactory.cpp.

+

Definition at line 176 of file NuDBFactory.cpp.

@@ -495,7 +537,7 @@ Static Public Attributes

Implements ripple::NodeStore::Backend.

-

Definition at line 172 of file NuDBFactory.cpp.

+

Definition at line 182 of file NuDBFactory.cpp.

@@ -527,7 +569,7 @@ Static Public Attributes

Implements ripple::NodeStore::Backend.

-

Definition at line 178 of file NuDBFactory.cpp.

+

Definition at line 188 of file NuDBFactory.cpp.

@@ -578,7 +620,7 @@ Static Public Attributes

Implements ripple::NodeStore::Backend.

-

Definition at line 204 of file NuDBFactory.cpp.

+

Definition at line 214 of file NuDBFactory.cpp.

@@ -610,7 +652,7 @@ Static Public Attributes

Implements ripple::NodeStore::Backend.

-

Definition at line 232 of file NuDBFactory.cpp.

+

Definition at line 242 of file NuDBFactory.cpp.

@@ -630,7 +672,7 @@ Static Public Attributes
-

Definition at line 250 of file NuDBFactory.cpp.

+

Definition at line 260 of file NuDBFactory.cpp.

@@ -669,7 +711,7 @@ Static Public Attributes

Implements ripple::NodeStore::Backend.

-

Definition at line 262 of file NuDBFactory.cpp.

+

Definition at line 272 of file NuDBFactory.cpp.

@@ -702,7 +744,7 @@ Static Public Attributes

Implements ripple::NodeStore::Backend.

-

Definition at line 274 of file NuDBFactory.cpp.

+

Definition at line 284 of file NuDBFactory.cpp.

@@ -731,7 +773,7 @@ Static Public Attributes

Implements ripple::NodeStore::Backend.

-

Definition at line 287 of file NuDBFactory.cpp.

+

Definition at line 297 of file NuDBFactory.cpp.

@@ -765,7 +807,7 @@ Static Public Attributes

Implements ripple::NodeStore::Backend.

-

Definition at line 292 of file NuDBFactory.cpp.

+

Definition at line 302 of file NuDBFactory.cpp.

@@ -796,7 +838,7 @@ Static Public Attributes

Implements ripple::NodeStore::Backend.

-

Definition at line 329 of file NuDBFactory.cpp.

+

Definition at line 339 of file NuDBFactory.cpp.

@@ -827,7 +869,7 @@ Static Public Attributes

Implements ripple::NodeStore::Backend.

-

Definition at line 335 of file NuDBFactory.cpp.

+

Definition at line 345 of file NuDBFactory.cpp.

@@ -859,7 +901,7 @@ Static Public Attributes

Reimplemented from ripple::NodeStore::Backend.

-

Definition at line 341 of file NuDBFactory.cpp.

+

Definition at line 351 of file NuDBFactory.cpp.

@@ -890,7 +932,51 @@ Static Public Attributes

Implements ripple::NodeStore::Backend.

-

Definition at line 360 of file NuDBFactory.cpp.

+

Definition at line 370 of file NuDBFactory.cpp.

+ + + + +

◆ parseBlockSize()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
static std::size_t ripple::NodeStore::NuDBBackend::parseBlockSize (std::string const & name,
Section const & keyValues,
beast::Journal journal 
)
+
+staticprivate
+
+ +

Definition at line 377 of file NuDBFactory.cpp.

@@ -915,7 +1001,7 @@ Static Public Attributes
-

Definition at line 49 of file NuDBFactory.cpp.

+

Definition at line 50 of file NuDBFactory.cpp.

@@ -931,7 +1017,7 @@ Static Public Attributes
-

Definition at line 51 of file NuDBFactory.cpp.

+

Definition at line 52 of file NuDBFactory.cpp.

@@ -947,7 +1033,7 @@ Static Public Attributes
-

Definition at line 52 of file NuDBFactory.cpp.

+

Definition at line 53 of file NuDBFactory.cpp.

@@ -963,7 +1049,7 @@ Static Public Attributes
-

Definition at line 53 of file NuDBFactory.cpp.

+

Definition at line 54 of file NuDBFactory.cpp.

@@ -979,7 +1065,23 @@ Static Public Attributes
-

Definition at line 54 of file NuDBFactory.cpp.

+

Definition at line 55 of file NuDBFactory.cpp.

+ +
+ + +

◆ blockSize_

+ +
+
+ + + + +
std::size_t const ripple::NodeStore::NuDBBackend::blockSize_
+
+ +

Definition at line 56 of file NuDBFactory.cpp.

@@ -995,7 +1097,7 @@ Static Public Attributes
-

Definition at line 55 of file NuDBFactory.cpp.

+

Definition at line 57 of file NuDBFactory.cpp.

@@ -1011,7 +1113,7 @@ Static Public Attributes
-

Definition at line 56 of file NuDBFactory.cpp.

+

Definition at line 58 of file NuDBFactory.cpp.

@@ -1027,7 +1129,7 @@ Static Public Attributes
-

Definition at line 57 of file NuDBFactory.cpp.

+

Definition at line 59 of file NuDBFactory.cpp.

diff --git a/classripple_1_1NodeStore_1_1NuDBBackend__coll__graph.map b/classripple_1_1NodeStore_1_1NuDBBackend__coll__graph.map index 40bc9d9f35..24b9386e71 100644 --- a/classripple_1_1NodeStore_1_1NuDBBackend__coll__graph.map +++ b/classripple_1_1NodeStore_1_1NuDBBackend__coll__graph.map @@ -1,21 +1,21 @@ - + - + - + - + - - - - - - - - - - + + + + + + + + + + diff --git a/classripple_1_1NodeStore_1_1NuDBBackend__coll__graph.md5 b/classripple_1_1NodeStore_1_1NuDBBackend__coll__graph.md5 index 2520897bbd..19a3ef6ab6 100644 --- a/classripple_1_1NodeStore_1_1NuDBBackend__coll__graph.md5 +++ b/classripple_1_1NodeStore_1_1NuDBBackend__coll__graph.md5 @@ -1 +1 @@ -a2e835c087f5a2bc2355926ef13efb31 \ No newline at end of file +6c7e2e9badaae0d52347842fd4f34d41 \ No newline at end of file diff --git a/classripple_1_1NodeStore_1_1NuDBBackend__coll__graph.png b/classripple_1_1NodeStore_1_1NuDBBackend__coll__graph.png index f27299f97b250eb401ea848e9c4989ec7dbc6f5f..aa9ac66f359a26a9823344b52f392d189d38b493 100644 GIT binary patch literal 41042 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 diff --git a/classripple_1_1NodeStore_1_1NuDBFactory.html b/classripple_1_1NodeStore_1_1NuDBFactory.html index 3dbdee5a11..0e9a78023b 100644 --- a/classripple_1_1NodeStore_1_1NuDBFactory.html +++ b/classripple_1_1NodeStore_1_1NuDBFactory.html @@ -118,7 +118,7 @@ Public Member Functions

Detailed Description

-

Definition at line 368 of file NuDBFactory.cpp.

+

Definition at line 428 of file NuDBFactory.cpp.

Constructor & Destructor Documentation

◆ NuDBFactory()

@@ -135,7 +135,7 @@ Public Member Functions
-

Definition at line 371 of file NuDBFactory.cpp.

+

Definition at line 431 of file NuDBFactory.cpp.

@@ -162,7 +162,7 @@ Public Member Functions
-

Definition at line 376 of file NuDBFactory.cpp.

+

Definition at line 436 of file NuDBFactory.cpp.

@@ -194,7 +194,7 @@ Public Member Functions

Implements ripple::NodeStore::Factory.

-

Definition at line 382 of file NuDBFactory.cpp.

+

Definition at line 442 of file NuDBFactory.cpp.

@@ -264,7 +264,7 @@ Public Member Functions

Implements ripple::NodeStore::Factory.

-

Definition at line 388 of file NuDBFactory.cpp.

+

Definition at line 448 of file NuDBFactory.cpp.

@@ -341,7 +341,7 @@ Public Member Functions

Reimplemented from ripple::NodeStore::Factory.

-

Definition at line 400 of file NuDBFactory.cpp.

+

Definition at line 460 of file NuDBFactory.cpp.

diff --git a/classripple_1_1NodeStore_1_1NuDBFactory__test-members.html b/classripple_1_1NodeStore_1_1NuDBFactory__test-members.html new file mode 100644 index 0000000000..58ed870ecc --- /dev/null +++ b/classripple_1_1NodeStore_1_1NuDBFactory__test-members.html @@ -0,0 +1,140 @@ + + + + + + + +rippled: Member List + + + + + + + + + +
+
+ + + + + + +
+
rippled +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
ripple::NodeStore::NuDBFactory_test Member List
+
+
+ +

This is the complete list of members for ripple::NodeStore::NuDBFactory_test, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
abort_beast::unit_test::suiteprivate
aborted_beast::unit_test::suiteprivate
areBatchesEqual(Batch const &lhs, Batch const &rhs)ripple::NodeStore::TestBasestatic
arg() constbeast::unit_test::suite
createPredictableBatch(int numObjects, std::uint64_t seed)ripple::NodeStore::TestBasestatic
createSection(std::string const &path, std::string const &blockSize="")ripple::NodeStore::NuDBFactory_testprivate
except(F &&f, String const &reason)beast::unit_test::suite
except(F &&f)beast::unit_test::suite
except(F &&f, String const &reason)beast::unit_test::suite
except(F &&f)beast::unit_test::suite
expect(Condition const &shouldBeTrue)beast::unit_test::suite
expect(Condition const &shouldBeTrue, String const &reason)beast::unit_test::suite
expect(Condition const &shouldBeTrue, char const *file, int line)beast::unit_test::suite
expect(Condition const &shouldBeTrue, String const &reason, char const *file, int line)beast::unit_test::suite
fail(String const &reason, char const *file, int line)beast::unit_test::suite
fail(std::string const &reason="")beast::unit_test::suite
fetchCopyOfBatch(Backend &backend, Batch *pCopy, Batch const &batch)ripple::NodeStore::TestBase
fetchCopyOfBatch(Database &db, Batch *pCopy, Batch const &batch)ripple::NodeStore::TestBasestatic
fetchMissing(Backend &backend, Batch const &batch)ripple::NodeStore::TestBase
logbeast::unit_test::suite
maxPayloadBytesripple::NodeStore::TestBasestatic
minPayloadBytesripple::NodeStore::TestBasestatic
numObjectsToTestripple::NodeStore::TestBasestatic
operator()(runner &r)beast::unit_test::suite
operator=(suite const &)=deletebeast::unit_test::suite
p_this_suite()beast::unit_test::suiteprivatestatic
pass()beast::unit_test::suite
propagate_abort()beast::unit_test::suiteprivate
run() overrideripple::NodeStore::NuDBFactory_testvirtual
runner_beast::unit_test::suiteprivate
storeBatch(Backend &backend, Batch const &batch)ripple::NodeStore::TestBase
storeBatch(Database &db, Batch const &batch)ripple::NodeStore::TestBasestatic
suite()beast::unit_test::suite
suite(suite const &)=deletebeast::unit_test::suite
testBackendFunctionality(Section const &params, std::size_t expectedBlocksize)ripple::NodeStore::NuDBFactory_testprivate
testBothConstructorVariants()ripple::NodeStore::NuDBFactory_test
testcasebeast::unit_test::suite
testConfigurationParsing()ripple::NodeStore::NuDBFactory_test
testDataPersistence()ripple::NodeStore::NuDBFactory_test
testDefaultBlockSize()ripple::NodeStore::NuDBFactory_test
testInvalidBlockSizes()ripple::NodeStore::NuDBFactory_test
testLogMessage(Section const &params, beast::severities::Severity level, std::string const &expectedMessage)ripple::NodeStore::NuDBFactory_testprivate
testLogMessages()ripple::NodeStore::NuDBFactory_test
testPowerOfTwoValidation(std::string const &size, bool shouldWork)ripple::NodeStore::NuDBFactory_testprivate
testPowerOfTwoValidation()ripple::NodeStore::NuDBFactory_test
testValidBlockSizes()ripple::NodeStore::NuDBFactory_test
this_suite()beast::unit_test::suitestatic
unexcept(F &&f, String const &reason)beast::unit_test::suite
unexcept(F &&f)beast::unit_test::suite
unexpected(Condition shouldBeFalse, String const &reason)beast::unit_test::suite
unexpected(Condition shouldBeFalse)beast::unit_test::suite
~suite()=defaultbeast::unit_test::suitevirtual
+ + + + diff --git a/classripple_1_1NodeStore_1_1NuDBFactory__test.html b/classripple_1_1NodeStore_1_1NuDBFactory__test.html new file mode 100644 index 0000000000..598efb2773 --- /dev/null +++ b/classripple_1_1NodeStore_1_1NuDBFactory__test.html @@ -0,0 +1,1846 @@ + + + + + + + +rippled: ripple::NodeStore::NuDBFactory_test Class Reference + + + + + + + + + +
+
+ + + + + + +
+
rippled +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+ +
+
+Inheritance diagram for ripple::NodeStore::NuDBFactory_test:
+
+
Inheritance graph
+ + + + + + + +
[legend]
+
+Collaboration diagram for ripple::NodeStore::NuDBFactory_test:
+
+
Collaboration graph
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

void testDefaultBlockSize ()
 
void testValidBlockSizes ()
 
void testInvalidBlockSizes ()
 
void testLogMessages ()
 
void testPowerOfTwoValidation ()
 
void testBothConstructorVariants ()
 
void testConfigurationParsing ()
 
void testDataPersistence ()
 
void run () override
 Runs the suite.
 
void storeBatch (Backend &backend, Batch const &batch)
 
void fetchCopyOfBatch (Backend &backend, Batch *pCopy, Batch const &batch)
 
void fetchMissing (Backend &backend, Batch const &batch)
 
template<class = void>
void operator() (runner &r)
 Invokes the test using the specified runner.
 
template<class = void>
void pass ()
 Record a successful test condition.
 
template<class F , class String >
bool except (F &&f, String const &reason)
 
template<class F >
bool except (F &&f)
 
template<class E , class F , class String >
bool except (F &&f, String const &reason)
 
template<class E , class F >
bool except (F &&f)
 
template<class F , class String >
bool unexcept (F &&f, String const &reason)
 
template<class F >
bool unexcept (F &&f)
 
std::string const & arg () const
 Return the argument associated with the runner.
 
template<class Condition , class String >
bool unexpected (Condition shouldBeFalse, String const &reason)
 
template<class Condition >
bool unexpected (Condition shouldBeFalse)
 
template<class String >
void fail (String const &reason, char const *file, int line)
 Record a failure.
 
template<class = void>
void fail (std::string const &reason="")
 
template<class Condition >
bool expect (Condition const &shouldBeTrue)
 Evaluate a test condition.
 
template<class Condition , class String >
bool expect (Condition const &shouldBeTrue, String const &reason)
 
template<class Condition >
bool expect (Condition const &shouldBeTrue, char const *file, int line)
 
template<class Condition , class String >
bool expect (Condition const &shouldBeTrue, String const &reason, char const *file, int line)
 
+ + + + + + + + + + + + +

+Static Public Member Functions

static Batch createPredictableBatch (int numObjects, std::uint64_t seed)
 
static bool areBatchesEqual (Batch const &lhs, Batch const &rhs)
 
static void storeBatch (Database &db, Batch const &batch)
 
static void fetchCopyOfBatch (Database &db, Batch *pCopy, Batch const &batch)
 
static suitethis_suite ()
 Returns the "current" running suite.
 
+ + + + + + + +

+Public Attributes

log_os< char > log
 Logging output stream.
 
testcase_t testcase
 Memberspace for declaring test cases.
 
+ + + + + + + +

+Static Public Attributes

static std::size_t const minPayloadBytes = 1
 
static std::size_t const maxPayloadBytes = 2000
 
static int const numObjectsToTest = 2000
 
+ + + + + + + + + + + +

+Private Member Functions

Section createSection (std::string const &path, std::string const &blockSize="")
 
bool testBackendFunctionality (Section const &params, std::size_t expectedBlocksize)
 
void testLogMessage (Section const &params, beast::severities::Severity level, std::string const &expectedMessage)
 
void testPowerOfTwoValidation (std::string const &size, bool shouldWork)
 
void propagate_abort ()
 
+ + + +

+Static Private Member Functions

static suite ** p_this_suite ()
 
+ + + + + + + +

+Private Attributes

bool abort_ = false
 
bool aborted_ = false
 
runner * runner_ = nullptr
 
+

Detailed Description

+
+

Definition at line 36 of file NuDBFactory_test.cpp.

+

Member Function Documentation

+ +

◆ createSection()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
Section ripple::NodeStore::NuDBFactory_test::createSection (std::string const & path,
std::string const & blockSize = "" 
)
+
+private
+
+ +

Definition at line 41 of file NuDBFactory_test.cpp.

+ +
+
+ +

◆ testBackendFunctionality()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool ripple::NodeStore::NuDBFactory_test::testBackendFunctionality (Section const & params,
std::size_t expectedBlocksize 
)
+
+private
+
+ +

Definition at line 53 of file NuDBFactory_test.cpp.

+ +
+
+ +

◆ testLogMessage()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
void ripple::NodeStore::NuDBFactory_test::testLogMessage (Section const & params,
beast::severities::Severity level,
std::string const & expectedMessage 
)
+
+private
+
+ +

Definition at line 95 of file NuDBFactory_test.cpp.

+ +
+
+ +

◆ testPowerOfTwoValidation() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void ripple::NodeStore::NuDBFactory_test::testPowerOfTwoValidation (std::string const & size,
bool shouldWork 
)
+
+private
+
+ +

Definition at line 113 of file NuDBFactory_test.cpp.

+ +
+
+ +

◆ testDefaultBlockSize()

+ +
+
+ + + + + + + +
void ripple::NodeStore::NuDBFactory_test::testDefaultBlockSize ()
+
+ +

Definition at line 134 of file NuDBFactory_test.cpp.

+ +
+
+ +

◆ testValidBlockSizes()

+ +
+
+ + + + + + + +
void ripple::NodeStore::NuDBFactory_test::testValidBlockSizes ()
+
+ +

Definition at line 146 of file NuDBFactory_test.cpp.

+ +
+
+ +

◆ testInvalidBlockSizes()

+ +
+
+ + + + + + + +
void ripple::NodeStore::NuDBFactory_test::testInvalidBlockSizes ()
+
+ +

Definition at line 168 of file NuDBFactory_test.cpp.

+ +
+
+ +

◆ testLogMessages()

+ +
+
+ + + + + + + +
void ripple::NodeStore::NuDBFactory_test::testLogMessages ()
+
+ +

Definition at line 213 of file NuDBFactory_test.cpp.

+ +
+
+ +

◆ testPowerOfTwoValidation() [2/2]

+ +
+
+ + + + + + + +
void ripple::NodeStore::NuDBFactory_test::testPowerOfTwoValidation ()
+
+ +

Definition at line 283 of file NuDBFactory_test.cpp.

+ +
+
+ +

◆ testBothConstructorVariants()

+ +
+
+ + + + + + + +
void ripple::NodeStore::NuDBFactory_test::testBothConstructorVariants ()
+
+ +

Definition at line 328 of file NuDBFactory_test.cpp.

+ +
+
+ +

◆ testConfigurationParsing()

+ +
+
+ + + + + + + +
void ripple::NodeStore::NuDBFactory_test::testConfigurationParsing ()
+
+ +

Definition at line 353 of file NuDBFactory_test.cpp.

+ +
+
+ +

◆ testDataPersistence()

+ +
+
+ + + + + + + +
void ripple::NodeStore::NuDBFactory_test::testDataPersistence ()
+
+ +

Definition at line 419 of file NuDBFactory_test.cpp.

+ +
+
+ +

◆ run()

+ +
+
+ + + + + +
+ + + + + + + +
void ripple::NodeStore::NuDBFactory_test::run ()
+
+overridevirtual
+
+ +

Runs the suite.

+ +

Implements beast::unit_test::suite.

+ +

Definition at line 462 of file NuDBFactory_test.cpp.

+ +
+
+ +

◆ createPredictableBatch()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
static Batch ripple::NodeStore::TestBase::createPredictableBatch (int numObjects,
std::uint64_t seed 
)
+
+staticinherited
+
+ +

Definition at line 83 of file TestBase.h.

+ +
+
+ +

◆ areBatchesEqual()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
static bool ripple::NodeStore::TestBase::areBatchesEqual (Batch const & lhs,
Batch const & rhs 
)
+
+staticinherited
+
+ +

Definition at line 123 of file TestBase.h.

+ +
+
+ +

◆ storeBatch() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void ripple::NodeStore::TestBase::storeBatch (Backendbackend,
Batch const & batch 
)
+
+inherited
+
+ +

Definition at line 148 of file TestBase.h.

+ +
+
+ +

◆ storeBatch() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
static void ripple::NodeStore::TestBase::storeBatch (Databasedb,
Batch const & batch 
)
+
+staticinherited
+
+ +

Definition at line 197 of file TestBase.h.

+ +
+
+ +

◆ fetchCopyOfBatch() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
void ripple::NodeStore::TestBase::fetchCopyOfBatch (Backendbackend,
BatchpCopy,
Batch const & batch 
)
+
+inherited
+
+ +

Definition at line 158 of file TestBase.h.

+ +
+
+ +

◆ fetchCopyOfBatch() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
static void ripple::NodeStore::TestBase::fetchCopyOfBatch (Databasedb,
BatchpCopy,
Batch const & batch 
)
+
+staticinherited
+
+ +

Definition at line 215 of file TestBase.h.

+ +
+
+ +

◆ fetchMissing()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void ripple::NodeStore::TestBase::fetchMissing (Backendbackend,
Batch const & batch 
)
+
+inherited
+
+ +

Definition at line 182 of file TestBase.h.

+ +
+
+ +

◆ this_suite()

+ +
+
+ + + + + +
+ + + + + + + +
static suite * beast::unit_test::suite::this_suite ()
+
+staticinherited
+
+ +

Returns the "current" running suite.

+

If no suite is running, nullptr is returned.

+ +

Definition at line 161 of file suite.h.

+ +
+
+ +

◆ operator()()

+ +
+
+
+template<class >
+ + + + + +
+ + + + + + + + +
void beast::unit_test::suite::operator() (runnerr)
+
+inherited
+
+ +

Invokes the test using the specified runner.

+

Data members are set up here instead of the constructor as a convenience to writing the derived class to avoid repetition of forwarded constructor arguments to the base. Normally this is called by the framework for you.

+ +

Definition at line 399 of file suite.h.

+ +
+
+ +

◆ pass()

+ +
+
+
+template<class >
+ + + + + +
+ + + + + + + +
void beast::unit_test::suite::pass ()
+
+inherited
+
+ +

Record a successful test condition.

+ +

Definition at line 511 of file suite.h.

+ +
+
+ +

◆ fail() [1/2]

+ +
+
+
+template<class String >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
void beast::unit_test::suite::fail (String const & reason,
char const * file,
int line 
)
+
+inherited
+
+ +

Record a failure.

+
Parameters
+ + + + +
reasonOptional text added to the output on a failure.
fileThe source code file where the test failed.
lineThe source code line number where the test failed.
+
+
+ +

Definition at line 533 of file suite.h.

+ +
+
+ +

◆ fail() [2/2]

+ +
+
+
+template<class >
+ + + + + +
+ + + + + + + + +
void beast::unit_test::suite::fail (std::string const & reason = "")
+
+inherited
+
+ +

Definition at line 520 of file suite.h.

+ +
+
+ +

◆ expect() [1/4]

+ +
+
+
+template<class Condition >
+ + + + + +
+ + + + + + + + +
bool beast::unit_test::suite::expect (Condition const & shouldBeTrue)
+
+inherited
+
+ +

Evaluate a test condition.

+

This function provides improved logging by incorporating the file name and line number into the reported output on failure, as well as additional text specified by the caller.

+
Parameters
+ + + + + +
shouldBeTrueThe condition to test. The condition is evaluated in a boolean context.
reasonOptional added text to output on a failure.
fileThe source code file where the test failed.
lineThe source code line number where the test failed.
+
+
+
Returns
true if the test condition indicates success.
+ +

Definition at line 229 of file suite.h.

+ +
+
+ +

◆ expect() [2/4]

+ +
+
+
+template<class Condition , class String >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool beast::unit_test::suite::expect (Condition const & shouldBeTrue,
String const & reason 
)
+
+inherited
+
+ +

Definition at line 416 of file suite.h.

+ +
+
+ +

◆ expect() [3/4]

+ +
+
+
+template<class Condition >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
bool beast::unit_test::suite::expect (Condition const & shouldBeTrue,
char const * file,
int line 
)
+
+inherited
+
+ +

Definition at line 240 of file suite.h.

+ +
+
+ +

◆ expect() [4/4]

+ +
+
+
+template<class Condition , class String >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
bool beast::unit_test::suite::expect (Condition const & shouldBeTrue,
String const & reason,
char const * file,
int line 
)
+
+inherited
+
+ +

Definition at line 429 of file suite.h.

+ +
+
+ +

◆ except() [1/4]

+ +
+
+
+template<class F , class String >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool beast::unit_test::suite::except (F && f,
String const & reason 
)
+
+inherited
+
+ +

Definition at line 448 of file suite.h.

+ +
+
+ +

◆ except() [2/4]

+ +
+
+
+template<class F >
+ + + + + +
+ + + + + + + + +
bool beast::unit_test::suite::except (F && f)
+
+inherited
+
+ +

Definition at line 263 of file suite.h.

+ +
+
+ +

◆ except() [3/4]

+ +
+
+
+template<class E , class F , class String >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool beast::unit_test::suite::except (F && f,
String const & reason 
)
+
+inherited
+
+ +

Definition at line 465 of file suite.h.

+ +
+
+ +

◆ except() [4/4]

+ +
+
+
+template<class E , class F >
+ + + + + +
+ + + + + + + + +
bool beast::unit_test::suite::except (F && f)
+
+inherited
+
+ +

Definition at line 272 of file suite.h.

+ +
+
+ +

◆ unexcept() [1/2]

+ +
+
+
+template<class F , class String >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool beast::unit_test::suite::unexcept (F && f,
String const & reason 
)
+
+inherited
+
+ +

Definition at line 482 of file suite.h.

+ +
+
+ +

◆ unexcept() [2/2]

+ +
+
+
+template<class F >
+ + + + + +
+ + + + + + + + +
bool beast::unit_test::suite::unexcept (F && f)
+
+inherited
+
+ +

Definition at line 281 of file suite.h.

+ +
+
+ +

◆ arg()

+ +
+
+ + + + + +
+ + + + + + + +
std::string const & beast::unit_test::suite::arg () const
+
+inherited
+
+ +

Return the argument associated with the runner.

+ +

Definition at line 288 of file suite.h.

+ +
+
+ +

◆ unexpected() [1/2]

+ +
+
+
+template<class Condition , class String >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool beast::unit_test::suite::unexpected (Condition shouldBeFalse,
String const & reason 
)
+
+inherited
+
+ +

Definition at line 499 of file suite.h.

+ +
+
+ +

◆ unexpected() [2/2]

+ +
+
+
+template<class Condition >
+ + + + + +
+ + + + + + + + +
bool beast::unit_test::suite::unexpected (Condition shouldBeFalse)
+
+inherited
+
+ +

Definition at line 301 of file suite.h.

+ +
+
+ +

◆ p_this_suite()

+ +
+
+ + + + + +
+ + + + + + + +
static suite ** beast::unit_test::suite::p_this_suite ()
+
+staticprivateinherited
+
+ +

Definition at line 310 of file suite.h.

+ +
+
+ +

◆ propagate_abort()

+ +
+
+ + + + + +
+ + + + + + + +
void beast::unit_test::suite::propagate_abort ()
+
+privateinherited
+
+ +

Definition at line 539 of file suite.h.

+ +
+
+

Member Data Documentation

+ +

◆ minPayloadBytes

+ +
+
+ + + + + +
+ + + + +
std::size_t const ripple::NodeStore::TestBase::minPayloadBytes = 1
+
+staticinherited
+
+ +

Definition at line 76 of file TestBase.h.

+ +
+
+ +

◆ maxPayloadBytes

+ +
+
+ + + + + +
+ + + + +
std::size_t const ripple::NodeStore::TestBase::maxPayloadBytes = 2000
+
+staticinherited
+
+ +

Definition at line 77 of file TestBase.h.

+ +
+
+ +

◆ numObjectsToTest

+ +
+
+ + + + + +
+ + + + +
int const ripple::NodeStore::TestBase::numObjectsToTest = 2000
+
+staticinherited
+
+ +

Definition at line 78 of file TestBase.h.

+ +
+
+ +

◆ abort_

+ +
+
+ + + + + +
+ + + + +
bool beast::unit_test::suite::abort_ = false
+
+privateinherited
+
+ +

Definition at line 57 of file suite.h.

+ +
+
+ +

◆ aborted_

+ +
+
+ + + + + +
+ + + + +
bool beast::unit_test::suite::aborted_ = false
+
+privateinherited
+
+ +

Definition at line 58 of file suite.h.

+ +
+
+ +

◆ runner_

+ +
+
+ + + + + +
+ + + + +
runner* beast::unit_test::suite::runner_ = nullptr
+
+privateinherited
+
+ +

Definition at line 59 of file suite.h.

+ +
+
+ +

◆ log

+ +
+
+ + + + + +
+ + + + +
log_os<char> beast::unit_test::suite::log
+
+inherited
+
+ +

Logging output stream.

+

Text sent to the log output stream will be forwarded to the output stream associated with the runner.

+ +

Definition at line 152 of file suite.h.

+ +
+
+ +

◆ testcase

+ +
+
+ + + + + +
+ + + + +
testcase_t beast::unit_test::suite::testcase
+
+inherited
+
+ +

Memberspace for declaring test cases.

+ +

Definition at line 155 of file suite.h.

+ +
+
+
+ + + + diff --git a/classripple_1_1NodeStore_1_1NuDBFactory__test__coll__graph.map b/classripple_1_1NodeStore_1_1NuDBFactory__test__coll__graph.map new file mode 100644 index 0000000000..7e74545e70 --- /dev/null +++ b/classripple_1_1NodeStore_1_1NuDBFactory__test__coll__graph.map @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/classripple_1_1NodeStore_1_1NuDBFactory__test__coll__graph.md5 b/classripple_1_1NodeStore_1_1NuDBFactory__test__coll__graph.md5 new file mode 100644 index 0000000000..b57e1b8a8f --- /dev/null +++ b/classripple_1_1NodeStore_1_1NuDBFactory__test__coll__graph.md5 @@ -0,0 +1 @@ +0f9cc10e63caf1b22164615601c0c853 \ No newline at end of file diff --git a/classripple_1_1NodeStore_1_1NuDBFactory__test__coll__graph.png b/classripple_1_1NodeStore_1_1NuDBFactory__test__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..4819da2c467a36f340eb62f29a0714df807bdbe3 GIT binary patch literal 99936 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 z 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 + + + + + + diff --git a/classripple_1_1NodeStore_1_1NuDBFactory__test__inherit__graph.md5 b/classripple_1_1NodeStore_1_1NuDBFactory__test__inherit__graph.md5 new file mode 100644 index 0000000000..9efe3b120f --- /dev/null +++ b/classripple_1_1NodeStore_1_1NuDBFactory__test__inherit__graph.md5 @@ -0,0 +1 @@ +be4b839bdebea44d2283b67808496db6 \ No newline at end of file diff --git a/classripple_1_1NodeStore_1_1NuDBFactory__test__inherit__graph.png b/classripple_1_1NodeStore_1_1NuDBFactory__test__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..29428da96bba8b33114eced9e555c808e3d7fb85 GIT binary patch literal 9228 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 literal 0 HcmV?d00001 diff --git a/classripple_1_1NodeStore_1_1NullBackend-members.html b/classripple_1_1NodeStore_1_1NullBackend-members.html index f924d8e7eb..6cf8ad263d 100644 --- a/classripple_1_1NodeStore_1_1NullBackend-members.html +++ b/classripple_1_1NodeStore_1_1NullBackend-members.html @@ -84,19 +84,20 @@ $(function() { fetch(void const *, std::shared_ptr< NodeObject > *) overrideripple::NodeStore::NullBackendvirtual fetchBatch(std::vector< uint256 const * > const &hashes) overrideripple::NodeStore::NullBackendvirtual for_each(std::function< void(std::shared_ptr< NodeObject >)> f) overrideripple::NodeStore::NullBackendvirtual - getName() overrideripple::NodeStore::NullBackendvirtual - getWriteLoad() overrideripple::NodeStore::NullBackendvirtual - isOpen() overrideripple::NodeStore::NullBackendvirtual - NullBackend()=defaultripple::NodeStore::NullBackend - open(bool createIfMissing) overrideripple::NodeStore::NullBackendvirtual - ripple::NodeStore::Backend::open(bool createIfMissing, uint64_t appType, uint64_t uid, uint64_t salt)ripple::NodeStore::Backendvirtual - setDeletePath() overrideripple::NodeStore::NullBackendvirtual - store(std::shared_ptr< NodeObject > const &object) overrideripple::NodeStore::NullBackendvirtual - storeBatch(Batch const &batch) overrideripple::NodeStore::NullBackendvirtual - sync() overrideripple::NodeStore::NullBackendvirtual - verify()ripple::NodeStore::Backendvirtual - ~Backend()=defaultripple::NodeStore::Backendvirtual - ~NullBackend()=defaultripple::NodeStore::NullBackend + getBlockSize() constripple::NodeStore::Backendvirtual + getName() overrideripple::NodeStore::NullBackendvirtual + getWriteLoad() overrideripple::NodeStore::NullBackendvirtual + isOpen() overrideripple::NodeStore::NullBackendvirtual + NullBackend()=defaultripple::NodeStore::NullBackend + open(bool createIfMissing) overrideripple::NodeStore::NullBackendvirtual + ripple::NodeStore::Backend::open(bool createIfMissing, uint64_t appType, uint64_t uid, uint64_t salt)ripple::NodeStore::Backendvirtual + setDeletePath() overrideripple::NodeStore::NullBackendvirtual + store(std::shared_ptr< NodeObject > const &object) overrideripple::NodeStore::NullBackendvirtual + storeBatch(Batch const &batch) overrideripple::NodeStore::NullBackendvirtual + sync() overrideripple::NodeStore::NullBackendvirtual + verify()ripple::NodeStore::Backendvirtual + ~Backend()=defaultripple::NodeStore::Backendvirtual + ~NullBackend()=defaultripple::NodeStore::NullBackend