Commit Graph

563 Commits

Author SHA1 Message Date
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
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
Hallvard Furuseth
9beea541e1 Replace EINVALs with generalized MDB_INCOMPATIBLE.
Also check xcursor instead of DUPSORT, it's slightly briefer.
2013-08-10 13:23:30 +02:00
John Hewson
ef899fe84e ITS#7656 fix install target 2013-08-10 04:13:24 -07:00
Salvador Ortiz
86551828ab ITS#7660 Add mdb_txn_env to API 2013-08-10 04:06:16 -07:00
Hallvard Furuseth
5645812f41 mdb_txn_commit(): Always commit if MDB_TXN_SPILLS.
Checking dirty_list was insufficient after a spill
with no named databases and no positioned cursors.
2013-08-10 12:29:45 +02:00
Salvador Ortiz
92eb220184 ITS#7661 mdb_dbi_flags(): Allow main DBI 2013-08-10 09:42:19 +02:00
Salvador Ortiz
335f0e4cee mdb_del must ignore data if db not opened with MDB_DUPSORT 2013-08-09 09:05:44 -07:00
Howard Chu
1ac3c8308f Add mdb_env_get_maxkeysize() 2013-08-09 04:51:33 -07:00
Hallvard Furuseth
1ecd86b14c Replace unpredictable EINVAL error returns.
Return EINVAL only for simple programmer errors.
2013-08-09 13:05:14 +02:00
Hallvard Furuseth
22c104c5d7 Re-fix reader-pid code 2013-08-09 12:54:42 +02:00
Hallvard Furuseth
38b11b1de1 mdb_cursorpages_mark: Mark current txn and no more.
Ignore parent txn cursors since it is the current txn's dirty_list
which will be flushed. But check the current txn also when clearing,
since cursors can have pages which are dirty in a parent.

Check !mc_xcursor instead of !MDB_DUPSORT.  Equivalent for valid
data, but a bit safer if the sub-DB flags are corrupt.
2013-08-08 19:57:52 +02:00
Hallvard Furuseth
2bd5d8102e Fix mdb_ovpage_free() vs. spill.
Ensure me_pghead has room before removing from spill/dirty list.
Don't return pages to me_pghead in nested txns, use mt_free_pgs.
2013-08-08 19:57:52 +02:00
Hallvard Furuseth
c3547e81f3 Fix page spilling when MDB_WRITEMAP.
mdb_page_spill(): Don't binary-search the unsorted dirty_list.
mdb_page_flush(): Don't overwrite unprocessed dirty_list items.
2013-08-08 19:57:51 +02:00
Hallvard Furuseth
ee5ba85565 Set MDB_TXN_ERROR when inconsistent txn state 2013-08-08 19:57:51 +02:00
Hallvard Furuseth
ffd2287b55 Factor out MDB_env. 2013-08-08 19:54:54 +02:00