X-Git-Url: https://git.donarmstrong.com/?p=dsa-puppet.git;a=blobdiff_plain;f=3rdparty%2Fmodules%2Faviator%2Flib%2Fpuppet%2Ffeature%2Ffaraday%2Fadapter%2Fem_synchrony%2Fparallel_manager.rb;fp=3rdparty%2Fmodules%2Faviator%2Flib%2Fpuppet%2Ffeature%2Ffaraday%2Fadapter%2Fem_synchrony%2Fparallel_manager.rb;h=12a1bafa4c7fb11d07e52659f2ee0bd674549bd3;hp=0000000000000000000000000000000000000000;hb=4631045ebb77ee8622f6fa09277a50c372bcc02e;hpb=3d4dc4fd9e59bd0e07646c99f6b356c7d9d859aa diff --git a/3rdparty/modules/aviator/lib/puppet/feature/faraday/adapter/em_synchrony/parallel_manager.rb b/3rdparty/modules/aviator/lib/puppet/feature/faraday/adapter/em_synchrony/parallel_manager.rb new file mode 100644 index 00000000..12a1bafa --- /dev/null +++ b/3rdparty/modules/aviator/lib/puppet/feature/faraday/adapter/em_synchrony/parallel_manager.rb @@ -0,0 +1,66 @@ +module Faraday + class Adapter + class EMSynchrony < Faraday::Adapter + class ParallelManager + + # Add requests to queue. The `request` argument should be a + # `EM::HttpRequest` object. + def add(request, method, *args, &block) + queue << { + :request => request, + :method => method, + :args => args, + :block => block + } + end + + # Run all requests on queue with `EM::Synchrony::Multi`, wrapping + # it in a reactor and fiber if needed. + def run + result = nil + if !EM.reactor_running? + EM.run { + Fiber.new do + result = perform + EM.stop + end.resume + } + else + result = perform + end + result + end + + + private + + # The request queue. + def queue + @queue ||= [] + end + + # Main `EM::Synchrony::Multi` performer. + def perform + multi = ::EM::Synchrony::Multi.new + + queue.each do |item| + method = "a#{item[:method]}".to_sym + + req = item[:request].send(method, *item[:args]) + req.callback(&item[:block]) + + req_name = "req_#{multi.requests.size}".to_sym + multi.add(req_name, req) + end + + # Clear the queue, so parallel manager objects can be reused. + @queue = [] + + # Block fiber until all requests have returned. + multi.perform + end + + end # ParallelManager + end # EMSynchrony + end # Adapter +end # Faraday