3737#include < bitcoin/database/error.hpp>
3838#include < bitcoin/database/file/file.hpp>
3939
40+ namespace libbitcoin {
41+ namespace database {
42+
43+ BC_PUSH_WARNING (NO_THROW_IN_NOEXCEPT)
44+
45+ using namespace system ;
46+
4047// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
41- #include < chrono>
42- #include < iostream>
48+ constexpr auto sp = " " ;
4349
4450enum logger
4551{
46- xopen = 0
52+ xopen,
53+ xmap,
54+ xexpand,
55+ xreserve,
56+ xallocate,
57+ xset,
58+ xremap,
59+ xflush,
60+ xunmap,
61+ xclose
4762};
4863
49- constexpr auto sp = " " ;
50-
5164size_t ticks () NOEXCEPT
5265{
5366 using clock = std::chrono::high_resolution_clock;
5467 static const auto start = clock::now ();
5568
5669 using namespace std ::chrono;
57- const auto span = duration_cast<milliseconds >(clock::now () - start);
58- return bc::system:: to_unsigned (span.count ());
70+ const auto span = duration_cast<microseconds >(clock::now () - start);
71+ return to_unsigned (span.count ());
5972}
60- // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
6173
62- namespace libbitcoin {
63- namespace database {
64-
65- BC_PUSH_WARNING (NO_THROW_IN_NOEXCEPT)
74+ void map::log ( auto kind) NOEXCEPT
75+ {
76+ std::cerr << ticks () << sp << kind << sp << opened_ << std::endl;
77+ }
6678
67- using namespace system ;
79+ void map::log (auto kind, size_t size) NOEXCEPT
80+ {
81+ std::cerr << ticks () << sp << kind << sp << opened_ << sp << size << std::endl;
82+ }
83+ // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
6884
6985map::map (const path& filename, size_t minimum, size_t expansion,
7086 bool random) NOEXCEPT
@@ -100,10 +116,9 @@ code map::open() NOEXCEPT
100116 if (const auto ec = file::open_ex (opened_, filename_, random_))
101117 return ec;
102118
103- // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
104- // 42 0 confirmed.data 19303540
119+ // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
105120 std::cerr << ticks () << sp << logger::xopen << sp << filename_ << sp << opened_ << std::endl;
106- // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
121+ // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
107122
108123 return file::size_ex (logical_, opened_);
109124}
@@ -119,10 +134,12 @@ code map::close() NOEXCEPT
119134 if (opened_ == file::invalid)
120135 return error::success;
121136
137+ // ~~~~~~~~~~~~~~~~~~
138+ log (logger::xclose);
139+ // ~~~~~~~~~~~~~~~~~~
122140 const auto descriptor = opened_;
123141 opened_ = file::invalid;
124142 logical_ = zero;
125-
126143 return file::close_ex (descriptor);
127144}
128145
@@ -280,6 +297,9 @@ bool map::expand(size_t size) NOEXCEPT
280297 return false ;
281298 }
282299
300+ // ~~~~~~~~~~~~~~~~~~
301+ log (logger::xexpand, size - logical_);
302+ // ~~~~~~~~~~~~~~~~~~
283303 logical_ = size;
284304 return true ;
285305}
@@ -300,6 +320,9 @@ bool map::reserve(size_t chunk) NOEXCEPT
300320 return false ;
301321 }
302322
323+ // ~~~~~~~~~~~~~~~~~~
324+ log (logger::xreserve, chunk);
325+ // ~~~~~~~~~~~~~~~~~~
303326 // Same as allocate except logical does not change.
304327 return true ;
305328}
@@ -327,6 +350,9 @@ size_t map::allocate(size_t chunk) NOEXCEPT
327350 return storage::eof;
328351 }
329352
353+ // ~~~~~~~~~~~~~~~~~~
354+ log (logger::xallocate, chunk);
355+ // ~~~~~~~~~~~~~~~~~~
330356 std::swap (logical_, end);
331357 return end;
332358}
@@ -360,6 +386,9 @@ memory_ptr map::set(size_t offset, size_t size, uint8_t backfill) NOEXCEPT
360386 logical_ = end;
361387 }
362388
389+ // ~~~~~~~~~~~~~~~~~~
390+ log (logger::xset, size);
391+ // ~~~~~~~~~~~~~~~~~~
363392 return get (offset);
364393}
365394
@@ -488,6 +517,9 @@ bool map::flush_() NOEXCEPT
488517 if (!success)
489518 set_first_code (error::fsync_failure);
490519
520+ // ~~~~~~~~~~~~~~~~~~
521+ log (logger::xflush);
522+ // ~~~~~~~~~~~~~~~~~~
491523 return success;
492524}
493525
@@ -516,6 +548,10 @@ bool map::unmap_() NOEXCEPT
516548 loaded_ = false ;
517549 capacity_ = zero;
518550 memory_map_ = {};
551+
552+ // ~~~~~~~~~~~~~~~~~~
553+ log (logger::xunmap);
554+ // ~~~~~~~~~~~~~~~~~~
519555 return success;
520556}
521557
@@ -533,6 +569,9 @@ bool map::map_() NOEXCEPT
533569 memory_map_ = pointer_cast<uint8_t >(::mmap (nullptr , size,
534570 PROT_READ | PROT_WRITE, MAP_SHARED, opened_, 0 ));
535571
572+ // ~~~~~~~~~~~~~~~~~~
573+ log (logger::xmap);
574+ // ~~~~~~~~~~~~~~~~~~
536575 return finalize_ (size);
537576}
538577
@@ -578,6 +617,9 @@ bool map::remap_(size_t size) NOEXCEPT
578617 PROT_READ | PROT_WRITE, MAP_SHARED, opened_, 0 ));
579618#endif
580619
620+ // ~~~~~~~~~~~~~~~~~~
621+ log (logger::xremap);
622+ // ~~~~~~~~~~~~~~~~~~
581623 return finalize_ (size);
582624}
583625
0 commit comments