pwrake 2.2.9 → 2.3.0
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.
- checksums.yaml +4 -4
- data/README.md +5 -2
- data/lib/pwrake/branch/communicator_set.rb +1 -1
- data/lib/pwrake/master/master.rb +16 -13
- data/lib/pwrake/option/host_map.rb +11 -25
- data/lib/pwrake/option/option.rb +6 -3
- data/lib/pwrake/option/option_default_filesystem.rb +1 -1
- data/lib/pwrake/option/option_gfarm2fs.rb +1 -1
- data/lib/pwrake/queue/locality_aware_queue.rb +77 -84
- data/lib/pwrake/queue/non_locality_queue.rb +72 -0
- data/lib/pwrake/queue/queue_array.rb +75 -312
- data/lib/pwrake/queue/task_queue.rb +54 -91
- data/lib/pwrake/report/parallelism.rb +4 -6
- data/lib/pwrake/task/task_algorithm.rb +1 -0
- data/lib/pwrake/task/task_property.rb +49 -21
- data/lib/pwrake/task/task_wrapper.rb +17 -4
- data/lib/pwrake/version.rb +1 -1
- data/lib/pwrake/worker/executor.rb +1 -0
- data/lib/pwrake/worker/gfarm_directory.rb +38 -6
- data/lib/pwrake/worker/shared_directory.rb +3 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 99a7b5b9f4ecf97b511f58495f6b22facbd66c97d79aa0cab9f452d96ae44ea4
|
4
|
+
data.tar.gz: 2874a8eec50b7f508138567899da703e4c5d18687d58ad53a715ffa81b7fa402
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c49bcd791f52010a2a221118bec1f59c08796c053ef43127f68142bd97d95499d23becf2c3d6ab9f351bc48384300999824fd3bd0f6fe1e94cba5de6b291664a
|
7
|
+
data.tar.gz: af1ecd762e914f1e891a40639ab8f59a55165132646816ccb1a5209e9c761a518cb09f0c4385086f23bb7d172e658127852780577d748baa0c83313edb72e848
|
data/README.md
CHANGED
@@ -131,10 +131,13 @@ In this case, you need the rehash of command paths:
|
|
131
131
|
SSH_OPTION SSH option
|
132
132
|
PASS_ENV (Array) Environment variables passed to SSH
|
133
133
|
HEARTBEAT default=240 - Hearbeat interval in seconds
|
134
|
-
RETRY default=1 - The number of retry
|
134
|
+
RETRY default=1 - The number of task retry
|
135
|
+
HOST_FAILURE default=2 - The number of allowed continuous host failure (since v2.3)
|
135
136
|
FAILED_TARGET rename(default)|delete|leave - Treatment of failed target files
|
136
137
|
FAILURE_TERMINATION wait(default)|kill|continue - Behavior of other tasks when a task is failed
|
137
|
-
QUEUE_PRIORITY
|
138
|
+
QUEUE_PRIORITY LIFO(default)|FIFO|LIHR(LIfo&Highest-Rank-first; obsolete)
|
139
|
+
DISABLE_RANK_PRIORITY false(default)|true - Disable rank-aware task scheduling (since v2.3)
|
140
|
+
RESERVE_NODE false(default)|true - Reserve a node for tasks with ncore>1 (since v2.3)
|
138
141
|
NOACTION_QUEUE_PRIORITY FIFO(default)|LIFO|RAND
|
139
142
|
SHELL_START_INTERVAL default=0.012 (sec)
|
140
143
|
GRAPH_PARTITION false(default)|true
|
data/lib/pwrake/master/master.rb
CHANGED
@@ -148,8 +148,7 @@ module Pwrake
|
|
148
148
|
if @hostinfo_by_id.empty?
|
149
149
|
raise RuntimeError,"no worker host"
|
150
150
|
end
|
151
|
-
|
152
|
-
@task_queue = queue_class.new(@hostinfo_by_id)
|
151
|
+
@task_queue = TaskQueue.new(@option.queue_class,@hostinfo_by_id)
|
153
152
|
|
154
153
|
@branch_setup_thread = Thread.new do
|
155
154
|
create_fiber(@hdl_set) do |hdl|
|
@@ -171,15 +170,16 @@ module Pwrake
|
|
171
170
|
|
172
171
|
def retire(hid)
|
173
172
|
host_info = @hostinfo_by_id[hid.to_i]
|
174
|
-
if host_info
|
175
|
-
|
173
|
+
return if host_info.nil?
|
174
|
+
host_info.retire(1)
|
175
|
+
if host_info.retired?
|
176
176
|
if !@exited
|
177
177
|
m = "retired: host #{host_info.name}"
|
178
178
|
Log.warn(m)
|
179
179
|
$stderr.puts(m)
|
180
180
|
drop_host(host_info) # delete from hostinfo_by_id
|
181
181
|
if @hostinfo_by_id.empty?
|
182
|
-
|
182
|
+
raise RuntimeError,"no worker host"
|
183
183
|
end
|
184
184
|
end
|
185
185
|
end
|
@@ -231,7 +231,7 @@ module Pwrake
|
|
231
231
|
end
|
232
232
|
|
233
233
|
def setup_fiber(t)
|
234
|
-
|
234
|
+
@host_fail = @option["HOST_FAILURE"]
|
235
235
|
create_fiber(@hdl_set) do |hdl|
|
236
236
|
while s = hdl.get_line
|
237
237
|
Log.debug "Master:recv #{s.inspect} from branch[#{hdl.host}]"
|
@@ -253,9 +253,10 @@ module Pwrake
|
|
253
253
|
if tw.status == "fail"
|
254
254
|
$stderr.puts %[task "#{tw.name}" failed.]
|
255
255
|
if host_info
|
256
|
-
|
256
|
+
host_info.count_result(tw.status)
|
257
|
+
continuous_fail = host_info.continuous_fail
|
257
258
|
Log.debug "task=#{tw.name} continuous_fail=#{continuous_fail}"
|
258
|
-
if continuous_fail >
|
259
|
+
if continuous_fail > @host_fail && @hostinfo_by_id.size > 1
|
259
260
|
# retire this host
|
260
261
|
drop_host(host_info)
|
261
262
|
Log.warn("retired host:#{host_info.name} due to continuous fail")
|
@@ -310,11 +311,12 @@ module Pwrake
|
|
310
311
|
count = 0
|
311
312
|
# @idle_cores.decrease(..
|
312
313
|
@task_queue.deq_task do |tw,host_info,ncore|
|
313
|
-
host_info.busy(ncore)
|
314
314
|
count += 1
|
315
315
|
@hostinfo_by_taskname[tw.name] = host_info
|
316
|
+
tw.set_used_cores(ncore)
|
316
317
|
tw.preprocess
|
317
|
-
if
|
318
|
+
if host_info
|
319
|
+
host_info.busy(ncore)
|
318
320
|
hid = host_info.id
|
319
321
|
s = "#{hid}:#{tw.task_id}:#{tw.name}"
|
320
322
|
@channel_by_hostid[hid].put_line(s)
|
@@ -322,14 +324,13 @@ module Pwrake
|
|
322
324
|
tw.exec_host_id = hid
|
323
325
|
else
|
324
326
|
tw.status = "end"
|
325
|
-
task_end(tw,host_info) # @idle_cores.increase(..
|
326
327
|
@post_pool.enq(tw)
|
327
328
|
end
|
328
329
|
end
|
329
330
|
if count == 0 && !@task_queue.empty? && @hostinfo_by_taskname.empty?
|
330
331
|
m="No task was invoked while unexecuted tasks remain"
|
331
332
|
Log.error m
|
332
|
-
Log.error "count=#{count} @hostinfo_by_taskname.empty?=#{@hostinfo_by_taskname.empty?} @task_queue.empty
|
333
|
+
Log.error "count=#{count} @hostinfo_by_taskname.empty?=#{@hostinfo_by_taskname.empty?} @hostinfo_by_taskname=#{@hostinfo_by_taskname.inspect} @task_queue.empty?=#{@task_queue.empty?} @task_queue=\n"+@task_queue.inspect_q
|
333
334
|
raise RuntimeError,m
|
334
335
|
end
|
335
336
|
#Log.debug "#{self.class}#send_task_to_idle_core end time=#{Time.now-tm}"
|
@@ -359,7 +360,9 @@ module Pwrake
|
|
359
360
|
end
|
360
361
|
|
361
362
|
def task_end(tw,host_info)
|
362
|
-
if host_info
|
363
|
+
return if host_info.nil?
|
364
|
+
host_info.idle(tw.n_used_cores)
|
365
|
+
if host_info.retired?
|
363
366
|
# all retired
|
364
367
|
Log.warn("retired host:#{host_info.name} because all core retired")
|
365
368
|
drop_host(host_info)
|
@@ -21,10 +21,15 @@ module Pwrake
|
|
21
21
|
@total_fail = 0
|
22
22
|
@count_task = 0
|
23
23
|
@ipaddr = []
|
24
|
+
begin
|
25
|
+
@ipaddr << IPSocket.getaddress(@name)
|
26
|
+
rescue
|
27
|
+
end
|
24
28
|
end
|
25
29
|
|
26
30
|
attr_reader :name, :ncore, :weight, :group, :id, :steal_flag
|
27
31
|
attr_reader :ipaddr
|
32
|
+
attr_reader :continuous_fail
|
28
33
|
attr_accessor :idle_cores
|
29
34
|
|
30
35
|
def local?
|
@@ -33,7 +38,6 @@ module Pwrake
|
|
33
38
|
end
|
34
39
|
|
35
40
|
def set_ncore(n)
|
36
|
-
@retire = 0
|
37
41
|
@busy_cores = 0
|
38
42
|
@ncore = @idle_cores = n
|
39
43
|
end
|
@@ -45,19 +49,18 @@ module Pwrake
|
|
45
49
|
def idle(n)
|
46
50
|
@busy_cores -= n
|
47
51
|
@idle_cores += n
|
48
|
-
@idle_cores -= @retire
|
49
|
-
@retire = 0
|
50
|
-
@idle_cores + @busy_cores < 1 # all retired
|
51
52
|
end
|
52
53
|
|
53
54
|
def busy(n)
|
54
55
|
@busy_cores += n
|
55
56
|
@idle_cores -= n
|
56
|
-
@idle_cores + @busy_cores < 1 # all retired
|
57
57
|
end
|
58
58
|
|
59
|
-
def
|
59
|
+
def retire(n)
|
60
60
|
@idle_cores -= n
|
61
|
+
end
|
62
|
+
|
63
|
+
def retired?
|
61
64
|
@idle_cores + @busy_cores < 1 # all retired
|
62
65
|
end
|
63
66
|
|
@@ -68,12 +71,7 @@ module Pwrake
|
|
68
71
|
t
|
69
72
|
end
|
70
73
|
|
71
|
-
def
|
72
|
-
@retire += n
|
73
|
-
Log.debug "retire n=#{n}, host=#{@name}"
|
74
|
-
end
|
75
|
-
|
76
|
-
def task_result(result)
|
74
|
+
def count_result(result)
|
77
75
|
@count_task += 1
|
78
76
|
case result
|
79
77
|
when "end"
|
@@ -87,20 +85,8 @@ module Pwrake
|
|
87
85
|
@continuous_fail
|
88
86
|
end
|
89
87
|
|
90
|
-
def check_cores(use_cores)
|
91
|
-
unless (1-@ncore..@ncore) === use_cores
|
92
|
-
m = "use_cores=#{use_cores} is invalid for @ncore=#{@ncore}"
|
93
|
-
Log.fatal m
|
94
|
-
raise RuntimeError,m
|
95
|
-
end
|
96
|
-
if use_cores < 1
|
97
|
-
use_cores += @ncore
|
98
|
-
end
|
99
|
-
use_cores
|
100
|
-
end
|
101
|
-
|
102
88
|
def accept_core(use_cores)
|
103
|
-
|
89
|
+
use_cores <= @idle_cores
|
104
90
|
end
|
105
91
|
end
|
106
92
|
|
data/lib/pwrake/option/option.rb
CHANGED
@@ -166,8 +166,10 @@ module Pwrake
|
|
166
166
|
'REPORT_IMAGE',
|
167
167
|
'FAILED_TARGET', # rename(default), delete, leave
|
168
168
|
'FAILURE_TERMINATION', # wait, kill, continue
|
169
|
-
'QUEUE_PRIORITY', #
|
169
|
+
'QUEUE_PRIORITY', # LIHR(default), FIFO, LIFO, RANK
|
170
170
|
'NOACTION_QUEUE_PRIORITY', # FIFO(default), LIFO, RAND
|
171
|
+
'DISABLE_RANK_PRIORITY',
|
172
|
+
['RESERVE_NODE','RESERVE_HOST'],
|
171
173
|
'GRAPH_PARTITION',
|
172
174
|
'PLOT_PARTITION',
|
173
175
|
|
@@ -225,6 +227,7 @@ module Pwrake
|
|
225
227
|
['SHELL_START_INTERVAL', proc{|v| (v || 0.012).to_f}],
|
226
228
|
['HEARTBEAT', proc{|v| v && v.to_i}],
|
227
229
|
['RETRY', proc{|v| (v || 1).to_i}],
|
230
|
+
['HOST_FAILURE', 'HOST_FAIL', proc{|v| (v || 2).to_i}],
|
228
231
|
['MASTER_HOSTNAME', proc{|v| (v || Socket.gethostname).chomp}],
|
229
232
|
['WORK_DIR', proc{|v|
|
230
233
|
v ||= '%CWD_RELATIVE_TO_HOME'
|
@@ -286,9 +289,9 @@ module Pwrake
|
|
286
289
|
|
287
290
|
def parse_opt(s)
|
288
291
|
case s
|
289
|
-
when /^(false|nil|off)$/i
|
292
|
+
when /^(false|nil|off|n|no)$/i
|
290
293
|
false
|
291
|
-
when /^(true|on)$/i
|
294
|
+
when /^(true|on|y|yes)$/i
|
292
295
|
true
|
293
296
|
when $stdout
|
294
297
|
"stdout"
|
@@ -1,13 +1,18 @@
|
|
1
1
|
module Pwrake
|
2
2
|
|
3
|
-
class LocalityAwareQueue
|
3
|
+
class LocalityAwareQueue
|
4
|
+
|
5
|
+
def initialize(hostinfo_by_id, array_class, median_core, group_map=nil)
|
6
|
+
@hostinfo_by_id = hostinfo_by_id
|
7
|
+
@array_class = array_class
|
8
|
+
@median_core = median_core
|
4
9
|
|
5
|
-
def init_queue(group_map=nil)
|
6
10
|
# group_map = {gid1=>[hid1,hid2,...], ...}
|
7
|
-
@
|
11
|
+
@total_core = 0
|
8
12
|
@q = {}
|
9
|
-
@hostinfo_by_id.each do |id,
|
10
|
-
@
|
13
|
+
@hostinfo_by_id.each do |id,host_info|
|
14
|
+
@total_core += c = host_info.ncore
|
15
|
+
@q[id] = @array_class.new(c)
|
11
16
|
end
|
12
17
|
@q_group = {}
|
13
18
|
group_map ||= {1=>@hostinfo_by_id.map{|id,h| id}}
|
@@ -18,15 +23,25 @@ module Pwrake
|
|
18
23
|
a = [q1,q2]
|
19
24
|
ary.each{|hid| @q_group[hid] = a}
|
20
25
|
end
|
21
|
-
|
26
|
+
|
27
|
+
@q_remote = @array_class.new(@total_core)
|
28
|
+
@q_all = @array_class.new(@total_core)
|
29
|
+
|
22
30
|
@disable_steal = Rake.application.pwrake_options['DISABLE_STEAL']
|
31
|
+
Log.debug "#{self.class}: @disable_steal=#{@disable_steal.inspect}"
|
32
|
+
@disable_rank = Rake.application.pwrake_options['DISABLE_RANK_PRIORITY']
|
33
|
+
Log.debug "#{self.class}: @disable_rank=#{@disable_rank.inspect}"
|
34
|
+
|
35
|
+
@turns = @disable_steal ? [0] : [0,1]
|
23
36
|
@last_enq_time = Time.now
|
24
|
-
@n_turn = @disable_steal ? 1 : 2
|
25
37
|
end
|
26
38
|
|
39
|
+
attr_reader :turns
|
40
|
+
|
27
41
|
def enq_impl(t)
|
28
42
|
hints = t && t.suggest_location
|
29
43
|
Log.debug "enq #{t.name} hints=#{hints.inspect}"
|
44
|
+
@q_all.push(t)
|
30
45
|
if hints.nil? || hints.empty?
|
31
46
|
@q_remote.push(t)
|
32
47
|
else
|
@@ -47,9 +62,7 @@ module Pwrake
|
|
47
62
|
end
|
48
63
|
end
|
49
64
|
end
|
50
|
-
|
51
|
-
@size_q += 1
|
52
|
-
else
|
65
|
+
unless q_success
|
53
66
|
@q_remote.push(t)
|
54
67
|
end
|
55
68
|
end
|
@@ -58,88 +71,71 @@ module Pwrake
|
|
58
71
|
|
59
72
|
def turn_empty?(turn)
|
60
73
|
case turn
|
61
|
-
when 0
|
74
|
+
when 0,2
|
62
75
|
empty?
|
63
|
-
when 1
|
64
|
-
@
|
76
|
+
when 1,3
|
77
|
+
@q_all.size == @q_remote.size
|
65
78
|
end
|
66
79
|
end
|
67
80
|
|
81
|
+
def deq_start
|
82
|
+
@rank = @disable_rank ? 0 : @q_all.find_rank(@median_core)
|
83
|
+
end
|
84
|
+
|
68
85
|
def deq_impl(host_info, turn)
|
69
|
-
host = host_info.name
|
70
86
|
case turn
|
71
87
|
when 0
|
72
|
-
|
73
|
-
|
74
|
-
return t
|
75
|
-
elsif t = deq_locate(host_info,host_info)
|
76
|
-
Log.debug "deq_locate task=#{t&&t.name} host=#{host}"
|
77
|
-
return t
|
78
|
-
elsif t = @q_remote.shift(host_info)
|
79
|
-
Log.debug "deq_remote task=#{t&&t.name}"
|
80
|
-
return t
|
81
|
-
else
|
82
|
-
nil
|
83
|
-
end
|
88
|
+
deq_local(host_info) ||
|
89
|
+
deq_remote(host_info)
|
84
90
|
when 1
|
85
|
-
|
86
|
-
Log.debug "deq_steal task=#{t&&t.name} host=#{host}"
|
87
|
-
return t
|
88
|
-
else
|
89
|
-
nil
|
90
|
-
end
|
91
|
+
deq_steal(host_info)
|
91
92
|
end
|
92
93
|
end
|
93
94
|
|
94
|
-
def
|
95
|
-
q = @q[
|
95
|
+
def deq_local(run_host)
|
96
|
+
q = @q[run_host.id]
|
96
97
|
if q && !q.empty?
|
97
|
-
t = q.shift(run_host)
|
98
|
+
t = q.shift(run_host,@rank)
|
98
99
|
if t
|
99
|
-
t
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
end
|
104
|
-
@size_q -= 1
|
100
|
+
q_delete_assigned_to(t)
|
101
|
+
@q_all.delete(t)
|
102
|
+
Log.debug "deq_local task=#{t&&t.name} host=#{run_host.name} req_rank=#{@rank}"
|
103
|
+
return t
|
105
104
|
end
|
105
|
+
end
|
106
|
+
nil
|
107
|
+
end
|
108
|
+
|
109
|
+
def deq_remote(host_info)
|
110
|
+
if t = @q_remote.shift(host_info,@rank)
|
111
|
+
@q_all.delete(t)
|
112
|
+
Log.debug "deq_remote task=#{t&&t.name} host=#{host_info.name} req_rank=#{@rank}"
|
106
113
|
return t
|
107
|
-
else
|
108
|
-
nil
|
109
114
|
end
|
115
|
+
nil
|
110
116
|
end
|
111
117
|
|
112
|
-
def deq_steal(
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
if !a.empty? # && h!=host_info.id
|
119
|
-
d = a.size
|
120
|
-
if d > max_num
|
121
|
-
max_host = h
|
122
|
-
max_num = d
|
123
|
-
end
|
124
|
-
end
|
125
|
-
end
|
126
|
-
if max_num > 0
|
127
|
-
max_info = @hostinfo_by_id[max_host]
|
128
|
-
#Log.debug "deq_steal max_host=#{max_info.name} max_num=#{max_num}"
|
129
|
-
t = host_info.steal_phase{|h| deq_locate(max_info,h)}
|
130
|
-
#Log.debug "deq_steal task=#{t.inspect}"
|
131
|
-
if t
|
132
|
-
Log.debug "deq_steal max_host=#{max_info.name} max_num=#{max_num}"
|
133
|
-
return t
|
134
|
-
end
|
135
|
-
end
|
118
|
+
def deq_steal(run_host)
|
119
|
+
if t = @q_all.shift(run_host,@rank)
|
120
|
+
q_delete_assigned_to(t)
|
121
|
+
@q_remote.delete(t)
|
122
|
+
Log.debug "deq_steal task=#{t&&t.name} host=#{run_host.name} req_rank=#{@rank}"
|
123
|
+
return t
|
136
124
|
end
|
137
125
|
nil
|
138
126
|
end
|
139
127
|
|
128
|
+
def q_delete_assigned_to(t)
|
129
|
+
t.assigned.each do |h|
|
130
|
+
if q_h = @q[h]
|
131
|
+
q_h.delete(t)
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
140
136
|
def inspect_q
|
141
|
-
s =
|
142
|
-
if @
|
137
|
+
s = ""
|
138
|
+
if @q_all.size == @q_remote.size
|
143
139
|
n = @q.size
|
144
140
|
else
|
145
141
|
n = 0
|
@@ -147,35 +143,33 @@ module Pwrake
|
|
147
143
|
if q.size > 0
|
148
144
|
hinfo = @hostinfo_by_id[h]
|
149
145
|
if hinfo
|
150
|
-
s << _qstr(hinfo.name,q)
|
146
|
+
s << TaskQueue._qstr(hinfo.name,q)
|
151
147
|
else
|
152
|
-
s << _qstr("(#{hinfo.inspect})",q)
|
148
|
+
s << TaskQueue._qstr("(#{hinfo.inspect})",q)
|
153
149
|
end
|
154
150
|
else
|
155
151
|
n += 1
|
156
152
|
end
|
157
153
|
end
|
158
154
|
end
|
159
|
-
s << _qstr("local*#{n}",[]) if n > 0
|
160
|
-
s << _qstr("remote",@q_remote)
|
161
|
-
s << _qstr("
|
162
|
-
s << "@size_q=#{@size_q}"
|
155
|
+
s << TaskQueue._qstr("local*#{n}",[]) if n > 0
|
156
|
+
s << TaskQueue._qstr("remote",@q_remote)
|
157
|
+
s << TaskQueue._qstr("all",@q_all)
|
163
158
|
s
|
164
159
|
end
|
165
160
|
|
161
|
+
def size
|
162
|
+
@q_all.size
|
163
|
+
end
|
164
|
+
|
166
165
|
def clear
|
167
|
-
@q_no_action.clear
|
168
|
-
@q_reserved.clear
|
169
166
|
@q.each{|h,q| q.clear}
|
170
|
-
@size_q = 0
|
171
167
|
@q_remote.clear
|
168
|
+
@q_all.clear
|
172
169
|
end
|
173
170
|
|
174
171
|
def empty?
|
175
|
-
@
|
176
|
-
@q_no_action.empty? &&
|
177
|
-
@q_reserved.empty? &&
|
178
|
-
@q_remote.empty?
|
172
|
+
@q_all.empty?
|
179
173
|
end
|
180
174
|
|
181
175
|
def drop_host(host_info)
|
@@ -183,7 +177,7 @@ module Pwrake
|
|
183
177
|
if q_drop = @q.delete(hid)
|
184
178
|
n_move = 0
|
185
179
|
q_size = q_drop.size
|
186
|
-
while t = q_drop.shift
|
180
|
+
while t = q_drop.shift(host_info,@rank)
|
187
181
|
assigned_other = false
|
188
182
|
t.assigned.each do |h|
|
189
183
|
if h != hid && @q[h]
|
@@ -192,7 +186,6 @@ module Pwrake
|
|
192
186
|
end
|
193
187
|
end
|
194
188
|
if !assigned_other
|
195
|
-
@size_q -= 1
|
196
189
|
@q_remote.push(t)
|
197
190
|
n_move += 1
|
198
191
|
end
|