Skip to content

Commit a4d957c

Browse files
committed
docs for public stuff
1 parent ecd64eb commit a4d957c

1 file changed

Lines changed: 35 additions & 1 deletion

File tree

lib/b4.ex

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,36 @@
11
defmodule B4 do
22
alias B4.{DatabaseSupervisor, DatabasesSupervisor, Keydir, KeydirOwner, Writer}
33

4+
@doc """
5+
Create a database in `directory` with the given options.
6+
7+
Options:
8+
- `target_file_size`: when the size of the current write file reaches this size,
9+
the system will attempt to close it and start a fresh one.
10+
Defaults to `2 ** 31` bytes (2 GiB).
11+
"""
412
def new(directory, options \\ [target_file_size: 2 ** 31]) do
513
case DatabasesSupervisor.start_database(directory, options) do
614
{:ok, _pid} -> :ok
715
other -> other
816
end
917
end
1018

19+
@doc """
20+
Insert `value` for `key`.
21+
22+
Old versions are preserved on disk until you call `merge/2`,
23+
at which point all non-live data on disk is destroyed.
24+
"""
1125
def insert(directory, key, value) do
1226
Writer.insert_sync(directory, key, value)
1327
end
1428

29+
@doc """
30+
Like `Map.fetch/2`.
31+
32+
Get `value` for `key`, returning `{:ok, value}`, `:not_found`, or `{:error, error}`.
33+
"""
1534
def fetch(directory, key) do
1635
tid = KeydirOwner.get_keydir_tid(directory)
1736

@@ -42,16 +61,28 @@ defmodule B4 do
4261
end
4362
end
4463

64+
@doc """
65+
Delete the given key from the dataset.
66+
The key and its previous inserts still exist on disk
67+
until you call `merge/2`.
68+
"""
4569
def delete(directory, key) do
4670
Writer.delete_sync(directory, key)
4771
end
4872

73+
@doc """
74+
All live keys in the database.
75+
"""
4976
def keys(directory) do
5077
tid = KeydirOwner.get_keydir_tid(directory)
5178
Keydir.keys(tid)
5279
end
5380

54-
def merge(directory, timeout \\ 5_000) do
81+
@doc """
82+
Rewrite the current set of "read" files into a new set
83+
that contains only live keys.
84+
"""
85+
def merge(directory, timeout \\ 15_000) do
5586
with {_, :ok} <- {:set_merge_in_progress, Writer.set_merge_in_progress(directory, true)},
5687
{_, :ok} <- {:merge_action, KeydirOwner.merge(directory, timeout)},
5788
{_, :ok} <- {:unset_merge_in_process, Writer.set_merge_in_progress(directory, false)} do
@@ -63,6 +94,9 @@ defmodule B4 do
6394
end
6495
end
6596

97+
@doc """
98+
Shut down the supervision tree for the given database.
99+
"""
66100
def close(directory) do
67101
DatabaseSupervisor.stop(directory)
68102
end

0 commit comments

Comments
 (0)