Commit graph

752 commits

Author SHA1 Message Date
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
Salvador Ortiz
cfc13e2b48 ITS#7682 In mdb_env_copy retry open if O_DIRECT fails 2013-09-05 16:20:18 -07:00
Howard Chu
90c55178db More for 5f6fa8c042
Reset delete flag in cursor_put().
2013-09-05 06:02:07 -07:00
Claude Brisson
18a07eb7c2 ITS#7681 fix mdb_cursor_set behaviour for MDB_SET_RANGE 2013-09-05 05:57:03 -07:00
Howard Chu
5f6fa8c042 Remember if last cursor op was a delete
If so, don't advance cursor on next NEXT. Also, init xcursor
on the next GET_CURRENT.
2013-09-03 16:10:20 -07:00
Howard Chu
3d59ca3558 Add a changelog 2013-08-28 20:22:41 -07:00
Howard Chu
5c5300c604 Bump version to 0.9.8 2013-08-28 19:17:25 -07:00
Howard Chu
2e7130cab0 Allow mdb_env_set_mapsize() on an open environment
The caller is responsible for making sure no transactions are
active in this process before resizing. This is slightly lighter
weight than doing a full env_close/env_open cycle.
2013-08-28 19:12:59 -07:00
Howard Chu
2a28686e4f ITS#7672 fix mdb_dbi_flags
Use a txn instead of env argument. Only return persistent flags.
2013-08-27 06:28:30 -07:00
Hallvard Furuseth
4dd10d70a5 mdb_page_unspill(): Fix dirty_room in nested txn 2013-08-25 23:59:58 +02:00
Howard Chu
56c2a8d04a Another take on spill_pgs and deletes 2013-08-24 20:37:45 +01:00
Howard Chu
b917266ca1 Cleanup prev commit 2013-08-24 11:54:05 -07:00
Howard Chu
41bf5c906a Speedup deletion from spill_pgs 2013-08-24 19:51:47 +01:00
Howard Chu
6423c87749 ITS#7671 always return the key for a dup val 2013-08-23 07:36:07 -07:00
Howard Chu
e15a90c762 ITS#7670 Tweak cursor_del0
Always leave cursor pointing at "next" node, if any.
Find next sibling if we're already at end of current page.
2013-08-23 04:55:41 -07:00
Hallvard Furuseth
6616034eb9 mdb_page_spill(): Fix nested txn mt_dirty_room 2013-08-23 13:52:35 +02:00
Hallvard Furuseth
392be3a7c6 Simplify last commits 2013-08-23 13:52:35 +02:00
Howard Chu
45c4ed1805 Tweak prev commit
If somehow "need" is larger than the list size, don't
try to fake out the dirty list.
2013-08-22 21:29:53 -07:00
Howard Chu
7b1db13050 Less aggressive page_spill
spilling all possible pages is a waste because the majority will be
needed again. Just do 1/8th of the dirty list instead.
2013-08-22 18:51:48 -07:00
Howard Chu
c22a7d98ec Update caveats now that mdb_reader_check exists 2013-08-20 17:37:53 -07:00
Howard Chu
214e9ed07d Silence warnings 2013-08-14 09:57:25 -07:00
Hallvard Furuseth
82b27c09c9 Tweak ITS#7615 fix: Obey strict-aliasing rules.
Do not access a long long as an array of longs.
2013-08-14 15:21:59 +02:00