Skip to content

Commit

Permalink
Merge pull request #7 from lpgauth/dev
Browse files Browse the repository at this point in the history
0.2.1
  • Loading branch information
lpgauth committed Apr 6, 2015
2 parents bbd53f2 + f2081f0 commit 48e0481
Show file tree
Hide file tree
Showing 12 changed files with 191 additions and 96 deletions.
46 changes: 32 additions & 14 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

Non-blocking Erlang Cassandra CQL3 client

## Requirements
### Requirements

* Cassandra 2.1 +
* Erlang 17.0 +
Expand All @@ -19,10 +19,20 @@ Non-blocking Erlang Cassandra CQL3 client
* Prepared statement cache
* Compression support (lz4)

### Environment variables

<table width="100%" border="0"><theader><th>Name</th><th>Type</th><th>Default</th><th>Description</th></tr><tr><td>ip</td><td>list()</td><td>"127.0.0.1"</td><td>server ip</td></tr><tr><td>port</td><td>pos_integer()</td><td>9042</td><td>server port</td></tr><tr><td>keyspace</td><td>undefined | binary()</td><td>undefined</td><td>default keyspace</td></tr><tr><td>pool_size</td><td>pos_integer()</td><td>16</td><td>number of connections</td></tr><tr><td>backlog_size</td><td>pos_integer()</td><td>1024</td><td>maximum number of concurrent requests per connection</td></tr><tr><td>compression</td><td>boolean()</td><td>false</td><td>enable lz4 compression</td></tr>
</table>

### TODO

* batched queries
* token aware load balancing

## Examples

```erlang
marina:query(<<"SELECT * FROM \"test\".users LIMIT 1;">>, ?CONSISTENCY_ONE, [], 1000).
1> marina:query(<<"SELECT * FROM test.users LIMIT 1;">>, ?CONSISTENCY_ONE, [], 1000).
{ok,{result,{result_metadata,4,
[{column_spec,<<"test">>,<<"users">>,<<"key">>,uid},
{column_spec,<<"test">>,<<"users">>,<<"column1">>,varchar},
Expand All @@ -34,22 +44,36 @@ marina:query(<<"SELECT * FROM \"test\".users LIMIT 1;">>, ?CONSISTENCY_ONE, [],
<<"test2">>,
<<0,0,0,0>>]]
}}

2> marina:query(<<"SELECT * FROM test.users WHERE key = ?;">>,
[<<153,73,45,254,217,74,17,228,175,57,88,244,65,16,117,125>>], ?CONSISTENCY_ONE,
[{skip_metadata, true}], 1000).

marina:query(<<"SELECT * FROM \"test\".users LIMIT 1;">>, ?CONSISTENCY_ONE, [{skip_metadata, true}], 1000).
{ok,{result,{result_metadata,4,[]},
1,
[[<<153,73,45,254,217,74,17,228,175,57,88,244,65,16,117,125>>,
<<"test">>,
<<"test2">>,
<<0,0,0,0>>]]
}}

3> marina:async_reusable_query(<<"SELECT * FROM test.users WHERE key = ?;">>,
[<<207,85,107,110,157,137,17,226,167,153,120,43,203,102,219,173>>],
?CONSISTENCY_ONE, [],self(),500).

{ok,#Ref<0.0.0.124>}

4> flush().
Shell got {marina,#Ref<0.0.0.124>,
{ok,{frame,0,0,8,
<<0,0,0,2,0,0,0,1,0,0,0,4,0,3,82,84,66,0,5,117,
115,101,114,115,0,3,107,101,121,0,12,0,7,99,
111,108,117,109,110,49,0,13,0,7,99,111,108,
117,109,110,50,0,13,0,5,118,97,108,117,101,0,
3,0,0,0,0>>
}}}
```

## Environment variables

<table width="100%" border="0"><theader><th>Name</th><th>Type</th><th>Default</th><th>Description</th></tr><tr><td>ip</td><td>list()</td><td>"127.0.0.1"</td><td>server ip</td></tr><tr><td>port</td><td>pos_integer()</td><td>9042</td><td>server port</td></tr><tr><td>keyspace</td><td>undefined | binary()</td><td>undefined</td><td>default keyspace</td></tr><tr><td>pool_size</td><td>pos_integer()</td><td>16</td><td>number of connections</td></tr><tr><td>backlog_size</td><td>pos_integer()</td><td>1024</td><td>maximum number of concurrent requests per connection</td></tr><tr><td>compression</td><td>boolean()</td><td>false</td><td>enable lz4 compression</td></tr>
</table>

## Modules

<table width="100%" border="0">
Expand All @@ -66,9 +90,3 @@ marina:query(<<"SELECT * FROM \"test\".users LIMIT 1;">>, ?CONSISTENCY_ONE, [{sk
<tr><td><a href="http://github.com/lpgauth/marina/blob/master/doc/marina_sup.md" class="module">marina_sup</a></td></tr>
<tr><td><a href="http://github.com/lpgauth/marina/blob/master/doc/marina_types.md" class="module">marina_types</a></td></tr>
<tr><td><a href="http://github.com/lpgauth/marina/blob/master/doc/marina_utils.md" class="module">marina_utils</a></td></tr></table>

## TODO

* batched queries
* documentation
* token aware load balancing
57 changes: 56 additions & 1 deletion doc/marina.md
Original file line number Diff line number Diff line change
Expand Up @@ -76,13 +76,24 @@ value() = binary()
## Function Index ##


<table width="100%" border="1" cellspacing="0" cellpadding="2" summary="function index"><tr><td valign="top"><a href="#async_execute-5">async_execute/5</a></td><td></td></tr><tr><td valign="top"><a href="#async_prepare-2">async_prepare/2</a></td><td></td></tr><tr><td valign="top"><a href="#async_query-4">async_query/4</a></td><td></td></tr><tr><td valign="top"><a href="#async_reusable_query-6">async_reusable_query/6</a></td><td></td></tr><tr><td valign="top"><a href="#execute-5">execute/5</a></td><td></td></tr><tr><td valign="top"><a href="#prepare-2">prepare/2</a></td><td></td></tr><tr><td valign="top"><a href="#query-4">query/4</a></td><td></td></tr><tr><td valign="top"><a href="#response-1">response/1</a></td><td></td></tr><tr><td valign="top"><a href="#reusable_query-5">reusable_query/5</a></td><td></td></tr></table>
<table width="100%" border="1" cellspacing="0" cellpadding="2" summary="function index"><tr><td valign="top"><a href="#async_execute-4">async_execute/4</a></td><td></td></tr><tr><td valign="top"><a href="#async_execute-5">async_execute/5</a></td><td></td></tr><tr><td valign="top"><a href="#async_prepare-2">async_prepare/2</a></td><td></td></tr><tr><td valign="top"><a href="#async_query-4">async_query/4</a></td><td></td></tr><tr><td valign="top"><a href="#async_reusable_query-5">async_reusable_query/5</a></td><td></td></tr><tr><td valign="top"><a href="#async_reusable_query-6">async_reusable_query/6</a></td><td></td></tr><tr><td valign="top"><a href="#execute-4">execute/4</a></td><td></td></tr><tr><td valign="top"><a href="#execute-5">execute/5</a></td><td></td></tr><tr><td valign="top"><a href="#prepare-2">prepare/2</a></td><td></td></tr><tr><td valign="top"><a href="#query-4">query/4</a></td><td></td></tr><tr><td valign="top"><a href="#query-5">query/5</a></td><td></td></tr><tr><td valign="top"><a href="#response-1">response/1</a></td><td></td></tr><tr><td valign="top"><a href="#reusable_query-4">reusable_query/4</a></td><td></td></tr><tr><td valign="top"><a href="#reusable_query-5">reusable_query/5</a></td><td></td></tr></table>


<a name="functions"></a>

## Function Details ##

<a name="async_execute-4"></a>

### async_execute/4 ###


<pre><code>
async_execute(StatementId::<a href="#type-statement_id">statement_id()</a>, ConsistencyLevel::<a href="#type-consistency">consistency()</a>, Flags::[<a href="#type-flag">flag()</a>], Pid::pid()) -&gt; {ok, <a href="erlang.md#type-ref">erlang:ref()</a>} | {error, backlog_full}
</code></pre>
<br />


<a name="async_execute-5"></a>

### async_execute/5 ###
Expand Down Expand Up @@ -116,6 +127,17 @@ async_query(Query::<a href="#type-query">query()</a>, ConsistencyLevel::<a href=
<br />


<a name="async_reusable_query-5"></a>

### async_reusable_query/5 ###


<pre><code>
async_reusable_query(Query::<a href="#type-query">query()</a>, ConsistencyLevel::<a href="#type-consistency">consistency()</a>, Flags::[<a href="#type-flag">flag()</a>], Pid::pid(), Timeout::timeout()) -&gt; {ok, <a href="erlang.md#type-ref">erlang:ref()</a>} | {error, term()}
</code></pre>
<br />


<a name="async_reusable_query-6"></a>

### async_reusable_query/6 ###
Expand All @@ -127,6 +149,17 @@ async_reusable_query(Query::<a href="#type-query">query()</a>, Values::[<a href=
<br />


<a name="execute-4"></a>

### execute/4 ###


<pre><code>
execute(StatementId::<a href="#type-statement_id">statement_id()</a>, ConsistencyLevel::<a href="#type-consistency">consistency()</a>, Flags::[<a href="#type-flag">flag()</a>], Timeout::timeout()) -&gt; {ok, term()} | {error, term()}
</code></pre>
<br />


<a name="execute-5"></a>

### execute/5 ###
Expand Down Expand Up @@ -160,6 +193,17 @@ query(Query::<a href="#type-query">query()</a>, ConsistencyLevel::<a href="#type
<br />


<a name="query-5"></a>

### query/5 ###


<pre><code>
query(Query::<a href="#type-query">query()</a>, Values::[<a href="#type-value">value()</a>], ConsistencyLevel::<a href="#type-consistency">consistency()</a>, Flags::[<a href="#type-flag">flag()</a>], Timeout::timeout()) -&gt; {ok, term()} | {error, term()}
</code></pre>
<br />


<a name="response-1"></a>

### response/1 ###
Expand All @@ -171,6 +215,17 @@ response(X1::{ok, term()} | {error, term()}) -&gt; {ok, term()} | {error, term()
<br />


<a name="reusable_query-4"></a>

### reusable_query/4 ###


<pre><code>
reusable_query(Query::<a href="#type-query">query()</a>, ConsistencyLevel::<a href="#type-consistency">consistency()</a>, Flags::[<a href="#type-flag">flag()</a>], Timeout::timeout()) -&gt; {ok, term()} | {error, term()}
</code></pre>
<br />


<a name="reusable_query-5"></a>

### reusable_query/5 ###
Expand Down
14 changes: 1 addition & 13 deletions doc/marina_body.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,19 +19,7 @@


<pre><code>
frame() = #frame{flags = undefined | <a href="#type-frame_flag">frame_flag()</a>, stream = undefined | integer(), opcode = undefined | non_neg_integer(), body = undefined | binary()}
</code></pre>





### <a name="type-frame_flag">frame_flag()</a> ###



<pre><code>
frame_flag() = {compression, boolean()}
frame() = #frame{flags = undefined | 0 | 1, stream = undefined | integer(), opcode = undefined | non_neg_integer(), body = undefined | iolist() | binary()}
</code></pre>


Expand Down
14 changes: 1 addition & 13 deletions doc/marina_buffer.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,19 +31,7 @@ buffer() = #buffer{buffered = undefined | iolist(), current = undefined | non_ne


<pre><code>
frame() = #frame{flags = undefined | <a href="#type-frame_flag">frame_flag()</a>, stream = undefined | integer(), opcode = undefined | non_neg_integer(), body = undefined | binary()}
</code></pre>





### <a name="type-frame_flag">frame_flag()</a> ###



<pre><code>
frame_flag() = {compression, boolean()}
frame() = #frame{flags = undefined | 0 | 1, stream = undefined | integer(), opcode = undefined | non_neg_integer(), body = undefined | iolist() | binary()}
</code></pre>


Expand Down
16 changes: 2 additions & 14 deletions doc/marina_frame.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,19 +19,7 @@


<pre><code>
frame() = #frame{flags = undefined | <a href="#type-frame_flag">frame_flag()</a>, stream = undefined | integer(), opcode = undefined | non_neg_integer(), body = undefined | binary()}
</code></pre>





### <a name="type-frame_flag">frame_flag()</a> ###



<pre><code>
frame_flag() = {compression, boolean()}
frame() = #frame{flags = undefined | 0 | 1, stream = undefined | integer(), opcode = undefined | non_neg_integer(), body = undefined | iolist() | binary()}
</code></pre>


Expand Down Expand Up @@ -64,7 +52,7 @@ decode(Bin::binary()) -&gt; {binary(), [<a href="#type-frame">frame()</a>]}


<pre><code>
encode(Frame::<a href="#type-frame">frame()</a>) -&gt; binary()
encode(Frame::<a href="#type-frame">frame()</a>) -&gt; iolist()
</code></pre>
<br />

Expand Down
26 changes: 19 additions & 7 deletions doc/marina_request.md
Original file line number Diff line number Diff line change
Expand Up @@ -83,12 +83,24 @@ stream() = 0..32768
</code></pre>





### <a name="type-value">value()</a> ###



<pre><code>
value() = binary()
</code></pre>


<a name="index"></a>

## Function Index ##


<table width="100%" border="1" cellspacing="0" cellpadding="2" summary="function index"><tr><td valign="top"><a href="#execute-6">execute/6</a></td><td></td></tr><tr><td valign="top"><a href="#prepare-3">prepare/3</a></td><td></td></tr><tr><td valign="top"><a href="#query-5">query/5</a></td><td></td></tr><tr><td valign="top"><a href="#startup-1">startup/1</a></td><td></td></tr></table>
<table width="100%" border="1" cellspacing="0" cellpadding="2" summary="function index"><tr><td valign="top"><a href="#execute-6">execute/6</a></td><td></td></tr><tr><td valign="top"><a href="#prepare-3">prepare/3</a></td><td></td></tr><tr><td valign="top"><a href="#query-6">query/6</a></td><td></td></tr><tr><td valign="top"><a href="#startup-1">startup/1</a></td><td></td></tr></table>


<a name="functions"></a>
Expand All @@ -101,7 +113,7 @@ stream() = 0..32768


<pre><code>
execute(Stream::<a href="#type-stream">stream()</a>, FrameFlags::[<a href="#type-frame_flag">frame_flag()</a>], StatementId::<a href="#type-statement_id">statement_id()</a>, Values::[binary()], ConsistencyLevel::<a href="#type-consistency">consistency()</a>, Flags::[<a href="#type-flag">flag()</a>]) -&gt; binary()
execute(Stream::<a href="#type-stream">stream()</a>, FrameFlags::[<a href="#type-frame_flag">frame_flag()</a>], StatementId::<a href="#type-statement_id">statement_id()</a>, Values::[<a href="#type-value">value()</a>], ConsistencyLevel::<a href="#type-consistency">consistency()</a>, Flags::[<a href="#type-flag">flag()</a>]) -&gt; iolist()
</code></pre>
<br />

Expand All @@ -112,18 +124,18 @@ execute(Stream::<a href="#type-stream">stream()</a>, FrameFlags::[<a href="#type


<pre><code>
prepare(Stream::<a href="#type-stream">stream()</a>, FrameFlags::[<a href="#type-frame_flag">frame_flag()</a>], Query::<a href="#type-query">query()</a>) -&gt; binary()
prepare(Stream::<a href="#type-stream">stream()</a>, FrameFlags::[<a href="#type-frame_flag">frame_flag()</a>], Query::<a href="#type-query">query()</a>) -&gt; iolist()
</code></pre>
<br />


<a name="query-5"></a>
<a name="query-6"></a>

### query/5 ###
### query/6 ###


<pre><code>
query(Stream::<a href="#type-stream">stream()</a>, FrameFlags::[<a href="#type-frame_flag">frame_flag()</a>], Query::<a href="#type-query">query()</a>, ConsistencyLevel::<a href="#type-consistency">consistency()</a>, Flags::[<a href="#type-flag">flag()</a>]) -&gt; binary()
query(Stream::<a href="#type-stream">stream()</a>, FrameFlags::[<a href="#type-frame_flag">frame_flag()</a>], Query::<a href="#type-query">query()</a>, Values::[<a href="#type-value">value()</a>], ConsistencyLevel::<a href="#type-consistency">consistency()</a>, Flags::[<a href="#type-flag">flag()</a>]) -&gt; iolist()
</code></pre>
<br />

Expand All @@ -134,7 +146,7 @@ query(Stream::<a href="#type-stream">stream()</a>, FrameFlags::[<a href="#type-f


<pre><code>
startup(FrameFlags::[<a href="#type-frame_flag">frame_flag()</a>]) -&gt; binary()
startup(FrameFlags::[<a href="#type-frame_flag">frame_flag()</a>]) -&gt; iolist()
</code></pre>
<br />

Expand Down
4 changes: 2 additions & 2 deletions include/marina.hrl
Original file line number Diff line number Diff line change
Expand Up @@ -59,10 +59,10 @@
}).

-record(frame, {
flags :: frame_flag(),
flags :: 0 | 1,
stream :: integer(),
opcode :: non_neg_integer(),
body :: binary()
body :: iolist() | binary()
}).

-record(column_spec, {
Expand Down
2 changes: 1 addition & 1 deletion src/marina.app.src
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{application, marina, [
{description, "cassandra client"},
{vsn, "0.2.0"},
{vsn, "0.2.1"},
{registered, []},
{applications, [
kernel,
Expand Down
Loading

0 comments on commit 48e0481

Please sign in to comment.