Commit Graph

845 Commits

Author SHA1 Message Date
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
Howard Chu
76f0a02485 ITS#7664 better fix
For RDONLY, don't get lockfile until we know datafile exists.
Also, don't try to create a new datafile for me_mfd if someone
deleted it after we got me_fd.
2013-08-13 13:12:47 -07:00
Howard Chu
a77ffaaa5d Revert "ITS#7664 delete lockfile if there is no environment"
This reverts commit 8725838409.
2013-08-13 13:05:32 -07:00
Howard Chu
8725838409 ITS#7664 delete lockfile if there is no environment 2013-08-13 11:34:32 -07:00
Howard Chu
eaeeecc3b2 Fix uninit'd mem ref in mdb_page_split
Don't compare cursors beyond their depth. (detected by valgrind)
2013-08-12 12:43:42 -07:00
Howard Chu
6ecee1cbf9 Tweak NODUPDATA flag check
Should allow for the possibility of future flag combos.
2013-08-11 17:25:00 -07:00
Howard Chu
5a5d33ff33 Fix obscure MDB_MULTIPLE bug
If a key has a single existing value, and then a put (MDB_MULTIPLE)
is done where the first of the multiple values matches the existing
value, the put would return SUCCESS without writing any of the
values. Fixed to loop to the next value as intended.
2013-08-11 17:15:03 -07:00
Howard Chu
76f8b77e36 Point to mdb.c for docs on macros in Makefile 2013-08-10 16:19:44 -07:00
Hallvard Furuseth
9c49ef1d71 Avoid compiling debug args with C90 compilers.
Use double DPRINTF() parenthesis, so varargs macros are not needed.
Parenthesize MDB_DEBUG, in case the user defines it as foo || bar.
2013-08-10 13:50:10 +02:00
Hallvard Furuseth
76d31573a4 Refuse ops on bad txns 2013-08-10 13:23:30 +02:00