gush 0.3.3 → 0.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d26693f019dfd49b57cb7828274bec009c96dfb4
4
- data.tar.gz: 1666a4d1edc877d4ac597428ed56f73a5f625fa9
3
+ metadata.gz: 6742c4a3bbcd13c0045c12c8733dae7e7b2fd2a2
4
+ data.tar.gz: 43293c3a05639fc46e3d39b87e750358a3ed4c60
5
5
  SHA512:
6
- metadata.gz: b1f55d88bbe1719395103c6eeeda6a9d140d9cd7b6d35296f1ab97b1d381a7f69bbbe83e21faa660a05fe6183d7d5443c006244cbbcc99ebbc58edf554d2adbf
7
- data.tar.gz: c2d6e5aa2a0613dae3e893ca368e527cac28fe1b9d6df66793de83bfe73dcad7940ee9d0cfd0663e8fd1fcc30eb313c0e465f98da1a350f5958d82beef9faa61
6
+ metadata.gz: 36263afadc504f4051a93613b27ab18f77b79b24c7e25927d11fc92322b5c42c4054fcd3d8dc2335843dc59224a1aab699a848459ce879b31920b5393d16c0f4
7
+ data.tar.gz: b4447f6c90b7ef427624eb6bdd3f2b1eb36a954b92f1c578dec3a446cbe7e7ea909d02957050e3779902db88e9cb4a12695bc5dc0f08432813d8925d37b7f92a
data/CHANGELOG.md CHANGED
@@ -1,3 +1,3 @@
1
- # 0.4
1
+ # 0.5
2
2
 
3
3
  - remove hard dependency on Yajl, so Gush can work with non-MRI Rubies ([#31](https://github.com/chaps-io/gush/pull/31) by [Nick Rakochy](https://github.com/chaps-io/gush/pull/31))
data/Gemfile CHANGED
@@ -4,3 +4,4 @@ gemspec
4
4
  platforms :mri, :ruby do
5
5
  gem 'yajl-ruby'
6
6
  end
7
+
data/gush.gemspec CHANGED
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
 
5
5
  Gem::Specification.new do |spec|
6
6
  spec.name = "gush"
7
- spec.version = "0.3.3"
7
+ spec.version = "0.4"
8
8
  spec.authors = ["Piotrek Okoński"]
9
9
  spec.email = ["piotrek@okonski.org"]
10
10
  spec.summary = "Fast and distributed workflow runner using only Sidekiq and Redis"
data/lib/gush/client.rb CHANGED
@@ -1,15 +1,17 @@
1
1
  module Gush
2
2
  class Client
3
- attr_reader :configuration, :sidekiq
3
+ attr_reader :configuration
4
4
 
5
5
  def initialize(config = Gush.configuration)
6
6
  @configuration = config
7
7
  @sidekiq = build_sidekiq
8
+ @redis = build_redis
8
9
  end
9
10
 
10
11
  def configure
11
12
  yield configuration
12
13
  @sidekiq = build_sidekiq
14
+ @redis = build_redis
13
15
  end
14
16
 
15
17
  def create_workflow(name)
@@ -47,11 +49,7 @@ module Gush
47
49
  loop do
48
50
  id = SecureRandom.uuid
49
51
  job_identifier = "#{job_klass}-#{id}"
50
- available = connection_pool.with do |redis|
51
- !redis.exists("gush.jobs.#{workflow_id}.#{job_identifier}")
52
- end
53
-
54
- break if available
52
+ break if !redis.exists("gush.jobs.#{workflow_id}.#{job_identifier}")
55
53
  end
56
54
 
57
55
  job_identifier
@@ -61,54 +59,40 @@ module Gush
61
59
  id = nil
62
60
  loop do
63
61
  id = SecureRandom.uuid
64
- available = connection_pool.with do |redis|
65
- !redis.exists("gush.workflow.#{id}")
66
- end
67
-
68
- break if available
62
+ break if !redis.exists("gush.workflow.#{id}")
69
63
  end
70
64
 
71
65
  id
72
66
  end
73
67
 
74
68
  def all_workflows
75
- connection_pool.with do |redis|
76
- redis.keys("gush.workflows.*").map do |key|
77
- id = key.sub("gush.workflows.", "")
78
- find_workflow(id)
79
- end
69
+ redis.keys("gush.workflows.*").map do |key|
70
+ id = key.sub("gush.workflows.", "")
71
+ find_workflow(id)
80
72
  end
81
73
  end
82
74
 
83
75
  def find_workflow(id)
84
- connection_pool.with do |redis|
85
- data = redis.get("gush.workflows.#{id}")
86
-
87
- unless data.nil?
88
- hash = Gush::JSON.decode(data, symbolize_keys: true)
89
- keys = redis.keys("gush.jobs.#{id}.*")
90
- nodes = redis.mget(*keys).map { |json| Gush::JSON.decode(json, symbolize_keys: true) }
91
- workflow_from_hash(hash, nodes)
92
- else
93
- raise WorkflowNotFound.new("Workflow with given id doesn't exist")
94
- end
76
+ data = redis.get("gush.workflows.#{id}")
77
+ unless data.nil?
78
+ hash = Gush::JSON.decode(data, symbolize_keys: true)
79
+ keys = redis.keys("gush.jobs.#{id}.*")
80
+ nodes = redis.mget(*keys).map { |json| Gush::JSON.decode(json, symbolize_keys: true) }
81
+ workflow_from_hash(hash, nodes)
82
+ else
83
+ raise WorkflowNotFound.new("Workflow with given id doesn't exist")
95
84
  end
96
85
  end
97
86
 
98
87
  def persist_workflow(workflow)
99
- connection_pool.with do |redis|
100
- redis.set("gush.workflows.#{workflow.id}", workflow.to_json)
101
- end
102
-
88
+ redis.set("gush.workflows.#{workflow.id}", workflow.to_json)
103
89
  workflow.jobs.each {|job| persist_job(workflow.id, job) }
104
90
  workflow.mark_as_persisted
105
91
  true
106
92
  end
107
93
 
108
94
  def persist_job(workflow_id, job)
109
- connection_pool.with do |redis|
110
- redis.set("gush.jobs.#{workflow_id}.#{job.name}", job.to_json)
111
- end
95
+ redis.set("gush.jobs.#{workflow_id}.#{job.name}", job.to_json)
112
96
  end
113
97
 
114
98
  def load_job(workflow_id, job_id)
@@ -116,16 +100,10 @@ module Gush
116
100
  job_name_match = /(?<klass>\w*[^-])-(?<identifier>.*)/.match(job_id)
117
101
  hypen = '-' if job_name_match.nil?
118
102
 
119
- keys = connection_pool.with do |redis|
120
- redis.keys("gush.jobs.#{workflow_id}.#{job_id}#{hypen}*")
121
- end
122
-
103
+ keys = redis.keys("gush.jobs.#{workflow_id}.#{job_id}#{hypen}*")
123
104
  return nil if keys.nil?
124
105
 
125
- data = connection_pool.with do |redis|
126
- redis.get(keys.first)
127
- end
128
-
106
+ data = redis.get(keys.first)
129
107
  return nil if data.nil?
130
108
 
131
109
  data = Gush::JSON.decode(data, symbolize_keys: true)
@@ -133,16 +111,12 @@ module Gush
133
111
  end
134
112
 
135
113
  def destroy_workflow(workflow)
136
- connection_pool.with do |redis|
137
- redis.del("gush.workflows.#{workflow.id}")
138
- end
114
+ redis.del("gush.workflows.#{workflow.id}")
139
115
  workflow.jobs.each {|job| destroy_job(workflow.id, job) }
140
116
  end
141
117
 
142
118
  def destroy_job(workflow_id, job)
143
- connection_pool.with do |redis|
144
- redis.del("gush.jobs.#{workflow_id}.#{job.name}")
145
- end
119
+ redis.del("gush.jobs.#{workflow_id}.#{job.name}")
146
120
  end
147
121
 
148
122
  def worker_report(message)
@@ -166,6 +140,8 @@ module Gush
166
140
 
167
141
  private
168
142
 
143
+ attr_reader :sidekiq, :redis
144
+
169
145
  def workflow_from_hash(hash, nodes = nil)
170
146
  flow = hash[:klass].constantize.new *hash[:arguments]
171
147
  flow.jobs = []
@@ -180,9 +156,7 @@ module Gush
180
156
  end
181
157
 
182
158
  def report(key, message)
183
- connection_pool.with do |redis|
184
- redis.publish(key, Gush::JSON.encode(message))
185
- end
159
+ redis.publish(key, Gush::JSON.encode(message))
186
160
  end
187
161
 
188
162
 
@@ -195,7 +169,7 @@ module Gush
195
169
  end
196
170
 
197
171
  def connection_pool
198
- @connection_pool ||= ConnectionPool.new(size: configuration.concurrency, timeout: 1) { build_redis }
172
+ ConnectionPool.new(size: configuration.concurrency, timeout: 1) { build_redis }
199
173
  end
200
174
  end
201
175
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gush
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.3
4
+ version: '0.4'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Piotrek Okoński
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-08-23 00:00:00.000000000 Z
11
+ date: 2016-03-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sidekiq
@@ -268,7 +268,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
268
268
  version: '0'
269
269
  requirements: []
270
270
  rubyforge_project:
271
- rubygems_version: 2.4.8
271
+ rubygems_version: 2.4.5.1
272
272
  signing_key:
273
273
  specification_version: 4
274
274
  summary: Fast and distributed workflow runner using only Sidekiq and Redis