Commit Graph

573 Commits

Author SHA1 Message Date
Howard Chu
254b77e63d Cleanup prev commit
Loop on copyfd meta write, since pipes may return after partial write.
2013-07-30 12:47:12 -07:00
Howard Chu
eff35fcb2a ITS#7652 fix I/O error checks
partial revert of d6d2638acc and
26a25df5fc

The original code was already tested and working correctly.
2013-07-30 10:22:12 -07:00
Howard Chu
acf20f77f3 Tweak mdb_envinfo numreaders
Return the actual shared reader count when it exists, not
just the current process env's reader count.
2013-07-28 17:02:51 -07:00
Howard Chu
e8ba9dbd28 ITS#7615 use shorter names for semaphores
NetBSD can only handle up to 14 chars, we were using 21. Now
we encode to 15, and for NetBSD truncate the last char.
2013-07-26 10:19:54 -07:00
Howard Chu
de72c08660 Tweak reader_pid check
Check again after acquiring rmutex. Avoids potential issue with
a duplicate pid coming in between initial check and rmutex.
2013-07-19 09:57:33 -07:00
Howard Chu
b1dc72b6b5 Get pid lock outside of rmutex
Avoid holding rmutex for longer than necessary.
2013-07-19 09:55:10 -07:00
Howard Chu
5ca73f864f Tweak reader checks
Use mti_numreaders for loop limit, not me_maxreaders.
2013-07-18 15:24:09 -07:00
Howard Chu
a4bbe57f8b Add mdb_reader_check() 2013-07-18 10:47:29 -07:00
Howard Chu
4d7c9e5bca Split MDB_VERSION to MDB_DATA/MDB_LOCK VERSION 2013-07-18 09:11:09 -07:00
Howard Chu
68a0adc59f Tweak reader_list 2013-07-18 09:00:51 -07:00
Howard Chu
360d0492db Tweak mdb_stat(1)
Don't obtain reader txn before displaying reader table. Exit
after reader table if no other DB query options were given.
2013-07-18 08:33:24 -07:00
Howard Chu
49289f0d2e Add mdb_reader_list()
Dump the active slots in the reader table.
2013-07-18 07:45:12 -07:00
Howard Chu
fc137e39a3 Add mdb_dbi_flags()
Retrieve the flags from a DB handle.
2013-07-15 10:57:13 -07:00
Howard Chu
501eac2fc4 Fix child txn dirty_room counts in spill/unspill
Don't count pages twice if they're already accounted in an ancestor txn.
2013-07-14 16:53:04 -07:00
Howard Chu
2c3488aeeb More for stale sub-cursor flags
Same fix for cursor_first/last.
2013-07-14 08:28:26 -07:00
Howard Chu
56a41d87d4 Fix stale sub-cursor C_INIT flag
Whenever we enter cursor_set() the sub-cursor's flag must be
cleared. If the new cursor position has valid subdata it will
be initialized again, if not then the sub-cursor has nothing
to point to.
2013-07-14 08:20:18 -07:00
Howard Chu
8ae56c34d5 Tweak comments, defaults should be OK already 2013-07-12 13:55:18 -07:00
Howard Chu
fa7228962b Bump version to 0.9.7 2013-07-12 13:36:05 -07:00
Hallvard Furuseth
f04dc0ebd2 Also set/clear P_KEEP in parent txn's cursors 2013-07-12 13:17:04 -07:00
Howard Chu
e9ed4d75f7 Spill pages, take 3 2013-07-12 13:17:04 -07:00
Howard Chu
d7bc4baf63 Delay touching pages until cursor is positioned.
This avoids unnecessary rewrites of pages that do not change.
(Restructuring for upcoming mdb_page_spill work.)
2013-07-12 13:17:04 -07:00
Hallvard Furuseth
c09db5757d Simplify: Always set C_UNTRACK for tracked cursors.
TODO: Rename C_UNTRACK to C_TRACKED.  Omitted now for readability.
The current name is because it's lazy: not always set when tracked.
2013-07-12 13:17:04 -07:00
Hallvard Furuseth
6741f9c0ef Save freelist using proper mdb_cursor_put().
(Restructuring for upcoming mdb_page_spill work.)
mdb_freelist_save() can't just Get() the destination, since
mdb_page_spill() may have put the destination in the read-only map.

TODO: Can this new put() modify the freelist, which would break it? The
final iteration's put() can shorten the node, the rest uses MDB_CURRENT.

We could set P_KEEP on dirty freeDB leaves and ovpages, since they are
all about to be modified.  But the code in this commit must stay anyway,
if mdb should support dropping a 256G DB. I.e. too big for dirty_list.
2013-07-12 13:17:04 -07:00
Howard Chu
08373439a6 Move code out to mdb_page_dirty() 2013-07-12 13:17:04 -07:00
Howard Chu
87a7f06feb Factor out parent 2013-07-12 13:17:04 -07:00
Howard Chu
ba6dfe0bbb Fix env_read_header() on Windows
Commit d6d2638acc broke read
on zero-length files.
2013-07-12 12:55:08 -07:00
Hallvard Furuseth
3d46d5502a Do not follow uninited cursors' page pointers.
Nor uninited cursors' subcursors' page pointers.
2013-07-10 22:11:44 +02:00
Howard Chu
b711c07f34 Fix rebalance/cursor adjust
When collapsing root, must also move cursor index down,
not just the page pointer.

Also in mtest, break from NEXT loops on error, otherwise it just
prints the previous key/data again, which looks confusing.
2013-07-10 11:04:37 -07:00
Howard Chu
f81eb631ff Cursors: Clear C_EOF when clearing C_INITIALIZED 2013-07-10 08:49:29 -07:00
Howard Chu
64676da8d9 Fixup other cursors after delete op 2013-07-09 14:21:35 -07:00
Hallvard Furuseth
a77767013a ITS#7515 Reject conflicting page versions.
If mdb_page_touch() sees a page in txn's dirty_list, that
is the page version txn's cursors should have.  Fail if
the user may be seeing and depending on another version.
2013-07-07 17:14:38 +02:00
Hallvard Furuseth
be47ca7667 ITS#7515 Fix tracking of parent txn's cursors.
Restore mc_flags and xcursors, they were tracked but not merged.
Simplify: Track parent txn's original cursors after backing them
up, instead of tracking copies and merging them back at commit.
2013-07-07 17:13:27 +02:00
Hallvard Furuseth
9be6af0dcb Simplify MDB_cursor: Drop flags C_ALLOCD,C_SHADOW. 2013-07-07 17:13:27 +02:00
Hallvard Furuseth
3d1e709504 Silence more uninit warnings 2013-07-06 21:42:45 +02:00
Howard Chu
06a3ad08cd Silence uninit warning in prev commit 2013-07-02 02:23:49 -07:00
Howard Chu
589370d880 Tweaks for MDB_MULTIPLE
Terminate loop on intermediate failures, return count of written items,
document usage.
2013-07-02 02:19:17 -07:00
Howard Chu
fb674c1cf5 ITS#7635 simplify 9474c1a0b6 2013-07-01 14:53:29 -07:00
Howard Chu
9474c1a0b6 ITS#7635 fix read txn potential data race 2013-07-01 13:41:23 -07:00
Howard Chu
3347a02905 Fix uninit warnings, lseek usage 2013-06-30 07:40:02 -07:00
Hallvard Furuseth
7f67383552 Fix alloc/free issues.
Page leak, mdb_page_alloc(). On error, don't shorten me_pghead.
Memleak, mdb_ovpage_free(). Free page or keep it in dirty_list.
Bad MIDL, mdb_midl_need(). Fix midl[-1] (allocated size).
2013-06-26 18:02:52 +02:00
Hallvard Furuseth
12c558fe13 Factor out some vars, simplify. 2013-06-26 18:02:48 +02:00
Hallvard Furuseth
b7ce06f5c5 Makefile/user-macro comments. 2013-06-26 18:02:26 +02:00
Hallvard Furuseth
26a25df5fc Tweak I/O, fix last commit. 2013-06-26 18:02:17 +02:00
Hallvard Furuseth
d6d2638acc Improve MDB error handling, drop seek calls.
Catch I/O errors. Do nothing between OS call failure and ErrCode().
Do not use errno after non-OS-errors like write() >= 0, which could
give a failure return of success (errno 0) or some irrelevant error
code.  Drop seek calls, use pwrite/pread/Windows OVERLAPPED offset.
2013-06-22 23:15:10 +02:00
Hallvard Furuseth
a5701cf2fe Fix Windows I/O.
Don't put a 64-bit filesize in a 32-bit int before shifting
down.  Always pass &sizehi to SetFilePointer->maxsize, so
sizelo not is treated a signed distance.  Hide unused vars
when _WIN32.  Reinitialize OVERLAPPED before reuse.
2013-06-22 23:01:30 +02:00
Hallvard Furuseth
3d4ba01e8b Catch more MDB errors. DPRINTF in mdb_env_reset0. 2013-06-22 22:17:41 +02:00
Hallvard Furuseth
51ff20a4d6 Tweak MIDLs, catch errors.
Grow midls earlier in order to catch errors earlier.  Use
mdb_midl_need() instead of mdb_midl_grow(), then mdb_midl_xappend()
needs no error checks. Factor out mdb_midl_append_range().
2013-06-22 22:10:43 +02:00
Hallvard Furuseth
6b200e3beb Factor out MDB variables/expressions, cleanup.
mdb_page_malloc(): Take a txn arg instead of a cursor.
2013-06-22 12:30:04 +02:00
Hallvard Furuseth
9e6ef6c88f Rearrange MDB dirty page code.
Split out mdb_dpage_free(), mdb_page_flush() and clean up.
2013-06-22 11:56:04 +02:00
Hallvard Furuseth
c6f9323b3d Simplify mdb_page_alloc().
Merge if() branches. Restore retry=500 when MDB_PARANOID, for clarity.
2013-06-20 07:41:35 +02:00