right_chimp 2.1.24 → 2.1.25
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGES +3 -0
- data/Gemfile.lock +2 -2
- data/lib/right_chimp/Chimp.rb +10 -10
- data/lib/right_chimp/daemon/ChimpDaemon.rb +21 -13
- data/lib/right_chimp/queue/QueueWorker.rb +19 -0
- data/lib/right_chimp/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6c548668e38fd58794b473964f7ba204a7e75892
|
4
|
+
data.tar.gz: 195e3977c81913af9ffd816f607901fa83150557
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bec51a0eea3e14118a9a72f6df1218339ffc0885c127e34fe0c6574c8e422c8857bd3e3a8b440fe47fa12bdde8810323c42baf19cf55c0b5dc706cecfcead239
|
7
|
+
data.tar.gz: 0445c453033f4371afc70d7e2a8ada37bb7e51e3de8e358577719d275f57daa3556dde1d898348f851dbabc2672a91b3f570bf5a132a36cbb6546705bc4ea77a
|
data/CHANGES
CHANGED
@@ -1,3 +1,6 @@
|
|
1
|
+
Version 2.1.25
|
2
|
+
--------------
|
3
|
+
* Bugfix: Fixed some corner case race conditions that affected the proper tracking of processing tasks.
|
1
4
|
Version 2.1.24
|
2
5
|
--------------
|
3
6
|
* Feature: We now ensure jobs are added and tracked into the processing status before sending a 200 back to
|
data/Gemfile.lock
CHANGED
data/lib/right_chimp/Chimp.rb
CHANGED
@@ -1103,7 +1103,6 @@ module Chimp
|
|
1103
1103
|
# This is used by chimpd, when processing a task.
|
1104
1104
|
#
|
1105
1105
|
def process
|
1106
|
-
|
1107
1106
|
Chimp.set_failure(false)
|
1108
1107
|
Chimp.set_job_uuid(job_uuid)
|
1109
1108
|
|
@@ -1123,12 +1122,6 @@ module Chimp
|
|
1123
1122
|
get_executable_info unless Chimp.failure
|
1124
1123
|
|
1125
1124
|
# All elements of task have been processed
|
1126
|
-
ChimpDaemon.instance.semaphore.synchronize do
|
1127
|
-
# remove from the processing queue
|
1128
|
-
Log.debug 'Removing job: ' + job_uuid + ' from the processing queue for group: ' + group.to_s
|
1129
|
-
ChimpDaemon.instance.queue.processing[group].delete(job_uuid)
|
1130
|
-
ChimpDaemon.instance.proc_counter -= 1
|
1131
|
-
end
|
1132
1125
|
|
1133
1126
|
if Chimp.failure
|
1134
1127
|
|
@@ -1139,11 +1132,19 @@ module Chimp
|
|
1139
1132
|
Log.error '##################################################'
|
1140
1133
|
return []
|
1141
1134
|
else
|
1142
|
-
if @servers.first.nil?
|
1135
|
+
if @servers.first.nil? || @executable.nil?
|
1143
1136
|
Log.warn "[#{Chimp.get_job_uuid}] Nothing to do for \"chimp #{@cli_args}\"."
|
1137
|
+
# decrease our counter
|
1138
|
+
ChimpDaemon.instance.queue.processing[@group].delete(job_uuid.to_sym)
|
1139
|
+
ChimpDaemon.instance.proc_counter -= 1
|
1144
1140
|
return []
|
1145
1141
|
else
|
1146
|
-
Log.debug "[#{Chimp.get_job_uuid}] Generating job..."
|
1142
|
+
Log.debug "[#{Chimp.get_job_uuid}] Generating job(s)..."
|
1143
|
+
Log.debug 'Increasing processing counter (' + ChimpDaemon.instance.proc_counter.to_s + ") + " + @servers.size.to_s + ' for group ' + @group.to_s
|
1144
|
+
|
1145
|
+
ChimpDaemon.instance.queue.processing[@group][job_uuid.to_sym] += @servers.size
|
1146
|
+
ChimpDaemon.instance.proc_counter += @servers.size - 1
|
1147
|
+
|
1147
1148
|
return generate_jobs(@servers, @server_template, @executable)
|
1148
1149
|
end
|
1149
1150
|
end
|
@@ -1174,7 +1175,6 @@ module Chimp
|
|
1174
1175
|
begin
|
1175
1176
|
while !@dry_run
|
1176
1177
|
local_queue = ChimpQueue.instance
|
1177
|
-
|
1178
1178
|
#
|
1179
1179
|
# load up remote chimpd jobs into the local queue
|
1180
1180
|
# this makes all the standard queue control methods available to us
|
@@ -89,9 +89,9 @@ module Chimp
|
|
89
89
|
when '--help', '-h'
|
90
90
|
help
|
91
91
|
when '--exit', '-x'
|
92
|
-
|
93
|
-
|
94
|
-
|
92
|
+
uri = "http://localhost:#{@port}/admin"
|
93
|
+
response = RestClient.post uri, { 'shutdown' => true }.to_yaml
|
94
|
+
exit 0
|
95
95
|
end
|
96
96
|
end
|
97
97
|
rescue GetoptLong::InvalidOption => ex
|
@@ -341,6 +341,7 @@ module Chimp
|
|
341
341
|
# /group/<name>/<status>
|
342
342
|
#
|
343
343
|
def do_GET(req, resp)
|
344
|
+
|
344
345
|
jobs = []
|
345
346
|
Log.debug 'get group info'
|
346
347
|
|
@@ -362,10 +363,11 @@ module Chimp
|
|
362
363
|
jobs = g.get_jobs_by_status(filter) if g
|
363
364
|
|
364
365
|
# If there are processing jobs, add them as dummy executions.
|
365
|
-
if g2
|
366
|
+
if g2 && !g2.empty?
|
367
|
+
|
366
368
|
Log.debug 'Group: ' + group_name + ' is processing:'
|
367
369
|
g2.each do |job|
|
368
|
-
Log.debug 'Job: ' + job
|
370
|
+
Log.debug 'Job: ' + job.to_s
|
369
371
|
j = ExecRightScript.new(group: group_name, job_uuid: job)
|
370
372
|
jobs.push j
|
371
373
|
end
|
@@ -429,20 +431,26 @@ module Chimp
|
|
429
431
|
# Ask chimpd to process a Chimp object directly
|
430
432
|
#
|
431
433
|
if verb == 'process' or verb == 'add'
|
432
|
-
# comment the next line to GET STUCK IN PROCESSING forever
|
433
|
-
ChimpDaemon.instance.chimp_queue.push payload
|
434
434
|
ChimpDaemon.instance.semaphore.synchronize do
|
435
435
|
# While we are at it, we will store these processing jobs to prevent issues in the event
|
436
436
|
# of a very slow API response.
|
437
437
|
Log.debug 'Adding job: ' + job_uuid + ' to the processing queue for group: ' + group.to_s
|
438
|
-
|
439
|
-
q.processing[payload.group].
|
438
|
+
|
439
|
+
q.processing[payload.group] = {} if q.processing[payload.group].nil?
|
440
|
+
q.processing[payload.group][payload.job_uuid.to_sym] = 0
|
440
441
|
|
441
442
|
ChimpDaemon.instance.proc_counter += 1
|
442
443
|
end
|
444
|
+
# comment the next line to GET STUCK IN PROCESSING forever
|
445
|
+
ChimpDaemon.instance.chimp_queue.push payload
|
443
446
|
|
444
|
-
|
445
|
-
|
447
|
+
# Proper count of processing Tasks
|
448
|
+
counter = 0
|
449
|
+
q.processing.each{|k,v|
|
450
|
+
counter += v.size
|
451
|
+
}
|
452
|
+
Log.debug 'Processing:'
|
453
|
+
Log.debug 'Tasks in the processing queue:' + counter.to_s
|
446
454
|
Log.debug q.processing.inspect
|
447
455
|
elsif verb == 'update'
|
448
456
|
puts 'UPDATE'
|
@@ -571,7 +579,7 @@ module Chimp
|
|
571
579
|
stats << "waiting: #{queue.get_jobs_by_status(:none).size} / "
|
572
580
|
stats << "failed: #{queue.get_jobs_by_status(:error).size} / "
|
573
581
|
stats << "done: #{queue.get_jobs_by_status(:done).size} / "
|
574
|
-
stats << "processing: #{ChimpDaemon.instance.proc_counter
|
582
|
+
stats << "processing: #{ChimpDaemon.instance.proc_counter} / "
|
575
583
|
stats << "\n"
|
576
584
|
|
577
585
|
resp.body = stats
|
@@ -587,7 +595,7 @@ module Chimp
|
|
587
595
|
"waiting" => queue.get_jobs_by_status(:none).size,
|
588
596
|
"failed" => queue.get_jobs_by_status(:error).size,
|
589
597
|
"done" => queue.get_jobs_by_status(:done).size,
|
590
|
-
"processing" => ChimpDaemon.instance.proc_counter
|
598
|
+
"processing" => ChimpDaemon.instance.proc_counter,
|
591
599
|
"holding" => queue.get_jobs_by_status(:holding).size
|
592
600
|
}
|
593
601
|
|
@@ -22,8 +22,27 @@ module Chimp
|
|
22
22
|
|
23
23
|
begin
|
24
24
|
if work_item != nil
|
25
|
+
job_uuid = work_item.job_uuid
|
26
|
+
group = work_item.group.group_id
|
27
|
+
|
25
28
|
work_item.retry_count = @retry_count
|
26
29
|
work_item.owner = Thread.current.object_id
|
30
|
+
ChimpDaemon.instance.semaphore.synchronize do
|
31
|
+
# remove from the processing queue
|
32
|
+
Log.debug 'Decreasing processing counter (' + (ChimpDaemon.instance.proc_counter-1).to_s + ') for [' + job_uuid + '] group: ' + group.to_s
|
33
|
+
ChimpDaemon.instance.queue.processing[group][job_uuid.to_sym] -= 1
|
34
|
+
Log.debug ChimpDaemon.instance.queue.processing[group].inspect
|
35
|
+
if ChimpDaemon.instance.queue.processing[group][job_uuid.to_sym] == 0
|
36
|
+
Log.debug 'Completed processing task ' + job_uuid
|
37
|
+
ChimpDaemon.instance.queue.processing[group].delete(job_uuid.to_sym)
|
38
|
+
Log.debug ChimpDaemon.instance.queue.processing.inspect
|
39
|
+
else
|
40
|
+
Log.debug 'Still counting down for ' + job_uuid
|
41
|
+
end
|
42
|
+
|
43
|
+
ChimpDaemon.instance.proc_counter -= 1
|
44
|
+
end
|
45
|
+
|
27
46
|
work_item.run
|
28
47
|
sleep @delay
|
29
48
|
else
|
data/lib/right_chimp/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: right_chimp
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.1.
|
4
|
+
version: 2.1.25
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- RightScale Operations
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-09-
|
11
|
+
date: 2016-09-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|