Hallvard Furuseth
b9488faae4
Tweak ITS#8722 fix: Use XCURSOR_REFRESH()
...
This checks XCURSOR_INITED() and fixes the mn_flags check.
4 years ago
Hallvard Furuseth
5601781247
XCURSOR_REFRESH() fixups/cleanup
...
* Check NUMKEYS(), similar to f34b61f947
"ITS#8722 fix FIRST_DUP/LAST_DUP cursor bounds check".
* Move XCURSOR_INITED() into XCURSOR_REFRESH(). This adds a check in
mdb_cursor_put, below /* converted, write the original data first */.
* Factor mc_ki[] out to XCURSOR_REFRESH().
* Replace an mc_pg[] with mp which is equal (mdb_cursor_del0).
4 years ago
Howard Chu
2b397001a8
ITS#8728 fix MDB_VL32 freeing overflow page
4 years ago
Howard Chu
0e91bde589
ITS#8722 fix FIRST_DUP/LAST_DUP cursor bounds check
4 years ago
Howard Chu
27c8cee72d
Add mdb_cursor_is_db()
...
Return 1 if the cursor is pointing to a named DB record
4 years ago
Howard Chu
e4cf950264
mdb_dbi_open tweak
...
Always save the terminating NUL of the incoming DB name
Stop using the old mdb_open/mdb_close function names
.. should consider renaming mdb_stat/mdb_drop to mdb_dbi_... too.
4 years ago
Howard Chu
3585a1eb97
ITS#8704 Fix PREVMETA, rename to PREVSNAPSHOT
...
and enforce exclusive access to environment. Also fix txn_begin/pick_meta
to use correct meta page, and reset the flag after successful commit.
4 years ago
Hallvard Furuseth
16839f9893
Unref ovpages when deleting them
4 years ago
Hallvard Furuseth
73d75c6215
Drop always-false MDB_WRITEMAP test when IS_DIRTY_NW()
4 years ago
Howard Chu
d12ebb655a
ITS#8704 Add PREVMETA to envflags()
4 years ago
moneromooo-monero
0158f67c14
ITS#8704 add MDB_PREVMETA flag to mdb_env_open
...
used to open the previous meta page, in case the latest one
is corrupted
From https://github.com/LMDB/lmdb/pull/12
4 years ago
Hallvard Furuseth
b4ddec0bb4
Expose MDB_ENCRYPT flag
4 years ago
Hallvard Furuseth
6e1f74856d
Rename mdb_env_getflags->envflags, clarify options
...
The old name resembled existing function mdb_env_get_flags().
4 years ago
Hallvard Furuseth
8b31a4a62b
mdb_page_get() can ignore the toplevel spill list
...
...when we search dirty list before instead of after spill list.
4 years ago
Hallvard Furuseth
d6cf476169
Drop mdb_page_get() arg 'level', it's always NULL
4 years ago
Hallvard Furuseth
61b5b6270d
Doc fixes
4 years ago
Hallvard Furuseth
24f437df86
Less hungry mdb_pages_xkeep()
...
Skip pages that are dirty only in an ancestor txn
4 years ago
Hallvard Furuseth
972917449d
Keep MC_OVPG() == NULL when not MDB_REMAPPING()
...
Needed since 418ea8b94e14567ba2be9f9772f38f563a0d7e9c introduced
option MDB_REMAP_CHUNKS.
4 years ago
Howard Chu
499866aba7
ITS#8699 more for cursor_del ITS#8622
...
Set C_DEL flag on reinit'd subcursor
4 years ago
Howard Chu
81984ab228
Fix 418ea8b94e SEGV on spilled ovpg
...
Don't spill an ovpg that is referenced in a cursor
4 years ago
Hallvard Furuseth
adfa8f758a
Drop P_DIRTY, and MDB_WRITEMAP dirty/spill lists
...
mt_workid = mt_txnid when WRITEMAP, so dirty pages == "spilled"
pages and mdb_page_flush() does nothing.
4 years ago
Hallvard Furuseth
f1db84d332
mp_txnid = page state, avoids searching dirty_list
...
In nested txns, check mp_txnid to see which txn dirtied the page.
This change will also let us remove the P_DIRTY flag, and keep
some flags in (dirty page).mp_txnid if we should need it.
4 years ago
Hallvard Furuseth
c83434e178
Demo - move P_DIRTY to P_ADM_FLAGS, page_dirty()
...
...to have something substantial to test P_ADM_FLAGS with,
at least until we drop the P_DIRTY flag.
4 years ago
Hallvard Furuseth
0a99df54af
Divide page flags in P_ADM_FLAGS and the rest
...
P_ADM_FLAGS flags are tied to the page, even through page_loose-alloc.
OTOH mdb_page_split() should only duplicate the relevant flags.
This is just the code for the feature, P_ADM_FLAGS is 0 for now.
We'll need it for P_HIDESPILL later.
4 years ago
Hallvard Furuseth
3b55853fe0
Drop unnecessary searches in the spill lists
...
Check with IS_MUTABLE() if an MDB_page is spilled, instead of
searching spill lists. When unspilling, skip parent spill lists.
4 years ago
Hallvard Furuseth
34461da97b
Skip unnecessary mdb_page_get()s when spilling
...
Do not bring in pages merely to see if they should be skipped.
4 years ago
Hallvard Furuseth
6dd5a4d7f6
Protect freelist at end of mdb_freelist_save()
4 years ago
Hallvard Furuseth
12ee1a2d71
Use mdb_page_loose() more
4 years ago
Hallvard Furuseth
0e17ba43a8
Verify final loose_count in mdb_txn_commit()
...
Mismatch may indicate that pages leaked or got used twice
in the same snapshot.
4 years ago
Hallvard Furuseth
4b7e430303
mdb_page_touch: Always set MDB_TXN_ERROR on error
4 years ago
Hallvard Furuseth
9e3603eb9d
Fix mdb_enctest()
...
Accept a partial ovpage. I.e. decryption of the beginning
should not depend on the data at the end.
Make the key and IV less regular. (Divisor 67 has period>64.)
4 years ago
Hallvard Furuseth
214aff2359
Move misplaced OVERFLOW_NOTYET code
...
...so it would set pgno,txnid in the MDB_dovpage, not the actual ovpage
4 years ago
Hallvard Furuseth
74928f6a3b
Fix broken mdb_page_get(ovpage) optimization
4 years ago
Hallvard Furuseth
ca8e48d994
Fix last commit - sizeof(pgno_t) and C90 compat
4 years ago
Howard Chu
757378fc1d
Scaled back on overflow page work
...
Still keeping page header at top of overflow page for now
4 years ago
Howard Chu
f0f985fa93
checkpoint - moving overflow page headers
...
Moving headers outside of overflow page.
4 years ago
Howard Chu
c7ef535aa9
Data format change: add txnid to page header
4 years ago
Hallvard Furuseth
f16ce88dc8
Trivial encryption when $LMDB_FLAGS = "e"
4 years ago
Hallvard Furuseth
de161fe9d9
Get flags from $LMDB_FLAGS when MDB_TEST
...
Now we don't need to tweak the code of callers to test encryption.
4 years ago
Howard Chu
fafbd42cd2
Save/restore enc IV in page 0
4 years ago
Howard Chu
34c3cfe853
Plug some information leaks
...
Zero out decrypted pages before freeing them.
Do proper init on reused loose pages.
4 years ago
Howard Chu
525a2cce91
Add test code for remap / encryption
4 years ago
Howard Chu
b89f8fc9bc
Page-level encryption support
...
Currently encrypts all but the meta pages
Still needs to store/retrieve the initialization vector
4 years ago
Hallvard Furuseth
fbf35a163f
Rename mdb_env_close0() -> mdb_env_close_active()
...
Hopefully we'll remember now what goes in which function.
4 years ago
Howard Chu
ad7933ba0c
Optimization for mdb_rpage_get()
...
The caller already knows if it's using an overflow page, so
pass the number of expected pages in instead of having to
map the page first and check the count there.
4 years ago
Howard Chu
53799e51da
RPAGE_CACHE is now dynamically selectable
...
Behavior is controlled by MDB_REMAP_CHUNKS envflag
Remapping is always enabled in MDB_VL32
4 years ago
Howard Chu
ac047d1eff
Add new MDB_RPAGE_CACHE def
...
Separate 32/64 dependency from rpage buffer mechanism
4 years ago
Howard Chu
775be5e50f
Fix Android recognition
...
The official macro is __ANDROID__; ANDROID may or may not be defined.
8 years ago
Howard Chu
4d2154397a
ITS#8622 fix xcursor after cursor_del
...
Re-fix 6b1df0e4c7
from ITS#8406
8 years ago
Hallvard Furuseth
b5e5fcc31d
ITS#8582 Fill in MDB_LOCK_FORMAT
...
Attempt to stop liblmdb variants compiled with conflicting options
from using the lockfile at the same time and thus breaking it.
8 years ago