fairway 0.3.2 → 0.3.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/Gemfile.lock +1 -1
- data/go/fairway_ack.go +5 -4
- data/go/fairway_deliver.go +8 -8
- data/go/fairway_pull.go +5 -5
- data/go/queue_test.go +9 -9
- data/lib/fairway/version.rb +1 -1
- data/redis/fairway_deliver.lua +8 -8
- data/redis/fairway_pull.lua +5 -6
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
ZTYxMDc5ZDNmZWM4YmViYmExMzZlZTEyYTJhMmQ5ZTZkYzA5MGM2OQ==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
ZjZhOTMyYTI0OTgzOTU3OTlmMTFhZDkyNzU4Y2U0NjVmOGQ4Yjc4NQ==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
YmNlOTE3ODUzNmVmYWIwM2QwODUzN2NlMzM1NjAxMGQxMDk2ODY2NWE2Nzg5
|
10
|
+
ZjUyNTcwNzI5NmQxNjgxNzI5MDhjMDVhZDUxNDE3ODFiODZhZGFmZmRkNzYw
|
11
|
+
Njg0YjU3MjI5MDIxZTg4M2I4ZGE5ZGU5MmMwNWU0MGQyMmM4YzU=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
NzhjMGQwMjg0YzIzYzcxMzJmODhkYTJkYmFkZmM0ZWM2NmQzN2ZmZmQxOWQw
|
14
|
+
NGE2YTJhNjJiMjg0NGZiOWE4MjhiYTdjNmZjZDYxZTY0YzljOWY1M2NiNTc2
|
15
|
+
NGM0ODQxNGJkNmM4YmVkYzFiMDNlNWM1ZmRjM2Y3NjM5ZDBkOTU=
|
data/Gemfile.lock
CHANGED
data/go/fairway_ack.go
CHANGED
@@ -17,18 +17,19 @@ local round_robin = k(queue, 'facet_queue');
|
|
17
17
|
local facet_pool = k(queue, 'facet_pool');
|
18
18
|
local inflight = k(queue, 'inflight');
|
19
19
|
local messages = k(queue, facet);
|
20
|
-
local
|
20
|
+
local inflight_facet = k(queue, facet .. ':inflight');
|
21
21
|
local inflight_limit = k(queue, 'limit');
|
22
22
|
local priorities = k(queue, 'priorities');
|
23
23
|
|
24
|
-
local removed = tonumber(redis.call('zrem', inflight, message))
|
24
|
+
local removed = tonumber(redis.call('zrem', inflight, message));
|
25
|
+
redis.call('srem', inflight_facet, message);
|
25
26
|
|
26
27
|
if removed > 0 then
|
27
28
|
-- Manage facet queue and active facets
|
28
29
|
local current = tonumber(redis.call('hget', facet_pool, facet)) or 0;
|
29
30
|
local priority = tonumber(redis.call('hget', priorities, facet)) or 1;
|
30
31
|
local length = redis.call('llen', messages);
|
31
|
-
local inflight_cur = tonumber(redis.call('
|
32
|
+
local inflight_cur = tonumber(redis.call('scard', inflight_facet)) or 0;
|
32
33
|
local inflight_max = tonumber(redis.call('get', inflight_limit)) or 0;
|
33
34
|
|
34
35
|
local n = 0
|
@@ -50,7 +51,7 @@ if removed > 0 then
|
|
50
51
|
end
|
51
52
|
|
52
53
|
if (length == 0 and inflight_cur == 0 and n == 0) then
|
53
|
-
redis.call('del',
|
54
|
+
redis.call('del', inflight_facet);
|
54
55
|
redis.call('hdel', facet_pool, facet);
|
55
56
|
redis.call('srem', active_facets, facet);
|
56
57
|
end
|
data/go/fairway_deliver.go
CHANGED
@@ -27,8 +27,8 @@ for i = 1, #registered_queues, 2 do
|
|
27
27
|
local active_facets = k(queue, 'active_facets');
|
28
28
|
local round_robin = k(queue, 'facet_queue');
|
29
29
|
local facet_pool = k(queue, 'facet_pool');
|
30
|
-
local
|
31
|
-
local inflight_limit = k(queue, 'limit');
|
30
|
+
-- local inflight_facet = k(queue, facet .. ':inflight');
|
31
|
+
-- local inflight_limit = k(queue, 'limit');
|
32
32
|
|
33
33
|
-- Delivering the message to a queue is as simple as
|
34
34
|
-- pushing it onto the facet's message list, and
|
@@ -39,18 +39,18 @@ for i = 1, #registered_queues, 2 do
|
|
39
39
|
-- Manage facet queue and active facets
|
40
40
|
local current = tonumber(redis.call('hget', facet_pool, facet)) or 0;
|
41
41
|
local priority = tonumber(redis.call('hget', priorities, facet)) or 1;
|
42
|
-
local inflight_cur = tonumber(redis.call('
|
43
|
-
local inflight_max = tonumber(redis.call('get', inflight_limit)) or 0;
|
42
|
+
-- local inflight_cur = tonumber(redis.call('scard', inflight_facet)) or 0;
|
43
|
+
-- local inflight_max = tonumber(redis.call('get', inflight_limit)) or 0;
|
44
44
|
|
45
45
|
local n = 0
|
46
46
|
|
47
47
|
-- redis.log(redis.LOG_WARNING, current.."/"..length.."/"..priority.."/"..inflight_max.."/"..inflight_cur);
|
48
48
|
|
49
|
-
if inflight_max > 0 then
|
50
|
-
|
51
|
-
else
|
49
|
+
-- if inflight_max > 0 then
|
50
|
+
-- n = math.min(length, priority, inflight_max - inflight_cur);
|
51
|
+
-- else
|
52
52
|
n = math.min(length, priority);
|
53
|
-
end
|
53
|
+
-- end
|
54
54
|
|
55
55
|
-- redis.log(redis.LOG_WARNING, "PUSH: "..current.."/"..n);
|
56
56
|
|
data/go/fairway_pull.go
CHANGED
@@ -25,14 +25,14 @@ local pull = function (queue)
|
|
25
25
|
-- has at least one message available to be pulled
|
26
26
|
-- from it's message queue.
|
27
27
|
local messages = k(queue, facet);
|
28
|
-
local
|
28
|
+
local inflight_facet = k(queue, facet .. ':inflight');
|
29
29
|
|
30
30
|
message = redis.call('rpop', messages);
|
31
31
|
|
32
32
|
if message then
|
33
33
|
if wait ~= -1 then
|
34
34
|
redis.call('zadd', inflight, timestamp + wait, message);
|
35
|
-
redis.call('
|
35
|
+
redis.call('sadd', inflight_facet, message);
|
36
36
|
end
|
37
37
|
|
38
38
|
redis.call('decr', k(queue, 'length'));
|
@@ -49,12 +49,12 @@ local manage = function (queue, facet)
|
|
49
49
|
local priorities = k(queue, 'priorities');
|
50
50
|
local facet_pool = k(queue, 'facet_pool');
|
51
51
|
local messages = k(queue, facet);
|
52
|
-
local
|
52
|
+
local inflight_facet = k(queue, facet .. ':inflight');
|
53
53
|
|
54
54
|
local current = tonumber(redis.call('hget', facet_pool, facet)) or 0;
|
55
55
|
local priority = tonumber(redis.call('hget', priorities, facet)) or 1;
|
56
56
|
local length = redis.call('llen', messages);
|
57
|
-
local inflight_cur = tonumber(redis.call('
|
57
|
+
local inflight_cur = tonumber(redis.call('scard', inflight_facet)) or 0;
|
58
58
|
local inflight_max = tonumber(redis.call('get', inflight_limit)) or 0;
|
59
59
|
|
60
60
|
local n = 0
|
@@ -83,7 +83,7 @@ local manage = function (queue, facet)
|
|
83
83
|
end
|
84
84
|
|
85
85
|
if (length == 0 and inflight_cur == 0 and n == 0) then
|
86
|
-
redis.call('del',
|
86
|
+
redis.call('del', inflight_facet);
|
87
87
|
redis.call('hdel', facet_pool, facet);
|
88
88
|
redis.call('srem', active_facets, facet);
|
89
89
|
end
|
data/go/queue_test.go
CHANGED
@@ -244,16 +244,16 @@ func QueueSpec(c gospec.Context) {
|
|
244
244
|
_, message := queue.Pull(2)
|
245
245
|
c.Expect(message.json(), Equals, msg1.json())
|
246
246
|
|
247
|
-
count, _ := redis.Int(r.Do("
|
247
|
+
count, _ := redis.Int(r.Do("scard", "fairway:myqueue:1:inflight"))
|
248
248
|
c.Expect(count, Equals, 1)
|
249
249
|
|
250
250
|
_, message = queue.Pull(2)
|
251
251
|
c.Expect(message.json(), Equals, msg3.json())
|
252
252
|
|
253
|
-
count, _ = redis.Int(r.Do("
|
253
|
+
count, _ = redis.Int(r.Do("scard", "fairway:myqueue:1:inflight"))
|
254
254
|
c.Expect(count, Equals, 1)
|
255
255
|
|
256
|
-
count, _ = redis.Int(r.Do("
|
256
|
+
count, _ = redis.Int(r.Do("scard", "fairway:myqueue:2:inflight"))
|
257
257
|
c.Expect(count, Equals, 1)
|
258
258
|
|
259
259
|
_, message = queue.Pull(2)
|
@@ -261,10 +261,10 @@ func QueueSpec(c gospec.Context) {
|
|
261
261
|
_, message = queue.Pull(2)
|
262
262
|
c.Expect(message, IsNil)
|
263
263
|
|
264
|
-
count, _ = redis.Int(r.Do("
|
264
|
+
count, _ = redis.Int(r.Do("scard", "fairway:myqueue:1:inflight"))
|
265
265
|
c.Expect(count, Equals, 1)
|
266
266
|
|
267
|
-
count, _ = redis.Int(r.Do("
|
267
|
+
count, _ = redis.Int(r.Do("scard", "fairway:myqueue:2:inflight"))
|
268
268
|
c.Expect(count, Equals, 1)
|
269
269
|
|
270
270
|
queue.Ack(msg1)
|
@@ -273,20 +273,20 @@ func QueueSpec(c gospec.Context) {
|
|
273
273
|
queue.Ack(msg1)
|
274
274
|
queue.Ack(msg1)
|
275
275
|
|
276
|
-
count, err := redis.Int(r.Do("
|
276
|
+
count, err := redis.Int(r.Do("scard", "fairway:myqueue:1:inflight"))
|
277
277
|
c.Expect(count, Equals, 0)
|
278
278
|
c.Expect(err, IsNil)
|
279
279
|
|
280
|
-
count, _ = redis.Int(r.Do("
|
280
|
+
count, _ = redis.Int(r.Do("scard", "fairway:myqueue:2:inflight"))
|
281
281
|
c.Expect(count, Equals, 1)
|
282
282
|
|
283
283
|
_, message = queue.Pull(2)
|
284
284
|
c.Expect(message.json(), Equals, msg2.json())
|
285
285
|
|
286
|
-
count, _ = redis.Int(r.Do("
|
286
|
+
count, _ = redis.Int(r.Do("scard", "fairway:myqueue:1:inflight"))
|
287
287
|
c.Expect(count, Equals, 1)
|
288
288
|
|
289
|
-
count, _ = redis.Int(r.Do("
|
289
|
+
count, _ = redis.Int(r.Do("scard", "fairway:myqueue:2:inflight"))
|
290
290
|
c.Expect(count, Equals, 1)
|
291
291
|
})
|
292
292
|
|
data/lib/fairway/version.rb
CHANGED
data/redis/fairway_deliver.lua
CHANGED
@@ -23,8 +23,8 @@ for i = 1, #registered_queues, 2 do
|
|
23
23
|
local active_facets = k(queue, 'active_facets');
|
24
24
|
local round_robin = k(queue, 'facet_queue');
|
25
25
|
local facet_pool = k(queue, 'facet_pool');
|
26
|
-
local
|
27
|
-
local inflight_limit = k(queue, 'limit');
|
26
|
+
-- local inflight_facet = k(queue, facet .. ':inflight');
|
27
|
+
-- local inflight_limit = k(queue, 'limit');
|
28
28
|
|
29
29
|
-- Delivering the message to a queue is as simple as
|
30
30
|
-- pushing it onto the facet's message list, and
|
@@ -35,18 +35,18 @@ for i = 1, #registered_queues, 2 do
|
|
35
35
|
-- Manage facet queue and active facets
|
36
36
|
local current = tonumber(redis.call('hget', facet_pool, facet)) or 0;
|
37
37
|
local priority = tonumber(redis.call('hget', priorities, facet)) or 1;
|
38
|
-
local inflight_cur = tonumber(redis.call('
|
39
|
-
local inflight_max = tonumber(redis.call('get', inflight_limit)) or 0;
|
38
|
+
-- local inflight_cur = tonumber(redis.call('scard', inflight_facet)) or 0;
|
39
|
+
-- local inflight_max = tonumber(redis.call('get', inflight_limit)) or 0;
|
40
40
|
|
41
41
|
local n = 0
|
42
42
|
|
43
43
|
-- redis.log(redis.LOG_WARNING, current.."/"..length.."/"..priority.."/"..inflight_max.."/"..inflight_cur);
|
44
44
|
|
45
|
-
if inflight_max > 0 then
|
46
|
-
|
47
|
-
else
|
45
|
+
-- if inflight_max > 0 then
|
46
|
+
-- n = math.min(length, priority, inflight_max - inflight_cur);
|
47
|
+
-- else
|
48
48
|
n = math.min(length, priority);
|
49
|
-
end
|
49
|
+
-- end
|
50
50
|
|
51
51
|
-- redis.log(redis.LOG_WARNING, "PUSH: "..current.."/"..n);
|
52
52
|
|
data/redis/fairway_pull.lua
CHANGED
@@ -21,14 +21,14 @@ local pull = function (queue)
|
|
21
21
|
-- has at least one message available to be pulled
|
22
22
|
-- from it's message queue.
|
23
23
|
local messages = k(queue, facet);
|
24
|
-
local
|
24
|
+
local inflight_facet = k(queue, facet .. ':inflight');
|
25
25
|
|
26
26
|
message = redis.call('rpop', messages);
|
27
27
|
|
28
28
|
if message then
|
29
29
|
if wait ~= -1 then
|
30
30
|
redis.call('zadd', inflight, timestamp + wait, message);
|
31
|
-
redis.call('
|
31
|
+
redis.call('sadd', inflight_facet, message);
|
32
32
|
end
|
33
33
|
|
34
34
|
redis.call('decr', k(queue, 'length'));
|
@@ -45,12 +45,12 @@ local manage = function (queue, facet)
|
|
45
45
|
local priorities = k(queue, 'priorities');
|
46
46
|
local facet_pool = k(queue, 'facet_pool');
|
47
47
|
local messages = k(queue, facet);
|
48
|
-
local
|
48
|
+
local inflight_facet = k(queue, facet .. ':inflight');
|
49
49
|
|
50
50
|
local current = tonumber(redis.call('hget', facet_pool, facet)) or 0;
|
51
51
|
local priority = tonumber(redis.call('hget', priorities, facet)) or 1;
|
52
52
|
local length = redis.call('llen', messages);
|
53
|
-
local inflight_cur = tonumber(redis.call('
|
53
|
+
local inflight_cur = tonumber(redis.call('scard', inflight_facet)) or 0;
|
54
54
|
local inflight_max = tonumber(redis.call('get', inflight_limit)) or 0;
|
55
55
|
|
56
56
|
local n = 0
|
@@ -79,7 +79,7 @@ local manage = function (queue, facet)
|
|
79
79
|
end
|
80
80
|
|
81
81
|
if (length == 0 and inflight_cur == 0 and n == 0) then
|
82
|
-
redis.call('del',
|
82
|
+
redis.call('del', inflight_facet);
|
83
83
|
redis.call('hdel', facet_pool, facet);
|
84
84
|
redis.call('srem', active_facets, facet);
|
85
85
|
end
|
@@ -130,4 +130,3 @@ for i, queue in ipairs(ARGV) do
|
|
130
130
|
return {queue, message};
|
131
131
|
end
|
132
132
|
end
|
133
|
-
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fairway
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- John Allison
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-02-
|
11
|
+
date: 2016-02-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|