Intermittent update to EDoc in gh-pages
This commit is contained in:
parent
04233dd328
commit
de3764b2bc
33 changed files with 1326 additions and 20 deletions
|
@ -45,6 +45,6 @@
|
||||||
<hr>
|
<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>
|
<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, Dec 8 2015, 21:33:07.</i></p>
|
<p><i>Generated by EDoc, Dec 8 2015, 21:37:38.</i></p>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
@ -37,6 +37,6 @@
|
||||||
<hr>
|
<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>
|
<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, Dec 8 2015, 21:33:07.</i></p>
|
<p><i>Generated by EDoc, Dec 8 2015, 21:37:38.</i></p>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
@ -59,6 +59,6 @@ could add new entries to this ETS table.</p>
|
||||||
<hr>
|
<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>
|
<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, Dec 8 2015, 21:33:07.</i></p>
|
<p><i>Generated by EDoc, Dec 8 2015, 21:37:38.</i></p>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
@ -284,6 +284,6 @@ that the caller has checked basic projection data structure contents.</p>
|
||||||
<hr>
|
<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>
|
<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, Dec 8 2015, 21:33:07.</i></p>
|
<p><i>Generated by EDoc, Dec 8 2015, 21:37:38.</i></p>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
@ -86,6 +86,6 @@ in sync. In theory, that's lower overhead than the procedure used here.</p>
|
||||||
<hr>
|
<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>
|
<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, Dec 8 2015, 21:33:07.</i></p>
|
<p><i>Generated by EDoc, Dec 8 2015, 21:37:38.</i></p>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
@ -166,6 +166,6 @@ list.</p>
|
||||||
<hr>
|
<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>
|
<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, Dec 8 2015, 21:33:07.</i></p>
|
<p><i>Generated by EDoc, Dec 8 2015, 21:37:38.</i></p>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
82
edoc/machi_cinfo.html
Normal file
82
edoc/machi_cinfo.html
Normal file
|
@ -0,0 +1,82 @@
|
||||||
|
<!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_cinfo</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_cinfo</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>cluster_info callback module for machi specific information
|
||||||
|
gathering.
|
||||||
|
|
||||||
|
|
||||||
|
<h2><a name="description">Description</a></h2>cluster_info callback module for machi specific information
|
||||||
|
gathering.
|
||||||
|
<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="#chain_manager-1">chain_manager/1</a></td><td></td></tr>
|
||||||
|
<tr><td valign="top"><a href="#cluster_info_generator_funs-0">cluster_info_generator_funs/0</a></td><td></td></tr>
|
||||||
|
<tr><td valign="top"><a href="#cluster_info_init-0">cluster_info_init/0</a></td><td></td></tr>
|
||||||
|
<tr><td valign="top"><a href="#dump-0">dump/0</a></td><td></td></tr>
|
||||||
|
<tr><td valign="top"><a href="#fitness-1">fitness/1</a></td><td></td></tr>
|
||||||
|
<tr><td valign="top"><a href="#flu1-1">flu1/1</a></td><td></td></tr>
|
||||||
|
<tr><td valign="top"><a href="#private_projection-1">private_projection/1</a></td><td></td></tr>
|
||||||
|
<tr><td valign="top"><a href="#public_projection-1">public_projection/1</a></td><td></td></tr>
|
||||||
|
<tr><td valign="top"><a href="#register-0">register/0</a></td><td></td></tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<h2><a name="functions">Function Details</a></h2>
|
||||||
|
|
||||||
|
<h3 class="function"><a name="chain_manager-1">chain_manager/1</a></h3>
|
||||||
|
<div class="spec">
|
||||||
|
<p><tt>chain_manager(FluName::atom()) -> term()</tt><br></p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h3 class="function"><a name="cluster_info_generator_funs-0">cluster_info_generator_funs/0</a></h3>
|
||||||
|
<div class="spec">
|
||||||
|
<p><tt>cluster_info_generator_funs() -> [{string(), fun((pid()) -> ok)}]</tt><br></p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h3 class="function"><a name="cluster_info_init-0">cluster_info_init/0</a></h3>
|
||||||
|
<div class="spec">
|
||||||
|
<p><tt>cluster_info_init() -> ok</tt><br></p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h3 class="function"><a name="dump-0">dump/0</a></h3>
|
||||||
|
<div class="spec">
|
||||||
|
<p><tt>dump() -> any()</tt></p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h3 class="function"><a name="fitness-1">fitness/1</a></h3>
|
||||||
|
<div class="spec">
|
||||||
|
<p><tt>fitness(FluName::atom()) -> term()</tt><br></p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h3 class="function"><a name="flu1-1">flu1/1</a></h3>
|
||||||
|
<div class="spec">
|
||||||
|
<p><tt>flu1(FluName::atom()) -> [{atom(), term()}]</tt><br></p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h3 class="function"><a name="private_projection-1">private_projection/1</a></h3>
|
||||||
|
<div class="spec">
|
||||||
|
<p><tt>private_projection(FluName::atom()) -> [{atom(), term()}]</tt><br></p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h3 class="function"><a name="public_projection-1">public_projection/1</a></h3>
|
||||||
|
<div class="spec">
|
||||||
|
<p><tt>public_projection(FluName::atom()) -> [{atom(), term()}]</tt><br></p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h3 class="function"><a name="register-0">register/0</a></h3>
|
||||||
|
<div class="spec">
|
||||||
|
<p><tt>register() -> ok</tt><br></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, Dec 8 2015, 21:37:38.</i></p>
|
||||||
|
</body>
|
||||||
|
</html>
|
44
edoc/machi_config.html
Normal file
44
edoc/machi_config.html
Normal file
|
@ -0,0 +1,44 @@
|
||||||
|
<!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_config</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_config</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>Configuration consulting utilities.
|
||||||
|
|
||||||
|
|
||||||
|
<h2><a name="description">Description</a></h2>Configuration consulting utilities. Some conventions:
|
||||||
|
- The function name should match with exact configuration
|
||||||
|
name in <code>app.config</code> or <code>advanced.config</code> of <code>machi</code> section.
|
||||||
|
- The default value of that configuration is expected to be in
|
||||||
|
cuttlefish schema file. Otherwise some macro in headers may
|
||||||
|
be chosen.
|
||||||
|
- Documentation of the configuration is supposed to be written
|
||||||
|
in cuttlefish schema file, rather than @doc section of the function.
|
||||||
|
- spec of the function should be written.
|
||||||
|
- Returning <code>undefined</code> is strongly discouraged. Return some default
|
||||||
|
value instead.
|
||||||
|
- <code>application:get_env/3</code> is recommended. See <code>max_file_size/0</code> for
|
||||||
|
example.
|
||||||
|
<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="#max_file_size-0">max_file_size/0</a></td><td></td></tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<h2><a name="functions">Function Details</a></h2>
|
||||||
|
|
||||||
|
<h3 class="function"><a name="max_file_size-0">max_file_size/0</a></h3>
|
||||||
|
<div class="spec">
|
||||||
|
<p><tt>max_file_size() -> pos_integer()</tt><br></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, Dec 8 2015, 21:37:38.</i></p>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -258,6 +258,6 @@ function name.)</p>
|
||||||
<hr>
|
<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>
|
<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, Dec 8 2015, 21:33:07.</i></p>
|
<p><i>Generated by EDoc, Dec 8 2015, 21:37:38.</i></p>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
186
edoc/machi_csum_table.html
Normal file
186
edoc/machi_csum_table.html
Normal file
|
@ -0,0 +1,186 @@
|
||||||
|
<!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_csum_table</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_csum_table</h1>
|
||||||
|
<ul class="index"><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>
|
||||||
|
|
||||||
|
|
||||||
|
<h2><a name="types">Data Types</a></h2>
|
||||||
|
|
||||||
|
<h3 class="typedecl"><a name="type-byte_sequence">byte_sequence()</a></h3>
|
||||||
|
<p><tt>byte_sequence() = {Offset::non_neg_integer(), Size::pos_integer() | infinity}</tt></p>
|
||||||
|
|
||||||
|
|
||||||
|
<h3 class="typedecl"><a name="type-table">table()</a></h3>
|
||||||
|
<p><tt>table() = #machi_csum_table{}</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="#all-1">all/1</a></td><td></td></tr>
|
||||||
|
<tr><td valign="top"><a href="#all_trimmed-2">all_trimmed/2</a></td><td></td></tr>
|
||||||
|
<tr><td valign="top"><a href="#all_trimmed-3">all_trimmed/3</a></td><td></td></tr>
|
||||||
|
<tr><td valign="top"><a href="#any_trimmed-3">any_trimmed/3</a></td><td></td></tr>
|
||||||
|
<tr><td valign="top"><a href="#calc_unwritten_bytes-1">calc_unwritten_bytes/1</a></td><td></td></tr>
|
||||||
|
<tr><td valign="top"><a href="#close-1">close/1</a></td><td></td></tr>
|
||||||
|
<tr><td valign="top"><a href="#decode_csum_file_entry-1">decode_csum_file_entry/1</a></td><td>Decode a single <code>binary()</code> blob into an
|
||||||
|
<code>{Offset,Size,TaggedCSum}</code> tuple.</td></tr>
|
||||||
|
<tr><td valign="top"><a href="#delete-1">delete/1</a></td><td></td></tr>
|
||||||
|
<tr><td valign="top"><a href="#encode_csum_file_entry-3">encode_csum_file_entry/3</a></td><td>Encode <code>Offset + Size + TaggedCSum</code> into an <code>iolist()</code> type for
|
||||||
|
internal storage by the FLU.</td></tr>
|
||||||
|
<tr><td valign="top"><a href="#encode_csum_file_entry_bin-3">encode_csum_file_entry_bin/3</a></td><td>Encode <code>Offset + Size + TaggedCSum</code> into an <code>binary()</code> type for
|
||||||
|
internal storage by the FLU.</td></tr>
|
||||||
|
<tr><td valign="top"><a href="#find-3">find/3</a></td><td></td></tr>
|
||||||
|
<tr><td valign="top"><a href="#find_leftneighbor-2">find_leftneighbor/2</a></td><td></td></tr>
|
||||||
|
<tr><td valign="top"><a href="#find_rightneighbor-2">find_rightneighbor/2</a></td><td></td></tr>
|
||||||
|
<tr><td valign="top"><a href="#foldl_chunks-3">foldl_chunks/3</a></td><td></td></tr>
|
||||||
|
<tr><td valign="top"><a href="#open-2">open/2</a></td><td></td></tr>
|
||||||
|
<tr><td valign="top"><a href="#split_checksum_list_blob_decode-1">split_checksum_list_blob_decode/1</a></td><td>Split a <code>binary()</code> blob of <code>checksum_list</code> data into a list of
|
||||||
|
<code>{Offset,Size,TaggedCSum}</code> tuples.</td></tr>
|
||||||
|
<tr><td valign="top"><a href="#sync-1">sync/1</a></td><td></td></tr>
|
||||||
|
<tr><td valign="top"><a href="#trim-3">trim/3</a></td><td></td></tr>
|
||||||
|
<tr><td valign="top"><a href="#trim-5">trim/5</a></td><td></td></tr>
|
||||||
|
<tr><td valign="top"><a href="#write-4">write/4</a></td><td></td></tr>
|
||||||
|
<tr><td valign="top"><a href="#write-6">write/6</a></td><td></td></tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<h2><a name="functions">Function Details</a></h2>
|
||||||
|
|
||||||
|
<h3 class="function"><a name="all-1">all/1</a></h3>
|
||||||
|
<div class="spec">
|
||||||
|
<p><tt>all(Machi_csum_table) -> any()</tt></p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h3 class="function"><a name="all_trimmed-2">all_trimmed/2</a></h3>
|
||||||
|
<div class="spec">
|
||||||
|
<p><tt>all_trimmed(Machi_csum_table::<a href="#type-table">table()</a>, Pos::non_neg_integer()) -> boolean()</tt><br></p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h3 class="function"><a name="all_trimmed-3">all_trimmed/3</a></h3>
|
||||||
|
<div class="spec">
|
||||||
|
<p><tt>all_trimmed(Machi_csum_table::<a href="#type-table">table()</a>, Left::non_neg_integer(), Right::non_neg_integer()) -> boolean()</tt><br></p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h3 class="function"><a name="any_trimmed-3">any_trimmed/3</a></h3>
|
||||||
|
<div class="spec">
|
||||||
|
<p><tt>any_trimmed(CsumT::<a href="#type-table">table()</a>, Offset::pos_integer(), Size::<a href="machi_dt.html#type-chunk_size">machi_dt:chunk_size()</a>) -> boolean()</tt><br></p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h3 class="function"><a name="calc_unwritten_bytes-1">calc_unwritten_bytes/1</a></h3>
|
||||||
|
<div class="spec">
|
||||||
|
<p><tt>calc_unwritten_bytes(Machi_csum_table::<a href="#type-table">table()</a>) -> [<a href="#type-byte_sequence">byte_sequence()</a>]</tt><br></p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h3 class="function"><a name="close-1">close/1</a></h3>
|
||||||
|
<div class="spec">
|
||||||
|
<p><tt>close(Machi_csum_table::<a href="#type-table">table()</a>) -> ok</tt><br></p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h3 class="function"><a name="decode_csum_file_entry-1">decode_csum_file_entry/1</a></h3>
|
||||||
|
<div class="spec">
|
||||||
|
<p><tt>decode_csum_file_entry(Else::binary()) -> error | {<a href="machi_dt.html#type-file_offset">machi_dt:file_offset()</a>, <a href="machi_dt.html#type-chunk_size">machi_dt:chunk_size()</a>, <a href="machi_dt.html#type-chunk_s">machi_dt:chunk_s()</a>}</tt><br></p>
|
||||||
|
</div><p><p>Decode a single <code>binary()</code> blob into an
|
||||||
|
<code>{Offset,Size,TaggedCSum}</code> tuple.</p>
|
||||||
|
|
||||||
|
<p>The internal encoding (which is currently exposed to the outside world
|
||||||
|
via this function and related ones) is:</p>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li> 1 byte: record length
|
||||||
|
</li>
|
||||||
|
<li> 8 bytes (unsigned big-endian): byte offset
|
||||||
|
</li>
|
||||||
|
<li> 4 bytes (unsigned big-endian): chunk size
|
||||||
|
</li>
|
||||||
|
<li> all remaining bytes: tagged checksum (1st byte = type tag)
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
See <code>machi.hrl</code> for the tagged checksum types, e.g.,
|
||||||
|
<code>?CSUM_TAG_NONE</code>.</p>
|
||||||
|
|
||||||
|
<h3 class="function"><a name="delete-1">delete/1</a></h3>
|
||||||
|
<div class="spec">
|
||||||
|
<p><tt>delete(Machi_csum_table::<a href="#type-table">table()</a>) -> ok</tt><br></p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h3 class="function"><a name="encode_csum_file_entry-3">encode_csum_file_entry/3</a></h3>
|
||||||
|
<div class="spec">
|
||||||
|
<p><tt>encode_csum_file_entry(Offset::<a href="machi_dt.html#type-file_offset">machi_dt:file_offset()</a>, Size::<a href="machi_dt.html#type-chunk_size">machi_dt:chunk_size()</a>, TaggedCSum::<a href="machi_dt.html#type-chunk_s">machi_dt:chunk_s()</a>) -> iolist()</tt><br></p>
|
||||||
|
</div><p>Encode <code>Offset + Size + TaggedCSum</code> into an <code>iolist()</code> type for
|
||||||
|
internal storage by the FLU.</p>
|
||||||
|
|
||||||
|
<h3 class="function"><a name="encode_csum_file_entry_bin-3">encode_csum_file_entry_bin/3</a></h3>
|
||||||
|
<div class="spec">
|
||||||
|
<p><tt>encode_csum_file_entry_bin(Offset::<a href="machi_dt.html#type-file_offset">machi_dt:file_offset()</a>, Size::<a href="machi_dt.html#type-chunk_size">machi_dt:chunk_size()</a>, TaggedCSum::<a href="machi_dt.html#type-chunk_s">machi_dt:chunk_s()</a>) -> binary()</tt><br></p>
|
||||||
|
</div><p>Encode <code>Offset + Size + TaggedCSum</code> into an <code>binary()</code> type for
|
||||||
|
internal storage by the FLU.</p>
|
||||||
|
|
||||||
|
<h3 class="function"><a name="find-3">find/3</a></h3>
|
||||||
|
<div class="spec">
|
||||||
|
<p><tt>find(Machi_csum_table::<a href="#type-table">table()</a>, Offset::<a href="machi_dt.html#type-file_offset">machi_dt:file_offset()</a>, Size::<a href="machi_dt.html#type-file_size">machi_dt:file_size()</a>) -> [{<a href="machi_dt.html#type-file_offset">machi_dt:file_offset()</a>, <a href="machi_dt.html#type-file_size">machi_dt:file_size()</a>, <a href="machi_dt.html#type-chunk_csum">machi_dt:chunk_csum()</a> | trimmed}]</tt><br></p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h3 class="function"><a name="find_leftneighbor-2">find_leftneighbor/2</a></h3>
|
||||||
|
<div class="spec">
|
||||||
|
<p><tt>find_leftneighbor(CsumT::<a href="#type-table">table()</a>, Offset::non_neg_integer()) -> undefined | {non_neg_integer(), <a href="machi_dt.html#type-chunk_size">machi_dt:chunk_size()</a>, trimmed | <a href="machi_dt.html#type-chunk_csum">machi_dt:chunk_csum()</a>}</tt><br></p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h3 class="function"><a name="find_rightneighbor-2">find_rightneighbor/2</a></h3>
|
||||||
|
<div class="spec">
|
||||||
|
<p><tt>find_rightneighbor(CsumT::<a href="#type-table">table()</a>, Offset::non_neg_integer()) -> undefined | {non_neg_integer(), <a href="machi_dt.html#type-chunk_size">machi_dt:chunk_size()</a>, trimmed | <a href="machi_dt.html#type-chunk_csum">machi_dt:chunk_csum()</a>}</tt><br></p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h3 class="function"><a name="foldl_chunks-3">foldl_chunks/3</a></h3>
|
||||||
|
<div class="spec">
|
||||||
|
<p><tt>foldl_chunks(Fun::fun(({non_neg_integer(), non_neg_integer(), term()}, Acc0::term()) -> Acc::term()), Acc0::term(), Machi_csum_table::<a href="#type-table">table()</a>) -> Acc::term()</tt><br></p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h3 class="function"><a name="open-2">open/2</a></h3>
|
||||||
|
<div class="spec">
|
||||||
|
<p><tt>open(CSumFilename::string(), Opts::<a href="proplists.html#type-proplist">proplists:proplist()</a>) -> {ok, <a href="#type-table">table()</a>} | {error, <a href="file.html#type-posix">file:posix()</a>}</tt><br></p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h3 class="function"><a name="split_checksum_list_blob_decode-1">split_checksum_list_blob_decode/1</a></h3>
|
||||||
|
<div class="spec">
|
||||||
|
<p><tt>split_checksum_list_blob_decode(Bin::binary()) -> {[{<a href="machi_dt.html#type-file_offset">machi_dt:file_offset()</a>, <a href="machi_dt.html#type-chunk_size">machi_dt:chunk_size()</a>, <a href="machi_dt.html#type-chunk_s">machi_dt:chunk_s()</a>}], TrailingJunk::binary()}</tt><br></p>
|
||||||
|
</div><p>Split a <code>binary()</code> blob of <code>checksum_list</code> data into a list of
|
||||||
|
<code>{Offset,Size,TaggedCSum}</code> tuples.</p>
|
||||||
|
|
||||||
|
<h3 class="function"><a name="sync-1">sync/1</a></h3>
|
||||||
|
<div class="spec">
|
||||||
|
<p><tt>sync(Machi_csum_table::<a href="#type-table">table()</a>) -> ok | {error, <a href="file.html#type-posix">file:posix()</a>}</tt><br></p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h3 class="function"><a name="trim-3">trim/3</a></h3>
|
||||||
|
<div class="spec">
|
||||||
|
<p><tt>trim(Machi_csum_table::<a href="#type-table">table()</a>, Offset::<a href="machi_dt.html#type-file_offset">machi_dt:file_offset()</a>, Size::<a href="machi_dt.html#type-file_size">machi_dt:file_size()</a>) -> ok | {error, <a href="file.html#type-posix">file:posix()</a>}</tt><br></p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h3 class="function"><a name="trim-5">trim/5</a></h3>
|
||||||
|
<div class="spec">
|
||||||
|
<p><tt>trim(CsumT, Offset, Size, LeftUpdate, RightUpdate) -> any()</tt></p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h3 class="function"><a name="write-4">write/4</a></h3>
|
||||||
|
<div class="spec">
|
||||||
|
<p><tt>write(CsumT::<a href="#type-table">table()</a>, Offset::<a href="machi_dt.html#type-file_offset">machi_dt:file_offset()</a>, Size::<a href="machi_dt.html#type-file_size">machi_dt:file_size()</a>, CSum::<a href="machi_dt.html#type-chunk_csum">machi_dt:chunk_csum()</a> | trimmed) -> ok | {error, trimmed | <a href="file.html#type-posix">file:posix()</a>}</tt><br></p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h3 class="function"><a name="write-6">write/6</a></h3>
|
||||||
|
<div class="spec">
|
||||||
|
<p><tt>write(Machi_csum_table, Offset, Size, CSum, LeftUpdate, RightUpdate) -> 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, Dec 8 2015, 21:37:38.</i></p>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -105,6 +105,6 @@
|
||||||
<hr>
|
<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>
|
<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, Dec 8 2015, 21:33:07.</i></p>
|
<p><i>Generated by EDoc, Dec 8 2015, 21:37:38.</i></p>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
118
edoc/machi_file_proxy.html
Normal file
118
edoc/machi_file_proxy.html
Normal file
|
@ -0,0 +1,118 @@
|
||||||
|
<!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_file_proxy</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_file_proxy</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>This is a proxy process which mediates access to Machi FLU
|
||||||
|
controlled files.
|
||||||
|
|
||||||
|
<p><b>Behaviours:</b> <a href="gen_server.html"><tt>gen_server</tt></a>.</p>
|
||||||
|
|
||||||
|
<h2><a name="description">Description</a></h2><p>This is a proxy process which mediates access to Machi FLU
|
||||||
|
controlled files. In particular, it manages the "write-once register"
|
||||||
|
conceit at the heart of Machi's design.</p>
|
||||||
|
|
||||||
|
<p>Read, write and append requests for a single file will be managed
|
||||||
|
through this proxy. Clients can also request syncs for specific
|
||||||
|
types of filehandles.</p>
|
||||||
|
|
||||||
|
As operations are requested, the proxy keeps track of how many
|
||||||
|
operations it has performed (and how many errors were generated.)
|
||||||
|
After a sufficient number of inactivity, the server terminates
|
||||||
|
itself.
|
||||||
|
|
||||||
|
<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-2">append/2</a></td><td>Append data.</td></tr>
|
||||||
|
<tr><td valign="top"><a href="#append-4">append/4</a></td><td>Append data to file, supplying client metadata and (if desired) a
|
||||||
|
reservation for additional space.</td></tr>
|
||||||
|
<tr><td valign="top"><a href="#read-3">read/3</a></td><td>Read file at offset for length.</td></tr>
|
||||||
|
<tr><td valign="top"><a href="#read-4">read/4</a></td><td></td></tr>
|
||||||
|
<tr><td valign="top"><a href="#start_link-3">start_link/3</a></td><td>Start a new instance of the file proxy service.</td></tr>
|
||||||
|
<tr><td valign="top"><a href="#stop-1">stop/1</a></td><td>Request to stop an instance of the file proxy service.</td></tr>
|
||||||
|
<tr><td valign="top"><a href="#sync-1">sync/1</a></td><td>Force a sync of all filehandles.</td></tr>
|
||||||
|
<tr><td valign="top"><a href="#sync-2">sync/2</a></td><td>Force a sync of a specific filehandle type.</td></tr>
|
||||||
|
<tr><td valign="top"><a href="#trim-4">trim/4</a></td><td></td></tr>
|
||||||
|
<tr><td valign="top"><a href="#write-3">write/3</a></td><td>Write data at offset.</td></tr>
|
||||||
|
<tr><td valign="top"><a href="#write-4">write/4</a></td><td>Write data at offset, including the client metadata.</td></tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<h2><a name="functions">Function Details</a></h2>
|
||||||
|
|
||||||
|
<h3 class="function"><a name="append-2">append/2</a></h3>
|
||||||
|
<div class="spec">
|
||||||
|
<p><tt>append(Pid::pid(), Data::binary()) -> {ok, File::string(), Offset::non_neg_integer()} | {error, term()}</tt><br></p>
|
||||||
|
</div><p>Append data</p>
|
||||||
|
|
||||||
|
<h3 class="function"><a name="append-4">append/4</a></h3>
|
||||||
|
<div class="spec">
|
||||||
|
<p><tt>append(Pid::pid(), ClientMeta::<a href="proplists.html#type-proplist">proplists:proplist()</a>, Extra::non_neg_integer(), Data::binary()) -> {ok, File::string(), Offset::non_neg_integer()} | {error, term()}</tt><br></p>
|
||||||
|
</div><p>Append data to file, supplying client metadata and (if desired) a
|
||||||
|
reservation for additional space. ClientMeta is a proplist and expects the
|
||||||
|
same keys as write/4.</p>
|
||||||
|
|
||||||
|
<h3 class="function"><a name="read-3">read/3</a></h3>
|
||||||
|
<div class="spec">
|
||||||
|
<p><tt>read(Pid::pid(), Offset::non_neg_integer(), Length::non_neg_integer()) -> {ok, [{Filename::string(), Offset::non_neg_integer(), Data::binary(), Checksum::binary()}]} | {error, Reason::term()}</tt><br></p>
|
||||||
|
</div><p>Read file at offset for length. This returns a sequence of all
|
||||||
|
written and trimmed (optional) bytes that overlaps with requested
|
||||||
|
offset and length. Borders are not aligned.</p>
|
||||||
|
|
||||||
|
<h3 class="function"><a name="read-4">read/4</a></h3>
|
||||||
|
<div class="spec">
|
||||||
|
<p><tt>read(Pid::pid(), Offset::non_neg_integer(), Length::non_neg_integer(), Opts::[{no_checksum | no_chunk | needs_trimmed, boolean()}]) -> {ok, [{Filename::string(), Offset::non_neg_integer(), Data::binary(), Checksum::binary()}]} | {error, Reason::term()}</tt><br></p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h3 class="function"><a name="start_link-3">start_link/3</a></h3>
|
||||||
|
<div class="spec">
|
||||||
|
<p><tt>start_link(FluName::atom(), Filename::string(), DataDir::string()) -> any()</tt><br></p>
|
||||||
|
</div><p>Start a new instance of the file proxy service. Takes the filename
|
||||||
|
and data directory as arguments. This function is typically called by the
|
||||||
|
<code>machi_file_proxy_sup:start_proxy/2</code> function.</p>
|
||||||
|
|
||||||
|
<h3 class="function"><a name="stop-1">stop/1</a></h3>
|
||||||
|
<div class="spec">
|
||||||
|
<p><tt>stop(Pid::pid()) -> ok</tt><br></p>
|
||||||
|
</div><p>Request to stop an instance of the file proxy service.</p>
|
||||||
|
|
||||||
|
<h3 class="function"><a name="sync-1">sync/1</a></h3>
|
||||||
|
<div class="spec">
|
||||||
|
<p><tt>sync(Pid::pid()) -> ok | {error, term()}</tt><br></p>
|
||||||
|
</div><p>Force a sync of all filehandles</p>
|
||||||
|
|
||||||
|
<h3 class="function"><a name="sync-2">sync/2</a></h3>
|
||||||
|
<div class="spec">
|
||||||
|
<p><tt>sync(Pid::pid(), Type::all | data | csum) -> ok | {error, term()}</tt><br></p>
|
||||||
|
</div><p>Force a sync of a specific filehandle type. Valid types are <code>all</code>, <code>csum</code> and <code>data</code>.</p>
|
||||||
|
|
||||||
|
<h3 class="function"><a name="trim-4">trim/4</a></h3>
|
||||||
|
<div class="spec">
|
||||||
|
<p><tt>trim(Pid, Offset, Size, TriggerGC) -> any()</tt></p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h3 class="function"><a name="write-3">write/3</a></h3>
|
||||||
|
<div class="spec">
|
||||||
|
<p><tt>write(Pid::pid(), Offset::non_neg_integer(), Data::binary()) -> ok | {error, term()}</tt><br></p>
|
||||||
|
</div><p>Write data at offset</p>
|
||||||
|
|
||||||
|
<h3 class="function"><a name="write-4">write/4</a></h3>
|
||||||
|
<div class="spec">
|
||||||
|
<p><tt>write(Pid::pid(), Offset::non_neg_integer(), ClientMeta::<a href="proplists.html#type-proplist">proplists:proplist()</a>, Data::binary()) -> ok | {error, term()}</tt><br></p>
|
||||||
|
</div><p>Write data at offset, including the client metadata. ClientMeta is a proplist
|
||||||
|
that expects the following keys and values:
|
||||||
|
<ul>
|
||||||
|
<li><code>client_csum_tag</code> - the type of checksum from the client as defined in the machi.hrl file</li>
|
||||||
|
<li><code>client_csum</code> - the checksum value from the client</li>
|
||||||
|
</ul></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, Dec 8 2015, 21:37:38.</i></p>
|
||||||
|
</body>
|
||||||
|
</html>
|
51
edoc/machi_file_proxy_sup.html
Normal file
51
edoc/machi_file_proxy_sup.html
Normal file
|
@ -0,0 +1,51 @@
|
||||||
|
<!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_file_proxy_sup</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_file_proxy_sup</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>This is the main supervisor for the file proxies.
|
||||||
|
|
||||||
|
<p><b>Behaviours:</b> <a href="supervisor.html"><tt>supervisor</tt></a>.</p>
|
||||||
|
|
||||||
|
<h2><a name="description">Description</a></h2>This is the main supervisor for the file proxies.
|
||||||
|
<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="#child_spec-1">child_spec/1</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="#start_link-1">start_link/1</a></td><td></td></tr>
|
||||||
|
<tr><td valign="top"><a href="#start_proxy-3">start_proxy/3</a></td><td></td></tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<h2><a name="functions">Function Details</a></h2>
|
||||||
|
|
||||||
|
<h3 class="function"><a name="child_spec-1">child_spec/1</a></h3>
|
||||||
|
<div class="spec">
|
||||||
|
<p><tt>child_spec(FluName) -> 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="start_link-1">start_link/1</a></h3>
|
||||||
|
<div class="spec">
|
||||||
|
<p><tt>start_link(FluName) -> any()</tt></p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h3 class="function"><a name="start_proxy-3">start_proxy/3</a></h3>
|
||||||
|
<div class="spec">
|
||||||
|
<p><tt>start_proxy(FluName, DataDir, Filename) -> 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, Dec 8 2015, 21:37:38.</i></p>
|
||||||
|
</body>
|
||||||
|
</html>
|
120
edoc/machi_fitness.html
Normal file
120
edoc/machi_fitness.html
Normal file
|
@ -0,0 +1,120 @@
|
||||||
|
<!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_fitness</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_fitness</h1>
|
||||||
|
<ul class="index"><li><a href="#index">Function Index</a></li><li><a href="#functions">Function Details</a></li></ul>
|
||||||
|
|
||||||
|
<p><b>Behaviours:</b> <a href="gen_server.html"><tt>gen_server</tt></a>.</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="#add_admin_down-3">add_admin_down/3</a></td><td></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="#delete_admin_down-2">delete_admin_down/2</a></td><td></td></tr>
|
||||||
|
<tr><td valign="top"><a href="#format_status-2">format_status/2</a></td><td></td></tr>
|
||||||
|
<tr><td valign="top"><a href="#get_unfit_list-1">get_unfit_list/1</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="#send_fitness_update_spam-3">send_fitness_update_spam/3</a></td><td></td></tr>
|
||||||
|
<tr><td valign="top"><a href="#send_spam_to_everyone-1">send_spam_to_everyone/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="#terminate-2">terminate/2</a></td><td></td></tr>
|
||||||
|
<tr><td valign="top"><a href="#trigger_early_adjustment-2">trigger_early_adjustment/2</a></td><td>For testing purposes, we don't want a test to wait for
|
||||||
|
wall-clock time to elapse before the fitness server makes a
|
||||||
|
down->up status decision.</td></tr>
|
||||||
|
<tr><td valign="top"><a href="#update_local_down_list-3">update_local_down_list/3</a></td><td></td></tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<h2><a name="functions">Function Details</a></h2>
|
||||||
|
|
||||||
|
<h3 class="function"><a name="add_admin_down-3">add_admin_down/3</a></h3>
|
||||||
|
<div class="spec">
|
||||||
|
<p><tt>add_admin_down(PidSpec, DownFLU, DownProps) -> any()</tt></p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<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="delete_admin_down-2">delete_admin_down/2</a></h3>
|
||||||
|
<div class="spec">
|
||||||
|
<p><tt>delete_admin_down(PidSpec, DownFLU) -> any()</tt></p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h3 class="function"><a name="format_status-2">format_status/2</a></h3>
|
||||||
|
<div class="spec">
|
||||||
|
<p><tt>format_status(Opt, X2) -> any()</tt></p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h3 class="function"><a name="get_unfit_list-1">get_unfit_list/1</a></h3>
|
||||||
|
<div class="spec">
|
||||||
|
<p><tt>get_unfit_list(PidSpec) -> 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, State) -> 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, State) -> any()</tt></p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h3 class="function"><a name="init-1">init/1</a></h3>
|
||||||
|
<div class="spec">
|
||||||
|
<p><tt>init(Args) -> any()</tt></p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h3 class="function"><a name="send_fitness_update_spam-3">send_fitness_update_spam/3</a></h3>
|
||||||
|
<div class="spec">
|
||||||
|
<p><tt>send_fitness_update_spam(Pid, FromName, Dict) -> any()</tt></p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h3 class="function"><a name="send_spam_to_everyone-1">send_spam_to_everyone/1</a></h3>
|
||||||
|
<div class="spec">
|
||||||
|
<p><tt>send_spam_to_everyone(Pid) -> any()</tt></p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h3 class="function"><a name="start_link-1">start_link/1</a></h3>
|
||||||
|
<div class="spec">
|
||||||
|
<p><tt>start_link(Args) -> 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="trigger_early_adjustment-2">trigger_early_adjustment/2</a></h3>
|
||||||
|
<div class="spec">
|
||||||
|
<p><tt>trigger_early_adjustment(Pid, FLU) -> any()</tt></p>
|
||||||
|
</div><p>For testing purposes, we don't want a test to wait for
|
||||||
|
wall-clock time to elapse before the fitness server makes a
|
||||||
|
down->up status decision.</p>
|
||||||
|
|
||||||
|
<h3 class="function"><a name="update_local_down_list-3">update_local_down_list/3</a></h3>
|
||||||
|
<div class="spec">
|
||||||
|
<p><tt>update_local_down_list(PidSpec, Down, MembersDict) -> 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, Dec 8 2015, 21:37:38.</i></p>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -109,6 +109,6 @@ as a sequencer + file server + chain manager group of processes.</p>
|
||||||
<hr>
|
<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>
|
<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, Dec 8 2015, 21:33:07.</i></p>
|
<p><i>Generated by EDoc, Dec 8 2015, 21:37:38.</i></p>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
@ -335,6 +335,6 @@ blob.</p>
|
||||||
<hr>
|
<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>
|
<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, Dec 8 2015, 21:33:07.</i></p>
|
<p><i>Generated by EDoc, Dec 8 2015, 21:37:38.</i></p>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
119
edoc/machi_flu_filename_mgr.html
Normal file
119
edoc/machi_flu_filename_mgr.html
Normal file
|
@ -0,0 +1,119 @@
|
||||||
|
<!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_filename_mgr</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_filename_mgr</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>This process is responsible for managing filenames assigned to
|
||||||
|
prefixes.
|
||||||
|
|
||||||
|
|
||||||
|
<h2><a name="description">Description</a></h2><p>This process is responsible for managing filenames assigned to
|
||||||
|
prefixes. It's started out of <code>machi_flu_psup</code>.</p>
|
||||||
|
|
||||||
|
<p>Supported operations include finding the "current" filename assigned to
|
||||||
|
a prefix. Incrementing the sequence number and returning a new file name
|
||||||
|
and listing all data files assigned to a given prefix.</p>
|
||||||
|
|
||||||
|
<p>All prefixes should have the form of <code>{prefix, P}</code>. Single filename
|
||||||
|
return values have the form of <code>{file, F}</code>.</p>
|
||||||
|
|
||||||
|
<h2>Finding the current file associated with a sequence</h2><p>
|
||||||
|
First it looks up the sequence number from the prefix name. If
|
||||||
|
no sequence file is found, it uses 0 as the sequence number and searches
|
||||||
|
for a matching file with the prefix and 0 as the sequence number.
|
||||||
|
If no file is found, the it generates a new filename by incorporating
|
||||||
|
the given prefix, a randomly generated (v4) UUID and 0 as the
|
||||||
|
sequence number.</p>
|
||||||
|
|
||||||
|
If the sequence number is > 0, then the process scans the filesystem
|
||||||
|
looking for a filename which matches the prefix and given sequence number and
|
||||||
|
returns that.
|
||||||
|
<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="#child_spec-2">child_spec/2</a></td><td></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="#find_or_make_filename_from_prefix-3">find_or_make_filename_from_prefix/3</a></td><td>Find the latest available or make a filename from a prefix.</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="#increment_prefix_sequence-2">increment_prefix_sequence/2</a></td><td>Increment the sequence counter for a given prefix.</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_by_prefix-2">list_files_by_prefix/2</a></td><td>Given a prefix in the form of <code>{prefix, P}</code> return
|
||||||
|
all the data files associated with that prefix.</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="#terminate-2">terminate/2</a></td><td></td></tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<h2><a name="functions">Function Details</a></h2>
|
||||||
|
|
||||||
|
<h3 class="function"><a name="child_spec-2">child_spec/2</a></h3>
|
||||||
|
<div class="spec">
|
||||||
|
<p><tt>child_spec(FluName, DataDir) -> any()</tt></p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h3 class="function"><a name="code_change-3">code_change/3</a></h3>
|
||||||
|
<div class="spec">
|
||||||
|
<p><tt>code_change(OldVsn, State, Extra) -> any()</tt></p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h3 class="function"><a name="find_or_make_filename_from_prefix-3">find_or_make_filename_from_prefix/3</a></h3>
|
||||||
|
<div class="spec">
|
||||||
|
<p><tt>find_or_make_filename_from_prefix(FluName::atom(), EpochId::<a href="#type-pv1_epoch_n">pv1_epoch_n()</a>, Prefix::{prefix, string()}) -> {file, Filename::string()} | {error, Reason::term()} | timeout</tt><br></p>
|
||||||
|
</div><p>Find the latest available or make a filename from a prefix. A prefix
|
||||||
|
should be in the form of a tagged tuple <code>{prefix, P}</code>. Returns a tagged
|
||||||
|
tuple in the form of <code>{file, F}</code> or an <code>{error, Reason}</code></p>
|
||||||
|
|
||||||
|
<h3 class="function"><a name="handle_call-3">handle_call/3</a></h3>
|
||||||
|
<div class="spec">
|
||||||
|
<p><tt>handle_call(Req, 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(Req, State) -> 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, State) -> any()</tt></p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h3 class="function"><a name="increment_prefix_sequence-2">increment_prefix_sequence/2</a></h3>
|
||||||
|
<div class="spec">
|
||||||
|
<p><tt>increment_prefix_sequence(FluName::atom(), Prefix::{prefix, string()}) -> ok | {error, Reason::term()} | timeout</tt><br></p>
|
||||||
|
</div><p>Increment the sequence counter for a given prefix. Prefix should
|
||||||
|
be in the form of <code>{prefix, P}</code>.</p>
|
||||||
|
|
||||||
|
<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_by_prefix-2">list_files_by_prefix/2</a></h3>
|
||||||
|
<div class="spec">
|
||||||
|
<p><tt>list_files_by_prefix(FluName::atom(), Prefix::{prefix, string()}) -> [<a href="file.html#type-name">file:name()</a>] | timeout | {error, Reason::term()}</tt><br></p>
|
||||||
|
</div><p>Given a prefix in the form of <code>{prefix, P}</code> return
|
||||||
|
all the data files associated with that prefix. Returns
|
||||||
|
a list.</p>
|
||||||
|
|
||||||
|
<h3 class="function"><a name="start_link-2">start_link/2</a></h3>
|
||||||
|
<div class="spec">
|
||||||
|
<p><tt>start_link(FluName, DataDir) -> any()</tt></p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<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, Dec 8 2015, 21:37:38.</i></p>
|
||||||
|
</body>
|
||||||
|
</html>
|
123
edoc/machi_flu_metadata_mgr.html
Normal file
123
edoc/machi_flu_metadata_mgr.html
Normal file
|
@ -0,0 +1,123 @@
|
||||||
|
<!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_metadata_mgr</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_metadata_mgr</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>This is a metadata service for the machi FLU which currently
|
||||||
|
tracks the mappings between filenames and file proxies.
|
||||||
|
|
||||||
|
<p><b>Behaviours:</b> <a href="gen_server.html"><tt>gen_server</tt></a>.</p>
|
||||||
|
|
||||||
|
<h2><a name="description">Description</a></h2><p>This is a metadata service for the machi FLU which currently
|
||||||
|
tracks the mappings between filenames and file proxies.</p>
|
||||||
|
|
||||||
|
<p>The service takes a given hash space and spreads it out over a
|
||||||
|
pool of N processes which are responsible for 1/Nth the hash
|
||||||
|
space. When a user requests an operation on a particular file
|
||||||
|
the filename is hashed into the hash space and the request
|
||||||
|
forwarded to a particular manager responsible for that slice
|
||||||
|
of the hash space.</p>
|
||||||
|
|
||||||
|
The current hash implementation is <code>erlang:phash2/1</code> which has
|
||||||
|
a range between 0..2^27-1 or 134,217,727.
|
||||||
|
<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="#build_metadata_mgr_name-2">build_metadata_mgr_name/2</a></td><td></td></tr>
|
||||||
|
<tr><td valign="top"><a href="#child_spec-4">child_spec/4</a></td><td></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="#lookup_manager_pid-2">lookup_manager_pid/2</a></td><td></td></tr>
|
||||||
|
<tr><td valign="top"><a href="#lookup_proxy_pid-2">lookup_proxy_pid/2</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="#start_proxy_pid-2">start_proxy_pid/2</a></td><td></td></tr>
|
||||||
|
<tr><td valign="top"><a href="#stop_proxy_pid-2">stop_proxy_pid/2</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="#trim_file-2">trim_file/2</a></td><td></td></tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<h2><a name="functions">Function Details</a></h2>
|
||||||
|
|
||||||
|
<h3 class="function"><a name="build_metadata_mgr_name-2">build_metadata_mgr_name/2</a></h3>
|
||||||
|
<div class="spec">
|
||||||
|
<p><tt>build_metadata_mgr_name(FluName, N) -> any()</tt></p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h3 class="function"><a name="child_spec-4">child_spec/4</a></h3>
|
||||||
|
<div class="spec">
|
||||||
|
<p><tt>child_spec(FluName, C, DataDir, N) -> any()</tt></p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h3 class="function"><a name="code_change-3">code_change/3</a></h3>
|
||||||
|
<div class="spec">
|
||||||
|
<p><tt>code_change(OldVsn, State, 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(Req, From, State) -> any()</tt></p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h3 class="function"><a name="handle_cast-2">handle_cast/2</a></h3>
|
||||||
|
<div class="spec">
|
||||||
|
<p><tt>handle_cast(Req, State) -> 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, State) -> 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="lookup_manager_pid-2">lookup_manager_pid/2</a></h3>
|
||||||
|
<div class="spec">
|
||||||
|
<p><tt>lookup_manager_pid(FluName, X2) -> any()</tt></p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h3 class="function"><a name="lookup_proxy_pid-2">lookup_proxy_pid/2</a></h3>
|
||||||
|
<div class="spec">
|
||||||
|
<p><tt>lookup_proxy_pid(FluName, X2) -> 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, Name, DataDir, Num) -> any()</tt></p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h3 class="function"><a name="start_proxy_pid-2">start_proxy_pid/2</a></h3>
|
||||||
|
<div class="spec">
|
||||||
|
<p><tt>start_proxy_pid(FluName, X2) -> any()</tt></p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h3 class="function"><a name="stop_proxy_pid-2">stop_proxy_pid/2</a></h3>
|
||||||
|
<div class="spec">
|
||||||
|
<p><tt>stop_proxy_pid(FluName, X2) -> any()</tt></p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h3 class="function"><a name="terminate-2">terminate/2</a></h3>
|
||||||
|
<div class="spec">
|
||||||
|
<p><tt>terminate(Reason, State) -> any()</tt></p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h3 class="function"><a name="trim_file-2">trim_file/2</a></h3>
|
||||||
|
<div class="spec">
|
||||||
|
<p><tt>trim_file(FluName, X2) -> 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, Dec 8 2015, 21:37:38.</i></p>
|
||||||
|
</body>
|
||||||
|
</html>
|
49
edoc/machi_flu_metadata_mgr_sup.html
Normal file
49
edoc/machi_flu_metadata_mgr_sup.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_flu_metadata_mgr_sup</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_metadata_mgr_sup</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>This is the supervisor for the collection of metadata
|
||||||
|
managers.
|
||||||
|
|
||||||
|
<p><b>Behaviours:</b> <a href="supervisor.html"><tt>supervisor</tt></a>.</p>
|
||||||
|
|
||||||
|
<h2><a name="description">Description</a></h2>This is the supervisor for the collection of metadata
|
||||||
|
managers. It's started out of <code>machi_flu_psup</code>. It reads an
|
||||||
|
application environment variable named <code>metadata_manager_count</code>
|
||||||
|
with a default of 10 if it is not set.
|
||||||
|
<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="#child_spec-3">child_spec/3</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="#start_link-3">start_link/3</a></td><td></td></tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<h2><a name="functions">Function Details</a></h2>
|
||||||
|
|
||||||
|
<h3 class="function"><a name="child_spec-3">child_spec/3</a></h3>
|
||||||
|
<div class="spec">
|
||||||
|
<p><tt>child_spec(FluName, DataDir, N) -> 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="start_link-3">start_link/3</a></h3>
|
||||||
|
<div class="spec">
|
||||||
|
<p><tt>start_link(FluName, DataDir, N) -> 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, Dec 8 2015, 21:37:38.</i></p>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -131,6 +131,6 @@ at this time.</p>
|
||||||
<hr>
|
<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>
|
<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, Dec 8 2015, 21:33:07.</i></p>
|
<p><i>Generated by EDoc, Dec 8 2015, 21:37:38.</i></p>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
@ -48,6 +48,6 @@ servers.</p>
|
||||||
<hr>
|
<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>
|
<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, Dec 8 2015, 21:33:07.</i></p>
|
<p><i>Generated by EDoc, Dec 8 2015, 21:37:38.</i></p>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
229
edoc/machi_lifecycle_mgr.html
Normal file
229
edoc/machi_lifecycle_mgr.html
Normal file
|
@ -0,0 +1,229 @@
|
||||||
|
<!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_lifecycle_mgr</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_lifecycle_mgr</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>Lifecycle manager for Machi FLUs and chains.
|
||||||
|
|
||||||
|
<p><b>Behaviours:</b> <a href="gen_server.html"><tt>gen_server</tt></a>.</p>
|
||||||
|
|
||||||
|
<h2><a name="description">Description</a></h2><p>Lifecycle manager for Machi FLUs and chains.</p>
|
||||||
|
|
||||||
|
<p>Over the lifetime of a Machi cluster, both the number and types of
|
||||||
|
FLUs and chains may change. The lifecycle manager is responsible
|
||||||
|
for implementing the lifecycle changes as expressed by "policy".
|
||||||
|
In our case, "policy" is created by an external administrative
|
||||||
|
entity that creates and deletes configuration files that define
|
||||||
|
FLUs and chains relative to this local machine.</p>
|
||||||
|
|
||||||
|
<p>The "master configuration" for deciding which FLUs should be
|
||||||
|
running on this machine was inspired by BSD UNIX's <code>init(8)</code> and the
|
||||||
|
"rc.d" scheme. FLU definitions are found in a single directory,
|
||||||
|
with one file per FLU. Chains are defined similarly, with one
|
||||||
|
definition file per chain.</p>
|
||||||
|
|
||||||
|
<p>If a definition file for a FLU (or chain) exists, then that
|
||||||
|
FLU/chain ought to be configured into being and running. If a
|
||||||
|
definition file for a FLU/chain is removed, then that FLU/chain
|
||||||
|
should be stopped gracefully. However, deleting of a file destroys
|
||||||
|
information that is stored inside of that file. Therefore, we will
|
||||||
|
<b>not allow arbitrary unlinking of lifecycle config files</b>. If
|
||||||
|
the administrator deletes these config files using <code>unlink(8)</code>
|
||||||
|
directly, then "the warranty has been broken".</p>
|
||||||
|
|
||||||
|
<p>We will rely on using an administrative command to inform the
|
||||||
|
running system to stop and/or delete lifecycle resources. If the
|
||||||
|
Machi application is not running, sorry, please start Machi first.</p>
|
||||||
|
|
||||||
|
<h3><a name="Wheel_reinvention">Wheel reinvention</a></h3>
|
||||||
|
|
||||||
|
<p>There's a whole mess of configuration management research &
|
||||||
|
libraries out there. I hope to ignore them all by doing something
|
||||||
|
quick & dirty & good enough here. If I fail, then I'll go
|
||||||
|
pay attention to That Other Stuff.</p>
|
||||||
|
|
||||||
|
<h3><a name="A_note_about_policy">A note about policy</a></h3>
|
||||||
|
|
||||||
|
<p>It is outside of the scope of this local lifecycle manager to make
|
||||||
|
decisions about policy or to distribute policy info/files/whatever
|
||||||
|
to other machines. This is our machine. There are many like it,
|
||||||
|
but this one is ours.</p>
|
||||||
|
|
||||||
|
<h3><a name="Machi_Application_Variables">Machi Application Variables</a></h3>
|
||||||
|
|
||||||
|
<p>All OTP application environment variables below are defined in the
|
||||||
|
<code>machi</code> application.</p>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li> <tt>flu_config_dir</tt>: Stores the <code>rc.d-</code>like config files for
|
||||||
|
FLU runtime policy.
|
||||||
|
</li>
|
||||||
|
<li> <tt>flu_data_dir</tt>: Stores the file data and metadata for
|
||||||
|
all FLUs.
|
||||||
|
</li>
|
||||||
|
<li> <tt>chain_config_dir</tt>: Stores the <code>rc.d</code>-like config files for
|
||||||
|
chain runtime policy.
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h3><a name="The_FLU_Lifecycle">The FLU Lifecycle</a></h3>
|
||||||
|
|
||||||
|
<p>FLUs on the local machine may be started and stopped, as defined by
|
||||||
|
administrative policy. In order to do any useful work, however, a
|
||||||
|
running FLU must also be configured to be a member of a replication
|
||||||
|
chain. Thus, as a practical matter, both a FLU and the chain that
|
||||||
|
the FLU participates in must both be managed by this manager.</p>
|
||||||
|
|
||||||
|
<p>When a new <code>rc.d</code>-style config file is written to the FLU
|
||||||
|
definition directory, a Machi server process will discover the file
|
||||||
|
within a certain period of time, e.g. 15 seconds. The FLU will be
|
||||||
|
started with the file's specified parameters. A FLU should be
|
||||||
|
defined and started before configuring its chain membership.</p>
|
||||||
|
|
||||||
|
<p>Usually a FLU is removed implicitly by removing that FLU from the a
|
||||||
|
newer definition file for the chain, or by deleting the entire
|
||||||
|
chain definition. If a FLU has been started but never been a chain
|
||||||
|
member, then the FLU can be stopped & removed explicitly.</p>
|
||||||
|
|
||||||
|
<p>When a FLU has been removed by policy, the FLU's data files are set
|
||||||
|
aside into a temporary area. An additional policy command may be
|
||||||
|
used to permanently delete such FLUs' data files, i.e. to reclaim
|
||||||
|
disk space.</p>
|
||||||
|
|
||||||
|
<p>Resources for the FLU are defined in <code>machi_projection.hrl</code>
|
||||||
|
in the <code>p_srvr{}</code> record. The major elements of this record are:</p>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
|
||||||
|
<li> <tt>name :: atom()</tt>: The name of the FLU. This name
|
||||||
|
should be unique over the lifetime of the administrative
|
||||||
|
domain and thus managed by outside policy. This name must be
|
||||||
|
the same as the name of the <code>rc.d</code>-style config file that
|
||||||
|
defines the FLU.
|
||||||
|
</li>
|
||||||
|
<li> <tt>address :: string()</tt>: The DNS hostname or IP address
|
||||||
|
used by other servers to communicate with this FLU.
|
||||||
|
</li>
|
||||||
|
<li> <tt>port :: non_neg_integer() </tt>: The TCP port number that
|
||||||
|
the FLU listens to for incoming Protocol Buffers-serialized
|
||||||
|
communication.
|
||||||
|
</li>
|
||||||
|
<li> <tt>props :: property_list()</tt>: A general-purpose property
|
||||||
|
list. Its use is currently fluid & not well-defined yet.
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h3><a name="The_Chain_Lifecycle">The Chain Lifecycle</a></h3>
|
||||||
|
|
||||||
|
<p>If a FLU on the local machine is expected to participate in a
|
||||||
|
replication chain, then an <code>rc.d</code>-style chain definition file must
|
||||||
|
also be present on each machine that runs a FLU in the chain.</p>
|
||||||
|
|
||||||
|
<p>Machi's chains are self-managing, via Humming Consensus; see the
|
||||||
|
<a href="https://github.com/basho/machi/tree/master/doc/" target="_top"><tt>https://github.com/basho/machi/tree/master/doc/</tt></a> directory for
|
||||||
|
much more detail about Humming Consensus. After FLUs have received
|
||||||
|
their initial chain configuration for Humming Consensus, the FLUs
|
||||||
|
will manage each other (and the chain) themselves.</p>
|
||||||
|
|
||||||
|
<p>However, Humming Consensus does not handle three chain management
|
||||||
|
problems: 1. specifying the very first chain configuration,
|
||||||
|
2. altering the membership of the chain (adding/removing FLUs from
|
||||||
|
the chain), or 3. stopping the chain permanently.</p>
|
||||||
|
|
||||||
|
<p>FLUs in a new chain should have definition files created on each
|
||||||
|
FLU's respective machine prior to defining their chain. Similarly,
|
||||||
|
on each machine that hosts a chain member, a chain definition file
|
||||||
|
created. External policy is responsible for creating each of these
|
||||||
|
files.</p>
|
||||||
|
|
||||||
|
<p>Resources for the chain are defined in <code>machi_projection.hrl</code>
|
||||||
|
in the <code>chain_def_v1{}</code> record. The major elements of this record are:</p>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
|
||||||
|
<li> <tt>name :: atom()</tt>: The name of the chain. This name
|
||||||
|
should be unique over the lifetime of the administrative
|
||||||
|
domain and thus managed by outside policy. This name must be
|
||||||
|
the same as the name of the <code>rc.d</code>-style config file that
|
||||||
|
defines the chain.
|
||||||
|
</li>
|
||||||
|
<li> <tt>mode :: 'ap_mode' | 'cp_mode'</tt>: This is the consistency
|
||||||
|
to be used for managing the chain's replicated data: eventual
|
||||||
|
consistency and strong consistency, respectively.
|
||||||
|
</li>
|
||||||
|
<li> <tt>full :: [#p_srvr{}] </tt>: A list of <code>#p_srvr{}</code> records
|
||||||
|
to define the full-service members of the chain.
|
||||||
|
</li>
|
||||||
|
<li> <tt>witnesses :: [#p_srvr{}] </tt>: A list of <code>#p_srvr{}</code> records
|
||||||
|
to define the witness-only members of the chain. Witness servers
|
||||||
|
may only be used with strong consistency mode.
|
||||||
|
</li>
|
||||||
|
<li> <tt>props :: property_list()</tt>: A general-purpose property
|
||||||
|
list. Its use is currently fluid & not well-defined yet.
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h3><a name="Conflicts_with_TCP_ports,_FLU_&_chain_names,_etc">Conflicts with TCP ports, FLU & chain names, etc</a></h3>
|
||||||
|
|
||||||
|
This manager is not responsible for managing conflicts in resource
|
||||||
|
namespaces, e.g., TCP port numbers, FLU names, chain names, etc.
|
||||||
|
Managing these namespaces is external policy's responsibility.
|
||||||
|
<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="#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="#start_link-0">start_link/0</a></td><td></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="code_change-3">code_change/3</a></h3>
|
||||||
|
<div class="spec">
|
||||||
|
<p><tt>code_change(OldVsn, State, 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, State) -> 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, State) -> 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, State) -> 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="start_link-0">start_link/0</a></h3>
|
||||||
|
<div class="spec">
|
||||||
|
<p><tt>start_link() -> any()</tt></p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<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, Dec 8 2015, 21:37:38.</i></p>
|
||||||
|
</body>
|
||||||
|
</html>
|
69
edoc/machi_merkle_tree.html
Normal file
69
edoc/machi_merkle_tree.html
Normal file
|
@ -0,0 +1,69 @@
|
||||||
|
<!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_merkle_tree</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_merkle_tree</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>Creates a Merkle tree per file based on the checksum data for
|
||||||
|
a given data file.
|
||||||
|
|
||||||
|
|
||||||
|
<h2><a name="description">Description</a></h2><p>Creates a Merkle tree per file based on the checksum data for
|
||||||
|
a given data file.</p>
|
||||||
|
|
||||||
|
<p>The <code>naive</code> implementation representation is:</p>
|
||||||
|
|
||||||
|
<p><code><<Length:64, Offset:32, 0>></code> for unwritten bytes
|
||||||
|
<code><<Length:64, Offset:32, 1>></code> for trimmed bytes
|
||||||
|
<code><<Length:64, Offset:32, Csum/binary>></code> for written bytes</p>
|
||||||
|
|
||||||
|
The tree feeds these leaf nodes into hashes representing chunks of a minimum
|
||||||
|
size of at least 1024 KB (1 MB), but if the file size is larger, we will try
|
||||||
|
to get about 100 chunks for the first rollup "Level 1." We aim for around 10
|
||||||
|
hashes at level 2, and then 2 hashes level 3 and finally the root.
|
||||||
|
<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="#diff-2">diff/2</a></td><td></td></tr>
|
||||||
|
<tr><td valign="top"><a href="#filename-1">filename/1</a></td><td></td></tr>
|
||||||
|
<tr><td valign="top"><a href="#open-2">open/2</a></td><td></td></tr>
|
||||||
|
<tr><td valign="top"><a href="#open-3">open/3</a></td><td></td></tr>
|
||||||
|
<tr><td valign="top"><a href="#tree-1">tree/1</a></td><td></td></tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<h2><a name="functions">Function Details</a></h2>
|
||||||
|
|
||||||
|
<h3 class="function"><a name="diff-2">diff/2</a></h3>
|
||||||
|
<div class="spec">
|
||||||
|
<p><tt>diff(Mt, X2) -> any()</tt></p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h3 class="function"><a name="filename-1">filename/1</a></h3>
|
||||||
|
<div class="spec">
|
||||||
|
<p><tt>filename(Mt) -> any()</tt></p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h3 class="function"><a name="open-2">open/2</a></h3>
|
||||||
|
<div class="spec">
|
||||||
|
<p><tt>open(Filename, DataDir) -> any()</tt></p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h3 class="function"><a name="open-3">open/3</a></h3>
|
||||||
|
<div class="spec">
|
||||||
|
<p><tt>open(Filename, DataDir, Type) -> any()</tt></p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h3 class="function"><a name="tree-1">tree/1</a></h3>
|
||||||
|
<div class="spec">
|
||||||
|
<p><tt>tree(Mt) -> 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, Dec 8 2015, 21:37:38.</i></p>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -199,6 +199,6 @@
|
||||||
<hr>
|
<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>
|
<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, Dec 8 2015, 21:33:07.</i></p>
|
<p><i>Generated by EDoc, Dec 8 2015, 21:37:38.</i></p>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
55
edoc/machi_pb_translate.html
Normal file
55
edoc/machi_pb_translate.html
Normal file
|
@ -0,0 +1,55 @@
|
||||||
|
<!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_pb_translate</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_pb_translate</h1>
|
||||||
|
<ul class="index"><li><a href="#index">Function Index</a></li><li><a href="#functions">Function Details</a></li></ul>
|
||||||
|
|
||||||
|
|
||||||
|
<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="#conv_to_csum_tag-1">conv_to_csum_tag/1</a></td><td></td></tr>
|
||||||
|
<tr><td valign="top"><a href="#from_pb_request-1">from_pb_request/1</a></td><td>Adapt impedence mismatches between Erlang and Protocol Buffers.</td></tr>
|
||||||
|
<tr><td valign="top"><a href="#from_pb_response-1">from_pb_response/1</a></td><td></td></tr>
|
||||||
|
<tr><td valign="top"><a href="#to_pb_request-2">to_pb_request/2</a></td><td></td></tr>
|
||||||
|
<tr><td valign="top"><a href="#to_pb_response-3">to_pb_response/3</a></td><td></td></tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<h2><a name="functions">Function Details</a></h2>
|
||||||
|
|
||||||
|
<h3 class="function"><a name="conv_to_csum_tag-1">conv_to_csum_tag/1</a></h3>
|
||||||
|
<div class="spec">
|
||||||
|
<p><tt>conv_to_csum_tag(Type) -> any()</tt></p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h3 class="function"><a name="from_pb_request-1">from_pb_request/1</a></h3>
|
||||||
|
<div class="spec">
|
||||||
|
<p><tt>from_pb_request(Mpb_ll_request) -> any()</tt></p>
|
||||||
|
</div><p>Adapt impedence mismatches between Erlang and Protocol Buffers.</p>
|
||||||
|
|
||||||
|
<h3 class="function"><a name="from_pb_response-1">from_pb_response/1</a></h3>
|
||||||
|
<div class="spec">
|
||||||
|
<p><tt>from_pb_response(Mpb_ll_response) -> any()</tt></p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h3 class="function"><a name="to_pb_request-2">to_pb_request/2</a></h3>
|
||||||
|
<div class="spec">
|
||||||
|
<p><tt>to_pb_request(ReqID, X2) -> any()</tt></p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h3 class="function"><a name="to_pb_response-3">to_pb_response/3</a></h3>
|
||||||
|
<div class="spec">
|
||||||
|
<p><tt>to_pb_response(ReqID, X2, X) -> 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, Dec 8 2015, 21:37:38.</i></p>
|
||||||
|
</body>
|
||||||
|
</html>
|
61
edoc/machi_plist.html
Normal file
61
edoc/machi_plist.html
Normal file
|
@ -0,0 +1,61 @@
|
||||||
|
<!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_plist</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_plist</h1>
|
||||||
|
<ul class="index"><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>
|
||||||
|
|
||||||
|
|
||||||
|
<h2><a name="types">Data Types</a></h2>
|
||||||
|
|
||||||
|
<h3 class="typedecl"><a name="type-plist">plist()</a></h3>
|
||||||
|
<p><tt>plist() = #machi_plist{}</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="#add-2">add/2</a></td><td></td></tr>
|
||||||
|
<tr><td valign="top"><a href="#all-1">all/1</a></td><td></td></tr>
|
||||||
|
<tr><td valign="top"><a href="#close-1">close/1</a></td><td></td></tr>
|
||||||
|
<tr><td valign="top"><a href="#find-2">find/2</a></td><td></td></tr>
|
||||||
|
<tr><td valign="top"><a href="#open-2">open/2</a></td><td>persistent list of binaries.</td></tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<h2><a name="functions">Function Details</a></h2>
|
||||||
|
|
||||||
|
<h3 class="function"><a name="add-2">add/2</a></h3>
|
||||||
|
<div class="spec">
|
||||||
|
<p><tt>add(Plist::<a href="#type-plist">plist()</a>, Name::string()) -> {ok, <a href="#type-plist">plist()</a>} | {error, <a href="file.html#type-posix">file:posix()</a>}</tt><br></p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h3 class="function"><a name="all-1">all/1</a></h3>
|
||||||
|
<div class="spec">
|
||||||
|
<p><tt>all(Machi_plist::<a href="#type-plist">plist()</a>) -> [<a href="file.html#type-filename">file:filename()</a>]</tt><br></p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h3 class="function"><a name="close-1">close/1</a></h3>
|
||||||
|
<div class="spec">
|
||||||
|
<p><tt>close(Machi_plist::<a href="#type-plist">plist()</a>) -> ok</tt><br></p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h3 class="function"><a name="find-2">find/2</a></h3>
|
||||||
|
<div class="spec">
|
||||||
|
<p><tt>find(Machi_plist::<a href="#type-plist">plist()</a>, Name::string()) -> boolean()</tt><br></p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h3 class="function"><a name="open-2">open/2</a></h3>
|
||||||
|
<div class="spec">
|
||||||
|
<p><tt>open(Filename::<a href="file.html#type-filename_all">file:filename_all()</a>, Opt::<a href="proplists.html#type-proplist">proplists:proplist()</a>) -> {ok, <a href="#type-plist">plist()</a>} | {error, <a href="file.html#type-posix">file:posix()</a>}</tt><br></p>
|
||||||
|
</div><p>persistent list of binaries</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, Dec 8 2015, 21:37:38.</i></p>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -101,6 +101,6 @@ correctly.</p>
|
||||||
<hr>
|
<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>
|
<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, Dec 8 2015, 21:33:07.</i></p>
|
<p><i>Generated by EDoc, Dec 8 2015, 21:37:38.</i></p>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
@ -176,6 +176,6 @@ client access protocol (on the "server side" of the TCP connection).</p>
|
||||||
<hr>
|
<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>
|
<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, Dec 8 2015, 21:33:07.</i></p>
|
<p><i>Generated by EDoc, Dec 8 2015, 21:37:38.</i></p>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
@ -318,6 +318,6 @@ TCP communication problems with the remote server.</p>
|
||||||
<hr>
|
<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>
|
<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, Dec 8 2015, 21:33:07.</i></p>
|
<p><i>Generated by EDoc, Dec 8 2015, 21:37:38.</i></p>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
@ -37,6 +37,6 @@
|
||||||
<hr>
|
<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>
|
<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, Dec 8 2015, 21:33:07.</i></p>
|
<p><i>Generated by EDoc, Dec 8 2015, 21:37:38.</i></p>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
@ -283,6 +283,6 @@
|
||||||
<hr>
|
<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>
|
<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, Dec 8 2015, 21:33:07.</i></p>
|
<p><i>Generated by EDoc, Dec 8 2015, 21:37:38.</i></p>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
@ -255,6 +255,6 @@
|
||||||
<hr>
|
<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>
|
<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, Dec 8 2015, 21:33:07.</i></p>
|
<p><i>Generated by EDoc, Dec 8 2015, 21:37:38.</i></p>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
@ -180,6 +180,6 @@ the code, is a reminder signal of unfinished work.</p>
|
||||||
|
|
||||||
<hr>
|
<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>
|
<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, Dec 8 2015, 21:33:07.</i></p>
|
<p><i>Generated by EDoc, Dec 8 2015, 21:37:38.</i></p>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
Loading…
Reference in a new issue