Howard Chu
797ff136a8
ITS#7815 more for page_split
...
This case didn't come up in testing. Needs finer grained test.
11 years ago
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.
11 years ago
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.
11 years ago
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).
11 years ago
Howard Chu
3f241365d5
Make sure mapsize changes take effect on Windows.
11 years ago
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.
11 years ago
Howard Chu
6fb561d33e
ITS#7775 Cleanup mdb_node_del()
11 years ago
Hallvard Furuseth
88342f9661
ITS#7775 Add mdb_env_set_assert()
11 years ago
Hallvard Furuseth
e40dae1064
Add mdb_env_<set,get>_userctx()
11 years ago
Hallvard Furuseth
c99525f42a
ITS#7377 Invalidate txn on page-allocation errors
...
This should likely be reverted when all callers handle these errors.
11 years ago
Hallvard Furuseth
123b6e3c3e
Wrap __func__ in mdb_func_
11 years ago
Hallvard Furuseth
21621cc741
Invalidate the txn on corruption/internal errors
11 years ago
Howard Chu
c48cdd7a16
ITS#7775 cleanup unnecessary assert()s
11 years ago
Hallvard Furuseth
1f191ba930
mdb_page_malloc(): Move VGMEMP_ALLOC before memset
11 years ago
Hallvard Furuseth
ce2a0d4016
ITS#7771 mdb_cursor_del0(): Fix xcursor tracking.
11 years ago
Hallvard Furuseth
5adc46d1d2
sprintf format: pid_t need not be an int.
11 years ago
Hallvard Furuseth
661dd2c66d
Add mdb_dbg_pgno(): (sub)pagenum for debug output.
11 years ago
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.
11 years ago
Hallvard Furuseth
46de4ab84c
ITS#7665 Drop lmdb.h doc on non-overlapping flags.
...
It was inaccurate and misplaced. Verify it in mdb.c instead.
11 years ago
Hallvard Furuseth
c91f38160c
Drop UNLOCK_MUTEX_R() on mdb_reader_pid() error
11 years ago
Hallvard Furuseth
4c8f57615c
Fix commit "Raise safe max MDB_MAXKEYSIZE."
...
I.e. d69d2ce230
, it left out some changes.
11 years ago
Hallvard Furuseth
a2ed03642c
Replace MDB_node.mn_offset[], to ease debugging.
11 years ago
Hallvard Furuseth
2ce9ffa003
Comment MDB_node, mdb_page_unspill, mdb_update_key
11 years ago
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.
11 years ago
Hallvard Furuseth
a58fd16ae5
Support dynamic max MDB keysize.
11 years ago
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".)
11 years ago
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.
11 years ago
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.
11 years ago
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.
11 years ago
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.
11 years ago
Hallvard Furuseth
fcb0d09598
Add EVEN(): Micro-optimize "up to multiple of 2".
11 years ago
Hallvard Furuseth
753356a38a
Warning cleanup.
...
Drop unused computed/assigned values.
mdb_page_alloc(): Make "mop_len>0 implies mop!=NULL" provable.
11 years ago
Howard Chu
1ffb5e1cba
Fix GET_BOTH_RANGE
...
On near match, return the matched data.
11 years ago
Howard Chu
b77689f975
ITS#7756 keysizes were wrong in mdb_update_key
11 years ago
Howard Chu
f6d8dc4e76
Windows/Win64/MSVC tweaks
...
Silence warnings, fix broken MinGW64 definitions, etc.
11 years ago
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
11 years ago
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.
11 years ago
Hallvard Furuseth
fc87d405f1
Fix MDB_MAXKEYSIZE doc: Account for MDB_DUPSORT.
...
A node may need room for [key, subpage with 2 items] = 3 keys.
11 years ago
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).
11 years ago
Hallvard Furuseth
25d370cb2e
mdb_cursor_put(): Factor out code. Kill a label.
11 years ago
Howard Chu
550bbe3788
Fix prev commit, cursor depth comparison
11 years ago
Howard Chu
4a1717708c
Fix cursor_del0 cursor fixup
...
Skip cursors that aren't as deep as current cursor
11 years ago
Howard Chu
8c9a26c90d
More for #7589
11 years ago
Howard Chu
34459e0585
ITS#7589 another mdb_page_split fix
...
Tweak split_indx check, go one slot further.
11 years ago
Howard Chu
e31983c723
ITS#7736 fix regression in ITS#7733 patch
...
In d8eccb353b
11 years ago
Howard Chu
d8eccb353b
ITS#7733 check cursor index before cursor_del
11 years ago
David Wilson
742a078ea5
ITS#7734 Add MDB_NORDAHEAD to CHANGELESS.
11 years ago
Howard Chu
b86f08e9d6
Add mdb_env_get_fd()
...
Return the environment's filedescriptor. Useful when the caller
is doing their own locking.
11 years ago
Howard Chu
dddc7a385b
Fix 01dfb2083d
...
USE_POSIX_SEM must define USE_HASH
11 years ago
Howard Chu
ab9b08f8af
ITS#7725 add MDB_NORDAHEAD flag for env_open
11 years ago