770 Commits

Author SHA1 Message Date
Leonid Yuriev
b8ac1daae0 mdbx-tools: print git-tree while show version info. 2019-09-03 23:43:29 +03:00
Leonid Yuriev
6495e2f87c mdbx-windows: add cmake-generation of extra-import-library for ntdll.dll 2019-09-03 21:18:05 +03:00
Leonid Yuriev
967900e2e9 mdbx-cmake: refine/fix MDBX_BUILD_TARGET for Windows. 2019-09-03 19:13:26 +03:00
Leonid Yuriev
263837094e mdbx-build: refine CMake scripts, add build options.
Change-Id: Ie3db2f6439d5cc7ef3cd9ebb5b8e5d5d34f743dd
2019-09-03 02:56:01 +03:00
Leonid Yuriev
874418a301 mdbx: rework POSIX-lck and merge with Linux-lck.
Change-Id: Id8fbc81b9a2ad3a3a7499ecf9a012314e1f8062a
2019-09-03 02:43:14 +03:00
Leonid Yuriev
098f8a0d77 mdbx: add MDBX_READERS_LIMIT.
Change-Id: I2ee97004c084aeb6290c56b8f6415adc464a1bcb
2019-09-03 02:43:14 +03:00
Leonid Yuriev
6f39d8228d mdbx-cmake: add MDBX_ALLOY_MODE option.
Change-Id: I486f737fc24a48ecd3444859bee2132c9606aef5
2019-09-03 02:43:09 +03:00
Leonid Yuriev
5a87faf9af mdbx-build: start using CMake (incomplete; no properly installation for now). 2019-09-03 02:33:57 +03:00
Leonid Yuriev
f81374a9ce mdbx-build: amalgamation.
Change-Id: Ic32de6ee119df2bc12136b882f4f7cabaa1314a9
2019-09-03 02:30:55 +03:00
Leonid Yuriev
b42462c484 mdbx: minor/paranoid fix mdbx_strerror(). 2019-08-31 13:34:05 +03:00
Leonid Yuriev
113b29e68d mdbx: add LCK-tracking to resolve double-open issue with POSIX-filelocks.
Change-Id: I29377000e4dde3c43527302b55d0daec58b709f5
2019-08-31 00:55:15 +03:00
Leonid Yuriev
a66cefb198 mdbx-tools: use ANSI2OEM-versions of mdbx_strerror() for Windows.
Change-Id: I15500eec60b20e45c2881499a809a00fb4d661fa
2019-08-30 00:01:38 +03:00
Leonid Yuriev
368b48b41b mdbx-windows: add mdbx_strerror_ANSI2OEM() and mdbx_strerror_r_ANSI2OEM(). 2019-08-30 00:01:38 +03:00
Leonid Yuriev
10ab5dc032 mdbx: refine mdbx_strerror() and mdbx_strerror_r().
Change-Id: I47588cea9f281e71d0e6b81a86a50124e55bc3d4
2019-08-30 00:01:38 +03:00
Leonid Yuriev
51e7159f36 mdbx: dynamically discarding unused tail pages of DB file.
Change-Id: I1a0eee50cd27de26521e65c9f7ea51a527a0424e
2019-08-30 00:01:38 +03:00
Leonid Yuriev
327e5feb97 mdbx-windows: one more fix build for Windows/SDK pair.
Change-Id: Ifa480703b153625d0fa96a15d70bd0c452352cb6
2019-08-29 23:48:51 +03:00
Leonid Yuriev
648f991a5b mdbx-windows: fix build with modern SDK but for legacy Windows.
Change-Id: Ic443815838715be8cc6565d4d7735651af0b58cc
2019-08-29 23:21:22 +03:00
Leonid Yuriev
60d6685665 mdbx: fix typo inside mdbx_setup_debug().
Change-Id: I1df92033889572cefa6ff6a54ec2cff9d977fc12
2019-08-28 04:56:36 +03:00
Leonid Yuriev
25e20315ae mdbx: minor fix for MSVC2019.
Change-Id: I628049e7c3a653ec3b549c45450677ec5ab883a7
2019-08-28 04:53:03 +03:00
Leonid Yuriev
9ddfa4f9c8 mdbx-windows: use PrefetchVirtualMemory(). 2019-08-28 02:35:34 +03:00
Leonid Yuriev
fd0c92927a mdbx: refine usage of posix_fadvise()madvise()/posix_madvise()/F_RDADVISE. 2019-08-27 21:35:43 +03:00
Leonid Yuriev
8329f5b6a1 mdbx-load: fix backslash escaping (for compatibility with ITS#9068).
In fact MDBX not affected by this bug, since a very long time mdbx_dump was fixed to not produce a problematic sequence of backslash.

For compatibility with LMDB after http://www.openldap.org/devel/gitweb.cgi?p=openldap.git;a=commit;h=5c012bbe033f9bbb273078b07dded59f080d348d

Change-Id: I8ff8e003ae29504605402b937becd4fb37120408
2019-08-27 14:50:19 +03:00
Leonid Yuriev
b3a9b3ca1a mdbx: avoid refs to mdbx_runtime_flags from tools. 2019-08-27 00:29:15 +03:00
Leonid Yuriev
55ca2f0ed1 mdbx: makes handling NDEBUG option more convenient.
Change-Id: Icb8f2ddc66273d4ef4b17f1a27e6a34d2ffadd47
2019-08-26 22:57:14 +03:00
Leonid Yuriev
5eb3b77efe mdbx-posix: rework LCK seize/destroy. 2019-08-25 22:40:35 +03:00
Leonid Yuriev
2536dc47ac mdbx: refine features-macros for xBSD. 2019-08-25 16:04:33 +03:00
Leonid Yuriev
a03c5d1f3f mdbx-posix: destroys shared mutexes in the last process. 2019-08-25 14:18:06 +03:00
Leonid Yuriev
ed58af2512 mdbx-posix: minor fix mdbx_lck_destroy(). 2019-08-25 05:20:58 +03:00
Leonid Yuriev
137d652d77 mdbx: refine attribute-based macros. 2019-08-25 04:37:15 +03:00
Leonid Yuriev
7780b76cf0 mdbx: fix internal typo.
Change-Id: Ib31e8f02d816758a66b5e6b260714e25648f66c2
2019-08-25 04:36:30 +03:00
Leonid Yuriev
93f82f47bd mdbx: refine setup_debug(), add MDBX_DBG_LEGACY_MULTIOPEN.
Change-Id: I5d144f6fa27b8f5885fa0a0fbd11fe1d44bcc41c
2019-08-25 04:36:28 +03:00
Leonid Yuriev
33a4f31f92 mdbx: fix reclaiming_detent() for out-of-txn case.
Change-Id: I5275f4f3676b125e860f6a7c204a5f9cdc65dd5f
2019-08-23 17:46:33 +03:00
Leonid Yuriev
4ceaf842fe mdbx: add timed auto-sync feature.
Change-Id: Ia9b8529fda321d5f78b306f270d157a78f708916
2019-08-23 13:13:20 +03:00
Leonid Yuriev
68e0076ca3 mdbx: rework auto-sync by volume feature.
Change-Id: I0a34a65a974f28c6f0a950c11d55a43cfcfcab22
2019-08-23 12:05:09 +03:00
Leonid Yuriev
6f8238e1e9 mdbx: LCK-format version 3.
The LCK file is re-created at every opportunity when the process that
opens the database is the only one that works with it. Thus the change
of the format of the file LCK creates only minimal compatibility
problems.

Applications using different versions of _libmdbx_ will be able to work
with one database alternately, but not at the same time. This appears to
be an acceptable inconvenience in exchange for new features.

Change-Id: I9414b3fffd53d5519c8172c57345b1eaf6e51c77
2019-08-23 03:38:11 +03:00
Leonid Yuriev
de88707946 mdbx: don't shrink DB less largest reader inside mdbx_env_set_geometry().
Change-Id: I42a5d3a08313fb9590a6730bc0dc06c7b4f16634
2019-08-23 02:34:54 +03:00
Leonid Yuriev
0c63859459 mdbx: minor refine copy_asis().
Change-Id: I5d6240a99cba7e16e39f6466a7e582a068ab746a
2019-08-23 02:34:54 +03:00
Leonid Yuriev
65fd8be9b5 mdbx: fix env_sync_ex() for out-of-txn case.
Change-Id: Ie19bbe1d467ce4fc83f8dfc1e367070f532ee335
2019-08-23 02:34:45 +03:00
Leonid Yuriev
9168f8c69d mdbx: fix NULL-deref bug (Coverity).
Change-Id: If48f1780d2887b6c2041effc6ca0f158eddb29c2
2019-08-21 02:07:02 +03:00
Leonid Yuriev
e04bfc05fa mdbx: rename MDBX_OSX_SPEED_INSTEADOF_DURABILITY option.
Change-Id: I1d0a05880507da0781ccd2bff5fa68610ad884a9
2019-08-20 15:04:52 +03:00
Leonid Yuriev
6f0a11f155 mdbx: merge branch 'osx-try'.
This resolves https://github.com/leo-yuriev/libmdbx/issues/49.

Change-Id: Ib20c3898e99ca229f10e7d41cda3989b8b4a832c
2019-08-20 03:18:31 +03:00
Leonid Yuriev
657d37c9e3 mdbx: add MDBX_OSX_SPEED_OR_DURABILITY build-time #define for MacOS. 2019-08-20 02:48:30 +03:00
Leonid Yuriev
ccbf3a2bcf mdbx: rework mdbx_filesync(). 2019-08-20 00:56:06 +03:00
Leonid Yuriev
261f697d8c mdbx: skip msync(MS_ASYNC) on Linux > 2.6.19.
Change-Id: Ic1f631ef856a09cf62353c2b0092b0341ecf4fa2
2019-08-19 21:31:23 +03:00
Leonid Yuriev
226cb3ac90 mdbx: use F_FULLFSYNC on MacOS. 2019-08-19 20:41:02 +03:00
Leonid Yuriev
91088af935 mdbx: initial OSX support. 2019-08-13 02:10:03 +03:00
Leonid Yuriev
7960f67ea6 mdbx-chk: "backed-pages > file-pages" isn't error in the non-exclusive or read-only modes. 2019-08-12 15:44:15 +03:00
Leonid Yuriev
bceace7a09 mdbx: clarify shrink/grow-related internals. 2019-08-12 15:44:15 +03:00
Leonid Yuriev
5244c1a9c2 mdbx-chk: "backed-pages less filesize" isn't an error on Windows.
Change-Id: Iea212a469225b0617221cdf292352eb1f896b4c6
2019-08-12 12:23:02 +03:00
Leonid Yuriev
cfaed9d761 mdbx-chk: don't use internal mdbx_filesize().
Change-Id: I539b92f345ba7884629b702b2568ca805466be3a
2019-08-12 11:40:58 +03:00
Leonid Yuriev
5b09105a6d mdbx-chk: check filesize/backed-pages/alloc-pages.
Change-Id: I231e461d81d3157441f67d2c28470283eb68920a
2019-08-12 02:55:53 +03:00
Leonid Yuriev
bc3d1a84cc mdbx-chk: use mdbx_env_stat2() and mdbx_env_stat2() to avoid races.
Change-Id: Ib956c19bec0b8bf9999cf1e97b8b630f119a0906
2019-08-12 02:55:53 +03:00
Leonid Yuriev
17407c9ecc mdbx: add mdbx_env_info2(txn) and mdbx_env_stat2(txn).
Change-Id: Ifd128185a084c9dc61da140eeeaaf4b6022d3537
2019-08-12 02:55:53 +03:00
Leonid Yuriev
d6a2f98ef5 mdbx: more env-signature checks.
Change-Id: I0155821e9b03731f755e43640d8dc9e5c12acf62
2019-08-11 22:54:06 +03:00
Leonid Yuriev
a6449f36f6 mdbx-chk: more for false-positive 'wrong idl entry' fix.
Change-Id: I66e42a98c8f4a5c58e12adb666984fed8a70bece
2019-08-11 21:41:01 +03:00
Leonid Yuriev
69f831af0b mdbx: refine lck-posix implementation. 2019-08-11 19:13:29 +03:00
Leonid Yuriev
036144eed4 mdbx-chk: fix false-positive 'wrong idl entry' error(s).
Исторически mdbx_env_info() получает информацию вне контекста
транзакции. Поэтому транзакция чтения, внутри которой проверяются записи
GC, может быть не последней. При этом в более новых транзакциях
последние страницы могут быть возвращены в пул нераспределенных с
уменьшением номера последней выделенной страницы. Тогда в проверяемом
снимке в записях GC могут быть номера страниц больше, чем возвращает
mdbx_env_info() в поле mi_last_pgno, что трактовалось в mdbx_chk как
ошибка.

Change-Id: I51ae102603e1eda77d6b6d511e2094410ab8c2c2
2019-08-11 16:49:15 +03:00
Leonid Yuriev
8917fb30bf mdbx: make lck-wait ops breakable for linux/posix.
Change-Id: Ieb113f3c01bceced99b122988f93331d5619c2be
2019-08-11 12:22:41 +03:00
Leonid Yuriev
bf0e0382fc mdbx: use O_DIRECT for db-copy.
Change-Id: Ib17fcdc2eba3382ed841a1e5e0a4f69f88c2491d
2019-08-11 01:14:52 +03:00
Leonid Yuriev
bdc77df921 mdbx: fix race-with-close for lck-posix.
Change-Id: Ie601ebbec8cc47d26935e12a57abe991aec1cb41
2019-08-11 00:07:21 +03:00
Leonid Yuriev
673f867e3c mdbx: minor refine Linux lck-implementation.
Change-Id: Ib95398f8d86eb94fc55b506066f78eda4a29f4a8
2019-08-10 23:25:17 +03:00
Leonid Yuriev
c6369e68a3 mdbx: draft support for non-Linux POSIX-platforms (FreeBSD, MacOS, etc).
Change-Id: Iaee2dc31b134fe92fc67508d011835a60f3723e6
2019-08-10 23:24:31 +03:00
Leonid Yuriev
ce64c5aa37 mdbx: use OFD (open file) locks on Linux.
Change-Id: Id9718da28d4e367b0ff10976d2afaaf3d18122fb
2019-08-10 12:53:16 +03:00
Leonid Yuriev
a008b0b16f mdbx: description of lck-implementation for Linux.
Change-Id: I8fe5f49a19e5cc61198ecd96dfe479d0e17c10a5
2019-08-09 21:36:02 +03:00
Leonid Yuriev
1798904cf4 mdbx: description of internal lck API.
Change-Id: Ic677ba62ca566409a44234a1c0d8b0b41158fe86
2019-08-09 21:34:19 +03:00
Leonid Yuriev
663f3f3c58 mdbx: conditionally use cacheflush() for linux < 2.6.11
Change-Id: Id34c67797e14f709f767bf1b687319cd2dfef874
2019-07-22 00:19:15 +03:00
Leonid Yuriev
a6bad26e1d mdbx: rename/clarify flush_noncoherent_cpu_writeback().
Change-Id: I05a5df8d2a283159f449fc1e68a14d0a1861a714
2019-07-21 22:52:21 +03:00
Leonid Yuriev
f39044124e mdbx: clarify/rework invalidate_mmap_noncoherent_cache() for MIPS.
Change-Id: I70c279c2ba67191c7cb93cd8875082eb9c8e58b7
2019-07-21 22:52:16 +03:00
Leonid Yuriev
0b8ac37450 mdbx: reduces number of getpid() calls for checking PID against fork().
PID check could be ommited:
 - on Linux when madvise(MADV_DONTFORK) is available. i.e. after the fork()
    mapped pages will not be available for child process.
 - in Windows where fork() not available.

Change-Id: I4dd6bcb209cfc816ae3ec43825ea913d2249663c
2019-07-16 11:52:10 +03:00
Leonid Yuriev
4adb1ab2d8 mdbx: portability - rename lck-posix.c to lck-linux.c
Change-Id: I0ecee2b1a5d8e664eb795e5f5df2fa2d3cb73c83
2019-07-15 00:29:46 +03:00
Leonid Yuriev
2544a621e7 mdbx: portability - support for non-_GNU_SOURCE mode.
Change-Id: I9988d0ea8a9ddc06c799c65c4b2728bd17ff77e7
2019-07-14 15:13:43 +03:00
Leonid Yuriev
41f00485fd mdbx: portability - allows operation without mremap().
Change-Id: I7fed42d51259e582e9dbc401c78f7f829a80f71c
2019-07-14 15:11:59 +03:00
Leonid Yuriev
97e4f66d16 mdbx: portability - support for musl libc.
Change-Id: Ida8a3bd9da896bc6c00bef931ddf3dce65bef8eb
2019-07-14 15:08:10 +03:00
Leonid Yuriev
cf7160bda2 mdbx: portability - don't include malloc.h on BSD.
Change-Id: I67f580c073bfe52fbd2e4ff599354e6d0f597e95
2019-07-14 15:08:02 +03:00
Leonid Yuriev
097b274aa4 mdbx: portability - use C11 aligned_alloc().
Change-Id: I61819614ce355c8a2597c9b26997458b3d16081c
2019-07-14 15:07:54 +03:00
Leonid Yuriev
8f7ea1844b mddx: portability - compatibility with BSD-style __assert().
Change-Id: Ic18f2de8a23597c62fab07041aeb62960e82c37a
2019-07-14 15:07:47 +03:00
Leonid Yuriev
b3286bad16 mdbx: portability - fix __dll_hidden/__hidden typo.
Change-Id: Iccd225d8c77eafdccc7f021809c26843974153e4
2019-07-14 15:07:16 +03:00
Leonid Yuriev
3ac2af61aa mdbx: cleanup msvc-compat feature test defs.
Change-Id: I2c61bcecedc32beb3b0d70180da9e52cb7e6c9eb
2019-07-13 12:07:14 +03:00
Leonid Yuriev
eefbb7f063 mdbx: remove extra prep_backlog_data() inside update_gc().
Change-Id: Ic6250159c5abe03ed0705c7a432c5eb5b17b790e
2019-07-09 15:58:48 +03:00
Leonid Yuriev
4ecf78163d mdbx: fix/refine mdbx_find_largest().
Change-Id: Ib40ca0014da18793be0bdae5133806304ad42819
2019-07-09 03:27:23 +03:00
Leonid Yuriev
53563e75bb mdbx: fix DB-shrinking race with copy-asis & readers.
Change-Id: I1e05616de03d814850a1c8ad20e83941b2d1c911
2019-07-09 00:41:04 +03:00
Leonid Yuriev
bd5078347b mdbx: refine backlog preparation inside update_gc().
Change-Id: Ib18842c2922afba794d6ab69337580bcea29bfe6
2019-07-09 00:41:04 +03:00
Leonid Yuriev
06f16464aa mdbx-test: adds more jitter while DB opening.
Change-Id: Ic0f03f4fbe064ea00f719baa11b28cc24aafcb5b
2019-07-07 21:21:54 +03:00
Leonid Yuriev
1f89c494ff mdbx: refines OFF_T_MAX if it is not defined.
Change-Id: Ic453140e01725493cad0c98e73244c747d5f490e
2019-07-07 20:04:39 +03:00
Leonid Yuriev
8606803344 mdbx: adds paranoid mvcc-checks into read transactions.
Change-Id: I7f0f05010306b02b3b1ab8478217de70ffd211a0
2019-07-07 19:51:06 +03:00
Leonid Yuriev
41de36e93d mdbx: avoids infinite copy_file_range-loop when file is unexpectedly truncated.
Change-Id: I5a542a49fa4ac9ced8ca60266a084d52d3618804
2019-07-07 18:42:14 +03:00
Leonid Yuriev
7e1e142104 mdbx-chk: fix/refine error handling for sub-DBs.
Change-Id: I42460793bbe47815add1b3f61f3746f671a749d9
2019-07-07 01:47:10 +03:00
Leonid Yuriev
e2f37908b9 mdbx: fix/refine error handling while DB-pages walking.
Change-Id: If910e96cc7c30577531aab24b5a9573e5fe9126d
2019-07-06 21:25:11 +03:00
Leonid Yuriev
40112ebd62 mdbx: engage copy_file_range() for env_copy_as_is.
Change-Id: I7ea17914d80500ffa70451b80920d726f0e9c2f8
2019-07-01 18:37:36 +03:00
Leonid Yuriev
6960c45e59 mdbx: avoids EFAULT "Bad address" while copy-as-is if DB is swapped-out from RAM.
Change-Id: I711efc1c54a04745bd561bc5e1db5e6f6d8b7115
2019-07-01 17:55:58 +03:00
Leonid Yuriev
2e60256978 mdbx: drop EPIPE/SIGPIPE handling (since pipes are disallowed).
Change-Id: I56d4539333edea93cc1a2c3606cf959c82b98b19
2019-07-01 16:39:18 +03:00
Leonid Yuriev
38110579ba mdbx: drops mdbx_write(), using mdbx_pwrite() instead of.
Change-Id: Iff3de2d5ef3fa2e92607d46b96d4526e464e593b
2019-07-01 16:39:18 +03:00
Leonid Yuriev
5b88fe819c mdbx: fix pwrite() for WRITE_MAX.
Change-Id: If4924d20c1e267c2d3a190c860b89fc2fda0d517
2019-06-24 02:14:50 +03:00
Leonid Yuriev
cf004dddbc mdbx: use single cursor instance inside mdbx_env_walk().
Change-Id: I72cade64468a42fd27ebb4955d71ecbbabe64987
2019-06-24 02:14:50 +03:00
Leonid Yuriev
728f98d3de mdbx-check: refine leaf-pages info (cosmetics).
Change-Id: I0fdb467f1c1d51bfcdcef5edfe99c8e9ad66037e
2019-06-23 14:26:11 +03:00
Leonid Yuriev
bbf8ef0a4b mdbx-chk: fix space-usage statistics info.
Change-Id: I0cbbbc481f2e6dc37b29f6603ec1ead43b5d1864
2019-06-23 14:07:13 +03:00
Leonid Yuriev
05cf301774 mdbx: bump version to v0.3.0
Change-Id: Ic09361eda834c75d4fdb37dcbe5e8edbf0317f9b
2019-06-22 22:23:25 +03:00
Leonid Yuriev
47beba1782 mdbx: more 'unlikely'.
Change-Id: I472e4a922590cd4680a48416611cfd894fa120db
2019-06-22 22:23:17 +03:00
Leonid Yuriev
e3f8dc5501 mdbx: rework RECLAIMING inside update_gc().
Change-Id: I9cf592476780bfdb346472baa12497d68a3d5aad
2019-06-22 22:23:17 +03:00
Leonid Yuriev
be0ec1d38d mdbx: fix GC corruption due deep recursive rebalance from update_gc().
Change-Id: I810250deb25cd625e737000282b434e3158ef8cc
2019-06-22 02:00:47 +03:00