Commit graph

216 commits

Author SHA1 Message Date
Gregory Burd
b4f82a388d WIP-- Compiling, not yet tested/functional -- WIP
Changes required to iron out compiler errors, warnings, etc.  Code now
compiles with clang or gcc.
2013-04-06 11:05:41 -04:00
Gregory Burd
19268b7c77 WIP-- Not Yet Compiling or Functional -- WIP
* No longer expose WT_SESSION into Erlang at all as WT's model is to
maintain one WT_SESSION per-thread and we don't know anything about
threads in Erlang.

* async_nif worker threads don't pull both mutexes on every loop
when processing requests, only one

* async_nif provides a worker_id (int, 0 - MAX_WORKERS) within the
work block scope which we use to find our per-worker WT_SESSIONs

* async_nif maintained a number of globals which I'm moving into
the NIF's priv_data so that on upgrade/reload we have a fighting
chance to "Do the Right Thing(TM)".

* NIF Upgrades/Reloads started to plumb this in.

* Use a khash to manage the cache of URI->WT_CURSORs per WT_SESSION.

* Added start/stop positions into truncate call to allow for truncating
sub-ranges data.

* Lots of other details I'm sure I've forgotten and more left undone.
Search for "TODO:" or try to compile to see what's left, and then
there is a need for a lot more tests given all this new complexity.
2013-04-05 18:09:54 -04:00
Gregory Burd
163a5073cb An updated Emacs cmode leads to all sorts of whitespace fixes intermixed with
some merge changes.
2013-04-02 09:42:07 -04:00
Gregory Burd
9c379a21dd Ignore a bit more. 2013-04-02 09:39:05 -04:00
Gregory Burd
254891e776 Bumping reductions manually will not be supported in future releases of the
BEAM and has dubious value anyway.  Remove that and ignore queue depth for
now.
2013-04-02 09:37:49 -04:00
Gregory Burd
609676917d Rename function to match new API. 2013-04-02 09:36:34 -04:00
Gregory Burd
6aa51437cc Merge remote-tracking branch 'origin/master' into gsb-async-nifs2
Conflicts:
	c_src/wterl.c
	src/riak_kv_wterl_backend.erl
	src/wterl.erl
2013-04-02 09:33:41 -04:00
Gregory Burd
a75d60bf27 Add an RPATH to the extionsion shared libs so they can find objects in the priv/ directory at runtime 2013-04-01 16:17:18 -04:00
Gregory Burd
95a6f52a1d Whitespace 2013-04-01 14:00:06 -04:00
Gregory Burd
e3219ff2c5 Add linker flags so that shared libraries are found relative to either the wterl layout or the Riak layout. 2013-03-28 22:21:36 -04:00
Gregory Burd
1595ce3096 Automatically load all WiredTiger extension shared libraries found in the priv dir at load time. 2013-03-28 10:45:24 -04:00
Gregory Burd
3ef48e0ac0 Change from static linking to dynamic. Enable snappy and bzip2 compression. 2013-03-28 10:24:26 -04:00
Gregory Burd
46214daa06 Remove check for other module. 2013-03-28 10:23:56 -04:00
Gregory Burd
77e0dacdb5 Use a set of {Session, Cursor} pairs ("passes") for calls into WiredTiger
to avoid a) opening a large number of Sessions or Cursors and b) avoid
reusing a Session/Cursor pair in more than one thread.  Each operation,
except folds, use the Session/Cursor pair corresponding to the scheduler
id (roughly "core") they are running on.  Each vnode instance will have
(count(schedulers) + count(active folds)) Session/Cursor pairs in use so
be sure to set session_max large enough when opening the connection to
WiredTiger.  This method will cause problems with scheduler threads going
to "sleep" so be sure to run schedmon to wake them up.
2013-03-26 14:17:21 -04:00
Gregory Burd
78e667bc09 Depend on async_nif.h 2013-03-26 13:02:45 -04:00
Gregory Burd
9f4e08ca6e Queue and execute work from scheduler threads on other threads to prevent schedulers from sleeping. 2013-03-24 21:00:48 -04:00
Gregory Burd
85b84a5343 Folds need a separate cursor, but not a separate session, so use
the shared connection and session.
2013-03-21 21:39:47 -04:00
Gregory Burd
9834f54991 Cover a few more corner cases when encoding cache size and other
values to config strings.
2013-03-21 21:05:01 -04:00
Gregory Burd
9302def7cc Lower cache size guess from 1/3 to 1/4 of available memory. Finally correct lsm_bloom_new/oldest config. 2013-03-21 18:56:01 -04:00
Gregory Burd
0203b06a61 Cursor delete operation only requires cursor handle and key (no need for a value) 2013-03-21 18:44:13 -04:00
Gregory Burd
a844dc5846 Whitespace 2013-03-21 14:37:37 -04:00
Gregory Burd
e02eb8ef9f Don't log the cache size guess. 2013-03-21 14:37:24 -04:00
Gregory Burd
50d44ecedf Move LSM config to the table open options where they belong. 2013-03-21 14:35:53 -04:00
Gregory Burd
6225f9fde1 Share cursors managed stored in the module's ets table. 2013-03-21 14:34:54 -04:00
Gregory Burd
9ab363adfe Indention 2013-03-21 14:12:03 -04:00
Gregory Burd
b905cce833 Add lsm_bloom_{newest,oldest}=true to set of defaults. 2013-03-19 15:29:13 -04:00
Gregory Burd
f9fcf305ae Revert list change. 2013-03-19 14:51:22 -04:00
Gregory Burd
8ed1c4000e Additional LSM Tree config parameters. 2013-03-19 14:34:01 -04:00
Gregory Burd
33e66ec4e5 Minor change to array construction. 2013-03-19 14:33:38 -04:00
Gregory Burd
39fb4ff710 Pass config into connection:open() rather than ignoring it and do a
better job of integrating config options from the app environment as
well as config file while we're at it.
2013-03-18 15:32:03 -04:00
Gregory Burd
24527cf453 Break out connection and session startup into functions. 2013-03-17 14:04:31 -04:00
Gregory Burd
ce79d22659 Revert shared cursor changes for now. 2013-03-17 08:15:33 -04:00
Gregory Burd
1129241fe0 Only open a session/cursor when first needed. There is still a race
between vnodes during startup, ideally wterl_conn would only be opened
once.
2013-03-16 23:28:13 -04:00
Gregory Burd
22d42f5076 Fixed issue reusing cursors. 2013-03-16 16:42:43 -04:00
Gregory Burd
ab45690a4b Pull via http to avoid certificate errors with https on certain platforms
(Illumos, SmartOS, Solaris... I'm looking at you.) Speed up builds by
running make in parallel (use all the cores!).
2013-03-16 16:41:26 -04:00
Gregory Burd
fab5877ff5 Mistakenly allowed a file rename from another branch here. Use "wterl"
not just "wt" for the shared library name.
2013-03-14 17:36:45 -04:00
Gregory Burd
3543b42df8 Whitespace fixes (s/tab/space/g) and added two new configuration settings
from the 1.5.0 release.  Checkpoint every second, dump stats every 30 sec.
2013-03-14 15:26:28 -04:00
Steve Vinoski
85fadeec70 Merge pull request #5 from basho-labs/gsb-cache-size-est
Estimate a reasonable cache size if one isn't provided in app/env config for wterl.
2013-03-14 11:05:38 -07:00
Gregory Burd
ef3e161f12 Embelish rebar's config a bit. 2013-03-14 13:33:34 -04:00
Gregory Burd
1d6dfee192 Cache sizing is critical for performance. This change guesses at a
reasonable setting for the WiredTiger cache size at runtime.  This cache
is shared across all vnodes regarless of how many are active at any
given time.  The algorithm is: max(1GB, 1/3 (RAM - Beam RSS size)). We don't
enable direct_io on purpose and data will be double buffered in WiredTiger's
cache and the filesystem buffer cache.  This turns out to be faster than
direct I/O despite wasting a bit of RAM.
2013-03-14 13:27:59 -04:00
Steve Vinoski
efdeb70764 Merge pull request #4 from basho-labs/gsb-shared-cursors
Share per-table cursors for get/put/delete operations.
2013-03-13 15:15:35 -07:00
Gregory Burd
e4b3acbd11 Share per-table cursors for get/put/delete operations. 2013-03-13 17:27:00 -04:00
Steve Vinoski
f94336f3eb base WiredTiger max session config setting on ring size 2013-03-12 18:24:06 -04:00
Gregory Burd
021dcb10f5 Build from source pulled from a specific branch on GitHub for "basho"
related work and integration of WiredTiger rather than the latest
.tar.bz2 file they distribute.
2013-03-12 17:16:15 -04:00
Gregory Burd
789c44b133 Change the config to use a lsm tree rather than btree for tables.
Stop using direct_io as it forces operations to sync more often, slowing
things down, at the expense of double-buffering (this will use more RAM).
2013-03-12 17:16:15 -04:00
Gregory Burd
c6eac27ea7 Start with a more rational default configuration. (Before you ask... the
answer is 'no').  So far there has been no effort to validate that these
settings are in fact the best for Riak/KV or CS data access patterns.  These
particular settings are, at best, an educated guess based on past experience,
the docs and reading about the benchmark the WiredTiger team published here:

https://github.com/wiredtiger/wiredtiger/wiki/YCSB-Mapkeeper-benchmark
2013-03-12 17:16:15 -04:00
Gregory Burd
9a02718a2e Pass configuration along when opening sessions. 2013-03-12 17:16:15 -04:00
Gregory Burd
b063d866cc Merge pull request #2 from basho-labs/gsb-makefile
Add some more depth to the targets.
2013-03-07 17:24:29 -08:00
Gregory Burd
f224c61b7a Add some more depth to the targets. 2013-03-07 16:03:30 -05:00
Steve Vinoski
446362d11a update to WiredTiger 1.4.2 2013-01-14 19:13:45 -05:00