Refactor RedisQueue into Java with additional minor updates

Some logging items were previously missed and the status code 429 as a
retryable error has been added in this commit
This commit is contained in:
R. Tyler Croy 2015-04-06 10:06:47 -07:00
parent 2d137d80c1
commit a97996c885
31 changed files with 1005 additions and 165 deletions

1
.gitignore vendored
View File

@ -4,3 +4,4 @@ whoas.iml
*.sw*
.gradle/
.classpath
/bin/

View File

@ -2,9 +2,9 @@
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc (1.8.0_25) on Fri Apr 03 08:38:57 PDT 2015 -->
<!-- Generated by javadoc (1.8.0_25) on Mon Apr 06 10:05:38 PDT 2015 -->
<title>All Classes (whoas 0.3.0 API)</title>
<meta name="date" content="2015-04-03">
<meta name="date" content="2015-04-06">
<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
<script type="text/javascript" src="script.js"></script>
</head>
@ -18,6 +18,8 @@
<li><a href="com/github/lookout/whoas/InMemoryQueue.html" title="class in com.github.lookout.whoas" target="classFrame">InMemoryQueue</a></li>
<li><a href="com/github/lookout/whoas/Publisher.html" title="class in com.github.lookout.whoas" target="classFrame">Publisher</a></li>
<li><a href="com/github/lookout/whoas/QueueAction.html" title="interface in com.github.lookout.whoas" target="classFrame"><span class="interfaceName">QueueAction</span></a></li>
<li><a href="com/github/lookout/whoas/RedisQueue.html" title="class in com.github.lookout.whoas" target="classFrame">RedisQueue</a></li>
<li><a href="com/github/lookout/whoas/RedisQueueAction.html" title="interface in com.github.lookout.whoas" target="classFrame"><span class="interfaceName">RedisQueueAction</span></a></li>
<li><a href="com/github/lookout/whoas/SequentialHookRunner.html" title="class in com.github.lookout.whoas" target="classFrame">SequentialHookRunner</a></li>
<li><a href="com/github/lookout/whoas/WhoasConfiguration.html" title="interface in com.github.lookout.whoas" target="classFrame"><span class="interfaceName">WhoasConfiguration</span></a></li>
<li><a href="com/github/lookout/whoas/WhoasFactory.html" title="class in com.github.lookout.whoas" target="classFrame">WhoasFactory</a></li>

View File

@ -2,9 +2,9 @@
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc (1.8.0_25) on Fri Apr 03 08:38:57 PDT 2015 -->
<!-- Generated by javadoc (1.8.0_25) on Mon Apr 06 10:05:38 PDT 2015 -->
<title>All Classes (whoas 0.3.0 API)</title>
<meta name="date" content="2015-04-03">
<meta name="date" content="2015-04-06">
<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
<script type="text/javascript" src="script.js"></script>
</head>
@ -18,6 +18,8 @@
<li><a href="com/github/lookout/whoas/InMemoryQueue.html" title="class in com.github.lookout.whoas">InMemoryQueue</a></li>
<li><a href="com/github/lookout/whoas/Publisher.html" title="class in com.github.lookout.whoas">Publisher</a></li>
<li><a href="com/github/lookout/whoas/QueueAction.html" title="interface in com.github.lookout.whoas"><span class="interfaceName">QueueAction</span></a></li>
<li><a href="com/github/lookout/whoas/RedisQueue.html" title="class in com.github.lookout.whoas">RedisQueue</a></li>
<li><a href="com/github/lookout/whoas/RedisQueueAction.html" title="interface in com.github.lookout.whoas"><span class="interfaceName">RedisQueueAction</span></a></li>
<li><a href="com/github/lookout/whoas/SequentialHookRunner.html" title="class in com.github.lookout.whoas">SequentialHookRunner</a></li>
<li><a href="com/github/lookout/whoas/WhoasConfiguration.html" title="interface in com.github.lookout.whoas"><span class="interfaceName">WhoasConfiguration</span></a></li>
<li><a href="com/github/lookout/whoas/WhoasFactory.html" title="class in com.github.lookout.whoas">WhoasFactory</a></li>

View File

@ -2,9 +2,9 @@
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc (1.8.0_25) on Fri Apr 03 08:38:57 PDT 2015 -->
<!-- Generated by javadoc (1.8.0_25) on Mon Apr 06 10:05:38 PDT 2015 -->
<title>AbstractHookQueue (whoas 0.3.0 API)</title>
<meta name="date" content="2015-04-03">
<meta name="date" content="2015-04-06">
<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
<script type="text/javascript" src="../../../../script.js"></script>
</head>
@ -107,7 +107,7 @@ var activeTableTab = "activeTableTab";
<li class="blockList">
<dl>
<dt>Direct Known Subclasses:</dt>
<dd><a href="../../../../com/github/lookout/whoas/InMemoryQueue.html" title="class in com.github.lookout.whoas">InMemoryQueue</a></dd>
<dd><a href="../../../../com/github/lookout/whoas/InMemoryQueue.html" title="class in com.github.lookout.whoas">InMemoryQueue</a>, <a href="../../../../com/github/lookout/whoas/RedisQueue.html" title="class in com.github.lookout.whoas">RedisQueue</a></dd>
</dl>
<hr>
<br>
@ -270,10 +270,13 @@ extends java.lang.Object</pre>
<ul class="blockList">
<li class="blockList">
<h4>getSize</h4>
<pre>public abstract&nbsp;int&nbsp;getSize()</pre>
<pre>public abstract&nbsp;int&nbsp;getSize()
throws java.lang.Exception</pre>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>Size of the queue, if not implemented by the provider, returns -1</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code>java.lang.Exception</code> - implementors may throw Exceptions</dd>
</dl>
</li>
</ul>
@ -299,12 +302,15 @@ extends java.lang.Object</pre>
<ul class="blockListLast">
<li class="blockList">
<h4>push</h4>
<pre>public abstract&nbsp;java.lang.Boolean&nbsp;push(<a href="../../../../com/github/lookout/whoas/HookRequest.html" title="class in com.github.lookout.whoas">HookRequest</a>&nbsp;request)</pre>
<pre>public abstract&nbsp;java.lang.Boolean&nbsp;push(<a href="../../../../com/github/lookout/whoas/HookRequest.html" title="class in com.github.lookout.whoas">HookRequest</a>&nbsp;request)
throws java.lang.Exception</pre>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>request</code> - A valid <code>HookRequest</code></dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>true if the <code>HookRequest</code> was successfully added to the queue</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code>java.lang.Exception</code> - implementors may throw Exceptions</dd>
</dl>
</li>
</ul>

View File

@ -2,9 +2,9 @@
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc (1.8.0_25) on Fri Apr 03 08:38:57 PDT 2015 -->
<!-- Generated by javadoc (1.8.0_25) on Mon Apr 06 10:05:38 PDT 2015 -->
<title>AbstractHookRunner (whoas 0.3.0 API)</title>
<meta name="date" content="2015-04-03">
<meta name="date" content="2015-04-06">
<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
<script type="text/javascript" src="../../../../script.js"></script>
</head>

View File

@ -2,9 +2,9 @@
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc (1.8.0_25) on Fri Apr 03 08:38:57 PDT 2015 -->
<!-- Generated by javadoc (1.8.0_25) on Mon Apr 06 10:05:38 PDT 2015 -->
<title>HookRequest (whoas 0.3.0 API)</title>
<meta name="date" content="2015-04-03">
<meta name="date" content="2015-04-06">
<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
<script type="text/javascript" src="../../../../script.js"></script>
</head>

View File

@ -2,9 +2,9 @@
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc (1.8.0_25) on Fri Apr 03 08:38:57 PDT 2015 -->
<!-- Generated by javadoc (1.8.0_25) on Mon Apr 06 10:05:38 PDT 2015 -->
<title>InMemoryQueue (whoas 0.3.0 API)</title>
<meta name="date" content="2015-04-03">
<meta name="date" content="2015-04-06">
<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
<script type="text/javascript" src="../../../../script.js"></script>
</head>

View File

@ -2,9 +2,9 @@
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc (1.8.0_25) on Fri Apr 03 08:38:57 PDT 2015 -->
<!-- Generated by javadoc (1.8.0_25) on Mon Apr 06 10:05:38 PDT 2015 -->
<title>Publisher (whoas 0.3.0 API)</title>
<meta name="date" content="2015-04-03">
<meta name="date" content="2015-04-06">
<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
<script type="text/javascript" src="../../../../script.js"></script>
</head>

View File

@ -2,9 +2,9 @@
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc (1.8.0_25) on Fri Apr 03 08:38:57 PDT 2015 -->
<!-- Generated by javadoc (1.8.0_25) on Mon Apr 06 10:05:38 PDT 2015 -->
<title>QueueAction (whoas 0.3.0 API)</title>
<meta name="date" content="2015-04-03">
<meta name="date" content="2015-04-06">
<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
<script type="text/javascript" src="../../../../script.js"></script>
</head>
@ -48,7 +48,7 @@ var activeTableTab = "activeTableTab";
<div class="subNav">
<ul class="navList">
<li><a href="../../../../com/github/lookout/whoas/Publisher.html" title="class in com.github.lookout.whoas"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../../com/github/lookout/whoas/SequentialHookRunner.html" title="class in com.github.lookout.whoas"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
<li><a href="../../../../com/github/lookout/whoas/RedisQueue.html" title="class in com.github.lookout.whoas"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../index.html?com/github/lookout/whoas/QueueAction.html" target="_top">Frames</a></li>
@ -178,7 +178,7 @@ var activeTableTab = "activeTableTab";
<div class="subNav">
<ul class="navList">
<li><a href="../../../../com/github/lookout/whoas/Publisher.html" title="class in com.github.lookout.whoas"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../../com/github/lookout/whoas/SequentialHookRunner.html" title="class in com.github.lookout.whoas"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
<li><a href="../../../../com/github/lookout/whoas/RedisQueue.html" title="class in com.github.lookout.whoas"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../index.html?com/github/lookout/whoas/QueueAction.html" target="_top">Frames</a></li>

View File

@ -0,0 +1,475 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc (1.8.0_25) on Mon Apr 06 10:05:38 PDT 2015 -->
<title>RedisQueue (whoas 0.3.0 API)</title>
<meta name="date" content="2015-04-06">
<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
<script type="text/javascript" src="../../../../script.js"></script>
</head>
<body>
<script type="text/javascript"><!--
try {
if (location.href.indexOf('is-external=true') == -1) {
parent.document.title="RedisQueue (whoas 0.3.0 API)";
}
}
catch(err) {
}
//-->
var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10};
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
var tableTab = "tableTab";
var activeTableTab = "activeTableTab";
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a name="navbar.top">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.top.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../com/github/lookout/whoas/package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../index-all.html">Index</a></li>
<li><a href="../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../../com/github/lookout/whoas/QueueAction.html" title="interface in com.github.lookout.whoas"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../../com/github/lookout/whoas/RedisQueueAction.html" title="interface in com.github.lookout.whoas"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../index.html?com/github/lookout/whoas/RedisQueue.html" target="_top">Frames</a></li>
<li><a href="RedisQueue.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_top");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li><a href="#fields.inherited.from.class.com.github.lookout.whoas.AbstractHookQueue">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a name="skip.navbar.top">
<!-- -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="subTitle">com.github.lookout.whoas</div>
<h2 title="Class RedisQueue" class="title">Class RedisQueue</h2>
</div>
<div class="contentContainer">
<ul class="inheritance">
<li>java.lang.Object</li>
<li>
<ul class="inheritance">
<li><a href="../../../../com/github/lookout/whoas/AbstractHookQueue.html" title="class in com.github.lookout.whoas">com.github.lookout.whoas.AbstractHookQueue</a></li>
<li>
<ul class="inheritance">
<li>com.github.lookout.whoas.RedisQueue</li>
</ul>
</li>
</ul>
</li>
</ul>
<div class="description">
<ul class="blockList">
<li class="blockList">
<hr>
<br>
<pre>public class <span class="typeNameLabel">RedisQueue</span>
extends <a href="../../../../com/github/lookout/whoas/AbstractHookQueue.html" title="class in com.github.lookout.whoas">AbstractHookQueue</a></pre>
<div class="block">A redis queue that offers distributed and persistent queue</div>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- =========== FIELD SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="field.summary">
<!-- -->
</a>
<h3>Field Summary</h3>
<ul class="blockList">
<li class="blockList"><a name="fields.inherited.from.class.com.github.lookout.whoas.AbstractHookQueue">
<!-- -->
</a>
<h3>Fields inherited from class&nbsp;com.github.lookout.whoas.<a href="../../../../com/github/lookout/whoas/AbstractHookQueue.html" title="class in com.github.lookout.whoas">AbstractHookQueue</a></h3>
<code><a href="../../../../com/github/lookout/whoas/AbstractHookQueue.html#started">started</a></code></li>
</ul>
</li>
</ul>
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<ul class="blockList">
<li class="blockList"><a name="constructor.summary">
<!-- -->
</a>
<h3>Constructor Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colOne" scope="col">Constructor and Description</th>
</tr>
<tr class="altColor">
<td class="colOne"><code><span class="memberNameLink"><a href="../../../../com/github/lookout/whoas/RedisQueue.html#RedisQueue--">RedisQueue</a></span>()</code>
<div class="block">Default constructor</div>
</td>
</tr>
<tr class="rowColor">
<td class="colOne"><code><span class="memberNameLink"><a href="../../../../com/github/lookout/whoas/RedisQueue.html#RedisQueue-redis.clients.jedis.JedisPool-">RedisQueue</a></span>(redis.clients.jedis.JedisPool&nbsp;pool)</code>
<div class="block">Allow users to provide their own <code>JedisPool</code> instance</div>
</td>
</tr>
<tr class="altColor">
<td class="colOne"><code><span class="memberNameLink"><a href="../../../../com/github/lookout/whoas/RedisQueue.html#RedisQueue-com.github.lookout.whoas.WhoasQueueConfig-">RedisQueue</a></span>(<a href="../../../../com/github/lookout/whoas/WhoasQueueConfig.html" title="class in com.github.lookout.whoas">WhoasQueueConfig</a>&nbsp;queueConfig)</code>
<div class="block">Create the RedisQueue with valid config</div>
</td>
</tr>
</table>
</li>
</ul>
<!-- ========== METHOD SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="method.summary">
<!-- -->
</a>
<h3>Method Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Method and Description</th>
</tr>
<tr id="i0" class="altColor">
<td class="colFirst"><code>int</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/github/lookout/whoas/RedisQueue.html#getSize--">getSize</a></span>()</code>
<div class="block">Return the number of elements in the queue</div>
</td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/github/lookout/whoas/RedisQueue.html#pop-com.github.lookout.whoas.QueueAction-">pop</a></span>(<a href="../../../../com/github/lookout/whoas/QueueAction.html" title="interface in com.github.lookout.whoas">QueueAction</a>&nbsp;action)</code>
<div class="block">Performs a blocking pop on the queue and invokes the closure with the
item popped from the queue
If the Closure throws an exception, the dequeued item will be returned
to the tail end of the queue</div>
</td>
</tr>
<tr id="i2" class="altColor">
<td class="colFirst"><code>java.lang.Boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/github/lookout/whoas/RedisQueue.html#push-com.github.lookout.whoas.HookRequest-">push</a></span>(<a href="../../../../com/github/lookout/whoas/HookRequest.html" title="class in com.github.lookout.whoas">HookRequest</a>&nbsp;request)</code>
<div class="block">Attempt to insert the request into the queue
If the request cannot be inserted, this method will return false,
otherwise true.</div>
</td>
</tr>
<tr id="i3" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/github/lookout/whoas/RedisQueue.html#start--">start</a></span>()</code>
<div class="block">Setup the Redis client</div>
</td>
</tr>
<tr id="i4" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/github/lookout/whoas/RedisQueue.html#stop--">stop</a></span>()</code>
<div class="block">Stop the Redis client</div>
</td>
</tr>
<tr id="i5" class="rowColor">
<td class="colFirst"><code>protected java.lang.Object</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/github/lookout/whoas/RedisQueue.html#withRedis-com.github.lookout.whoas.RedisQueueAction-">withRedis</a></span>(<a href="../../../../com/github/lookout/whoas/RedisQueueAction.html" title="interface in com.github.lookout.whoas">RedisQueueAction</a>&nbsp;action)</code>
<div class="block">Allocate redis client from the pool</div>
</td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
<!-- -->
</a>
<h3>Methods inherited from class&nbsp;java.lang.Object</h3>
<code>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<ul class="blockList">
<li class="blockList"><a name="constructor.detail">
<!-- -->
</a>
<h3>Constructor Detail</h3>
<a name="RedisQueue-com.github.lookout.whoas.WhoasQueueConfig-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>RedisQueue</h4>
<pre>public&nbsp;RedisQueue(<a href="../../../../com/github/lookout/whoas/WhoasQueueConfig.html" title="class in com.github.lookout.whoas">WhoasQueueConfig</a>&nbsp;queueConfig)</pre>
<div class="block">Create the RedisQueue with valid config</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>queueConfig</code> - necessary configuration to connect to Redis</dd>
</dl>
</li>
</ul>
<a name="RedisQueue--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>RedisQueue</h4>
<pre>public&nbsp;RedisQueue()</pre>
<div class="block">Default constructor</div>
</li>
</ul>
<a name="RedisQueue-redis.clients.jedis.JedisPool-">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>RedisQueue</h4>
<pre>public&nbsp;RedisQueue(redis.clients.jedis.JedisPool&nbsp;pool)</pre>
<div class="block">Allow users to provide their own <code>JedisPool</code> instance</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>pool</code> - an already set up pool</dd>
</dl>
</li>
</ul>
</li>
</ul>
<!-- ============ METHOD DETAIL ========== -->
<ul class="blockList">
<li class="blockList"><a name="method.detail">
<!-- -->
</a>
<h3>Method Detail</h3>
<a name="getSize--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getSize</h4>
<pre>public&nbsp;int&nbsp;getSize()
throws java.lang.Exception</pre>
<div class="block">Return the number of elements in the queue</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../com/github/lookout/whoas/AbstractHookQueue.html#getSize--">getSize</a></code>&nbsp;in class&nbsp;<code><a href="../../../../com/github/lookout/whoas/AbstractHookQueue.html" title="class in com.github.lookout.whoas">AbstractHookQueue</a></code></dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>Size of the queue, if not implemented by the provider, returns -1</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code>java.lang.Exception</code> - implementors may throw Exceptions</dd>
</dl>
</li>
</ul>
<a name="start--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>start</h4>
<pre>public&nbsp;void&nbsp;start()</pre>
<div class="block">Setup the Redis client</div>
<dl>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code><a href="../../../../com/github/lookout/whoas/AbstractHookQueue.html#start--">start</a></code>&nbsp;in class&nbsp;<code><a href="../../../../com/github/lookout/whoas/AbstractHookQueue.html" title="class in com.github.lookout.whoas">AbstractHookQueue</a></code></dd>
</dl>
</li>
</ul>
<a name="stop--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>stop</h4>
<pre>public&nbsp;void&nbsp;stop()</pre>
<div class="block">Stop the Redis client</div>
<dl>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code><a href="../../../../com/github/lookout/whoas/AbstractHookQueue.html#stop--">stop</a></code>&nbsp;in class&nbsp;<code><a href="../../../../com/github/lookout/whoas/AbstractHookQueue.html" title="class in com.github.lookout.whoas">AbstractHookQueue</a></code></dd>
</dl>
</li>
</ul>
<a name="pop-com.github.lookout.whoas.QueueAction-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>pop</h4>
<pre>public&nbsp;void&nbsp;pop(<a href="../../../../com/github/lookout/whoas/QueueAction.html" title="interface in com.github.lookout.whoas">QueueAction</a>&nbsp;action)
throws java.lang.Exception</pre>
<div class="block">Performs a blocking pop on the queue and invokes the closure with the
item popped from the queue
If the Closure throws an exception, the dequeued item will be returned
to the tail end of the queue</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../com/github/lookout/whoas/AbstractHookQueue.html#pop-com.github.lookout.whoas.QueueAction-">pop</a></code>&nbsp;in class&nbsp;<code><a href="../../../../com/github/lookout/whoas/AbstractHookQueue.html" title="class in com.github.lookout.whoas">AbstractHookQueue</a></code></dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>action</code> - a <code>QueueAction</code> to invoke</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code>java.lang.Exception</code> - the underlying <code>QueueAction</code> may throw any form of exception</dd>
</dl>
</li>
</ul>
<a name="push-com.github.lookout.whoas.HookRequest-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>push</h4>
<pre>public&nbsp;java.lang.Boolean&nbsp;push(<a href="../../../../com/github/lookout/whoas/HookRequest.html" title="class in com.github.lookout.whoas">HookRequest</a>&nbsp;request)
throws com.fasterxml.jackson.core.JsonProcessingException,
java.lang.Exception</pre>
<div class="block">Attempt to insert the request into the queue
If the request cannot be inserted, this method will return false,
otherwise true.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../com/github/lookout/whoas/AbstractHookQueue.html#push-com.github.lookout.whoas.HookRequest-">push</a></code>&nbsp;in class&nbsp;<code><a href="../../../../com/github/lookout/whoas/AbstractHookQueue.html" title="class in com.github.lookout.whoas">AbstractHookQueue</a></code></dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>request</code> - A <code>HookRequest</code> to enqueue</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>true if the <code>HookRequest</code> was successfully added to the queue</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code>java.lang.Exception</code> - implementors may throw Exceptions</dd>
<dd><code>com.fasterxml.jackson.core.JsonProcessingException</code></dd>
</dl>
</li>
</ul>
<a name="withRedis-com.github.lookout.whoas.RedisQueueAction-">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>withRedis</h4>
<pre>protected&nbsp;java.lang.Object&nbsp;withRedis(<a href="../../../../com/github/lookout/whoas/RedisQueueAction.html" title="interface in com.github.lookout.whoas">RedisQueueAction</a>&nbsp;action)
throws java.lang.Exception</pre>
<div class="block">Allocate redis client from the pool</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>action</code> - callback to invoke with a <code>Jedis</code> object from the
pool</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>propogates a generic <code>Object</code> up from the <code>RedisQueueAction</code></dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code>java.lang.Exception</code> - propogates underlying Jedis exceptions</dd>
</dl>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
<!-- ========= END OF CLASS DATA ========= -->
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a name="navbar.bottom">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.bottom.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../com/github/lookout/whoas/package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../index-all.html">Index</a></li>
<li><a href="../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../../com/github/lookout/whoas/QueueAction.html" title="interface in com.github.lookout.whoas"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../../com/github/lookout/whoas/RedisQueueAction.html" title="interface in com.github.lookout.whoas"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../index.html?com/github/lookout/whoas/RedisQueue.html" target="_top">Frames</a></li>
<li><a href="RedisQueue.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_bottom");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li><a href="#fields.inherited.from.class.com.github.lookout.whoas.AbstractHookQueue">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a name="skip.navbar.bottom">
<!-- -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
</body>
</html>

View File

@ -0,0 +1,222 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc (1.8.0_25) on Mon Apr 06 10:05:38 PDT 2015 -->
<title>RedisQueueAction (whoas 0.3.0 API)</title>
<meta name="date" content="2015-04-06">
<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
<script type="text/javascript" src="../../../../script.js"></script>
</head>
<body>
<script type="text/javascript"><!--
try {
if (location.href.indexOf('is-external=true') == -1) {
parent.document.title="RedisQueueAction (whoas 0.3.0 API)";
}
}
catch(err) {
}
//-->
var methods = {"i0":6};
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],4:["t3","Abstract Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
var tableTab = "tableTab";
var activeTableTab = "activeTableTab";
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a name="navbar.top">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.top.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../com/github/lookout/whoas/package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../index-all.html">Index</a></li>
<li><a href="../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../../com/github/lookout/whoas/RedisQueue.html" title="class in com.github.lookout.whoas"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../../com/github/lookout/whoas/SequentialHookRunner.html" title="class in com.github.lookout.whoas"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../index.html?com/github/lookout/whoas/RedisQueueAction.html" target="_top">Frames</a></li>
<li><a href="RedisQueueAction.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_top");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a name="skip.navbar.top">
<!-- -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="subTitle">com.github.lookout.whoas</div>
<h2 title="Interface RedisQueueAction" class="title">Interface RedisQueueAction&lt;T&gt;</h2>
</div>
<div class="contentContainer">
<div class="description">
<ul class="blockList">
<li class="blockList">
<hr>
<br>
<pre>public interface <span class="typeNameLabel">RedisQueueAction&lt;T&gt;</span></pre>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- ========== METHOD SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="method.summary">
<!-- -->
</a>
<h3>Method Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t3" class="tableTab"><span><a href="javascript:show(4);">Abstract Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Method and Description</th>
</tr>
<tr id="i0" class="altColor">
<td class="colFirst"><code><a href="../../../../com/github/lookout/whoas/RedisQueueAction.html" title="type parameter in RedisQueueAction">T</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../com/github/lookout/whoas/RedisQueueAction.html#call-redis.clients.jedis.Jedis-">call</a></span>(redis.clients.jedis.Jedis&nbsp;jedis)</code>&nbsp;</td>
</tr>
</table>
</li>
</ul>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ============ METHOD DETAIL ========== -->
<ul class="blockList">
<li class="blockList"><a name="method.detail">
<!-- -->
</a>
<h3>Method Detail</h3>
<a name="call-redis.clients.jedis.Jedis-">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>call</h4>
<pre><a href="../../../../com/github/lookout/whoas/RedisQueueAction.html" title="type parameter in RedisQueueAction">T</a>&nbsp;call(redis.clients.jedis.Jedis&nbsp;jedis)
throws java.lang.Exception</pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code>java.lang.Exception</code></dd>
</dl>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
<!-- ========= END OF CLASS DATA ========= -->
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a name="navbar.bottom">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.bottom.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../com/github/lookout/whoas/package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../index-all.html">Index</a></li>
<li><a href="../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../../com/github/lookout/whoas/RedisQueue.html" title="class in com.github.lookout.whoas"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../../com/github/lookout/whoas/SequentialHookRunner.html" title="class in com.github.lookout.whoas"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../index.html?com/github/lookout/whoas/RedisQueueAction.html" target="_top">Frames</a></li>
<li><a href="RedisQueueAction.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_bottom");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a name="skip.navbar.bottom">
<!-- -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
</body>
</html>

View File

@ -2,9 +2,9 @@
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc (1.8.0_25) on Fri Apr 03 08:38:57 PDT 2015 -->
<!-- Generated by javadoc (1.8.0_25) on Mon Apr 06 10:05:38 PDT 2015 -->
<title>SequentialHookRunner (whoas 0.3.0 API)</title>
<meta name="date" content="2015-04-03">
<meta name="date" content="2015-04-06">
<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
<script type="text/javascript" src="../../../../script.js"></script>
</head>
@ -47,7 +47,7 @@ var activeTableTab = "activeTableTab";
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../../com/github/lookout/whoas/QueueAction.html" title="interface in com.github.lookout.whoas"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../../com/github/lookout/whoas/RedisQueueAction.html" title="interface in com.github.lookout.whoas"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../../com/github/lookout/whoas/WhoasConfiguration.html" title="interface in com.github.lookout.whoas"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
@ -278,7 +278,7 @@ extends <a href="../../../../com/github/lookout/whoas/AbstractHookRunner.html" t
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../../com/github/lookout/whoas/QueueAction.html" title="interface in com.github.lookout.whoas"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../../com/github/lookout/whoas/RedisQueueAction.html" title="interface in com.github.lookout.whoas"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../../com/github/lookout/whoas/WhoasConfiguration.html" title="interface in com.github.lookout.whoas"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">

View File

@ -2,9 +2,9 @@
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc (1.8.0_25) on Fri Apr 03 08:38:57 PDT 2015 -->
<!-- Generated by javadoc (1.8.0_25) on Mon Apr 06 10:05:38 PDT 2015 -->
<title>WhoasConfiguration (whoas 0.3.0 API)</title>
<meta name="date" content="2015-04-03">
<meta name="date" content="2015-04-06">
<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
<script type="text/javascript" src="../../../../script.js"></script>
</head>

View File

@ -2,9 +2,9 @@
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc (1.8.0_25) on Fri Apr 03 08:38:57 PDT 2015 -->
<!-- Generated by javadoc (1.8.0_25) on Mon Apr 06 10:05:38 PDT 2015 -->
<title>WhoasFactory (whoas 0.3.0 API)</title>
<meta name="date" content="2015-04-03">
<meta name="date" content="2015-04-06">
<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
<script type="text/javascript" src="../../../../script.js"></script>
</head>

View File

@ -2,9 +2,9 @@
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc (1.8.0_25) on Fri Apr 03 08:38:57 PDT 2015 -->
<!-- Generated by javadoc (1.8.0_25) on Mon Apr 06 10:05:38 PDT 2015 -->
<title>WhoasQueueConfig (whoas 0.3.0 API)</title>
<meta name="date" content="2015-04-03">
<meta name="date" content="2015-04-06">
<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
<script type="text/javascript" src="../../../../script.js"></script>
</head>

View File

@ -2,9 +2,9 @@
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc (1.8.0_25) on Fri Apr 03 08:38:57 PDT 2015 -->
<!-- Generated by javadoc (1.8.0_25) on Mon Apr 06 10:05:38 PDT 2015 -->
<title>com.github.lookout.whoas (whoas 0.3.0 API)</title>
<meta name="date" content="2015-04-03">
<meta name="date" content="2015-04-06">
<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
<script type="text/javascript" src="../../../../script.js"></script>
</head>
@ -14,6 +14,7 @@
<h2 title="Interfaces">Interfaces</h2>
<ul title="Interfaces">
<li><a href="QueueAction.html" title="interface in com.github.lookout.whoas" target="classFrame"><span class="interfaceName">QueueAction</span></a></li>
<li><a href="RedisQueueAction.html" title="interface in com.github.lookout.whoas" target="classFrame"><span class="interfaceName">RedisQueueAction</span></a></li>
<li><a href="WhoasConfiguration.html" title="interface in com.github.lookout.whoas" target="classFrame"><span class="interfaceName">WhoasConfiguration</span></a></li>
</ul>
<h2 title="Classes">Classes</h2>
@ -23,6 +24,7 @@
<li><a href="HookRequest.html" title="class in com.github.lookout.whoas" target="classFrame">HookRequest</a></li>
<li><a href="InMemoryQueue.html" title="class in com.github.lookout.whoas" target="classFrame">InMemoryQueue</a></li>
<li><a href="Publisher.html" title="class in com.github.lookout.whoas" target="classFrame">Publisher</a></li>
<li><a href="RedisQueue.html" title="class in com.github.lookout.whoas" target="classFrame">RedisQueue</a></li>
<li><a href="SequentialHookRunner.html" title="class in com.github.lookout.whoas" target="classFrame">SequentialHookRunner</a></li>
<li><a href="WhoasFactory.html" title="class in com.github.lookout.whoas" target="classFrame">WhoasFactory</a></li>
<li><a href="WhoasQueueConfig.html" title="class in com.github.lookout.whoas" target="classFrame">WhoasQueueConfig</a></li>

View File

@ -2,9 +2,9 @@
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc (1.8.0_25) on Fri Apr 03 08:38:57 PDT 2015 -->
<!-- Generated by javadoc (1.8.0_25) on Mon Apr 06 10:05:38 PDT 2015 -->
<title>com.github.lookout.whoas (whoas 0.3.0 API)</title>
<meta name="date" content="2015-04-03">
<meta name="date" content="2015-04-06">
<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
<script type="text/javascript" src="../../../../script.js"></script>
</head>
@ -85,6 +85,10 @@
<td class="colLast">&nbsp;</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><a href="../../../../com/github/lookout/whoas/RedisQueueAction.html" title="interface in com.github.lookout.whoas">RedisQueueAction</a>&lt;T&gt;</td>
<td class="colLast">&nbsp;</td>
</tr>
<tr class="altColor">
<td class="colFirst"><a href="../../../../com/github/lookout/whoas/WhoasConfiguration.html" title="interface in com.github.lookout.whoas">WhoasConfiguration</a>&lt;T extends io.dropwizard.Configuration&gt;</td>
<td class="colLast">
<div class="block">The interface to create the whoas factory based on configuration
@ -132,13 +136,19 @@
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><a href="../../../../com/github/lookout/whoas/RedisQueue.html" title="class in com.github.lookout.whoas">RedisQueue</a></td>
<td class="colLast">
<div class="block">A redis queue that offers distributed and persistent queue</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><a href="../../../../com/github/lookout/whoas/SequentialHookRunner.html" title="class in com.github.lookout.whoas">SequentialHookRunner</a></td>
<td class="colLast">
<div class="block">The SequentialHookRunner is will dequeue HookRequest items from the
configured AbstractHookQueue and publish those webhooks sequentially.</div>
</td>
</tr>
<tr class="altColor">
<tr class="rowColor">
<td class="colFirst"><a href="../../../../com/github/lookout/whoas/WhoasFactory.html" title="class in com.github.lookout.whoas">WhoasFactory</a></td>
<td class="colLast">
<div class="block">This factory will allow clients of whoas to build
@ -146,7 +156,7 @@
like sequential.</div>
</td>
</tr>
<tr class="rowColor">
<tr class="altColor">
<td class="colFirst"><a href="../../../../com/github/lookout/whoas/WhoasQueueConfig.html" title="class in com.github.lookout.whoas">WhoasQueueConfig</a></td>
<td class="colLast">
<div class="block">Whoas Queue Configuration</div>

View File

@ -2,9 +2,9 @@
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc (1.8.0_25) on Fri Apr 03 08:38:57 PDT 2015 -->
<!-- Generated by javadoc (1.8.0_25) on Mon Apr 06 10:05:38 PDT 2015 -->
<title>com.github.lookout.whoas Class Hierarchy (whoas 0.3.0 API)</title>
<meta name="date" content="2015-04-03">
<meta name="date" content="2015-04-06">
<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
<script type="text/javascript" src="../../../../script.js"></script>
</head>
@ -78,6 +78,7 @@
<li type="circle">com.github.lookout.whoas.<a href="../../../../com/github/lookout/whoas/AbstractHookQueue.html" title="class in com.github.lookout.whoas"><span class="typeNameLink">AbstractHookQueue</span></a>
<ul>
<li type="circle">com.github.lookout.whoas.<a href="../../../../com/github/lookout/whoas/InMemoryQueue.html" title="class in com.github.lookout.whoas"><span class="typeNameLink">InMemoryQueue</span></a></li>
<li type="circle">com.github.lookout.whoas.<a href="../../../../com/github/lookout/whoas/RedisQueue.html" title="class in com.github.lookout.whoas"><span class="typeNameLink">RedisQueue</span></a></li>
</ul>
</li>
<li type="circle">com.github.lookout.whoas.<a href="../../../../com/github/lookout/whoas/AbstractHookRunner.html" title="class in com.github.lookout.whoas"><span class="typeNameLink">AbstractHookRunner</span></a>
@ -95,6 +96,7 @@
<h2 title="Interface Hierarchy">Interface Hierarchy</h2>
<ul>
<li type="circle">com.github.lookout.whoas.<a href="../../../../com/github/lookout/whoas/QueueAction.html" title="interface in com.github.lookout.whoas"><span class="typeNameLink">QueueAction</span></a></li>
<li type="circle">com.github.lookout.whoas.<a href="../../../../com/github/lookout/whoas/RedisQueueAction.html" title="interface in com.github.lookout.whoas"><span class="typeNameLink">RedisQueueAction</span></a>&lt;T&gt;</li>
<li type="circle">com.github.lookout.whoas.<a href="../../../../com/github/lookout/whoas/WhoasConfiguration.html" title="interface in com.github.lookout.whoas"><span class="typeNameLink">WhoasConfiguration</span></a>&lt;T&gt;</li>
</ul>
</div>

View File

@ -2,9 +2,9 @@
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc (1.8.0_25) on Fri Apr 03 08:38:57 PDT 2015 -->
<!-- Generated by javadoc (1.8.0_25) on Mon Apr 06 10:05:38 PDT 2015 -->
<title>Constant Field Values (whoas 0.3.0 API)</title>
<meta name="date" content="2015-04-03">
<meta name="date" content="2015-04-06">
<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
<script type="text/javascript" src="script.js"></script>
</head>

View File

@ -2,9 +2,9 @@
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc (1.8.0_25) on Fri Apr 03 08:38:57 PDT 2015 -->
<!-- Generated by javadoc (1.8.0_25) on Mon Apr 06 10:05:38 PDT 2015 -->
<title>Deprecated List (whoas 0.3.0 API)</title>
<meta name="date" content="2015-04-03">
<meta name="date" content="2015-04-06">
<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
<script type="text/javascript" src="script.js"></script>
</head>

View File

@ -2,9 +2,9 @@
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc (1.8.0_25) on Fri Apr 03 08:38:57 PDT 2015 -->
<!-- Generated by javadoc (1.8.0_25) on Mon Apr 06 10:05:38 PDT 2015 -->
<title>API Help (whoas 0.3.0 API)</title>
<meta name="date" content="2015-04-03">
<meta name="date" content="2015-04-06">
<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
<script type="text/javascript" src="script.js"></script>
</head>

View File

@ -2,9 +2,9 @@
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc (1.8.0_25) on Fri Apr 03 08:38:57 PDT 2015 -->
<!-- Generated by javadoc (1.8.0_25) on Mon Apr 06 10:05:38 PDT 2015 -->
<title>Index (whoas 0.3.0 API)</title>
<meta name="date" content="2015-04-03">
<meta name="date" content="2015-04-06">
<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
<script type="text/javascript" src="script.js"></script>
</head>
@ -108,6 +108,8 @@
<dl>
<dt><span class="memberNameLink"><a href="com/github/lookout/whoas/QueueAction.html#call-com.github.lookout.whoas.HookRequest-">call(HookRequest)</a></span> - Method in interface com.github.lookout.whoas.<a href="com/github/lookout/whoas/QueueAction.html" title="interface in com.github.lookout.whoas">QueueAction</a></dt>
<dd>&nbsp;</dd>
<dt><span class="memberNameLink"><a href="com/github/lookout/whoas/RedisQueueAction.html#call-redis.clients.jedis.Jedis-">call(Jedis)</a></span> - Method in interface com.github.lookout.whoas.<a href="com/github/lookout/whoas/RedisQueueAction.html" title="interface in com.github.lookout.whoas">RedisQueueAction</a></dt>
<dd>&nbsp;</dd>
<dt><a href="com/github/lookout/whoas/package-summary.html">com.github.lookout.whoas</a> - package com.github.lookout.whoas</dt>
<dd>&nbsp;</dd>
<dt><span class="memberNameLink"><a href="com/github/lookout/whoas/HookRequest.html#contentType">contentType</a></span> - Variable in class com.github.lookout.whoas.<a href="com/github/lookout/whoas/HookRequest.html" title="class in com.github.lookout.whoas">HookRequest</a></dt>
@ -134,6 +136,10 @@
<dd>
<div class="block">Return the number of elements in the queue</div>
</dd>
<dt><span class="memberNameLink"><a href="com/github/lookout/whoas/RedisQueue.html#getSize--">getSize()</a></span> - Method in class com.github.lookout.whoas.<a href="com/github/lookout/whoas/RedisQueue.html" title="class in com.github.lookout.whoas">RedisQueue</a></dt>
<dd>
<div class="block">Return the number of elements in the queue</div>
</dd>
<dt><span class="memberNameLink"><a href="com/github/lookout/whoas/WhoasConfiguration.html#getWhoasFactory-T-">getWhoasFactory(T)</a></span> - Method in interface com.github.lookout.whoas.<a href="com/github/lookout/whoas/WhoasConfiguration.html" title="interface in com.github.lookout.whoas">WhoasConfiguration</a></dt>
<dd>&nbsp;</dd>
</dl>
@ -219,6 +225,14 @@
If the Closure throws an exception, the dequeued item will be returned
to the tail end of the queue</div>
</dd>
<dt><span class="memberNameLink"><a href="com/github/lookout/whoas/RedisQueue.html#pop-com.github.lookout.whoas.QueueAction-">pop(QueueAction)</a></span> - Method in class com.github.lookout.whoas.<a href="com/github/lookout/whoas/RedisQueue.html" title="class in com.github.lookout.whoas">RedisQueue</a></dt>
<dd>
<div class="block">Performs a blocking pop on the queue and invokes the closure with the
item popped from the queue
If the Closure throws an exception, the dequeued item will be returned
to the tail end of the queue</div>
</dd>
<dt><span class="memberNameLink"><a href="com/github/lookout/whoas/WhoasQueueConfig.html#port">port</a></span> - Variable in class com.github.lookout.whoas.<a href="com/github/lookout/whoas/WhoasQueueConfig.html" title="class in com.github.lookout.whoas">WhoasQueueConfig</a></dt>
<dd>
<div class="block">Port number of the distributed queue server
@ -250,6 +264,13 @@
If the request cannot be inserted, this method will return false,
otherwise true.</div>
</dd>
<dt><span class="memberNameLink"><a href="com/github/lookout/whoas/RedisQueue.html#push-com.github.lookout.whoas.HookRequest-">push(HookRequest)</a></span> - Method in class com.github.lookout.whoas.<a href="com/github/lookout/whoas/RedisQueue.html" title="class in com.github.lookout.whoas">RedisQueue</a></dt>
<dd>
<div class="block">Attempt to insert the request into the queue
If the request cannot be inserted, this method will return false,
otherwise true.</div>
</dd>
</dl>
<a name="I:Q">
<!-- -->
@ -270,6 +291,24 @@
</a>
<h2 class="title">R</h2>
<dl>
<dt><a href="com/github/lookout/whoas/RedisQueue.html" title="class in com.github.lookout.whoas"><span class="typeNameLink">RedisQueue</span></a> - Class in <a href="com/github/lookout/whoas/package-summary.html">com.github.lookout.whoas</a></dt>
<dd>
<div class="block">A redis queue that offers distributed and persistent queue</div>
</dd>
<dt><span class="memberNameLink"><a href="com/github/lookout/whoas/RedisQueue.html#RedisQueue-com.github.lookout.whoas.WhoasQueueConfig-">RedisQueue(WhoasQueueConfig)</a></span> - Constructor for class com.github.lookout.whoas.<a href="com/github/lookout/whoas/RedisQueue.html" title="class in com.github.lookout.whoas">RedisQueue</a></dt>
<dd>
<div class="block">Create the RedisQueue with valid config</div>
</dd>
<dt><span class="memberNameLink"><a href="com/github/lookout/whoas/RedisQueue.html#RedisQueue--">RedisQueue()</a></span> - Constructor for class com.github.lookout.whoas.<a href="com/github/lookout/whoas/RedisQueue.html" title="class in com.github.lookout.whoas">RedisQueue</a></dt>
<dd>
<div class="block">Default constructor</div>
</dd>
<dt><span class="memberNameLink"><a href="com/github/lookout/whoas/RedisQueue.html#RedisQueue-redis.clients.jedis.JedisPool-">RedisQueue(JedisPool)</a></span> - Constructor for class com.github.lookout.whoas.<a href="com/github/lookout/whoas/RedisQueue.html" title="class in com.github.lookout.whoas">RedisQueue</a></dt>
<dd>
<div class="block">Allow users to provide their own <code>JedisPool</code> instance</div>
</dd>
<dt><a href="com/github/lookout/whoas/RedisQueueAction.html" title="interface in com.github.lookout.whoas"><span class="typeNameLink">RedisQueueAction</span></a>&lt;<a href="com/github/lookout/whoas/RedisQueueAction.html" title="type parameter in RedisQueueAction">T</a>&gt; - Interface in <a href="com/github/lookout/whoas/package-summary.html">com.github.lookout.whoas</a></dt>
<dd>&nbsp;</dd>
<dt><span class="memberNameLink"><a href="com/github/lookout/whoas/HookRequest.html#retries">retries</a></span> - Variable in class com.github.lookout.whoas.<a href="com/github/lookout/whoas/HookRequest.html" title="class in com.github.lookout.whoas">HookRequest</a></dt>
<dd>&nbsp;</dd>
<dt><span class="memberNameLink"><a href="com/github/lookout/whoas/AbstractHookRunner.html#run--">run()</a></span> - Method in class com.github.lookout.whoas.<a href="com/github/lookout/whoas/AbstractHookRunner.html" title="class in com.github.lookout.whoas">AbstractHookRunner</a></dt>
@ -305,6 +344,10 @@
</dd>
<dt><span class="memberNameLink"><a href="com/github/lookout/whoas/AbstractHookQueue.html#start--">start()</a></span> - Method in class com.github.lookout.whoas.<a href="com/github/lookout/whoas/AbstractHookQueue.html" title="class in com.github.lookout.whoas">AbstractHookQueue</a></dt>
<dd>&nbsp;</dd>
<dt><span class="memberNameLink"><a href="com/github/lookout/whoas/RedisQueue.html#start--">start()</a></span> - Method in class com.github.lookout.whoas.<a href="com/github/lookout/whoas/RedisQueue.html" title="class in com.github.lookout.whoas">RedisQueue</a></dt>
<dd>
<div class="block">Setup the Redis client</div>
</dd>
<dt><span class="memberNameLink"><a href="com/github/lookout/whoas/AbstractHookQueue.html#started">started</a></span> - Variable in class com.github.lookout.whoas.<a href="com/github/lookout/whoas/AbstractHookQueue.html" title="class in com.github.lookout.whoas">AbstractHookQueue</a></dt>
<dd>&nbsp;</dd>
<dt><span class="memberNameLink"><a href="com/github/lookout/whoas/AbstractHookQueue.html#stop--">stop()</a></span> - Method in class com.github.lookout.whoas.<a href="com/github/lookout/whoas/AbstractHookQueue.html" title="class in com.github.lookout.whoas">AbstractHookQueue</a></dt>
@ -316,6 +359,10 @@
This will only come into effect after the runner has completed it's
currently executing work</div>
</dd>
<dt><span class="memberNameLink"><a href="com/github/lookout/whoas/RedisQueue.html#stop--">stop()</a></span> - Method in class com.github.lookout.whoas.<a href="com/github/lookout/whoas/RedisQueue.html" title="class in com.github.lookout.whoas">RedisQueue</a></dt>
<dd>
<div class="block">Stop the Redis client</div>
</dd>
</dl>
<a name="I:T">
<!-- -->
@ -361,6 +408,10 @@
</dd>
<dt><span class="memberNameLink"><a href="com/github/lookout/whoas/WhoasQueueConfig.html#WhoasQueueConfig--">WhoasQueueConfig()</a></span> - Constructor for class com.github.lookout.whoas.<a href="com/github/lookout/whoas/WhoasQueueConfig.html" title="class in com.github.lookout.whoas">WhoasQueueConfig</a></dt>
<dd>&nbsp;</dd>
<dt><span class="memberNameLink"><a href="com/github/lookout/whoas/RedisQueue.html#withRedis-com.github.lookout.whoas.RedisQueueAction-">withRedis(RedisQueueAction)</a></span> - Method in class com.github.lookout.whoas.<a href="com/github/lookout/whoas/RedisQueue.html" title="class in com.github.lookout.whoas">RedisQueue</a></dt>
<dd>
<div class="block">Allocate redis client from the pool</div>
</dd>
</dl>
<a href="#I:A">A</a>&nbsp;<a href="#I:B">B</a>&nbsp;<a href="#I:C">C</a>&nbsp;<a href="#I:D">D</a>&nbsp;<a href="#I:G">G</a>&nbsp;<a href="#I:H">H</a>&nbsp;<a href="#I:I">I</a>&nbsp;<a href="#I:K">K</a>&nbsp;<a href="#I:L">L</a>&nbsp;<a href="#I:P">P</a>&nbsp;<a href="#I:Q">Q</a>&nbsp;<a href="#I:R">R</a>&nbsp;<a href="#I:S">S</a>&nbsp;<a href="#I:T">T</a>&nbsp;<a href="#I:U">U</a>&nbsp;<a href="#I:W">W</a>&nbsp;</div>
<!-- ======= START OF BOTTOM NAVBAR ====== -->

View File

@ -2,7 +2,7 @@
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc (1.8.0_25) on Fri Apr 03 08:38:57 PDT 2015 -->
<!-- Generated by javadoc (1.8.0_25) on Mon Apr 06 10:05:38 PDT 2015 -->
<title>whoas 0.3.0 API</title>
<script type="text/javascript">
targetPage = "" + window.location.search;

View File

@ -2,9 +2,9 @@
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc (1.8.0_25) on Fri Apr 03 08:38:57 PDT 2015 -->
<!-- Generated by javadoc (1.8.0_25) on Mon Apr 06 10:05:38 PDT 2015 -->
<title>Class Hierarchy (whoas 0.3.0 API)</title>
<meta name="date" content="2015-04-03">
<meta name="date" content="2015-04-06">
<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
<script type="text/javascript" src="script.js"></script>
</head>
@ -82,6 +82,7 @@
<li type="circle">com.github.lookout.whoas.<a href="com/github/lookout/whoas/AbstractHookQueue.html" title="class in com.github.lookout.whoas"><span class="typeNameLink">AbstractHookQueue</span></a>
<ul>
<li type="circle">com.github.lookout.whoas.<a href="com/github/lookout/whoas/InMemoryQueue.html" title="class in com.github.lookout.whoas"><span class="typeNameLink">InMemoryQueue</span></a></li>
<li type="circle">com.github.lookout.whoas.<a href="com/github/lookout/whoas/RedisQueue.html" title="class in com.github.lookout.whoas"><span class="typeNameLink">RedisQueue</span></a></li>
</ul>
</li>
<li type="circle">com.github.lookout.whoas.<a href="com/github/lookout/whoas/AbstractHookRunner.html" title="class in com.github.lookout.whoas"><span class="typeNameLink">AbstractHookRunner</span></a>
@ -99,6 +100,7 @@
<h2 title="Interface Hierarchy">Interface Hierarchy</h2>
<ul>
<li type="circle">com.github.lookout.whoas.<a href="com/github/lookout/whoas/QueueAction.html" title="interface in com.github.lookout.whoas"><span class="typeNameLink">QueueAction</span></a></li>
<li type="circle">com.github.lookout.whoas.<a href="com/github/lookout/whoas/RedisQueueAction.html" title="interface in com.github.lookout.whoas"><span class="typeNameLink">RedisQueueAction</span></a>&lt;T&gt;</li>
<li type="circle">com.github.lookout.whoas.<a href="com/github/lookout/whoas/WhoasConfiguration.html" title="interface in com.github.lookout.whoas"><span class="typeNameLink">WhoasConfiguration</span></a>&lt;T&gt;</li>
</ul>
</div>

View File

@ -24,8 +24,9 @@ public abstract class AbstractHookQueue {
/**
* @return Size of the queue, if not implemented by the provider, returns -1
* @throws Exception implementors may throw Exceptions
*/
public abstract int getSize();
public abstract int getSize() throws Exception;
/**
* @param action a {@code QueueAction} to invoke
@ -36,6 +37,7 @@ public abstract class AbstractHookQueue {
/**
* @param request A valid {@code HookRequest}
* @return true if the {@code HookRequest} was successfully added to the queue
* @throws Exception implementors may throw Exceptions
*/
public abstract Boolean push(HookRequest request);
public abstract Boolean push(HookRequest request) throws Exception;
}

View File

@ -3,7 +3,7 @@ package com.github.lookout.whoas;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;;
import org.slf4j.LoggerFactory;
/**

View File

@ -49,14 +49,14 @@ public class Publisher {
String responseBody = response.readEntity(String.class);
}
catch (ProcessingException exc) {
logger.warn("\"POST\" to url: \"${request.url}\" failed", exc);
logger.warn("POST to url \"{}\" failed", request.url, exc);
retryableExc = true;
}
if ((retryableExc) || (shouldRetry(response))) {
if (request.retries >= this.maxRetries) {
logger.error("Giving up on \"POST\" to url: \"${request.url}\" " +
"after ${request.retries} retries");
logger.error("Giving up on POST to url \"{}\" after {} retries",
request.url, request.retries);
return false;
}
request.retries = (request.retries + 1);
@ -64,7 +64,7 @@ public class Publisher {
return this.publish(request);
}
logger.debug("\"POST\" to url: \"${request.url}\" succeeded");
logger.debug("POST to url \"{}\" succeeded", request.url);
return true;
}
@ -80,7 +80,8 @@ public class Publisher {
}
/* Enhance your calm and try again */
if (response.getStatus() == 420) {
if ((response.getStatus() == 420) ||
(response.getStatus() == 429)) {
return true;
}

View File

@ -1,59 +1,83 @@
package com.github.lookout.whoas
package com.github.lookout.whoas;
import com.fasterxml.jackson.databind.ObjectMapper
import redis.clients.jedis.Jedis
import redis.clients.jedis.JedisPool
import redis.clients.jedis.JedisPoolConfig
import org.slf4j.Logger
import org.slf4j.LoggerFactory
import java.util.List;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.core.JsonProcessingException;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* A redis queue that offers distributed and persistent queue
*/
class RedisQueue extends AbstractHookQueue {
private WhoasQueueConfig queueConfig
private JedisPool pool = null
private static Integer maxActiveConnections = 10
private static Integer maxIdleConnections = 5
private static Integer minIdleConnections = 1
private Logger logger = LoggerFactory.getLogger(RedisQueue.class)
public class RedisQueue extends AbstractHookQueue {
private WhoasQueueConfig queueConfig;
private JedisPool pool = null;
private static Integer maxActiveConnections = 10;
private static Integer maxIdleConnections = 5;
private static Integer minIdleConnections = 1;
private Logger logger = LoggerFactory.getLogger(RedisQueue.class);
/**
* Create the RedisQueue with valid config
*
* @param queueConfig necessary configuration to connect to Redis
*/
RedisQueue(WhoasQueueConfig queueConfig) {
this.queueConfig = queueConfig
public RedisQueue(WhoasQueueConfig queueConfig) {
this.queueConfig = queueConfig;
}
/**
* Default constructor
*/
RedisQueue() {
queueConfig = new WhoasQueueConfig()
public RedisQueue() {
queueConfig = new WhoasQueueConfig();
}
/**
* Allow users to provide their own {@code JedisPool} instance
*
* @param pool an already set up pool
*/
public RedisQueue(JedisPool pool) {
this();
this.pool = pool;
}
/**
* Return the number of elements in the queue
*/
int getSize() {
public int getSize() throws Exception {
if (!this.started) {
throw new Exception("Queue must be started before this operation is invoked")
}
return withRedis() { Jedis redisClient ->
return redisClient.llen(this.queueConfig.key)
throw new Exception("Queue must be started before this operation is invoked");
}
return ((Integer)withRedis(new RedisQueueAction<Integer>() {
@Override
public Integer call(Jedis redisClient) {
Long size = redisClient.llen(queueConfig.key);
return size.intValue();
}
})).intValue();
}
/**
* Setup the Redis client
*/
@Override
void start() {
super.start()
public void start() {
super.start();
/* Bail early if we already have a valid pool */
if (this.pool instanceof JedisPool) {
return;
}
logger.debug("Setting up redis queue \"${this.queueConfig.key}\" on the server " +
"\"${this.queueConfig.hostname}:${this.queueConfig.port}")
"\"${this.queueConfig.hostname}:${this.queueConfig.port}");
/**
* Setup jedis pool
@ -63,37 +87,26 @@ class RedisQueue extends AbstractHookQueue {
* multiple jedis instances and use them reliably and efficiently across different
* threads
*/
JedisPoolConfig poolConfig = new JedisPoolConfig()
poolConfig.setMaxTotal(maxActiveConnections)
poolConfig.setTestOnBorrow(true)
poolConfig.setTestOnReturn(true)
poolConfig.setMaxIdle(maxIdleConnections)
poolConfig.setMinIdle(minIdleConnections)
poolConfig.setTestWhileIdle(true)
JedisPoolConfig poolConfig = new JedisPoolConfig();
poolConfig.setMaxTotal(maxActiveConnections);
poolConfig.setTestOnBorrow(true);
poolConfig.setTestOnReturn(true);
poolConfig.setMaxIdle(maxIdleConnections);
poolConfig.setMinIdle(minIdleConnections);
poolConfig.setTestWhileIdle(true);
/* Create the pool */
pool = new JedisPool(poolConfig, this.queueConfig.hostname, this.queueConfig.port)
pool = new JedisPool(poolConfig, this.queueConfig.hostname, this.queueConfig.port);
}
/**
* Stop the Redis client
*/
@Override
void stop() {
super.stop()
pool.destroy()
pool = null
}
/** Allocate redis client from the pool */
Object withRedis(Closure closure) {
Jedis redisClient = pool.resource
try {
return closure.call(redisClient)
}
finally {
redisClient.close()
}
public void stop() {
super.stop();
pool.destroy();
pool = null;
}
/**
@ -103,35 +116,38 @@ class RedisQueue extends AbstractHookQueue {
* If the Closure throws an exception, the dequeued item will be returned
* to the tail end of the queue
*/
void pop(QueueAction action) {
public void pop(final QueueAction action) throws Exception {
if (action == null) {
throw new Exception("Must provide a Closure to RedisQueue.pop()")
throw new Exception("Must provide a Closure to RedisQueue.pop()");
}
if (!this.started) {
throw new Exception("Queue must be started before this operation is invoked")
throw new Exception("Queue must be started before this operation is invoked");
}
withRedis() { Jedis redisClient ->
withRedis(new RedisQueueAction<Long>() {
@Override
public Long call(Jedis redisClient) throws Exception {
/**
* The blpop returns list of strings (key and value)
*/
List<String> messages = redisClient.blpop(0, queueConfig.key);
/**
* The blpop returns list of strings (key and value)
*/
List<String> messages = redisClient.blpop(0, this.queueConfig.key)
/* If valid, decode message */
if (messages) {
ObjectMapper mapper = new ObjectMapper()
HookRequest request = mapper.readValue(messages.get(1), HookRequest.class)
try {
action.call(request)
} catch (Exception ex) {
/* Put this back on the front of the queue */
logger.info("\"Pop\" on redis queue failed, pushing it back on front of the queue", ex)
redisClient.lpush(this.queueConfig.key, messages.get(1))
/* If valid, decode message */
if ((messages != null) && (!messages.isEmpty())) {
ObjectMapper mapper = new ObjectMapper();
HookRequest request = mapper.readValue(messages.get(1), HookRequest.class);
try {
action.call(request);
} catch (Exception ex) {
/* Put this back on the front of the queue */
logger.info("\"Pop\" on redis queue failed, pushing it back on front of the queue", ex);
return redisClient.lpush(queueConfig.key, messages.get(1));
}
}
return new Long(-1);
}
}
});
}
/**
@ -139,16 +155,43 @@ class RedisQueue extends AbstractHookQueue {
*
* If the request cannot be inserted, this method will return false,
* otherwise true.
*
* @param request A {@code HookRequest} to enqueue
*/
Boolean push(HookRequest request) {
@Override
public Boolean push(HookRequest request) throws JsonProcessingException, Exception {
if (!this.started) {
throw new Exception("Queue must be started before this operation is invoked")
throw new Exception("Queue must be started before this operation is invoked");
}
ObjectMapper mapper = new ObjectMapper()
String jsonPayload = mapper.writeValueAsString(request)
return withRedis() { Jedis redisClient ->
return redisClient.rpush(this.queueConfig.key, jsonPayload) != 0
ObjectMapper mapper = new ObjectMapper();
final String jsonPayload = mapper.writeValueAsString(request);
return (Boolean)withRedis(new RedisQueueAction<Boolean>() {
@Override
public Boolean call(Jedis redisClient) {
System.out.println(String.format("%s %s", queueConfig.key, jsonPayload));
redisClient.rpush(queueConfig.key, jsonPayload);
return true;
}
});
}
/** Allocate redis client from the pool
*
* @param action callback to invoke with a {@code Jedis} object from the
* pool
* @throws Exception propogates underlying Jedis exceptions
* @return propogates a generic {@code Object} up from the {@code RedisQueueAction}
*/
protected Object withRedis(RedisQueueAction action) throws Exception {
Jedis redisClient = this.pool.getResource();
System.out.println(redisClient.toString());
try {
return action.call(redisClient);
}
finally {
redisClient.close();
}
}
}

View File

@ -0,0 +1,7 @@
package com.github.lookout.whoas;
import redis.clients.jedis.Jedis;
public interface RedisQueueAction<T> {
public T call(Jedis jedis) throws Exception;
}

View File

@ -40,6 +40,7 @@ class PublisherSpec extends Specification {
201 | false
400 | false
420 | true
429 | true
500 | true
599 | true
}

View File

@ -1,11 +1,18 @@
package com.github.lookout.whoas
import com.fiftyonred.mock_jedis.MockJedis
import com.fiftyonred.mock_jedis.MockJedisPool
import redis.clients.jedis.Jedis
import redis.clients.jedis.JedisPool
import redis.clients.jedis.JedisPoolConfig
import spock.lang.*
class RedisQueueSpec extends Specification {
protected MockJedisPool mockPool() {
return new MockJedisPool(new JedisPoolConfig(), 'example.com')
}
def "getSize()ing without a start should throw"() {
given:
@ -20,15 +27,13 @@ class RedisQueueSpec extends Specification {
def "getSize() should return 0 by default"() {
given:
RedisQueue queue = new RedisQueue()
Jedis redisClient = new MockJedis("test")
RedisQueue queue = new RedisQueue(mockPool())
when:
queue.start()
queue.pool.metaClass.getResource = {redisClient}
then:
queue.getSize() == 0
queue.size == 0
}
def "pop()ing without a closure should throw"() {
@ -64,50 +69,62 @@ class RedisQueueSpec extends Specification {
thrown Exception
}
}
/** Spec for testing Jedis interactions with mock-jedis */
class RedisQueueMockIntegrationSpec extends RedisQueueSpec {
protected RedisQueue queue
protected Jedis client
protected List<String> store = []
def setup() {
this.queue = new RedisQueue(mockPool())
this.client = Mock(MockJedis, constructorArgs: ['example.com'])
this.queue.pool.client = this.client
_ * client.llen(_) >> { this.store.size }
}
def "push() should put onto the internal queue"() {
given:
RedisQueue queue = new RedisQueue()
Jedis redisClient = new MockJedis("test")
redisClient.metaClass.rpush = {String key, String payload -> redisClient.lpush(key, payload)}
2 * client.rpush(_, _) >> { key, payload -> store << payload[]; return 1 }
when:
queue.start()
queue.pool.metaClass.getResource = {redisClient}
queue.push(new HookRequest())
queue.push(new HookRequest())
then:
queue.getSize() == 2
queue.size == 2
}
def "pop() after push should receive a request"() {
given:
RedisQueue queue = new RedisQueue()
Jedis redisClient = new MockJedis("test")
redisClient.metaClass.rpush = {String key, String payload -> redisClient.lpush(key, payload)}
redisClient.metaClass.blpop = {Integer timeout, String key -> [key, redisClient.lpop(key)]}
/* Mock rpush() and just say it pushed one element
* Due to some weirdness in Spock's mocking, `payload` comes in as a
* list of strings
*/
1 * client.rpush(_, _) >> { key, payload -> store << payload[0]; return 1 }
/* Need to return a stupid List since jedis */
1 * client.blpop(_, _) >> { [null, store.pop()] }
when:
queue.start()
queue.pool.metaClass.getResource = {redisClient}
HookRequest test = new HookRequest()
queue.push(test)
then:
queue.getSize() == 1
queue.pop() { HookRequest fetched -> fetched == test}
queue.getSize() == 0
store.size == 1
queue.pop { HookRequest fetched -> fetched == test}
store.size == 0
}
def "push() on rpush exception should return false"() {
given:
RedisQueue queue = new RedisQueue()
Jedis redisClient = new MockJedis("test")
redisClient.metaClass.rpush = {String key, String payload -> throw new Exception("Test Exception")}
1 * client.rpush(*_) >> { throw new Exception('Spockd!') }
when:
queue.start()
queue.pool.metaClass.getResource = {redisClient}
queue.push(new HookRequest())
then:
@ -116,13 +133,10 @@ class RedisQueueSpec extends Specification {
def "pop() on blpop exception simple return, nothing to requeue "() {
given:
RedisQueue queue = new RedisQueue()
Jedis redisClient = new MockJedis("test")
redisClient.metaClass.blpop = {Integer timeout, String key -> throw new Exception("Test Exception")}
1 * client.blpop(*_) >> { throw new Exception('Spockd!') }
when:
queue.start()
queue.pool.metaClass.getResource = {redisClient}
queue.pop() { }
then:
@ -131,19 +145,16 @@ class RedisQueueSpec extends Specification {
def "pop() on exception while executing closure should requeue"() {
given:
RedisQueue queue = new RedisQueue()
Jedis redisClient = new MockJedis("test")
redisClient.metaClass.rpush = {String key, String payload -> redisClient.lpush(key, payload)}
redisClient.metaClass.blpop = {Integer timeout, String key -> [key, redisClient.lpop(key)]}
1 * client.rpush(_, _) >> { key, payload -> this.store << payload[0]; return 1 }
1 * client.blpop(*_) >> { [null, this.store.pop()] }
1 * client.lpush(_, _) >> { key, payload -> this.store << payload[0]; return 1 }
when:
queue.start()
queue.pool.metaClass.getResource = {redisClient}
queue.push(new HookRequest())
queue.pop() { throw new Exception("Test Exception") }
then:
queue.getSize() == 1
queue.size == 1
}
}