Open grahamb opened 6 years ago
Bumping this up as it's still happening for us.
@grahamb, one way to "fix" this is to add PG::UniqueViolation
to the list of things being rescued from here: https://github.com/instructure/canvas-lms/blob/stable/config/initializers/active_record.rb#L589.
I put "fix" in quotes because I still don't understand how this is happening, which always makes me a little nervous about just patching over things...
Just some clarification: examining the stack trace, the error is being thrown from https://github.com/instructure/canvas-lms/blob/stable/config/initializers/active_record.rb#L592 - AFTER it has already caught it once.
@simonista @ccutrer I assume you guys aren't seeing similar issues on your end?
Oh we are, but only from our own monitoring. It doesn't seem to be causing using facing problems, so has just been lower priority.
Gotcha. Same here, no apparent user-facing effects, just lights-up-my-alerts effects.
Bumping this up; we're still getting this daily.
👋 This started happening to us again. Error trace:
PG::UniqueViolation: ERROR: duplicate key value violates unique constraint "index_stream_items_on_asset_type_and_asset_id"
DETAIL: Key (asset_type, asset_id)=(Submission, 21849605) already exists.
: INSERT INTO "stream_items" ("data", "created_at", "updated_at", "context_type", "context_id", "asset_type", "asset_id") VALUES ('---
id: 21849605
url:
attachment_id:
grade: ''3''
score: 3.0
submitted_at:
assignment_id: [REDACTED]
user_id: [REDACTED]
submission_type:
workflow_state: graded
created_at: !ruby/object:ActiveSupport::TimeWithZone
utc: 2020-01-20 19:24:39.897462000 Z
zone: !ruby/object:ActiveSupport::TimeZone
name: Etc/UTC
time: 2020-01-20 19:24:39.897462000 Z
updated_at: !ruby/object:ActiveSupport::TimeWithZone
utc: 2020-01-20 19:25:45.845187000 Z
zone: !ruby/object:ActiveSupport::TimeZone
name: Etc/UTC
time: 2020-01-20 19:25:45.845187000 Z
group_id:
attachment_ids:
processed:
grade_matches_current_submission: true
published_score: 3.0
published_grade: ''3''
graded_at: !ruby/object:ActiveSupport::TimeWithZone
utc: 2020-01-20 19:25:45.812462000 Z
zone: !ruby/object:ActiveSupport::TimeZone
name: Etc/UTC
time: 2020-01-20 19:25:45.812462000 Z
student_entered_score:
grader_id: [REDACTED]
media_comment_id:
media_comment_type:
quiz_submission_id:
submission_comments_count:
attempt:
context_code: [REDACTED]
media_object_id:
turnitin_data: {}
cached_due_date:
excused: false
graded_anonymously: false
late_policy_status:
points_deducted:
grading_period_id:
seconds_late_override:
lti_user_id:
anonymous_id: ev7w9
last_comment_at:
extra_attempts:
posted_at:
cached_quiz_lti: false
assignment:
id: [REDACTED]
title: Clinic 1
due_at:
points_possible: 3.0
submission_types: none
group_category_id:
:course_id: [REDACTED]
context_short_name: MATH100 D100
type: Submission
user_short_name: [REDACTED]
', '2020-01-20 19:25:46.774948', '2020-01-20 19:25:46.774948', 'Course', 49528, 'Submission', 21849605) RETURNING "id" /*job_tag:Submission#generate_stream_items,hostname:canvas-mp2.f5lms.sfu.ca,pid:31944,context_id:267043156*/
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/activerecord-5.2.3/lib/active_record/connection_adapters/postgresql_adapter.rb:611:in `async_exec_params'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/activerecord-5.2.3/lib/active_record/connection_adapters/postgresql_adapter.rb:611:in `block (2 levels) in exec_no_cache'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/activesupport-5.2.3/lib/active_support/dependencies/interlock.rb:48:in `block in permit_concurrent_loads'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/activesupport-5.2.3/lib/active_support/concurrency/share_lock.rb:187:in `yield_shares'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/activesupport-5.2.3/lib/active_support/dependencies/interlock.rb:47:in `permit_concurrent_loads'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/activerecord-5.2.3/lib/active_record/connection_adapters/postgresql_adapter.rb:610:in `block in exec_no_cache'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/activerecord-5.2.3/lib/active_record/connection_adapters/abstract_adapter.rb:581:in `block (2 levels) in log'
/usr/local/lib/ruby/2.4.0/monitor.rb:214:in `mon_synchronize'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/activerecord-5.2.3/lib/active_record/connection_adapters/abstract_adapter.rb:580:in `block in log'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/activesupport-5.2.3/lib/active_support/notifications/instrumenter.rb:23:in `instrument'
/usr/local/lib/ruby/2.4.0/delegate.rb:83:in `method_missing'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/switchman-1.14.7/lib/switchman/sharded_instrumenter.rb:20:in `instrument'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/activerecord-5.2.3/lib/active_record/connection_adapters/abstract_adapter.rb:571:in `log'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/switchman-1.14.7/lib/switchman/active_record/abstract_adapter.rb:37:in `log'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/activerecord-5.2.3/lib/active_record/connection_adapters/postgresql_adapter.rb:609:in `exec_no_cache'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/activerecord-5.2.3/lib/active_record/connection_adapters/postgresql_adapter.rb:596:in `execute_and_clear'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/marginalia-1.8.0/lib/marginalia.rb:94:in `execute_and_clear_with_marginalia'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/activerecord-5.2.3/lib/active_record/connection_adapters/postgresql/database_statements.rb:81:in `exec_query'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/activerecord-5.2.3/lib/active_record/connection_adapters/abstract/database_statements.rb:130:in `exec_insert'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/activerecord-5.2.3/lib/active_record/connection_adapters/postgresql/database_statements.rb:115:in `exec_insert'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/activerecord-5.2.3/lib/active_record/connection_adapters/abstract/database_statements.rb:162:in `insert'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/activerecord-5.2.3/lib/active_record/connection_adapters/abstract/query_cache.rb:21:in `insert'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/activerecord-5.2.3/lib/active_record/persistence.rb:187:in `_insert_record'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/activerecord-5.2.3/lib/active_record/persistence.rb:734:in `_create_record'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/activerecord-5.2.3/lib/active_record/counter_cache.rb:184:in `_create_record'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/activerecord-5.2.3/lib/active_record/locking/optimistic.rb:70:in `_create_record'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/activerecord-5.2.3/lib/active_record/attribute_methods/dirty.rb:140:in `_create_record'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/activerecord-5.2.3/lib/active_record/callbacks.rb:346:in `block in _create_record'
/var/rails/canvas/current/gems/activesupport-suspend_callbacks/lib/active_support/callbacks/suspension.rb:182:in `run_callbacks'
/var/rails/canvas/releases/20200110024514/config/initializers/active_record.rb:1460:in `block in run_callbacks'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/activerecord-5.2.3/lib/active_record/relation.rb:281:in `scoping'
/var/rails/canvas/releases/20200110024514/config/initializers/active_record.rb:1460:in `run_callbacks'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/activesupport-5.2.3/lib/active_support/callbacks.rb:816:in `_run_create_callbacks'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/activerecord-5.2.3/lib/active_record/callbacks.rb:346:in `_create_record'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/activerecord-5.2.3/lib/active_record/timestamp.rb:102:in `_create_record'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/activerecord-5.2.3/lib/active_record/persistence.rb:705:in `create_or_update'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/activerecord-5.2.3/lib/active_record/callbacks.rb:342:in `block in create_or_update'
/var/rails/canvas/current/gems/activesupport-suspend_callbacks/lib/active_support/callbacks/suspension.rb:182:in `run_callbacks'
/var/rails/canvas/releases/20200110024514/config/initializers/active_record.rb:1460:in `block in run_callbacks'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/activerecord-5.2.3/lib/active_record/relation.rb:281:in `scoping'
/var/rails/canvas/releases/20200110024514/config/initializers/active_record.rb:1460:in `run_callbacks'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/activesupport-5.2.3/lib/active_support/callbacks.rb:816:in `_run_save_callbacks'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/activerecord-5.2.3/lib/active_record/callbacks.rb:342:in `create_or_update'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/activerecord-5.2.3/lib/active_record/persistence.rb:308:in `save!'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/activerecord-5.2.3/lib/active_record/validations.rb:52:in `save!'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/activerecord-5.2.3/lib/active_record/transactions.rb:315:in `block in save!'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/activerecord-5.2.3/lib/active_record/transactions.rb:387:in `block in with_transaction_returning_status'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/activerecord-5.2.3/lib/active_record/connection_adapters/abstract/database_statements.rb:265:in `transaction'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/activerecord-5.2.3/lib/active_record/transactions.rb:212:in `transaction'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/switchman-1.14.7/lib/switchman/active_record/base.rb:41:in `block in transaction'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/switchman-1.14.7/lib/switchman/active_record/relation.rb:102:in `activate'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/switchman-1.14.7/lib/switchman/active_record/base.rb:36:in `transaction'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/activerecord-5.2.3/lib/active_record/transactions.rb:385:in `with_transaction_returning_status'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/activerecord-5.2.3/lib/active_record/transactions.rb:315:in `save!'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/activerecord-5.2.3/lib/active_record/suppressor.rb:48:in `save!'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/switchman-1.14.7/lib/switchman/active_record/base.rb:107:in `block in save!'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/activerecord-5.2.3/lib/active_record/relation.rb:281:in `scoping'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/switchman-1.14.7/lib/switchman/active_record/base.rb:107:in `save!'
/var/rails/canvas/releases/20200110024514/app/models/stream_item.rb:241:in `block in generate_or_update'
/var/rails/canvas/releases/20200110024514/config/initializers/active_record.rb:618:in `block (3 levels) in unique_constraint_retry'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/activerecord-5.2.3/lib/active_record/connection_adapters/abstract/query_cache.rb:78:in `uncached'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/activerecord-5.2.3/lib/active_record/query_cache.rb:21:in `uncached'
/var/rails/canvas/releases/20200110024514/config/initializers/active_record.rb:618:in `block (2 levels) in unique_constraint_retry'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/activerecord-5.2.3/lib/active_record/connection_adapters/abstract/database_statements.rb:267:in `block in transaction'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/activerecord-5.2.3/lib/active_record/connection_adapters/abstract/transaction.rb:239:in `block in within_new_transaction'
/usr/local/lib/ruby/2.4.0/monitor.rb:214:in `mon_synchronize'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/activerecord-5.2.3/lib/active_record/connection_adapters/abstract/transaction.rb:236:in `within_new_transaction'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/activerecord-5.2.3/lib/active_record/connection_adapters/abstract/database_statements.rb:267:in `transaction'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/activerecord-5.2.3/lib/active_record/transactions.rb:212:in `transaction'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/switchman-1.14.7/lib/switchman/active_record/base.rb:49:in `transaction'
/var/rails/canvas/releases/20200110024514/config/initializers/active_record.rb:618:in `block in unique_constraint_retry'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/switchman-1.14.7/lib/switchman/shackles.rb:22:in `activate'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/switchman-inst-jobs-1.3.7/lib/switchman_inst_jobs/shackles.rb:8:in `activate'
/var/rails/canvas/releases/20200110024514/config/initializers/active_record.rb:617:in `unique_constraint_retry'
/var/rails/canvas/releases/20200110024514/app/models/stream_item.rb:231:in `generate_or_update'
/var/rails/canvas/releases/20200110024514/app/models/stream_item.rb:260:in `generate_all'
/var/rails/canvas/releases/20200110024514/lib/send_to_stream.rb:70:in `generate_stream_items'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/inst-jobs-0.15.14/lib/delayed/performable_method.rb:23:in `perform'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/inst-jobs-0.15.14/lib/delayed/backend/base.rb:254:in `block in invoke_job'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/inst-jobs-0.15.14/lib/delayed/lifecycle.rb:67:in `block in initialize'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/inst-jobs-0.15.14/lib/delayed/lifecycle.rb:72:in `execute'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/inst-jobs-0.15.14/lib/delayed/lifecycle.rb:45:in `run_callbacks'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/inst-jobs-0.15.14/lib/delayed/backend/base.rb:251:in `invoke_job'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/switchman-inst-jobs-1.3.7/lib/switchman_inst_jobs/delayed/backend/base.rb:62:in `block in invoke_job'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/switchman-1.14.7/app/models/switchman/shard_internal.rb:605:in `block in activate'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/switchman-1.14.7/app/models/switchman/shard_internal.rb:93:in `activate'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/switchman-1.14.7/app/models/switchman/shard_internal.rb:604:in `activate'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/switchman-inst-jobs-1.3.7/lib/switchman_inst_jobs/delayed/backend/base.rb:62:in `invoke_job'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/inst-jobs-0.15.14/lib/delayed/worker.rb:210:in `block (2 levels) in perform'
/usr/local/lib/ruby/2.4.0/benchmark.rb:308:in `realtime'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/inst-jobs-0.15.14/lib/delayed/worker.rb:204:in `block in perform'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/inst-jobs-statsd-1.2.3/lib/inst_jobs_statsd/stats/timing/perform.rb:22:in `block (2 levels) in enable_perform_timing'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/inst-jobs-statsd-1.2.3/lib/inst_jobs_statsd/stats/timing.rb:8:in `block in report_timing'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/inst_statsd-2.1.6/lib/inst_statsd/statsd.rb:89:in `time'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/inst-jobs-statsd-1.2.3/lib/inst_jobs_statsd/stats/timing.rb:8:in `report_timing'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/inst-jobs-statsd-1.2.3/lib/inst_jobs_statsd/stats/timing/perform.rb:21:in `block in enable_perform_timing'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/inst-jobs-0.15.14/lib/delayed/lifecycle.rb:85:in `block (2 levels) in add'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/inst-jobs-statsd-1.2.3/lib/inst_jobs_statsd/stats/timing/perform.rb:13:in `block (2 levels) in enable_batching'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/inst_statsd-2.1.6/lib/inst_statsd/statsd.rb:98:in `block in batch'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/statsd-ruby-1.4.0/lib/statsd.rb:73:in `easy'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/statsd-ruby-1.4.0/lib/statsd.rb:429:in `batch'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/inst_statsd-2.1.6/lib/inst_statsd/statsd.rb:96:in `batch'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/inst-jobs-statsd-1.2.3/lib/inst_jobs_statsd/stats/timing/perform.rb:12:in `block in enable_batching'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/inst-jobs-0.15.14/lib/delayed/lifecycle.rb:85:in `block (2 levels) in add'
/var/rails/canvas/releases/20200110024514/config/initializers/delayed_job.rb:136:in `block (2 levels) in <top (required)>'
/var/rails/canvas/releases/20200110024514/lib/temp_cache.rb:23:in `enable'
/var/rails/canvas/releases/20200110024514/config/initializers/delayed_job.rb:135:in `block in <top (required)>'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/inst-jobs-0.15.14/lib/delayed/lifecycle.rb:85:in `block (2 levels) in add'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/inst-jobs-0.15.14/lib/delayed/lifecycle.rb:67:in `block in initialize'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/inst-jobs-0.15.14/lib/delayed/lifecycle.rb:85:in `block in add'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/inst-jobs-0.15.14/lib/delayed/lifecycle.rb:85:in `block in add'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/inst-jobs-0.15.14/lib/delayed/lifecycle.rb:85:in `block in add'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/inst-jobs-0.15.14/lib/delayed/lifecycle.rb:72:in `execute'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/inst-jobs-0.15.14/lib/delayed/lifecycle.rb:45:in `run_callbacks'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/inst-jobs-0.15.14/lib/delayed/worker.rb:201:in `perform'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/inst-jobs-0.15.14/lib/delayed/worker.rb:236:in `block (2 levels) in perform_batch'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/inst-jobs-0.15.14/lib/delayed/worker.rb:271:in `block in configure_for_job'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/inst-jobs-0.15.14/lib/delayed/worker.rb:40:in `running_job'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/inst-jobs-0.15.14/lib/delayed/worker.rb:267:in `configure_for_job'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/inst-jobs-0.15.14/lib/delayed/worker.rb:235:in `block in perform_batch'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/inst-jobs-0.15.14/lib/delayed/worker.rb:232:in `each'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/inst-jobs-0.15.14/lib/delayed/worker.rb:232:in `perform_batch'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/inst-jobs-0.15.14/lib/delayed/worker.rb:208:in `block (2 levels) in perform'
/usr/local/lib/ruby/2.4.0/benchmark.rb:308:in `realtime'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/inst-jobs-0.15.14/lib/delayed/worker.rb:204:in `block in perform'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/inst-jobs-statsd-1.2.3/lib/inst_jobs_statsd/stats/timing/perform.rb:22:in `block (2 levels) in enable_perform_timing'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/inst-jobs-statsd-1.2.3/lib/inst_jobs_statsd/stats/timing.rb:8:in `block in report_timing'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/inst_statsd-2.1.6/lib/inst_statsd/statsd.rb:89:in `time'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/inst-jobs-statsd-1.2.3/lib/inst_jobs_statsd/stats/timing.rb:8:in `report_timing'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/inst-jobs-statsd-1.2.3/lib/inst_jobs_statsd/stats/timing/perform.rb:21:in `block in enable_perform_timing'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/inst-jobs-0.15.14/lib/delayed/lifecycle.rb:85:in `block (2 levels) in add'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/inst-jobs-statsd-1.2.3/lib/inst_jobs_statsd/stats/timing/perform.rb:13:in `block (2 levels) in enable_batching'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/inst_statsd-2.1.6/lib/inst_statsd/statsd.rb:98:in `block in batch'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/statsd-ruby-1.4.0/lib/statsd.rb:73:in `easy'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/statsd-ruby-1.4.0/lib/statsd.rb:429:in `batch'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/inst_statsd-2.1.6/lib/inst_statsd/statsd.rb:96:in `batch'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/inst-jobs-statsd-1.2.3/lib/inst_jobs_statsd/stats/timing/perform.rb:12:in `block in enable_batching'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/inst-jobs-0.15.14/lib/delayed/lifecycle.rb:85:in `block (2 levels) in add'
/var/rails/canvas/releases/20200110024514/config/initializers/delayed_job.rb:136:in `block (2 levels) in <top (required)>'
/var/rails/canvas/releases/20200110024514/lib/temp_cache.rb:28:in `enable'
/var/rails/canvas/releases/20200110024514/config/initializers/delayed_job.rb:135:in `block in <top (required)>'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/inst-jobs-0.15.14/lib/delayed/lifecycle.rb:85:in `block (2 levels) in add'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/inst-jobs-0.15.14/lib/delayed/lifecycle.rb:67:in `block in initialize'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/inst-jobs-0.15.14/lib/delayed/lifecycle.rb:85:in `block in add'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/inst-jobs-0.15.14/lib/delayed/lifecycle.rb:85:in `block in add'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/inst-jobs-0.15.14/lib/delayed/lifecycle.rb:85:in `block in add'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/inst-jobs-0.15.14/lib/delayed/lifecycle.rb:72:in `execute'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/inst-jobs-0.15.14/lib/delayed/lifecycle.rb:45:in `run_callbacks'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/inst-jobs-0.15.14/lib/delayed/worker.rb:201:in `perform'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/inst-jobs-0.15.14/lib/delayed/worker.rb:174:in `block (2 levels) in run'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/inst-jobs-0.15.14/lib/delayed/worker.rb:271:in `block in configure_for_job'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/inst-jobs-0.15.14/lib/delayed/worker.rb:40:in `running_job'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/inst-jobs-0.15.14/lib/delayed/worker.rb:267:in `configure_for_job'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/inst-jobs-0.15.14/lib/delayed/worker.rb:173:in `block in run'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/inst-jobs-0.15.14/lib/delayed/lifecycle.rb:67:in `block in initialize'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/inst-jobs-0.15.14/lib/delayed/lifecycle.rb:72:in `execute'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/inst-jobs-0.15.14/lib/delayed/lifecycle.rb:45:in `run_callbacks'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/inst-jobs-0.15.14/lib/delayed/worker.rb:166:in `run'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/switchman-inst-jobs-1.3.7/lib/switchman_inst_jobs/delayed/worker.rb:26:in `block in run'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/switchman-1.14.7/app/models/switchman/shard_internal.rb:605:in `block in activate'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/switchman-1.14.7/app/models/switchman/shard_internal.rb:93:in `activate'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/switchman-1.14.7/app/models/switchman/shard_internal.rb:604:in `activate'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/switchman-inst-jobs-1.3.7/lib/switchman_inst_jobs/delayed/worker.rb:26:in `run'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/inst-jobs-0.15.14/lib/delayed/worker.rb:133:in `block in start'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/inst-jobs-0.15.14/lib/delayed/lifecycle.rb:67:in `block in initialize'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/inst-jobs-0.15.14/lib/delayed/lifecycle.rb:72:in `execute'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/inst-jobs-0.15.14/lib/delayed/lifecycle.rb:45:in `run_callbacks'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/inst-jobs-0.15.14/lib/delayed/worker.rb:131:in `start'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/switchman-inst-jobs-1.3.7/lib/switchman_inst_jobs/delayed/worker.rb:19:in `block in start'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/switchman-1.14.7/app/models/switchman/shard_internal.rb:605:in `block in activate'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/switchman-1.14.7/app/models/switchman/shard_internal.rb:93:in `activate'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/switchman-1.14.7/app/models/switchman/shard_internal.rb:604:in `activate'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/switchman-inst-jobs-1.3.7/lib/switchman_inst_jobs/delayed/worker.rb:19:in `start'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/inst-jobs-0.15.14/lib/delayed/pool.rb:97:in `block in spawn_worker'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/inst-jobs-0.15.14/lib/delayed/pool.rb:108:in `block in fork_with_reconnects'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/inst-jobs-0.15.14/lib/delayed/pool.rb:105:in `fork'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/inst-jobs-0.15.14/lib/delayed/pool.rb:105:in `fork_with_reconnects'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/inst-jobs-0.15.14/lib/delayed/pool.rb:96:in `spawn_worker'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/inst-jobs-0.15.14/lib/delayed/pool.rb:74:in `block (2 levels) in spawn_all_workers'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/inst-jobs-0.15.14/lib/delayed/pool.rb:74:in `times'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/inst-jobs-0.15.14/lib/delayed/pool.rb:74:in `block in spawn_all_workers'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/inst-jobs-0.15.14/lib/delayed/pool.rb:73:in `each'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/inst-jobs-0.15.14/lib/delayed/pool.rb:73:in `spawn_all_workers'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/inst-jobs-0.15.14/lib/delayed/pool.rb:40:in `start'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/inst-jobs-0.15.14/lib/delayed/cli.rb:96:in `start'
/var/rails/canvas/releases/20200110024514/vendor/bundle/ruby/2.4.0/gems/inst-jobs-0.15.14/lib/delayed/cli.rb:48:in `run'
/var/rails/canvas/current/script/delayed_job:11:in `<main>'
@grahamb Any update on the fix? We are experiencing the same problem now.
Summary:
With a course that has peer reviews, a large number of failed AssessmentRequest#generate_stream_items jobs will happen with a PG::UniqueViolation error.
Steps to reproduce:
Unknown.
Expected behavior:
Jobs shouldn't fail.
Additional notes:
Full stack trace from a sample failed job: https://gist.github.com/grahamb/5da6f312a58be0fc9744972e6b1da7a1
Conversation in IRC with @simonista for context:
[simonista] hm, the error you reported is
PG::UniqueViolation
andunique_constraint_retry
only catchesActiveRecord::RecordNotUnique
[simonista] I wonder when the former gets wrapped into the latter… [simonista] ooo,PG::UniqueViolation
is for the index [simonista] that may be a problem —unique_constraint_retry
doesn’t seem handle indexes correctly [simonista] although.. wouldn’t all uniqueness be enforced be indexes? hm, need to think about this more [simonista] oh, no, i guess it could be column-level uniqueness [simonista] http://api.rubyonrails.org/classes/ActiveRecord/Validations/ClassMethods.html#method-i-validates_uniqueness_of seems to suggest that this should be an ActiveRecord::RecordNotUnique error… [simonista] @grahamb: can you verify thatStreamItem.last.dup.save!
raisesActiveRecord::RecordNotUnique: PG::UniqueViolation: ERROR: duplicate key value violates unique constraint "index_stream_items_on_asset_type_and_asset_id"
for you? it does for me [simonista] I have no idea why the error in your gist didn’t get wrapped in aActiveRecord::RecordNotUnique
, but I think that’s the problem [simonista] what version of postgres are you running? [grahamb] Yup, it throwsActiveRecord::RecordNotUnique: PG::UniqueViolation
[grahamb] Postgres 9.5.4 [simonista] weird…