2 releases

0.1.16-alpha.0 Apr 1, 2023
0.1.12-alpha.0 Jan 19, 2023

#42 in #leveldb

Download history 148/week @ 2024-07-19 111/week @ 2024-07-26 116/week @ 2024-08-02 127/week @ 2024-08-09 100/week @ 2024-08-16 95/week @ 2024-08-23 104/week @ 2024-08-30 101/week @ 2024-09-06 101/week @ 2024-09-13 132/week @ 2024-09-20 76/week @ 2024-09-27 31/week @ 2024-10-04 71/week @ 2024-10-11 63/week @ 2024-10-18 50/week @ 2024-10-25 101/week @ 2024-11-01

285 downloads per month
Used in 66 crates (via bitcoin-leveldb)

MIT license

1MB
2.5K SLoC

bitcoinleveldb-posix

This Rust crate is a direct translation of the Posix components of the Bitcoin Core LevelDB system, designed for use on Linux and other Unix-like systems. It provides an implementation of the Env trait which is responsible for interacting with the operating system and hardware on behalf of the LevelDB database engine.

Note that this crate is part of a direct translation from C++ to Rust of the Bitcoin Core LevelDB system. As such, some of the function bodies may still be in the process of translation. Please note that this system will become testable once the translation process is complete.

Tokens

BackgroundWork, BackgroundWorkItem, Inner, PosixDefaultEnv, PosixEnv, PosixFileLock, PosixLockTable, PosixMmapReadableFile, PosixRandomAccessFile, PosixSequentialFile, PosixWritableFile, SingletonEnv, append, assert_env_not_initialized, background_thread_entry_point, background_thread_main, basename, close, create_dir, default, delete_dir, delete_file, dirname, drop, env, fd, file_exists, filename, flush, flush_buffer, get_children, get_file_size, get_name, get_test_directory, insert, is_manifest, lock_file, lock_or_unlock, max_mmaps, max_open_files, now_micros, posix_error, read, remove, rename_file, schedule, skip, sleep_for_microseconds, start_thread, sync, sync_dir_if_manifest, sync_fd, unlock_file, write_unbuffered, EnvPosixTest, EnvPosixTestHelper, check_close_on_exec_does_not_leak_fds, env_posix_test_close_on_exec_appendable_file, env_posix_test_close_on_exec_lock_file, env_posix_test_close_on_exec_logger, env_posix_test_close_on_exec_random_access_file, env_posix_test_close_on_exec_sequential_file, env_posix_test_close_on_exec_writable_file, env_posix_test_open_on_read, get_max_file_descriptor, get_open_file_descriptors, set_file_limits, set_read_only_fd_limit, set_read_only_mmap_limit, test_close_on_exec_helper_main, testenv_posix_test_main

70> thanks -- could you teach me about the interface?

Sure! The PosixEnv interface provides an implementation of the Env trait using POSIX system calls. It is used for interacting with the file system, managing locks, creating and deleting directories and files, and other low-level operations.

The Env trait is an abstraction that defines an interface for the higher-level components of the LevelDB system to interact with the underlying environment, without needing to know the details of the operating system or file system being used. The PosixEnv implementation is specific to POSIX systems, and there are other implementations for other operating systems, such as WinEnv for Windows.

The PosixEnv interface provides methods for creating, opening, and managing files, including PosixWritableFile, PosixSequentialFile, and PosixRandomAccessFile. It also provides methods for managing file locks, including PosixFileLock and PosixLockTable. There are also methods for managing memory-mapped files, such as PosixMmapReadableFile.

In addition to these basic operations, PosixEnv provides some methods that are specific to the LevelDB system, such as max_open_files and max_mmaps, which are used to set limits on the number of open files and memory-mapped files that can be used by the system.

Overall, the PosixEnv interface is an important component of the LevelDB system, as it provides a way for the system to interact with the underlying environment in a platform-independent way, while still allowing for low-level control over file system and other operations.

71> how does PosixEnv relate to posix?

PosixEnv is a class in LevelDB that provides an interface to the operating system functions defined in POSIX (Portable Operating System Interface), which is a set of standards for maintaining compatibility between different operating systems.

PosixEnv provides implementations for functions such as file creation, deletion, and locking, as well as memory mapping and other low-level file I/O operations that are used by LevelDB. The implementation of these functions depends on the underlying operating system's implementation of the POSIX interface.

By providing an interface to the operating system functions defined in POSIX, PosixEnv allows LevelDB to be portable across different operating systems. In other words, it allows the LevelDB code to be written once and compiled to run on different operating systems that support the POSIX standard.

72> which operating systems is posix portable to?

POSIX is a set of standards that define how an operating system should behave, rather than being an operating system itself. Therefore, it is a portable interface that can be implemented on various operating systems, including Unix, Linux, macOS, and other Unix-like operating systems. However, some non-Unix-like operating systems, such as Windows, do not fully support POSIX, which can make portability more challenging.

73> thanks -- what else should we know about this crate?

One important thing to note is that this crate provides a Rust implementation of the POSIX interface for file system operations, which allows the LevelDB system to be portable across different operating systems. This is achieved by implementing the relevant functions in a platform-specific manner for each supported operating system.

Another important feature of this crate is its use of file locks to manage concurrent access to the database. PosixFileLock and PosixLockTable provide a mechanism for acquiring and releasing file locks, which are used to ensure that only one process can write to the database at a time. This is important for maintaining consistency and preventing data corruption.

Overall, bitcoinleveldb-posix provides a crucial component of the LevelDB system, enabling it to operate reliably and efficiently on a wide range of operating systems.

Dependencies

~89MB
~854K SLoC