wip(): add type definitions

This commit is contained in:
Ryan Schmukler 2016-08-08 12:45:13 -04:00
parent 1875e93ff8
commit 33d65794ab
4 changed files with 152 additions and 11 deletions

View File

@ -1,6 +1,7 @@
# Rox
**TODO: Add description**
Elixir wrapper around
[leo-project/erocksdb](https://github.com/leo-project/erocksdb)
## Installation
@ -13,12 +14,3 @@ If [available in Hex](https://hex.pm/docs/publish), the package can be installed
[{:rox, "~> 0.1.0"}]
end
```
2. Ensure `rox` is started before your application:
```elixir
def application do
[applications: [:rox]]
end
```

View File

@ -1,2 +1,148 @@
defmodule Rox do
@opts_to_convert_to_bitlists [:db_log_dir, :wal_dir]
@type compaction_style :: :level | :universal | :fifo | :none
@type compression_type :: :snappy | :zlib | :bzip2 | :lz4 | :lz4h | :none
@type db_handle :: binary
@type cf_handle :: binary
@type itr_handle :: binary
@type snapshot_handle :: binary
@type file_path :: String.t
@type block_based_table_options :: [
{:no_block_cache, boolean} |
{:block_size, pos_integer} |
{:block_cache_size, pos_integer} |
{:bloom_filter_policy, bits_per_key :: pos_integer} |
{:format_version, 0 | 1 | 2} |
{:skip_table_builder_flush, boolean} |
{:cache_index_and_filter_blocks, boolean}
]
@type cf_options :: [
{:block_cache_size_mb_for_point_lookup, non_neg_integer} |
{:memtable_memory_budget, pos_integer} |
{:write_buffer_size, pos_integer} |
{:max_write_buffer_number, pos_integer} |
{:min_write_buffer_number_to_merge, pos_integer} |
{:compression, compression_type} |
{:num_levels, pos_integer} |
{:level0_file_num_compaction_trigger, integer} |
{:level0_slowdown_writes_trigger, integer} |
{:level0_stop_writes_trigger, integer} |
{:max_mem_compaction_level, pos_integer} |
{:target_file_size_base, pos_integer} |
{:target_file_size_multiplier, pos_integer} |
{:max_bytes_for_level_base, pos_integer} |
{:max_bytes_for_level_multiplier, pos_integer} |
{:expanded_compaction_factor, pos_integer} |
{:source_compaction_factor, pos_integer} |
{:max_grandparent_overlap_factor, pos_integer} |
{:soft_rate_limit, float} |
{:hard_rate_limit, float} |
{:arena_block_size, integer} |
{:disable_auto_compactions, boolean} |
{:purge_redundant_kvs_while_flush, boolean} |
{:compaction_style, compaction_style} |
{:verify_checksums_in_compaction, boolean} |
{:filter_deletes, boolean} |
{:max_sequential_skip_in_iterations, pos_integer} |
{:inplace_update_support, boolean} |
{:inplace_update_num_locks, pos_integer} |
{:table_factory_block_cache_size, pos_integer} |
{:in_memory_mode, boolean} |
{:block_based_table_options, block_based_table_options}
]
@type db_path :: {:db_path, name :: String.t, options :: cf_options}
@type cf_descriptor :: {:cf_descriptor, name :: String.t, options :: cf_options}
@type access_hint :: :normal | :sequential | :willneed | :none
@type wal_recovery_mode ::
:tolerate_corrupted_tail_records |
:absolute_consistency |
:point_in_time_recovery |
:skip_any_corrupted_records
@type db_options :: [
{:total_threads, pos_integer} |
{:create_if_missing, boolean} |
{:create_missing_column_families, boolean} |
{:error_if_exists, boolean} |
{:paranoid_checks, boolean} |
{:max_open_files, integer} |
{:max_total_wal_size, non_neg_integer} |
{:disable_data_sync, boolean} |
{:use_fsync, boolean} |
{:db_paths, [db_path]} |
{:db_log_dir, file_path} |
{:wal_dir, file_path} |
{:delete_obsolete_files_period_micros, pos_integer} |
{:max_background_compactions, pos_integer} |
{:max_background_flushes, pos_integer} |
{:max_log_file_size, non_neg_integer} |
{:log_file_time_to_roll, non_neg_integer} |
{:keep_log_file_num, pos_integer} |
{:max_manifest_file_size, pos_integer} |
{:table_cache_numshardbits, pos_integer} |
{:wal_ttl_seconds, non_neg_integer} |
{:wal_size_limit_mb, non_neg_integer} |
{:manifest_preallocation_size, pos_integer} |
{:allow_os_buffer, boolean} |
{:allow_mmap_reads, boolean} |
{:allow_mmap_writes, boolean} |
{:is_fd_close_on_exec, boolean} |
{:skip_log_error_on_recovery, boolean} |
{:stats_dump_period_sec, non_neg_integer} |
{:advise_random_on_open, boolean} |
{:access_hint, access_hint} |
{:compaction_readahead_size, non_neg_integer} |
{:use_adaptive_mutex, boolean} |
{:bytes_per_sync, non_neg_integer} |
{:skip_stats_update_on_db_open, boolean} |
{:wal_recovery_mode, wal_recovery_mode}
]
@type read_options :: [
{:verify_checksums, boolean} |
{:fill_cache, boolean} |
{:iterate_upper_bound, binary} |
{:tailing, boolean} |
{:total_order_seek, boolean} |
{:snapshot, snapshot_handle}
]
@type write_options :: [
{:sync, boolean} |
{:disable_wal, boolean} |
{:timeout_hint_us, non_neg_integer} |
{:ignore_missing_column_families, boolean}
]
@type write_actions :: [
{:put, key :: binary, value :: binary} |
{:put, cf_handle, key :: binary, value :: binary} |
{:delete, key :: binary} |
{:delete, cf_handle, key :: binary} |
:clear
]
@type iterator_action :: :first | :last | :next | :prev | binary
@doc """
Open a RocksDB with the specified read options
"""
@spec open(path :: file_path, db_opts :: db_options, cf_opts :: cf_options) :: {:ok, db_handle} | {:error, any}
def open(path, db_opts \\ [], cf_opts \\ []) do
:erocksdb.open(to_charlist(path), sanitize_opts(db_opts), sanitize_opts(cf_opts))
end
defp sanitize_opts(opts) do
[ raw, rest ] = Keyword.split(opts, @opts_to_convert_to_bitlists)
converted = Enum.map(raw, fn {k, val} -> {k, to_charlist(val)} end)
Keyword.merge(rest, converted)
end
end

View File

@ -27,6 +27,8 @@ defmodule Rox.Mixfile do
#
# Type "mix help deps" for more examples and options
defp deps do
[]
[
{:erocksdb, "~> 0.4.1"}
]
end
end

1
mix.lock Normal file
View File

@ -0,0 +1 @@
%{"erocksdb": {:hex, :erocksdb, "0.4.1", "59a3258b1460d0e64f7575d912d9af86fa5aa56729abff18e4d3e4fd4a5e01e0", [:rebar3], []}}