summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSamuel Giddins <segiddins@segiddins.me>2016-01-30 17:42:25 -0600
committerSamuel Giddins <segiddins@segiddins.me>2016-01-30 18:15:39 -0600
commita6e2bbaa9c5ee97787b141748e656a4e5ff37aa3 (patch)
treea941c7cdf402821394512c9cb382cd87432ae5f9
parent9904cdb72fcb7a8bfc4d6b1632fe97d0a97d9d7a (diff)
downloadbundler-seg-thread-names.tar.gz
[Worker] Add a worker name to ease debuggingseg-thread-names
-rw-r--r--lib/bundler/fetcher/compact_index.rb3
-rw-r--r--lib/bundler/installer/parallel_installer.rb2
-rw-r--r--lib/bundler/worker.rb13
3 files changed, 14 insertions, 4 deletions
diff --git a/lib/bundler/fetcher/compact_index.rb b/lib/bundler/fetcher/compact_index.rb
index 97b2e71dce..0dd9b130be 100644
--- a/lib/bundler/fetcher/compact_index.rb
+++ b/lib/bundler/fetcher/compact_index.rb
@@ -80,7 +80,8 @@ module Bundler
end.tap do |client|
client.in_parallel = lambda do |inputs, &blk|
func = lambda {|object, _index| blk.call(object) }
- worker = Bundler::Worker.new(25, func)
+ worker_name = "Compact Index (#{display_uri.host})"
+ worker = Bundler::Worker.new(25, worker_name, func)
inputs.each {|input| worker.enq(input) }
inputs.map { worker.deq }
end
diff --git a/lib/bundler/installer/parallel_installer.rb b/lib/bundler/installer/parallel_installer.rb
index d32204fab3..674c45af25 100644
--- a/lib/bundler/installer/parallel_installer.rb
+++ b/lib/bundler/installer/parallel_installer.rb
@@ -84,7 +84,7 @@ class ParallelInstaller
end
def worker_pool
- @worker_pool ||= Bundler::Worker.new @size, lambda { |spec_install, worker_num|
+ @worker_pool ||= Bundler::Worker.new @size, "Parallel Installer", lambda { |spec_install, worker_num|
message = Bundler::GemInstaller.new(
spec_install.spec, @installer, @standalone, worker_num, @force
).install_from_spec
diff --git a/lib/bundler/worker.rb b/lib/bundler/worker.rb
index da7eac0b69..addd9cc8a1 100644
--- a/lib/bundler/worker.rb
+++ b/lib/bundler/worker.rb
@@ -11,15 +11,24 @@ module Bundler
end
end
+ # @return [String] the name of the worker
+ attr_reader :name
+
# Creates a worker pool of specified size
#
# @param size [Integer] Size of pool
+ # @param name [String] name the name of the worker
# @param func [Proc] job to run in inside the worker pool
- def initialize(size, func)
+ def initialize(size, name, func)
+ @name = name
@request_queue = Queue.new
@response_queue = Queue.new
@func = func
- @threads = size.times.map {|i| Thread.start { process_queue(i) } }
+ @threads = size.times.map do |i|
+ Thread.start { process_queue(i) }.tap do |thread|
+ thread.name = "#{name} Worker ##{i}" if thread.respond_to?(:name=)
+ end
+ end
trap("INT") { abort_threads }
end