Commit Graph

720 Commits

Author SHA1 Message Date
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