module RRRSpec::Server::Persister
Constants
- PERSISTED_RESIDUE_SEC
- SLAVE_EXIT_WAIT_TIME
Public Instance Methods
persist(taskset)
click to toggle source
# File lib/rrrspec/server/persister.rb, line 41 def persist(taskset) taskset_finished_at = taskset.finished_at return if taskset_finished_at.blank? RRRSpec.logger.debug("Persisting taskset #{taskset.key}") start = Time.now p_taskset = ActiveRecord::Base.transaction do h = taskset.to_h h.delete('tasks') h.delete('slaves') h.delete('worker_logs') Persistence::Taskset.create(h) end ActiveRecord::Base.transaction do p_slaves = taskset.slaves.map do |slave| h = slave.to_h h.delete('trials') p_slave = Persistence::Slave.new(h) p_slave.taskset_id = p_taskset.id p_slave end Persistence::Slave.import(p_slaves) p_slaves.each { |p_slave| p_slave.run_callbacks(:save) {} } end ActiveRecord::Base.transaction do p_tasks = taskset.tasks.map do |task| h = task.to_h h.delete('taskset') h.delete('trials') p_task = Persistence::Task.new(h) p_task.taskset_id = p_taskset.id p_task end Persistence::Task.import(p_tasks) p_tasks.each { |p_task| p_task.run_callbacks(:save) {} } end p_slaves = {} p_taskset.slaves.each do |p_slave| p_slaves[p_slave.key] = p_slave end ActiveRecord::Base.transaction do p_trials = [] p_taskset.tasks.each do |p_task| Task.new(p_task.key).trials.each do |trial| h = trial.to_h next if h['finished_at'].blank? || h['finished_at'] > taskset_finished_at slave_key = h.delete('slave')['key'] h.delete('task') p_trial = Persistence::Trial.new(h) p_trial.task_id = p_task.id p_trial.slave_id = p_slaves[slave_key].id p_trials << p_trial end end Persistence::Trial.import(p_trials) p_trials.each { |p_trial| p_trial.run_callbacks(:save) {} } end ActiveRecord::Base.transaction do p_worker_logs = taskset.worker_logs.map do |worker_log| h = worker_log.to_h h['worker_key'] = h['worker']['key'] h.delete('worker') h.delete('taskset') p_worker_log = Persistence::WorkerLog.new(h) p_worker_log.taskset_id = p_taskset.id p_worker_log end Persistence::WorkerLog.import(p_worker_logs) p_worker_logs.each { |p_worker_log| p_worker_log.run_callbacks(:save) {} } end RRRSpec.logger.info("Taskset #{taskset.key} persisted (#{Time.now - start} seconds taken)") end
work()
click to toggle source
# File lib/rrrspec/server/persister.rb, line 20 def work taskset = PersisterQueue.dequeue ActiveRecord::Base.connection_pool.with_connection do return if Persistence::Taskset.where(key: taskset.key).exists? end sleep SLAVE_EXIT_WAIT_TIME ActiveRecord::Base.connection_pool.with_connection do persist(taskset) taskset.expire(PERSISTED_RESIDUE_SEC) end StatisticsUpdaterQueue.enqueue(taskset) rescue RRRSpec.logger.error($!) end
work_loop()
click to toggle source
# File lib/rrrspec/server/persister.rb, line 16 def work_loop loop { work } end