mampf
mampf copied to clipboard
Deletion of questions is broken
It appears that deletion of questions is broken. In production we just saw an exception with the following stacktrace after a destroy action for a question was attempted:
/usr/local/bundle/gems/activesupport-7.1.3.2/lib/active_support/core_ext/hash/reverse_merge.rb:21:in `replace'
/usr/local/bundle/gems/activesupport-7.1.3.2/lib/active_support/core_ext/hash/reverse_merge.rb:21:in `reverse_merge!'
/usr/local/bundle/gems/activemodel-7.1.3.2/lib/active_model/attribute_set.rb:103:in `reverse_merge!'
/usr/local/bundle/gems/activerecord-7.1.3.2/lib/active_record/persistence.rb:818:in `block in becomes'
/usr/local/bundle/gems/activerecord-7.1.3.2/lib/active_record/core.rb:455:in `initialize'
/usr/local/bundle/gems/activerecord-7.1.3.2/lib/active_record/persistence.rb:817:in `becomes'
/usr/src/app/app/models/medium.rb:1248:in `delete_answers'
/usr/local/bundle/gems/activesupport-7.1.3.2/lib/active_support/callbacks.rb:403:in `block in make_lambda'
/usr/local/bundle/gems/activesupport-7.1.3.2/lib/active_support/callbacks.rb:239:in `block in halting_and_conditional'
/usr/local/bundle/gems/activesupport-7.1.3.2/lib/active_support/callbacks.rb:602:in `block in invoke_after'
/usr/local/bundle/gems/activesupport-7.1.3.2/lib/active_support/callbacks.rb:602:in `each'
/usr/local/bundle/gems/activesupport-7.1.3.2/lib/active_support/callbacks.rb:602:in `invoke_after'
/usr/local/bundle/gems/activesupport-7.1.3.2/lib/active_support/callbacks.rb:111:in `run_callbacks'
/usr/local/bundle/gems/activesupport-7.1.3.2/lib/active_support/callbacks.rb:952:in `_run_destroy_callbacks'
/usr/local/bundle/gems/activerecord-7.1.3.2/lib/active_record/callbacks.rb:423:in `destroy'
/usr/local/bundle/gems/activerecord-7.1.3.2/lib/active_record/transactions.rb:305:in `block in destroy'
/usr/local/bundle/gems/activerecord-7.1.3.2/lib/active_record/transactions.rb:365:in `block in with_transaction_returning_status'
/usr/local/bundle/gems/activerecord-7.1.3.2/lib/active_record/connection_adapters/abstract/transaction.rb:535:in `block in within_new_transaction'
/usr/local/bundle/gems/activesupport-7.1.3.2/lib/active_support/concurrency/null_lock.rb:9:in `synchronize'
/usr/local/bundle/gems/activerecord-7.1.3.2/lib/active_record/connection_adapters/abstract/transaction.rb:532:in `within_new_transaction'
/usr/local/bundle/gems/activerecord-7.1.3.2/lib/active_record/connection_adapters/abstract/database_statements.rb:344:in `transaction'
/usr/local/bundle/gems/activerecord-7.1.3.2/lib/active_record/transactions.rb:361:in `with_transaction_returning_status'
/usr/local/bundle/gems/activerecord-7.1.3.2/lib/active_record/transactions.rb:305:in `destroy'
/usr/src/app/app/controllers/media_controller.rb:191:in `destroy'
/usr/local/bundle/gems/actionpack-7.1.3.2/lib/action_controller/metal/basic_implicit_render.rb:6:in `send_action'
/usr/local/bundle/gems/actionpack-7.1.3.2/lib/abstract_controller/base.rb:224:in `process_action'
/usr/local/bundle/gems/actionpack-7.1.3.2/lib/action_controller/metal/rendering.rb:165:in `process_action'
/usr/local/bundle/gems/actionpack-7.1.3.2/lib/abstract_controller/callbacks.rb:259:in `block in process_action'
/usr/local/bundle/gems/activesupport-7.1.3.2/lib/active_support/callbacks.rb:121:in `block in run_callbacks'
/usr/local/bundle/gems/actiontext-7.1.3.2/lib/action_text/rendering.rb:23:in `with_renderer'
/usr/local/bundle/gems/actiontext-7.1.3.2/lib/action_text/engine.rb:69:in `block (4 levels) in <class:Engine>'
/usr/local/bundle/gems/activesupport-7.1.3.2/lib/active_support/callbacks.rb:130:in `instance_exec'
/usr/local/bundle/gems/activesupport-7.1.3.2/lib/active_support/callbacks.rb:130:in `block in run_callbacks'
/usr/local/bundle/gems/activesupport-7.1.3.2/lib/active_support/callbacks.rb:141:in `run_callbacks'
/usr/local/bundle/gems/actionpack-7.1.3.2/lib/abstract_controller/callbacks.rb:258:in `process_action'
/usr/local/bundle/gems/actionpack-7.1.3.2/lib/action_controller/metal/rescue.rb:25:in `process_action'
/usr/local/bundle/gems/actionpack-7.1.3.2/lib/action_controller/metal/instrumentation.rb:74:in `block in process_action'
/usr/local/bundle/gems/activesupport-7.1.3.2/lib/active_support/notifications.rb:206:in `block in instrument'
/usr/local/bundle/gems/activesupport-7.1.3.2/lib/active_support/notifications/instrumenter.rb:58:in `instrument'
/usr/local/bundle/gems/activesupport-7.1.3.2/lib/active_support/notifications.rb:206:in `instrument'
/usr/local/bundle/gems/actionpack-7.1.3.2/lib/action_controller/metal/instrumentation.rb:73:in `process_action'
/usr/local/bundle/gems/actionpack-7.1.3.2/lib/action_controller/metal/params_wrapper.rb:261:in `process_action'
/usr/local/bundle/gems/activerecord-7.1.3.2/lib/active_record/railties/controller_runtime.rb:32:in `process_action'
/usr/local/bundle/gems/actionpack-7.1.3.2/lib/abstract_controller/base.rb:160:in `process'
/usr/local/bundle/gems/actionview-7.1.3.2/lib/action_view/rendering.rb:40:in `process'
/usr/local/bundle/gems/actionpack-7.1.3.2/lib/action_controller/metal.rb:227:in `dispatch'
/usr/local/bundle/gems/actionpack-7.1.3.2/lib/action_controller/metal.rb:309:in `dispatch'
/usr/local/bundle/gems/actionpack-7.1.3.2/lib/action_dispatch/routing/route_set.rb:49:in `dispatch'
/usr/local/bundle/gems/actionpack-7.1.3.2/lib/action_dispatch/routing/route_set.rb:32:in `serve'
/usr/local/bundle/gems/actionpack-7.1.3.2/lib/action_dispatch/journey/router.rb:51:in `block in serve'
/usr/local/bundle/gems/actionpack-7.1.3.2/lib/action_dispatch/journey/router.rb:131:in `block in find_routes'
/usr/local/bundle/gems/actionpack-7.1.3.2/lib/action_dispatch/journey/router.rb:124:in `each'
/usr/local/bundle/gems/actionpack-7.1.3.2/lib/action_dispatch/journey/router.rb:124:in `find_routes'
/usr/local/bundle/gems/actionpack-7.1.3.2/lib/action_dispatch/journey/router.rb:32:in `serve'
/usr/local/bundle/gems/actionpack-7.1.3.2/lib/action_dispatch/routing/route_set.rb:882:in `call'
/usr/local/bundle/gems/warden-1.2.9/lib/warden/manager.rb:36:in `block in call'
/usr/local/bundle/gems/warden-1.2.9/lib/warden/manager.rb:34:in `catch'
/usr/local/bundle/gems/warden-1.2.9/lib/warden/manager.rb:34:in `call'
/usr/local/bundle/gems/rack-2.2.9/lib/rack/tempfile_reaper.rb:15:in `call'
/usr/local/bundle/gems/rack-2.2.9/lib/rack/etag.rb:27:in `call'
/usr/local/bundle/gems/rack-2.2.9/lib/rack/conditional_get.rb:40:in `call'
/usr/local/bundle/gems/rack-2.2.9/lib/rack/head.rb:12:in `call'
/usr/local/bundle/gems/actionpack-7.1.3.2/lib/action_dispatch/http/permissions_policy.rb:36:in `call'
/usr/local/bundle/gems/actionpack-7.1.3.2/lib/action_dispatch/http/content_security_policy.rb:33:in `call'
/usr/local/bundle/gems/rack-2.2.9/lib/rack/session/abstract/id.rb:266:in `context'
/usr/local/bundle/gems/rack-2.2.9/lib/rack/session/abstract/id.rb:260:in `call'
/usr/local/bundle/gems/actionpack-7.1.3.2/lib/action_dispatch/middleware/cookies.rb:689:in `call'
/usr/local/bundle/gems/actionpack-7.1.3.2/lib/action_dispatch/middleware/callbacks.rb:29:in `block in call'
/usr/local/bundle/gems/activesupport-7.1.3.2/lib/active_support/callbacks.rb:101:in `run_callbacks'
/usr/local/bundle/gems/actionpack-7.1.3.2/lib/action_dispatch/middleware/callbacks.rb:28:in `call'
/usr/local/bundle/gems/actionpack-7.1.3.2/lib/action_dispatch/middleware/debug_exceptions.rb:29:in `call'
/usr/local/bundle/gems/actionpack-7.1.3.2/lib/action_dispatch/middleware/show_exceptions.rb:31:in `call'
/usr/local/bundle/gems/railties-7.1.3.2/lib/rails/rack/logger.rb:37:in `call_app'
/usr/local/bundle/gems/railties-7.1.3.2/lib/rails/rack/logger.rb:24:in `block in call'
/usr/local/bundle/gems/activesupport-7.1.3.2/lib/active_support/tagged_logging.rb:135:in `block in tagged'
/usr/local/bundle/gems/activesupport-7.1.3.2/lib/active_support/tagged_logging.rb:39:in `tagged'
/usr/local/bundle/gems/activesupport-7.1.3.2/lib/active_support/tagged_logging.rb:135:in `tagged'
/usr/local/bundle/gems/activesupport-7.1.3.2/lib/active_support/broadcast_logger.rb:240:in `method_missing'
/usr/local/bundle/gems/railties-7.1.3.2/lib/rails/rack/logger.rb:24:in `call'
/usr/local/bundle/gems/actionpack-7.1.3.2/lib/action_dispatch/middleware/remote_ip.rb:92:in `call'
/usr/local/bundle/gems/request_store-1.6.0/lib/request_store/middleware.rb:19:in `call'
/usr/local/bundle/gems/actionpack-7.1.3.2/lib/action_dispatch/middleware/request_id.rb:28:in `call'
/usr/local/bundle/gems/rack-2.2.9/lib/rack/method_override.rb:24:in `call'
/usr/local/bundle/gems/rack-2.2.9/lib/rack/runtime.rb:22:in `call'
/usr/local/bundle/gems/activesupport-7.1.3.2/lib/active_support/cache/strategy/local_cache_middleware.rb:29:in `call'
/usr/local/bundle/gems/actionpack-7.1.3.2/lib/action_dispatch/middleware/executor.rb:14:in `call'
/usr/local/bundle/gems/actionpack-7.1.3.2/lib/action_dispatch/middleware/static.rb:25:in `call'
/usr/local/bundle/gems/rack-2.2.9/lib/rack/sendfile.rb:110:in `call'
/usr/local/bundle/gems/prometheus_exporter-2.1.0/lib/prometheus_exporter/middleware.rb:41:in `call'
/usr/local/bundle/gems/railties-7.1.3.2/lib/rails/engine.rb:536:in `call'
/usr/local/bundle/gems/puma-6.4.2/lib/puma/configuration.rb:272:in `call'
/usr/local/bundle/gems/puma-6.4.2/lib/puma/request.rb:100:in `block in handle_request'
/usr/local/bundle/gems/puma-6.4.2/lib/puma/thread_pool.rb:378:in `with_force_shutdown'
/usr/local/bundle/gems/puma-6.4.2/lib/puma/request.rb:99:in `handle_request'
/usr/local/bundle/gems/puma-6.4.2/lib/puma/server.rb:464:in `process_client'
/usr/local/bundle/gems/puma-6.4.2/lib/puma/server.rb:245:in `block in run'
/usr/local/bundle/gems/puma-6.4.2/lib/puma/thread_pool.rb:155:in `block in spawn_thread'
The problem seems to be caused by the after_destroy
action in medium.rb:
after_destroy :delete_answers
which (a) seems unnecessary given that we have
has_many :answers, dependent: :delete_all
in question.rb and (b) even if we wanted to trigger this ourselves, should be a before_destroy :delete_answers
.