resque_jobs_tree 0.4.2 → 0.4.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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: