Howard Chu
7f0771a3ed
Merge mdb_stata into mdb_stat
2012-10-16 15:37:29 -07:00
Howard Chu
65d40eb5d2
Make sure increases of mapsize are persisted
2012-10-16 14:53:25 -07:00
Hallvard Furuseth
94965307c8
ITS#7377 Errorcheck Windows calls and thread keys.
2012-10-15 17:04:48 +02:00
Hallvard Furuseth
88b7bb4639
Explicitly unlock the MDB lockfile on Windows.
2012-10-15 17:04:43 +02:00
Hallvard Furuseth
e9d87866c4
mdb_env_open(): Keep mdb_env_set_flags() flags.
2012-10-15 17:04:11 +02:00
Hallvard Furuseth
092f9a5c66
More for mdb_env_copy().
...
Fix #define _GNU_SOURCE = 1 to match any command line -D_GNU_SOURCE.
.gitignore += mdb_copy.
2012-10-15 17:03:46 +02:00
Hallvard Furuseth
462d9dfd10
Fix last commit.
...
Add flag MDB_ENV_ACTIVE instead of using the state of me_lfd.
Require MDB_RDONLY for MDB_ROFS. Swap reader/writer mutex lock.
2012-10-15 17:03:33 +02:00
Howard Chu
e40713b631
Support read access on read-only media
2012-10-13 04:05:00 -07:00
Howard Chu
f037dd2d19
Silence warning in prev commit
2012-10-11 16:47:56 -07:00
Howard Chu
ebb6859ea5
Add mdb_copy for backing up a DB environment
2012-10-11 12:24:01 -07:00
Hallvard Furuseth
756ce8e10c
Tweak MDB restrictions
2012-10-03 21:13:21 +02:00
Hallvard Furuseth
a3f33dd20e
Fix mdb_open() off-by-one error in maxdbs check
2012-10-03 18:08:56 +02:00
Hallvard Furuseth
38fb8e6eb1
ITS#7377 Wrap fcntl F_SETLK in EINTR loop too.
...
This can happen even on local filesystems.
2012-10-03 18:06:29 +02:00
Hallvard Furuseth
ab3fea51dc
ITS#7377 Catch ftruncate() error
2012-10-03 18:06:29 +02:00
Hallvard Furuseth
2b960613e0
ITS#7377 Document caveats/troubeshooting.
2012-10-03 18:04:07 +02:00
Howard Chu
7333b6bdc9
Fix prev commit
...
It only worked if the freelist was already non-empty
2012-09-30 10:01:57 -07:00
Howard Chu
cd228b4722
Fix mdb_drop
...
if it was the only operation in a txn, it would be ignored.
2012-09-30 07:49:30 -07:00
Howard Chu
0c4c6fe72a
ITS#7385, check further for bad splits
...
More for 48ef27b6f5
Our definition of "large" data item needs to be smaller to
handle more cases where a bad split is possible
2012-09-27 05:06:23 -07:00
Howard Chu
ba6c3281a1
Add MDB_GET_CURRENT
...
return whatever the cursor is currently pointing at
2012-09-19 06:15:09 -07:00
Howard Chu
d13ca0de4f
ITS#7394 ignore WRITEMAP if RDONLY
2012-09-18 12:36:54 -07:00
Howard Chu
0a359fb629
More for 48ef27b6f5
...
page_split with newindex > split_indx
2012-09-17 07:02:41 -07:00
Howard Chu
5ef56b437e
More for ab04c50a32
...
Use explicit MDB_RDONLY flag
2012-09-17 07:01:28 -07:00
Hallvard Furuseth
c67ea9c060
ITS#7377 Catch MDB user errors.
2012-09-17 15:42:15 +02:00
Hallvard Furuseth
c0f3d9b9a8
ITS#7377 Catch MDB setup errors and clean up.
2012-09-17 15:42:15 +02:00
Hallvard Furuseth
fe1b3794de
ITS#7364 Limit mdb lock upgrade before sem_unlink.
...
Do not try shared lock when closing or after error. Track file lock
state to decide. Change meaning of *excl to reflect file lock state.
2012-09-17 15:42:15 +02:00
Hallvard Furuseth
c760e536ec
ITS#7364 Always sem_unlink() in mdb_env_open().
...
Drop the sem_unlink() error checks, which could prevent the 2nd
unlink. Instead use O_EXCL in sem_open().
This makes "open+close the database" the API for trying to clean
away the old semaphores, if they were left behind by a previous run.
2012-09-17 15:42:15 +02:00
Hallvard Furuseth
31be24896b
ITS#7377 Wrap sem_wait & file locks in EINTR loops
2012-09-17 15:42:14 +02:00
Hallvard Furuseth
a35f9b2a53
Remove mdb data races. Use (txnid_t)-1 as "no ID".
...
Avoid race between numreaders++ and reading numreaders at cleanup. Make
the un-mutexed reset of reader table entry, atomic: Reset mr_pid only.
Instead check mr_pid != 0 in mdb_page_alloc()'s scan for readers.
(txnid_t)-1 as "no ID"-mark avoids a check for mr_txnid != 0.
The scan can stop when seeing an old reader.
2012-09-17 15:42:14 +02:00
Hallvard Furuseth
38cc1e96b4
Save pid in MDB_env instead of repeating getpid().
...
An open MDB environment does not survive or catch fork(),
so repeating getpid() was pointless.
2012-09-17 15:42:14 +02:00
Hallvard Furuseth
20a216fcc9
MDB_WRITEMAP needs no DSYNC descriptor (me_mfd)
2012-09-17 15:42:14 +02:00
Hallvard Furuseth
588a84a5ae
ITS#7363 Preprocessor namespace cleanup.
...
Rename USE_POSIX_SEM to MDB_USE_POSIX_SEM.
Separate MDB_FDATASYNC from MDB_USE_POSIX_SEM.
2012-09-17 15:42:14 +02:00
Howard Chu
8bb10add24
More for ab04c50a32
...
Fix typos, error code ranges
2012-09-17 06:35:03 -07:00
Howard Chu
acbff5b1ea
Add mdb_cursor_renew()
...
Allow cursors on read-only txns to be reused with later txns.
2012-09-17 04:41:13 -07:00
Howard Chu
076b2b36a9
Shared lib should depend on pthread
2012-09-17 03:48:54 -07:00
Howard Chu
c542442c9f
Add MDB_SET_KEY cursor op
...
Overwrites the passed in key with the DB's key
2012-09-17 02:17:25 -07:00
Howard Chu
ab04c50a32
ITS#7383 More explicit error codes
2012-09-14 06:51:31 -07:00
Howard Chu
48ef27b6f5
ITS#7385 fix mdb_page_split (again)
...
More for d793594173 ITS#7229
2012-09-12 10:45:51 -07:00
Howard Chu
de77882898
Update comments, bump version
...
Note read-write vs read-only mmap tradeoffs.
2012-09-07 13:40:07 -07:00
Howard Chu
2e677bcb99
msync should default to fully synchronous
2012-09-06 11:17:25 -07:00
Howard Chu
1c733bdc4e
Add msync support for WRITEMAP option
2012-09-05 08:40:17 -07:00
Howard Chu
d8a89464cd
Add MDB_WRITEMAP to use a writable mmap
2012-09-05 08:39:46 -07:00
Howard Chu
14a08f877f
More for 57b5fbea49
...
Fix abort of child txn
2012-09-04 06:02:26 -07:00
Hallvard Furuseth
4608cd9552
libmdb: Fix P_INVALID when pgno_t != unsigned long
2012-08-29 06:43:35 +02:00
Hallvard Furuseth
3e3c785034
libmdb: Check sem_open() against SEM_FAILED.
2012-08-29 06:42:52 +02:00
Howard Chu
4bc18a5dd3
In mdb_audit, change assert to fprintf
2012-08-27 14:45:16 -07:00
Howard Chu
85ae5011e7
Fix mdb_audit()
...
due to a0993354a6
2012-08-26 11:05:45 -07:00
Ondrej Kuznik
bd92b570a8
ITS#7369 mdb_stat: cleanup in case something went wrong.
2012-08-24 05:33:46 -07:00
Howard Chu
a2d1b42e39
ITS#7369 abort txn before exiting
2012-08-24 05:23:55 -07:00
Howard Chu
916995236e
ITS#7364 also close the mutexes as needed
...
Otherwise a process that opens and closes an env more than once
will leak mutex handles. (WIN32/BSD)
2012-08-22 23:01:19 -07:00
Chris Mikkelson
46cf442700
ITS#7364 Remove POSIX semaphores when the last user closes the mdb environment.
2012-08-22 22:55:01 -07:00
Chris Mikkelson
9f983b7999
ITS#7363 Use posix semaphores on apple and bsd systems.
2012-08-22 14:09:08 -07:00
Howard Chu
f114fec545
Loop thru all DBs and show their stats
...
This is quick and dirty, should be integrated into mdb_stat.
2012-08-16 10:25:40 -07:00
Howard Chu
d53644f682
Minor cleanup
2012-08-02 16:03:10 -07:00
Howard Chu
d1120fbccc
Write optimization: avoid copying unused portions of pages.
2012-07-31 16:03:48 -07:00
Howard Chu
234cd9dfb5
Fix txn_commit error check
2012-07-26 08:42:41 -07:00
Howard Chu
23219ed32a
Fix 205bb17793
...
Ignore current cursor pos if it's out of bounds.
2012-07-26 07:22:52 -07:00
Howard Chu
d1a7fa267b
Update sub-DBs before updating free list
2012-07-26 06:25:31 -07:00
Howard Chu
d3990eb2f8
Append mode should also detect keys that are too small
2012-07-25 12:31:08 -07:00
Howard Chu
5da67968af
Fix root split check in mdb_page_split
2012-07-24 08:50:42 -07:00
Howard Chu
205bb17793
Skip unneeded calls to mdb_page_get in mdb_page_search
2012-07-23 04:23:49 -07:00
Howard Chu
ccc4d23e74
Leave extra space when creating a fake page
...
Minimizes the number of memcpy's if additional dups are stored.
2012-07-22 17:45:50 -07:00
Howard Chu
05ec98d119
Append mode still needs to detect duplicates
2012-07-22 17:45:50 -07:00
Howard Chu
14fb1f59c7
Append tweaks, page_split fixes
...
Append mode now does no key comparisons, input must be in sorted order.
page_split was not updating cursor parents correctly.
2012-07-21 06:19:09 -07:00
Howard Chu
7e9a6134fd
Make sure cursor's DB is init'd if STALE.
2012-07-17 04:04:52 -07:00
Howard Chu
a0993354a6
Don't use env-private copy of DB root nodes.
...
Just lookup the DB roots as needed. When many DBs are in use,
most of the copies won't be referenced in a given txn, and
there's a bad race condition in the copy routine.
2012-07-13 15:48:26 -07:00
Howard Chu
0ea56294f1
Fix darwin sem_open() names
...
Must begin with '/'
2012-07-13 14:14:36 -07:00
Howard Chu
1a9775dc5a
Fix ID -> MDB_ID due to 20baad4a20
2012-07-13 14:14:36 -07:00
Howard Chu
248fd1c7b8
Windows thread callback support
2012-07-13 14:14:36 -07:00
Howard Chu
e562f53e10
Drop me_toggle, unused
2012-07-08 18:43:45 -07:00
Howard Chu
179c44e7da
Revert "libmdb: Do not use the MDB_txbody.mtb_txnid field."
...
This reverts commit 4a0b30499c .
2012-07-08 18:18:12 -07:00
Howard Chu
433105f09b
Fix: avoid direct reference to meta pages
...
Relevant info should be copied during txn_begin only.
2012-07-06 17:38:03 -07:00
Howard Chu
df7ddb6bf4
Add MDB_NOMETASYNC env option.
...
Just a trial. This may not make sense if we decide to split the
meta pages into their own separate file, to allow meta traffic to
reside on a separate spindle.
2012-07-05 18:11:18 -07:00
Howard Chu
38560c2517
Tweak b802bcf704
...
Clarify prev commit, fix Doxygen comments broken by earlier changes
2012-07-05 17:43:29 -07:00
Howard Chu
b802bcf704
Partial revert of 13c663f666
...
Don't re-use free pages so soon; that leaves us vulnerable to
DB corruption if data syncs successfully but meta doesn't.
2012-07-05 16:52:13 -07:00
Howard Chu
a334257800
Tweak prev commit, use first unused slot
2012-06-02 05:26:31 -07:00
Howard Chu
4cabb24b83
Fix mdb_open, re-use closed dbi slots
2012-06-02 05:24:47 -07:00
Howard Chu
eeec509150
ITS#7266 fix rebalance for LEAF2 pages
2012-05-09 11:24:25 -07:00
Howard Chu
a540597dd6
More freelist tweaks, avoid referencing freed page
2012-05-08 22:17:17 -07:00
Howard Chu
fadf75a9cb
Further clarification of mdb_open()
2012-05-05 19:41:45 -07:00
Howard Chu
fbf9c23304
ITS#7251 fix Apple/Windows shared mutex naming
2012-04-18 15:59:54 -07:00
Hallvard Furuseth
20baad4a20
libmdb: midl.h namespace cleanup.
...
Prefix ID, NOID, ID2, IDL, ID2L with 'MDB_'.
Also drop bdb from file description.
2012-04-12 08:24:36 +02:00
Hallvard Furuseth
0a4aa88927
libmdb: Simplify pick_meta() from read_meta().
...
Put one call in #if MDB_DEBUG. Move DPRINTF(Using meta page #) there.
2012-04-12 08:15:33 +02:00
Hallvard Furuseth
dce5bb2fee
libmdb: Simplify mdb_default_cmp. No real change.
2012-04-12 08:15:33 +02:00
Hallvard Furuseth
729a8a2819
libmdb: signed meets unsigned warning cleanup
2012-04-12 08:15:33 +02:00
Hallvard Furuseth
99fa22c164
libmdb: MDB_FDATASYNC code cleanup.
...
Define MDB_FDATASYNC() instead of redefining fdatasync().
2012-04-12 08:15:33 +02:00
Hallvard Furuseth
592b3f8727
libmdb: Add C++ 'extern "C" {}' to *.h
2012-04-12 08:15:33 +02:00
Hallvard Furuseth
8e1ebbb4a8
libmdb: Don't open datafile twice when not needed.
...
If the database is opened with MDB_RDONLY or MDB_NOSYNC,
instead use the same file descriptor for me_mfd and me_fd.
Also factor out Windows/Unix error handling after open.
2012-04-12 08:15:33 +02:00
Hallvard Furuseth
6d0b424dbe
libmdb: Set close-on-exec flag on lockfile
2012-04-12 08:15:33 +02:00
Hallvard Furuseth
4a0b30499c
libmdb: Do not use the MDB_txbody.mtb_txnid field.
...
Get txn->mt_txnid from the meta page instead. Otherwise it
and txn->mt_toggle could become inconsistent, since read-only
txns fetched both from MDB_txbody without mutex proteciton.
2012-04-12 08:15:33 +02:00
Hallvard Furuseth
d1738c3e6b
Fix MDB_DEBUG in last ITS#7299 commit.
...
Make DPRINTF usable in if-else. Silence signed vs unsigned warning.
2012-04-12 07:34:13 +02:00
Howard Chu
d793594173
ITS#7229 more mdb_page_split tweaks
...
Also add mdb_debug/mdb_debug_start to toggle debug output at runtime
2012-04-10 14:05:05 -07:00
Howard Chu
a66f9e9292
ITS#7210 fix check for freelist changes
...
Was being fooled before because the newly malloc'd block had
the same address as the previously freed block.
2012-04-09 19:24:47 -07:00
Howard Chu
191d78948b
ITS#7238 doc clarification
2012-04-09 05:01:37 -07:00
Howard Chu
ae027b5214
ITS#7229 additional tweaks
...
Should probably compare nsize to pg_size/4 instead...
2012-04-09 04:45:32 -07:00
Howard Chu
de0cb27d70
ITS#7230 check and strip 0 length IDLs from freelist
2012-04-09 04:44:08 -07:00
Howard Chu
7ba25c488a
ITS#7229 more mdb_page_split fixes
2012-04-07 01:27:38 -07:00
Howard Chu
84acc0e803
ITS#7219 fixup keysize in previous commit
2012-04-04 05:44:53 -07:00
Howard Chu
0f10814494
ITS#7219 fix for odd-aligned keys in mdb_update_key()
2012-04-03 12:24:27 -07:00
Howard Chu
91bab157f6
ITS#7210 fix leak of overflow pages in freelist
2012-03-30 06:36:02 -07:00
Howard Chu
f53beeabee
Partial revert of prev commit
...
Sub-DBs were correct before
2012-03-28 10:44:18 -07:00
Howard Chu
ac0b18911b
Fix entry counts in cursor_put
...
when replacing an existing item
2012-03-28 10:34:35 -07:00
Howard Chu
0952cfdf84
Fix uninit'd xcursor index
2012-03-28 09:33:06 -07:00
Howard Chu
5c16c8842b
Add mfree utility to show the freelist
2012-03-28 09:20:18 -07:00
Howard Chu
04f488e7a0
ITS#7210 additional freelist fixes
...
Also allow read access to freelist in mdb_cursor_open
2012-03-28 09:18:00 -07:00
Howard Chu
b92af0760b
ITS#7210 partial fix
...
Allow pages from free list to be used when growing the free list.
(Yes, this is self-referential...)
2012-03-27 06:44:28 -07:00
Howard Chu
8a4981d8aa
ITS#7213 fix page_split with MDB_APPEND
...
don't skip the cursor adjust checks
2012-03-26 06:58:16 -07:00
Howard Chu
25e8e82c5f
Update overflow page count when freeing overflow page
2012-03-20 17:14:59 -07:00
Hallvard Furuseth
c7da506dd2
Fix MDB_txninfo.mt2 padding on Windows/Apple
2012-03-09 19:30:34 +01:00
Hallvard Furuseth
c7fe1f466e
Tweak mdb comment with conflicting spec of 'ID'
2012-03-09 19:25:44 +01:00
Hallvard Furuseth
5c182fbedf
Fix valgrind call after malloc failure in mdb.
...
Also line up the code logic a bit.
2012-03-09 19:22:31 +01:00
Hallvard Furuseth
d3b9939e71
Clean up MAP_FAILED handling in mdb.
...
Delay (MDB_txninfo*) cast to after comparing mmap() with MAP_FAILED.
Otherwise, if MAP_FAILED = (void*)-1 but MDB_txninfo requires stricter
alignment, the compiler could assume the result is never MAP_FAILED.
Also store NULL in env->(me_map, me_txns) after mmap failure.
2012-03-09 19:06:04 +01:00
Hallvard Furuseth
2baadabdff
ITS#7191 Align dirty MDB pages on the stack
2012-03-09 18:45:39 +01:00
Howard Chu
15f3e650da
ITS#7191 more alignment tweaks
...
Revealed when gcc optimization is enabled
2012-03-08 21:28:24 -08:00
Howard Chu
2ccf0d58b2
Fix typo in 7bc62c5128
2012-03-06 22:55:53 -08:00
Howard Chu
7bc62c5128
ITS#7190 fix merging of branch pages in deletes
2012-03-06 22:12:21 -08:00
Hallvard Furuseth
d50d57ed63
Fix libmdb comments
2012-03-03 09:58:05 +01:00
Hallvard Furuseth
e1b88d93ac
Remove development file libmdb/make.sh
2012-03-03 09:52:33 +01:00
Hallvard Furuseth
d8b4598085
ITS#7191 Fix mdb_xcursor_init1() unaligned access
2012-03-03 09:49:20 +01:00
Howard Chu
1b07b48c1a
ITS#7196 use IOV_MAX if it's defined and small
2012-03-02 17:26:49 -08:00
Howard Chu
b23bb7a0b1
ITS#7160 get BYTE_ORDER def for HPUX (and Solaris)
2012-02-21 11:52:01 -08:00
Howard Chu
953796759e
Fix typo in e8e57be421
2012-01-21 17:31:23 -08:00
Howard Chu
e8e57be421
Add valgrind support with -DUSE_VALGRIND
...
Track allocations and invalid accesses to freed tmp pages.
2012-01-21 08:22:59 -08:00
Howard Chu
3d6b924c25
txn_commit must abort txn before returning errors
...
Fix for failure when committing a txn that is a child of
some parent txn.
2012-01-21 08:20:43 -08:00
Howard Chu
1c8de1883c
ITS#7121 fix page splits when newindx == 0
2012-01-21 08:18:37 -08:00
Howard Chu
b9cbcb0588
ITS#7126 fix cursor tracking code
...
Don't compare cursors that aren't deep enough to match the
current cursor.
2012-01-21 08:12:56 -08:00
Howard Chu
713bf092b6
Happy New Year!
2012-01-21 08:09:16 -08:00
Howard Chu
a17f8e7326
ITS#7121 fix page splits when data+key size is too large
2012-01-21 08:09:16 -08:00
Kurt Zeilenga
81afbb2fca
Happy New Year!
2012-01-21 08:07:21 -08:00
Howard Chu
95a72ac82a
Add $(SOLIBS) macro for shared lib dependencies
2011-11-18 15:43:55 -08:00
Howard Chu
dd9c56f0fb
More s/DEBUG/MDB_DEBUG/
2011-11-15 11:23:00 -08:00
Howard Chu
575691ca8a
Alignment fixes for debug msgs
2011-11-14 16:21:59 -08:00
Howard Chu
51c1ba6818
s/DEBUG/MDB_DEBUG/
2011-11-14 14:40:43 -08:00
Howard Chu
29de655bc4
Add MDB_FDATASYNC to allow override to fsync if needed.
2011-11-11 12:49:11 -08:00
Howard Chu
291c0ce2db
Use <inttypes.h> instead of <stdint.h>
2011-11-11 10:59:27 -08:00
Howard Chu
8763c41e30
Fix size check
2011-11-10 12:41:34 -08:00
Howard Chu
04b522cc72
More Solaris warning cleanup
2011-11-09 15:32:37 -08:00
Howard Chu
68143e4532
More pgno alignment tweaks
2011-11-09 00:36:50 -08:00
Howard Chu
690792c170
Add dummy DKEY define
2011-11-08 20:05:29 -08:00
Howard Chu
cc7a89cd67
Add Solaris byte-order detection
2011-11-08 19:04:39 -08:00
Howard Chu
f0c9d77326
Fix mdb_drop return
2011-11-08 16:45:45 -08:00
Howard Chu
a103a64434
Android/ARM portability
...
2-byte alignment isn't good enough for subpages
2011-10-14 22:03:46 -07:00
Howard Chu
331bf92df5
Fix page_split with MDB_RESERVE
2011-10-06 18:53:07 -07:00
Howard Chu
19e4df476d
Fix subcursor initialization
2011-10-06 16:12:52 -07:00
Howard Chu
934a19553c
Don't use Append mode when splits are caused by sub-page inserts
...
Sub-pages need room to grow...
2011-10-03 18:02:17 -07:00
Howard Chu
ea0d07ffa3
Fix freelist bug on page split
...
NULL out env->pghead before writing it, so that its pages can't be used
to satisfy the write.
2011-10-03 12:40:53 -07:00
Howard Chu
85bfb3c1d1
Add rudimentary MDB_MULTIPLE support for puts
...
Only for DUPFIXED DBs. Still could do better.
2011-10-03 11:28:14 -07:00
Howard Chu
fa3c2945f5
Add MDB_APPEND to avoid splitting full pages
2011-10-02 21:27:07 -07:00
Howard Chu
163514e470
Fix 6e05ca17e9
...
Missed a MDB_RESERVE case
2011-10-02 19:52:12 -07:00
Howard Chu
28b8aaeb96
Add mdb_cursor_txn() and mdb_cursor_dbi() for querying the cursor
2011-10-02 19:28:33 -07:00
Howard Chu
6e05ca17e9
Add MDB_RESERVE mode
...
When putting a record, just make space for the data, don't copy it.
(Not compatible with MDB_DUPSORT, since the actual data is needed
to determine the insert location.)
2011-10-02 10:02:30 -07:00