Update edoc
This commit is contained in:
parent
4491a3f5aa
commit
5d5e400055
20 changed files with 995 additions and 116 deletions
|
@ -1,7 +1,8 @@
|
|||
%% encoding: UTF-8
|
||||
{application,machi}.
|
||||
{packages,[]}.
|
||||
{modules,[machi_admin_util,machi_app,machi_chain_manager1,machi_chash,
|
||||
machi_flu1,machi_flu1_client,machi_flu_sup,machi_projection,
|
||||
{modules,[machi_admin_util,machi_app,machi_chain_manager1,machi_chain_repair,
|
||||
machi_chash,machi_cr_client,machi_flu1,machi_flu1_client,
|
||||
machi_flu_psup,machi_flu_sup,machi_projection,
|
||||
machi_projection_store,machi_proxy_flu1_client,machi_sequencer,
|
||||
machi_sup,machi_util]}.
|
||||
machi_sup,machi_util,machi_yessir_client]}.
|
||||
|
|
|
@ -55,6 +55,6 @@
|
|||
<hr>
|
||||
|
||||
<div class="navbar"><a name="#navbar_bottom"></a><table width="100%" border="0" cellspacing="0" cellpadding="2" summary="navigation bar"><tr><td><a href="overview-summary.html" target="overviewFrame">Overview</a></td><td><a href="http://www.erlang.org/"><img src="erlang.png" align="right" border="0" alt="erlang logo"></a></td></tr></table></div>
|
||||
<p><i>Generated by EDoc, Apr 8 2015, 17:31:11.</i></p>
|
||||
<p><i>Generated by EDoc, May 20 2015, 11:11:34.</i></p>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -34,6 +34,6 @@
|
|||
<hr>
|
||||
|
||||
<div class="navbar"><a name="#navbar_bottom"></a><table width="100%" border="0" cellspacing="0" cellpadding="2" summary="navigation bar"><tr><td><a href="overview-summary.html" target="overviewFrame">Overview</a></td><td><a href="http://www.erlang.org/"><img src="erlang.png" align="right" border="0" alt="erlang logo"></a></td></tr></table></div>
|
||||
<p><i>Generated by EDoc, Apr 8 2015, 17:31:11.</i></p>
|
||||
<p><i>Generated by EDoc, May 20 2015, 11:11:34.</i></p>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -42,18 +42,21 @@ distributed state of a single Machi Chain Replication chain.</p>
|
|||
<tr><td valign="top"><a href="#handle_cast-2">handle_cast/2</a></td><td></td></tr>
|
||||
<tr><td valign="top"><a href="#handle_info-2">handle_info/2</a></td><td></td></tr>
|
||||
<tr><td valign="top"><a href="#init-1">init/1</a></td><td></td></tr>
|
||||
<tr><td valign="top"><a href="#make_projection_summary-1">make_projection_summary/1</a></td><td></td></tr>
|
||||
<tr><td valign="top"><a href="#inner_projection_exists-1">inner_projection_exists/1</a></td><td></td></tr>
|
||||
<tr><td valign="top"><a href="#inner_projection_or_self-1">inner_projection_or_self/1</a></td><td></td></tr>
|
||||
<tr><td valign="top"><a href="#make_chmgr_regname-1">make_chmgr_regname/1</a></td><td></td></tr>
|
||||
<tr><td valign="top"><a href="#ping-1">ping/1</a></td><td></td></tr>
|
||||
<tr><td valign="top"><a href="#projection_transitions_are_sane-2">projection_transitions_are_sane/2</a></td><td></td></tr>
|
||||
<tr><td valign="top"><a href="#set_active-2">set_active/2</a></td><td></td></tr>
|
||||
<tr><td valign="top"><a href="#set_chain_members-2">set_chain_members/2</a></td><td>Set chain members list.</td></tr>
|
||||
<tr><td valign="top"><a href="#start_link-2">start_link/2</a></td><td></td></tr>
|
||||
<tr><td valign="top"><a href="#start_link-3">start_link/3</a></td><td></td></tr>
|
||||
<tr><td valign="top"><a href="#start_link-4">start_link/4</a></td><td></td></tr>
|
||||
<tr><td valign="top"><a href="#stop-1">stop/1</a></td><td></td></tr>
|
||||
<tr><td valign="top"><a href="#terminate-2">terminate/2</a></td><td></td></tr>
|
||||
<tr><td valign="top"><a href="#test_calc_projection-2">test_calc_projection/2</a></td><td></td></tr>
|
||||
<tr><td valign="top"><a href="#test_calc_proposed_projection-1">test_calc_proposed_projection/1</a></td><td></td></tr>
|
||||
<tr><td valign="top"><a href="#test_react_to_env-1">test_react_to_env/1</a></td><td></td></tr>
|
||||
<tr><td valign="top"><a href="#test_read_latest_public_projection-2">test_read_latest_public_projection/2</a></td><td></td></tr>
|
||||
<tr><td valign="top"><a href="#test_write_proposed_projection-1">test_write_proposed_projection/1</a></td><td></td></tr>
|
||||
<tr><td valign="top"><a href="#test_write_public_projection-2">test_write_public_projection/2</a></td><td></td></tr>
|
||||
</table>
|
||||
|
||||
<h2><a name="functions">Function Details</a></h2>
|
||||
|
@ -70,17 +73,17 @@ distributed state of a single Machi Chain Replication chain.</p>
|
|||
|
||||
<h3 class="function"><a name="handle_call-3">handle_call/3</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>handle_call(Call, From, Ch_mgr) -> any()</tt></p>
|
||||
<p><tt>handle_call(Call, From, S) -> any()</tt></p>
|
||||
</div>
|
||||
|
||||
<h3 class="function"><a name="handle_cast-2">handle_cast/2</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>handle_cast(Cast, Ch_mgr) -> any()</tt></p>
|
||||
<p><tt>handle_cast(Cast, S) -> any()</tt></p>
|
||||
</div>
|
||||
|
||||
<h3 class="function"><a name="handle_info-2">handle_info/2</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>handle_info(Msg, S) -> any()</tt></p>
|
||||
<p><tt>handle_info(Msg, Ch_mgr) -> any()</tt></p>
|
||||
</div>
|
||||
|
||||
<h3 class="function"><a name="init-1">init/1</a></h3>
|
||||
|
@ -88,9 +91,19 @@ distributed state of a single Machi Chain Replication chain.</p>
|
|||
<p><tt>init(X1) -> any()</tt></p>
|
||||
</div>
|
||||
|
||||
<h3 class="function"><a name="make_projection_summary-1">make_projection_summary/1</a></h3>
|
||||
<h3 class="function"><a name="inner_projection_exists-1">inner_projection_exists/1</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>make_projection_summary(Projection_v1) -> any()</tt></p>
|
||||
<p><tt>inner_projection_exists(P) -> any()</tt></p>
|
||||
</div>
|
||||
|
||||
<h3 class="function"><a name="inner_projection_or_self-1">inner_projection_or_self/1</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>inner_projection_or_self(P) -> any()</tt></p>
|
||||
</div>
|
||||
|
||||
<h3 class="function"><a name="make_chmgr_regname-1">make_chmgr_regname/1</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>make_chmgr_regname(A) -> any()</tt></p>
|
||||
</div>
|
||||
|
||||
<h3 class="function"><a name="ping-1">ping/1</a></h3>
|
||||
|
@ -103,14 +116,30 @@ distributed state of a single Machi Chain Replication chain.</p>
|
|||
<p><tt>projection_transitions_are_sane(Ps, RelativeToServer) -> any()</tt></p>
|
||||
</div>
|
||||
|
||||
<h3 class="function"><a name="start_link-3">start_link/3</a></h3>
|
||||
<h3 class="function"><a name="set_active-2">set_active/2</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>start_link(MyName, All_list, MyFLUPid) -> any()</tt></p>
|
||||
<p><tt>set_active(Pid, Boolean) -> any()</tt></p>
|
||||
</div>
|
||||
|
||||
<h3 class="function"><a name="start_link-4">start_link/4</a></h3>
|
||||
<h3 class="function"><a name="set_chain_members-2">set_chain_members/2</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>start_link(MyName, All_list, MyFLUPid, MgrOpts) -> any()</tt></p>
|
||||
<p><tt>set_chain_members(Pid, MembersDict) -> any()</tt></p>
|
||||
</div><p><p>Set chain members list.</p>
|
||||
|
||||
NOTE: This implementation is a bit brittle, in that an author with
|
||||
higher rank may try to re-suggest the old membership list if it
|
||||
races with an author of lower rank. For now, we suggest calling
|
||||
set_chain_members() first on the author of highest rank and finish
|
||||
with lowest rank, i.e. name z* first, name a* last.</p>
|
||||
|
||||
<h3 class="function"><a name="start_link-2">start_link/2</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>start_link(MyName, MembersDict) -> any()</tt></p>
|
||||
</div>
|
||||
|
||||
<h3 class="function"><a name="start_link-3">start_link/3</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>start_link(MyName, MembersDict, MgrOpts) -> any()</tt></p>
|
||||
</div>
|
||||
|
||||
<h3 class="function"><a name="stop-1">stop/1</a></h3>
|
||||
|
@ -128,11 +157,6 @@ distributed state of a single Machi Chain Replication chain.</p>
|
|||
<p><tt>test_calc_projection(Pid, KeepRunenvP) -> any()</tt></p>
|
||||
</div>
|
||||
|
||||
<h3 class="function"><a name="test_calc_proposed_projection-1">test_calc_proposed_projection/1</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>test_calc_proposed_projection(Pid) -> any()</tt></p>
|
||||
</div>
|
||||
|
||||
<h3 class="function"><a name="test_react_to_env-1">test_react_to_env/1</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>test_react_to_env(Pid) -> any()</tt></p>
|
||||
|
@ -143,13 +167,13 @@ distributed state of a single Machi Chain Replication chain.</p>
|
|||
<p><tt>test_read_latest_public_projection(Pid, ReadRepairP) -> any()</tt></p>
|
||||
</div>
|
||||
|
||||
<h3 class="function"><a name="test_write_proposed_projection-1">test_write_proposed_projection/1</a></h3>
|
||||
<h3 class="function"><a name="test_write_public_projection-2">test_write_public_projection/2</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>test_write_proposed_projection(Pid) -> any()</tt></p>
|
||||
<p><tt>test_write_public_projection(Pid, Proj) -> any()</tt></p>
|
||||
</div>
|
||||
<hr>
|
||||
|
||||
<div class="navbar"><a name="#navbar_bottom"></a><table width="100%" border="0" cellspacing="0" cellpadding="2" summary="navigation bar"><tr><td><a href="overview-summary.html" target="overviewFrame">Overview</a></td><td><a href="http://www.erlang.org/"><img src="erlang.png" align="right" border="0" alt="erlang logo"></a></td></tr></table></div>
|
||||
<p><i>Generated by EDoc, Apr 8 2015, 17:31:11.</i></p>
|
||||
<p><i>Generated by EDoc, May 20 2015, 11:11:34.</i></p>
|
||||
</body>
|
||||
</html>
|
||||
|
|
49
edoc/machi_chain_repair.html
Normal file
49
edoc/machi_chain_repair.html
Normal file
|
@ -0,0 +1,49 @@
|
|||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||
<title>Module machi_chain_repair</title>
|
||||
<link rel="stylesheet" type="text/css" href="stylesheet.css" title="EDoc">
|
||||
</head>
|
||||
<body bgcolor="white">
|
||||
<div class="navbar"><a name="#navbar_top"></a><table width="100%" border="0" cellspacing="0" cellpadding="2" summary="navigation bar"><tr><td><a href="overview-summary.html" target="overviewFrame">Overview</a></td><td><a href="http://www.erlang.org/"><img src="erlang.png" align="right" border="0" alt="erlang logo"></a></td></tr></table></div>
|
||||
<hr>
|
||||
|
||||
<h1>Module machi_chain_repair</h1>
|
||||
<ul class="index"><li><a href="#description">Description</a></li><li><a href="#index">Function Index</a></li><li><a href="#functions">Function Details</a></li></ul>Erlang API for the Machi FLU TCP protocol version 1, with a
|
||||
proxy-process style API for hiding messy details such as TCP
|
||||
connection/disconnection with the remote Machi server.
|
||||
|
||||
|
||||
<h2><a name="description">Description</a></h2><p>Erlang API for the Machi FLU TCP protocol version 1, with a
|
||||
proxy-process style API for hiding messy details such as TCP
|
||||
connection/disconnection with the remote Machi server.</p>
|
||||
|
||||
<p>Machi is intentionally avoiding using distributed Erlang for
|
||||
Machi's communication. This design decision makes Erlang-side code
|
||||
more difficult & complex, but it's the price to pay for some
|
||||
language independence. Later in Machi's life cycle, we need to
|
||||
(re-)implement some components in a non-Erlang/BEAM-based language.</p>
|
||||
|
||||
This module implements a "man in the middle" proxy between the
|
||||
Erlang client and Machi server (which is on the "far side" of a TCP
|
||||
connection to somewhere). This proxy process will always execute
|
||||
on the same Erlang node as the Erlang client that uses it. The
|
||||
proxy is intended to be a stable, long-lived process that survives
|
||||
TCP communication problems with the remote server.
|
||||
<h2><a name="index">Function Index</a></h2>
|
||||
<table width="100%" border="1" cellspacing="0" cellpadding="2" summary="function index"><tr><td valign="top"><a href="#repair-7">repair/7</a></td><td></td></tr>
|
||||
</table>
|
||||
|
||||
<h2><a name="functions">Function Details</a></h2>
|
||||
|
||||
<h3 class="function"><a name="repair-7">repair/7</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>repair(ConsistencyMode, Src, Repairing, UPI, MembersDict, ETS, Opts) -> any()</tt></p>
|
||||
</div>
|
||||
<hr>
|
||||
|
||||
<div class="navbar"><a name="#navbar_bottom"></a><table width="100%" border="0" cellspacing="0" cellpadding="2" summary="navigation bar"><tr><td><a href="overview-summary.html" target="overviewFrame">Overview</a></td><td><a href="http://www.erlang.org/"><img src="erlang.png" align="right" border="0" alt="erlang logo"></a></td></tr></table></div>
|
||||
<p><i>Generated by EDoc, May 20 2015, 11:11:34.</i></p>
|
||||
</body>
|
||||
</html>
|
|
@ -166,6 +166,6 @@ list.</p>
|
|||
<hr>
|
||||
|
||||
<div class="navbar"><a name="#navbar_bottom"></a><table width="100%" border="0" cellspacing="0" cellpadding="2" summary="navigation bar"><tr><td><a href="overview-summary.html" target="overviewFrame">Overview</a></td><td><a href="http://www.erlang.org/"><img src="erlang.png" align="right" border="0" alt="erlang logo"></a></td></tr></table></div>
|
||||
<p><i>Generated by EDoc, Apr 8 2015, 17:31:11.</i></p>
|
||||
<p><i>Generated by EDoc, May 20 2015, 11:11:34.</i></p>
|
||||
</body>
|
||||
</html>
|
||||
|
|
170
edoc/machi_cr_client.html
Normal file
170
edoc/machi_cr_client.html
Normal file
|
@ -0,0 +1,170 @@
|
|||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||
<title>Module machi_cr_client</title>
|
||||
<link rel="stylesheet" type="text/css" href="stylesheet.css" title="EDoc">
|
||||
</head>
|
||||
<body bgcolor="white">
|
||||
<div class="navbar"><a name="#navbar_top"></a><table width="100%" border="0" cellspacing="0" cellpadding="2" summary="navigation bar"><tr><td><a href="overview-summary.html" target="overviewFrame">Overview</a></td><td><a href="http://www.erlang.org/"><img src="erlang.png" align="right" border="0" alt="erlang logo"></a></td></tr></table></div>
|
||||
<hr>
|
||||
|
||||
<h1>Module machi_cr_client</h1>
|
||||
<ul class="index"><li><a href="#description">Description</a></li><li><a href="#index">Function Index</a></li><li><a href="#functions">Function Details</a></li></ul>Erlang API for the Machi client-implemented Chain Replication
|
||||
(CORFU-style) protocol.
|
||||
|
||||
<p><b>Behaviours:</b> <a href="gen_server.html"><tt>gen_server</tt></a>.</p>
|
||||
|
||||
<h2><a name="description">Description</a></h2><p>Erlang API for the Machi client-implemented Chain Replication
|
||||
(CORFU-style) protocol.</p>
|
||||
|
||||
<p>The major operation processing is implemented in a state machine-like
|
||||
manner. Before attempting an operation <code>X</code>, there's an initial
|
||||
operation <code>pre-X</code> that takes care of updating the epoch id,
|
||||
restarting client protocol proxies, and if there's any server
|
||||
instability (e.g. some server is wedged), then insert some sleep
|
||||
time. When the chain appears to have stabilized, then we try the <code>X</code>
|
||||
operation again.</p>
|
||||
|
||||
<p>Function name for the <code>pre-X</code> stuff is usually <code>X()</code>, and the
|
||||
function name for the <code>X</code> stuff is usually <code>X2()</code>. (I.e., the <code>X</code>
|
||||
stuff follows after <code>pre-X</code> and therefore has a <code>2</code> suffix on the
|
||||
function name.)</p>
|
||||
|
||||
In the case of read repair, there are two stages: find the value to
|
||||
perform the repair, then perform the repair writes. In the case of
|
||||
the repair writes, the <code>pre-X</code> function is named <code>read_repair3()</code>,
|
||||
and the <code>X</code> function is named <code>read_repair4()</code>.
|
||||
|
||||
<h2><a name="index">Function Index</a></h2>
|
||||
<table width="100%" border="1" cellspacing="0" cellpadding="2" summary="function index"><tr><td valign="top"><a href="#append_chunk-3">append_chunk/3</a></td><td>Append a chunk (binary- or iolist-style) of data to a file
|
||||
with <code>Prefix</code>.</td></tr>
|
||||
<tr><td valign="top"><a href="#append_chunk-4">append_chunk/4</a></td><td>Append a chunk (binary- or iolist-style) of data to a file
|
||||
with <code>Prefix</code>.</td></tr>
|
||||
<tr><td valign="top"><a href="#append_chunk_extra-4">append_chunk_extra/4</a></td><td>Append a chunk (binary- or iolist-style) of data to a file
|
||||
with <code>Prefix</code>.</td></tr>
|
||||
<tr><td valign="top"><a href="#append_chunk_extra-5">append_chunk_extra/5</a></td><td>Append a chunk (binary- or iolist-style) of data to a file
|
||||
with <code>Prefix</code>.</td></tr>
|
||||
<tr><td valign="top"><a href="#checksum_list-2">checksum_list/2</a></td><td>Fetch the list of chunk checksums for <code>File</code>.</td></tr>
|
||||
<tr><td valign="top"><a href="#checksum_list-3">checksum_list/3</a></td><td>Fetch the list of chunk checksums for <code>File</code>.</td></tr>
|
||||
<tr><td valign="top"><a href="#code_change-3">code_change/3</a></td><td></td></tr>
|
||||
<tr><td valign="top"><a href="#handle_call-3">handle_call/3</a></td><td></td></tr>
|
||||
<tr><td valign="top"><a href="#handle_cast-2">handle_cast/2</a></td><td></td></tr>
|
||||
<tr><td valign="top"><a href="#handle_info-2">handle_info/2</a></td><td></td></tr>
|
||||
<tr><td valign="top"><a href="#init-1">init/1</a></td><td></td></tr>
|
||||
<tr><td valign="top"><a href="#list_files-1">list_files/1</a></td><td>Fetch the list of all files on the remote FLU.</td></tr>
|
||||
<tr><td valign="top"><a href="#list_files-2">list_files/2</a></td><td>Fetch the list of all files on the remote FLU.</td></tr>
|
||||
<tr><td valign="top"><a href="#quit-1">quit/1</a></td><td>Quit & close the connection to remote FLU and stop our
|
||||
proxy process.</td></tr>
|
||||
<tr><td valign="top"><a href="#read_chunk-4">read_chunk/4</a></td><td></td></tr>
|
||||
<tr><td valign="top"><a href="#read_chunk-5">read_chunk/5</a></td><td>Read a chunk of data of size <code>Size</code> from <code>File</code> at <code>Offset</code>.</td></tr>
|
||||
<tr><td valign="top"><a href="#start_link-1">start_link/1</a></td><td>Start a local, long-lived process that will be our steady
|
||||
& reliable communication proxy with the fickle & flaky
|
||||
remote Machi server.</td></tr>
|
||||
<tr><td valign="top"><a href="#terminate-2">terminate/2</a></td><td></td></tr>
|
||||
</table>
|
||||
|
||||
<h2><a name="functions">Function Details</a></h2>
|
||||
|
||||
<h3 class="function"><a name="append_chunk-3">append_chunk/3</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>append_chunk(PidSpec, Prefix, Chunk) -> any()</tt></p>
|
||||
</div><p>Append a chunk (binary- or iolist-style) of data to a file
|
||||
with <code>Prefix</code>.</p>
|
||||
|
||||
<h3 class="function"><a name="append_chunk-4">append_chunk/4</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>append_chunk(PidSpec, Prefix, Chunk, Timeout) -> any()</tt></p>
|
||||
</div><p>Append a chunk (binary- or iolist-style) of data to a file
|
||||
with <code>Prefix</code>.</p>
|
||||
|
||||
<h3 class="function"><a name="append_chunk_extra-4">append_chunk_extra/4</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>append_chunk_extra(PidSpec, Prefix, Chunk, ChunkExtra) -> any()</tt></p>
|
||||
</div><p>Append a chunk (binary- or iolist-style) of data to a file
|
||||
with <code>Prefix</code>.</p>
|
||||
|
||||
<h3 class="function"><a name="append_chunk_extra-5">append_chunk_extra/5</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>append_chunk_extra(PidSpec, Prefix, Chunk, ChunkExtra, Timeout) -> any()</tt></p>
|
||||
</div><p>Append a chunk (binary- or iolist-style) of data to a file
|
||||
with <code>Prefix</code>.</p>
|
||||
|
||||
<h3 class="function"><a name="checksum_list-2">checksum_list/2</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>checksum_list(PidSpec, File) -> any()</tt></p>
|
||||
</div><p>Fetch the list of chunk checksums for <code>File</code>.</p>
|
||||
|
||||
<h3 class="function"><a name="checksum_list-3">checksum_list/3</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>checksum_list(PidSpec, File, Timeout) -> any()</tt></p>
|
||||
</div><p>Fetch the list of chunk checksums for <code>File</code>.</p>
|
||||
|
||||
<h3 class="function"><a name="code_change-3">code_change/3</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>code_change(OldVsn, S, Extra) -> any()</tt></p>
|
||||
</div>
|
||||
|
||||
<h3 class="function"><a name="handle_call-3">handle_call/3</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>handle_call(Request, From, S) -> any()</tt></p>
|
||||
</div>
|
||||
|
||||
<h3 class="function"><a name="handle_cast-2">handle_cast/2</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>handle_cast(Msg, S) -> any()</tt></p>
|
||||
</div>
|
||||
|
||||
<h3 class="function"><a name="handle_info-2">handle_info/2</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>handle_info(Info, S) -> any()</tt></p>
|
||||
</div>
|
||||
|
||||
<h3 class="function"><a name="init-1">init/1</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>init(X1) -> any()</tt></p>
|
||||
</div>
|
||||
|
||||
<h3 class="function"><a name="list_files-1">list_files/1</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>list_files(PidSpec) -> any()</tt></p>
|
||||
</div><p>Fetch the list of all files on the remote FLU.</p>
|
||||
|
||||
<h3 class="function"><a name="list_files-2">list_files/2</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>list_files(PidSpec, Timeout) -> any()</tt></p>
|
||||
</div><p>Fetch the list of all files on the remote FLU.</p>
|
||||
|
||||
<h3 class="function"><a name="quit-1">quit/1</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>quit(PidSpec) -> any()</tt></p>
|
||||
</div><p>Quit & close the connection to remote FLU and stop our
|
||||
proxy process.</p>
|
||||
|
||||
<h3 class="function"><a name="read_chunk-4">read_chunk/4</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>read_chunk(PidSpec, File, Offset, Size) -> any()</tt></p>
|
||||
</div>
|
||||
|
||||
<h3 class="function"><a name="read_chunk-5">read_chunk/5</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>read_chunk(PidSpec, File, Offset, Size, Timeout) -> any()</tt></p>
|
||||
</div><p>Read a chunk of data of size <code>Size</code> from <code>File</code> at <code>Offset</code>.</p>
|
||||
|
||||
<h3 class="function"><a name="start_link-1">start_link/1</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>start_link(P_srvr_list) -> any()</tt></p>
|
||||
</div><p>Start a local, long-lived process that will be our steady
|
||||
& reliable communication proxy with the fickle & flaky
|
||||
remote Machi server.</p>
|
||||
|
||||
<h3 class="function"><a name="terminate-2">terminate/2</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>terminate(Reason, State) -> any()</tt></p>
|
||||
</div>
|
||||
<hr>
|
||||
|
||||
<div class="navbar"><a name="#navbar_bottom"></a><table width="100%" border="0" cellspacing="0" cellpadding="2" summary="navigation bar"><tr><td><a href="overview-summary.html" target="overviewFrame">Overview</a></td><td><a href="http://www.erlang.org/"><img src="erlang.png" align="right" border="0" alt="erlang logo"></a></td></tr></table></div>
|
||||
<p><i>Generated by EDoc, May 20 2015, 11:11:34.</i></p>
|
||||
</body>
|
||||
</html>
|
|
@ -32,20 +32,47 @@ services are accessed using the same single TCP port.</p>
|
|||
|
||||
<p>The FLU is named after the CORFU server "FLU" or "FLash Unit" server.</p>
|
||||
|
||||
TODO There is one major missing feature in this FLU implementation:
|
||||
<p>TODO There is a major missing feature in this FLU implementation:
|
||||
there is no "write-once" enforcement for any position in a Machi
|
||||
file. At the moment, we rely on correct behavior of the client
|
||||
& the sequencer to avoid overwriting data. In the Real World,
|
||||
however, all Machi file data is supposed to be exactly write-once
|
||||
to avoid problems with bugs, wire protocol corruption, malicious
|
||||
clients, etc.
|
||||
clients, etc.</p>
|
||||
|
||||
<p>TODO The per-file metadata tuple store is missing from this implementation.</p>
|
||||
|
||||
<p>TODO Section 4.1 ("The FLU") of the Machi design doc suggests that
|
||||
the FLU keep track of the epoch number of the last file write (and
|
||||
perhaps last metadata write), as an optimization for inter-FLU data
|
||||
replication/chain repair.</p>
|
||||
|
||||
TODO Section 4.2 ("The Sequencer") says that the sequencer must
|
||||
change its file assignments to new & unique names whenever we move
|
||||
to wedge state. This is not yet implemented. In the current
|
||||
Erlang process scheme (which will probably be changing soon), a
|
||||
simple implementation would stop all existing processes that are
|
||||
running run_seq_append_server().
|
||||
<h2><a name="index">Function Index</a></h2>
|
||||
<table width="100%" border="1" cellspacing="0" cellpadding="2" summary="function index"><tr><td valign="top"><a href="#start_link-1">start_link/1</a></td><td></td></tr>
|
||||
<table width="100%" border="1" cellspacing="0" cellpadding="2" summary="function index"><tr><td valign="top"><a href="#make_listener_regname-1">make_listener_regname/1</a></td><td></td></tr>
|
||||
<tr><td valign="top"><a href="#make_projection_server_regname-1">make_projection_server_regname/1</a></td><td></td></tr>
|
||||
<tr><td valign="top"><a href="#start_link-1">start_link/1</a></td><td></td></tr>
|
||||
<tr><td valign="top"><a href="#stop-1">stop/1</a></td><td></td></tr>
|
||||
<tr><td valign="top"><a href="#update_wedge_state-3">update_wedge_state/3</a></td><td></td></tr>
|
||||
</table>
|
||||
|
||||
<h2><a name="functions">Function Details</a></h2>
|
||||
|
||||
<h3 class="function"><a name="make_listener_regname-1">make_listener_regname/1</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>make_listener_regname(BaseName) -> any()</tt></p>
|
||||
</div>
|
||||
|
||||
<h3 class="function"><a name="make_projection_server_regname-1">make_projection_server_regname/1</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>make_projection_server_regname(BaseName) -> any()</tt></p>
|
||||
</div>
|
||||
|
||||
<h3 class="function"><a name="start_link-1">start_link/1</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>start_link(Rest) -> any()</tt></p>
|
||||
|
@ -55,9 +82,14 @@ services are accessed using the same single TCP port.</p>
|
|||
<div class="spec">
|
||||
<p><tt>stop(Pid) -> any()</tt></p>
|
||||
</div>
|
||||
|
||||
<h3 class="function"><a name="update_wedge_state-3">update_wedge_state/3</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>update_wedge_state(PidSpec, Boolean, EpochId) -> any()</tt></p>
|
||||
</div>
|
||||
<hr>
|
||||
|
||||
<div class="navbar"><a name="#navbar_bottom"></a><table width="100%" border="0" cellspacing="0" cellpadding="2" summary="navigation bar"><tr><td><a href="overview-summary.html" target="overviewFrame">Overview</a></td><td><a href="http://www.erlang.org/"><img src="erlang.png" align="right" border="0" alt="erlang logo"></a></td></tr></table></div>
|
||||
<p><i>Generated by EDoc, Apr 8 2015, 17:31:11.</i></p>
|
||||
<p><i>Generated by EDoc, May 20 2015, 11:11:34.</i></p>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -48,6 +48,10 @@
|
|||
<p><tt>epoch_num() = -1 | non_neg_integer()</tt></p>
|
||||
|
||||
|
||||
<h3 class="typedecl"><a name="type-error_general">error_general()</a></h3>
|
||||
<p><tt>error_general() = bad_arg | wedged</tt></p>
|
||||
|
||||
|
||||
<h3 class="typedecl"><a name="type-file_info">file_info()</a></h3>
|
||||
<p><tt>file_info() = {<a href="#type-file_size">file_size()</a>, <a href="#type-file_name_s">file_name_s()</a>}</tt></p>
|
||||
|
||||
|
@ -80,6 +84,10 @@
|
|||
<p><tt>inet_port() = <a href="inet.html#type-port_number">inet:port_number()</a></tt></p>
|
||||
|
||||
|
||||
<h3 class="typedecl"><a name="type-port_wrap">port_wrap()</a></h3>
|
||||
<p><tt>port_wrap() = {w, atom(), term()}</tt></p>
|
||||
|
||||
|
||||
<h3 class="typedecl"><a name="type-projection">projection()</a></h3>
|
||||
<p><tt>projection() = #projection_v1{}</tt></p>
|
||||
|
||||
|
@ -93,16 +101,23 @@
|
|||
with <code>Prefix</code>.</td></tr>
|
||||
<tr><td valign="top"><a href="#append_chunk-5">append_chunk/5</a></td><td>Append a chunk (binary- or iolist-style) of data to a file
|
||||
with <code>Prefix</code>.</td></tr>
|
||||
<tr><td valign="top"><a href="#append_chunk_extra-5">append_chunk_extra/5</a></td><td>Append a chunk (binary- or iolist-style) of data to a file
|
||||
with <code>Prefix</code> and also request an additional <code>Extra</code> bytes.</td></tr>
|
||||
<tr><td valign="top"><a href="#append_chunk_extra-6">append_chunk_extra/6</a></td><td>Append a chunk (binary- or iolist-style) of data to a file
|
||||
with <code>Prefix</code> and also request an additional <code>Extra</code> bytes.</td></tr>
|
||||
<tr><td valign="top"><a href="#checksum_list-3">checksum_list/3</a></td><td>Fetch the list of chunk checksums for <code>File</code>.</td></tr>
|
||||
<tr><td valign="top"><a href="#checksum_list-4">checksum_list/4</a></td><td>Fetch the list of chunk checksums for <code>File</code>.</td></tr>
|
||||
<tr><td valign="top"><a href="#connect-1">connect/1</a></td><td></td></tr>
|
||||
<tr><td valign="top"><a href="#connected_p-1">connected_p/1</a></td><td></td></tr>
|
||||
<tr><td valign="top"><a href="#delete_migration-3">delete_migration/3</a></td><td>Restricted API: Delete a file after it has been successfully
|
||||
migrated.</td></tr>
|
||||
<tr><td valign="top"><a href="#delete_migration-4">delete_migration/4</a></td><td>Restricted API: Delete a file after it has been successfully
|
||||
migrated.</td></tr>
|
||||
<tr><td valign="top"><a href="#disconnect-1">disconnect/1</a></td><td></td></tr>
|
||||
<tr><td valign="top"><a href="#get_all_projections-2">get_all_projections/2</a></td><td>Get all projections from the FLU's projection store.</td></tr>
|
||||
<tr><td valign="top"><a href="#get_all_projections-3">get_all_projections/3</a></td><td>Get all projections from the FLU's projection store.</td></tr>
|
||||
<tr><td valign="top"><a href="#get_latest_epoch-2">get_latest_epoch/2</a></td><td>Get the latest epoch number + checksum from the FLU's projection store.</td></tr>
|
||||
<tr><td valign="top"><a href="#get_latest_epoch-3">get_latest_epoch/3</a></td><td>Get the latest epoch number + checksum from the FLU's projection store.</td></tr>
|
||||
<tr><td valign="top"><a href="#get_latest_epochid-2">get_latest_epochid/2</a></td><td>Get the latest epoch number + checksum from the FLU's projection store.</td></tr>
|
||||
<tr><td valign="top"><a href="#get_latest_epochid-3">get_latest_epochid/3</a></td><td>Get the latest epoch number + checksum from the FLU's projection store.</td></tr>
|
||||
<tr><td valign="top"><a href="#list_all_projections-2">list_all_projections/2</a></td><td>Get all epoch numbers from the FLU's projection store.</td></tr>
|
||||
<tr><td valign="top"><a href="#list_all_projections-3">list_all_projections/3</a></td><td>Get all epoch numbers from the FLU's projection store.</td></tr>
|
||||
<tr><td valign="top"><a href="#list_files-2">list_files/2</a></td><td>Fetch the list of all files on the remote FLU.</td></tr>
|
||||
|
@ -118,6 +133,8 @@
|
|||
erasure coded.</td></tr>
|
||||
<tr><td valign="top"><a href="#trunc_hack-4">trunc_hack/4</a></td><td>Restricted API: Truncate a file after it has been successfully
|
||||
erasure coded.</td></tr>
|
||||
<tr><td valign="top"><a href="#wedge_status-1">wedge_status/1</a></td><td>Fetch the wedge status from the remote FLU.</td></tr>
|
||||
<tr><td valign="top"><a href="#wedge_status-2">wedge_status/2</a></td><td>Fetch the wedge status from the remote FLU.</td></tr>
|
||||
<tr><td valign="top"><a href="#write_chunk-5">write_chunk/5</a></td><td>Restricted API: Write a chunk of already-sequenced data to
|
||||
<code>File</code> at <code>Offset</code>.</td></tr>
|
||||
<tr><td valign="top"><a href="#write_chunk-6">write_chunk/6</a></td><td>Restricted API: Write a chunk of already-sequenced data to
|
||||
|
@ -130,41 +147,78 @@
|
|||
|
||||
<h3 class="function"><a name="append_chunk-4">append_chunk/4</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>append_chunk(Sock::port(), EpochID::<a href="#type-epoch_id">epoch_id()</a>, Prefix::<a href="#type-file_prefix">file_prefix()</a>, Chunk::<a href="#type-chunk">chunk()</a>) -> {ok, <a href="#type-chunk_pos">chunk_pos()</a>} | {error, term()}</tt><br></p>
|
||||
<p><tt>append_chunk(Sock::<a href="#type-port_wrap">port_wrap()</a>, EpochID::<a href="#type-epoch_id">epoch_id()</a>, Prefix::<a href="#type-file_prefix">file_prefix()</a>, Chunk::<a href="#type-chunk">chunk()</a>) -> {ok, <a href="#type-chunk_pos">chunk_pos()</a>} | {error, <a href="#type-error_general">error_general()</a>} | {error, term()}</tt><br></p>
|
||||
</div><p>Append a chunk (binary- or iolist-style) of data to a file
|
||||
with <code>Prefix</code>.</p>
|
||||
|
||||
<h3 class="function"><a name="append_chunk-5">append_chunk/5</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>append_chunk(Host::<a href="#type-inet_host">inet_host()</a>, TcpPort::<a href="#type-inet_port">inet_port()</a>, EpochID::<a href="#type-epoch_id">epoch_id()</a>, Prefix::<a href="#type-file_prefix">file_prefix()</a>, Chunk::<a href="#type-chunk">chunk()</a>) -> {ok, <a href="#type-chunk_pos">chunk_pos()</a>} | {error, term()}</tt><br></p>
|
||||
<p><tt>append_chunk(Host::<a href="#type-inet_host">inet_host()</a>, TcpPort::<a href="#type-inet_port">inet_port()</a>, EpochID::<a href="#type-epoch_id">epoch_id()</a>, Prefix::<a href="#type-file_prefix">file_prefix()</a>, Chunk::<a href="#type-chunk">chunk()</a>) -> {ok, <a href="#type-chunk_pos">chunk_pos()</a>} | {error, <a href="#type-error_general">error_general()</a>} | {error, term()}</tt><br></p>
|
||||
</div><p>Append a chunk (binary- or iolist-style) of data to a file
|
||||
with <code>Prefix</code>.</p>
|
||||
|
||||
<h3 class="function"><a name="append_chunk_extra-5">append_chunk_extra/5</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>append_chunk_extra(Sock::<a href="#type-port_wrap">port_wrap()</a>, EpochID::<a href="#type-epoch_id">epoch_id()</a>, Prefix::<a href="#type-file_prefix">file_prefix()</a>, Chunk::<a href="#type-chunk">chunk()</a>, ChunkExtra::<a href="#type-chunk_size">chunk_size()</a>) -> {ok, <a href="#type-chunk_pos">chunk_pos()</a>} | {error, <a href="#type-error_general">error_general()</a>} | {error, term()}</tt><br></p>
|
||||
</div><p><p>Append a chunk (binary- or iolist-style) of data to a file
|
||||
with <code>Prefix</code> and also request an additional <code>Extra</code> bytes.</p>
|
||||
|
||||
For example, if the <code>Chunk</code> size is 1 KByte and <code>Extra</code> is 4K Bytes, then
|
||||
the file offsets that follow <code>Chunk</code>'s position for the following 4K will
|
||||
be reserved by the file sequencer for later write(s) by the
|
||||
<code>write_chunk()</code> API.</p>
|
||||
|
||||
<h3 class="function"><a name="append_chunk_extra-6">append_chunk_extra/6</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>append_chunk_extra(Host::<a href="#type-inet_host">inet_host()</a>, TcpPort::<a href="#type-inet_port">inet_port()</a>, EpochID::<a href="#type-epoch_id">epoch_id()</a>, Prefix::<a href="#type-file_prefix">file_prefix()</a>, Chunk::<a href="#type-chunk">chunk()</a>, ChunkExtra::<a href="#type-chunk_size">chunk_size()</a>) -> {ok, <a href="#type-chunk_pos">chunk_pos()</a>} | {error, <a href="#type-error_general">error_general()</a>} | {error, term()}</tt><br></p>
|
||||
</div><p><p>Append a chunk (binary- or iolist-style) of data to a file
|
||||
with <code>Prefix</code> and also request an additional <code>Extra</code> bytes.</p>
|
||||
|
||||
For example, if the <code>Chunk</code> size is 1 KByte and <code>Extra</code> is 4K Bytes, then
|
||||
the file offsets that follow <code>Chunk</code>'s position for the following 4K will
|
||||
be reserved by the file sequencer for later write(s) by the
|
||||
<code>write_chunk()</code> API.</p>
|
||||
|
||||
<h3 class="function"><a name="checksum_list-3">checksum_list/3</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>checksum_list(Sock::port(), EpochID::<a href="#type-epoch_id">epoch_id()</a>, File::<a href="#type-file_name">file_name()</a>) -> {ok, [<a href="#type-chunk_csum">chunk_csum()</a>]} | {error, term()}</tt><br></p>
|
||||
<p><tt>checksum_list(Sock::<a href="#type-port_wrap">port_wrap()</a>, EpochID::<a href="#type-epoch_id">epoch_id()</a>, File::<a href="#type-file_name">file_name()</a>) -> {ok, [<a href="#type-chunk_csum">chunk_csum()</a>]} | {error, <a href="#type-error_general">error_general()</a> | no_such_file | partial_read} | {error, term()}</tt><br></p>
|
||||
</div><p>Fetch the list of chunk checksums for <code>File</code>.</p>
|
||||
|
||||
<h3 class="function"><a name="checksum_list-4">checksum_list/4</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>checksum_list(Host::<a href="#type-inet_host">inet_host()</a>, TcpPort::<a href="#type-inet_port">inet_port()</a>, EpochID::<a href="#type-epoch_id">epoch_id()</a>, File::<a href="#type-file_name">file_name()</a>) -> {ok, [<a href="#type-chunk_csum">chunk_csum()</a>]} | {error, term()}</tt><br></p>
|
||||
<p><tt>checksum_list(Host::<a href="#type-inet_host">inet_host()</a>, TcpPort::<a href="#type-inet_port">inet_port()</a>, EpochID::<a href="#type-epoch_id">epoch_id()</a>, File::<a href="#type-file_name">file_name()</a>) -> {ok, [<a href="#type-chunk_csum">chunk_csum()</a>]} | {error, <a href="#type-error_general">error_general()</a> | no_such_file} | {error, term()}</tt><br></p>
|
||||
</div><p>Fetch the list of chunk checksums for <code>File</code>.</p>
|
||||
|
||||
<h3 class="function"><a name="connect-1">connect/1</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>connect(P_srvr) -> any()</tt></p>
|
||||
</div>
|
||||
|
||||
<h3 class="function"><a name="connected_p-1">connected_p/1</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>connected_p(X1) -> any()</tt></p>
|
||||
</div>
|
||||
|
||||
<h3 class="function"><a name="delete_migration-3">delete_migration/3</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>delete_migration(Sock::port(), EpochID::<a href="#type-epoch_id">epoch_id()</a>, File::<a href="#type-file_name">file_name()</a>) -> ok | {error, term()}</tt><br></p>
|
||||
<p><tt>delete_migration(Sock::<a href="#type-port_wrap">port_wrap()</a>, EpochID::<a href="#type-epoch_id">epoch_id()</a>, File::<a href="#type-file_name">file_name()</a>) -> ok | {error, <a href="#type-error_general">error_general()</a> | no_such_file} | {error, term()}</tt><br></p>
|
||||
</div><p>Restricted API: Delete a file after it has been successfully
|
||||
migrated.</p>
|
||||
|
||||
<h3 class="function"><a name="delete_migration-4">delete_migration/4</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>delete_migration(Host::<a href="#type-inet_host">inet_host()</a>, TcpPort::<a href="#type-inet_port">inet_port()</a>, EpochID::<a href="#type-epoch_id">epoch_id()</a>, File::<a href="#type-file_name">file_name()</a>) -> ok | {error, term()}</tt><br></p>
|
||||
<p><tt>delete_migration(Host::<a href="#type-inet_host">inet_host()</a>, TcpPort::<a href="#type-inet_port">inet_port()</a>, EpochID::<a href="#type-epoch_id">epoch_id()</a>, File::<a href="#type-file_name">file_name()</a>) -> ok | {error, <a href="#type-error_general">error_general()</a> | no_such_file} | {error, term()}</tt><br></p>
|
||||
</div><p>Restricted API: Delete a file after it has been successfully
|
||||
migrated.</p>
|
||||
|
||||
<h3 class="function"><a name="disconnect-1">disconnect/1</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>disconnect(WS) -> any()</tt></p>
|
||||
</div>
|
||||
|
||||
<h3 class="function"><a name="get_all_projections-2">get_all_projections/2</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>get_all_projections(Sock::port(), ProjType::<a href="#type-projection_type">projection_type()</a>) -> {ok, [<a href="#type-projection">projection()</a>]} | {error, term()}</tt><br></p>
|
||||
<p><tt>get_all_projections(Sock::<a href="#type-port_wrap">port_wrap()</a>, ProjType::<a href="#type-projection_type">projection_type()</a>) -> {ok, [<a href="#type-projection">projection()</a>]} | {error, term()}</tt><br></p>
|
||||
</div><p>Get all projections from the FLU's projection store.</p>
|
||||
|
||||
<h3 class="function"><a name="get_all_projections-3">get_all_projections/3</a></h3>
|
||||
|
@ -172,19 +226,19 @@
|
|||
<p><tt>get_all_projections(Host::<a href="#type-inet_host">inet_host()</a>, TcpPort::<a href="#type-inet_port">inet_port()</a>, ProjType::<a href="#type-projection_type">projection_type()</a>) -> {ok, [<a href="#type-projection">projection()</a>]} | {error, term()}</tt><br></p>
|
||||
</div><p>Get all projections from the FLU's projection store.</p>
|
||||
|
||||
<h3 class="function"><a name="get_latest_epoch-2">get_latest_epoch/2</a></h3>
|
||||
<h3 class="function"><a name="get_latest_epochid-2">get_latest_epochid/2</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>get_latest_epoch(Sock::port(), ProjType::<a href="#type-projection_type">projection_type()</a>) -> {ok, <a href="#type-epoch_id">epoch_id()</a>} | {error, term()}</tt><br></p>
|
||||
<p><tt>get_latest_epochid(Sock::<a href="#type-port_wrap">port_wrap()</a>, ProjType::<a href="#type-projection_type">projection_type()</a>) -> {ok, <a href="#type-epoch_id">epoch_id()</a>} | {error, term()}</tt><br></p>
|
||||
</div><p>Get the latest epoch number + checksum from the FLU's projection store.</p>
|
||||
|
||||
<h3 class="function"><a name="get_latest_epoch-3">get_latest_epoch/3</a></h3>
|
||||
<h3 class="function"><a name="get_latest_epochid-3">get_latest_epochid/3</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>get_latest_epoch(Host::<a href="#type-inet_host">inet_host()</a>, TcpPort::<a href="#type-inet_port">inet_port()</a>, ProjType::<a href="#type-projection_type">projection_type()</a>) -> {ok, <a href="#type-epoch_id">epoch_id()</a>} | {error, term()}</tt><br></p>
|
||||
<p><tt>get_latest_epochid(Host::<a href="#type-inet_host">inet_host()</a>, TcpPort::<a href="#type-inet_port">inet_port()</a>, ProjType::<a href="#type-projection_type">projection_type()</a>) -> {ok, <a href="#type-epoch_id">epoch_id()</a>} | {error, term()}</tt><br></p>
|
||||
</div><p>Get the latest epoch number + checksum from the FLU's projection store.</p>
|
||||
|
||||
<h3 class="function"><a name="list_all_projections-2">list_all_projections/2</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>list_all_projections(Sock::port(), ProjType::<a href="#type-projection_type">projection_type()</a>) -> {ok, [non_neg_integer()]} | {error, term()}</tt><br></p>
|
||||
<p><tt>list_all_projections(Sock::<a href="#type-port_wrap">port_wrap()</a>, ProjType::<a href="#type-projection_type">projection_type()</a>) -> {ok, [non_neg_integer()]} | {error, term()}</tt><br></p>
|
||||
</div><p>Get all epoch numbers from the FLU's projection store.</p>
|
||||
|
||||
<h3 class="function"><a name="list_all_projections-3">list_all_projections/3</a></h3>
|
||||
|
@ -194,7 +248,7 @@
|
|||
|
||||
<h3 class="function"><a name="list_files-2">list_files/2</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>list_files(Sock::port(), EpochID::<a href="#type-epoch_id">epoch_id()</a>) -> {ok, [<a href="#type-file_info">file_info()</a>]} | {error, term()}</tt><br></p>
|
||||
<p><tt>list_files(Sock::<a href="#type-port_wrap">port_wrap()</a>, EpochID::<a href="#type-epoch_id">epoch_id()</a>) -> {ok, [<a href="#type-file_info">file_info()</a>]} | {error, term()}</tt><br></p>
|
||||
</div><p>Fetch the list of all files on the remote FLU.</p>
|
||||
|
||||
<h3 class="function"><a name="list_files-3">list_files/3</a></h3>
|
||||
|
@ -204,22 +258,22 @@
|
|||
|
||||
<h3 class="function"><a name="quit-1">quit/1</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>quit(Sock::port()) -> ok</tt><br></p>
|
||||
<p><tt>quit(Sock::<a href="#type-port_wrap">port_wrap()</a>) -> ok</tt><br></p>
|
||||
</div><p>Quit & close the connection to remote FLU.</p>
|
||||
|
||||
<h3 class="function"><a name="read_chunk-5">read_chunk/5</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>read_chunk(Sock::port(), EpochID::<a href="#type-epoch_id">epoch_id()</a>, File::<a href="#type-file_name">file_name()</a>, Offset::<a href="#type-file_offset">file_offset()</a>, Size::<a href="#type-chunk_size">chunk_size()</a>) -> {ok, <a href="#type-chunk_s">chunk_s()</a>} | {error, term()}</tt><br></p>
|
||||
<p><tt>read_chunk(Sock::<a href="#type-port_wrap">port_wrap()</a>, EpochID::<a href="#type-epoch_id">epoch_id()</a>, File::<a href="#type-file_name">file_name()</a>, Offset::<a href="#type-file_offset">file_offset()</a>, Size::<a href="#type-chunk_size">chunk_size()</a>) -> {ok, <a href="#type-chunk_s">chunk_s()</a>} | {error, <a href="#type-error_general">error_general()</a> | not_written | partial_read} | {error, term()}</tt><br></p>
|
||||
</div><p>Read a chunk of data of size <code>Size</code> from <code>File</code> at <code>Offset</code>.</p>
|
||||
|
||||
<h3 class="function"><a name="read_chunk-6">read_chunk/6</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>read_chunk(Host::<a href="#type-inet_host">inet_host()</a>, TcpPort::<a href="#type-inet_port">inet_port()</a>, EpochID::<a href="#type-epoch_id">epoch_id()</a>, File::<a href="#type-file_name">file_name()</a>, Offset::<a href="#type-file_offset">file_offset()</a>, Size::<a href="#type-chunk_size">chunk_size()</a>) -> {ok, <a href="#type-chunk_s">chunk_s()</a>} | {error, term()}</tt><br></p>
|
||||
<p><tt>read_chunk(Host::<a href="#type-inet_host">inet_host()</a>, TcpPort::<a href="#type-inet_port">inet_port()</a>, EpochID::<a href="#type-epoch_id">epoch_id()</a>, File::<a href="#type-file_name">file_name()</a>, Offset::<a href="#type-file_offset">file_offset()</a>, Size::<a href="#type-chunk_size">chunk_size()</a>) -> {ok, <a href="#type-chunk_s">chunk_s()</a>} | {error, <a href="#type-error_general">error_general()</a> | not_written | partial_read} | {error, term()}</tt><br></p>
|
||||
</div><p>Read a chunk of data of size <code>Size</code> from <code>File</code> at <code>Offset</code>.</p>
|
||||
|
||||
<h3 class="function"><a name="read_latest_projection-2">read_latest_projection/2</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>read_latest_projection(Sock::port(), ProjType::<a href="#type-projection_type">projection_type()</a>) -> {ok, <a href="#type-projection">projection()</a>} | {error, not_written} | {error, term()}</tt><br></p>
|
||||
<p><tt>read_latest_projection(Sock::<a href="#type-port_wrap">port_wrap()</a>, ProjType::<a href="#type-projection_type">projection_type()</a>) -> {ok, <a href="#type-projection">projection()</a>} | {error, not_written} | {error, term()}</tt><br></p>
|
||||
</div><p>Get the latest projection from the FLU's projection store for <code>ProjType</code></p>
|
||||
|
||||
<h3 class="function"><a name="read_latest_projection-3">read_latest_projection/3</a></h3>
|
||||
|
@ -229,41 +283,51 @@
|
|||
|
||||
<h3 class="function"><a name="read_projection-3">read_projection/3</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>read_projection(Sock::port(), ProjType::<a href="#type-projection_type">projection_type()</a>, Epoch::<a href="#type-epoch_num">epoch_num()</a>) -> {ok, <a href="#type-projection">projection()</a>} | {error, written} | {error, term()}</tt><br></p>
|
||||
<p><tt>read_projection(Sock::<a href="#type-port_wrap">port_wrap()</a>, ProjType::<a href="#type-projection_type">projection_type()</a>, Epoch::<a href="#type-epoch_num">epoch_num()</a>) -> {ok, <a href="#type-projection">projection()</a>} | {error, not_written} | {error, term()}</tt><br></p>
|
||||
</div><p>Read a projection <code>Proj</code> of type <code>ProjType</code>.</p>
|
||||
|
||||
<h3 class="function"><a name="read_projection-4">read_projection/4</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>read_projection(Host::<a href="#type-inet_host">inet_host()</a>, TcpPort::<a href="#type-inet_port">inet_port()</a>, ProjType::<a href="#type-projection_type">projection_type()</a>, Epoch::<a href="#type-epoch_num">epoch_num()</a>) -> {ok, <a href="#type-projection">projection()</a>} | {error, written} | {error, term()}</tt><br></p>
|
||||
<p><tt>read_projection(Host::<a href="#type-inet_host">inet_host()</a>, TcpPort::<a href="#type-inet_port">inet_port()</a>, ProjType::<a href="#type-projection_type">projection_type()</a>, Epoch::<a href="#type-epoch_num">epoch_num()</a>) -> {ok, <a href="#type-projection">projection()</a>} | {error, not_written} | {error, term()}</tt><br></p>
|
||||
</div><p>Read a projection <code>Proj</code> of type <code>ProjType</code>.</p>
|
||||
|
||||
<h3 class="function"><a name="trunc_hack-3">trunc_hack/3</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>trunc_hack(Sock::port(), EpochID::<a href="#type-epoch_id">epoch_id()</a>, File::<a href="#type-file_name">file_name()</a>) -> ok | {error, term()}</tt><br></p>
|
||||
<p><tt>trunc_hack(Sock::<a href="#type-port_wrap">port_wrap()</a>, EpochID::<a href="#type-epoch_id">epoch_id()</a>, File::<a href="#type-file_name">file_name()</a>) -> ok | {error, <a href="#type-error_general">error_general()</a> | no_such_file} | {error, term()}</tt><br></p>
|
||||
</div><p>Restricted API: Truncate a file after it has been successfully
|
||||
erasure coded.</p>
|
||||
|
||||
<h3 class="function"><a name="trunc_hack-4">trunc_hack/4</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>trunc_hack(Host::<a href="#type-inet_host">inet_host()</a>, TcpPort::<a href="#type-inet_port">inet_port()</a>, EpochID::<a href="#type-epoch_id">epoch_id()</a>, File::<a href="#type-file_name">file_name()</a>) -> ok | {error, term()}</tt><br></p>
|
||||
<p><tt>trunc_hack(Host::<a href="#type-inet_host">inet_host()</a>, TcpPort::<a href="#type-inet_port">inet_port()</a>, EpochID::<a href="#type-epoch_id">epoch_id()</a>, File::<a href="#type-file_name">file_name()</a>) -> ok | {error, <a href="#type-error_general">error_general()</a> | no_such_file} | {error, term()}</tt><br></p>
|
||||
</div><p>Restricted API: Truncate a file after it has been successfully
|
||||
erasure coded.</p>
|
||||
|
||||
<h3 class="function"><a name="wedge_status-1">wedge_status/1</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>wedge_status(Sock::<a href="#type-port_wrap">port_wrap()</a>) -> {ok, {boolean(), <a href="#type-pv1_epoch">pv1_epoch()</a>}} | {error, term()}</tt><br></p>
|
||||
</div><p>Fetch the wedge status from the remote FLU.</p>
|
||||
|
||||
<h3 class="function"><a name="wedge_status-2">wedge_status/2</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>wedge_status(Host::<a href="#type-inet_host">inet_host()</a>, TcpPort::<a href="#type-inet_port">inet_port()</a>) -> {ok, {boolean(), <a href="#type-pv1_epoch">pv1_epoch()</a>}} | {error, term()}</tt><br></p>
|
||||
</div><p>Fetch the wedge status from the remote FLU.</p>
|
||||
|
||||
<h3 class="function"><a name="write_chunk-5">write_chunk/5</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>write_chunk(Sock::port(), EpochID::<a href="#type-epoch_id">epoch_id()</a>, File::<a href="#type-file_name">file_name()</a>, Offset::<a href="#type-file_offset">file_offset()</a>, Chunk::<a href="#type-chunk">chunk()</a>) -> ok | {error, term()}</tt><br></p>
|
||||
<p><tt>write_chunk(Sock::<a href="#type-port_wrap">port_wrap()</a>, EpochID::<a href="#type-epoch_id">epoch_id()</a>, File::<a href="#type-file_name">file_name()</a>, Offset::<a href="#type-file_offset">file_offset()</a>, Chunk::<a href="#type-chunk">chunk()</a>) -> ok | {error, <a href="#type-error_general">error_general()</a>} | {error, term()}</tt><br></p>
|
||||
</div><p>Restricted API: Write a chunk of already-sequenced data to
|
||||
<code>File</code> at <code>Offset</code>.</p>
|
||||
|
||||
<h3 class="function"><a name="write_chunk-6">write_chunk/6</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>write_chunk(Host::<a href="#type-inet_host">inet_host()</a>, TcpPort::<a href="#type-inet_port">inet_port()</a>, EpochID::<a href="#type-epoch_id">epoch_id()</a>, File::<a href="#type-file_name">file_name()</a>, Offset::<a href="#type-file_offset">file_offset()</a>, Chunk::<a href="#type-chunk">chunk()</a>) -> ok | {error, term()}</tt><br></p>
|
||||
<p><tt>write_chunk(Host::<a href="#type-inet_host">inet_host()</a>, TcpPort::<a href="#type-inet_port">inet_port()</a>, EpochID::<a href="#type-epoch_id">epoch_id()</a>, File::<a href="#type-file_name">file_name()</a>, Offset::<a href="#type-file_offset">file_offset()</a>, Chunk::<a href="#type-chunk">chunk()</a>) -> ok | {error, <a href="#type-error_general">error_general()</a>} | {error, term()}</tt><br></p>
|
||||
</div><p>Restricted API: Write a chunk of already-sequenced data to
|
||||
<code>File</code> at <code>Offset</code>.</p>
|
||||
|
||||
<h3 class="function"><a name="write_projection-3">write_projection/3</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>write_projection(Sock::port(), ProjType::<a href="#type-projection_type">projection_type()</a>, Proj::<a href="#type-projection">projection()</a>) -> ok | {error, written} | {error, term()}</tt><br></p>
|
||||
<p><tt>write_projection(Sock::<a href="#type-port_wrap">port_wrap()</a>, ProjType::<a href="#type-projection_type">projection_type()</a>, Proj::<a href="#type-projection">projection()</a>) -> ok | {error, written} | {error, term()}</tt><br></p>
|
||||
</div><p>Write a projection <code>Proj</code> of type <code>ProjType</code>.</p>
|
||||
|
||||
<h3 class="function"><a name="write_projection-4">write_projection/4</a></h3>
|
||||
|
@ -273,6 +337,6 @@
|
|||
<hr>
|
||||
|
||||
<div class="navbar"><a name="#navbar_bottom"></a><table width="100%" border="0" cellspacing="0" cellpadding="2" summary="navigation bar"><tr><td><a href="overview-summary.html" target="overviewFrame">Overview</a></td><td><a href="http://www.erlang.org/"><img src="erlang.png" align="right" border="0" alt="erlang logo"></a></td></tr></table></div>
|
||||
<p><i>Generated by EDoc, Apr 8 2015, 17:31:11.</i></p>
|
||||
<p><i>Generated by EDoc, May 20 2015, 11:11:34.</i></p>
|
||||
</body>
|
||||
</html>
|
||||
|
|
77
edoc/machi_flu_psup.html
Normal file
77
edoc/machi_flu_psup.html
Normal file
|
@ -0,0 +1,77 @@
|
|||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||
<title>Module machi_flu_psup</title>
|
||||
<link rel="stylesheet" type="text/css" href="stylesheet.css" title="EDoc">
|
||||
</head>
|
||||
<body bgcolor="white">
|
||||
<div class="navbar"><a name="#navbar_top"></a><table width="100%" border="0" cellspacing="0" cellpadding="2" summary="navigation bar"><tr><td><a href="overview-summary.html" target="overviewFrame">Overview</a></td><td><a href="http://www.erlang.org/"><img src="erlang.png" align="right" border="0" alt="erlang logo"></a></td></tr></table></div>
|
||||
<hr>
|
||||
|
||||
<h1>Module machi_flu_psup</h1>
|
||||
<ul class="index"><li><a href="#description">Description</a></li><li><a href="#index">Function Index</a></li><li><a href="#functions">Function Details</a></li></ul>Supervisor for Machi FLU servers and their related support
|
||||
servers.
|
||||
|
||||
<p><b>Behaviours:</b> <a href="supervisor.html"><tt>supervisor</tt></a>.</p>
|
||||
|
||||
<h2><a name="description">Description</a></h2>Supervisor for Machi FLU servers and their related support
|
||||
servers.
|
||||
<h2><a name="index">Function Index</a></h2>
|
||||
<table width="100%" border="1" cellspacing="0" cellpadding="2" summary="function index"><tr><td valign="top"><a href="#init-1">init/1</a></td><td></td></tr>
|
||||
<tr><td valign="top"><a href="#make_mgr_supname-1">make_mgr_supname/1</a></td><td></td></tr>
|
||||
<tr><td valign="top"><a href="#make_p_regname-1">make_p_regname/1</a></td><td></td></tr>
|
||||
<tr><td valign="top"><a href="#make_package_spec-4">make_package_spec/4</a></td><td></td></tr>
|
||||
<tr><td valign="top"><a href="#make_proj_supname-1">make_proj_supname/1</a></td><td></td></tr>
|
||||
<tr><td valign="top"><a href="#start_flu_package-4">start_flu_package/4</a></td><td></td></tr>
|
||||
<tr><td valign="top"><a href="#start_link-4">start_link/4</a></td><td></td></tr>
|
||||
<tr><td valign="top"><a href="#stop_flu_package-1">stop_flu_package/1</a></td><td></td></tr>
|
||||
</table>
|
||||
|
||||
<h2><a name="functions">Function Details</a></h2>
|
||||
|
||||
<h3 class="function"><a name="init-1">init/1</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>init(X1) -> any()</tt></p>
|
||||
</div>
|
||||
|
||||
<h3 class="function"><a name="make_mgr_supname-1">make_mgr_supname/1</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>make_mgr_supname(MgrName) -> any()</tt></p>
|
||||
</div>
|
||||
|
||||
<h3 class="function"><a name="make_p_regname-1">make_p_regname/1</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>make_p_regname(FluName) -> any()</tt></p>
|
||||
</div>
|
||||
|
||||
<h3 class="function"><a name="make_package_spec-4">make_package_spec/4</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>make_package_spec(FluName, TcpPort, DataDir, Props) -> any()</tt></p>
|
||||
</div>
|
||||
|
||||
<h3 class="function"><a name="make_proj_supname-1">make_proj_supname/1</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>make_proj_supname(ProjName) -> any()</tt></p>
|
||||
</div>
|
||||
|
||||
<h3 class="function"><a name="start_flu_package-4">start_flu_package/4</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>start_flu_package(FluName, TcpPort, DataDir, Props) -> any()</tt></p>
|
||||
</div>
|
||||
|
||||
<h3 class="function"><a name="start_link-4">start_link/4</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>start_link(FluName, TcpPort, DataDir, Props) -> any()</tt></p>
|
||||
</div>
|
||||
|
||||
<h3 class="function"><a name="stop_flu_package-1">stop_flu_package/1</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>stop_flu_package(FluName) -> any()</tt></p>
|
||||
</div>
|
||||
<hr>
|
||||
|
||||
<div class="navbar"><a name="#navbar_bottom"></a><table width="100%" border="0" cellspacing="0" cellpadding="2" summary="navigation bar"><tr><td><a href="overview-summary.html" target="overviewFrame">Overview</a></td><td><a href="http://www.erlang.org/"><img src="erlang.png" align="right" border="0" alt="erlang logo"></a></td></tr></table></div>
|
||||
<p><i>Generated by EDoc, May 20 2015, 11:11:34.</i></p>
|
||||
</body>
|
||||
</html>
|
|
@ -36,6 +36,6 @@
|
|||
<hr>
|
||||
|
||||
<div class="navbar"><a name="#navbar_bottom"></a><table width="100%" border="0" cellspacing="0" cellpadding="2" summary="navigation bar"><tr><td><a href="overview-summary.html" target="overviewFrame">Overview</a></td><td><a href="http://www.erlang.org/"><img src="erlang.png" align="right" border="0" alt="erlang logo"></a></td></tr></table></div>
|
||||
<p><i>Generated by EDoc, Apr 8 2015, 17:31:11.</i></p>
|
||||
<p><i>Generated by EDoc, May 20 2015, 11:11:34.</i></p>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -17,12 +17,14 @@
|
|||
<h2><a name="index">Function Index</a></h2>
|
||||
<table width="100%" border="1" cellspacing="0" cellpadding="2" summary="function index"><tr><td valign="top"><a href="#compare-2">compare/2</a></td><td>Compare two projection records for equality (assuming that the
|
||||
checksum element has been correctly calculated).</td></tr>
|
||||
<tr><td valign="top"><a href="#make_projection_summary-1">make_projection_summary/1</a></td><td>Create a proplist-style summary of a projection record.</td></tr>
|
||||
<tr><td valign="top"><a href="#make_members_dict-1">make_members_dict/1</a></td><td>Make a <code>p_srvr_dict()</code> out of a list of <code>p_srvr()</code> or out of a
|
||||
<code>p_srvr_dict()</code>.</td></tr>
|
||||
<tr><td valign="top"><a href="#make_summary-1">make_summary/1</a></td><td>Create a proplist-style summary of a projection record.</td></tr>
|
||||
<tr><td valign="top"><a href="#new-6">new/6</a></td><td>Create a new projection record.</td></tr>
|
||||
<tr><td valign="top"><a href="#new-7">new/7</a></td><td>Create a new projection record.</td></tr>
|
||||
<tr><td valign="top"><a href="#new-8">new/8</a></td><td>Create a new projection record.</td></tr>
|
||||
<tr><td valign="top"><a href="#update_projection_checksum-1">update_projection_checksum/1</a></td><td>Update the checksum element of a projection record.</td></tr>
|
||||
<tr><td valign="top"><a href="#update_projection_dbg2-2">update_projection_dbg2/2</a></td><td>Update the <code>dbg2</code> element of a projection record.</td></tr>
|
||||
<tr><td valign="top"><a href="#update_checksum-1">update_checksum/1</a></td><td>Update the checksum element of a projection record.</td></tr>
|
||||
<tr><td valign="top"><a href="#update_dbg2-2">update_dbg2/2</a></td><td>Update the <code>dbg2</code> element of a projection record.</td></tr>
|
||||
</table>
|
||||
|
||||
<h2><a name="functions">Function Details</a></h2>
|
||||
|
@ -30,41 +32,63 @@
|
|||
<h3 class="function"><a name="compare-2">compare/2</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>compare(Projection_v1::#projection_v1{}, Projection_v1::#projection_v1{}) -> integer()</tt><br></p>
|
||||
</div><p>Compare two projection records for equality (assuming that the
|
||||
</div><p><p>Compare two projection records for equality (assuming that the
|
||||
checksum element has been correctly calculated).</p>
|
||||
|
||||
<h3 class="function"><a name="make_projection_summary-1">make_projection_summary/1</a></h3>
|
||||
The name "compare" is probably too close to "rank"? This
|
||||
comparison has nothing to do with projection ranking.</p>
|
||||
|
||||
<h3 class="function"><a name="make_members_dict-1">make_members_dict/1</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>make_projection_summary(Projection_v1) -> any()</tt></p>
|
||||
<p><tt>make_members_dict(Ps::[<a href="#type-p_srvr">p_srvr()</a>] | <a href="#type-p_srvr_dict">p_srvr_dict()</a>) -> <a href="#type-p_srvr_dict">p_srvr_dict()</a></tt><br></p>
|
||||
</div><p><p>Make a <code>p_srvr_dict()</code> out of a list of <code>p_srvr()</code> or out of a
|
||||
<code>p_srvr_dict()</code>.</p>
|
||||
|
||||
<p>If <code>Ps</code> is a <code>p_srvr_dict()</code>, then this function is usually a
|
||||
no-op. However, if someone has tampered with the list and screwed
|
||||
up its order, then we should fix it so <code>orddict</code> can work
|
||||
correctly.</p>
|
||||
|
||||
If <code>Ps</code> is simply <code>list(p_srvr())</code>, in which case we'll convert it
|
||||
to a <code>p_srvr_dict()</code>.</p>
|
||||
|
||||
<h3 class="function"><a name="make_summary-1">make_summary/1</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>make_summary(Projection_v1) -> any()</tt></p>
|
||||
</div><p>Create a proplist-style summary of a projection record.</p>
|
||||
|
||||
<h3 class="function"><a name="new-6">new/6</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>new(MyName, All_list, UPI_list, Down_list, Repairing_list, Ps) -> any()</tt></p>
|
||||
<p><tt>new(MyName, MemberDict, UPI_list, Down_list, Repairing_list, Ps) -> any()</tt></p>
|
||||
</div><p>Create a new projection record.</p>
|
||||
|
||||
<h3 class="function"><a name="new-7">new/7</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>new(EpochNum, MyName, All_list, Down_list, UPI_list, Repairing_list, Dbg) -> any()</tt></p>
|
||||
<p><tt>new(EpochNum, MyName, MemberDict, Down_list, UPI_list, Repairing_list, Dbg) -> any()</tt></p>
|
||||
</div><p>Create a new projection record.</p>
|
||||
|
||||
<h3 class="function"><a name="new-8">new/8</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>new(EpochNum, MyName, All_list0, Down_list, UPI_list, Repairing_list, Dbg, Dbg2) -> any()</tt></p>
|
||||
</div><p>Create a new projection record.</p>
|
||||
<p><tt>new(EpochNum, MyName, MembersDict0, Down_list, UPI_list, Repairing_list, Dbg, Dbg2) -> any()</tt></p>
|
||||
</div><p><p>Create a new projection record.</p>
|
||||
|
||||
<h3 class="function"><a name="update_projection_checksum-1">update_projection_checksum/1</a></h3>
|
||||
The <code>MemberDict0</code> argument may be a true <code>p_srvr_dict()</code> (i.e, it
|
||||
is a well-formed <code>orddict</code> with the correct 2-tuple key-value form)
|
||||
or it may be simply <code>list(p_srvr())</code>, in which case we'll convert it
|
||||
to a <code>p_srvr_dict()</code>.</p>
|
||||
|
||||
<h3 class="function"><a name="update_checksum-1">update_checksum/1</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>update_projection_checksum(P) -> any()</tt></p>
|
||||
<p><tt>update_checksum(P) -> any()</tt></p>
|
||||
</div><p>Update the checksum element of a projection record.</p>
|
||||
|
||||
<h3 class="function"><a name="update_projection_dbg2-2">update_projection_dbg2/2</a></h3>
|
||||
<h3 class="function"><a name="update_dbg2-2">update_dbg2/2</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>update_projection_dbg2(P, Dbg2) -> any()</tt></p>
|
||||
<p><tt>update_dbg2(P, Dbg2) -> any()</tt></p>
|
||||
</div><p>Update the <code>dbg2</code> element of a projection record.</p>
|
||||
<hr>
|
||||
|
||||
<div class="navbar"><a name="#navbar_bottom"></a><table width="100%" border="0" cellspacing="0" cellpadding="2" summary="navigation bar"><tr><td><a href="overview-summary.html" target="overviewFrame">Overview</a></td><td><a href="http://www.erlang.org/"><img src="erlang.png" align="right" border="0" alt="erlang logo"></a></td></tr></table></div>
|
||||
<p><i>Generated by EDoc, Apr 8 2015, 17:31:11.</i></p>
|
||||
<p><i>Generated by EDoc, May 20 2015, 11:11:34.</i></p>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -34,8 +34,8 @@ module's API.</p>
|
|||
<table width="100%" border="1" cellspacing="0" cellpadding="2" summary="function index"><tr><td valign="top"><a href="#code_change-3">code_change/3</a></td><td></td></tr>
|
||||
<tr><td valign="top"><a href="#get_all_projections-2">get_all_projections/2</a></td><td>Fetch all projection records of type <code>ProjType</code>.</td></tr>
|
||||
<tr><td valign="top"><a href="#get_all_projections-3">get_all_projections/3</a></td><td>Fetch all projection records of type <code>ProjType</code>.</td></tr>
|
||||
<tr><td valign="top"><a href="#get_latest_epoch-2">get_latest_epoch/2</a></td><td>Fetch the latest epoch number + checksum for type <code>ProjType</code>.</td></tr>
|
||||
<tr><td valign="top"><a href="#get_latest_epoch-3">get_latest_epoch/3</a></td><td>Fetch the latest epoch number + checksum for type <code>ProjType</code>.</td></tr>
|
||||
<tr><td valign="top"><a href="#get_latest_epochid-2">get_latest_epochid/2</a></td><td>Fetch the latest epoch number + checksum for type <code>ProjType</code>.</td></tr>
|
||||
<tr><td valign="top"><a href="#get_latest_epochid-3">get_latest_epochid/3</a></td><td>Fetch the latest epoch number + checksum for type <code>ProjType</code>.</td></tr>
|
||||
<tr><td valign="top"><a href="#handle_call-3">handle_call/3</a></td><td></td></tr>
|
||||
<tr><td valign="top"><a href="#handle_cast-2">handle_cast/2</a></td><td></td></tr>
|
||||
<tr><td valign="top"><a href="#handle_info-2">handle_info/2</a></td><td></td></tr>
|
||||
|
@ -46,6 +46,7 @@ module's API.</p>
|
|||
<tr><td valign="top"><a href="#read-4">read/4</a></td><td>Fetch the projection record type <code>ProjType</code> for epoch number <code>Epoch</code> .</td></tr>
|
||||
<tr><td valign="top"><a href="#read_latest_projection-2">read_latest_projection/2</a></td><td>Fetch the latest projection record for type <code>ProjType</code>.</td></tr>
|
||||
<tr><td valign="top"><a href="#read_latest_projection-3">read_latest_projection/3</a></td><td>Fetch the latest projection record for type <code>ProjType</code>.</td></tr>
|
||||
<tr><td valign="top"><a href="#set_wedge_notify_pid-2">set_wedge_notify_pid/2</a></td><td></td></tr>
|
||||
<tr><td valign="top"><a href="#start_link-3">start_link/3</a></td><td>Start a new projection store server.</td></tr>
|
||||
<tr><td valign="top"><a href="#terminate-2">terminate/2</a></td><td></td></tr>
|
||||
<tr><td valign="top"><a href="#write-3">write/3</a></td><td>Write the projection record type <code>ProjType</code> for epoch number <code>Epoch</code> .</td></tr>
|
||||
|
@ -69,14 +70,14 @@ module's API.</p>
|
|||
<p><tt>get_all_projections(PidSpec, ProjType, Timeout) -> any()</tt></p>
|
||||
</div><p>Fetch all projection records of type <code>ProjType</code>.</p>
|
||||
|
||||
<h3 class="function"><a name="get_latest_epoch-2">get_latest_epoch/2</a></h3>
|
||||
<h3 class="function"><a name="get_latest_epochid-2">get_latest_epochid/2</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>get_latest_epoch(PidSpec, ProjType) -> any()</tt></p>
|
||||
<p><tt>get_latest_epochid(PidSpec, ProjType) -> any()</tt></p>
|
||||
</div><p>Fetch the latest epoch number + checksum for type <code>ProjType</code>.</p>
|
||||
|
||||
<h3 class="function"><a name="get_latest_epoch-3">get_latest_epoch/3</a></h3>
|
||||
<h3 class="function"><a name="get_latest_epochid-3">get_latest_epochid/3</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>get_latest_epoch(PidSpec, ProjType, Timeout) -> any()</tt></p>
|
||||
<p><tt>get_latest_epochid(PidSpec, ProjType, Timeout) -> any()</tt></p>
|
||||
</div><p>Fetch the latest epoch number + checksum for type <code>ProjType</code>.
|
||||
projection.</p>
|
||||
|
||||
|
@ -130,6 +131,11 @@ module's API.</p>
|
|||
<p><tt>read_latest_projection(PidSpec, ProjType, Timeout) -> any()</tt></p>
|
||||
</div><p>Fetch the latest projection record for type <code>ProjType</code>.</p>
|
||||
|
||||
<h3 class="function"><a name="set_wedge_notify_pid-2">set_wedge_notify_pid/2</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>set_wedge_notify_pid(PidSpec, NotifyWedgeStateChanges) -> any()</tt></p>
|
||||
</div>
|
||||
|
||||
<h3 class="function"><a name="start_link-3">start_link/3</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>start_link(RegName, DataDir, NotifyWedgeStateChanges) -> any()</tt></p>
|
||||
|
@ -158,6 +164,6 @@ module's API.</p>
|
|||
<hr>
|
||||
|
||||
<div class="navbar"><a name="#navbar_bottom"></a><table width="100%" border="0" cellspacing="0" cellpadding="2" summary="navigation bar"><tr><td><a href="overview-summary.html" target="overviewFrame">Overview</a></td><td><a href="http://www.erlang.org/"><img src="erlang.png" align="right" border="0" alt="erlang logo"></a></td></tr></table></div>
|
||||
<p><i>Generated by EDoc, Apr 8 2015, 17:31:11.</i></p>
|
||||
<p><i>Generated by EDoc, May 20 2015, 11:11:34.</i></p>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -37,13 +37,19 @@ language independence. Later in Machi's life cycle, we need to
|
|||
with <code>Prefix</code>.</td></tr>
|
||||
<tr><td valign="top"><a href="#append_chunk-5">append_chunk/5</a></td><td>Append a chunk (binary- or iolist-style) of data to a file
|
||||
with <code>Prefix</code>.</td></tr>
|
||||
<tr><td valign="top"><a href="#append_chunk_extra-5">append_chunk_extra/5</a></td><td>Append a chunk (binary- or iolist-style) of data to a file
|
||||
with <code>Prefix</code>.</td></tr>
|
||||
<tr><td valign="top"><a href="#append_chunk_extra-6">append_chunk_extra/6</a></td><td>Append a chunk (binary- or iolist-style) of data to a file
|
||||
with <code>Prefix</code>.</td></tr>
|
||||
<tr><td valign="top"><a href="#checksum_list-3">checksum_list/3</a></td><td>Fetch the list of chunk checksums for <code>File</code>.</td></tr>
|
||||
<tr><td valign="top"><a href="#checksum_list-4">checksum_list/4</a></td><td>Fetch the list of chunk checksums for <code>File</code>.</td></tr>
|
||||
<tr><td valign="top"><a href="#code_change-3">code_change/3</a></td><td></td></tr>
|
||||
<tr><td valign="top"><a href="#get_all_projections-2">get_all_projections/2</a></td><td>Get all projections from the FLU's projection store.</td></tr>
|
||||
<tr><td valign="top"><a href="#get_all_projections-3">get_all_projections/3</a></td><td>Get all projections from the FLU's projection store.</td></tr>
|
||||
<tr><td valign="top"><a href="#get_latest_epoch-2">get_latest_epoch/2</a></td><td>Get the latest epoch number + checksum from the FLU's projection store.</td></tr>
|
||||
<tr><td valign="top"><a href="#get_latest_epoch-3">get_latest_epoch/3</a></td><td>Get the latest epoch number + checksum from the FLU's projection store.</td></tr>
|
||||
<tr><td valign="top"><a href="#get_epoch_id-1">get_epoch_id/1</a></td><td>Get the <code>epoch_id()</code> of the FLU's current/latest projection.</td></tr>
|
||||
<tr><td valign="top"><a href="#get_epoch_id-2">get_epoch_id/2</a></td><td>Get the <code>epoch_id()</code> of the FLU's current/latest projection.</td></tr>
|
||||
<tr><td valign="top"><a href="#get_latest_epochid-2">get_latest_epochid/2</a></td><td>Get the latest epoch number + checksum from the FLU's projection store.</td></tr>
|
||||
<tr><td valign="top"><a href="#get_latest_epochid-3">get_latest_epochid/3</a></td><td>Get the latest epoch number + checksum from the FLU's projection store.</td></tr>
|
||||
<tr><td valign="top"><a href="#handle_call-3">handle_call/3</a></td><td></td></tr>
|
||||
<tr><td valign="top"><a href="#handle_cast-2">handle_cast/2</a></td><td></td></tr>
|
||||
<tr><td valign="top"><a href="#handle_info-2">handle_info/2</a></td><td></td></tr>
|
||||
|
@ -63,7 +69,15 @@ language independence. Later in Machi's life cycle, we need to
|
|||
<tr><td valign="top"><a href="#start_link-1">start_link/1</a></td><td>Start a local, long-lived process that will be our steady
|
||||
& reliable communication proxy with the fickle & flaky
|
||||
remote Machi server.</td></tr>
|
||||
<tr><td valign="top"><a href="#start_proxies-1">start_proxies/1</a></td><td></td></tr>
|
||||
<tr><td valign="top"><a href="#stop_proxies-1">stop_proxies/1</a></td><td></td></tr>
|
||||
<tr><td valign="top"><a href="#terminate-2">terminate/2</a></td><td></td></tr>
|
||||
<tr><td valign="top"><a href="#wedge_status-1">wedge_status/1</a></td><td>Fetch the wedge status from the remote FLU.</td></tr>
|
||||
<tr><td valign="top"><a href="#wedge_status-2">wedge_status/2</a></td><td>Fetch the wedge status from the remote FLU.</td></tr>
|
||||
<tr><td valign="top"><a href="#write_chunk-5">write_chunk/5</a></td><td>Write a chunk (binary- or iolist-style) of data to a file
|
||||
with <code>Prefix</code> at <code>Offset</code>.</td></tr>
|
||||
<tr><td valign="top"><a href="#write_chunk-6">write_chunk/6</a></td><td>Write a chunk (binary- or iolist-style) of data to a file
|
||||
with <code>Prefix</code> at <code>Offset</code>.</td></tr>
|
||||
<tr><td valign="top"><a href="#write_projection-3">write_projection/3</a></td><td>Write a projection <code>Proj</code> of type <code>ProjType</code>.</td></tr>
|
||||
<tr><td valign="top"><a href="#write_projection-4">write_projection/4</a></td><td>Write a projection <code>Proj</code> of type <code>ProjType</code>.</td></tr>
|
||||
</table>
|
||||
|
@ -82,6 +96,18 @@ language independence. Later in Machi's life cycle, we need to
|
|||
</div><p>Append a chunk (binary- or iolist-style) of data to a file
|
||||
with <code>Prefix</code>.</p>
|
||||
|
||||
<h3 class="function"><a name="append_chunk_extra-5">append_chunk_extra/5</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>append_chunk_extra(PidSpec, EpochID, Prefix, Chunk, ChunkExtra) -> any()</tt></p>
|
||||
</div><p>Append a chunk (binary- or iolist-style) of data to a file
|
||||
with <code>Prefix</code>.</p>
|
||||
|
||||
<h3 class="function"><a name="append_chunk_extra-6">append_chunk_extra/6</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>append_chunk_extra(PidSpec, EpochID, Prefix, Chunk, ChunkExtra, Timeout) -> any()</tt></p>
|
||||
</div><p>Append a chunk (binary- or iolist-style) of data to a file
|
||||
with <code>Prefix</code>.</p>
|
||||
|
||||
<h3 class="function"><a name="checksum_list-3">checksum_list/3</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>checksum_list(PidSpec, EpochID, File) -> any()</tt></p>
|
||||
|
@ -107,14 +133,24 @@ language independence. Later in Machi's life cycle, we need to
|
|||
<p><tt>get_all_projections(PidSpec, ProjType, Timeout) -> any()</tt></p>
|
||||
</div><p>Get all projections from the FLU's projection store.</p>
|
||||
|
||||
<h3 class="function"><a name="get_latest_epoch-2">get_latest_epoch/2</a></h3>
|
||||
<h3 class="function"><a name="get_epoch_id-1">get_epoch_id/1</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>get_latest_epoch(PidSpec, ProjType) -> any()</tt></p>
|
||||
<p><tt>get_epoch_id(PidSpec) -> any()</tt></p>
|
||||
</div><p>Get the <code>epoch_id()</code> of the FLU's current/latest projection.</p>
|
||||
|
||||
<h3 class="function"><a name="get_epoch_id-2">get_epoch_id/2</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>get_epoch_id(PidSpec, Timeout) -> any()</tt></p>
|
||||
</div><p>Get the <code>epoch_id()</code> of the FLU's current/latest projection.</p>
|
||||
|
||||
<h3 class="function"><a name="get_latest_epochid-2">get_latest_epochid/2</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>get_latest_epochid(PidSpec, ProjType) -> any()</tt></p>
|
||||
</div><p>Get the latest epoch number + checksum from the FLU's projection store.</p>
|
||||
|
||||
<h3 class="function"><a name="get_latest_epoch-3">get_latest_epoch/3</a></h3>
|
||||
<h3 class="function"><a name="get_latest_epochid-3">get_latest_epochid/3</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>get_latest_epoch(PidSpec, ProjType, Timeout) -> any()</tt></p>
|
||||
<p><tt>get_latest_epochid(PidSpec, ProjType, Timeout) -> any()</tt></p>
|
||||
</div><p>Get the latest epoch number + checksum from the FLU's projection store.</p>
|
||||
|
||||
<h3 class="function"><a name="handle_call-3">handle_call/3</a></h3>
|
||||
|
@ -200,11 +236,43 @@ language independence. Later in Machi's life cycle, we need to
|
|||
& reliable communication proxy with the fickle & flaky
|
||||
remote Machi server.</p>
|
||||
|
||||
<h3 class="function"><a name="start_proxies-1">start_proxies/1</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>start_proxies(MembersDict) -> any()</tt></p>
|
||||
</div>
|
||||
|
||||
<h3 class="function"><a name="stop_proxies-1">stop_proxies/1</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>stop_proxies(ProxiesDict) -> any()</tt></p>
|
||||
</div>
|
||||
|
||||
<h3 class="function"><a name="terminate-2">terminate/2</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>terminate(Reason, S) -> any()</tt></p>
|
||||
</div>
|
||||
|
||||
<h3 class="function"><a name="wedge_status-1">wedge_status/1</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>wedge_status(PidSpec) -> any()</tt></p>
|
||||
</div><p>Fetch the wedge status from the remote FLU.</p>
|
||||
|
||||
<h3 class="function"><a name="wedge_status-2">wedge_status/2</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>wedge_status(PidSpec, Timeout) -> any()</tt></p>
|
||||
</div><p>Fetch the wedge status from the remote FLU.</p>
|
||||
|
||||
<h3 class="function"><a name="write_chunk-5">write_chunk/5</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>write_chunk(PidSpec, EpochID, File, Offset, Chunk) -> any()</tt></p>
|
||||
</div><p>Write a chunk (binary- or iolist-style) of data to a file
|
||||
with <code>Prefix</code> at <code>Offset</code>.</p>
|
||||
|
||||
<h3 class="function"><a name="write_chunk-6">write_chunk/6</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>write_chunk(PidSpec, EpochID, File, Offset, Chunk, Timeout) -> any()</tt></p>
|
||||
</div><p>Write a chunk (binary- or iolist-style) of data to a file
|
||||
with <code>Prefix</code> at <code>Offset</code>.</p>
|
||||
|
||||
<h3 class="function"><a name="write_projection-3">write_projection/3</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>write_projection(PidSpec, ProjType, Proj) -> any()</tt></p>
|
||||
|
@ -217,6 +285,6 @@ language independence. Later in Machi's life cycle, we need to
|
|||
<hr>
|
||||
|
||||
<div class="navbar"><a name="#navbar_bottom"></a><table width="100%" border="0" cellspacing="0" cellpadding="2" summary="navigation bar"><tr><td><a href="overview-summary.html" target="overviewFrame">Overview</a></td><td><a href="http://www.erlang.org/"><img src="erlang.png" align="right" border="0" alt="erlang logo"></a></td></tr></table></div>
|
||||
<p><i>Generated by EDoc, Apr 8 2015, 17:31:11.</i></p>
|
||||
<p><i>Generated by EDoc, May 20 2015, 11:11:34.</i></p>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -18,6 +18,6 @@
|
|||
the future?<hr>
|
||||
|
||||
<div class="navbar"><a name="#navbar_bottom"></a><table width="100%" border="0" cellspacing="0" cellpadding="2" summary="navigation bar"><tr><td><a href="overview-summary.html" target="overviewFrame">Overview</a></td><td><a href="http://www.erlang.org/"><img src="erlang.png" align="right" border="0" alt="erlang logo"></a></td></tr></table></div>
|
||||
<p><i>Generated by EDoc, Apr 8 2015, 17:31:11.</i></p>
|
||||
<p><i>Generated by EDoc, May 20 2015, 11:11:34.</i></p>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -34,6 +34,6 @@
|
|||
<hr>
|
||||
|
||||
<div class="navbar"><a name="#navbar_bottom"></a><table width="100%" border="0" cellspacing="0" cellpadding="2" summary="navigation bar"><tr><td><a href="overview-summary.html" target="overviewFrame">Overview</a></td><td><a href="http://www.erlang.org/"><img src="erlang.png" align="right" border="0" alt="erlang logo"></a></td></tr></table></div>
|
||||
<p><i>Generated by EDoc, Apr 8 2015, 17:31:11.</i></p>
|
||||
<p><i>Generated by EDoc, May 20 2015, 11:11:34.</i></p>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -30,7 +30,10 @@
|
|||
based on <code>I_size</code>.</td></tr>
|
||||
<tr><td valign="top"><a href="#make_binary-1">make_binary/1</a></td><td>Convert a compatible Erlang data type into a <code>binary()</code> equivalent.</td></tr>
|
||||
<tr><td valign="top"><a href="#make_checksum_filename-2">make_checksum_filename/2</a></td><td>Calculate a checksum file path, by common convention.</td></tr>
|
||||
<tr><td valign="top"><a href="#make_checksum_filename-4">make_checksum_filename/4</a></td><td>Calculate a checksum file path, by common convention.</td></tr>
|
||||
<tr><td valign="top"><a href="#make_config_filename-2">make_config_filename/2</a></td><td>Calculate a config file path, by common convention.</td></tr>
|
||||
<tr><td valign="top"><a href="#make_data_filename-2">make_data_filename/2</a></td><td>Calculate a file data file path, by common convention.</td></tr>
|
||||
<tr><td valign="top"><a href="#make_data_filename-4">make_data_filename/4</a></td><td>Calculate a file data file path, by common convention.</td></tr>
|
||||
<tr><td valign="top"><a href="#make_projection_filename-2">make_projection_filename/2</a></td><td>Calculate a projection store file path, by common convention.</td></tr>
|
||||
<tr><td valign="top"><a href="#make_regname-1">make_regname/1</a></td><td>Create a registered name atom for FLU sequencer internal
|
||||
rendezvous/message passing use.</td></tr>
|
||||
|
@ -45,12 +48,12 @@
|
|||
|
||||
<h3 class="function"><a name="bin_to_hexstr-1">bin_to_hexstr/1</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>bin_to_hexstr(X1) -> any()</tt></p>
|
||||
<p><tt>bin_to_hexstr(X1::binary()) -> string()</tt><br></p>
|
||||
</div><p>Convert a <code>binary()</code> to a hexadecimal string.</p>
|
||||
|
||||
<h3 class="function"><a name="checksum_chunk-1">checksum_chunk/1</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>checksum_chunk(Chunk) -> any()</tt></p>
|
||||
<p><tt>checksum_chunk(Chunk::binary() | iolist()) -> binary()</tt><br></p>
|
||||
</div><p>Calculate a checksum for a chunk of file data.</p>
|
||||
|
||||
<h3 class="function"><a name="connect-2">connect/2</a></h3>
|
||||
|
@ -65,86 +68,101 @@
|
|||
|
||||
<h3 class="function"><a name="hexstr_to_bin-1">hexstr_to_bin/1</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>hexstr_to_bin(S) -> any()</tt></p>
|
||||
<p><tt>hexstr_to_bin(S::string() | binary()) -> binary()</tt><br></p>
|
||||
</div><p>Convert a hexadecimal string to a <code>binary()</code>.</p>
|
||||
|
||||
<h3 class="function"><a name="hexstr_to_int-1">hexstr_to_int/1</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>hexstr_to_int(X) -> any()</tt></p>
|
||||
<p><tt>hexstr_to_int(X::string() | binary()) -> non_neg_integer()</tt><br></p>
|
||||
</div><p>Convert a hexadecimal string to an integer.</p>
|
||||
|
||||
<h3 class="function"><a name="increment_max_filenum-2">increment_max_filenum/2</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>increment_max_filenum(DataDir, Prefix) -> any()</tt></p>
|
||||
<p><tt>increment_max_filenum(DataDir::string(), Prefix::string()) -> ok | {error, term()}</tt><br></p>
|
||||
</div><p>Increase the file size of a config file, which is used as the
|
||||
basis for a minimum sequence number.</p>
|
||||
|
||||
<h3 class="function"><a name="info_msg-2">info_msg/2</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>info_msg(Fmt, Args) -> any()</tt></p>
|
||||
<p><tt>info_msg(Fmt::string(), Args::list()) -> term()</tt><br></p>
|
||||
</div><p>Log an 'info' level message.</p>
|
||||
|
||||
<h3 class="function"><a name="int_to_hexbin-2">int_to_hexbin/2</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>int_to_hexbin(I, I_size) -> any()</tt></p>
|
||||
<p><tt>int_to_hexbin(I::non_neg_integer(), I_size::non_neg_integer()) -> binary()</tt><br></p>
|
||||
</div><p>Convert an integer into a hexadecimal string (in <code>binary()</code>
|
||||
form) whose length is based on <code>I_size</code>.</p>
|
||||
|
||||
<h3 class="function"><a name="int_to_hexstr-2">int_to_hexstr/2</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>int_to_hexstr(I, I_size) -> any()</tt></p>
|
||||
<p><tt>int_to_hexstr(I::non_neg_integer(), I_size::non_neg_integer()) -> string()</tt><br></p>
|
||||
</div><p>Convert an integer into a hexadecimal string whose length is
|
||||
based on <code>I_size</code>.</p>
|
||||
|
||||
<h3 class="function"><a name="make_binary-1">make_binary/1</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>make_binary(X) -> any()</tt></p>
|
||||
<p><tt>make_binary(X::binary() | iolist()) -> binary()</tt><br></p>
|
||||
</div><p>Convert a compatible Erlang data type into a <code>binary()</code> equivalent.</p>
|
||||
|
||||
<h3 class="function"><a name="make_checksum_filename-2">make_checksum_filename/2</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>make_checksum_filename(DataDir, FileName) -> any()</tt></p>
|
||||
<p><tt>make_checksum_filename(DataDir::string(), FileName::[] | string() | binary()) -> string()</tt><br></p>
|
||||
</div><p>Calculate a checksum file path, by common convention.</p>
|
||||
|
||||
<h3 class="function"><a name="make_checksum_filename-4">make_checksum_filename/4</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>make_checksum_filename(DataDir::string(), Prefix::string(), SequencerName::atom() | string() | binary(), FileNum::integer()) -> string()</tt><br></p>
|
||||
</div><p>Calculate a checksum file path, by common convention.</p>
|
||||
|
||||
<h3 class="function"><a name="make_config_filename-2">make_config_filename/2</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>make_config_filename(DataDir::string(), Prefix::string()) -> string()</tt><br></p>
|
||||
</div><p>Calculate a config file path, by common convention.</p>
|
||||
|
||||
<h3 class="function"><a name="make_data_filename-2">make_data_filename/2</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>make_data_filename(DataDir, File) -> any()</tt></p>
|
||||
<p><tt>make_data_filename(DataDir::string(), File::[] | string() | binary()) -> {binary(), string()}</tt><br></p>
|
||||
</div><p>Calculate a file data file path, by common convention.</p>
|
||||
|
||||
<h3 class="function"><a name="make_data_filename-4">make_data_filename/4</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>make_data_filename(DataDir::string(), Prefix::string(), SequencerName::atom() | string() | binary(), FileNum::integer()) -> {binary(), string()}</tt><br></p>
|
||||
</div><p>Calculate a file data file path, by common convention.</p>
|
||||
|
||||
<h3 class="function"><a name="make_projection_filename-2">make_projection_filename/2</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>make_projection_filename(DataDir, File) -> any()</tt></p>
|
||||
<p><tt>make_projection_filename(DataDir::string(), File::[] | string()) -> string()</tt><br></p>
|
||||
</div><p>Calculate a projection store file path, by common convention.</p>
|
||||
|
||||
<h3 class="function"><a name="make_regname-1">make_regname/1</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>make_regname(Prefix) -> any()</tt></p>
|
||||
<p><tt>make_regname(Prefix::binary() | list()) -> atom()</tt><br></p>
|
||||
</div><p>Create a registered name atom for FLU sequencer internal
|
||||
rendezvous/message passing use.</p>
|
||||
|
||||
<h3 class="function"><a name="make_string-1">make_string/1</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>make_string(X) -> any()</tt></p>
|
||||
<p><tt>make_string(X::binary() | iolist()) -> string()</tt><br></p>
|
||||
</div><p>Convert a compatible Erlang data type into a <code>string()</code> equivalent.</p>
|
||||
|
||||
<h3 class="function"><a name="read_max_filenum-2">read_max_filenum/2</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>read_max_filenum(DataDir, Prefix) -> any()</tt></p>
|
||||
<p><tt>read_max_filenum(DataDir::string(), Prefix::string()) -> non_neg_integer()</tt><br></p>
|
||||
</div><p>Read the file size of a config file, which is used as the
|
||||
basis for a minimum sequence number.</p>
|
||||
|
||||
<h3 class="function"><a name="verb-1">verb/1</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>verb(Fmt) -> any()</tt></p>
|
||||
<p><tt>verb(Fmt::string()) -> term()</tt><br></p>
|
||||
</div><p>Log a verbose message.</p>
|
||||
|
||||
<h3 class="function"><a name="verb-2">verb/2</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>verb(Fmt, Args) -> any()</tt></p>
|
||||
<p><tt>verb(Fmt::string(), Args::list()) -> term()</tt><br></p>
|
||||
</div><p>Log a verbose message.</p>
|
||||
<hr>
|
||||
|
||||
<div class="navbar"><a name="#navbar_bottom"></a><table width="100%" border="0" cellspacing="0" cellpadding="2" summary="navigation bar"><tr><td><a href="overview-summary.html" target="overviewFrame">Overview</a></td><td><a href="http://www.erlang.org/"><img src="erlang.png" align="right" border="0" alt="erlang logo"></a></td></tr></table></div>
|
||||
<p><i>Generated by EDoc, Apr 8 2015, 17:31:11.</i></p>
|
||||
<p><i>Generated by EDoc, May 20 2015, 11:11:34.</i></p>
|
||||
</body>
|
||||
</html>
|
||||
|
|
342
edoc/machi_yessir_client.html
Normal file
342
edoc/machi_yessir_client.html
Normal file
|
@ -0,0 +1,342 @@
|
|||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||
<title>Module machi_yessir_client</title>
|
||||
<link rel="stylesheet" type="text/css" href="stylesheet.css" title="EDoc">
|
||||
</head>
|
||||
<body bgcolor="white">
|
||||
<div class="navbar"><a name="#navbar_top"></a><table width="100%" border="0" cellspacing="0" cellpadding="2" summary="navigation bar"><tr><td><a href="overview-summary.html" target="overviewFrame">Overview</a></td><td><a href="http://www.erlang.org/"><img src="erlang.png" align="right" border="0" alt="erlang logo"></a></td></tr></table></div>
|
||||
<hr>
|
||||
|
||||
<h1>Module machi_yessir_client</h1>
|
||||
<ul class="index"><li><a href="#description">Description</a></li><li><a href="#types">Data Types</a></li><li><a href="#index">Function Index</a></li><li><a href="#functions">Function Details</a></li></ul>"Yes, sir!" style dummy/mock client facade.
|
||||
|
||||
|
||||
<h2><a name="description">Description</a></h2>"Yes, sir!" style dummy/mock client facade.
|
||||
<h2><a name="types">Data Types</a></h2>
|
||||
|
||||
<h3 class="typedecl"><a name="type-chunk">chunk()</a></h3>
|
||||
<p><tt>chunk() = binary() | iolist()</tt></p>
|
||||
<p> client can use either</p>
|
||||
|
||||
<h3 class="typedecl"><a name="type-chunk_csum">chunk_csum()</a></h3>
|
||||
<p><tt>chunk_csum() = {<a href="#type-file_offset">file_offset()</a>, <a href="#type-chunk_size">chunk_size()</a>, binary()}</tt></p>
|
||||
|
||||
|
||||
<h3 class="typedecl"><a name="type-chunk_pos">chunk_pos()</a></h3>
|
||||
<p><tt>chunk_pos() = {<a href="#type-file_offset">file_offset()</a>, <a href="#type-chunk_size">chunk_size()</a>, <a href="#type-file_name_s">file_name_s()</a>}</tt></p>
|
||||
|
||||
|
||||
<h3 class="typedecl"><a name="type-chunk_s">chunk_s()</a></h3>
|
||||
<p><tt>chunk_s() = binary()</tt></p>
|
||||
<p> server always uses binary()</p>
|
||||
|
||||
<h3 class="typedecl"><a name="type-chunk_size">chunk_size()</a></h3>
|
||||
<p><tt>chunk_size() = non_neg_integer()</tt></p>
|
||||
|
||||
|
||||
<h3 class="typedecl"><a name="type-epoch_csum">epoch_csum()</a></h3>
|
||||
<p><tt>epoch_csum() = binary()</tt></p>
|
||||
|
||||
|
||||
<h3 class="typedecl"><a name="type-epoch_id">epoch_id()</a></h3>
|
||||
<p><tt>epoch_id() = {<a href="#type-epoch_num">epoch_num()</a>, <a href="#type-epoch_csum">epoch_csum()</a>}</tt></p>
|
||||
|
||||
|
||||
<h3 class="typedecl"><a name="type-epoch_num">epoch_num()</a></h3>
|
||||
<p><tt>epoch_num() = -1 | non_neg_integer()</tt></p>
|
||||
|
||||
|
||||
<h3 class="typedecl"><a name="type-error_general">error_general()</a></h3>
|
||||
<p><tt>error_general() = bad_arg | wedged</tt></p>
|
||||
|
||||
|
||||
<h3 class="typedecl"><a name="type-file_info">file_info()</a></h3>
|
||||
<p><tt>file_info() = {<a href="#type-file_size">file_size()</a>, <a href="#type-file_name_s">file_name_s()</a>}</tt></p>
|
||||
|
||||
|
||||
<h3 class="typedecl"><a name="type-file_name">file_name()</a></h3>
|
||||
<p><tt>file_name() = binary() | list()</tt></p>
|
||||
|
||||
|
||||
<h3 class="typedecl"><a name="type-file_name_s">file_name_s()</a></h3>
|
||||
<p><tt>file_name_s() = binary()</tt></p>
|
||||
<p> server reply</p>
|
||||
|
||||
<h3 class="typedecl"><a name="type-file_offset">file_offset()</a></h3>
|
||||
<p><tt>file_offset() = non_neg_integer()</tt></p>
|
||||
|
||||
|
||||
<h3 class="typedecl"><a name="type-file_prefix">file_prefix()</a></h3>
|
||||
<p><tt>file_prefix() = binary() | list()</tt></p>
|
||||
|
||||
|
||||
<h3 class="typedecl"><a name="type-file_size">file_size()</a></h3>
|
||||
<p><tt>file_size() = non_neg_integer()</tt></p>
|
||||
|
||||
|
||||
<h3 class="typedecl"><a name="type-inet_host">inet_host()</a></h3>
|
||||
<p><tt>inet_host() = <a href="inet.html#type-ip_address">inet:ip_address()</a> | <a href="inet.html#type-hostname">inet:hostname()</a></tt></p>
|
||||
|
||||
|
||||
<h3 class="typedecl"><a name="type-inet_port">inet_port()</a></h3>
|
||||
<p><tt>inet_port() = <a href="inet.html#type-port_number">inet:port_number()</a></tt></p>
|
||||
|
||||
|
||||
<h3 class="typedecl"><a name="type-port_wrap">port_wrap()</a></h3>
|
||||
<p><tt>port_wrap() = {w, atom(), term()}</tt></p>
|
||||
|
||||
|
||||
<h3 class="typedecl"><a name="type-projection">projection()</a></h3>
|
||||
<p><tt>projection() = #projection_v1{}</tt></p>
|
||||
|
||||
|
||||
<h3 class="typedecl"><a name="type-projection_type">projection_type()</a></h3>
|
||||
<p><tt>projection_type() = public | private</tt></p>
|
||||
|
||||
|
||||
<h2><a name="index">Function Index</a></h2>
|
||||
<table width="100%" border="1" cellspacing="0" cellpadding="2" summary="function index"><tr><td valign="top"><a href="#append_chunk-4">append_chunk/4</a></td><td>Append a chunk (binary- or iolist-style) of data to a file
|
||||
with <code>Prefix</code>.</td></tr>
|
||||
<tr><td valign="top"><a href="#append_chunk-5">append_chunk/5</a></td><td>Append a chunk (binary- or iolist-style) of data to a file
|
||||
with <code>Prefix</code>.</td></tr>
|
||||
<tr><td valign="top"><a href="#append_chunk_extra-5">append_chunk_extra/5</a></td><td>Append a chunk (binary- or iolist-style) of data to a file
|
||||
with <code>Prefix</code> and also request an additional <code>Extra</code> bytes.</td></tr>
|
||||
<tr><td valign="top"><a href="#append_chunk_extra-6">append_chunk_extra/6</a></td><td>Append a chunk (binary- or iolist-style) of data to a file
|
||||
with <code>Prefix</code> and also request an additional <code>Extra</code> bytes.</td></tr>
|
||||
<tr><td valign="top"><a href="#checksum_list-3">checksum_list/3</a></td><td>Fetch the list of chunk checksums for <code>File</code>.</td></tr>
|
||||
<tr><td valign="top"><a href="#checksum_list-4">checksum_list/4</a></td><td>Fetch the list of chunk checksums for <code>File</code>.</td></tr>
|
||||
<tr><td valign="top"><a href="#connect-1">connect/1</a></td><td></td></tr>
|
||||
<tr><td valign="top"><a href="#connected_p-1">connected_p/1</a></td><td></td></tr>
|
||||
<tr><td valign="top"><a href="#delete_migration-3">delete_migration/3</a></td><td>Restricted API: Delete a file after it has been successfully
|
||||
migrated.</td></tr>
|
||||
<tr><td valign="top"><a href="#delete_migration-4">delete_migration/4</a></td><td>Restricted API: Delete a file after it has been successfully
|
||||
migrated.</td></tr>
|
||||
<tr><td valign="top"><a href="#disconnect-1">disconnect/1</a></td><td></td></tr>
|
||||
<tr><td valign="top"><a href="#get_all_projections-2">get_all_projections/2</a></td><td>Get all projections from the FLU's projection store.</td></tr>
|
||||
<tr><td valign="top"><a href="#get_all_projections-3">get_all_projections/3</a></td><td>Get all projections from the FLU's projection store.</td></tr>
|
||||
<tr><td valign="top"><a href="#get_latest_epoch-2">get_latest_epoch/2</a></td><td>Get the latest epoch number + checksum from the FLU's projection store.</td></tr>
|
||||
<tr><td valign="top"><a href="#get_latest_epoch-3">get_latest_epoch/3</a></td><td>Get the latest epoch number + checksum from the FLU's projection store.</td></tr>
|
||||
<tr><td valign="top"><a href="#list_all_projections-2">list_all_projections/2</a></td><td>Get all epoch numbers from the FLU's projection store.</td></tr>
|
||||
<tr><td valign="top"><a href="#list_all_projections-3">list_all_projections/3</a></td><td>Get all epoch numbers from the FLU's projection store.</td></tr>
|
||||
<tr><td valign="top"><a href="#list_files-2">list_files/2</a></td><td>Fetch the list of all files on the remote FLU.</td></tr>
|
||||
<tr><td valign="top"><a href="#list_files-3">list_files/3</a></td><td>Fetch the list of all files on the remote FLU.</td></tr>
|
||||
<tr><td valign="top"><a href="#quit-1">quit/1</a></td><td>Quit & close the connection to remote FLU.</td></tr>
|
||||
<tr><td valign="top"><a href="#read_chunk-5">read_chunk/5</a></td><td>Read a chunk of data of size <code>Size</code> from <code>File</code> at <code>Offset</code>.</td></tr>
|
||||
<tr><td valign="top"><a href="#read_chunk-6">read_chunk/6</a></td><td>Read a chunk of data of size <code>Size</code> from <code>File</code> at <code>Offset</code>.</td></tr>
|
||||
<tr><td valign="top"><a href="#read_latest_projection-2">read_latest_projection/2</a></td><td>Get the latest projection from the FLU's projection store for <code>ProjType</code></td></tr>
|
||||
<tr><td valign="top"><a href="#read_latest_projection-3">read_latest_projection/3</a></td><td>Get the latest projection from the FLU's projection store for <code>ProjType</code></td></tr>
|
||||
<tr><td valign="top"><a href="#read_projection-3">read_projection/3</a></td><td>Read a projection <code>Proj</code> of type <code>ProjType</code>.</td></tr>
|
||||
<tr><td valign="top"><a href="#read_projection-4">read_projection/4</a></td><td>Read a projection <code>Proj</code> of type <code>ProjType</code>.</td></tr>
|
||||
<tr><td valign="top"><a href="#trunc_hack-3">trunc_hack/3</a></td><td>Restricted API: Truncate a file after it has been successfully
|
||||
erasure coded.</td></tr>
|
||||
<tr><td valign="top"><a href="#trunc_hack-4">trunc_hack/4</a></td><td>Restricted API: Truncate a file after it has been successfully
|
||||
erasure coded.</td></tr>
|
||||
<tr><td valign="top"><a href="#wedge_status-1">wedge_status/1</a></td><td>Fetch the wedge status from the remote FLU.</td></tr>
|
||||
<tr><td valign="top"><a href="#wedge_status-2">wedge_status/2</a></td><td>Fetch the wedge status from the remote FLU.</td></tr>
|
||||
<tr><td valign="top"><a href="#write_chunk-5">write_chunk/5</a></td><td>Restricted API: Write a chunk of already-sequenced data to
|
||||
<code>File</code> at <code>Offset</code>.</td></tr>
|
||||
<tr><td valign="top"><a href="#write_chunk-6">write_chunk/6</a></td><td>Restricted API: Write a chunk of already-sequenced data to
|
||||
<code>File</code> at <code>Offset</code>.</td></tr>
|
||||
<tr><td valign="top"><a href="#write_projection-3">write_projection/3</a></td><td>Write a projection <code>Proj</code> of type <code>ProjType</code>.</td></tr>
|
||||
<tr><td valign="top"><a href="#write_projection-4">write_projection/4</a></td><td>Write a projection <code>Proj</code> of type <code>ProjType</code>.</td></tr>
|
||||
</table>
|
||||
|
||||
<h2><a name="functions">Function Details</a></h2>
|
||||
|
||||
<h3 class="function"><a name="append_chunk-4">append_chunk/4</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>append_chunk(Sock::<a href="#type-port_wrap">port_wrap()</a>, EpochID::<a href="#type-epoch_id">epoch_id()</a>, Prefix::<a href="#type-file_prefix">file_prefix()</a>, Chunk::<a href="#type-chunk">chunk()</a>) -> {ok, <a href="#type-chunk_pos">chunk_pos()</a>} | {error, <a href="#type-error_general">error_general()</a>} | {error, term()}</tt><br></p>
|
||||
</div><p>Append a chunk (binary- or iolist-style) of data to a file
|
||||
with <code>Prefix</code>.</p>
|
||||
|
||||
<h3 class="function"><a name="append_chunk-5">append_chunk/5</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>append_chunk(Host::<a href="#type-inet_host">inet_host()</a>, TcpPort::<a href="#type-inet_port">inet_port()</a>, EpochID::<a href="#type-epoch_id">epoch_id()</a>, Prefix::<a href="#type-file_prefix">file_prefix()</a>, Chunk::<a href="#type-chunk">chunk()</a>) -> {ok, <a href="#type-chunk_pos">chunk_pos()</a>} | {error, <a href="#type-error_general">error_general()</a>} | {error, term()}</tt><br></p>
|
||||
</div><p>Append a chunk (binary- or iolist-style) of data to a file
|
||||
with <code>Prefix</code>.</p>
|
||||
|
||||
<h3 class="function"><a name="append_chunk_extra-5">append_chunk_extra/5</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>append_chunk_extra(Yessir::<a href="#type-port_wrap">port_wrap()</a>, EpochID::<a href="#type-epoch_id">epoch_id()</a>, Prefix::<a href="#type-file_prefix">file_prefix()</a>, Chunk::<a href="#type-chunk">chunk()</a>, ChunkExtra::<a href="#type-chunk_size">chunk_size()</a>) -> {ok, <a href="#type-chunk_pos">chunk_pos()</a>} | {error, <a href="#type-error_general">error_general()</a>} | {error, term()}</tt><br></p>
|
||||
</div><p><p>Append a chunk (binary- or iolist-style) of data to a file
|
||||
with <code>Prefix</code> and also request an additional <code>Extra</code> bytes.</p>
|
||||
|
||||
For example, if the <code>Chunk</code> size is 1 KByte and <code>Extra</code> is 4K Bytes, then
|
||||
the file offsets that follow <code>Chunk</code>'s position for the following 4K will
|
||||
be reserved by the file sequencer for later write(s) by the
|
||||
<code>write_chunk()</code> API.</p>
|
||||
|
||||
<h3 class="function"><a name="append_chunk_extra-6">append_chunk_extra/6</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>append_chunk_extra(Host::<a href="#type-inet_host">inet_host()</a>, TcpPort::<a href="#type-inet_port">inet_port()</a>, EpochID::<a href="#type-epoch_id">epoch_id()</a>, Prefix::<a href="#type-file_prefix">file_prefix()</a>, Chunk::<a href="#type-chunk">chunk()</a>, ChunkExtra::<a href="#type-chunk_size">chunk_size()</a>) -> {ok, <a href="#type-chunk_pos">chunk_pos()</a>} | {error, <a href="#type-error_general">error_general()</a>} | {error, term()}</tt><br></p>
|
||||
</div><p><p>Append a chunk (binary- or iolist-style) of data to a file
|
||||
with <code>Prefix</code> and also request an additional <code>Extra</code> bytes.</p>
|
||||
|
||||
For example, if the <code>Chunk</code> size is 1 KByte and <code>Extra</code> is 4K Bytes, then
|
||||
the file offsets that follow <code>Chunk</code>'s position for the following 4K will
|
||||
be reserved by the file sequencer for later write(s) by the
|
||||
<code>write_chunk()</code> API.</p>
|
||||
|
||||
<h3 class="function"><a name="checksum_list-3">checksum_list/3</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>checksum_list(Yessir::<a href="#type-port_wrap">port_wrap()</a>, EpochID::<a href="#type-epoch_id">epoch_id()</a>, File::<a href="#type-file_name">file_name()</a>) -> {ok, [<a href="#type-chunk_csum">chunk_csum()</a>]} | {error, <a href="#type-error_general">error_general()</a> | no_such_file | partial_read} | {error, term()}</tt><br></p>
|
||||
</div><p>Fetch the list of chunk checksums for <code>File</code>.</p>
|
||||
|
||||
<h3 class="function"><a name="checksum_list-4">checksum_list/4</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>checksum_list(Host::<a href="#type-inet_host">inet_host()</a>, TcpPort::<a href="#type-inet_port">inet_port()</a>, EpochID::<a href="#type-epoch_id">epoch_id()</a>, File::<a href="#type-file_name">file_name()</a>) -> {ok, [<a href="#type-chunk_csum">chunk_csum()</a>]} | {error, <a href="#type-error_general">error_general()</a> | no_such_file} | {error, term()}</tt><br></p>
|
||||
</div><p>Fetch the list of chunk checksums for <code>File</code>.</p>
|
||||
|
||||
<h3 class="function"><a name="connect-1">connect/1</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>connect(P_srvr) -> any()</tt></p>
|
||||
</div>
|
||||
|
||||
<h3 class="function"><a name="connected_p-1">connected_p/1</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>connected_p(X1) -> any()</tt></p>
|
||||
</div>
|
||||
|
||||
<h3 class="function"><a name="delete_migration-3">delete_migration/3</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>delete_migration(Yessir::<a href="#type-port_wrap">port_wrap()</a>, EpochID::<a href="#type-epoch_id">epoch_id()</a>, File::<a href="#type-file_name">file_name()</a>) -> ok | {error, <a href="#type-error_general">error_general()</a> | no_such_file} | {error, term()}</tt><br></p>
|
||||
</div><p>Restricted API: Delete a file after it has been successfully
|
||||
migrated.</p>
|
||||
|
||||
<h3 class="function"><a name="delete_migration-4">delete_migration/4</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>delete_migration(Host::<a href="#type-inet_host">inet_host()</a>, TcpPort::<a href="#type-inet_port">inet_port()</a>, EpochID::<a href="#type-epoch_id">epoch_id()</a>, File::<a href="#type-file_name">file_name()</a>) -> ok | {error, <a href="#type-error_general">error_general()</a> | no_such_file} | {error, term()}</tt><br></p>
|
||||
</div><p>Restricted API: Delete a file after it has been successfully
|
||||
migrated.</p>
|
||||
|
||||
<h3 class="function"><a name="disconnect-1">disconnect/1</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>disconnect(Yessir) -> any()</tt></p>
|
||||
</div>
|
||||
|
||||
<h3 class="function"><a name="get_all_projections-2">get_all_projections/2</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>get_all_projections(Yessir::<a href="#type-port_wrap">port_wrap()</a>, ProjType::<a href="#type-projection_type">projection_type()</a>) -> {ok, [<a href="#type-projection">projection()</a>]} | {error, term()}</tt><br></p>
|
||||
</div><p>Get all projections from the FLU's projection store.</p>
|
||||
|
||||
<h3 class="function"><a name="get_all_projections-3">get_all_projections/3</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>get_all_projections(Host::<a href="#type-inet_host">inet_host()</a>, TcpPort::<a href="#type-inet_port">inet_port()</a>, ProjType::<a href="#type-projection_type">projection_type()</a>) -> {ok, [<a href="#type-projection">projection()</a>]} | {error, term()}</tt><br></p>
|
||||
</div><p>Get all projections from the FLU's projection store.</p>
|
||||
|
||||
<h3 class="function"><a name="get_latest_epoch-2">get_latest_epoch/2</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>get_latest_epoch(Sock::<a href="#type-port_wrap">port_wrap()</a>, ProjType::<a href="#type-projection_type">projection_type()</a>) -> {ok, <a href="#type-epoch_id">epoch_id()</a>} | {error, term()}</tt><br></p>
|
||||
</div><p>Get the latest epoch number + checksum from the FLU's projection store.</p>
|
||||
|
||||
<h3 class="function"><a name="get_latest_epoch-3">get_latest_epoch/3</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>get_latest_epoch(Host::<a href="#type-inet_host">inet_host()</a>, TcpPort::<a href="#type-inet_port">inet_port()</a>, ProjType::<a href="#type-projection_type">projection_type()</a>) -> {ok, <a href="#type-epoch_id">epoch_id()</a>} | {error, term()}</tt><br></p>
|
||||
</div><p>Get the latest epoch number + checksum from the FLU's projection store.</p>
|
||||
|
||||
<h3 class="function"><a name="list_all_projections-2">list_all_projections/2</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>list_all_projections(Sock::<a href="#type-port_wrap">port_wrap()</a>, ProjType::<a href="#type-projection_type">projection_type()</a>) -> {ok, [non_neg_integer()]} | {error, term()}</tt><br></p>
|
||||
</div><p>Get all epoch numbers from the FLU's projection store.</p>
|
||||
|
||||
<h3 class="function"><a name="list_all_projections-3">list_all_projections/3</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>list_all_projections(Host::<a href="#type-inet_host">inet_host()</a>, TcpPort::<a href="#type-inet_port">inet_port()</a>, ProjType::<a href="#type-projection_type">projection_type()</a>) -> {ok, [non_neg_integer()]} | {error, term()}</tt><br></p>
|
||||
</div><p>Get all epoch numbers from the FLU's projection store.</p>
|
||||
|
||||
<h3 class="function"><a name="list_files-2">list_files/2</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>list_files(Yessir::<a href="#type-port_wrap">port_wrap()</a>, EpochID::<a href="#type-epoch_id">epoch_id()</a>) -> {ok, [<a href="#type-file_info">file_info()</a>]} | {error, term()}</tt><br></p>
|
||||
</div><p>Fetch the list of all files on the remote FLU.</p>
|
||||
|
||||
<h3 class="function"><a name="list_files-3">list_files/3</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>list_files(Host::<a href="#type-inet_host">inet_host()</a>, TcpPort::<a href="#type-inet_port">inet_port()</a>, EpochID::<a href="#type-epoch_id">epoch_id()</a>) -> {ok, [<a href="#type-file_info">file_info()</a>]} | {error, term()}</tt><br></p>
|
||||
</div><p>Fetch the list of all files on the remote FLU.</p>
|
||||
|
||||
<h3 class="function"><a name="quit-1">quit/1</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>quit(X1::<a href="#type-port_wrap">port_wrap()</a>) -> ok</tt><br></p>
|
||||
</div><p>Quit & close the connection to remote FLU.</p>
|
||||
|
||||
<h3 class="function"><a name="read_chunk-5">read_chunk/5</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>read_chunk(Yessir::<a href="#type-port_wrap">port_wrap()</a>, EpochID::<a href="#type-epoch_id">epoch_id()</a>, File::<a href="#type-file_name">file_name()</a>, Offset::<a href="#type-file_offset">file_offset()</a>, Size::<a href="#type-chunk_size">chunk_size()</a>) -> {ok, <a href="#type-chunk_s">chunk_s()</a>} | {error, <a href="#type-error_general">error_general()</a> | no_such_file | partial_read} | {error, term()}</tt><br></p>
|
||||
</div><p>Read a chunk of data of size <code>Size</code> from <code>File</code> at <code>Offset</code>.</p>
|
||||
|
||||
<h3 class="function"><a name="read_chunk-6">read_chunk/6</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>read_chunk(Host::<a href="#type-inet_host">inet_host()</a>, TcpPort::<a href="#type-inet_port">inet_port()</a>, EpochID::<a href="#type-epoch_id">epoch_id()</a>, File::<a href="#type-file_name">file_name()</a>, Offset::<a href="#type-file_offset">file_offset()</a>, Size::<a href="#type-chunk_size">chunk_size()</a>) -> {ok, <a href="#type-chunk_s">chunk_s()</a>} | {error, <a href="#type-error_general">error_general()</a> | no_such_file | partial_read} | {error, term()}</tt><br></p>
|
||||
</div><p>Read a chunk of data of size <code>Size</code> from <code>File</code> at <code>Offset</code>.</p>
|
||||
|
||||
<h3 class="function"><a name="read_latest_projection-2">read_latest_projection/2</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>read_latest_projection(Yessir::<a href="#type-port_wrap">port_wrap()</a>, ProjType::<a href="#type-projection_type">projection_type()</a>) -> {ok, <a href="#type-projection">projection()</a>} | {error, not_written} | {error, term()}</tt><br></p>
|
||||
</div><p>Get the latest projection from the FLU's projection store for <code>ProjType</code></p>
|
||||
|
||||
<h3 class="function"><a name="read_latest_projection-3">read_latest_projection/3</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>read_latest_projection(Host::<a href="#type-inet_host">inet_host()</a>, TcpPort::<a href="#type-inet_port">inet_port()</a>, ProjType::<a href="#type-projection_type">projection_type()</a>) -> {ok, <a href="#type-projection">projection()</a>} | {error, not_written} | {error, term()}</tt><br></p>
|
||||
</div><p>Get the latest projection from the FLU's projection store for <code>ProjType</code></p>
|
||||
|
||||
<h3 class="function"><a name="read_projection-3">read_projection/3</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>read_projection(Yessir::<a href="#type-port_wrap">port_wrap()</a>, ProjType::<a href="#type-projection_type">projection_type()</a>, Epoch::<a href="#type-epoch_num">epoch_num()</a>) -> {ok, <a href="#type-projection">projection()</a>} | {error, not_written} | {error, term()}</tt><br></p>
|
||||
</div><p>Read a projection <code>Proj</code> of type <code>ProjType</code>.</p>
|
||||
|
||||
<h3 class="function"><a name="read_projection-4">read_projection/4</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>read_projection(Host::<a href="#type-inet_host">inet_host()</a>, TcpPort::<a href="#type-inet_port">inet_port()</a>, ProjType::<a href="#type-projection_type">projection_type()</a>, Epoch::<a href="#type-epoch_num">epoch_num()</a>) -> {ok, <a href="#type-projection">projection()</a>} | {error, written} | {error, term()}</tt><br></p>
|
||||
</div><p>Read a projection <code>Proj</code> of type <code>ProjType</code>.</p>
|
||||
|
||||
<h3 class="function"><a name="trunc_hack-3">trunc_hack/3</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>trunc_hack(Yessir::<a href="#type-port_wrap">port_wrap()</a>, EpochID::<a href="#type-epoch_id">epoch_id()</a>, File::<a href="#type-file_name">file_name()</a>) -> ok | {error, <a href="#type-error_general">error_general()</a> | no_such_file} | {error, term()}</tt><br></p>
|
||||
</div><p>Restricted API: Truncate a file after it has been successfully
|
||||
erasure coded.</p>
|
||||
|
||||
<h3 class="function"><a name="trunc_hack-4">trunc_hack/4</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>trunc_hack(Host::<a href="#type-inet_host">inet_host()</a>, TcpPort::<a href="#type-inet_port">inet_port()</a>, EpochID::<a href="#type-epoch_id">epoch_id()</a>, File::<a href="#type-file_name">file_name()</a>) -> ok | {error, <a href="#type-error_general">error_general()</a> | no_such_file} | {error, term()}</tt><br></p>
|
||||
</div><p>Restricted API: Truncate a file after it has been successfully
|
||||
erasure coded.</p>
|
||||
|
||||
<h3 class="function"><a name="wedge_status-1">wedge_status/1</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>wedge_status(Sock::<a href="#type-port_wrap">port_wrap()</a>) -> {ok, {boolean(), <a href="#type-pv1_epoch">pv1_epoch()</a>}} | {error, term()}</tt><br></p>
|
||||
</div><p>Fetch the wedge status from the remote FLU.</p>
|
||||
|
||||
<h3 class="function"><a name="wedge_status-2">wedge_status/2</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>wedge_status(Host::<a href="#type-inet_host">inet_host()</a>, TcpPort::<a href="#type-inet_port">inet_port()</a>) -> {ok, {boolean(), <a href="#type-pv1_epoch">pv1_epoch()</a>}} | {error, term()}</tt><br></p>
|
||||
</div><p>Fetch the wedge status from the remote FLU.</p>
|
||||
|
||||
<h3 class="function"><a name="write_chunk-5">write_chunk/5</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>write_chunk(Yessir::<a href="#type-port_wrap">port_wrap()</a>, EpochID::<a href="#type-epoch_id">epoch_id()</a>, File::<a href="#type-file_name">file_name()</a>, Offset::<a href="#type-file_offset">file_offset()</a>, Chunk::<a href="#type-chunk">chunk()</a>) -> ok | {error, <a href="#type-error_general">error_general()</a>} | {error, term()}</tt><br></p>
|
||||
</div><p>Restricted API: Write a chunk of already-sequenced data to
|
||||
<code>File</code> at <code>Offset</code>.</p>
|
||||
|
||||
<h3 class="function"><a name="write_chunk-6">write_chunk/6</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>write_chunk(Host::<a href="#type-inet_host">inet_host()</a>, TcpPort::<a href="#type-inet_port">inet_port()</a>, EpochID::<a href="#type-epoch_id">epoch_id()</a>, File::<a href="#type-file_name">file_name()</a>, Offset::<a href="#type-file_offset">file_offset()</a>, Chunk::<a href="#type-chunk">chunk()</a>) -> ok | {error, <a href="#type-error_general">error_general()</a>} | {error, term()}</tt><br></p>
|
||||
</div><p>Restricted API: Write a chunk of already-sequenced data to
|
||||
<code>File</code> at <code>Offset</code>.</p>
|
||||
|
||||
<h3 class="function"><a name="write_projection-3">write_projection/3</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>write_projection(Yessir::<a href="#type-port_wrap">port_wrap()</a>, ProjType::<a href="#type-projection_type">projection_type()</a>, Proj::<a href="#type-projection">projection()</a>) -> ok | {error, written} | {error, term()}</tt><br></p>
|
||||
</div><p>Write a projection <code>Proj</code> of type <code>ProjType</code>.</p>
|
||||
|
||||
<h3 class="function"><a name="write_projection-4">write_projection/4</a></h3>
|
||||
<div class="spec">
|
||||
<p><tt>write_projection(Host::<a href="#type-inet_host">inet_host()</a>, TcpPort::<a href="#type-inet_port">inet_port()</a>, ProjType::<a href="#type-projection_type">projection_type()</a>, Proj::<a href="#type-projection">projection()</a>) -> ok | {error, written} | {error, term()}</tt><br></p>
|
||||
</div><p>Write a projection <code>Proj</code> of type <code>ProjType</code>.</p>
|
||||
<hr>
|
||||
|
||||
<div class="navbar"><a name="#navbar_bottom"></a><table width="100%" border="0" cellspacing="0" cellpadding="2" summary="navigation bar"><tr><td><a href="overview-summary.html" target="overviewFrame">Overview</a></td><td><a href="http://www.erlang.org/"><img src="erlang.png" align="right" border="0" alt="erlang logo"></a></td></tr></table></div>
|
||||
<p><i>Generated by EDoc, May 20 2015, 11:11:34.</i></p>
|
||||
</body>
|
||||
</html>
|
|
@ -10,15 +10,19 @@
|
|||
<tr><td><a href="machi_admin_util.html" target="overviewFrame" class="module">machi_admin_util</a></td></tr>
|
||||
<tr><td><a href="machi_app.html" target="overviewFrame" class="module">machi_app</a></td></tr>
|
||||
<tr><td><a href="machi_chain_manager1.html" target="overviewFrame" class="module">machi_chain_manager1</a></td></tr>
|
||||
<tr><td><a href="machi_chain_repair.html" target="overviewFrame" class="module">machi_chain_repair</a></td></tr>
|
||||
<tr><td><a href="machi_chash.html" target="overviewFrame" class="module">machi_chash</a></td></tr>
|
||||
<tr><td><a href="machi_cr_client.html" target="overviewFrame" class="module">machi_cr_client</a></td></tr>
|
||||
<tr><td><a href="machi_flu1.html" target="overviewFrame" class="module">machi_flu1</a></td></tr>
|
||||
<tr><td><a href="machi_flu1_client.html" target="overviewFrame" class="module">machi_flu1_client</a></td></tr>
|
||||
<tr><td><a href="machi_flu_psup.html" target="overviewFrame" class="module">machi_flu_psup</a></td></tr>
|
||||
<tr><td><a href="machi_flu_sup.html" target="overviewFrame" class="module">machi_flu_sup</a></td></tr>
|
||||
<tr><td><a href="machi_projection.html" target="overviewFrame" class="module">machi_projection</a></td></tr>
|
||||
<tr><td><a href="machi_projection_store.html" target="overviewFrame" class="module">machi_projection_store</a></td></tr>
|
||||
<tr><td><a href="machi_proxy_flu1_client.html" target="overviewFrame" class="module">machi_proxy_flu1_client</a></td></tr>
|
||||
<tr><td><a href="machi_sequencer.html" target="overviewFrame" class="module">machi_sequencer</a></td></tr>
|
||||
<tr><td><a href="machi_sup.html" target="overviewFrame" class="module">machi_sup</a></td></tr>
|
||||
<tr><td><a href="machi_util.html" target="overviewFrame" class="module">machi_util</a></td></tr></table>
|
||||
<tr><td><a href="machi_util.html" target="overviewFrame" class="module">machi_util</a></td></tr>
|
||||
<tr><td><a href="machi_yessir_client.html" target="overviewFrame" class="module">machi_yessir_client</a></td></tr></table>
|
||||
</body>
|
||||
</html>
|
|
@ -180,6 +180,6 @@ the code, is a reminder signal of unfinished work.</p>
|
|||
|
||||
<hr>
|
||||
<div class="navbar"><a name="#navbar_bottom"></a><table width="100%" border="0" cellspacing="0" cellpadding="2" summary="navigation bar"><tr><td><a href="overview-summary.html" target="overviewFrame">Overview</a></td><td><a href="http://www.erlang.org/"><img src="erlang.png" align="right" border="0" alt="erlang logo"></a></td></tr></table></div>
|
||||
<p><i>Generated by EDoc, Apr 8 2015, 17:31:11.</i></p>
|
||||
<p><i>Generated by EDoc, May 20 2015, 11:11:34.</i></p>
|
||||
</body>
|
||||
</html>
|
||||
|
|
Loading…
Reference in a new issue