Project

General

Profile

Actions

Bug #25072

closed

Cant modify hosts with foreman_chef plugin installed.

Added by Björn Zettergren about 6 years ago. Updated over 5 years ago.

Status:
Closed
Priority:
Normal
Assignee:
Category:
-
Target version:
-
Difficulty:
Triaged:
No
Fixed in Releases:
Found in Releases:

Description

When i have foreman_chef plugin installed, i can't edit hosts.
This error gets displayed right after that foreman_chef does a select from database, and then the whole transaction is rolled back:


Current location set to none
   (0.3ms)  BEGIN
  User Load (0.5ms)  SELECT  `users`.* FROM `users` WHERE `users`.`id` = 4 ORDER BY firstname LIMIT 1
  Nic::Base Load (1.2ms)  SELECT `nics`.* FROM `nics` WHERE `nics`.`host_id` = 1 ORDER BY `nics`.`identifier` ASC
  Setting Load (0.4ms)  SELECT  `settings`.* FROM `settings` WHERE `settings`.`name` = 'append_domain_name_for_hosts' ORDER BY `settings`.`name` ASC LIMIT 1
  ForemanChef::CachedRunList Load (0.5ms)  SELECT  `foreman_chef_cached_run_lists`.* FROM `foreman_chef_cached_run_lists` WHERE `foreman_chef_cached_run_lists`.`host_id` = 1 LIMIT 1
   (0.3ms)  ROLLBACK
Current location set to none
Current organization set to none
Action failed
 | RuntimeError: Executing dynflow action inside a transaction is not a good idea
 | /usr/share/foreman/vendor/ruby/2.3.0/gems/foreman-tasks-0.13.2/app/models/foreman_tasks/concerns/action_triggering.rb:139:in `ensure_not_in_transaction!'
 | /usr/share/foreman/vendor/ruby/2.3.0/gems/foreman-tasks-0.13.2/app/models/foreman_tasks/concerns/action_triggering.rb:120:in `dynflow_task_wrap'
 | /usr/share/foreman/vendor/ruby/2.3.0/gems/foreman-tasks-0.13.2/app/models/foreman_tasks/concerns/action_triggering.rb:27:in `save'

So, something is not able to handle the result from the query against foreman_chef_cached_run_lists, but i can't figure out what. If i uninstall foreman_chef, the editing works fine.

I've seen similar reports regarding this for older version of foreman_chef also:
https://projects.theforeman.org/issues/19486
https://community.theforeman.org/t/executing-dynflow-action-inside-a-transaction-is-not-a-good-idea/6599

I have a test-setup ready, can test/try anything if I get some pointers :-)

Actions #1

Updated by Björn Zettergren about 6 years ago

Might add, that the sql query works and returns a row:

mysql> SELECT  `foreman_chef_cached_run_lists`.* FROM `foreman_chef_cached_run_lists` WHERE `foreman_chef_cached_run_lists`.`host_id` = 1 LIMIT 1 \G
*************************** 1. row ***************************
     id: 3
   list: ---
- role[default]

host_id: 1
1 row in set (0.00 sec)
Actions #2

Updated by Björn Zettergren about 6 years ago

Whole trace:

2018-09-30T18:48:18 [I|app|] Started PATCH "/hosts/1" for 10.0.2.2 at 2018-09-30 18:48:18 +0000
2018-09-30T18:48:18 [I|app|187d4] Processing by HostsController#update as */*
2018-09-30T18:48:18 [I|app|187d4]   Parameters: {"utf8"=>"✓", "authenticity_token"=>"7Zh1km6kJrvjT/TNqGThwHp/FIlDGScTTgtPatOiv5T/WGEro5uBOr0faNB+ruKJmFnoff9Cx4ZMzmIfmsPUuw==", "host"=>{"run_list"=>{"0"=>{"type"=>"role", "name"=>"default"}}, "override_chef_attributes"=>"true", "name"=>"test02", "hostgroup_id"=>"", "environment_id"=>"", "managed"=>"true", "progress_report_id"=>"[FILTERED]", "interfaces_attributes"=>{"0"=>{"_destroy"=>"0", "mac"=>"02:fb:a8:4c:29:d0", "identifier"=>"enp0s3", "name"=>"", "domain_id"=>"", "subnet_id"=>"", "ip"=>"10.0.2.15", "ip6"=>"", "managed"=>"0", "primary"=>"0", "provision"=>"0", "tag"=>"", "attached_to"=>"", "id"=>"2"}, "1"=>{"_destroy"=>"0", "mac"=>"00:11:22:33:44:55", "identifier"=>"eth0", "name"=>"test02", "domain_id"=>"1", "subnet_id"=>"1", "ip"=>"10.0.0.123", "ip6"=>"", "managed"=>"1", "primary"=>"1", "provision"=>"1", "tag"=>"", "attached_to"=>"", "id"=>"1"}}, "architecture_id"=>"1", "operatingsystem_id"=>"2", "medium_id"=>"", "ptable_id"=>"", "pxe_loader"=>"Grub UEFI", "disk"=>"", "is_owned_by"=>"4-Users", "enabled"=>"1", "model_id"=>"1", "comment"=>"", "overwrite"=>"false"}, "id"=>"1"}
2018-09-30T18:48:18 [D|sql|187d4]   User Load (2.8ms)  SELECT  `users`.* FROM `users` WHERE `users`.`id` = 4 LIMIT 1
2018-09-30T18:48:18 [D|sql|187d4]   AuthSource Load (0.9ms)  SELECT  `auth_sources`.* FROM `auth_sources` WHERE `auth_sources`.`id` = 1 LIMIT 1
2018-09-30T18:48:18 [I|app|187d4] Current user set to admin (admin)
2018-09-30T18:48:18 [D|app|187d4] Current location set to none
2018-09-30T18:48:18 [D|app|187d4] Current organization set to none
2018-09-30T18:48:18 [D|sql|187d4]    (0.6ms)  SELECT  `taxonomies`.`id` FROM `taxonomies` WHERE `taxonomies`.`type` IN ('Location') LIMIT 1
2018-09-30T18:48:18 [D|sql|187d4]    (0.4ms)  SELECT  `taxonomies`.`id` FROM `taxonomies` WHERE `taxonomies`.`type` IN ('Organization') LIMIT 1
2018-09-30T18:48:18 [D|sql|187d4]   Host::Managed Load (1.6ms)  SELECT  `hosts`.* FROM `hosts` WHERE `hosts`.`type` IN ('Host::Managed') AND `hosts`.`name` = '1' LIMIT 1
2018-09-30T18:48:18 [D|sql|187d4]   Host::Managed Load (1.9ms)  SELECT  `hosts`.* FROM `hosts` WHERE `hosts`.`type` IN ('Host::Managed') AND `hosts`.`id` = 1 LIMIT 1
2018-09-30T18:48:18 [D|app|187d4] Current organization set to none
2018-09-30T18:48:18 [D|app|187d4] Current location set to none
2018-09-30T18:48:18 [D|sql|187d4]    (0.9ms)  BEGIN
2018-09-30T18:48:18 [D|sql|187d4]   User Load (0.6ms)  SELECT  `users`.* FROM `users` WHERE `users`.`id` = 4 ORDER BY firstname LIMIT 1
2018-09-30T18:48:18 [D|sql|187d4]   Nic::Base Load (1.3ms)  SELECT `nics`.* FROM `nics` WHERE `nics`.`host_id` = 1 ORDER BY `nics`.`identifier` ASC
2018-09-30T18:48:18 [D|sql|187d4]   Setting Load (0.5ms)  SELECT  `settings`.* FROM `settings` WHERE `settings`.`name` = 'append_domain_name_for_hosts' ORDER BY `settings`.`name` ASC LIMIT 1
2018-09-30T18:48:18 [D|sql|187d4]   ForemanChef::CachedRunList Load (0.9ms)  SELECT  `foreman_chef_cached_run_lists`.* FROM `foreman_chef_cached_run_lists` WHERE `foreman_chef_cached_run_lists`.`host_id` = 1 LIMIT 1
2018-09-30T18:48:18 [D|sql|187d4]    (2.3ms)  ROLLBACK
2018-09-30T18:48:18 [D|app|187d4] Current location set to none
2018-09-30T18:48:18 [D|app|187d4] Current organization set to none
2018-09-30T18:48:18 [W|app|187d4] Action failed
 | RuntimeError: Executing dynflow action inside a transaction is not a good idea
 | /usr/share/foreman/vendor/ruby/2.3.0/gems/foreman-tasks-0.13.2/app/models/foreman_tasks/concerns/action_triggering.rb:139:in `ensure_not_in_transaction!'
 | /usr/share/foreman/vendor/ruby/2.3.0/gems/foreman-tasks-0.13.2/app/models/foreman_tasks/concerns/action_triggering.rb:120:in `dynflow_task_wrap'
 | /usr/share/foreman/vendor/ruby/2.3.0/gems/foreman-tasks-0.13.2/app/models/foreman_tasks/concerns/action_triggering.rb:27:in `save'
 | /usr/share/foreman/vendor/ruby/2.3.0/gems/activerecord-5.1.6/lib/active_record/persistence.rb:281:in `block in update'
 | /usr/share/foreman/vendor/ruby/2.3.0/gems/activerecord-5.1.6/lib/active_record/transactions.rb:384:in `block in with_transaction_returning_status'
 | /usr/share/foreman/vendor/ruby/2.3.0/gems/activerecord-5.1.6/lib/active_record/connection_adapters/abstract/database_statements.rb:235:in `block in transaction'
 | /usr/share/foreman/vendor/ruby/2.3.0/gems/activerecord-5.1.6/lib/active_record/connection_adapters/abstract/transaction.rb:194:in `block in within_new_transaction'
 | /usr/lib/ruby/2.3.0/monitor.rb:214:in `mon_synchronize'
 | /usr/share/foreman/vendor/ruby/2.3.0/gems/activerecord-5.1.6/lib/active_record/connection_adapters/abstract/transaction.rb:191:in `within_new_transaction'
 | /usr/share/foreman/vendor/ruby/2.3.0/gems/activerecord-5.1.6/lib/active_record/connection_adapters/abstract/database_statements.rb:235:in `transaction'
 | /usr/share/foreman/vendor/ruby/2.3.0/gems/activerecord-5.1.6/lib/active_record/transactions.rb:210:in `transaction'
 | /usr/share/foreman/vendor/ruby/2.3.0/gems/activerecord-5.1.6/lib/active_record/transactions.rb:381:in `with_transaction_returning_status'
 | /usr/share/foreman/vendor/ruby/2.3.0/gems/activerecord-5.1.6/lib/active_record/persistence.rb:279:in `update'
 | /usr/share/foreman/app/controllers/hosts_controller.rb:122:in `block in update'
 | /usr/share/foreman/app/models/taxonomy.rb:68:in `block in no_taxonomy_scope'
 | /usr/share/foreman/app/models/taxonomy.rb:75:in `block (2 levels) in as_taxonomy'
 | /usr/share/foreman/app/models/concerns/foreman/thread_session.rb:179:in `as_location'
 | /usr/share/foreman/app/models/taxonomy.rb:74:in `block in as_taxonomy'
 | /usr/share/foreman/app/models/concerns/foreman/thread_session.rb:142:in `as_org'
 | /usr/share/foreman/app/models/taxonomy.rb:73:in `as_taxonomy'
 | /usr/share/foreman/app/models/taxonomy.rb:67:in `no_taxonomy_scope'
 | /usr/share/foreman/app/controllers/hosts_controller.rb:119:in `update'
 | /usr/share/foreman/vendor/ruby/2.3.0/gems/actionpack-5.1.6/lib/action_controller/metal/basic_implicit_render.rb:4:in `send_action'
 | /usr/share/foreman/vendor/ruby/2.3.0/gems/actionpack-5.1.6/lib/abstract_controller/base.rb:186:in `process_action'
 | /usr/share/foreman/vendor/ruby/2.3.0/gems/actionpack-5.1.6/lib/action_controller/metal/rendering.rb:30:in `process_action'
 | /usr/share/foreman/vendor/ruby/2.3.0/gems/actionpack-5.1.6/lib/abstract_controller/callbacks.rb:20:in `block in process_action'
 | /usr/share/foreman/vendor/ruby/2.3.0/gems/activesupport-5.1.6/lib/active_support/callbacks.rb:108:in `block in run_callbacks'
 | /usr/share/foreman/app/controllers/concerns/application_shared.rb:15:in `set_timezone'
 | /usr/share/foreman/vendor/ruby/2.3.0/gems/activesupport-5.1.6/lib/active_support/callbacks.rb:117:in `block in run_callbacks'
 | /usr/share/foreman/app/models/concerns/foreman/thread_session.rb:32:in `clear_thread'
 | /usr/share/foreman/vendor/ruby/2.3.0/gems/activesupport-5.1.6/lib/active_support/callbacks.rb:117:in `block in run_callbacks'
 | /usr/share/foreman/app/controllers/concerns/foreman/controller/topbar_sweeper.rb:12:in `set_topbar_sweeper_controller'
 | /usr/share/foreman/vendor/ruby/2.3.0/gems/activesupport-5.1.6/lib/active_support/callbacks.rb:117:in `block in run_callbacks'
 | /usr/share/foreman/vendor/ruby/2.3.0/gems/audited-4.8.0/lib/audited/sweeper.rb:14:in `around'
 | /usr/share/foreman/vendor/ruby/2.3.0/gems/activesupport-5.1.6/lib/active_support/callbacks.rb:117:in `block in run_callbacks'
 | /usr/share/foreman/vendor/ruby/2.3.0/gems/audited-4.8.0/lib/audited/sweeper.rb:14:in `around'
 | /usr/share/foreman/vendor/ruby/2.3.0/gems/activesupport-5.1.6/lib/active_support/callbacks.rb:117:in `block in run_callbacks'
 | /usr/share/foreman/vendor/ruby/2.3.0/gems/activesupport-5.1.6/lib/active_support/callbacks.rb:135:in `run_callbacks'
 | /usr/share/foreman/vendor/ruby/2.3.0/gems/actionpack-5.1.6/lib/abstract_controller/callbacks.rb:19:in `process_action'
 | /usr/share/foreman/vendor/ruby/2.3.0/gems/actionpack-5.1.6/lib/action_controller/metal/rescue.rb:20:in `process_action'
 | /usr/share/foreman/vendor/ruby/2.3.0/gems/actionpack-5.1.6/lib/action_controller/metal/instrumentation.rb:32:in `block in process_action'
 | /usr/share/foreman/vendor/ruby/2.3.0/gems/activesupport-5.1.6/lib/active_support/notifications.rb:166:in `block in instrument'
 | /usr/share/foreman/vendor/ruby/2.3.0/gems/activesupport-5.1.6/lib/active_support/notifications/instrumenter.rb:21:in `instrument'
 | /usr/share/foreman/vendor/ruby/2.3.0/gems/activesupport-5.1.6/lib/active_support/notifications.rb:166:in `instrument'
 | /usr/share/foreman/vendor/ruby/2.3.0/gems/actionpack-5.1.6/lib/action_controller/metal/instrumentation.rb:30:in `process_action'
 | /usr/share/foreman/vendor/ruby/2.3.0/gems/actionpack-5.1.6/lib/action_controller/metal/params_wrapper.rb:252:in `process_action'
 | /usr/share/foreman/vendor/ruby/2.3.0/gems/activerecord-5.1.6/lib/active_record/railties/controller_runtime.rb:22:in `process_action'
 | /usr/share/foreman/vendor/ruby/2.3.0/gems/actionpack-5.1.6/lib/abstract_controller/base.rb:124:in `process'
 | /usr/share/foreman/vendor/ruby/2.3.0/gems/actionview-5.1.6/lib/action_view/rendering.rb:30:in `process'
 | /usr/share/foreman/vendor/ruby/2.3.0/gems/actionpack-5.1.6/lib/action_controller/metal.rb:189:in `dispatch'
 | /usr/share/foreman/vendor/ruby/2.3.0/gems/actionpack-5.1.6/lib/action_controller/metal.rb:253:in `dispatch'
 | /usr/share/foreman/vendor/ruby/2.3.0/gems/actionpack-5.1.6/lib/action_dispatch/routing/route_set.rb:49:in `dispatch'
 | /usr/share/foreman/vendor/ruby/2.3.0/gems/actionpack-5.1.6/lib/action_dispatch/routing/route_set.rb:31:in `serve'
 | /usr/share/foreman/vendor/ruby/2.3.0/gems/actionpack-5.1.6/lib/action_dispatch/journey/router.rb:50:in `block in serve'
 | /usr/share/foreman/vendor/ruby/2.3.0/gems/actionpack-5.1.6/lib/action_dispatch/journey/router.rb:33:in `each'
 | /usr/share/foreman/vendor/ruby/2.3.0/gems/actionpack-5.1.6/lib/action_dispatch/journey/router.rb:33:in `serve'
 | /usr/share/foreman/vendor/ruby/2.3.0/gems/actionpack-5.1.6/lib/action_dispatch/routing/route_set.rb:844:in `call'
 | /usr/share/foreman/vendor/ruby/2.3.0/gems/apipie-rails-0.5.10/lib/apipie/static_dispatcher.rb:65:in `call'
 | /usr/share/foreman/vendor/ruby/2.3.0/gems/apipie-rails-0.5.10/lib/apipie/extractor/recorder.rb:136:in `call'
 | /usr/share/foreman/lib/middleware/telemetry.rb:9:in `call'
 | /usr/share/foreman/vendor/ruby/2.3.0/gems/apipie-rails-0.5.10/lib/apipie/middleware/checksum_in_headers.rb:27:in `call'
 | /usr/share/foreman/lib/middleware/catch_json_parse_errors.rb:8:in `call'
 | /usr/share/foreman/vendor/ruby/2.3.0/gems/rack-2.0.5/lib/rack/etag.rb:25:in `call'
 | /usr/share/foreman/vendor/ruby/2.3.0/gems/rack-2.0.5/lib/rack/conditional_get.rb:38:in `call'
 | /usr/share/foreman/vendor/ruby/2.3.0/gems/rack-2.0.5/lib/rack/head.rb:12:in `call'
 | /usr/share/foreman/lib/middleware/logging_context.rb:23:in `call'
 | /usr/share/foreman/vendor/ruby/2.3.0/gems/rack-2.0.5/lib/rack/session/abstract/id.rb:232:in `context'
 | /usr/share/foreman/vendor/ruby/2.3.0/gems/rack-2.0.5/lib/rack/session/abstract/id.rb:226:in `call'
 | /usr/share/foreman/vendor/ruby/2.3.0/gems/actionpack-5.1.6/lib/action_dispatch/middleware/cookies.rb:613:in `call'
 | /usr/share/foreman/vendor/ruby/2.3.0/gems/actionpack-5.1.6/lib/action_dispatch/middleware/callbacks.rb:26:in `block in call'
 | /usr/share/foreman/vendor/ruby/2.3.0/gems/activesupport-5.1.6/lib/active_support/callbacks.rb:97:in `run_callbacks'
 | /usr/share/foreman/vendor/ruby/2.3.0/gems/actionpack-5.1.6/lib/action_dispatch/middleware/callbacks.rb:24:in `call'
 | /usr/share/foreman/vendor/ruby/2.3.0/gems/actionpack-5.1.6/lib/action_dispatch/middleware/debug_exceptions.rb:59:in `call'
 | /usr/share/foreman/vendor/ruby/2.3.0/gems/actionpack-5.1.6/lib/action_dispatch/middleware/show_exceptions.rb:31:in `call'
 | /usr/share/foreman/vendor/ruby/2.3.0/gems/railties-5.1.6/lib/rails/rack/logger.rb:36:in `call_app'
 | /usr/share/foreman/vendor/ruby/2.3.0/gems/railties-5.1.6/lib/rails/rack/logger.rb:26:in `call'
 | /usr/share/foreman/vendor/ruby/2.3.0/gems/sprockets-rails-3.2.1/lib/sprockets/rails/quiet_assets.rb:13:in `call'
 | /usr/share/foreman/vendor/ruby/2.3.0/gems/actionpack-5.1.6/lib/action_dispatch/middleware/remote_ip.rb:79:in `call'
 | /usr/share/foreman/vendor/ruby/2.3.0/gems/actionpack-5.1.6/lib/action_dispatch/middleware/request_id.rb:25:in `call'
 | /usr/share/foreman/vendor/ruby/2.3.0/gems/rack-2.0.5/lib/rack/method_override.rb:22:in `call'
 | /usr/share/foreman/vendor/ruby/2.3.0/gems/rack-2.0.5/lib/rack/runtime.rb:22:in `call'
 | /usr/share/foreman/vendor/ruby/2.3.0/gems/activesupport-5.1.6/lib/active_support/cache/strategy/local_cache_middleware.rb:27:in `call'
 | /usr/share/foreman/vendor/ruby/2.3.0/gems/actionpack-5.1.6/lib/action_dispatch/middleware/executor.rb:12:in `call'
 | /usr/share/foreman/vendor/ruby/2.3.0/gems/actionpack-5.1.6/lib/action_dispatch/middleware/static.rb:125:in `call'
 | /usr/share/foreman/vendor/ruby/2.3.0/gems/rack-2.0.5/lib/rack/sendfile.rb:111:in `call'
 | /usr/share/foreman/vendor/ruby/2.3.0/gems/secure_headers-5.0.5/lib/secure_headers/middleware.rb:13:in `call'
 | /usr/share/foreman/vendor/ruby/2.3.0/gems/railties-5.1.6/lib/rails/engine.rb:522:in `call'
 | /usr/share/foreman/vendor/ruby/2.3.0/gems/railties-5.1.6/lib/rails/railtie.rb:185:in `public_send'
 | /usr/share/foreman/vendor/ruby/2.3.0/gems/railties-5.1.6/lib/rails/railtie.rb:185:in `method_missing'
 | /usr/share/foreman/vendor/ruby/2.3.0/gems/rack-2.0.5/lib/rack/urlmap.rb:68:in `block in call'
 | /usr/share/foreman/vendor/ruby/2.3.0/gems/rack-2.0.5/lib/rack/urlmap.rb:53:in `each'
 | /usr/share/foreman/vendor/ruby/2.3.0/gems/rack-2.0.5/lib/rack/urlmap.rb:53:in `call'
 | /usr/share/foreman/vendor/ruby/2.3.0/gems/rack-2.0.5/lib/rack/handler/webrick.rb:86:in `service'
 | /usr/lib/ruby/2.3.0/webrick/httpserver.rb:140:in `service'
 | /usr/lib/ruby/2.3.0/webrick/httpserver.rb:96:in `run'
 | /usr/lib/ruby/2.3.0/webrick/server.rb:296:in `block in start_thread'
 | /usr/share/foreman/vendor/ruby/2.3.0/gems/logging-2.2.2/lib/logging/diagnostic_context.rb:474:in `block in create_with_logging_context'
2018-09-30T18:48:18 [I|app|187d4]   Rendering common/500.html.erb
2018-09-30T18:48:18 [I|app|187d4]   Rendered common/500.html.erb (2.0ms)
2018-09-30T18:48:18 [I|app|187d4] Completed 500 Internal Server Error in 144ms (Views: 3.6ms | ActiveRecord: 14.6ms)
2018-09-30T18:48:18 [D|sql|]    (0.7ms)  BEGIN
2018-09-30T18:48:18 [D|sql|]   SQL (1.0ms)  UPDATE `sessions` SET `data` = 'BAh7DUkiFG9yZ2FuaXphdGlvbl9pZAY6BkVGSSIABjsAVEkiEGxvY2F0aW9u\nX2lkBjsARkkiAAY7AFRJIgl1c2VyBjsARmkJSSIPZXhwaXJlc19hdAY7AEZs\nKweCKLFbSSISbG9nZ2luZ190b2tlbgY7AFRJIilmNDJhZjk2ZC0zYjMzLTRl\nMzEtOGZmZC0wOWI0YTZjMWRiNzEGOwBGSSILbG9jYWxlBjsARiIHZW5JIhBf\nY3NyZl90b2tlbgY7AEZJIjFFc0FVdWMwL3A0RmVVSndkMXNvRFNlSW0vUFM4\nVytDVkFzVXRkVWxoYXk4PQY7AEZJIhpyZWRpcmVjdF90b191cmxfaG9zdHMG\nOwBUIj5odHRwOi8vbG9jYWxob3N0OjMwMDAvaG9zdHMvdGVzdDAxLnZhZ3Jh\nbnQuemV0dGVyZ3Jlbi5vcmc=\n', `updated_at` = '2018-09-30 18:48:18' WHERE `sessions`.`id` = 27
2018-09-30T18:48:18 [D|sql|]    (1.3ms)  COMMIT
Actions #3

Updated by The Foreman Bot about 6 years ago

  • Status changed from New to Ready For Testing
  • Assignee set to Marek Hulán
  • Pull request https://github.com/theforeman/foreman_chef/pull/89 added
Actions #4

Updated by Marek Hulán over 5 years ago

  • Status changed from Ready For Testing to Closed
Actions

Also available in: Atom PDF