Commit Graph

707 Commits

Author SHA1 Message Date
Leo Yuriev
196e07ca58 ITS#7987 fix excessive space for single write txn 2014-12-05 21:07:55 +00:00
Hallvard Furuseth
f284c3232d Fix WIN32 -> _WIN32 2014-12-05 18:43:07 +01:00
Hallvard Furuseth
8704eff591 mdb_strerror: Silence warning @ Windows 2014-12-01 20:17:27 +01:00
Hallvard Furuseth
5bf495abdc Fix comments 2014-12-01 20:17:27 +01:00
Hallvard Furuseth
3aa7537adc Simplify recent changes a bit. 2014-12-01 20:17:27 +01:00
Hallvard Furuseth
17bf75b12e ITS#7961,#7987 Re-fix txn init.
More fallout from 4d02c741b1:
Don't modify another thread's write txn. Reinit me_txn0 fully.
2014-12-01 20:17:13 +01:00
Howard Chu
3ce002fd13 ITS#7959 fix prev commit
fstat returns -1, not an errno. Move code into its own function
for reuse.
2014-12-01 20:15:36 +01:00
Howard Chu
ce40f4f314 ITS#7961 fix txn init
More fallout from 4d02c741b1
2014-12-01 20:15:36 +01:00
Jean-Christophe DUBOIS
042e76685e ITS#7959 Check fstat return value
Signed-off-by: Jean-Christophe DUBOIS <jcd@tribudubois.net>
2014-12-01 20:15:36 +01:00
Leo Yuriev
c473091f8f ITS#7841 trivial cleanup
TRIVIA - lmdb: clean testdb-dir while "make test".
2014-12-01 20:15:36 +01:00
Howard Chu
98ed192949 ITS#7956 fix compact of empty env 2014-12-01 20:15:36 +01:00
Howard Chu
af99820ac8 ITS#7955, #7671 fix MDB_PREV_DUP 2014-12-01 20:15:36 +01:00
Howard Chu
0482f1898d ITS#7953 .gitignore *.lo 2014-12-01 20:15:35 +01:00
Howard Chu
9227f66673 ITS#7952 .gitignore mdb_dump/load 2014-12-01 20:15:35 +01:00
Howard Chu
20ad21dcc4 Don't use -fPIC for static lib 2014-12-01 20:15:35 +01:00
Howard Chu
df9da7c7be Must do dlist_free before releasing Wmutex 2014-12-01 20:15:35 +01:00
Howard Chu
9eede0b103 Free write mutex earlier in txn_reset0 2014-12-01 20:15:30 +01:00
Howard Chu
a7639a66a4 Android also only has memalign 2014-09-25 19:25:56 +01:00
Howard Chu
2f587ae081 new date 2014-09-20 07:24:32 +01:00
Howard Chu
62e4eeb7f7 ITS#7943 reinit txn flags
When reusing the main write txn
2014-09-19 01:45:43 +01:00
Howard Chu
891e662754 Plug leak in 4d02c741b1
Free writer txn on env_close
2014-09-18 01:22:02 +01:00
Howard Chu
674f52fdb4 Silence some clang warnings 2014-09-16 21:54:07 +01:00
Howard Chu
b9495245b4 Release 0.9.14 2014-09-15 19:48:32 +01:00
Quanah Gibson-Mount
5ee99f1125 Change retry to num times 60. Testing shows that on a known dataset, this has the same growth behavior as 2.4.39, while num times 20 resulted in significant growth. 2014-09-13 16:21:17 -05:00
Howard Chu
3646ba966c More for me_pgoldest
Leave it in main env struct, it doesn't need to be rolled back
with nested txns.
2014-09-09 19:44:23 +01:00
Howard Chu
29fd241fad Remember oldest reader txnid
Don't walk the readers table unless we really need to.
2014-09-09 19:40:05 +01:00
Howard Chu
4d02c741b1 Use a single write txn 2014-09-04 10:40:11 +01:00
Howard Chu
a054a194e8 ITS#7913 cleanup
we already checked for data == NULL, drop unnecessary if
2014-08-24 21:18:03 +01:00
Howard Chu
8fbbc71506 More for MIPS
Move CACHEFLUSH, avoid unnecessary if()
2014-08-21 17:40:20 -07:00
Howard Chu
4008e5e583 Partially revert ada2630699
Of course, MacOSX only has posix_memalign, and only in recent versions.
(Older versions could use valloc instead. That precludes ever changing
the LMDB pagesize to be different from the OS pagesize.) Not all that
crucial since it only affects mdb_env_copyfd1.
2014-08-17 20:44:53 -07:00
Hallvard Furuseth
cf4fe3b1fb Microoptimize loose pages 2014-08-17 01:50:32 +02:00
Hallvard Furuseth
1e7eeed28d Fix loose pages in mdb_freelist_save().
Leaving them in dirty_list caused breakage.  Instead merge them
into me_pghead at the end, when no more pages will be allocated.
2014-08-17 00:29:12 +02:00
Hallvard Furuseth
983f896aa7 Split out mdb_midl_xmerge, add MDB_IDL_ALLOCLEN 2014-08-16 11:34:44 +02:00
Howard Chu
992a96e171 ITS#7917 2014-08-11 11:01:20 -07:00
Howard Chu
322cd26a7b ITS#7917 fix mdb_dbi_open
Don't let dummy go out of scope
2014-08-11 11:00:11 -07:00
Howard Chu
ada2630699 Just use memalign, not posix_memalign
Everything has it. Solaris doesn't have posix_memalign.
2014-08-07 11:06:53 -07:00
Howard Chu
899b23f89d More for MIPS
Do a cacheflush after writing data pages, separate from meta's cacheflush
2014-08-04 11:40:24 -07:00
Howard Chu
ae0c9f484d ITS#7793 more for branch key update 2014-08-04 09:26:35 -07:00
Howard Chu
9cf1749f73 ITS#7793 doc update, again 2014-08-04 05:13:29 -07:00
Howard Chu
f21f15e5a0 ITS#7793 update branch key if needed 2014-08-04 04:57:53 -07:00
Howard Chu
9febe03eb5 More for MIPS
Paranoia for 3630066843 do the
cacheflush before setting mti_txnid.
2014-08-02 10:33:35 -07:00
Howard Chu
8498c6cba2 ITS#7913 mdb_cursor_get(*_DUP) cleanup
FIRST_DUP/LAST_DUP should succeed even on non-duplicate values
PREV_DUP should reset cursor's EOF flag.
2014-07-31 09:59:52 -07:00
Howard Chu
3630066843 Fix MIPS cache coherency on Linux
MIPS chips require manual control of on-chip caches. The cacheflush
syscall being used here only exists on MIPS Linux, other OSs will
require revisiting.
2014-07-26 18:16:02 -07:00
Howard Chu
d098184f61 Update date 2014-07-24 04:15:45 -07:00
Howard Chu
082bac1492 more for mdb_cursor_count
return MDB_NOTFOUND if the cursor is empty
2014-07-24 04:13:55 -07:00
Hallvard Furuseth
6cb1166635 Fix mdb_copy & co when MDB pagesize < OS pagesize 2014-07-24 04:04:24 -07:00
Howard Chu
1b08d8e503 ITS#7789 doc updates 2014-07-23 17:31:34 -07:00
Hallvard Furuseth
81b502e17e ITS#7789 Fix mdb_env_write_meta().
Always write mapsize = max(other metapage:mapsize, env:mapsize).
2014-07-23 17:25:42 -07:00
Howard Chu
7ef970436d Revert ITS#7789 commits, let's try this again.
Revert "ITS#7789 Fix resize vs MDB_NOMETASYNC, and a comment."
Revert "ITS#7789 more"
Revert "Revert "ITS#7789 update RESIZED errmsg text""
Revert "ITS#7789 update RESIZED errmsg text"
Revert "ITS#7789 persist mapsize changes"

This reverts commit 02285aca58.
This reverts commit 38e71c68de.
This reverts commit a5e4eecb1e.
This reverts commit d8e18551c3.
This reverts commit 5926e54bba.
2014-07-23 17:19:33 -07:00
Howard Chu
015d6b909a Fix env_open mode bits 2014-07-21 18:20:31 -07:00
Howard Chu
58e9c3add8 Fix mdb_cursor_count, reject uninit'd cursor 2014-07-21 08:33:59 -07:00
Howard Chu
fcb0768e7d Silence prototype warnings 2014-07-21 08:11:33 -07:00
Howard Chu
204637b18d Typo 2014-07-14 09:53:53 -07:00
Howard Chu
9049efe493 ITS#7896 fix for mdb_env_map
Don't pass non-NULL map address unless MDB_FIXEDMAP was used.
2014-07-14 09:53:36 -07:00
Howard Chu
886ee41d55 More for cursor EOF
Must also set in sub-cursor if deleting entire subDB
2014-07-09 15:03:54 -07:00
Howard Chu
7f038d0f15 Zero-init copy2 writebuf 2014-07-09 12:05:37 -07:00
Hallvard Furuseth
2825ad64c2 MDB_MAXKEYSIZE = 0 (dynamic value) when MDB_DEVEL 2014-07-09 20:18:08 +02:00
Hallvard Furuseth
b3dedde612 MDB_DEVEL doxygen fix 2014-07-09 20:17:13 +02:00
Hallvard Furuseth
02285aca58 ITS#7789 Fix resize vs MDB_NOMETASYNC, and a comment. 2014-07-09 20:16:33 +02:00
Howard Chu
bda6a60ad4 Windows fixes
Always set the filesize when opening for writes. Otherwise
can't use backups from mdb_copy.
2014-07-09 10:22:25 -07:00
Howard Chu
f3573a7383 Windows compat
We mainly use Win32 functions, so cannot just use C-runtime strerror
to return error messages. We have to use Win32-specific messages.
Unfortunately, we document the API to return C-runtime error codes,
so we can't just switch to all Win32 error codes.
2014-07-09 10:02:21 -07:00
Howard Chu
c4d0f90fce Fix loading of printable dump
Off-by-one in end check, would complain on valid input.
2014-07-09 09:16:03 -07:00
Howard Chu
38e71c68de ITS#7789 more
persist size changes from env_open() as well. This was the
original behavior.
2014-07-09 06:54:32 -07:00
Howard Chu
a5e4eecb1e Revert "ITS#7789 update RESIZED errmsg text"
This reverts commit d8e18551c3.
And partially reverts mapsize check. Only mapsize increases are relevant.
2014-07-09 06:19:06 -07:00
Howard Chu
d5371347e8 ITS#7825 more
Set read txn's dbiseqs to env's. Set child txn's dbiseqs to parent's.
Simplify DBI_CHANGED test, no need to check md_name. No-op dbi_close
of already closed handle.
2014-07-09 05:55:30 -07:00
Howard Chu
e0273020bd Updates #7789, #7825 2014-07-08 21:40:11 -07:00
Howard Chu
276aa55969 ITS#7825 more
only update dbiseq in dbi_open on write txns
2014-07-08 21:31:48 -07:00
Howard Chu
04851e442f ITS#7825 tweak prev commit
dbiseqs are only checked in write txns so omit from read txns
2014-07-08 21:22:07 -07:00
Howard Chu
0401f2deed ITS#7825 add MDB_BAD_DBI error code
Use DBI sequence numbers to detect DBIs being closed while in use.
2014-07-08 21:02:40 -07:00
Howard Chu
d8e18551c3 ITS#7789 update RESIZED errmsg text 2014-07-08 20:05:31 -07:00
Howard Chu
5926e54bba ITS#7789 persist mapsize changes
Write decreases too, not just increases. Check for any size change
that was not requested by this process.
2014-07-08 19:18:02 -07:00
Howard Chu
604256ceff Update LMDB version date/info 2014-07-08 16:37:28 -07:00
Howard Chu
2f04728471 ITS#7892 Fix MacOSX section name 2014-07-08 16:27:03 -07:00
Hallvard Furuseth
e1a676eb18 ITS#7713 cleanups
'#ifdef MDB_DEVEL' -> '#if MDB_DEVEL'
Fix comments, use actual PAGEBASE macro as originally intended.
Actually enable 64K pages. Set MDB_DATA_VERSION for testing only.
2014-07-08 15:01:18 -07:00
Hallvard Furuseth
6ed295b256 Fixes for loose pages
mdb_txn_commit(child): Give loose pages to parent.
Use a pointer beyond the page header instead of mp_next, so
we will not need to save/restore mp_pgno. This avoids a crash
caused by references to mp_pgno.
2014-07-08 14:39:57 -07:00
Howard Chu
b3e8c71dc7 Re-fix cursor EOF
Fix in 534dcc7212 was in wrong place
2014-07-08 11:54:24 -07:00
Howard Chu
68e6faad5c ITS#7713 handle 65536 byte page size
Fix mp_lower/mp_upper to exclude PAGEHDRSZ, which means our
max mp_upper is now pagesize - PAGEHDRSZ and won't overflow.
Currently must define MDB_DEVEL to use. Will be default for
LMDB 1.0/OpenLDAP 2.5
2014-07-07 17:31:15 -07:00
Howard Chu
534dcc7212 Set xcursor EOF after deleting last entry 2014-07-07 17:13:51 -07:00
Howard Chu
1ac5147fc1 Compacting copy doesn't need to snapshot metas 2014-07-06 17:47:25 -07:00
Howard Chu
61f7ec9bfa Windows fixes 2014-07-06 07:49:38 -07:00
Howard Chu
7d996d7f3d Play games with object file layout
Use gcc section attribute to keep less frequently used functions
away from main code.
2014-07-05 08:48:47 -07:00
Howard Chu
3e98addbe2 Rationalize mdb_env_copy2 API 2014-07-05 07:49:10 -07:00
Howard Chu
059b357d1a More tweaks to copyfd2
Make sure the writer thread starts and stops when we expect it to.
2014-07-03 14:26:14 -07:00
Howard Chu
03f0ecb001 More copyfd2 tweaks 2014-07-03 10:49:05 -07:00
Howard Chu
6043103c13 Fix envinfo to return fixed map address 2014-07-03 08:31:57 -07:00
Howard Chu
64191264b8 Windows compat 2014-07-03 07:49:22 -07:00
Howard Chu
8836b78e94 Fix subDB/ovpage copying 2014-07-02 11:44:06 -07:00
Howard Chu
af3c340758 Larger WBUF still better on large DB 2014-07-02 08:07:11 -07:00
Howard Chu
342cd72f25 Don't check LEAF2 pages for subnodes 2014-07-02 07:45:12 -07:00
Howard Chu
4009c9ae65 Add mdb_env_copy2()
And mdb_env_copyfd2(). Perform compaction on the copy. Trims out
freed pages and renumbers data pages in sequential order. This is
more CPU-intensive since it copies and modifies data pages.
2014-07-01 21:45:43 -07:00
Howard Chu
4d65cf1326 dump/load need mapsize etc. 2014-07-01 18:53:47 -07:00
Howard Chu
c5be1292ac All diagnostics should go to stderr 2014-07-01 05:15:44 -07:00
Howard Chu
ee599c5250 More gcov setup tweaks 2014-06-30 04:42:41 -07:00
Howard Chu
b09e46904c ITS#7886 fix mdb_copy write size
Don't try to write past end of file
2014-06-30 04:41:50 -07:00
Hallvard Furuseth
91d8ad1d3c Fix mdb_page_loose() vs. mdb_page_flush().
Do not overwrite loose pages' mp_pgno with mp_next.
mdb_page_flush() will use mp_pgno to rebuild dirty_list.
2014-06-28 13:38:03 +02:00
Howard Chu
c73f087750 Trap signals
Try to exit cleanly to avoid leaving stale readers. Not
a critical issue since mdb_reader_check can take care of
them, but still cleaner.
2014-06-27 10:53:11 -07:00
Howard Chu
277526d0f0 Setup for gcov/coverage testing 2014-06-26 05:19:47 -07:00
Howard Chu
a3e5539505 More for mdb_page_loose
Require that the page is dirty in the current txn,
not a parent txn.
2014-06-24 11:43:13 -07:00
Howard Chu
7fe85f5c82 More MDB -> LMDB renames 2014-06-24 04:42:44 -07:00
Howard Chu
9a4ef8406e Doc updates
Rename MDB -> LMDB
Integrate tool manpages
2014-06-24 04:16:19 -07:00
Howard Chu
ca47c2af1f ITS#7879 Windows build compatibility
Just use srand/rand, we don't care about the quality
of the random numbers, we just want some data.
2014-06-23 07:39:06 -07:00
Howard Chu
225bcae3e7 Flesh out mdb_cmp_cint for BigEndians 2014-06-23 07:36:38 -07:00
Howard Chu
aa89ca31b3 More for page_loosen
Don't try this when working on the FreeDB. Again,
too much hassle to unkink the recursions...
2014-06-22 16:39:14 -07:00
Howard Chu
d9423e13f8 More cleanup for page_merge, page_loosen
Only loosen src page if it's actually dirty.
Refactor page refs in page_merge.
2014-06-21 15:53:41 -07:00
Howard Chu
cf331ccb3d Silence ptr arithmetic warnings 2014-06-21 08:34:45 -07:00
Howard Chu
7cab7b95e2 Handle loose pages
Pages that were dirtied and deleted in the same txn should be
reused, instead of consuming freeDB pages.
2014-06-21 03:30:34 -07:00
Howard Chu
eebbd22c2f Fix mdb_page_merge
Similar to prev commit for mdb_node_move, the call of
mdb_page_serch_lowest() was leaving csrc unusable.
2014-06-20 23:40:44 -07:00
Howard Chu
79e8462d74 Fix mdb_node_move
Was leaving stale info in dst cursor
2014-06-20 17:56:04 -07:00
Howard Chu
0d013609fe Fix lineno count 2014-06-20 09:03:41 -07:00
Howard Chu
c05f45b7dd Fix multiple subDBs 2014-06-20 09:00:33 -07:00
Howard Chu
1a72b19e26 Fix unhex 2014-06-20 08:56:52 -07:00
Howard Chu
21b51cb746 Add mdb_load 2014-06-20 08:49:59 -07:00
Howard Chu
3e83b5b27b Add mdb_dump, update copyrights 2014-06-20 06:36:30 -07:00
Howard Chu
59d30a49c3 Bump to 0.9.13 2014-06-18 14:25:46 -07:00
Howard Chu
0c041e0977 Bump to 0.9.13 2014-06-18 14:07:15 -07:00
Hallvard Furuseth
b898cb642a ITS#7793 Re-fix MDB_CURRENT doc: Match current item 2014-06-18 23:01:14 +02:00
Hallvard Furuseth
01a75c5ab5 Fix MDB_GET_MULTIPLE/MDB_NEXT_MULTIPLE doc. 2014-06-18 23:01:14 +02:00
Howard Chu
39ed8bef04 Tweak ovpage search
Use num*20, chosen from empirical testing
2014-06-18 13:37:04 -07:00
Howard Chu
b4ecbd78d9 Fix some overwrite quirks
Was skipping the overwrite in some cases, if the cmp function
said the new and old already matched. We should always perform
the overwrite anyway, since the cmp function may only be doing
a prefix compare and the data may actually be different.
2014-06-18 12:29:13 -07:00
Howard Chu
dc7f2530dd Tweak prev patch for ovpage search 2014-06-18 09:07:39 -07:00
Howard Chu
2db55c7d99 Shorten search for ovpage space 2014-06-18 03:02:08 -07:00
Howard Chu
ecb71ee197 Bump version to 0.9.12 2014-06-13 10:46:27 -07:00
Howard Chu
17c09fa476 ITS#7875 fix #7681 regression
Due to commit 18a07eb7c2
2014-06-11 02:27:56 -07:00
Alexey Naumov
a93810cc3d Fix possible crash in DLL_THREAD_DETACH (explodes in .Net Framework) 2014-05-30 23:39:44 -07:00
Hallvard Furuseth
c0d64cf182 Comment ~MDB_APPEND, from earlier commit message. 2014-05-30 10:50:04 +02:00
Hallvard Furuseth
cb5656c726 Factor out mdb_cmp_clong() 2014-05-30 10:47:56 +02:00
Hallvard Furuseth
64a02e2279 More for big MDB_MAXKEYSIZE with MDB_DUPSORT.
With mdb_cursor_put(new key, data item big enough to need a sub-DB):
- Track cursors as when adding other nodes.  The "!do_sub" is now
  unneeded.  Before ITS#7861 it distinguished inserting key from data.
- Set MDB_TXN_ERROR if an empty sub-DB was created.  I.e. adding
  key:subDB succeeded, but inserting the data item failed.
2014-05-30 10:47:56 +02:00
Hallvard Furuseth
b37b2a651f Factor out MDB_TXN_ERROR 2014-05-30 09:06:08 +02:00
Hallvard Furuseth
ba8f59edf4 Simplify MDB_MULTIPLE 2014-05-30 09:06:08 +02:00
Hallvard Furuseth
ac158c7e1e ITS#7834 Fix MDB_MULTIPLE writing multiple keys.
Update the state before looping, so the key is not duplicated.
Broke in 4c8f57615c (mostly).
2014-05-30 09:06:08 +02:00
Hallvard Furuseth
d170df58fb ITS#7861 Re-fix MDB_db.md_entries.
mdb_cursor_del(): Fix md_entries with MDB_NODUPDATA.
mdb_cursor_put(): Check in xcursor whether an item got inserted. Count
data instead of keys after 13d6d59c51.
2014-05-30 09:06:08 +02:00
Hallvard Furuseth
92c01ffda8 ITS#7771 mdb_cursor_put doc: Cursor moves on error 2014-05-30 09:06:08 +02:00
Hallvard Furuseth
83676dc0f0 Document DBI issues, extend MDB_BAD_VALSIZE. 2014-05-30 09:06:08 +02:00
Hallvard Furuseth
2f33effcdc More ITS#7793 Check key->mv_size with MDB_CURRENT.
Since non-NULL key must be provided now.
2014-05-30 09:06:08 +02:00
Howard Chu
4b9aed26a5 Fix mdb_rebalance collapsing root
Shift the rest of the cursor stack as needed
2014-05-20 08:47:28 -07:00
Howard Chu
4844a72d01 ITS#7829 more for mdb_rebalance
Make sure to propagate rebalance results all the
way back to original caller's cursor.
2014-04-03 12:51:41 -07:00
Hallvard Furuseth
2764360a7b ITS#7829 Simplify last commit 2014-04-02 07:02:14 +02:00
Howard Chu
fca18d2586 ITS#7829 more for prev commit 2014-03-31 13:42:19 -07:00
Howard Chu
ac3acc1218 ITS#7829 fix rebalance
Fixup cursor state after node_move/page_merge
2014-03-28 13:51:59 -07:00
Howard Chu
13d6d59c51 ITS#7793/7828
Fix md_entries count, test for insert on md_entries increment
2014-03-26 08:59:43 -07:00
Howard Chu
6948f9dace More for ITS#7793/7828
Note MDB_CURRENT/MDB_DUPSORT requirement
2014-03-26 02:41:26 -07:00
Howard Chu
f537429b64 ITS#7828, #7793
Clarify MDB_CURRENT key usage, simplify freelist_save
2014-03-26 02:35:56 -07:00
Howard Chu
9026894e05 Revert "ITS#7793 mdb_cursor_put(): Fix MDB_CURRENT."
This reverts commit 4e954f8ae8.
Caused ITS#7828.
2014-03-26 02:35:45 -07:00
Hallvard Furuseth
86d9675543 Revert "Update MDB_PANIC description" (thinko).
This reverts commit 6bd34d0534.
2014-03-23 13:06:03 +01:00
Hallvard Furuseth
6bd34d0534 Update MDB_PANIC description 2014-03-22 22:27:10 +01:00
Hallvard Furuseth
1519f4bc3d Tweak mdb_mid2l_insert() call from ITS#7775.
It does not return MDB error codes.
2014-03-22 22:27:10 +01:00
Hallvard Furuseth
2727e97de3 mtest: Accept an MDB_NOTFOUND case 2014-03-16 12:42:43 +01:00
Hallvard Furuseth
68e97b2184 Handle more errors. Invalidate txn if needed. 2014-03-16 12:42:43 +01:00
Hallvard Furuseth
937b5eff07 Don't use non-existent node info in branch/leaf2 2014-03-16 12:42:42 +01:00
Hallvard Furuseth
86f8b203f5 Move code out of mdb_cursor_del0() and mdb_del().
Prepares for the next commits.
2014-03-16 12:42:42 +01:00
Hallvard Furuseth
012d7b5de7 More checks for closed DBIs and invalidated txns.
Factor txn/DBI-checks out to TXN_DBI_EXIST().
mdb_audit(): Skip closed DBIs.
mdb_cursor_renew(), mdb_stat(): Check DBI and txn.
mdb_cursor_count(): Check txn.
mdb_dbi_flags(): Check DBI.
2014-03-16 12:42:42 +01:00
Hallvard Furuseth
3e7c1bd4e2 mdb_page_list(): Support & display all page types 2014-03-16 12:42:42 +01:00
Hallvard Furuseth
a22c31115f mdb_txn_renew0(): Fix un-mutexed me_flags update.
Replace env flag MDB_LIVE_READER with field me_live_reader.
2014-03-16 12:42:42 +01:00
Hallvard Furuseth
684bb867ce Doxygen fixes 2014-03-16 12:42:42 +01:00
Howard Chu
4ddf2ec831 Rename samples
They're meant to be read and studied, not run.
2014-03-16 03:55:03 -07:00
Howard Chu
797ff136a8 ITS#7815 more for page_split
This case didn't come up in testing. Needs finer grained test.
2014-03-05 20:40:12 -08:00
Howard Chu
0e7fba73b7 ITS#7815 fix mdb_page_split
Was leaving cursor pointed at wrong page if the newindx was
in the right sibling page, and the parent was also split.
2014-03-05 20:04:42 -08:00
Hallvard Furuseth
e2bdd44624 mtest*.c, sample-*.c: Add/note error checks. 2014-02-19 21:25:40 +01:00
Hallvard Furuseth
a604948993 mtest[46]: Use different DBs when different flags. 2014-02-19 21:25:40 +01:00
Hallvard Furuseth
4e954f8ae8 ITS#7793 mdb_cursor_put(): Fix MDB_CURRENT.
Ignore key, broken by 5bda3565a9
and some older code.  Document and clarify MDB_CURRENT usage.

Also affects non-MDB_CURRENT put() with empty data and a key
which matches by the mdb_set_compare function but not by memcmp.
2014-01-28 14:27:27 +01:00
Howard Chu
aa3463ec7c Bump version to 0.9.11 2014-01-15 09:09:48 -08:00
Howard Chu
ec97f49a65 Note changes for LMDB 0.9.11 2014-01-14 17:12:48 -08:00
Hallvard Furuseth
98f3bc88bf Revert "ITS#7772 Reduce spurious sub-page growth."
This reverts commit 75494c08b4,
which must await a fix to ITS#7771 (DUPSORT cursor tracking).
2014-01-13 20:46:08 +01:00
Howard Chu
3f241365d5 Make sure mapsize changes take effect on Windows. 2014-01-12 20:04:50 -08:00
Hallvard Furuseth
5bda3565a9 ITS#7775 Drop <assert.h>, drop/replace assert()s.
db_mid2l_insert(): Move assert to mdb.c.
mdb_cursor_set(): Previous assert cannot fail now.
mdb_cursor_put(): Check mc/key and return EINVAL.
mdb_cursor_dbi(): No error return, so just segfault if cursor==NULL.
2014-01-06 23:21:54 +01:00
Howard Chu
6fb561d33e ITS#7775 Cleanup mdb_node_del() 2014-01-06 23:21:44 +01:00
Hallvard Furuseth
88342f9661 ITS#7775 Add mdb_env_set_assert() 2014-01-06 23:17:38 +01:00
Hallvard Furuseth
e40dae1064 Add mdb_env_<set,get>_userctx() 2014-01-06 23:17:38 +01:00
Hallvard Furuseth
c99525f42a ITS#7377 Invalidate txn on page-allocation errors
This should likely be reverted when all callers handle these errors.
2014-01-06 23:17:37 +01:00
Hallvard Furuseth
123b6e3c3e Wrap __func__ in mdb_func_ 2014-01-05 16:37:26 +01:00
Hallvard Furuseth
21621cc741 Invalidate the txn on corruption/internal errors 2014-01-05 16:26:21 +01:00
Howard Chu
c48cdd7a16 ITS#7775 cleanup unnecessary assert()s 2014-01-03 12:40:28 -08:00
Hallvard Furuseth
1f191ba930 mdb_page_malloc(): Move VGMEMP_ALLOC before memset 2013-12-31 02:16:19 +01:00
Hallvard Furuseth
ce2a0d4016 ITS#7771 mdb_cursor_del0(): Fix xcursor tracking. 2013-12-29 15:58:21 +01:00
Hallvard Furuseth
5adc46d1d2 sprintf format: pid_t need not be an int. 2013-12-29 15:57:33 +01:00
Hallvard Furuseth
661dd2c66d Add mdb_dbg_pgno(): (sub)pagenum for debug output. 2013-12-29 15:09:51 +01:00
Hallvard Furuseth
75494c08b4 ITS#7772 Reduce spurious sub-page growth.
mdb_cursor_put(): Use free sub-page space added by a
previous put(existing DUPSORT item), if any.
Tweak NUMKEYS code to avoid a new signedness warning.
2013-12-29 15:09:05 +01:00
Hallvard Furuseth
46de4ab84c ITS#7665 Drop lmdb.h doc on non-overlapping flags.
It was inaccurate and misplaced. Verify it in mdb.c instead.
2013-12-29 14:54:17 +01:00
Hallvard Furuseth
353cc77cff ITS#7515 has been fixed. 2013-12-29 14:52:30 +01:00
Hallvard Furuseth
c91f38160c Drop UNLOCK_MUTEX_R() on mdb_reader_pid() error 2013-12-29 14:52:30 +01:00
Hallvard Furuseth
4c8f57615c Fix commit "Raise safe max MDB_MAXKEYSIZE."
I.e. d69d2ce230, it left out some changes.
2013-12-21 12:31:57 +01:00
Hallvard Furuseth
a2ed03642c Replace MDB_node.mn_offset[], to ease debugging. 2013-12-11 11:57:13 +01:00
Hallvard Furuseth
2ce9ffa003 Comment MDB_node, mdb_page_unspill, mdb_update_key 2013-12-11 11:57:13 +01:00
Hallvard Furuseth
7e453c9763 Fix mdb_reader_list() and its spec.
It and the MDB_msg_func can now return >= 0 for success.
Always return any MDB_msg_func() error result.
2013-12-11 11:57:13 +01:00
Hallvard Furuseth
a58fd16ae5 Support dynamic max MDB keysize. 2013-12-11 11:57:13 +01:00
Hallvard Furuseth
d69d2ce230 Raise safe max MDB_MAXKEYSIZE.
Use a sub-DB for DUPSORT item #1/#2 per key if needed: Not a sub-
page too big for a node, nor an overflow page (which not all DUPSORT
code checks for). Move "insert" code, to avoid non-loop goto upwards.

(This is the commit which needs the change to xdata.mv_size in
commit 9d6e4a9163 "page sizes".)
2013-12-11 11:57:13 +01:00
Hallvard Furuseth
734bc7e6ad Relax MDB_MAXKEYSIZE for existing data.
Handle keys stored by a liblmdb with a bigger MDB_MAXKEYSIZE.
mdb_get/mdb_del(absent key bigger than our MDB_MAXKEYSIZE)
now return MDB_NOTFOUND instead of MDB_BAD_VALSIZE.
2013-12-11 11:57:12 +01:00
Hallvard Furuseth
a8de10d148 ITS#7589 Fix me_nodemax and related node sizes.
Change me_nodemax to not count the mp_ptrs[] entry. That's mostly
how it was used. Compare node sizes ">" me_nodemax instead of ">=".
The ">=" was a workaround for confusing sizes with and without the
mp_ptrs[] entry, but broke for nodes with size (old me_nodemax-1).

Explicitly make me_nodemax even. An odd value could break the
comparisons. It was even anyway because MDB_MINKEYS == 2.
2013-12-11 11:57:12 +01:00
Hallvard Furuseth
6808abe770 ITS#7589 Fix delete(uneven-sized MDB_DUPFIXED data).
Do not give uneven sizes to the sub-page and the node it lives in.
2013-12-11 11:57:12 +01:00
Hallvard Furuseth
c0858e6d93 put(MDB_MULTIPLE): Skip existing item cleanly.
Don't set dkey.mv_size if mdb won't clear it before next iteration.
2013-12-11 11:57:12 +01:00
Hallvard Furuseth
fcb0d09598 Add EVEN(): Micro-optimize "up to multiple of 2". 2013-12-11 11:57:12 +01:00
Hallvard Furuseth
753356a38a Warning cleanup.
Drop unused computed/assigned values.
mdb_page_alloc(): Make "mop_len>0 implies mop!=NULL" provable.
2013-12-11 11:57:12 +01:00
Hallvard Furuseth
e1266bf331 Clean up mdb_copy.
Support MDB_NOSUBDIR. Catch more errors.  Write messages
to stderr, not stdout which the data too may be piped to.
2013-12-11 11:57:12 +01:00
Howard Chu
1ffb5e1cba Fix GET_BOTH_RANGE
On near match, return the matched data.
2013-12-04 18:42:49 -08:00
Howard Chu
b77689f975 ITS#7756 keysizes were wrong in mdb_update_key 2013-11-29 17:03:49 -08:00
Howard Chu
f39bceb800 Doc tweak
Measured perf cost of meminit was 7% worst case on an Intel Core2
system. YMMV.
2013-11-12 08:10:33 -08:00
Howard Chu
3e40d0c805 Bump to 0.9.10 2013-11-11 20:15:54 -08:00
Howard Chu
f6d8dc4e76 Windows/Win64/MSVC tweaks
Silence warnings, fix broken MinGW64 definitions, etc.
2013-11-11 20:08:26 -08:00
Howard Chu
eecbaa5942 Clarify WRITEMAP / NOMEMINIT 2013-11-11 16:35:17 -08:00
Howard Chu
509a197728 Change default mem init behavior
Init malloc'd memory by default, use #MDB_NOMEMINIT to disable.
Bump version to 0.9.10
2013-11-11 15:09:32 -08:00
Hallvard Furuseth
92f71f50f9 Add MDB_CLEANMEM option.
Initialize unused portions of DB pages, for security or to silence
checkers like Purify and Valgrind. Like BDB configure --enable-umrw.
2013-11-07 23:41:30 +01:00
Hallvard Furuseth
fc87d405f1 Fix MDB_MAXKEYSIZE doc: Account for MDB_DUPSORT.
A node may need room for [key, subpage with 2 items] = 3 keys.
2013-11-07 23:38:15 +01:00
Hallvard Furuseth
9d6e4a9163 ITS#7713 Handle bigger OS page sizes
Use DB page size = min(32k, OS pagesize).  Previous limit was 8k
(MDB_MINKEYS*MDB_PAGESIZE).

Handle DB pagesize < OS pagesize. That's an I/O pessimization,
but transactions remain atomic: Only writing the MDB_meta must
be atomic, and it fits in one OS page.

Don't truncate desired subpage size: Asssign it to a size_t
(mv_size), not an uint16_t (mp_upper).
2013-11-07 23:38:15 +01:00
Hallvard Furuseth
25d370cb2e mdb_cursor_put(): Factor out code. Kill a label. 2013-11-07 23:38:15 +01:00
Howard Chu
550bbe3788 Fix prev commit, cursor depth comparison 2013-11-07 09:37:48 -08:00
Howard Chu
4a1717708c Fix cursor_del0 cursor fixup
Skip cursors that aren't as deep as current cursor
2013-11-06 16:51:21 -08:00
Howard Chu
8c9a26c90d More for #7589 2013-11-04 20:00:55 -08:00
Howard Chu
34459e0585 ITS#7589 another mdb_page_split fix
Tweak split_indx check, go one slot further.
2013-10-31 17:31:15 -07:00
Howard Chu
e31983c723 ITS#7736 fix regression in ITS#7733 patch
In d8eccb353b
2013-10-31 16:01:49 -07:00
Howard Chu
d8eccb353b ITS#7733 check cursor index before cursor_del 2013-10-28 07:25:54 -07:00
David Wilson
742a078ea5 ITS#7734 Add MDB_NORDAHEAD to CHANGELESS. 2013-10-28 06:58:52 -07:00
Howard Chu
7449ca604c Bump to 0.9.9 2013-10-24 15:57:17 -07:00
Howard Chu
b86f08e9d6 Add mdb_env_get_fd()
Return the environment's filedescriptor. Useful when the caller
is doing their own locking.
2013-10-21 10:41:41 -07:00
Howard Chu
dddc7a385b Fix 01dfb2083d
USE_POSIX_SEM must define USE_HASH
2013-10-14 09:47:26 -07:00
Howard Chu
ab9b08f8af ITS#7725 add MDB_NORDAHEAD flag for env_open 2013-10-12 16:20:04 -07:00
Howard Chu
5a9ddfd289 ITS#7589 silence warnings 2013-10-12 13:40:28 -07:00
Howard Chu
2211fb15db ITS#7589 Fix typo in prev commit 2013-10-12 13:31:09 -07:00
Howard Chu
400e21370b ITS#7589 Cleanup unneeded vars in prev patch 2013-10-12 13:20:02 -07:00
Howard Chu
310b656a2e ITS#7589 avoid wasting space in mdb_page_split
Also, check the split point on branch pages as well as leaf pages.
2013-10-12 09:34:40 -07:00
Howard Chu
01dfb2083d Add MDB_USE_HASH
There may be other uses for it besides semaphore names.
2013-10-12 09:28:37 -07:00
Howard Chu
940f5cb373 ITS#7722 fix page_merge for collapsing root
Other cursors being fixed up are not necessarily height 1.
2013-10-09 02:24:45 -07:00
Howard Chu
bf0e97aa0e ITS#7718 invalidate cursor when DB gets emptied 2013-10-08 04:43:58 -07:00
Howard Chu
d327a36ad8 Fix mdb_env_set_mapsize()
Don't allow shrinking below minimum size for an already open env.
2013-10-04 02:55:34 -07:00
Howard Chu
2520247ba1 ITS#7715 always set filesize for WRITEMAP 2013-10-04 02:46:38 -07:00
Hallvard Furuseth
9f7ae8925f Add Caveat: Readers need write access. Whitespace. 2013-10-04 00:51:58 +02:00
Hallvard Furuseth
0f9b79e12c Maintain MDB_cursor.mc_top 2013-10-04 00:32:35 +02:00
Hallvard Furuseth
99ea7669a3 mdb_cursor_sibling(): Fix error result 2013-10-03 23:59:25 +02:00
Hallvard Furuseth
8f075595a1 mdb_node_add(): Plug page leak when MDB_PAGE_FULL.
Do not fail after mdb_page_new() succeeds.
2013-10-03 23:59:25 +02:00
Hallvard Furuseth
3a1d73daff Optimize code holding reader mutex 2013-10-03 23:59:24 +02:00
Hallvard Furuseth
3d67838a59 Set MDB_xcursor DB_DIRTY, clear md_name.
Both were unused and md_name was unmaintained -- except
mdb_cursor_touch(xcursor) would abuse md_name as a key to
touch MAIN_DBI if it could somehow get passed ! DB_DIRTY.
2013-10-03 23:59:24 +02:00
Hallvard Furuseth
07dc79a7c3 Set subDB DBI=parent DBI, fix MDB_DUPSORT delete.
xcursor DBIs were parent DBI+1 for debugging. Instead output
-(parent DBI).  Fixes a crash in mdb_cursor_del0()'s xcursor
tracking, it forgot to subtract 1 for C_SUB cursors.
2013-10-03 23:59:24 +02:00
Howard Chu
79eac42c0f s/MDB_NORDLOCK/MDB_NOLOCK/
Leave all lock management to the caller.
2013-10-03 10:26:44 -07:00
Howard Chu
a1685c3ef7 More doc for MDB_NORDLOCK 2013-10-01 23:36:57 -07:00
Howard Chu
f739940547 Add MDB_NORDLOCK to omit all reader table usage
Calling app wants to manage its own locking.
2013-10-01 13:16:38 -07:00
Hallvard Furuseth
e3f6c152c5 Drop unneeded code.
MDB_txn.mt_toggle: Use (mt_txnid & 1) instead.
Drop error checks which will be repeated.
mdb_cursor_set(): Turn assert into if/return to match the above.
mdb_cursor_del(): 'flags' are now used as bitflags.
2013-09-23 20:21:11 +02:00
Hallvard Furuseth
2980bd30f5 Clean up and simplify mdb_page_search().
Only named DBs can have DB_STALE, and they do not use MDB_PS_MODIFY.
Replace magic key values with flags.  Drop duplicated comments at
mdb_page_search_root() vs. mdb_page_search(), and rephrase.
2013-09-23 20:21:11 +02:00
Hallvard Furuseth
31cfca9316 Tweak MDB_DEBUG output 2013-09-23 20:20:42 +02:00
Hallvard Furuseth
7bdb5be0b5 Rename SWAP() to avoid conflict with sqlightning.
Happened since sqlightning #includes mdb.c, midl.c.
2013-09-23 20:20:05 +02:00
Hallvard Furuseth
52cb8b3417 mdb_page_unspill(): Rename local vars.
The names have caused bugs, "txn" was treated as
the current transaction.
2013-09-23 20:13:27 +02:00
Hallvard Furuseth
8e1d10e828 ITS#7515 Fix mdb_page_unspill() in nested txn.
Malloc a page in this txn, not in a parent.
2013-09-23 20:13:27 +02:00
Hallvard Furuseth
a3b3482854 ITS#7515 Fix mdb_txn_commit(nested txn with spills).
Catch malloc error.
Fix hunt for dirty vs spilled pages: Don't leave x at a deleted pageno.
Cleanup: Factor out variables, squash pages already marked for deletion.
2013-09-23 20:13:27 +02:00
Hallvard Furuseth
bc48a40621 ITS#7515 Fix mt_dirty_room in nested txns.
Fix description & code: Also ignore dirty pages hidden by
spilled pages, as they won't merge into our dirty_list.
Update it in mdb_page_flush() instead of mdb_page_spill().
2013-09-23 20:13:27 +02:00
Hallvard Furuseth
cfe262dce9 ITS#7515 mdb_pages_xkeep(): Careful about xcursors.
Don't prod sub-pages or pages referring to uninitialized xcursors.
2013-09-23 20:13:27 +02:00
Hallvard Furuseth
5b96d68faf mdb_pages_xkeep(): Reformat, use common flag mask 2013-09-23 20:13:27 +02:00
Hallvard Furuseth
5b21307f29 Update MDB documentation and comments. 2013-09-23 20:09:47 +02:00
Hallvard Furuseth
3335b25834 ITS#7682 mdb_env_copy(): Avoid Linux O_DIRECT bug.
Use fcntl() to set the flag.  Linux open(,O_DIRECT...) can create
the file even on failure, if the filesystem lacks O_DIRECT support.
2013-09-23 20:07:29 +02:00
Howard Chu
912e09fd04 ITS#7681 fix 18a07eb7c2
Set rc=0 when taking the SET_RANGE branch
2013-09-21 14:51:01 -07:00
Howard Chu
0144da6eab ITS#7701 fix mdb_rebalance
Must copy tmp cursor back to real cursor when merging into tmp cursor.
2013-09-21 14:37:11 -07:00
Howard Chu
0f842a2710 Release 0.9.8 2013-09-09 08:29:46 -07:00
Howard Chu
7e58cc0fd3 updates 2013-09-05 16:23:49 -07:00