sfc-gh-tclinkenbeard
8de70432a6
Fix memory leaks in VectorRef
...
VectorRef<T> relies on T being trivially destructible, but this was not
yet enforced. By statically asserting that T is trivially destructible,
we avoid leaking memory by not calling the destructor for non-trivially
destructible types
2020-06-24 10:54:19 -07:00
Steve Atherton
ad68e44419
Change Redwood read concurrency lock to a reference because it must be able to live longer than the storage engine itself due to destruction order of actors if the storage engine is shut down while read operations are in progress.
2020-06-16 03:38:51 -07:00
A.J. Beamon
9888fa7a10
Use a reference for m_commitReadLock to avoid invalid destruction.
2020-06-15 14:46:16 -07:00
Steve Atherton
c3c7db6a9d
Added flowlock around reads done on the write path so that those reads cannot starve reads to support reads done by the storage server.
2020-06-09 17:00:21 -07:00
Steve Atherton
8fdb81b48d
Tweaked BTree test random parameter limits to avoid test runs which take too long.
2020-06-06 21:10:52 -07:00
Steve Atherton
a28b5f0a8b
Possible bug fix, flow locks should be taken after initializing BTree cursor in KVStoreRedwood read functions otherwise it might be possible for the BTree to be closed before the flow lock wait returns, depending on destruction order of some things.
2020-06-06 21:10:13 -07:00
Steve Atherton
949fbd9145
New low level BTree cursor class which is designed for short lifetimes, does less memory allocation, and can be used to perform getRange() operations with less CPU overhead.
2020-06-04 23:23:14 -07:00
Evan Tschannen
91f3b1c476
Merge pull request #3160 from satherton/feature-redwood
...
Update Redwood.
2020-05-20 15:04:01 -07:00
Steve Atherton
8c3cddc792
Metrics bug fix, page build count was being updated in an incorrect place.
2020-05-19 12:45:32 -07:00
Steve Atherton
53c4500694
Applied clang-format.
2020-05-19 04:11:39 -07:00
Steve Atherton
0d6f226938
Renamed some metrics to be clearer. Instead of "write" and "update" the terms are now "build" and "modify" which are less confusing and better represent what they mean in terms of DeltaTree operations.
2020-05-19 03:31:03 -07:00
Steve Atherton
7765168346
Redwood metrics now includes average item count, fill percentage, and record stored percentage for pages written or modified during the metrics interval.
2020-05-19 03:04:39 -07:00
Steve Atherton
f502236c31
Bug fix: BTree page header kvByte count was not being updated when pages are modified without rebuild.
2020-05-18 01:34:57 -07:00
Steve Atherton
ca8464881f
Applied clang-format.
2020-05-17 00:16:35 -07:00
Steve Atherton
d11fd75105
Bug fixes: No-hit page reads would count the access as a hit but would still move the page to the back of the eviction order. Page writes to uncached pages are no longer considered cache misses.
2020-05-17 00:16:10 -07:00
Steve Atherton
6347f76192
More Redwood metrics work. Reworked metrics standard output for unit tests.
2020-05-16 22:21:55 -07:00
Steve Atherton
e8626724f9
More refactor of Redwood metrics. Added per-level BTree stats. Added Pager total physical disk reads/writes, and uncacheable read hit/miss counts. Added logging to TraceEvents.
2020-05-16 02:51:57 -07:00
Steve Atherton
7cc8e281f2
Accidental override on non inherited function, which strangely only broke the Windows build.
2020-05-15 06:47:24 -07:00
Steve Atherton
0538edf7e7
Lazy / deferred subtree deletion had a few different names in the code, normalized everything to LazyClear. Removed accidental printfs.
2020-05-15 02:15:02 -07:00
Steve Atherton
32f4639168
Refactored page remap removal. The process is now called remap cleanup, does batches of remap entries in parallel, coalesces remaps of the same page ID to skip unnecessary writes, and has some knobs for controlling it. FIFOQueue now has peek() to support remap cleanup version lag limits. Added counters for remap cleanup and lazy subtree deletion. Refactored Redwood counters, normalized and grouped their names.
2020-05-15 02:10:51 -07:00
Steve Atherton
f51c1b352e
Applied clang-format.
2020-05-14 01:57:54 -07:00
tclinken
7d84e1b7af
Eliminate undefined behaviour
2020-05-13 19:59:34 -07:00
Steve Atherton
421a6581c1
Lazy delete cycles now run more often and not just when the btree is having mutations actively merged into it. Specifically, it is launched upon recovery, then stopped and relaunched after every commit. This will make better use of I/O in between calls to commit(). Also added knobs to control lazy delete cycle parallelism and work limits.
2020-05-13 02:27:03 -07:00
Steve Atherton
3aef977af4
Removed a duplicative mutation buffer lookup when merging mutation buffer into internal page.
2020-05-12 20:48:31 -07:00
Steve Atherton
43f9e4dfad
Implemented concurrent read limit in IKeyValueStore interface for Redwood. Added knobs for Redwood page size, concurrent read limit, and page fill factor. Changed commitSubtree() recursion back to use a vector and waitForAll() because it seems to be lower overhead than ActorCollection.
2020-05-10 16:13:22 -07:00
Steve Atherton
ffbed1d84c
Use actor collection for subtree recursions.
2020-05-10 11:44:07 -07:00
Steve Atherton
f306666e21
Added commonPrefixLength for StringRefs that takes a prefix skip length.
2020-05-10 04:24:11 -07:00
Steve Atherton
5bb5bd2fd5
Improvements to Redwood set benchmark to improve readability and limit commit sizes to a record count or byte limit.
2020-05-10 04:21:25 -07:00
Steve Atherton
2ed43ebdf7
Added a non-persistent, memory-only option to DWALPager.
2020-05-10 02:19:19 -07:00
Steve Atherton
e4006c4b63
Apply clang-format.
2020-05-09 02:21:26 -07:00
Evan Tschannen
cec63f2429
Merge pull request #3101 from satherton/feature-redwood
...
Redwood Update - Internal page incremental updates and efficient cleared/unchanged subtree skipping
2020-05-08 19:53:42 -07:00
Steve Atherton
163b291785
CommitSubtree() now skips recursing into adjacent subtrees that are uniformly cleared or unchanged very efficiently. This will be a huge reduction in CPU usage for random workloads.
2020-05-08 15:24:40 -07:00
Steve Atherton
1966dbb576
Checkpointing large refactor of how commitSubtree() works regarding internal pages such that now they can be incrementally modified and detecting changes involves far fewer comparison and staging of records.
2020-05-08 07:11:51 -07:00
Markus Pilman
92e672e2f0
Fixed compiler errors
2020-05-04 10:40:31 -07:00
Steve Atherton
dda0993d16
Apply clang-format to Redwood source.
2020-04-24 14:12:40 -07:00
Steve Atherton
ab46405bf4
Improvement to an edge case where writePages() would unexpectedly return only 1 page but not attempt to reuse the existing BTreePageID for it.
2020-04-23 04:23:05 -07:00
Steve Atherton
c80d28ac7e
Added several assertions and removed some checks for situations in commitSubtree() which should no longer be possible due to recent changes. This is mainly to test assumptions being made in the commitSubtree() refactor in progress. Set simulation to always choose Redwood, will revert for PR.
2020-04-21 04:12:39 -07:00
Steve Atherton
549ce29bdb
VersionDelta size options are now (0, 4, 6, 8), having removed the 2-byte option as it is not very useful.
2020-04-09 19:12:24 -07:00
Steve Atherton
6e5e7eea8d
Fixed a comment.
2020-04-09 17:14:25 -07:00
Steve Atherton
8de2bbb2dc
Merge branch 'master' of github.com:apple/foundationdb into feature-redwood
2020-04-09 09:39:49 -07:00
Steve Atherton
d4334256f1
Bug fix: BTree::writePages() was not accounting for the small amount of unpredictability in node overhead sizes which could lead to serializing a tree that doesn't fit into its destination page buffer. WritePages() now skips the prefix common to all records in the input set when calling deltaSize() to estimate resulting DeltaTree serialized sizes.
2020-04-08 20:18:41 -07:00
Steve Atherton
9e82788c28
Bug fix, BTree header wasn't large enough to hold the largest possible root page references.
2020-04-08 03:38:37 -07:00
Steve Atherton
d979200799
Bump format version.
2020-04-08 03:29:12 -07:00
Steve Atherton
31fd4cd35a
Improved RedwoodRecord encoding/decoding tests, which found bugs in the version field scheme. Simplified it to select between different fixed size native integer formats.
2020-04-08 03:25:04 -07:00
Steve Atherton
7a4817b8bb
Re-enable ART mutation buffer in Redwood.
2020-04-07 11:47:19 -07:00
Steve Atherton
d7ca823a8d
Refactored RedwoodRecordRef::Delta to fix at least one bug and stop using variable length integers with extension bits. Instead, two (recently available) header bits now indicate which of four struct definitions the Delta is using. The resulting code is a bit repetitive but also easier to read and 15% faster in the RedwoodRecord Delta speed test vs the old version.
2020-04-07 04:47:08 -07:00
Steve Atherton
ab6e8e9b09
Bug fix, expanded page size calculation when the small page limit is reached was not correct in a couple of ways.
2020-04-06 23:37:32 -07:00
Steve Atherton
a354d7a037
Merge branch 'master' of github.com:apple/foundationdb into feature-redwood
2020-04-06 20:29:12 -07:00
Steve Atherton
9bf0b5e71f
RedwoodRecord simplified to remove chunked key-value pair concept. Cursor and InternalCursor updated to be correct (but not optimal) for new record definition. DeltaTree::seek* refactored to support more seek types and with minor code duplication. Lots of debug output improvements. Refactored how bulk pages are written and introduced fill factor percentage (though since internal pages are not yet incrementally modified this is temporarily worse for those).
2020-04-06 20:27:30 -07:00
Steve Atherton
28c7899b76
Disable ART mutation buffer in Redwood until windows build issue is fixed.
2020-04-03 13:04:32 -07:00