Commit Graph

113 Commits

Author SHA1 Message Date
Alex Gorrod
b217c497e3 WT-2552 Add public API for pluggable filesystems (#2671)
* WT-2552 Add public API for pluggable filesystems

Not yet compiling. The main parts of this change should be here,
but it involved extensive parameter re-organization. There are also
a number of layering violations between our existing file system
implementations and the WT_FH, that aren't possible with the new
structure.

There are a number of specific todo comments in the code. One of the main
issues is that the in-memory file system had a special close semantic
that relied on WiredTiger handle tracking. The in-memory file-system should
do it's own tracking of file handles, I've gone part way down that road by
adding a queue for closed handles. Need to also add in live handles, and
manage the queue as appropriate.

I haven't created an example application that uses the new API yet.

* WT-2552 Add public API for pluggable filesystems

I always forget you have to remove the already-built html files when
changing PREDEFINED, add a reminder to the complaint.

* WT-2552 Add public API for pluggable filesystems

You have to remove the .js files, too.

* WT-2552 Add public API for pluggable filesystems

Make dist/s_all run cleanly.

* WT-2552 Add public API for pluggable filesystems

Whitespace.

* WT-2552 Add public API for pluggable filesystems

Make it compile/build/lint.

* WT-2552 Add public API for pluggable filesystems

block_write.c: In function '__wt_block_extend':
block_write.c:130:71: error: missing terminating ' character [-Werror]

* WT-2552 Add public API for pluggable filesystems

os_fs_inmemory.c: In function '__im_file_truncate':
os_fs_inmemory.c:344:10: error: 'session' is used uninitialized in this
function [-Werror=uninitialized]

* WT-2552 Add public API for pluggable filesystems

os_fs.c: In function '__posix_directory_sync':
os_fs.c:92:10: error: 'session' is used uninitialized in this function
[-Werror=uninitialized]

* WT-2552 Add public API for pluggable filesystems

Go back to using bool types in the file-system API, this requires we add
<stdbool.h> to the "standard" wiredtiger.h includes.

Consistently use wt_session to represent a WT_SESSION, we were using
"wtsession" in some places.

Make a pass over the Windows code, but I'm sure it doesn't compile yet.

* WT-2552 Add public API for pluggable filesystems

Fix up another couple of bool types.

* WT-2552 Add public API for pluggable filesystems

Move the file naming work out of the underlying filesystem functions,
the calls to __wt_filename are now in the upper-level code,n os_fs.i;
that means the filesystem code is no longer responsible for figuring out
paths. This is cleaner, although the directory-sync call is a bit of a
kluge, and I've commimtted us to handling NULL filesystem methods.

With this set of changes, in-memory runs again.

More Windows naming fixes.

* WT-2552 Add public API for pluggable filesystems

os_fs.c: In function '__posix_directory_sync':
os_fs.c:96:3: error: label 'err' used but not defined

* WT-2552 Add public API for pluggable filesystems

Pull out another call to __wt_filename() from the filesystem-dependent
code.

* WT-2552 Add public API for pluggable filesystems

Consistently check for missing file-system methods when doing
file-system calls.

Other minor lint & cleanup.

* WT-2552 Add public API for pluggable filesystems

Change the in-memory code to maintain a complete list of the files it
has ever opened, and depend on that list instead of reaching up into the
common layer for the WT_FH handle list.

This means __wt_handle_search is only used by the common WT_FH handle
code, simplify it, and add a __wt_handle_is_open function that can be
called for diagnostic purposes (to check for open files that are being
renamed or removed, for example).

* Fix comiler warning and ignore the file system API in Java

* Flesh out the example file system implementation.

* Add in some plumbing for set_file_system in wiredtiger_open.

* WT-2552 Add public API for pluggable filesystems

Whitespace.

* WT-2552 Add public API for pluggable filesystems

WT_CONFIG_ITEM.val isn't a boolean, don't use boolean types in
equal/not-equal comparisons.

* WT-2552 Add public API for pluggable filesystems

Remove unused #includes.

Increment/decrement the DEMO_FILE_SYSTEM.{opened,closed}_file_count.

Allocate demo structures, they're larger than the underlying structures.
Swap the number/size calloc arguments, number comes first.

Fix a couple of statics.

* WT-2552 Add public API for pluggable filesystems

Use %u instead of casting to %d.

* WT-2552 Add public API for pluggable filesystems

Add ex_file_system.c to the list of example programs.

* WT-2552 Add public API for pluggable filesystems

Change ex_file_system.c to not require <wt_internal.h>: strip down a
copy of FreeBSD's <queue.h> for local inclusion, rewrite a few other
minor pieces of code.

* WT-2552 Add public API for pluggable filesystems

Update spell check info

* WT-2552 Add public API for pluggable filesystems

__conn_load_extensions() shouldn't set the "early" boolean to true.

* WT-2552 Add public API for pluggable filesystems

Don't indirect through a NULL pointer if "local" was set and no path was
specified, always set the name to something useful.

* WT-2552 Add public API for pluggable filesystems

Don't indirect through a NULL pointer if "local" was set and no path was
specified, always set the name to something useful.

* WT-2552 Add public API for pluggable filesystems

wt_off_t vs. size_t conversion lint.

* WT-2552 Add public API for pluggable filesystems

Add -rdynamic to the load for ex_file_system, the main executable
symbols are not exported by default.

* WT-2552 Add public API for pluggable filesystems

The underlying handle name includes the enclosing directory,
compare against the WT_FH.name field instead.

* WT-2552 Add public API for pluggable filesystems

demo_fs_rename should return 0 if successful, simplify error handling

Don't bother casting arguments to free(), it's not necessary.

* WT-2552 Add public API for pluggable filesystems

General WT_FILE_SYSTEM cleanup.

Move OS initialization into the wiredtiger_open() code (the
os_common/os_init.c file is no longer needed).

Allow early-load extensions to be part of the environment settings,
matching the "in-memory" and "readonly" configurations.

Syntax check the set of a file-system, remove tests for NULL methods in
the file-system structure unless it's legal for them to be NULL.

Windows, POSIX and in-memory file systems now set WT_FILE_SYSTEM.terminate,
call that function to cleanup when discarding a WT_CONNECTION.

Export file-type and open-flags constants for WT_FILE_SYSTEM.open_file,
sort the WT_FILE_SYSTEM methods, do an editing pass.

Change the WT_FILE_HANDLE type from (const char *) to (char *), it's
"owned" by the underlying layer, and it's simpler that way.

Minor (untested) cleanup of the Windows WT_FILE_SYSTEM.open-file method.

* WT-2552 Add public API for pluggable filesystems

Export the advise argument #defines for the WT_FILE_HANDLE.fadvise method.

Sort the WT_FILE_HANDLE methods.

* WT-2552 Add public API for pluggable filesystems

Clean up and simplify WT_FILE_SYSTEM/WT_FILE_HANDLE documentation's
description of the handles.

* WT-2552 Add public API for pluggable filesystems

WT_FILE_HANDLE.close is a required function (at the least, it
has to free the memory).

WT_FILE_HANDLE.fadvise isn't a required function, if it's not
configured, don't call it.

* WT-2552 Add public API for pluggable filesystems

The WT_FILE_HANDLE.lock function is required.

Change the __wt_open() signature to match WT_FILE_SYSTEM.open_file().

* WT-2552 Add public API for pluggable filesystems

Rework all of the WT_FILE_HANDLE mapped region methods to be optional.

* WT-2552 Add public API for pluggable filesystems

The WT_FILE_HANDLE.{read,size} methods are required.
The WT_FILE_HANDLE.sync method is not required.

Split the WT_FILE_HANDLE.sync method into .sync and .sync_nowait versions,
it makes the upper-level code simpler (Windows supports .sync but doesn't
support .sync_nowait).

* WT-2552 Add public API for pluggable filesystems

The WT_FILE_HANDLE.{truncate,write} methods are required IFF the file
is not readonly.

* WT-2552 Add public API for pluggable filesystems

POSIX shouldn't declare a no-sync handle function unless the
sync_file_range system call is available.

* WT-2552 Add public API for pluggable filesystems

Typo, missing semi-colon.

* Fix a bug in ex_file_system.c

* Fix a memory leak in posix file handle implementation

* WT-2552 Use the correct flags when opening backup file.

* WT-2552 Add public API for pluggable filesystems

Simplify open-file error handling by calling the close function on the
handle, that way we won't forget to free all of the applicable memory
allocations.

* WT-2552 Add public API for pluggable filesystems

Simplify the directory-list method, don't pass in an include/exclude
file, if prefix is non-NULL, it implies we only want files matching
the prefix.

* WT-2552 Add public API for pluggable filesystems

Replace WT_FILE_HANDLE_POSIX.fallocate_{available,requires_locking} wiht
WT_FILE_HANDLE.fallocate and WT_FILE_HANDLE.fallocate_nolock.

Example code doesn't need to set WT_FILE_HANDLE methods to NULL, the
allocation does that.

Free the I/O buffer if open-handle allocation fails in the example code.

Remove snippets for WT_FILE_SYSTEM and WT_FILE_HANDLE methods, we're
not going to provide example code for them.

* WT-2552 Add public API for pluggable filesystems

Document we expect either ENOTSUP or EBUSY from optionally supported
APIs. Review/cleanups ENOTSUP/EBUSY returns from optionally supported
APIs.

Make WT_FILE_HANDLE.lock optional.

Don't configure or call the POSIX fadvise function on files configured
for direct I/O.

Rename __wt_filesize_name to __wt_size for consistency.

Update the spelling list.

* WT-2552 Add public API for pluggable filesystems

WT_FILE_HANDLE.truncate requires locking in all known implementations,
document it is not called concurrently with other operations.

* WT-2552 Add public API for pluggable filesystems

Don't terminate the filesystem unless we've actually configured one.

* WT-2552 Add public API for pluggable filesystems

Remove WT_FILE_SYSTEM and WT_FILE_HANDLE from SWIG so the test suite
can pass again.

* WT-2552 Add public API for pluggable filesystems

Merge __conn_load_early_extensions() and __conn_load_extensions().

Fix a problem where I moved the early extensions load to where it could
include the WiredTiger environment variable, but I didn't pass the built
cfg into the function.

* WT-2552 Add public API for pluggable filesystems

Linux build typo.

* WT-2552 Add public API for pluggable filesystems

Get rid of the "bool silent" argument to WT_FILE_SYSTEM.size by testing
for the file's existence before requesting the size (an extra system
call, but guaranteed to hit in the buffer cache at least).

* WT-2552 Add public API for pluggable filesystems

Naming consistency pass over the WT_FILE_SYSTEM functions.

* WT-2552 Add public API for pluggable filesystems

Fix a spin lock mismatch.

* WT-2552 Add public API for pluggable filesystems

Another spinlock mismatch.

* Update example pluggable file system.

Add a directory list implementation to the example, which uncovered
an issue with the API. The directory list API allocates memory that
is freed by WiredTiger, which I don't think is kosher.

* Change file-directory-sync to use reguar fsync.

The distinction in os_fs.i doesn't work with the filesystem API.

Also add directory_sync application to the example application.

* WT-2552 Add public API for pluggable filesystems

Whitespace.

* WT-2552 Add public API for pluggable filesystems

Rewrite __wt_free to not evaluate macro arguments multiple times.

* WT-2552 Add public API for pluggable filesystems

Simplify the directory-list functions: __wt_realloc_def() already
handles scaling the size of the allocations, there's no need to
involve a separate constant that increments the allocation size.

* WT-2552 Add public API for pluggable filesystems

Fix a grouping problem in a realloc call, we need to multiple the size
times the previously allocated slots + 10.

Fix buffer overrun, if "count" has already been incremented, the memset
would skip clearing the first slot and clear one slot past the end of
the buffer.

Remove a comment, realloc requires clearing allocated memory, it's not
paranoia.

* WT-2552 Add public API for pluggable filesystems

Add the mapping-cookie argument to the map-preload and map-discard
functions.

Change page-discard to stop reaching down through the block manager,
instead, provide a block-manager map-discard function that does the
work.

* WT-2552 Add public API for pluggable filesystems

Require a directory-list function.

Implement a directory-list function for the in-memory filesystem.

Consistency pass, make all the directory-list functions look the same.

* WT-2552 Add public API for pluggable filesystems

The WT_FILE_SYSTEM.{directory_sync, remove, rename} methods are not
required for read-only systems.

* WT-2552 Add public API for pluggable filesystems

Change the WT_FILE_SYSTEM.open_file file_type argument from a set of
constants to an enum.

This requires changing how we store connection direct I/O configuration
(the constants used to be flags stored in the WT_CONNECTION_IMPL), and
requiring all callers of __wt_open() do their own work to figure out if
WT_OPEN_DIRECTIO should be specified.

* WT-2552 Add public API for pluggable filesystems

Make no guarantees WT_FILE_SYSTEM and WT_FILE_HANDLE methods are
not called concurrently (except for WT_FILE_HANDLE::fallocate and
WT_FILE_HANDLE::fallocate_nolock).

Rewrite the in-memory FS code to lock across all methods (for example,
WT_FILE_HANDLE.close), that means including a reference to the enclosing
WT_FILE_SYSTEM in the WT_FILE_HANDLE structure so we can find a lock
without using the WT_CONNECTION_IMPL structure.

* WT-2552 Add public API for pluggable filesystems

Remove __wt_directory_sync_fh, it's no longer useful.

* WT-2552 Add public API for pluggable filesystems

Rename WT_INMEMORY_FILE_SYSTEM to WT_FILE_SYSTEM_INMEM, matching
WT_FILE_HANDLE_INMEM.

* WT-2552 Add public API for pluggable filesystems

Add WT_FILE_SYSTEM.directory_list_free, to free memory allocated
by WT_FILE_SYSTEM.direct_list.

Fix a memory leak in __log_archive_once (if __wt_readlock failed,
we leaked the directory-list memory).

* WT-2552 Add public API for pluggable filesystems

Typo, check WT_DIRECT_IO_LOG, not WT_DIRECT_IO_CHECKPOINT.

* WT-2552 Add public API for pluggable filesystems

Typo, unreachable code.

* WT-2552 Add public API for pluggable filesystems

We don't require WT_FILE_SYSTEM.{remove,rename} if the system is
read-only.

* Fix Windows build with pluggable file system.

Involved removing u_int from the public API.

* Fix line wrapping.

* Fix Windows terminate function.

* Forgot something in my last commit.

* Fix Windows munmap bug.

* Add new example to Windows build. Extend example to be more complete.

* Fix example loading on Windows

* Update documentation

* Add missing spell words

* Remove old comment.
2016-04-28 07:16:44 -04:00
Don Anderson
5e76d5b3c4 WT-2580 Fix potential SWIG naming conflict in Java 2016-04-23 11:00:15 -04:00
Don Anderson
7ab387621b WT-2568 Add a backward compatible constructor for PackInputStream. 2016-04-20 14:54:05 -04:00
Don Anderson
03cc34056e WT-2550 Support raw mode cursors in java, which can only be accessed via
getByteArray calls.
2016-04-19 10:47:53 -04:00
Don Anderson
2f23a5e4e6 WT-2347 Added java tests for config schema formats.
This corresponds to Python test_config06 and fixes in WT-1517.
2016-01-24 07:39:50 -05:00
Don Anderson
3a25031eb7 WT-2347 Added java fix for unsized 's' schema formats.
This corresponds to Python fixes in WT-1517.
2016-01-24 07:37:56 -05:00
Keith Bostic
a6f27c99a5 Merge branch 'develop' into wt-2287-rebalance 2016-01-01 16:51:17 -05:00
Keith Bostic
344a714c3d Upgrade copyright notices from 2015 to 2016. 2016-01-01 16:37:39 -05:00
Keith Bostic
1df86bfb7a WT-2287: Add support for a WT_SESSION.rebalance method that rebuilds the
underlying btree, correcting any imbalance.
2015-12-17 12:29:08 -05:00
Don Anderson
4126e77abe Merge branch 'develop' into wt-1315-join-cursor 2015-11-04 06:44:25 -05:00
Don Anderson
2770eb0749 WT-1315. Added java support for join cursors. 2015-11-03 13:36:06 -05:00
Don Anderson
5a3b104d58 WT-2194 Handle close callbacks for cursors that were not opened by Java.
This can now happen, as WiredTigerLAS.wt is opened internally.
2015-11-02 09:26:22 -05:00
Susan LoVerso
366fc17e0b WT-2104 New log_flush API to control the flushing or syncing of the log. 2015-09-15 13:35:11 -04:00
Don Anderson
7c5de72ebd Fixed bugs in packing/unpacking bytearrays: we must be aware of 'U' format;
when length is provided in format, use it; do padding.

Fixed signed checking for getInt/Long/Short.

Fixed bugs in packing strings: embedded nulls; use length when provided.
Logic copied from packing.py.

Added special case encoding for 8256 (to match Python and C).
2015-07-13 13:54:09 -04:00
Don Anderson
83a7f8ae93 Java's Cursor.reset() now completely resets the cursor: it removes the
state of any incompletely packed/unpacked items.
2015-07-13 13:48:19 -04:00
Don Anderson
38f4c2ca01 WT-1985. Added two more comprehensive packing tests, based on test/suite tests. 2015-07-13 10:35:17 -04:00
Don Anderson
2e9f552fd8 WT-1964. Simplify references to JAVA_CALLBACK->jnienv to promote readability. 2015-06-26 16:06:55 -04:00
Don Anderson
df85488407 WT-1964. For Java, handle cases where a session or cursor is closed
when the thread that open it no longer exists.  Add tests to kill
threads that have open cursors and sessions.
2015-06-26 15:52:35 -04:00
David Hows
9b60ee8332 Add reset to wiredtiger.in and ex_all 2015-06-22 11:20:37 +10:00
Don Anderson
e038dc447e WT-1963. Refactored Java's next/prev/search/search_near, and modified
so they do not get the key/value when there is no format.
2015-06-12 13:52:01 -04:00
Susan LoVerso
474ff612e8 Merge branch 'develop' into transaction-background
Conflicts:
	src/config/config_def.c
	src/include/config.h
	src/include/txn.h
	src/log/log.c
	src/session/session_api.c
2015-05-27 12:15:11 -04:00
Susan LoVerso
e451621025 Merge branch 'develop' into transaction-background
Conflicts:
	src/include/config.h
	src/include/txn.h
	src/include/wiredtiger.in
2015-05-13 15:45:52 -04:00
Michael Cahill
6237ef264d Merge branch 'develop' into named-snapshots
Conflicts:
	dist/api_data.py
	src/config/config_def.c
	src/include/config.h
	src/txn/txn.c
2015-05-13 16:46:16 +10:00
Susan LoVerso
be185cd74e Add a background transaction sync mechanism. WT-1908 2015-05-05 16:13:47 -04:00
Michael Cahill
0fb36c6730 Update auto-generated files. 2015-04-02 17:03:40 +11:00
Don Anderson
9a7d534474 Fixes for style and whitespace. Refs #1822. 2015-03-26 20:16:14 -04:00
Don Anderson
900f7e54f8 Add WT_CONNECTION::add_encryptor() to satisfy unused function warning.
Fixed Java API to compile with encryptor.  Refs #1822.
2015-03-26 14:06:31 -04:00
Don Anderson
27269333ae Added -I include paths as needed to handle #include <3rdparty/...> 2015-03-25 20:21:32 -04:00
Alex Gorrod
61521a7c67 Fix equals method in java API. 2015-01-17 15:14:30 +11:00
Michael Cahill
f54fa988a9 Make Cursor.equals return a boolean in Java. 2015-01-17 09:46:27 +11:00
Michael Cahill
1dae9366fd Merge branch 'develop' into cursor-equal
Conflicts:
	src/cursor/cur_std.c
	src/cursor/cur_table.c
	src/include/extern.h
2015-01-17 07:48:42 +11:00
Michael Cahill
a30db47d03 Merge branch 'develop' into cursor-equal
Conflicts:
	lang/python/wiredtiger.i
2015-01-17 07:33:37 +11:00
Keith Bostic
2894268cca Put the WT_CURSOR public methods in alphabetical order. 2015-01-16 15:01:36 -05:00
Michael Cahill
1b033e5b2b Don't allow "readonly" to be reconfigured on cursors.
refs #1467
2015-01-17 05:15:04 +11:00
Michael Cahill
eb1511f3f1 Merge branch 'develop' into cursor-reconfigure 2015-01-14 02:44:49 +11:00
Alex Gorrod
812be6c438 Rename WT_CURSOR compare_equal to be equals.
While here, add a generic cursor equals stub in curstd, rather than
redirecting via cursor function pointer lists.

Implement the Java API wrapper.
2015-01-14 02:28:10 +11:00
Keith Bostic
56865ca8ec Fix a function name typo, update auto-generated files. 2015-01-12 11:08:19 -05:00
Don Anderson
b8971b6ffe Merge branch 'develop' into java-examples 2015-01-09 10:19:17 -05:00
Don Anderson
c8bad02860 Various fixes related to java examples. Refs #1526.
Don't turn on cursor RAW flag for a JSON dump cursor.

Fixed unpacking a fixed length string: unpack cur position was not being updated.

Fixed packing a fixed length string: String array bounds check was firing.

Fixed unpacking short/int: range check was incorrect.

Added methods to put/get record numbers (e.g. getKeyRecord) in Cursor and AsyncOp.

Remove stray println.
2015-01-09 09:54:21 -05:00
Keith Bostic
1f9098871a Copyright notices: add MongoDB, update to 2015. 2015-01-04 14:07:56 -05:00
Keith Bostic
94b9c2774d Fix order of original cursor functions. 2014-12-22 16:43:46 -05:00
Keith Bostic
4c26d2324b Add support for a WT_CURSOR.reconfigure method, reference #1381. 2014-12-11 19:32:50 -05:00
Don Anderson
d3c8519c2a Add typemaps so Java close cleanups occur after 'close' completes. refs #1332.
Some refactoring and simplification of close code.
KNF whitespace.
2014-11-07 15:27:44 -05:00
Don Anderson
25028d5388 Added new %define to clean up name shuffling for wrap functions. #1295 2014-10-30 10:28:34 -04:00
Don Anderson
6880b1290d Cleanup as a result of last merge: refs #1295
Make new uint64 support work with WT_ASYNC_OP::get_id().
Removed unused label in WT_SESSION::transaction_pinned_range().
2014-10-30 10:04:48 -04:00
Don Anderson
61bbf08f00 Merge branch 'develop' into java-exceptions 2014-10-30 09:26:49 -04:00
Alex Gorrod
906f10a05b Fix copy-paste error. 2014-10-28 11:57:07 +11:00
Alex Gorrod
a3051990fe Add transaction_pinned_range to Java API. 2014-10-28 11:30:36 +11:00
Michael Cahill
f333e96644 Fix transaction ID logic (again), add session method entry / exit, add a documentation snippet. 2014-10-27 12:41:20 +11:00
Don Anderson
8dc722e1bd Added a minimal ExceptionTest for java. 2014-10-23 11:19:36 -04:00