resque_jobs_tree 0.4.2 → 0.4.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -23,9 +23,23 @@ class ResqueJobsTree::Job
23
23
  def node tree_name, job_name, *resources_arguments
24
24
  node_definition = ResqueJobsTree.find(tree_name).find job_name
25
25
  resources = ResqueJobsTree::ResourcesSerializer.instancize resources_arguments
26
- node_definition.spawn resources
26
+ node = node_definition.spawn(resources)
27
+ if node.exists?
28
+ node
29
+ else
30
+ puts "Warning, the job #{node.definition.tree.name}##{node.definition.name}##{node.resources.inspect} " \
31
+ "doesn't exist. Cleaning-up."
32
+ node.cleanup
33
+ FakeNode.new
34
+ end
27
35
  end
28
36
 
29
37
  end
30
38
 
39
+ class FakeNode
40
+ def method_missing *args
41
+ # do nothing
42
+ end
43
+ end
44
+
31
45
  end
@@ -51,6 +51,14 @@ module ResqueJobsTree::Storage::Node
51
51
  "#{key}:lock"
52
52
  end
53
53
 
54
+ def exists?
55
+ if definition.root?
56
+ tree.exists?
57
+ else
58
+ redis.exists(childs_key) || redis.hexists(PARENTS_KEY, key)
59
+ end
60
+ end
61
+
54
62
  private
55
63
 
56
64
  def lock
@@ -16,6 +16,10 @@ module ResqueJobsTree::Storage::Tree
16
16
  def uniq?
17
17
  !redis.sismember LAUNCHED_TREES, key
18
18
  end
19
+
20
+ def exists?
21
+ redis.sismember LAUNCHED_TREES, key
22
+ end
19
23
 
20
24
  private
21
25
 
@@ -1,3 +1,3 @@
1
1
  module ResqueJobsTree
2
- VERSION = "0.4.2"
2
+ VERSION = "0.4.3"
3
3
  end
data/test/job_test.rb CHANGED
@@ -5,9 +5,18 @@ class JobTest < MiniTest::Unit::TestCase
5
5
  def test_node
6
6
  create_tree
7
7
  args = [@tree_definition.name, @tree_definition.find('job1').name, 1, 2, 3]
8
+ redis.sadd ResqueJobsTree::Storage::LAUNCHED_TREES, @tree_definition.spawn([1,2,3]).key
8
9
  assert_equal @tree_definition.find(:job1), ResqueJobsTree::Job.send(:node, *args).definition
9
10
  assert_equal ResqueJobsTree.find(:tree1), ResqueJobsTree::Job.send(:node, *args).definition.tree
10
11
  assert_equal [1, 2, 3], ResqueJobsTree::Job.send(:node, *args).resources
11
12
  end
12
13
 
14
+ def test_unregistred_node
15
+ create_tree
16
+ args = [@tree_definition.name, @tree_definition.find('job1').name, 1, 2, 3]
17
+ silenced_stdout do
18
+ assert ResqueJobsTree::Job.send(:node, *args).kind_of?(ResqueJobsTree::Job::FakeNode)
19
+ end
20
+ end
21
+
13
22
  end
data/test/process_test.rb CHANGED
@@ -244,12 +244,4 @@ class ProcessTest < MiniTest::Unit::TestCase
244
244
  redis.srem 'queues', queue_name
245
245
  end
246
246
 
247
- def silenced_stdout
248
- orig_stdout = $stdout
249
- $stdout = File.new('/dev/null', 'w')
250
- yield
251
- ensure
252
- $stdout = orig_stdout
253
- end
254
-
255
247
  end
@@ -82,6 +82,22 @@ class StorageNodeTest < MiniTest::Unit::TestCase
82
82
  assert_equal result, @root.send(:node_info_from_key, key)
83
83
  end
84
84
 
85
+ def test_exists
86
+ create_tree
87
+ leaf = @tree_definition.find(:job2).spawn([])
88
+ assert !leaf.exists?, 'leaf not registred'
89
+ redis.hset ResqueJobsTree::Storage::PARENTS_KEY, leaf.key, true
90
+ assert leaf.exists?, 'leaf with parent'
91
+ redis.hdel ResqueJobsTree::Storage::PARENTS_KEY, leaf.key
92
+ redis.set leaf.childs_key, true
93
+ assert leaf.exists?, 'leaf with child'
94
+
95
+ root = @tree_definition.find(:job1).spawn([])
96
+ assert !root.exists?, 'root not registred'
97
+ redis.sadd ResqueJobsTree::Storage::LAUNCHED_TREES, root.tree.key
98
+ assert root.exists?, 'root with tree registred'
99
+ end
100
+
85
101
  private
86
102
 
87
103
  def assert_parent_key expected
data/test/test_helper.rb CHANGED
@@ -89,4 +89,12 @@ class MiniTest::Unit::TestCase
89
89
  end
90
90
  end
91
91
 
92
+ def silenced_stdout
93
+ orig_stdout = $stdout
94
+ $stdout = File.new('/dev/null', 'w')
95
+ yield
96
+ ensure
97
+ $stdout = orig_stdout
98
+ end
99
+
92
100
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: resque_jobs_tree
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.2
4
+ version: 0.4.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors: