Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Sentry errors out with - undefined method `[]' for nil:NilClass #932

Closed
kapso opened this issue Oct 19, 2019 · 8 comments
Closed

Sentry errors out with - undefined method `[]' for nil:NilClass #932

kapso opened this issue Oct 19, 2019 · 8 comments

Comments

@kapso
Copy link

kapso commented Oct 19, 2019

Environment -

  • gem 'sentry-raven', '2.12.0'
  • ruby '2.6.5'
  • gem 'rails', '6.0.0'
  • Heroku App

Sentry Config -

Raven.configure do |config|
  config.dsn = "xxxx"
  config.environments = %w[staging production]
  config.excluded_exceptions += [SignalException.name]
  config.async = ->(event) { SentryWorker.perform_async(event) }
  config.should_capture = ->(e) do
    return false if e.is_a?(ActiveRecord::StatementInvalid) && e.message =~ /PG::InFailedSqlTransaction/i
    true
  end
end

Error Message - "undefined method `[]' for nil:NilClass"

Error Stack -

/app/vendor/bundle/ruby/2.6.0/gems/sentry-raven-2.12.0/lib/raven/client.rb:83:in `get_message_from_exception'
/app/vendor/bundle/ruby/2.6.0/gems/sentry-raven-2.12.0/lib/raven/client.rb:89:in `get_log_message'
/app/vendor/bundle/ruby/2.6.0/gems/sentry-raven-2.12.0/lib/raven/client.rb:115:in `failed_send'
/app/vendor/bundle/ruby/2.6.0/gems/sentry-raven-2.12.0/lib/raven/client.rb:34:in `send_event'
/app/vendor/bundle/ruby/2.6.0/gems/sentry-raven-2.12.0/lib/raven/instance.rb:81:in `send_event'
/app/vendor/ruby-2.6.5/lib/ruby/2.6.0/forwardable.rb:230:in `send_event'
/app/app/workers/sentry_worker.rb:7:in `perform'
/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/processor.rb:196:in `execute_job'
/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/processor.rb:164:in `block (2 levels) in process'
/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/middleware/chain.rb:138:in `block in invoke'
/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-unique-jobs-6.0.15/lib/sidekiq_unique_jobs/server/middleware.rb:29:in `call'
/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/middleware/chain.rb:140:in `block in invoke'
/app/vendor/bundle/ruby/2.6.0/gems/sentry-raven-2.12.0/lib/raven/integrations/sidekiq.rb:9:in `call'
/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/middleware/chain.rb:140:in `block in invoke'
/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/middleware/chain.rb:143:in `invoke'
/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/processor.rb:163:in `block in process'
/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/processor.rb:136:in `block (6 levels) in dispatch'
/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/job_retry.rb:111:in `local'
/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/processor.rb:135:in `block (5 levels) in dispatch'
/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/rails.rb:43:in `block in call'
/app/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.0/lib/active_support/execution_wrapper.rb:88:in `wrap'
/app/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.0/lib/active_support/reloader.rb:72:in `block in wrap'
/app/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.0/lib/active_support/execution_wrapper.rb:88:in `wrap'
/app/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.0/lib/active_support/reloader.rb:71:in `wrap'
/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/rails.rb:42:in `call'
/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/processor.rb:131:in `block (4 levels) in dispatch'
/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/processor.rb:257:in `stats'
/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/processor.rb:126:in `block (3 levels) in dispatch'
/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/job_logger.rb:13:in `call'
/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/processor.rb:125:in `block (2 levels) in dispatch'
/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/job_retry.rb:78:in `global'
/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/processor.rb:124:in `block in dispatch'
/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/logger.rb:10:in `with'
/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/job_logger.rb:33:in `prepare'
/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/processor.rb:123:in `dispatch'
/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/processor.rb:162:in `process'
/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/processor.rb:78:in `process_one'
/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/processor.rb:68:in `run'
/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/util.rb:15:in `watchdog'
/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/util.rb:24:in `block in safe_thread'

Sidekiq Arguments -

{"environment"=>"staging", "event_id"=>"46bf38ce521c44a28135dd76619f6eb8", "extra"=>{"server"=>{"os"=>{"name"=>"Linux", "version"=>"#52-Ubuntu SMP Wed Jun 26 08:47:35 UTC 2019", "build"=>"4.4.0-1048-aws", "kernel_version"=>"Linux b199ccec-2d08-4d2e-9613-1d2ef6d103fb 4.4.0-1048-aws #52-Ubuntu SMP Wed Jun 26 08:47:35 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux"}, "runtime"=>{"name"=>"ruby", "version"=>"ruby 2.6.5p114 (2019-10-01 revision 67812) [x86_64-linux]"}}, "sidekiq"=>{"context"=>"Job raised exception", "job"=>{"class"=>"SentryWorker", "args"=>[{"environment"=>"staging", "event_id"=>"878a3a904a284de583643a6aca4d2a03", "extra"=>{"server"=>{"os"=>{"name"=>"Linux", "version"=>"#52-Ubuntu SMP Wed Jun 26 08:47:35 UTC 2019", "build"=>"4.4.0-1048-aws", "kernel_version"=>"Linux f46ec913-0282-4a5b-991c-c73183847da8 4.4.0-1048-aws #52-Ubuntu SMP Wed Jun 26 08:47:35 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux"}, "runtime"=>{"name"=>"ruby", "version"=>"ruby 2.6.5p114 (2019-10-01 revision 67812) [x86_64-linux]"}}, "sidekiq"=>{"context"=>"Job raised exception", "job"=>{"class"=>"PatentIngestWorker", "args"=>["seed", "4ad8d32f77", "<exchange-document country=\"AU\" doc-number=\"2003206825\" kind=\"B8\" doc-id=\"382940022\" date-publ=\"20080221\" family-id=\"27675599\" is-representative=\"NO\" date-of-last-exchange=\"20190131\" date-added-docdb=\"20080407\" originating-office=\"EP\">\n <bibliographic-data>\n <publication-reference data-format=\"docdb\">\n <document-id>\n <country>AU</country>\n <doc-number>2003206825</doc-number>\n <kind>B8</kind>\n <date>20080221</date>\n </document-id>\n </publication-reference>\n <publication-reference data-format=\"epodoc\">\n <document-id>\n <doc-number>AU2003206825B</doc-number>\n </document-id>\n </publication-reference>\n <classifications-ipcr>\n <classification-ipcr sequence=\"1\">\n <text>C07D 213/57 20060101AFI20060310BMJP </text>\n </classification-ipcr>\n <classification-ipcr sequence=\"2\">\n <text>A61K 8/00 20060101ALI20060310BMJP </text>\n </classification-ipcr>\n <classification-ipcr sequence=\"3\">\n <text>A61K 8/49 20060101ALI20051008BMEP </text>\n </classification-ipcr>\n <classification-ipcr sequence=\"4\">\n <text>A61Q 5/02 20060101ALI20060310BMJP </text>\n </classification-ipcr>\n <classification-ipcr sequence=\"5\">\n <text>A61Q 5/12 20060101ALI20060310BMJP </text>\n </classification-ipcr>\n <classification-ipcr sequence=\"6\">\n <text>A61Q 17/04 20060101ALI20051008BMEP </text>\n </classification-ipcr>\n <classification-ipcr sequence=\"7\">\n <text>C07D 309/34 20060101ALI20060310BMJP </text>\n </classification-ipcr>\n <classification-ipcr sequence=\"8\">\n <text>C09K 3/00 20060101ALI20060310BMJP </text>\n </classification-ipcr>\n </classifications-ipcr>\n <patent-classifications>\n <patent-classification sequence=\"1\">\n <classification-scheme office=\"EP\" scheme=\"CPC\">\n <date>20130101</date>\n </classification-scheme>\n <classification-symbol>A61Q 17/04 </classification-symbol>\n <symbol-position>F</symbol-position>\n <classification-value>I</classification-value>\n <classification-status>B</classification-status>\n <classification-data-source>H</classification-data-source>\n <action-date>\n <date>20130101</date>\n </action-date>\n </patent-classification>\n <patent-classification sequence=\"2\">\n <classification-scheme office=\"EP\" scheme=\"CPC\">\n <date>20130101</date>\n </classification-scheme>\n <classification-symbol>A61K 8/4926 </classification-symbol>\n <symbol-position>L</symbol-position>\n <classification-value>I</classification-value>\n <classification-status>B</classification-status>\n <classification-data-source>H</classification-data-source>\n <action-date>\n <date>20130101</date>\n </action-date>\n </patent-classification>\n <patent-classification sequence=\"3\">\n <classification-scheme office=\"EP\" scheme=\"CPC\">\n <date>20130101</date>\n </classification-scheme>\n <classification-symbol>A61K 8/498 </classification-symbol>\n <symbol-position>L</symbol-position>\n <classification-value>I</classification-value>\n <classification-status>B</classification-status>\n <classification-data-source>H</classification-data-source>\n <action-date>\n <date>20130101</date>\n </action-date>\n </patent-classification>\n </patent-classifications>\n <application-reference is-representative=\"NO\" doc-id=\"2578143\" data-format=\"docdb\">\n <document-id>\n <country>AU</country>\n <doc-number>2003206825</doc-number>\n <kind>A</kind>\n <date>20030204</date>\n </document-id>\n </application-reference>\n <application-reference data-format=\"epodoc\">\n <document-id>\n <doc-number>AU20030206825</doc-number>\n </document-id>\n </application-reference>\n <application-reference data-format=\"original\">\n <document-id>\n <doc-number>2003206825</doc-number>\n </document-id>\n </application-reference>\n <priority-claims>\n <priority-claim sequence=\"1\" data-format=\"docdb\">\n <document-id doc-id=\"267967684\">\n <country>EP</country>\n <doc-number>02002093</doc-number>\n <kind>A</kind>\n <date>20020212</date>\n </document-id>\n <priority-active-indicator>Y</priority-active-indicator>\n </priority-claim>\n <priority-claim sequence=\"1\" data-format=\"epodoc\">\n <document-id>\n <doc-number>EP20020002093</doc-number>\n </document-id>\n </priority-claim>\n <priority-claim sequence=\"2\" data-format=\"docdb\">\n <document-id doc-id=\"15634271\">\n <country>EP</country>\n <doc-number>0301049</doc-number>\n <kind>W</kind>\n <date>20030204</date>\n </document-id>\n <priority-linkage-type>W</priority-linkage-type>\n <priority-active-indicator>N</priority-active-indicator>\n </priority-claim>\n <priority-claim sequence=\"2\" data-format=\"epodoc\">\n <document-id>\n <doc-number>WO2003EP01049</doc-number>\n </document-id>\n </priority-claim>\n <priority-claim sequence=\"1\" data-format=\"original\">\n <document-id>\n <doc-number>02002093.9</doc-number>\n </document-id>\n </priority-claim>\n <priority-claim sequence=\"2\" data-format=\"original\">\n <document-id>\n <doc-number>WO03/068183</doc-number>\n </document-id>\n </priority-claim>\n </priority-claims>\n <parties>\n <applicants>\n <applicant sequence=\"1\" data-format=\"docdb\">\n <applicant-name>\n <name>DSM IP ASSETS BV</name>\n </applicant-name>\n </applicant>\n <applicant sequence=\"1\" data-format=\"docdba\">\n <applicant-name>\n <name>DSM IP ASSETS B.V.</name>\n </applicant-name>\n </applicant>\n </applicants>\n <inventors>\n <inventor sequence=\"1\" data-format=\"docdb\">\n <inventor-name>\n <name>BERG-SCHULTZ KATJA</name>\n </inventor-name>\n </inventor>\n <inventor sequence=\"1\" data-format=\"docdba\">\n <inventor-name>\n <name>KATJA BERG-SCHULTZ</name>\n </inventor-name>\n </inventor>\n </inventors>\n </parties>\n <invention-title lang=\"en\" data-format=\"docdba\">Sunscreen compositions as well as dihydropyridines and dihydropyranes</invention-title>\n <dates-of-public-availability>\n <printed-with-grant>\n <document-id>\n <date>20080221</date>\n </document-id>\n </printed-with-grant>\n </dates-of-public-availability>\n </bibliographic-data>\n</exchange-document>"], "retry"=>true, "queue"=>"patent_ingest", "backtrace"=>true, "jid"=>"22c9ec664bdb65eb811e8e19", "created_at"=>1570072201.99408, "enqueued_at"=>1571449722.707494, "error_message"=>"PG::UniqueViolation: ERROR: duplicate key value violates unique constraint \"index_patents_on_publication_number\"\nDETAIL: Key (publication_number)=(AU2003206825B8) already exists.\n", "error_class"=>"ActiveRecord::RecordNotUnique", "failed_at"=>1570731698.815898, "retry_count"=>6, "error_backtrace"=>"eJzVWtty4ygQ/ZVsXiZbtYksydf5laktFknEZiKBAshe79dvc7GClHF8kXAy\nD66yQXBON4emG/nHfYTrOtoSVnARZQ0rShKJJttHydP8aRKtSSUjnCu6JYLk\nXBSP0ArtJc1cM7LtUc4ZI9DCGcIFrhURMqq5VGtB5Gt5aHsS2ff5fPmdsrt/\nsNyzHJF/SY5qLHAlv93/9Yl0spLnL3cPyV1JtqSUf95BoyHHOMpxviEX0ZNN\nXXOh3vNzHVFBapiGsJwSGVEGZDS+JjT1+cC3moiKKgQW5Y0QhClUclxc5q2T\ndNrZ830kN1gQdKATLxeGz56SskCmb2TsD1xhocfwwIh6WXTX53qRXMEJZ1IJ\neMxntJgsjiq45Os+Jc3lUXOZGUyPWsUZVdzMmaQzMyc0Ib1PNwL6/vsk8+Zd\nh//CpmECZFzRZ5pjzUUrEDg0FWEOP5ka+Lfmz3DCfGXX+FLbR5S9XYWbqv0I\nlemqpdIogjArUF4SLG5HJyqwwhmWoCGFFdGqkJraynPSa0PE/lZaOUYodvvY\nMAIJExFcvqe9FKeTW5M66ad5ctjlt2RjNGL3kgk1oUjACSqpVHDGGpx0YVXh\nnO+eCgi4SlMLmAsCbg8AmPNGB+w3X8bz0JD6PKJsHfFa0QqMpbk9rgLDYqUE\nzXTgq4ja8EJGBRVqb/QTx6HdjMsyw/mL2TRpmnRP5gG4pzNUH/kQ1kTDUNsR\nEG+Z2OMXGUBr5HW41/g33HKCcAkEwqo2Tg2unn5UcJmdw+MCNTXE53HTio5D\nk15tNQj5N5KsxNubCNb5N+SCdiWbrIID9kQ7m9hzRbv0jzFxtrikha1BDE4g\nGEg8mMR5i5PGq+6eCI/oso8WcUfVBnlPwUDVCAZnq8nSmuCV/qnsMHGMPY4h\nHZTEyS3hUlfa3XQZjslwdPXp4AjViLT3Gu5yrYuiP+beyfGBH2uIMVENGgAF\nRDa6mNIz9cON7b9mnriXOLlS9vhMRpRei8k0u3MEUst1++ULcPMwDafl5H3U\noQwxskMf0PsdbsvembpYthv6tIWfJY4vEEwv2GZnDT++32P/xuoic306j+nT\n4in2jfY6zR0+EUADMj6Gs9Ig91UPfSGT3Ek8MMkdaK7T1qVWDkRdLQ+olx1d\nA2Fjd6vSwdWfiheklG+DrCCR++1kephlNmmXjLKf0HH9VPHc3V+t+9PsuHgx\nl4N2uH0C2VZzsL575/XMRfXLKcwefRsZW/o7gWv00bBjyLPDK6bOyI9XT9KC\nvNBXsykSs2SuJaoFz9tkI/aug/V9zU+ejQwwnx598+MeHAxY0QIG7LAgUb7B\nlFnh9epoyrb85dy4dsBqGH1tyCN4RRrceOYDI9utnQZDiIDA73Exkd3VfhBn\nwlg5nQyxEtQm9o8CMk0GCUScuPBpGsyxsRbujZMjYSLJlzbpQqzURYNRIHrC\nT3sBYyS1d1FSPyw9zP3tVVAJESXfDEYEfetCS+z9KzgAxMMV0DPGr7ofZkGM\nEZiWJhGY9tbnAkWfmXfYoKozTx36axvMl8v2MBgXTRD9lwP3QrpXvI2P9om2\nxZeCnCOGZLyo1tN07Gt6GkTTHcRkZhNMXdKMHW2STrRJg0Wbkq/XLndKQy1M\nMjuamISJnK7kXZc8Gz1yJtPuhh/NAm8lJm3FPvIauxqhFqSG43lsz9jJw+y1\nwzv5IGe704trQ5yN7Jp5WxIOnhdOgtL4w+6pnfZ0cfb/gE7P25e3xM8EqY0g\nuPh2//f/50PJzg==\n", "retried_at"=>1571437462.206649}, "jobstr"=>"{\"class\":\"PatentIngestWorker\",\"args\":[\"seed\",\"4ad8d32f77\",\"<exchange-document country=\\\"AU\\\" doc-number=\\\"2003206825\\\" kind=\\\"B8\\\" doc-id=\\\"382940022\\\" date-publ=\\\"20080221\\\" family-id=\\\"27675599\\\" is-representative=\\\"NO\\\" date-of-last-exchange=\\\"20190131\\\" date-added-docdb=\\\"20080407\\\" originating-office=\\\"EP\\\">\\n <bibliographic-data>\\n <publication-reference data-format=\\\"docdb\\\">\\n <document-id>\\n <country>AU</country>\\n <doc-number>2003206825</doc-number>\\n <kind>B8</kind>\\n <date>20080221</date>\\n </document-id>\\n </publication-reference>\\n <publication-reference data-format=\\\"epodoc\\\">\\n <document-id>\\n <doc-number>AU2003206825B</doc-number>\\n </document-id>\\n </publication-reference>\\n <classifications-ipcr>\\n <classification-ipcr sequence=\\\"1\\\">\\n <text>C07D 213/57 20060101AFI20060310BMJP </text>\\n </classification-ipcr>\\n <classification-ipcr sequence=\\\"2\\\">\\n <text>A61K 8/00 20060101ALI20060310BMJP </text>\\n </classification-ipcr>\\n <classification-ipcr sequence=\\\"3\\\">\\n <text>A61K 8/49 20060101ALI20051008BMEP </text>\\n </classification-ipcr>\\n <classification-ipcr sequence=\\\"4\\\">\\n <text>A61Q 5/02 20060101ALI20060310BMJP </text>\\n </classification-ipcr>\\n <classification-ipcr sequence=\\\"5\\\">\\n <text>A61Q 5/12 20060101ALI20060310BMJP </text>\\n </classification-ipcr>\\n <classification-ipcr sequence=\\\"6\\\">\\n <text>A61Q 17/04 20060101ALI20051008BMEP </text>\\n </classification-ipcr>\\n <classification-ipcr sequence=\\\"7\\\">\\n <text>C07D 309/34 20060101ALI20060310BMJP </text>\\n </classification-ipcr>\\n <classification-ipcr sequence=\\\"8\\\">\\n <text>C09K 3/00 20060101ALI20060310BMJP </text>\\n </classification-ipcr>\\n </classifications-ipcr>\\n <patent-classifications>\\n <patent-classification sequence=\\\"1\\\">\\n <classification-scheme office=\\\"EP\\\" scheme=\\\"CPC\\\">\\n <date>20130101</date>\\n </classification-scheme>\\n <classification-symbol>A61Q 17/04 </classification-symbol>\\n <symbol-position>F</symbol-position>\\n <classification-value>I</classification-value>\\n <classification-status>B</classification-status>\\n <classification-data-source>H</classification-data-source>\\n <action-date>\\n <date>20130101</date>\\n </action-date>\\n </patent-classification>\\n <patent-classification sequence=\\\"2\\\">\\n <classification-scheme office=\\\"EP\\\" scheme=\\\"CPC\\\">\\n <date>20130101</date>\\n </classification-scheme>\\n <classification-symbol>A61K 8/4926 </classification-symbol>\\n <symbol-position>L</symbol-position>\\n <classification-value>I</classification-value>\\n <classification-status>B</classification-status>\\n <classification-data-source>H</classification-data-source>\\n <action-date>\\n <date>20130101</date>\\n </action-date>\\n </patent-classification>\\n <patent-classification sequence=\\\"3\\\">\\n <classification-scheme office=\\\"EP\\\" scheme=\\\"CPC\\\">\\n <date>20130101</date>\\n </classification-scheme>\\n <classification-symbol>A61K 8/498 </classification-symbol>\\n <symbol-position>L</symbol-position>\\n <classification-value>I</classification-value>\\n <classification-status>B</classification-status>\\n <classification-data-source>H</classification-data-source>\\n <action-date>\\n <date>20130101</date>\\n </action-date>\\n </patent-classification>\\n </patent-classifications>\\n <application-reference is-representative=\\\"NO\\\" doc-id=\\\"2578143\\\" data-format=\\\"docdb\\\">\\n <document-id>\\n <country>AU</country>\\n <doc-number>2003206825</doc-number>\\n <kind>A</kind>\\n <date>20030204</date>\\n </document-id>\\n </application-reference>\\n <application-reference data-format=\\\"epodoc\\\">\\n <document-id>\\n <doc-number>AU20030206825</doc-number>\\n </document-id>\\n </application-reference>\\n <application-reference data-format=\\\"original\\\">\\n <document-id>\\n <doc-number>2003206825</doc-number>\\n </document-id>\\n </application-reference>\\n <priority-claims>\\n <priority-claim sequence=\\\"1\\\" data-format=\\\"docdb\\\">\\n <document-id doc-id=\\\"267967684\\\">\\n <country>EP</country>\\n <doc-number>02002093</doc-number>\\n <kind>A</kind>\\n <date>20020212</date>\\n </document-id>\\n <priority-active-indicator>Y</priority-active-indicator>\\n </priority-claim>\\n <priority-claim sequence=\\\"1\\\" data-format=\\\"epodoc\\\">\\n <document-id>\\n <doc-number>EP20020002093</doc-number>\\n </document-id>\\n </priority-claim>\\n <priority-claim sequence=\\\"2\\\" data-format=\\\"docdb\\\">\\n <document-id doc-id=\\\"15634271\\\">\\n <country>EP</country>\\n <doc-number>0301049</doc-number>\\n <kind>W</kind>\\n <date>20030204</date>\\n </document-id>\\n <priority-linkage-type>W</priority-linkage-type>\\n <priority-active-indicator>N</priority-active-indicator>\\n </priority-claim>\\n <priority-claim sequence=\\\"2\\\" data-format=\\\"epodoc\\\">\\n <document-id>\\n <doc-number>WO2003EP01049</doc-number>\\n </document-id>\\n </priority-claim>\\n <priority-claim sequence=\\\"1\\\" data-format=\\\"original\\\">\\n <document-id>\\n <doc-number>02002093.9</doc-number>\\n </document-id>\\n </priority-claim>\\n <priority-claim sequence=\\\"2\\\" data-format=\\\"original\\\">\\n <document-id>\\n <doc-number>WO03/068183</doc-number>\\n </document-id>\\n </priority-claim>\\n </priority-claims>\\n <parties>\\n <applicants>\\n <applicant sequence=\\\"1\\\" data-format=\\\"docdb\\\">\\n <applicant-name>\\n <name>DSM IP ASSETS BV</name>\\n </applicant-name>\\n </applicant>\\n <applicant sequence=\\\"1\\\" data-format=\\\"docdba\\\">\\n <applicant-name>\\n <name>DSM IP ASSETS B.V.</name>\\n </applicant-name>\\n </applicant>\\n </applicants>\\n <inventors>\\n <inventor sequence=\\\"1\\\" data-format=\\\"docdb\\\">\\n <inventor-name>\\n <name>BERG-SCHULTZ KATJA</name>\\n </inventor-name>\\n </inventor>\\n <inventor sequence=\\\"1\\\" data-format=\\\"docdba\\\">\\n <inventor-name>\\n <name>KATJA BERG-SCHULTZ</name>\\n </inventor-name>\\n </inventor>\\n </inventors>\\n </parties>\\n <invention-title lang=\\\"en\\\" data-format=\\\"docdba\\\">Sunscreen compositions as well as dihydropyridines and dihydropyranes</invention-title>\\n <dates-of-public-availability>\\n <printed-with-grant>\\n <document-id>\\n <date>20080221</date>\\n </document-id>\\n </printed-with-grant>\\n </dates-of-public-availability>\\n </bibliographic-data>\\n</exchange-document>\"],\"retry\":true,\"queue\":\"patent_ingest\",\"backtrace\":true,\"jid\":\"22c9ec664bdb65eb811e8e19\",\"created_at\":1570072201.99408,\"enqueued_at\":1571449722.707494,\"error_message\":\"PG::UniqueViolation: ERROR: duplicate key value violates unique constraint \\\"index_patents_on_publication_number\\\"\\nDETAIL: Key (publication_number)=(AU2003206825B8) already exists.\\n\",\"error_class\":\"ActiveRecord::RecordNotUnique\",\"failed_at\":1570731698.815898,\"retry_count\":6,\"error_backtrace\":\"eJzVWtty4ygQ/ZVsXiZbtYksydf5laktFknEZiKBAshe79dvc7GClHF8kXAy\\nD66yQXBON4emG/nHfYTrOtoSVnARZQ0rShKJJttHydP8aRKtSSUjnCu6JYLk\\nXBSP0ArtJc1cM7LtUc4ZI9DCGcIFrhURMqq5VGtB5Gt5aHsS2ff5fPmdsrt/\\nsNyzHJF/SY5qLHAlv93/9Yl0spLnL3cPyV1JtqSUf95BoyHHOMpxviEX0ZNN\\nXXOh3vNzHVFBapiGsJwSGVEGZDS+JjT1+cC3moiKKgQW5Y0QhClUclxc5q2T\\ndNrZ830kN1gQdKATLxeGz56SskCmb2TsD1xhocfwwIh6WXTX53qRXMEJZ1IJ\\neMxntJgsjiq45Os+Jc3lUXOZGUyPWsUZVdzMmaQzMyc0Ib1PNwL6/vsk8+Zd\\nh//CpmECZFzRZ5pjzUUrEDg0FWEOP5ka+Lfmz3DCfGXX+FLbR5S9XYWbqv0I\\nlemqpdIogjArUF4SLG5HJyqwwhmWoCGFFdGqkJraynPSa0PE/lZaOUYodvvY\\nMAIJExFcvqe9FKeTW5M66ad5ctjlt2RjNGL3kgk1oUjACSqpVHDGGpx0YVXh\\nnO+eCgi4SlMLmAsCbg8AmPNGB+w3X8bz0JD6PKJsHfFa0QqMpbk9rgLDYqUE\\nzXTgq4ja8EJGBRVqb/QTx6HdjMsyw/mL2TRpmnRP5gG4pzNUH/kQ1kTDUNsR\\nEG+Z2OMXGUBr5HW41/g33HKCcAkEwqo2Tg2unn5UcJmdw+MCNTXE53HTio5D\\nk15tNQj5N5KsxNubCNb5N+SCdiWbrIID9kQ7m9hzRbv0jzFxtrikha1BDE4g\\nGEg8mMR5i5PGq+6eCI/oso8WcUfVBnlPwUDVCAZnq8nSmuCV/qnsMHGMPY4h\\nHZTEyS3hUlfa3XQZjslwdPXp4AjViLT3Gu5yrYuiP+beyfGBH2uIMVENGgAF\\nRDa6mNIz9cON7b9mnriXOLlS9vhMRpRei8k0u3MEUst1++ULcPMwDafl5H3U\\noQwxskMf0PsdbsvembpYthv6tIWfJY4vEEwv2GZnDT++32P/xuoic306j+nT\\n4in2jfY6zR0+EUADMj6Gs9Ig91UPfSGT3Ek8MMkdaK7T1qVWDkRdLQ+olx1d\\nA2Fjd6vSwdWfiheklG+DrCCR++1kephlNmmXjLKf0HH9VPHc3V+t+9PsuHgx\\nl4N2uH0C2VZzsL575/XMRfXLKcwefRsZW/o7gWv00bBjyLPDK6bOyI9XT9KC\\nvNBXsykSs2SuJaoFz9tkI/aug/V9zU+ejQwwnx598+MeHAxY0QIG7LAgUb7B\\nlFnh9epoyrb85dy4dsBqGH1tyCN4RRrceOYDI9utnQZDiIDA73Exkd3VfhBn\\nwlg5nQyxEtQm9o8CMk0GCUScuPBpGsyxsRbujZMjYSLJlzbpQqzURYNRIHrC\\nT3sBYyS1d1FSPyw9zP3tVVAJESXfDEYEfetCS+z9KzgAxMMV0DPGr7ofZkGM\\nEZiWJhGY9tbnAkWfmXfYoKozTx36axvMl8v2MBgXTRD9lwP3QrpXvI2P9om2\\nxZeCnCOGZLyo1tN07Gt6GkTTHcRkZhNMXdKMHW2STrRJg0Wbkq/XLndKQy1M\\nMjuamISJnK7kXZc8Gz1yJtPuhh/NAm8lJm3FPvIauxqhFqSG43lsz9jJw+y1\\nwzv5IGe704trQ5yN7Jp5WxIOnhdOgtL4w+6pnfZ0cfb/gE7P25e3xM8EqY0g\\nuPh2//f/50PJzg==\\n\",\"retried_at\":1571437462.206649}"}}, "level"=>"error", "logger"=>"ruby", "message"=>"PG::UniqueViolation: ERROR: duplicate key value violates unique constraint \"index_patents_on_publication_number\"\nDETAIL: Key (publication_number)=(AU2003206825B8) already exists.\n", "modules"=>{"rake"=>"12.3.3", "concurrent-ruby"=>"1.1.5", "i18n"=>"1.7.0", "minitest"=>"5.12.2", "thread_safe"=>"0.3.6", "tzinfo"=>"1.2.5", "zeitwerk"=>"2.2.0", "activesupport"=>"6.0.0", "builder"=>"3.2.3", "erubi"=>"1.9.0", "mini_portile2"=>"2.4.0", "nokogiri"=>"1.10.4", "rails-dom-testing"=>"2.0.3", "crass"=>"1.0.5", "loofah"=>"2.3.0", "rails-html-sanitizer"=>"1.3.0", "actionview"=>"6.0.0", "rack"=>"2.0.7", "rack-test"=>"1.1.0", "actionpack"=>"6.0.0", "nio4r"=>"2.5.2", "websocket-extensions"=>"0.1.4", "websocket-driver"=>"0.7.1", "actioncable"=>"6.0.0", "globalid"=>"0.4.2", "activejob"=>"6.0.0", "activemodel"=>"6.0.0", "activerecord"=>"6.0.0", "mimemagic"=>"0.3.3", "marcel"=>"0.3.3", "activestorage"=>"6.0.0", "mini_mime"=>"1.0.2", "mail"=>"2.7.1", "actionmailbox"=>"6.0.0", "actionmailer"=>"6.0.0", "actiontext"=>"6.0.0", "active_interaction"=>"3.7.1", "public_suffix"=>"4.0.1", "addressable"=>"2.7.0", "adroit-age"=>"2.0.0", "ancestry"=>"3.0.7", "attribute_normalizer"=>"1.2.0", "aws-eventstream"=>"1.0.3", "aws-partitions"=>"1.225.0", "aws-sigv4"=>"1.1.0", "jmespath"=>"1.4.0", "aws-sdk-core"=>"3.69.0", "aws-sdk-kms"=>"1.24.0", "aws-sdk-s3"=>"1.50.0", "bcrypt"=>"3.1.13", "bundler"=>"1.17.3", "method_source"=>"0.9.2", "thor"=>"0.20.3", "railties"=>"6.0.0", "sprockets"=>"4.0.0", "sprockets-rails"=>"3.2.1", "rails"=>"6.0.0", "boolean_timestamps"=>"1.0.2", "msgpack"=>"1.3.1", "bootsnap"=>"1.4.5", "chartkick"=>"3.2.1", "clockwork"=>"2.0.4", "deep_merge"=>"1.2.1", "dry-core"=>"0.4.9", "dry-configurable"=>"0.8.3", "dry-equalizer"=>"0.2.2", "dry-initializer"=>"3.0.1", "dry-logic"=>"1.0.3", "dry-container"=>"0.7.2", "dry-inflector"=>"0.2.0", "dry-types"=>"1.2.0", "dry-schema"=>"1.4.1", "config"=>"2.0.0", "connection_pool"=>"2.2.2", "i18n_data"=>"0.8.0", "sixarm_ruby_unaccent"=>"1.2.0", "unicode_utils"=>"1.4.0", "countries"=>"3.0.0", "default_value_for"=>"3.3.0", "descriptive-statistics"=>"2.2.0", "unf_ext"=>"0.0.7.6", "unf"=>"0.1.4", "domain_name"=>"0.5.20190701", "multi_json"=>"1.14.1", "elasticsearch-api"=>"7.3.0", "multipart-post"=>"2.1.1", "faraday"=>"0.17.0", "elasticsearch-transport"=>"7.3.0", "elasticsearch"=>"7.3.0", "email_prefixer"=>"1.2.0", "email_validator"=>"2.0.1", "enumerize"=>"2.3.1", "errbase"=>"0.1.1", "ffi"=>"1.11.1", "ethon"=>"0.12.0", "faker"=>"2.6.0", "fast_blank"=>"1.0.0", "fast_jsonapi"=>"1.5", "google-cloud-env"=>"1.2.1", "google-cloud-core"=>"1.3.2", "jwt"=>"2.2.1", "memoist"=>"0.16.0", "os"=>"1.0.1", "signet"=>"0.12.0", "googleauth"=>"0.9.0", "google-cloud-translate"=>"1.4.0", "groupdate"=>"4.1.2", "hashie"=>"3.6.0", "http-cookie"=>"1.0.3", "http-form_data"=>"2.1.1", "http_parser.rb"=>"0.6.0", "http"=>"4.1.1", "iso-639"=>"0.2.8", "iso_country_codes"=>"0.7.8", "libsqreen"=>"0.3.0.0.1", "request_store"=>"1.4.1", "lograge"=>"0.11.2", "mime-types-data"=>"3.2019.1009", "mime-types"=>"3.3", "net-http-digest_auth"=>"1.4.1", "net-http-persistent"=>"3.1.0", "ntlm-http"=>"0.1.1", "webrobots"=>"0.1.2", "mechanize"=>"2.7.6", "mobility"=>"0.8.8", "multi_xml"=>"0.6.0", "nokogiri-happymapper"=>"0.8.1", "oauth"=>"0.5.4", "oauth2"=>"1.4.2", "oj"=>"3.9.2", "pagy"=>"3.6.0", "pg"=>"1.1.4", "pg_query"=>"1.1.0", "pghero"=>"2.3.0", "puma"=>"4.2.1", "pundit"=>"2.1.0", "rack-protection"=>"2.0.7", "rack-proxy"=>"0.6.5", "rainbow"=>"3.0.0", "redis"=>"4.1.3", "retriable"=>"3.1.2", "roboto"=>"1.0.1", "rolify"=>"5.2.0", "rubyzip"=>"2.0.0", "safely_block"=>"0.2.2", "sassc"=>"2.2.1", "tilt"=>"2.0.10", "sassc-rails"=>"2.1.2", "sass-rails"=>"6.0.0", "searchjoy"=>"0.4.2", "searchkick"=>"4.1.0", "sentry-raven"=>"2.12.0", "sidekiq"=>"6.0.2", "sidekiq-bulk"=>"0.2.0", "sidekiq-oj"=>"0.2.0", "sidekiq-unique-jobs"=>"6.0.15", "sorcery"=>"0.14.0", "sq_mini_racer"=>"0.2.5.0.1.beta2", "sqreen"=>"1.18.0", "turbolinks-source"=>"5.2.0", "turbolinks"=>"5.2.1", "typhoeus"=>"1.3.1", "voight_kampff"=>"1.1.3", "webpacker"=>"4.0.7"}, "platform"=>"ruby", "release"=>"194f1effbc1f6c7e284325ef97b102b3f6d839b2", "sdk"=>{"name"=>"raven-ruby", "version"=>"2.12.0"}, "server_name"=>"worker_a.1", "tags"=>{}, "timestamp"=>"2019-10-19T01:48:44", "transaction"=>"Sidekiq/PatentIngestWorker", "user"=>{}, "exception"=>{"values"=>[{"type"=>"PG::UniqueViolation", "value"=>"ERROR: duplicate key value violates unique constraint \"index_patents_on_publication_number\"\nDETAIL: Key (publication_number)=(AU2003206825B8) already exists.\n", "module"=>"PG", "stacktrace"=>{"frames"=>[{"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/util.rb", "function"=>"block in safe_thread", "lineno"=>24, "in_app"=>false, "pre_context"=>[" def safe_thread(name, &block)\n", " Thread.new do\n", " Thread.current.name = name\n"], "context_line"=>" watchdog(name, &block)\n", "post_context"=>[" end\n", " end\n", "\n"], "project_root"=>"/app", "filename"=>"sidekiq/util.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/util.rb", "function"=>"watchdog", "lineno"=>15, "in_app"=>false, "pre_context"=>[" include ExceptionHandler\n", "\n", " def watchdog(last_words)\n"], "context_line"=>" yield\n", "post_context"=>[" rescue Exception => ex\n", " handle_exception(ex, {context: last_words})\n", " raise ex\n"], "project_root"=>"/app", "filename"=>"sidekiq/util.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/processor.rb", "function"=>"run", "lineno"=>68, "in_app"=>false, "pre_context"=>[" private unless $TESTING\n", "\n", " def run\n"], "context_line"=>" process_one until @done\n", "post_context"=>[" @mgr.processor_stopped(self)\n", " rescue Sidekiq::Shutdown\n", " @mgr.processor_stopped(self)\n"], "project_root"=>"/app", "filename"=>"sidekiq/processor.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/processor.rb", "function"=>"process_one", "lineno"=>78, "in_app"=>false, "pre_context"=>["\n", " def process_one\n", " @job = fetch\n"], "context_line"=>" process(@job) if @job\n", "post_context"=>[" @job = nil\n", " end\n", "\n"], "project_root"=>"/app", "filename"=>"sidekiq/processor.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/processor.rb", "function"=>"process", "lineno"=>162, "in_app"=>false, "pre_context"=>["\n", " ack = false\n", " begin\n"], "context_line"=>" dispatch(job_hash, queue, jobstr) do |worker|\n", "post_context"=>[" Sidekiq.server_middleware.invoke(worker, job_hash, queue) do\n", " execute_job(worker, job_hash[\"args\"])\n", " end\n"], "project_root"=>"/app", "filename"=>"sidekiq/processor.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/processor.rb", "function"=>"dispatch", "lineno"=>123, "in_app"=>false, "pre_context"=>[" # we pass original String of JSON to respected methods\n", " # to re-parse it there if we need access to the original, untouched job\n", "\n"], "context_line"=>" @job_logger.prepare(job_hash) do\n", "post_context"=>[" @retrier.global(jobstr, queue) do\n", " @job_logger.call(job_hash, queue) do\n", " stats(jobstr, queue) do\n"], "project_root"=>"/app", "filename"=>"sidekiq/processor.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/job_logger.rb", "function"=>"prepare", "lineno"=>33, "in_app"=>false, "pre_context"=>[" Sidekiq::Context.with(job_hash_context(job_hash), &block)\n", " end\n", " else\n"], "context_line"=>" Sidekiq::Context.with(job_hash_context(job_hash), &block)\n", "post_context"=>[" end\n", " end\n", "\n"], "project_root"=>"/app", "filename"=>"sidekiq/job_logger.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/logger.rb", "function"=>"with", "lineno"=>10, "in_app"=>false, "pre_context"=>[" module Context\n", " def self.with(hash)\n", " current.merge!(hash)\n"], "context_line"=>" yield\n", "post_context"=>[" ensure\n", " hash.each_key { |key| current.delete(key) }\n", " end\n"], "project_root"=>"/app", "filename"=>"sidekiq/logger.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/processor.rb", "function"=>"block in dispatch", "lineno"=>124, "in_app"=>false, "pre_context"=>[" # to re-parse it there if we need access to the original, untouched job\n", "\n", " @job_logger.prepare(job_hash) do\n"], "context_line"=>" @retrier.global(jobstr, queue) do\n", "post_context"=>[" @job_logger.call(job_hash, queue) do\n", " stats(jobstr, queue) do\n", " # Rails 5 requires a Reloader to wrap code execution. In order to\n"], "project_root"=>"/app", "filename"=>"sidekiq/processor.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/job_retry.rb", "function"=>"global", "lineno"=>78, "in_app"=>false, "pre_context"=>[" # We want to be able to retry as much as possible so we don't\n", " # require the worker to be instantiated.\n", " def global(jobstr, queue)\n"], "context_line"=>" yield\n", "post_context"=>[" rescue Handled => ex\n", " raise ex\n", " rescue Sidekiq::Shutdown => ey\n"], "project_root"=>"/app", "filename"=>"sidekiq/job_retry.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/processor.rb", "function"=>"block (2 levels) in dispatch", "lineno"=>125, "in_app"=>false, "pre_context"=>["\n", " @job_logger.prepare(job_hash) do\n", " @retrier.global(jobstr, queue) do\n"], "context_line"=>" @job_logger.call(job_hash, queue) do\n", "post_context"=>[" stats(jobstr, queue) do\n", " # Rails 5 requires a Reloader to wrap code execution. In order to\n", " # constantize the worker and instantiate an instance, we have to call\n"], "project_root"=>"/app", "filename"=>"sidekiq/processor.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/job_logger.rb", "function"=>"call", "lineno"=>13, "in_app"=>false, "pre_context"=>[" start = ::Process.clock_gettime(::Process::CLOCK_MONOTONIC)\n", " @logger.info(\"start\")\n", "\n"], "context_line"=>" yield\n", "post_context"=>["\n", " with_elapsed_time_context(start) do\n", " @logger.info(\"done\")\n"], "project_root"=>"/app", "filename"=>"sidekiq/job_logger.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/processor.rb", "function"=>"block (3 levels) in dispatch", "lineno"=>126, "in_app"=>false, "pre_context"=>[" @job_logger.prepare(job_hash) do\n", " @retrier.global(jobstr, queue) do\n", " @job_logger.call(job_hash, queue) do\n"], "context_line"=>" stats(jobstr, queue) do\n", "post_context"=>[" # Rails 5 requires a Reloader to wrap code execution. In order to\n", " # constantize the worker and instantiate an instance, we have to call\n", " # the Reloader. It handles code loading, db connection management, etc.\n"], "project_root"=>"/app", "filename"=>"sidekiq/processor.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/processor.rb", "function"=>"stats", "lineno"=>257, "in_app"=>false, "pre_context"=>[" WORKER_STATE.set(tid, {queue: queue, payload: jobstr, run_at: Time.now.to_i})\n", "\n", " begin\n"], "context_line"=>" yield\n", "post_context"=>[" rescue Exception\n", " FAILURE.incr\n", " raise\n"], "project_root"=>"/app", "filename"=>"sidekiq/processor.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/processor.rb", "function"=>"block (4 levels) in dispatch", "lineno"=>131, "in_app"=>false, "pre_context"=>[" # constantize the worker and instantiate an instance, we have to call\n", " # the Reloader. It handles code loading, db connection management, etc.\n", " # Effectively this block denotes a \"unit of work\" to Rails.\n"], "context_line"=>" @reloader.call do\n", "post_context"=>[" klass = constantize(job_hash[\"class\"])\n", " worker = klass.new\n", " worker.jid = job_hash[\"jid\"]\n"], "project_root"=>"/app", "filename"=>"sidekiq/processor.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/rails.rb", "function"=>"call", "lineno"=>42, "in_app"=>false, "pre_context"=>[" end\n", "\n", " def call\n"], "context_line"=>" @app.reloader.wrap do\n", "post_context"=>[" yield\n", " end\n", " end\n"], "project_root"=>"/app", "filename"=>"sidekiq/rails.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.0/lib/active_support/reloader.rb", "function"=>"wrap", "lineno"=>71, "in_app"=>false, "pre_context"=>["\n", " # Run the supplied block as a work unit, reloading code as needed\n", " def self.wrap\n"], "context_line"=>" executor.wrap do\n", "post_context"=>[" super\n", " end\n", " end\n"], "project_root"=>"/app", "filename"=>"active_support/reloader.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.0/lib/active_support/execution_wrapper.rb", "function"=>"wrap", "lineno"=>88, "in_app"=>false, "pre_context"=>["\n", " instance = run!\n", " begin\n"], "context_line"=>" yield\n", "post_context"=>[" ensure\n", " instance.complete!\n", " end\n"], "project_root"=>"/app", "filename"=>"active_support/execution_wrapper.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.0/lib/active_support/reloader.rb", "function"=>"block in wrap", "lineno"=>72, "in_app"=>false, "pre_context"=>[" # Run the supplied block as a work unit, reloading code as needed\n", " def self.wrap\n", " executor.wrap do\n"], "context_line"=>" super\n", "post_context"=>[" end\n", " end\n", "\n"], "project_root"=>"/app", "filename"=>"active_support/reloader.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.0/lib/active_support/execution_wrapper.rb", "function"=>"wrap", "lineno"=>88, "in_app"=>false, "pre_context"=>["\n", " instance = run!\n", " begin\n"], "context_line"=>" yield\n", "post_context"=>[" ensure\n", " instance.complete!\n", " end\n"], "project_root"=>"/app", "filename"=>"active_support/execution_wrapper.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/rails.rb", "function"=>"block in call", "lineno"=>43, "in_app"=>false, "pre_context"=>["\n", " def call\n", " @app.reloader.wrap do\n"], "context_line"=>" yield\n", "post_context"=>[" end\n", " end\n", "\n"], "project_root"=>"/app", "filename"=>"sidekiq/rails.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/processor.rb", "function"=>"block (5 levels) in dispatch", "lineno"=>135, "in_app"=>false, "pre_context"=>[" klass = constantize(job_hash[\"class\"])\n", " worker = klass.new\n", " worker.jid = job_hash[\"jid\"]\n"], "context_line"=>" @retrier.local(worker, jobstr, queue) do\n", "post_context"=>[" yield worker\n", " end\n", " end\n"], "project_root"=>"/app", "filename"=>"sidekiq/processor.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/job_retry.rb", "function"=>"local", "lineno"=>111, "in_app"=>false, "pre_context"=>[" # Skip exception is unwrapped within Sidekiq::Processor#process before\n", " # calling the handle_exception handlers.\n", " def local(worker, jobstr, queue)\n"], "context_line"=>" yield\n", "post_context"=>[" rescue Handled => ex\n", " raise ex\n", " rescue Sidekiq::Shutdown => ey\n"], "project_root"=>"/app", "filename"=>"sidekiq/job_retry.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/processor.rb", "function"=>"block (6 levels) in dispatch", "lineno"=>136, "in_app"=>false, "pre_context"=>[" worker = klass.new\n", " worker.jid = job_hash[\"jid\"]\n", " @retrier.local(worker, jobstr, queue) do\n"], "context_line"=>" yield worker\n", "post_context"=>[" end\n", " end\n", " end\n"], "project_root"=>"/app", "filename"=>"sidekiq/processor.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/processor.rb", "function"=>"block in process", "lineno"=>163, "in_app"=>false, "pre_context"=>[" ack = false\n", " begin\n", " dispatch(job_hash, queue, jobstr) do |worker|\n"], "context_line"=>" Sidekiq.server_middleware.invoke(worker, job_hash, queue) do\n", "post_context"=>[" execute_job(worker, job_hash[\"args\"])\n", " end\n", " end\n"], "project_root"=>"/app", "filename"=>"sidekiq/processor.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/middleware/chain.rb", "function"=>"invoke", "lineno"=>143, "in_app"=>false, "pre_context"=>[" chain.shift.call(*args, &traverse_chain)\n", " end\n", " end\n"], "context_line"=>" traverse_chain.call\n", "post_context"=>[" end\n", " end\n", "\n"], "project_root"=>"/app", "filename"=>"sidekiq/middleware/chain.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/middleware/chain.rb", "function"=>"block in invoke", "lineno"=>140, "in_app"=>false, "pre_context"=>[" if chain.empty?\n", " yield\n", " else\n"], "context_line"=>" chain.shift.call(*args, &traverse_chain)\n", "post_context"=>[" end\n", " end\n", " traverse_chain.call\n"], "project_root"=>"/app", "filename"=>"sidekiq/middleware/chain.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/sentry-raven-2.12.0/lib/raven/integrations/sidekiq.rb", "function"=>"call", "lineno"=>9, "in_app"=>false, "pre_context"=>[" def call(_worker, job, queue)\n", " Raven.context.transaction.push \"Sidekiq/\#{job['class']}\"\n", " Raven.extra_context(:sidekiq => job.merge(\"queue\" => queue))\n"], "context_line"=>" yield\n", "post_context"=>[" Context.clear!\n", " BreadcrumbBuffer.clear!\n", " end\n"], "project_root"=>"/app", "filename"=>"raven/integrations/sidekiq.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/middleware/chain.rb", "function"=>"block in invoke", "lineno"=>140, "in_app"=>false, "pre_context"=>[" if chain.empty?\n", " yield\n", " else\n"], "context_line"=>" chain.shift.call(*args, &traverse_chain)\n", "post_context"=>[" end\n", " end\n", " traverse_chain.call\n"], "project_root"=>"/app", "filename"=>"sidekiq/middleware/chain.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-unique-jobs-6.0.15/lib/sidekiq_unique_jobs/server/middleware.rb", "function"=>"call", "lineno"=>29, "in_app"=>false, "pre_context"=>[" @worker_class = worker_class\n", " @item = item\n", " @queue = queue\n"], "context_line"=>" return yield if unique_disabled?\n", "post_context"=>["\n", " SidekiqUniqueJobs::Job.add_uniqueness(item)\n", " SidekiqUniqueJobs.with_context(logging_context(self.class, item)) do\n"], "project_root"=>"/app", "filename"=>"sidekiq_unique_jobs/server/middleware.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/middleware/chain.rb", "function"=>"block in invoke", "lineno"=>138, "in_app"=>false, "pre_context"=>[" chain = retrieve.dup\n", " traverse_chain = lambda do\n", " if chain.empty?\n"], "context_line"=>" yield\n", "post_context"=>[" else\n", " chain.shift.call(*args, &traverse_chain)\n", " end\n"], "project_root"=>"/app", "filename"=>"sidekiq/middleware/chain.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/processor.rb", "function"=>"block (2 levels) in process", "lineno"=>164, "in_app"=>false, "pre_context"=>[" begin\n", " dispatch(job_hash, queue, jobstr) do |worker|\n", " Sidekiq.server_middleware.invoke(worker, job_hash, queue) do\n"], "context_line"=>" execute_job(worker, job_hash[\"args\"])\n", "post_context"=>[" end\n", " end\n", " ack = true\n"], "project_root"=>"/app", "filename"=>"sidekiq/processor.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/processor.rb", "function"=>"execute_job", "lineno"=>196, "in_app"=>false, "pre_context"=>[" end\n", "\n", " def execute_job(worker, cloned_args)\n"], "context_line"=>" worker.perform(*cloned_args)\n", "post_context"=>[" end\n", "\n", " # Ruby doesn't provide atomic counters out of the box so we'll\n"], "project_root"=>"/app", "filename"=>"sidekiq/processor.rb"}, {"abs_path"=>"/app/app/workers/patent_ingest_worker.rb", "function"=>"perform", "lineno"=>5, "in_app"=>true, "pre_context"=>[" sidekiq_options queue: :patent_ingest\n", "\n", " def perform(type, request_id, xml)\n"], "context_line"=>" wrap_perform do\n", "post_context"=>[" Patent.ingest(type, request_id, xml)\n", " end\n", " end\n"], "project_root"=>"/app", "filename"=>"app/workers/patent_ingest_worker.rb"}, {"abs_path"=>"/app/app/workers/base_worker.rb", "function"=>"wrap_perform", "lineno"=>10, "in_app"=>true, "pre_context"=>["\n", " def wrap_perform(description = nil)\n", " logger.info \"[\#{self.class.name}] Executing worker! \#{description}\".squish\n"], "context_line"=>" yield\n", "post_context"=>[" end\n", "end\n", nil], "project_root"=>"/app", "filename"=>"app/workers/base_worker.rb"}, {"abs_path"=>"/app/app/workers/patent_ingest_worker.rb", "function"=>"block in perform", "lineno"=>6, "in_app"=>true, "pre_context"=>["\n", " def perform(type, request_id, xml)\n", " wrap_perform do\n"], "context_line"=>" Patent.ingest(type, request_id, xml)\n", "post_context"=>[" end\n", " end\n", "end\n"], "project_root"=>"/app", "filename"=>"app/workers/patent_ingest_worker.rb"}, {"abs_path"=>"/app/app/models/concerns/patent_concern/ingestable.rb", "function"=>"ingest", "lineno"=>16, "in_app"=>true, "pre_context"=>[" return\n", " end\n", "\n"], "context_line"=>" run_injest(type, request_id, epo_patent)\n", "post_context"=>[" end\n", "\n", " def parse_epo_xml(xml)\n"], "project_root"=>"/app", "filename"=>"app/models/concerns/patent_concern/ingestable.rb"}, {"abs_path"=>"/app/app/models/concerns/patent_concern/ingestable.rb", "function"=>"run_injest", "lineno"=>50, "in_app"=>true, "pre_context"=>[" if patent\n", " Ingest::Patents::Update.run!(request.merge(patent: patent))\n", " elsif epo_patent.create?\n"], "context_line"=>" Ingest::Patents::Create.run!(request)\n", "post_context"=>[" elsif epo_patent.delete? && patent\n", " Ingest::Patents::Delete.run!(request.merge(patent: patent))\n", " elsif epo_patent.amend? && patent.blank?\n"], "project_root"=>"/app", "filename"=>"app/models/concerns/patent_concern/ingestable.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/active_interaction-3.7.1/lib/active_interaction/concerns/runnable.rb", "function"=>"run!", "lineno"=>133, "in_app"=>false, "pre_context"=>[" #\n", " # @raise (see Runnable#run!)\n", " def run!(*args)\n"], "context_line"=>" new(*args).send(:run!)\n", "post_context"=>[" end\n", " end\n", " end\n"], "project_root"=>"/app", "filename"=>"active_interaction/concerns/runnable.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/active_interaction-3.7.1/lib/active_interaction/concerns/runnable.rb", "function"=>"run!", "lineno"=>98, "in_app"=>false, "pre_context"=>[" #\n", " # @raise [InvalidInteractionError] If there are validation errors.\n", " def run!\n"], "context_line"=>" run\n", "post_context"=>["\n", " unless valid?\n", " raise InvalidInteractionError, errors.full_messages.join(', ')\n"], "project_root"=>"/app", "filename"=>"active_interaction/concerns/runnable.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/active_interaction-3.7.1/lib/active_interaction/concerns/runnable.rb", "function"=>"run", "lineno"=>77, "in_app"=>false, "pre_context"=>[" def run # rubocop:disable MethodLength\n", " self.result =\n", " if valid?\n"], "context_line"=>" run_callbacks(:execute) do\n", "post_context"=>[" result_or_errors =\n", " begin\n", " execute\n"], "project_root"=>"/app", "filename"=>"active_interaction/concerns/runnable.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.0/lib/active_support/callbacks.rb", "function"=>"run_callbacks", "lineno"=>101, "in_app"=>false, "pre_context"=>[" callbacks = __callbacks[kind.to_sym]\n", "\n", " if callbacks.empty?\n"], "context_line"=>" yield if block_given?\n", "post_context"=>[" else\n", " env = Filters::Environment.new(self, false, nil)\n", " next_sequence = callbacks.compile\n"], "project_root"=>"/app", "filename"=>"active_support/callbacks.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/active_interaction-3.7.1/lib/active_interaction/concerns/runnable.rb", "function"=>"block in run", "lineno"=>80, "in_app"=>false, "pre_context"=>[" run_callbacks(:execute) do\n", " result_or_errors =\n", " begin\n"], "context_line"=>" execute\n", "post_context"=>[" rescue Interrupt => interrupt\n", " interrupt.errors\n", " end\n"], "project_root"=>"/app", "filename"=>"active_interaction/concerns/runnable.rb"}, {"abs_path"=>"/app/app/interactions/ingest/patents/create.rb", "function"=>"execute", "lineno"=>11, "in_app"=>true, "pre_context"=>[" logger.info \"[Ingest::Patents::Create] [\#{type}] Inside `execute` for: \#{epo_patent}\"\n", "\n", " begin\n"], "context_line"=>" transaction do\n", "post_context"=>[" create_patent!\n", " create_applicants!\n", " create_inventors!\n"], "project_root"=>"/app", "filename"=>"app/interactions/ingest/patents/create.rb"}, {"abs_path"=>"/app/app/interactions/base_interaction.rb", "function"=>"transaction", "lineno"=>7, "in_app"=>true, "pre_context"=>[" end\n", "\n", " def transaction\n"], "context_line"=>" ActiveRecord::Base.transaction { yield }\n", "post_context"=>[" end\n", "\n", " def transaction_rollback\n"], "project_root"=>"/app", "filename"=>"app/interactions/base_interaction.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.0/lib/active_record/transactions.rb", "function"=>"transaction", "lineno"=>212, "in_app"=>false, "pre_context"=>[" module ClassMethods\n", " # See the ConnectionAdapters::DatabaseStatements#transaction API docs.\n", " def transaction(options = {}, &block)\n"], "context_line"=>" connection.transaction(options, &block)\n", "post_context"=>[" end\n", "\n", " def before_commit(*args, &block) # :nodoc:\n"], "project_root"=>"/app", "filename"=>"active_record/transactions.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.0/lib/active_record/connection_adapters/abstract/database_statements.rb", "function"=>"transaction", "lineno"=>277, "in_app"=>false, "pre_context"=>[" end\n", " yield\n", " else\n"], "context_line"=>" transaction_manager.within_new_transaction(isolation: isolation, joinable: joinable) { yield }\n", "post_context"=>[" end\n", " rescue ActiveRecord::Rollback\n", " # rollbacks are silently swallowed\n"], "project_root"=>"/app", "filename"=>"active_record/connection_adapters/abstract/database_statements.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.0/lib/active_record/connection_adapters/abstract/transaction.rb", "function"=>"within_new_transaction", "lineno"=>278, "in_app"=>false, "pre_context"=>[" end\n", "\n", " def within_new_transaction(options = {})\n"], "context_line"=>" @connection.lock.synchronize do\n", "post_context"=>[" transaction = begin_transaction options\n", " yield\n", " rescue Exception => error\n"], "project_root"=>"/app", "filename"=>"active_record/connection_adapters/abstract/transaction.rb"}, {"abs_path"=>"/app/vendor/ruby-2.6.5/lib/ruby/2.6.0/monitor.rb", "function"=>"mon_synchronize", "lineno"=>235, "in_app"=>false, "pre_context"=>[" # it may break locking state.\n", " Thread.handle_interrupt(EXCEPTION_NEVER){ mon_enter }\n", " begin\n"], "context_line"=>" yield\n", "post_context"=>[" ensure\n", " Thread.handle_interrupt(EXCEPTION_NEVER){ mon_exit }\n", " end\n"], "project_root"=>"/app", "filename"=>"monitor.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.0/lib/active_record/connection_adapters/abstract/transaction.rb", "function"=>"block in within_new_transaction", "lineno"=>280, "in_app"=>false, "pre_context"=>[" def within_new_transaction(options = {})\n", " @connection.lock.synchronize do\n", " transaction = begin_transaction options\n"], "context_line"=>" yield\n", "post_context"=>[" rescue Exception => error\n", " if transaction\n", " rollback_transaction\n"], "project_root"=>"/app", "filename"=>"active_record/connection_adapters/abstract/transaction.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.0/lib/active_record/connection_adapters/abstract/database_statements.rb", "function"=>"block in transaction", "lineno"=>277, "in_app"=>false, "pre_context"=>[" end\n", " yield\n", " else\n"], "context_line"=>" transaction_manager.within_new_transaction(isolation: isolation, joinable: joinable) { yield }\n", "post_context"=>[" end\n", " rescue ActiveRecord::Rollback\n", " # rollbacks are silently swallowed\n"], "project_root"=>"/app", "filename"=>"active_record/connection_adapters/abstract/database_statements.rb"}, {"abs_path"=>"/app/app/interactions/base_interaction.rb", "function"=>"block in transaction", "lineno"=>7, "in_app"=>true, "pre_context"=>[" end\n", "\n", " def transaction\n"], "context_line"=>" ActiveRecord::Base.transaction { yield }\n", "post_context"=>[" end\n", "\n", " def transaction_rollback\n"], "project_root"=>"/app", "filename"=>"app/interactions/base_interaction.rb"}, {"abs_path"=>"/app/app/interactions/ingest/patents/create.rb", "function"=>"block in execute", "lineno"=>12, "in_app"=>true, "pre_context"=>["\n", " begin\n", " transaction do\n"], "context_line"=>" create_patent!\n", "post_context"=>[" create_applicants!\n", " create_inventors!\n", " create_citations!\n"], "project_root"=>"/app", "filename"=>"app/interactions/ingest/patents/create.rb"}, {"abs_path"=>"/app/app/interactions/ingest/patents/create.rb", "function"=>"create_patent!", "lineno"=>63, "in_app"=>true, "pre_context"=>[" Mobility.with_locale(epo_patent.title.lang) { @patent.title = epo_patent.title.content } if epo_patent.title\n", " Mobility.with_locale(epo_patent.abstract.lang) { @patent.abstract = epo_patent.abstract.content } if epo_patent.abstract\n", "\n"], "context_line"=>" @patent.save!\n", "post_context"=>[" end\n", "\n", " def create_classifications!\n"], "project_root"=>"/app", "filename"=>"app/interactions/ingest/patents/create.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.0/lib/active_record/suppressor.rb", "function"=>"save!", "lineno"=>48, "in_app"=>false, "pre_context"=>[" end\n", "\n", " def save!(*) # :nodoc:\n"], "context_line"=>" SuppressorRegistry.suppressed[self.class.name] ? true : super\n", "post_context"=>[" end\n", " end\n", "\n"], "project_root"=>"/app", "filename"=>"active_record/suppressor.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.0/lib/active_record/transactions.rb", "function"=>"save!", "lineno"=>319, "in_app"=>false, "pre_context"=>[" end\n", "\n", " def save!(*) #:nodoc:\n"], "context_line"=>" with_transaction_returning_status { super }\n", "post_context"=>[" end\n", "\n", " def touch(*) #:nodoc:\n"], "project_root"=>"/app", "filename"=>"active_record/transactions.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.0/lib/active_record/transactions.rb", "function"=>"with_transaction_returning_status", "lineno"=>366, "in_app"=>false, "pre_context"=>[" # instance.\n", " def with_transaction_returning_status\n", " status = nil\n"], "context_line"=>" self.class.transaction do\n", "post_context"=>[" if has_transactional_callbacks?\n", " add_to_transaction\n", " else\n"], "project_root"=>"/app", "filename"=>"active_record/transactions.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.0/lib/active_record/transactions.rb", "function"=>"transaction", "lineno"=>212, "in_app"=>false, "pre_context"=>[" module ClassMethods\n", " # See the ConnectionAdapters::DatabaseStatements#transaction API docs.\n", " def transaction(options = {}, &block)\n"], "context_line"=>" connection.transaction(options, &block)\n", "post_context"=>[" end\n", "\n", " def before_commit(*args, &block) # :nodoc:\n"], "project_root"=>"/app", "filename"=>"active_record/transactions.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.0/lib/active_record/connection_adapters/abstract/database_statements.rb", "function"=>"transaction", "lineno"=>275, "in_app"=>false, "pre_context"=>[" if isolation\n", " raise ActiveRecord::TransactionIsolationError, \"cannot set isolation when joining a transaction\"\n", " end\n"], "context_line"=>" yield\n", "post_context"=>[" else\n", " transaction_manager.within_new_transaction(isolation: isolation, joinable: joinable) { yield }\n", " end\n"], "project_root"=>"/app", "filename"=>"active_record/connection_adapters/abstract/database_statements.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.0/lib/active_record/transactions.rb", "function"=>"block in with_transaction_returning_status", "lineno"=>375, "in_app"=>false, "pre_context"=>[" end\n", " remember_transaction_record_state\n", "\n"], "context_line"=>" status = yield\n", "post_context"=>[" raise ActiveRecord::Rollback unless status\n", " end\n", " status\n"], "project_root"=>"/app", "filename"=>"active_record/transactions.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.0/lib/active_record/transactions.rb", "function"=>"block in save!", "lineno"=>319, "in_app"=>false, "pre_context"=>[" end\n", "\n", " def save!(*) #:nodoc:\n"], "context_line"=>" with_transaction_returning_status { super }\n", "post_context"=>[" end\n", "\n", " def touch(*) #:nodoc:\n"], "project_root"=>"/app", "filename"=>"active_record/transactions.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.0/lib/active_record/validations.rb", "function"=>"save!", "lineno"=>53, "in_app"=>false, "pre_context"=>[" # Attempts to save the record just like {ActiveRecord::Base#save}[rdoc-ref:Base#save] but\n", " # will raise an ActiveRecord::RecordInvalid exception instead of returning +false+ if the record is not valid.\n", " def save!(options = {})\n"], "context_line"=>" perform_validations(options) ? super : raise_validation_error\n", "post_context"=>[" end\n", "\n", " # Runs all the validations within the specified context. Returns +true+ if\n"], "project_root"=>"/app", "filename"=>"active_record/validations.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.0/lib/active_record/persistence.rb", "function"=>"save!", "lineno"=>503, "in_app"=>false, "pre_context"=>[" #\n", " # Unless an error is raised, returns true.\n", " def save!(*args, &block)\n"], "context_line"=>" create_or_update(*args, &block) || raise(RecordNotSaved.new(\"Failed to save the record\", self))\n", "post_context"=>[" end\n", "\n", " # Deletes the record in the database and freezes this instance to\n"], "project_root"=>"/app", "filename"=>"active_record/persistence.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.0/lib/active_record/timestamp.rb", "function"=>"create_or_update", "lineno"=>129, "in_app"=>false, "pre_context"=>["\n", " def create_or_update(touch: true, **)\n", " @_touch_record = touch\n"], "context_line"=>" super\n", "post_context"=>[" end\n", "\n", " def should_record_timestamps?\n"], "project_root"=>"/app", "filename"=>"active_record/timestamp.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.0/lib/active_record/callbacks.rb", "function"=>"create_or_update", "lineno"=>328, "in_app"=>false, "pre_context"=>[" private\n", "\n", " def create_or_update(**)\n"], "context_line"=>" _run_save_callbacks { super }\n", "post_context"=>[" end\n", "\n", " def _create_record\n"], "project_root"=>"/app", "filename"=>"active_record/callbacks.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.0/lib/active_support/callbacks.rb", "function"=>"_run_save_callbacks", "lineno"=>827, "in_app"=>false, "pre_context"=>["\n", " module_eval <<-RUBY, __FILE__, __LINE__ + 1\n", " def _run_\#{name}_callbacks(&block)\n"], "context_line"=>" run_callbacks \#{name.inspect}, &block\n", "post_context"=>[" end\n", "\n", " def self._\#{name}_callbacks\n"], "project_root"=>"/app", "filename"=>"active_support/callbacks.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.0/lib/active_support/callbacks.rb", "function"=>"run_callbacks", "lineno"=>135, "in_app"=>false, "pre_context"=>[" # Common case: no 'around' callbacks defined\n", " if next_sequence.final?\n", " next_sequence.invoke_before(env)\n"], "context_line"=>" env.value = !env.halted && (!block_given? || yield)\n", "post_context"=>[" next_sequence.invoke_after(env)\n", " env.value\n", " else\n"], "project_root"=>"/app", "filename"=>"active_support/callbacks.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.0/lib/active_record/callbacks.rb", "function"=>"block in create_or_update", "lineno"=>328, "in_app"=>false, "pre_context"=>[" private\n", "\n", " def create_or_update(**)\n"], "context_line"=>" _run_save_callbacks { super }\n", "post_context"=>[" end\n", "\n", " def _create_record\n"], "project_root"=>"/app", "filename"=>"active_record/callbacks.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.0/lib/active_record/persistence.rb", "function"=>"create_or_update", "lineno"=>906, "in_app"=>false, "pre_context"=>[" def create_or_update(**, &block)\n", " _raise_readonly_record_error if readonly?\n", " return false if destroyed?\n"], "context_line"=>" result = new_record? ? _create_record(&block) : _update_record(&block)\n", "post_context"=>[" result != false\n", " end\n", "\n"], "project_root"=>"/app", "filename"=>"active_record/persistence.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.0/lib/active_record/timestamp.rb", "function"=>"_create_record", "lineno"=>111, "in_app"=>false, "pre_context"=>[" end\n", " end\n", "\n"], "context_line"=>" super\n", "post_context"=>[" end\n", "\n", " def _update_record\n"], "project_root"=>"/app", "filename"=>"active_record/timestamp.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.0/lib/active_record/callbacks.rb", "function"=>"_create_record", "lineno"=>332, "in_app"=>false, "pre_context"=>[" end\n", "\n", " def _create_record\n"], "context_line"=>" _run_create_callbacks { super }\n", "post_context"=>[" end\n", "\n", " def _update_record\n"], "project_root"=>"/app", "filename"=>"active_record/callbacks.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.0/lib/active_support/callbacks.rb", "function"=>"_run_create_callbacks", "lineno"=>827, "in_app"=>false, "pre_context"=>["\n", " module_eval <<-RUBY, __FILE__, __LINE__ + 1\n", " def _run_\#{name}_callbacks(&block)\n"], "context_line"=>" run_callbacks \#{name.inspect}, &block\n", "post_context"=>[" end\n", "\n", " def self._\#{name}_callbacks\n"], "project_root"=>"/app", "filename"=>"active_support/callbacks.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.0/lib/active_support/callbacks.rb", "function"=>"run_callbacks", "lineno"=>135, "in_app"=>false, "pre_context"=>[" # Common case: no 'around' callbacks defined\n", " if next_sequence.final?\n", " next_sequence.invoke_before(env)\n"], "context_line"=>" env.value = !env.halted && (!block_given? || yield)\n", "post_context"=>[" next_sequence.invoke_after(env)\n", " env.value\n", " else\n"], "project_root"=>"/app", "filename"=>"active_support/callbacks.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.0/lib/active_record/callbacks.rb", "function"=>"block in _create_record", "lineno"=>332, "in_app"=>false, "pre_context"=>[" end\n", "\n", " def _create_record\n"], "context_line"=>" _run_create_callbacks { super }\n", "post_context"=>[" end\n", "\n", " def _update_record\n"], "project_root"=>"/app", "filename"=>"active_record/callbacks.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.0/lib/active_record/attribute_methods/dirty.rb", "function"=>"_create_record", "lineno"=>211, "in_app"=>false, "pre_context"=>[" end\n", "\n", " def _create_record(attribute_names = attribute_names_for_partial_writes)\n"], "context_line"=>" id = super\n", "post_context"=>[" changes_applied\n", " id\n", " end\n"], "project_root"=>"/app", "filename"=>"active_record/attribute_methods/dirty.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.0/lib/active_record/locking/optimistic.rb", "function"=>"_create_record", "lineno"=>70, "in_app"=>false, "pre_context"=>[" # a change from the default, since the database might have no default\n", " attribute_names |= [self.class.locking_column]\n", " end\n"], "context_line"=>" super\n", "post_context"=>[" end\n", "\n", " def _touch_row(attribute_names, time)\n"], "project_root"=>"/app", "filename"=>"active_record/locking/optimistic.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.0/lib/active_record/counter_cache.rb", "function"=>"_create_record", "lineno"=>163, "in_app"=>false, "pre_context"=>["\n", " private\n", " def _create_record(attribute_names = self.attribute_names)\n"], "context_line"=>" id = super\n", "post_context"=>["\n", " each_counter_cached_associations do |association|\n", " association.increment_counters\n"], "project_root"=>"/app", "filename"=>"active_record/counter_cache.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.0/lib/active_record/persistence.rb", "function"=>"_create_record", "lineno"=>933, "in_app"=>false, "pre_context"=>[" def _create_record(attribute_names = self.attribute_names)\n", " attribute_names = attributes_for_create(attribute_names)\n", "\n"], "context_line"=>" new_id = self.class._insert_record(\n", "post_context"=>[" attributes_with_values(attribute_names)\n", " )\n", "\n"], "project_root"=>"/app", "filename"=>"active_record/persistence.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.0/lib/active_record/persistence.rb", "function"=>"_insert_record", "lineno"=>375, "in_app"=>false, "pre_context"=>[" im = arel_table.compile_insert(_substitute_values(values))\n", " end\n", "\n"], "context_line"=>" connection.insert(im, \"\#{self} Create\", primary_key || false, primary_key_value)\n", "post_context"=>[" end\n", "\n", " def _update_record(values, constraints) # :nodoc:\n"], "project_root"=>"/app", "filename"=>"active_record/persistence.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.0/lib/active_record/connection_adapters/abstract/query_cache.rb", "function"=>"insert", "lineno"=>22, "in_app"=>false, "pre_context"=>[" base.class_eval <<-end_code, __FILE__, __LINE__ + 1\n", " def \#{method_name}(*)\n", " ActiveRecord::Base.clear_query_caches_for_current_thread if @query_cache_enabled\n"], "context_line"=>" super\n", "post_context"=>[" end\n", " end_code\n", " end\n"], "project_root"=>"/app", "filename"=>"active_record/connection_adapters/abstract/query_cache.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.0/lib/active_record/connection_adapters/abstract/database_statements.rb", "function"=>"insert", "lineno"=>162, "in_app"=>false, "pre_context"=>[" # passed in as +id_value+.\n", " def insert(arel, name = nil, pk = nil, id_value = nil, sequence_name = nil, binds = [])\n", " sql, binds = to_sql_and_binds(arel, binds)\n"], "context_line"=>" value = exec_insert(sql, name, binds, pk, sequence_name)\n", "post_context"=>[" id_value || last_inserted_id(value)\n", " end\n", " alias create insert\n"], "project_root"=>"/app", "filename"=>"active_record/connection_adapters/abstract/database_statements.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.0/lib/active_record/connection_adapters/postgresql/database_statements.rb", "function"=>"exec_insert", "lineno"=>130, "in_app"=>false, "pre_context"=>["\n", " def exec_insert(sql, name = nil, binds = [], pk = nil, sequence_name = nil)\n", " if use_insert_returning? || pk == false\n"], "context_line"=>" super\n", "post_context"=>[" else\n", " result = exec_query(sql, name, binds)\n", " unless sequence_name\n"], "project_root"=>"/app", "filename"=>"active_record/connection_adapters/postgresql/database_statements.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.0/lib/active_record/connection_adapters/abstract/database_statements.rb", "function"=>"exec_insert", "lineno"=>135, "in_app"=>false, "pre_context"=>[" # the executed +sql+ statement.\n", " def exec_insert(sql, name = nil, binds = [], pk = nil, sequence_name = nil)\n", " sql, binds = sql_for_insert(sql, pk, binds)\n"], "context_line"=>" exec_query(sql, name, binds)\n", "post_context"=>[" end\n", "\n", " # Executes delete +sql+ statement in the context of this connection using\n"], "project_root"=>"/app", "filename"=>"active_record/connection_adapters/abstract/database_statements.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.0/lib/active_record/connection_adapters/postgresql/database_statements.rb", "function"=>"exec_query", "lineno"=>96, "in_app"=>false, "pre_context"=>[" end\n", "\n", " def exec_query(sql, name = \"SQL\", binds = [], prepare: false)\n"], "context_line"=>" execute_and_clear(sql, name, binds, prepare: prepare) do |result|\n", "post_context"=>[" types = {}\n", " fields = result.fields\n", " fields.each_with_index do |fname, i|\n"], "project_root"=>"/app", "filename"=>"active_record/connection_adapters/postgresql/database_statements.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.0/lib/active_record/connection_adapters/postgresql_adapter.rb", "function"=>"execute_and_clear", "lineno"=>649, "in_app"=>false, "pre_context"=>[" if without_prepared_statement?(binds)\n", " result = exec_no_cache(sql, name, [])\n", " elsif !prepare\n"], "context_line"=>" result = exec_no_cache(sql, name, binds)\n", "post_context"=>[" else\n", " result = exec_cache(sql, name, binds)\n", " end\n"], "project_root"=>"/app", "filename"=>"active_record/connection_adapters/postgresql_adapter.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.0/lib/active_record/connection_adapters/postgresql_adapter.rb", "function"=>"exec_no_cache", "lineno"=>666, "in_app"=>false, "pre_context"=>[" update_typemap_for_default_timezone\n", "\n", " type_casted_binds = type_casted_binds(binds)\n"], "context_line"=>" log(sql, name, binds, type_casted_binds) do\n", "post_context"=>[" ActiveSupport::Dependencies.interlock.permit_concurrent_loads do\n", " @connection.exec_params(sql, type_casted_binds)\n", " end\n"], "project_root"=>"/app", "filename"=>"active_record/connection_adapters/postgresql_adapter.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.0/lib/active_record/connection_adapters/abstract_adapter.rb", "function"=>"log", "lineno"=>697, "in_app"=>false, "pre_context"=>[" end\n", "\n", " def log(sql, name = \"SQL\", binds = [], type_casted_binds = [], statement_name = nil) # :doc:\n"], "context_line"=>" @instrumenter.instrument(\n", "post_context"=>[" \"sql.active_record\",\n", " sql: sql,\n", " name: name,\n"], "project_root"=>"/app", "filename"=>"active_record/connection_adapters/abstract_adapter.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.0/lib/active_support/notifications/instrumenter.rb", "function"=>"instrument", "lineno"=>24, "in_app"=>false, "pre_context"=>[" # some of the listeners might have state\n", " listeners_state = start name, payload\n", " begin\n"], "context_line"=>" yield payload if block_given?\n", "post_context"=>[" rescue Exception => e\n", " payload[:exception] = [e.class.name, e.message]\n", " payload[:exception_object] = e\n"], "project_root"=>"/app", "filename"=>"active_support/notifications/instrumenter.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.0/lib/active_record/connection_adapters/abstract_adapter.rb", "function"=>"block in log", "lineno"=>706, "in_app"=>false, "pre_context"=>[" statement_name: statement_name,\n", " connection_id: object_id,\n", " connection: self) do\n"], "context_line"=>" @lock.synchronize do\n", "post_context"=>[" yield\n", " end\n", " rescue => e\n"], "project_root"=>"/app", "filename"=>"active_record/connection_adapters/abstract_adapter.rb"}, {"abs_path"=>"/app/vendor/ruby-2.6.5/lib/ruby/2.6.0/monitor.rb", "function"=>"mon_synchronize", "lineno"=>235, "in_app"=>false, "pre_context"=>[" # it may break locking state.\n", " Thread.handle_interrupt(EXCEPTION_NEVER){ mon_enter }\n", " begin\n"], "context_line"=>" yield\n", "post_context"=>[" ensure\n", " Thread.handle_interrupt(EXCEPTION_NEVER){ mon_exit }\n", " end\n"], "project_root"=>"/app", "filename"=>"monitor.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.0/lib/active_record/connection_adapters/abstract_adapter.rb", "function"=>"block (2 levels) in log", "lineno"=>707, "in_app"=>false, "pre_context"=>[" connection_id: object_id,\n", " connection: self) do\n", " @lock.synchronize do\n"], "context_line"=>" yield\n", "post_context"=>[" end\n", " rescue => e\n", " raise translate_exception_class(e, sql, binds)\n"], "project_root"=>"/app", "filename"=>"active_record/connection_adapters/abstract_adapter.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.0/lib/active_record/connection_adapters/postgresql_adapter.rb", "function"=>"block in exec_no_cache", "lineno"=>667, "in_app"=>false, "pre_context"=>["\n", " type_casted_binds = type_casted_binds(binds)\n", " log(sql, name, binds, type_casted_binds) do\n"], "context_line"=>" ActiveSupport::Dependencies.interlock.permit_concurrent_loads do\n", "post_context"=>[" @connection.exec_params(sql, type_casted_binds)\n", " end\n", " end\n"], "project_root"=>"/app", "filename"=>"active_record/connection_adapters/postgresql_adapter.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.0/lib/active_support/dependencies/interlock.rb", "function"=>"permit_concurrent_loads", "lineno"=>47, "in_app"=>false, "pre_context"=>[" end\n", "\n", " def permit_concurrent_loads\n"], "context_line"=>" @lock.yield_shares(compatible: [:load]) do\n", "post_context"=>[" yield\n", " end\n", " end\n"], "project_root"=>"/app", "filename"=>"active_support/dependencies/interlock.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.0/lib/active_support/concurrency/share_lock.rb", "function"=>"yield_shares", "lineno"=>187, "in_app"=>false, "pre_context"=>[" end\n", "\n", " begin\n"], "context_line"=>" yield\n", "post_context"=>[" ensure\n", " synchronize do\n", " wait_for(:yield_shares) { @exclusive_thread && @exclusive_thread != Thread.current }\n"], "project_root"=>"/app", "filename"=>"active_support/concurrency/share_lock.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.0/lib/active_support/dependencies/interlock.rb", "function"=>"block in permit_concurrent_loads", "lineno"=>48, "in_app"=>false, "pre_context"=>["\n", " def permit_concurrent_loads\n", " @lock.yield_shares(compatible: [:load]) do\n"], "context_line"=>" yield\n", "post_context"=>[" end\n", " end\n", "\n"], "project_root"=>"/app", "filename"=>"active_support/dependencies/interlock.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.0/lib/active_record/connection_adapters/postgresql_adapter.rb", "function"=>"block (2 levels) in exec_no_cache", "lineno"=>668, "in_app"=>false, "pre_context"=>[" type_casted_binds = type_casted_binds(binds)\n", " log(sql, name, binds, type_casted_binds) do\n", " ActiveSupport::Dependencies.interlock.permit_concurrent_loads do\n"], "context_line"=>" @connection.exec_params(sql, type_casted_binds)\n", "post_context"=>[" end\n", " end\n", " end\n"], "project_root"=>"/app", "filename"=>"active_record/connection_adapters/postgresql_adapter.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.0/lib/active_record/connection_adapters/postgresql_adapter.rb", "function"=>"async_exec_params", "lineno"=>668, "in_app"=>false, "pre_context"=>[" type_casted_binds = type_casted_binds(binds)\n", " log(sql, name, binds, type_casted_binds) do\n", " ActiveSupport::Dependencies.interlock.permit_concurrent_loads do\n"], "context_line"=>" @connection.exec_params(sql, type_casted_binds)\n", "post_context"=>[" end\n", " end\n", " end\n"], "project_root"=>"/app", "filename"=>"active_record/connection_adapters/postgresql_adapter.rb"}]}}, {"type"=>"ActiveRecord::RecordNotUnique", "value"=>"PG::UniqueViolation: ERROR: duplicate key value violates unique constraint \"index_patents_on_publication_number\"\nDETAIL: Key (publication_number)=(AU2003206825B8) already exists.\n", "module"=>"ActiveRecord", "stacktrace"=>nil}]}, "logentry"=>{"params"=>nil, "message"=>"PG::UniqueViolation: ERROR: duplicate key value violates unique constraint \"index_patents_on_publication_number\"\nDETAIL: Key (publication_number)=(AU2003206825B8) already exists.\n"}}], "retry"=>true, "queue"=>"default", "backtrace"=>true, "jid"=>"dc592e52309f3e00e300924a", "created_at"=>1571449724.19329, "enqueued_at"=>1571459752.233215, "error_message"=>"undefined method `[]' for nil:NilClass", "error_class"=>"NoMethodError", "failed_at"=>1571449728.058785, "retry_count"=>1, "error_backtrace"=>"eJzNl+1u2jAUhm8F9c82aWDikJT2VqbJc5JD8DBxeuJAe/c7ttMuIKGCcLT9\nQAp2/D4+n3Z+PDDZtuwATWWQFX1TaWDYF2+ML/LFktWw71gHjcW3OUp6bc4X\nCacJrQrmB1ipFc0vsHhep8+qmf2qwYo9dJ2sQWzQ7AW8ltBaZZovD9+j8p4+\neNrU78zIkCTJPGUjlYZK0LIqMiFdeYBTFkBTNoq+ajormxK8o5JPCE567qSz\noPCXtDF4lFjJQnslni4vSbnf0eAO8H1rIvx16x79qhaQ9PbX2qcq2KmXOQ0s\nuN/XMMJaNCUF23jp5Cn34vAKZW9B/DZFZEAeAlRoU+5mX/lMk+G6+zajweHF\nu4F7VdEC8jSwcitV47npesSlJ9UczO7q/B5YfaNeepiTVzrPTbIxWIRp5zQX\nNTwAjvbiIx6KrJRaT2PlanmPlZ/UgIUapWs9H9tyzP/bpBtZoelGQpwlfnpq\nR6xsP6Wk+bi88nF5VaprpS23dxMpvwUCpUpo6aEfElDenwFnxmRjY7JJjEE6\nijpHW53F54aMlqVVB+j6tjVoPSMUThgXwwQLTZXqRxyRREMzX4e+5Ebi0hC0\nkdVwYvBT2+LT/qFtya2Qa5KBx+tqZzmdjHN6NUlOnxB5Fu4LdIOxsbsNP+k2\n6WTdhm6kNQz+myowPLt4MZmmcz6G6qi1KaJ3Tr46LfhoFowiEc7lo7KxY5yG\nGLcILR3PsT0TxKeptSTnw9YnONuHfBnGhGkiuyYP+thf/Wl5UZdOAu39EWrq\n6DxdmTqa7nl6d3IDwm4RJH1P/vwDeE9JnQ==\n", "retried_at"=>1571456409.89409}, "jobstr"=>"{\"class\":\"SentryWorker\",\"args\":[{\"environment\":\"staging\",\"event_id\":\"878a3a904a284de583643a6aca4d2a03\",\"extra\":{\"server\":{\"os\":{\"name\":\"Linux\",\"version\":\"#52-Ubuntu SMP Wed Jun 26 08:47:35 UTC 2019\",\"build\":\"4.4.0-1048-aws\",\"kernel_version\":\"Linux f46ec913-0282-4a5b-991c-c73183847da8 4.4.0-1048-aws #52-Ubuntu SMP Wed Jun 26 08:47:35 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux\"},\"runtime\":{\"name\":\"ruby\",\"version\":\"ruby 2.6.5p114 (2019-10-01 revision 67812) [x86_64-linux]\"}},\"sidekiq\":{\"context\":\"Job raised exception\",\"job\":{\"class\":\"PatentIngestWorker\",\"args\":[\"seed\",\"4ad8d32f77\",\"<exchange-document country=\\\"AU\\\" doc-number=\\\"2003206825\\\" kind=\\\"B8\\\" doc-id=\\\"382940022\\\" date-publ=\\\"20080221\\\" family-id=\\\"27675599\\\" is-representative=\\\"NO\\\" date-of-last-exchange=\\\"20190131\\\" date-added-docdb=\\\"20080407\\\" originating-office=\\\"EP\\\">\\n <bibliographic-data>\\n <publication-reference data-format=\\\"docdb\\\">\\n <document-id>\\n <country>AU</country>\\n <doc-number>2003206825</doc-number>\\n <kind>B8</kind>\\n <date>20080221</date>\\n </document-id>\\n </publication-reference>\\n <publication-reference data-format=\\\"epodoc\\\">\\n <document-id>\\n <doc-number>AU2003206825B</doc-number>\\n </document-id>\\n </publication-reference>\\n <classifications-ipcr>\\n <classification-ipcr sequence=\\\"1\\\">\\n <text>C07D 213/57 20060101AFI20060310BMJP </text>\\n </classification-ipcr>\\n <classification-ipcr sequence=\\\"2\\\">\\n <text>A61K 8/00 20060101ALI20060310BMJP </text>\\n </classification-ipcr>\\n <classification-ipcr sequence=\\\"3\\\">\\n <text>A61K 8/49 20060101ALI20051008BMEP </text>\\n </classification-ipcr>\\n <classification-ipcr sequence=\\\"4\\\">\\n <text>A61Q 5/02 20060101ALI20060310BMJP </text>\\n </classification-ipcr>\\n <classification-ipcr sequence=\\\"5\\\">\\n <text>A61Q 5/12 20060101ALI20060310BMJP </text>\\n </classification-ipcr>\\n <classification-ipcr sequence=\\\"6\\\">\\n <text>A61Q 17/04 20060101ALI20051008BMEP </text>\\n </classification-ipcr>\\n <classification-ipcr sequence=\\\"7\\\">\\n <text>C07D 309/34 20060101ALI20060310BMJP </text>\\n </classification-ipcr>\\n <classification-ipcr sequence=\\\"8\\\">\\n <text>C09K 3/00 20060101ALI20060310BMJP </text>\\n </classification-ipcr>\\n </classifications-ipcr>\\n <patent-classifications>\\n <patent-classification sequence=\\\"1\\\">\\n <classification-scheme office=\\\"EP\\\" scheme=\\\"CPC\\\">\\n <date>20130101</date>\\n </classification-scheme>\\n <classification-symbol>A61Q 17/04 </classification-symbol>\\n <symbol-position>F</symbol-position>\\n <classification-value>I</classification-value>\\n <classification-status>B</classification-status>\\n <classification-data-source>H</classification-data-source>\\n <action-date>\\n <date>20130101</date>\\n </action-date>\\n </patent-classification>\\n <patent-classification sequence=\\\"2\\\">\\n <classification-scheme office=\\\"EP\\\" scheme=\\\"CPC\\\">\\n <date>20130101</date>\\n </classification-scheme>\\n <classification-symbol>A61K 8/4926 </classification-symbol>\\n <symbol-position>L</symbol-position>\\n <classification-value>I</classification-value>\\n <classification-status>B</classification-status>\\n <classification-data-source>H</classification-data-source>\\n <action-date>\\n <date>20130101</date>\\n </action-date>\\n </patent-classification>\\n <patent-classification sequence=\\\"3\\\">\\n <classification-scheme office=\\\"EP\\\" scheme=\\\"CPC\\\">\\n <date>20130101</date>\\n </classification-scheme>\\n <classification-symbol>A61K 8/498 </classification-symbol>\\n <symbol-position>L</symbol-position>\\n <classification-value>I</classification-value>\\n <classification-status>B</classification-status>\\n <classification-data-source>H</classification-data-source>\\n <action-date>\\n <date>20130101</date>\\n </action-date>\\n </patent-classification>\\n </patent-classifications>\\n <application-reference is-representative=\\\"NO\\\" doc-id=\\\"2578143\\\" data-format=\\\"docdb\\\">\\n <document-id>\\n <country>AU</country>\\n <doc-number>2003206825</doc-number>\\n <kind>A</kind>\\n <date>20030204</date>\\n </document-id>\\n </application-reference>\\n <application-reference data-format=\\\"epodoc\\\">\\n <document-id>\\n <doc-number>AU20030206825</doc-number>\\n </document-id>\\n </application-reference>\\n <application-reference data-format=\\\"original\\\">\\n <document-id>\\n <doc-number>2003206825</doc-number>\\n </document-id>\\n </application-reference>\\n <priority-claims>\\n <priority-claim sequence=\\\"1\\\" data-format=\\\"docdb\\\">\\n <document-id doc-id=\\\"267967684\\\">\\n <country>EP</country>\\n <doc-number>02002093</doc-number>\\n <kind>A</kind>\\n <date>20020212</date>\\n </document-id>\\n <priority-active-indicator>Y</priority-active-indicator>\\n </priority-claim>\\n <priority-claim sequence=\\\"1\\\" data-format=\\\"epodoc\\\">\\n <document-id>\\n <doc-number>EP20020002093</doc-number>\\n </document-id>\\n </priority-claim>\\n <priority-claim sequence=\\\"2\\\" data-format=\\\"docdb\\\">\\n <document-id doc-id=\\\"15634271\\\">\\n <country>EP</country>\\n <doc-number>0301049</doc-number>\\n <kind>W</kind>\\n <date>20030204</date>\\n </document-id>\\n <priority-linkage-type>W</priority-linkage-type>\\n <priority-active-indicator>N</priority-active-indicator>\\n </priority-claim>\\n <priority-claim sequence=\\\"2\\\" data-format=\\\"epodoc\\\">\\n <document-id>\\n <doc-number>WO2003EP01049</doc-number>\\n </document-id>\\n </priority-claim>\\n <priority-claim sequence=\\\"1\\\" data-format=\\\"original\\\">\\n <document-id>\\n <doc-number>02002093.9</doc-number>\\n </document-id>\\n </priority-claim>\\n <priority-claim sequence=\\\"2\\\" data-format=\\\"original\\\">\\n <document-id>\\n <doc-number>WO03/068183</doc-number>\\n </document-id>\\n </priority-claim>\\n </priority-claims>\\n <parties>\\n <applicants>\\n <applicant sequence=\\\"1\\\" data-format=\\\"docdb\\\">\\n <applicant-name>\\n <name>DSM IP ASSETS BV</name>\\n </applicant-name>\\n </applicant>\\n <applicant sequence=\\\"1\\\" data-format=\\\"docdba\\\">\\n <applicant-name>\\n <name>DSM IP ASSETS B.V.</name>\\n </applicant-name>\\n </applicant>\\n </applicants>\\n <inventors>\\n <inventor sequence=\\\"1\\\" data-format=\\\"docdb\\\">\\n <inventor-name>\\n <name>BERG-SCHULTZ KATJA</name>\\n </inventor-name>\\n </inventor>\\n <inventor sequence=\\\"1\\\" data-format=\\\"docdba\\\">\\n <inventor-name>\\n <name>KATJA BERG-SCHULTZ</name>\\n </inventor-name>\\n </inventor>\\n </inventors>\\n </parties>\\n <invention-title lang=\\\"en\\\" data-format=\\\"docdba\\\">Sunscreen compositions as well as dihydropyridines and dihydropyranes</invention-title>\\n <dates-of-public-availability>\\n <printed-with-grant>\\n <document-id>\\n <date>20080221</date>\\n </document-id>\\n </printed-with-grant>\\n </dates-of-public-availability>\\n </bibliographic-data>\\n</exchange-document>\"],\"retry\":true,\"queue\":\"patent_ingest\",\"backtrace\":true,\"jid\":\"22c9ec664bdb65eb811e8e19\",\"created_at\":1570072201.99408,\"enqueued_at\":1571449722.707494,\"error_message\":\"PG::UniqueViolation: ERROR: duplicate key value violates unique constraint \\\"index_patents_on_publication_number\\\"\\nDETAIL: Key (publication_number)=(AU2003206825B8) already exists.\\n\",\"error_class\":\"ActiveRecord::RecordNotUnique\",\"failed_at\":1570731698.815898,\"retry_count\":6,\"error_backtrace\":\"eJzVWtty4ygQ/ZVsXiZbtYksydf5laktFknEZiKBAshe79dvc7GClHF8kXAy\\nD66yQXBON4emG/nHfYTrOtoSVnARZQ0rShKJJttHydP8aRKtSSUjnCu6JYLk\\nXBSP0ArtJc1cM7LtUc4ZI9DCGcIFrhURMqq5VGtB5Gt5aHsS2ff5fPmdsrt/\\nsNyzHJF/SY5qLHAlv93/9Yl0spLnL3cPyV1JtqSUf95BoyHHOMpxviEX0ZNN\\nXXOh3vNzHVFBapiGsJwSGVEGZDS+JjT1+cC3moiKKgQW5Y0QhClUclxc5q2T\\ndNrZ830kN1gQdKATLxeGz56SskCmb2TsD1xhocfwwIh6WXTX53qRXMEJZ1IJ\\neMxntJgsjiq45Os+Jc3lUXOZGUyPWsUZVdzMmaQzMyc0Ib1PNwL6/vsk8+Zd\\nh//CpmECZFzRZ5pjzUUrEDg0FWEOP5ka+Lfmz3DCfGXX+FLbR5S9XYWbqv0I\\nlemqpdIogjArUF4SLG5HJyqwwhmWoCGFFdGqkJraynPSa0PE/lZaOUYodvvY\\nMAIJExFcvqe9FKeTW5M66ad5ctjlt2RjNGL3kgk1oUjACSqpVHDGGpx0YVXh\\nnO+eCgi4SlMLmAsCbg8AmPNGB+w3X8bz0JD6PKJsHfFa0QqMpbk9rgLDYqUE\\nzXTgq4ja8EJGBRVqb/QTx6HdjMsyw/mL2TRpmnRP5gG4pzNUH/kQ1kTDUNsR\\nEG+Z2OMXGUBr5HW41/g33HKCcAkEwqo2Tg2unn5UcJmdw+MCNTXE53HTio5D\\nk15tNQj5N5KsxNubCNb5N+SCdiWbrIID9kQ7m9hzRbv0jzFxtrikha1BDE4g\\nGEg8mMR5i5PGq+6eCI/oso8WcUfVBnlPwUDVCAZnq8nSmuCV/qnsMHGMPY4h\\nHZTEyS3hUlfa3XQZjslwdPXp4AjViLT3Gu5yrYuiP+beyfGBH2uIMVENGgAF\\nRDa6mNIz9cON7b9mnriXOLlS9vhMRpRei8k0u3MEUst1++ULcPMwDafl5H3U\\noQwxskMf0PsdbsvembpYthv6tIWfJY4vEEwv2GZnDT++32P/xuoic306j+nT\\n4in2jfY6zR0+EUADMj6Gs9Ig91UPfSGT3Ek8MMkdaK7T1qVWDkRdLQ+olx1d\\nA2Fjd6vSwdWfiheklG+DrCCR++1kephlNmmXjLKf0HH9VPHc3V+t+9PsuHgx\\nl4N2uH0C2VZzsL575/XMRfXLKcwefRsZW/o7gWv00bBjyLPDK6bOyI9XT9KC\\nvNBXsykSs2SuJaoFz9tkI/aug/V9zU+ejQwwnx598+MeHAxY0QIG7LAgUb7B\\nlFnh9epoyrb85dy4dsBqGH1tyCN4RRrceOYDI9utnQZDiIDA73Exkd3VfhBn\\nwlg5nQyxEtQm9o8CMk0GCUScuPBpGsyxsRbujZMjYSLJlzbpQqzURYNRIHrC\\nT3sBYyS1d1FSPyw9zP3tVVAJESXfDEYEfetCS+z9KzgAxMMV0DPGr7ofZkGM\\nEZiWJhGY9tbnAkWfmXfYoKozTx36axvMl8v2MBgXTRD9lwP3QrpXvI2P9om2\\nxZeCnCOGZLyo1tN07Gt6GkTTHcRkZhNMXdKMHW2STrRJg0Wbkq/XLndKQy1M\\nMjuamISJnK7kXZc8Gz1yJtPuhh/NAm8lJm3FPvIauxqhFqSG43lsz9jJw+y1\\nwzv5IGe704trQ5yN7Jp5WxIOnhdOgtL4w+6pnfZ0cfb/gE7P25e3xM8EqY0g\\nuPh2//f/50PJzg==\\n\",\"retried_at\":1571437462.206649},\"jobstr\":\"{\\\"class\\\":\\\"PatentIngestWorker\\\",\\\"args\\\":[\\\"seed\\\",\\\"4ad8d32f77\\\",\\\"<exchange-document country=\\\\\\\"AU\\\\\\\" doc-number=\\\\\\\"2003206825\\\\\\\" kind=\\\\\\\"B8\\\\\\\" doc-id=\\\\\\\"382940022\\\\\\\" date-publ=\\\\\\\"20080221\\\\\\\" family-id=\\\\\\\"27675599\\\\\\\" is-representative=\\\\\\\"NO\\\\\\\" date-of-last-exchange=\\\\\\\"20190131\\\\\\\" date-added-docdb=\\\\\\\"20080407\\\\\\\" originating-office=\\\\\\\"EP\\\\\\\">\\\\n <bibliographic-data>\\\\n <publication-reference data-format=\\\\\\\"docdb\\\\\\\">\\\\n <document-id>\\\\n <country>AU</country>\\\\n <doc-number>2003206825</doc-number>\\\\n <kind>B8</kind>\\\\n <date>20080221</date>\\\\n </document-id>\\\\n </publication-reference>\\\\n <publication-reference data-format=\\\\\\\"epodoc\\\\\\\">\\\\n <document-id>\\\\n <doc-number>AU2003206825B</doc-number>\\\\n </document-id>\\\\n </publication-reference>\\\\n <classifications-ipcr>\\\\n <classification-ipcr sequence=\\\\\\\"1\\\\\\\">\\\\n <text>C07D 213/57 20060101AFI20060310BMJP </text>\\\\n </classification-ipcr>\\\\n <classification-ipcr sequence=\\\\\\\"2\\\\\\\">\\\\n <text>A61K 8/00 20060101ALI20060310BMJP </text>\\\\n </classification-ipcr>\\\\n <classification-ipcr sequence=\\\\\\\"3\\\\\\\">\\\\n <text>A61K 8/49 20060101ALI20051008BMEP </text>\\\\n </classification-ipcr>\\\\n <classification-ipcr sequence=\\\\\\\"4\\\\\\\">\\\\n <text>A61Q 5/02 20060101ALI20060310BMJP </text>\\\\n </classification-ipcr>\\\\n <classification-ipcr sequence=\\\\\\\"5\\\\\\\">\\\\n <text>A61Q 5/12 20060101ALI20060310BMJP </text>\\\\n </classification-ipcr>\\\\n <classification-ipcr sequence=\\\\\\\"6\\\\\\\">\\\\n <text>A61Q 17/04 20060101ALI20051008BMEP </text>\\\\n </classification-ipcr>\\\\n <classification-ipcr sequence=\\\\\\\"7\\\\\\\">\\\\n <text>C07D 309/34 20060101ALI20060310BMJP </text>\\\\n </classification-ipcr>\\\\n <classification-ipcr sequence=\\\\\\\"8\\\\\\\">\\\\n <text>C09K 3/00 20060101ALI20060310BMJP </text>\\\\n </classification-ipcr>\\\\n </classifications-ipcr>\\\\n <patent-classifications>\\\\n <patent-classification sequence=\\\\\\\"1\\\\\\\">\\\\n <classification-scheme office=\\\\\\\"EP\\\\\\\" scheme=\\\\\\\"CPC\\\\\\\">\\\\n <date>20130101</date>\\\\n </classification-scheme>\\\\n <classification-symbol>A61Q 17/04 </classification-symbol>\\\\n <symbol-position>F</symbol-position>\\\\n <classification-value>I</classification-value>\\\\n <classification-status>B</classification-status>\\\\n <classification-data-source>H</classification-data-source>\\\\n <action-date>\\\\n <date>20130101</date>\\\\n </action-date>\\\\n </patent-classification>\\\\n <patent-classification sequence=\\\\\\\"2\\\\\\\">\\\\n <classification-scheme office=\\\\\\\"EP\\\\\\\" scheme=\\\\\\\"CPC\\\\\\\">\\\\n <date>20130101</date>\\\\n </classification-scheme>\\\\n <classification-symbol>A61K 8/4926 </classification-symbol>\\\\n <symbol-position>L</symbol-position>\\\\n <classification-value>I</classification-value>\\\\n <classification-status>B</classification-status>\\\\n <classification-data-source>H</classification-data-source>\\\\n <action-date>\\\\n <date>20130101</date>\\\\n </action-date>\\\\n </patent-classification>\\\\n <patent-classification sequence=\\\\\\\"3\\\\\\\">\\\\n <classification-scheme office=\\\\\\\"EP\\\\\\\" scheme=\\\\\\\"CPC\\\\\\\">\\\\n <date>20130101</date>\\\\n </classification-scheme>\\\\n <classification-symbol>A61K 8/498 </classification-symbol>\\\\n <symbol-position>L</symbol-position>\\\\n <classification-value>I</classification-value>\\\\n <classification-status>B</classification-status>\\\\n <classification-data-source>H</classification-data-source>\\\\n <action-date>\\\\n <date>20130101</date>\\\\n </action-date>\\\\n </patent-classification>\\\\n </patent-classifications>\\\\n <application-reference is-representative=\\\\\\\"NO\\\\\\\" doc-id=\\\\\\\"2578143\\\\\\\" data-format=\\\\\\\"docdb\\\\\\\">\\\\n <document-id>\\\\n <country>AU</country>\\\\n <doc-number>2003206825</doc-number>\\\\n <kind>A</kind>\\\\n <date>20030204</date>\\\\n </document-id>\\\\n </application-reference>\\\\n <application-reference data-format=\\\\\\\"epodoc\\\\\\\">\\\\n <document-id>\\\\n <doc-number>AU20030206825</doc-number>\\\\n </document-id>\\\\n </application-reference>\\\\n <application-reference data-format=\\\\\\\"original\\\\\\\">\\\\n <document-id>\\\\n <doc-number>2003206825</doc-number>\\\\n </document-id>\\\\n </application-reference>\\\\n <priority-claims>\\\\n <priority-claim sequence=\\\\\\\"1\\\\\\\" data-format=\\\\\\\"docdb\\\\\\\">\\\\n <document-id doc-id=\\\\\\\"267967684\\\\\\\">\\\\n <country>EP</country>\\\\n <doc-number>02002093</doc-number>\\\\n <kind>A</kind>\\\\n <date>20020212</date>\\\\n </document-id>\\\\n <priority-active-indicator>Y</priority-active-indicator>\\\\n </priority-claim>\\\\n <priority-claim sequence=\\\\\\\"1\\\\\\\" data-format=\\\\\\\"epodoc\\\\\\\">\\\\n <document-id>\\\\n <doc-number>EP20020002093</doc-number>\\\\n </document-id>\\\\n </priority-claim>\\\\n <priority-claim sequence=\\\\\\\"2\\\\\\\" data-format=\\\\\\\"docdb\\\\\\\">\\\\n <document-id doc-id=\\\\\\\"15634271\\\\\\\">\\\\n <country>EP</country>\\\\n <doc-number>0301049</doc-number>\\\\n <kind>W</kind>\\\\n <date>20030204</date>\\\\n </document-id>\\\\n <priority-linkage-type>W</priority-linkage-type>\\\\n <priority-active-indicator>N</priority-active-indicator>\\\\n </priority-claim>\\\\n <priority-claim sequence=\\\\\\\"2\\\\\\\" data-format=\\\\\\\"epodoc\\\\\\\">\\\\n <document-id>\\\\n <doc-number>WO2003EP01049</doc-number>\\\\n </document-id>\\\\n </priority-claim>\\\\n <priority-claim sequence=\\\\\\\"1\\\\\\\" data-format=\\\\\\\"original\\\\\\\">\\\\n <document-id>\\\\n <doc-number>02002093.9</doc-number>\\\\n </document-id>\\\\n </priority-claim>\\\\n <priority-claim sequence=\\\\\\\"2\\\\\\\" data-format=\\\\\\\"original\\\\\\\">\\\\n <document-id>\\\\n <doc-number>WO03/068183</doc-number>\\\\n </document-id>\\\\n </priority-claim>\\\\n </priority-claims>\\\\n <parties>\\\\n <applicants>\\\\n <applicant sequence=\\\\\\\"1\\\\\\\" data-format=\\\\\\\"docdb\\\\\\\">\\\\n <applicant-name>\\\\n <name>DSM IP ASSETS BV</name>\\\\n </applicant-name>\\\\n </applicant>\\\\n <applicant sequence=\\\\\\\"1\\\\\\\" data-format=\\\\\\\"docdba\\\\\\\">\\\\n <applicant-name>\\\\n <name>DSM IP ASSETS B.V.</name>\\\\n </applicant-name>\\\\n </applicant>\\\\n </applicants>\\\\n <inventors>\\\\n <inventor sequence=\\\\\\\"1\\\\\\\" data-format=\\\\\\\"docdb\\\\\\\">\\\\n <inventor-name>\\\\n <name>BERG-SCHULTZ KATJA</name>\\\\n </inventor-name>\\\\n </inventor>\\\\n <inventor sequence=\\\\\\\"1\\\\\\\" data-format=\\\\\\\"docdba\\\\\\\">\\\\n <inventor-name>\\\\n <name>KATJA BERG-SCHULTZ</name>\\\\n </inventor-name>\\\\n </inventor>\\\\n </inventors>\\\\n </parties>\\\\n <invention-title lang=\\\\\\\"en\\\\\\\" data-format=\\\\\\\"docdba\\\\\\\">Sunscreen compositions as well as dihydropyridines and dihydropyranes</invention-title>\\\\n <dates-of-public-availability>\\\\n <printed-with-grant>\\\\n <document-id>\\\\n <date>20080221</date>\\\\n </document-id>\\\\n </printed-with-grant>\\\\n </dates-of-public-availability>\\\\n </bibliographic-data>\\\\n</exchange-document>\\\"],\\\"retry\\\":true,\\\"queue\\\":\\\"patent_ingest\\\",\\\"backtrace\\\":true,\\\"jid\\\":\\\"22c9ec664bdb65eb811e8e19\\\",\\\"created_at\\\":1570072201.99408,\\\"enqueued_at\\\":1571449722.707494,\\\"error_message\\\":\\\"PG::UniqueViolation: ERROR: duplicate key value violates unique constraint \\\\\\\"index_patents_on_publication_number\\\\\\\"\\\\nDETAIL: Key (publication_number)=(AU2003206825B8) already exists.\\\\n\\\",\\\"error_class\\\":\\\"ActiveRecord::RecordNotUnique\\\",\\\"failed_at\\\":1570731698.815898,\\\"retry_count\\\":6,\\\"error_backtrace\\\":\\\"eJzVWtty4ygQ/ZVsXiZbtYksydf5laktFknEZiKBAshe79dvc7GClHF8kXAy\\\\nD66yQXBON4emG/nHfYTrOtoSVnARZQ0rShKJJttHydP8aRKtSSUjnCu6JYLk\\\\nXBSP0ArtJc1cM7LtUc4ZI9DCGcIFrhURMqq5VGtB5Gt5aHsS2ff5fPmdsrt/\\\\nsNyzHJF/SY5qLHAlv93/9Yl0spLnL3cPyV1JtqSUf95BoyHHOMpxviEX0ZNN\\\\nXXOh3vNzHVFBapiGsJwSGVEGZDS+JjT1+cC3moiKKgQW5Y0QhClUclxc5q2T\\\\ndNrZ830kN1gQdKATLxeGz56SskCmb2TsD1xhocfwwIh6WXTX53qRXMEJZ1IJ\\\\neMxntJgsjiq45Os+Jc3lUXOZGUyPWsUZVdzMmaQzMyc0Ib1PNwL6/vsk8+Zd\\\\nh//CpmECZFzRZ5pjzUUrEDg0FWEOP5ka+Lfmz3DCfGXX+FLbR5S9XYWbqv0I\\\\nlemqpdIogjArUF4SLG5HJyqwwhmWoCGFFdGqkJraynPSa0PE/lZaOUYodvvY\\\\nMAIJExFcvqe9FKeTW5M66ad5ctjlt2RjNGL3kgk1oUjACSqpVHDGGpx0YVXh\\\\nnO+eCgi4SlMLmAsCbg8AmPNGB+w3X8bz0JD6PKJsHfFa0QqMpbk9rgLDYqUE\\\\nzXTgq4ja8EJGBRVqb/QTx6HdjMsyw/mL2TRpmnRP5gG4pzNUH/kQ1kTDUNsR\\\\nEG+Z2OMXGUBr5HW41/g33HKCcAkEwqo2Tg2unn5UcJmdw+MCNTXE53HTio5D\\\\nk15tNQj5N5KsxNubCNb5N+SCdiWbrIID9kQ7m9hzRbv0jzFxtrikha1BDE4g\\\\nGEg8mMR5i5PGq+6eCI/oso8WcUfVBnlPwUDVCAZnq8nSmuCV/qnsMHGMPY4h\\\\nHZTEyS3hUlfa3XQZjslwdPXp4AjViLT3Gu5yrYuiP+beyfGBH2uIMVENGgAF\\\\nRDa6mNIz9cON7b9mnriXOLlS9vhMRpRei8k0u3MEUst1++ULcPMwDafl5H3U\\\\noQwxskMf0PsdbsvembpYthv6tIWfJY4vEEwv2GZnDT++32P/xuoic306j+nT\\\\n4in2jfY6zR0+EUADMj6Gs9Ig91UPfSGT3Ek8MMkdaK7T1qVWDkRdLQ+olx1d\\\\nA2Fjd6vSwdWfiheklG+DrCCR++1kephlNmmXjLKf0HH9VPHc3V+t+9PsuHgx\\\\nl4N2uH0C2VZzsL575/XMRfXLKcwefRsZW/o7gWv00bBjyLPDK6bOyI9XT9KC\\\\nvNBXsykSs2SuJaoFz9tkI/aug/V9zU+ejQwwnx598+MeHAxY0QIG7LAgUb7B\\\\nlFnh9epoyrb85dy4dsBqGH1tyCN4RRrceOYDI9utnQZDiIDA73Exkd3VfhBn\\\\nwlg5nQyxEtQm9o8CMk0GCUScuPBpGsyxsRbujZMjYSLJlzbpQqzURYNRIHrC\\\\nT3sBYyS1d1FSPyw9zP3tVVAJESXfDEYEfetCS+z9KzgAxMMV0DPGr7ofZkGM\\\\nEZiWJhGY9tbnAkWfmXfYoKozTx36axvMl8v2MBgXTRD9lwP3QrpXvI2P9om2\\\\nxZeCnCOGZLyo1tN07Gt6GkTTHcRkZhNMXdKMHW2STrRJg0Wbkq/XLndKQy1M\\\\nMjuamISJnK7kXZc8Gz1yJtPuhh/NAm8lJm3FPvIauxqhFqSG43lsz9jJw+y1\\\\nwzv5IGe704trQ5yN7Jp5WxIOnhdOgtL4w+6pnfZ0cfb/gE7P25e3xM8EqY0g\\\\nuPh2//f/50PJzg==\\\\n\\\",\\\"retried_at\\\":1571437462.206649}\"}},\"level\":\"error\",\"logger\":\"ruby\",\"message\":\"PG::UniqueViolation: ERROR: duplicate key value violates unique constraint \\\"index_patents_on_publication_number\\\"\\nDETAIL: Key (publication_number)=(AU2003206825B8) already exists.\\n\",\"modules\":{\"rake\":\"12.3.3\",\"concurrent-ruby\":\"1.1.5\",\"i18n\":\"1.7.0\",\"minitest\":\"5.12.2\",\"thread_safe\":\"0.3.6\",\"tzinfo\":\"1.2.5\",\"zeitwerk\":\"2.2.0\",\"activesupport\":\"6.0.0\",\"builder\":\"3.2.3\",\"erubi\":\"1.9.0\",\"mini_portile2\":\"2.4.0\",\"nokogiri\":\"1.10.4\",\"rails-dom-testing\":\"2.0.3\",\"crass\":\"1.0.5\",\"loofah\":\"2.3.0\",\"rails-html-sanitizer\":\"1.3.0\",\"actionview\":\"6.0.0\",\"rack\":\"2.0.7\",\"rack-test\":\"1.1.0\",\"actionpack\":\"6.0.0\",\"nio4r\":\"2.5.2\",\"websocket-extensions\":\"0.1.4\",\"websocket-driver\":\"0.7.1\",\"actioncable\":\"6.0.0\",\"globalid\":\"0.4.2\",\"activejob\":\"6.0.0\",\"activemodel\":\"6.0.0\",\"activerecord\":\"6.0.0\",\"mimemagic\":\"0.3.3\",\"marcel\":\"0.3.3\",\"activestorage\":\"6.0.0\",\"mini_mime\":\"1.0.2\",\"mail\":\"2.7.1\",\"actionmailbox\":\"6.0.0\",\"actionmailer\":\"6.0.0\",\"actiontext\":\"6.0.0\",\"active_interaction\":\"3.7.1\",\"public_suffix\":\"4.0.1\",\"addressable\":\"2.7.0\",\"adroit-age\":\"2.0.0\",\"ancestry\":\"3.0.7\",\"attribute_normalizer\":\"1.2.0\",\"aws-eventstream\":\"1.0.3\",\"aws-partitions\":\"1.225.0\",\"aws-sigv4\":\"1.1.0\",\"jmespath\":\"1.4.0\",\"aws-sdk-core\":\"3.69.0\",\"aws-sdk-kms\":\"1.24.0\",\"aws-sdk-s3\":\"1.50.0\",\"bcrypt\":\"3.1.13\",\"bundler\":\"1.17.3\",\"method_source\":\"0.9.2\",\"thor\":\"0.20.3\",\"railties\":\"6.0.0\",\"sprockets\":\"4.0.0\",\"sprockets-rails\":\"3.2.1\",\"rails\":\"6.0.0\",\"boolean_timestamps\":\"1.0.2\",\"msgpack\":\"1.3.1\",\"bootsnap\":\"1.4.5\",\"chartkick\":\"3.2.1\",\"clockwork\":\"2.0.4\",\"deep_merge\":\"1.2.1\",\"dry-core\":\"0.4.9\",\"dry-configurable\":\"0.8.3\",\"dry-equalizer\":\"0.2.2\",\"dry-initializer\":\"3.0.1\",\"dry-logic\":\"1.0.3\",\"dry-container\":\"0.7.2\",\"dry-inflector\":\"0.2.0\",\"dry-types\":\"1.2.0\",\"dry-schema\":\"1.4.1\",\"config\":\"2.0.0\",\"connection_pool\":\"2.2.2\",\"i18n_data\":\"0.8.0\",\"sixarm_ruby_unaccent\":\"1.2.0\",\"unicode_utils\":\"1.4.0\",\"countries\":\"3.0.0\",\"default_value_for\":\"3.3.0\",\"descriptive-statistics\":\"2.2.0\",\"unf_ext\":\"0.0.7.6\",\"unf\":\"0.1.4\",\"domain_name\":\"0.5.20190701\",\"multi_json\":\"1.14.1\",\"elasticsearch-api\":\"7.3.0\",\"multipart-post\":\"2.1.1\",\"faraday\":\"0.17.0\",\"elasticsearch-transport\":\"7.3.0\",\"elasticsearch\":\"7.3.0\",\"email_prefixer\":\"1.2.0\",\"email_validator\":\"2.0.1\",\"enumerize\":\"2.3.1\",\"errbase\":\"0.1.1\",\"ffi\":\"1.11.1\",\"ethon\":\"0.12.0\",\"faker\":\"2.6.0\",\"fast_blank\":\"1.0.0\",\"fast_jsonapi\":\"1.5\",\"google-cloud-env\":\"1.2.1\",\"google-cloud-core\":\"1.3.2\",\"jwt\":\"2.2.1\",\"memoist\":\"0.16.0\",\"os\":\"1.0.1\",\"signet\":\"0.12.0\",\"googleauth\":\"0.9.0\",\"google-cloud-translate\":\"1.4.0\",\"groupdate\":\"4.1.2\",\"hashie\":\"3.6.0\",\"http-cookie\":\"1.0.3\",\"http-form_data\":\"2.1.1\",\"http_parser.rb\":\"0.6.0\",\"http\":\"4.1.1\",\"iso-639\":\"0.2.8\",\"iso_country_codes\":\"0.7.8\",\"libsqreen\":\"0.3.0.0.1\",\"request_store\":\"1.4.1\",\"lograge\":\"0.11.2\",\"mime-types-data\":\"3.2019.1009\",\"mime-types\":\"3.3\",\"net-http-digest_auth\":\"1.4.1\",\"net-http-persistent\":\"3.1.0\",\"ntlm-http\":\"0.1.1\",\"webrobots\":\"0.1.2\",\"mechanize\":\"2.7.6\",\"mobility\":\"0.8.8\",\"multi_xml\":\"0.6.0\",\"nokogiri-happymapper\":\"0.8.1\",\"oauth\":\"0.5.4\",\"oauth2\":\"1.4.2\",\"oj\":\"3.9.2\",\"pagy\":\"3.6.0\",\"pg\":\"1.1.4\",\"pg_query\":\"1.1.0\",\"pghero\":\"2.3.0\",\"puma\":\"4.2.1\",\"pundit\":\"2.1.0\",\"rack-protection\":\"2.0.7\",\"rack-proxy\":\"0.6.5\",\"rainbow\":\"3.0.0\",\"redis\":\"4.1.3\",\"retriable\":\"3.1.2\",\"roboto\":\"1.0.1\",\"rolify\":\"5.2.0\",\"rubyzip\":\"2.0.0\",\"safely_block\":\"0.2.2\",\"sassc\":\"2.2.1\",\"tilt\":\"2.0.10\",\"sassc-rails\":\"2.1.2\",\"sass-rails\":\"6.0.0\",\"searchjoy\":\"0.4.2\",\"searchkick\":\"4.1.0\",\"sentry-raven\":\"2.12.0\",\"sidekiq\":\"6.0.2\",\"sidekiq-bulk\":\"0.2.0\",\"sidekiq-oj\":\"0.2.0\",\"sidekiq-unique-jobs\":\"6.0.15\",\"sorcery\":\"0.14.0\",\"sq_mini_racer\":\"0.2.5.0.1.beta2\",\"sqreen\":\"1.18.0\",\"turbolinks-source\":\"5.2.0\",\"turbolinks\":\"5.2.1\",\"typhoeus\":\"1.3.1\",\"voight_kampff\":\"1.1.3\",\"webpacker\":\"4.0.7\"},\"platform\":\"ruby\",\"release\":\"194f1effbc1f6c7e284325ef97b102b3f6d839b2\",\"sdk\":{\"name\":\"raven-ruby\",\"version\":\"2.12.0\"},\"server_name\":\"worker_a.1\",\"tags\":{},\"timestamp\":\"2019-10-19T01:48:44\",\"transaction\":\"Sidekiq/PatentIngestWorker\",\"user\":{},\"exception\":{\"values\":[{\"type\":\"PG::UniqueViolation\",\"value\":\"ERROR: duplicate key value violates unique constraint \\\"index_patents_on_publication_number\\\"\\nDETAIL: Key (publication_number)=(AU2003206825B8) already exists.\\n\",\"module\":\"PG\",\"stacktrace\":{\"frames\":[{\"abs_path\":\"/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/util.rb\",\"function\":\"block in safe_thread\",\"lineno\":24,\"in_app\":false,\"pre_context\":[\" def safe_thread(name, &block)\\n\",\" Thread.new do\\n\",\" Thread.current.name = name\\n\"],\"context_line\":\" watchdog(name, &block)\\n\",\"post_context\":[\" end\\n\",\" end\\n\",\"\\n\"],\"project_root\":\"/app\",\"filename\":\"sidekiq/util.rb\"},{\"abs_path\":\"/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/util.rb\",\"function\":\"watchdog\",\"lineno\":15,\"in_app\":false,\"pre_context\":[\" include ExceptionHandler\\n\",\"\\n\",\" def watchdog(last_words)\\n\"],\"context_line\":\" yield\\n\",\"post_context\":[\" rescue Exception => ex\\n\",\" handle_exception(ex, {context: last_words})\\n\",\" raise ex\\n\"],\"project_root\":\"/app\",\"filename\":\"sidekiq/util.rb\"},{\"abs_path\":\"/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/processor.rb\",\"function\":\"run\",\"lineno\":68,\"in_app\":false,\"pre_context\":[\" private unless $TESTING\\n\",\"\\n\",\" def run\\n\"],\"context_line\":\" process_one until @done\\n\",\"post_context\":[\" @mgr.processor_stopped(self)\\n\",\" rescue Sidekiq::Shutdown\\n\",\" @mgr.processor_stopped(self)\\n\"],\"project_root\":\"/app\",\"filename\":\"sidekiq/processor.rb\"},{\"abs_path\":\"/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/processor.rb\",\"function\":\"process_one\",\"lineno\":78,\"in_app\":false,\"pre_context\":[\"\\n\",\" def process_one\\n\",\" @job = fetch\\n\"],\"context_line\":\" process(@job) if @job\\n\",\"post_context\":[\" @job = nil\\n\",\" end\\n\",\"\\n\"],\"project_root\":\"/app\",\"filename\":\"sidekiq/processor.rb\"},{\"abs_path\":\"/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/processor.rb\",\"function\":\"process\",\"lineno\":162,\"in_app\":false,\"pre_context\":[\"\\n\",\" ack = false\\n\",\" begin\\n\"],\"context_line\":\" dispatch(job_hash, queue, jobstr) do |worker|\\n\",\"post_context\":[\" Sidekiq.server_middleware.invoke(worker, job_hash, queue) do\\n\",\" execute_job(worker, job_hash[\\\"args\\\"])\\n\",\" end\\n\"],\"project_root\":\"/app\",\"filename\":\"sidekiq/processor.rb\"},{\"abs_path\":\"/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/processor.rb\",\"function\":\"dispatch\",\"lineno\":123,\"in_app\":false,\"pre_context\":[\" # we pass original String of JSON to respected methods\\n\",\" # to re-parse it there if we need access to the original, untouched job\\n\",\"\\n\"],\"context_line\":\" @job_logger.prepare(job_hash) do\\n\",\"post_context\":[\" @retrier.global(jobstr, queue) do\\n\",\" @job_logger.call(job_hash, queue) do\\n\",\" stats(jobstr, queue) do\\n\"],\"project_root\":\"/app\",\"filename\":\"sidekiq/processor.rb\"},{\"abs_path\":\"/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/job_logger.rb\",\"function\":\"prepare\",\"lineno\":33,\"in_app\":false,\"pre_context\":[\" Sidekiq::Context.with(job_hash_context(job_hash), &block)\\n\",\" end\\n\",\" else\\n\"],\"context_line\":\" Sidekiq::Context.with(job_hash_context(job_hash), &block)\\n\",\"post_context\":[\" end\\n\",\" end\\n\",\"\\n\"],\"project_root\":\"/app\",\"filename\":\"sidekiq/job_logger.rb\"},{\"abs_path\":\"/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/logger.rb\",\"function\":\"with\",\"lineno\":10,\"in_app\":false,\"pre_context\":[\" module Context\\n\",\" def self.with(hash)\\n\",\" current.merge!(hash)\\n\"],\"context_line\":\" yield\\n\",\"post_context\":[\" ensure\\n\",\" hash.each_key { |key| current.delete(key) }\\n\",\" end\\n\"],\"project_root\":\"/app\",\"filename\":\"sidekiq/logger.rb\"},{\"abs_path\":\"/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/processor.rb\",\"function\":\"block in dispatch\",\"lineno\":124,\"in_app\":false,\"pre_context\":[\" # to re-parse it there if we need access to the original, untouched job\\n\",\"\\n\",\" @job_logger.prepare(job_hash) do\\n\"],\"context_line\":\" @retrier.global(jobstr, queue) do\\n\",\"post_context\":[\" @job_logger.call(job_hash, queue) do\\n\",\" stats(jobstr, queue) do\\n\",\" # Rails 5 requires a Reloader to wrap code execution. In order to\\n\"],\"project_root\":\"/app\",\"filename\":\"sidekiq/processor.rb\"},{\"abs_path\":\"/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/job_retry.rb\",\"function\":\"global\",\"lineno\":78,\"in_app\":false,\"pre_context\":[\" # We want to be able to retry as much as possible so we don't\\n\",\" # require the worker to be instantiated.\\n\",\" def global(jobstr, queue)\\n\"],\"context_line\":\" yield\\n\",\"post_context\":[\" rescue Handled => ex\\n\",\" raise ex\\n\",\" rescue Sidekiq::Shutdown => ey\\n\"],\"project_root\":\"/app\",\"filename\":\"sidekiq/job_retry.rb\"},{\"abs_path\":\"/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/processor.rb\",\"function\":\"block (2 levels) in dispatch\",\"lineno\":125,\"in_app\":false,\"pre_context\":[\"\\n\",\" @job_logger.prepare(job_hash) do\\n\",\" @retrier.global(jobstr, queue) do\\n\"],\"context_line\":\" @job_logger.call(job_hash, queue) do\\n\",\"post_context\":[\" stats(jobstr, queue) do\\n\",\" # Rails 5 requires a Reloader to wrap code execution. In order to\\n\",\" # constantize the worker and instantiate an instance, we have to call\\n\"],\"project_root\":\"/app\",\"filename\":\"sidekiq/processor.rb\"},{\"abs_path\":\"/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/job_logger.rb\",\"function\":\"call\",\"lineno\":13,\"in_app\":false,\"pre_context\":[\" start = ::Process.clock_gettime(::Process::CLOCK_MONOTONIC)\\n\",\" @logger.info(\\\"start\\\")\\n\",\"\\n\"],\"context_line\":\" yield\\n\",\"post_context\":[\"\\n\",\" with_elapsed_time_context(start) do\\n\",\" @logger.info(\\\"done\\\")\\n\"],\"project_root\":\"/app\",\"filename\":\"sidekiq/job_logger.rb\"},{\"abs_path\":\"/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/processor.rb\",\"function\":\"block (3 levels) in dispatch\",\"lineno\":126,\"in_app\":false,\"pre_context\":[\" @job_logger.prepare(job_hash) do\\n\",\" @retrier.global(jobstr, queue) do\\n\",\" @job_logger.call(job_hash, queue) do\\n\"],\"context_line\":\" stats(jobstr, queue) do\\n\",\"post_context\":[\" # Rails 5 requires a Reloader to wrap code execution. In order to\\n\",\" # constantize the worker and instantiate an instance, we have to call\\n\",\" # the Reloader. It handles code loading, db connection management, etc.\\n\"],\"project_root\":\"/app\",\"filename\":\"sidekiq/processor.rb\"},{\"abs_path\":\"/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/processor.rb\",\"function\":\"stats\",\"lineno\":257,\"in_app\":false,\"pre_context\":[\" WORKER_STATE.set(tid, {queue: queue, payload: jobstr, run_at: Time.now.to_i})\\n\",\"\\n\",\" begin\\n\"],\"context_line\":\" yield\\n\",\"post_context\":[\" rescue Exception\\n\",\" FAILURE.incr\\n\",\" raise\\n\"],\"project_root\":\"/app\",\"filename\":\"sidekiq/processor.rb\"},{\"abs_path\":\"/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/processor.rb\",\"function\":\"block (4 levels) in dispatch\",\"lineno\":131,\"in_app\":false,\"pre_context\":[\" # constantize the worker and instantiate an instance, we have to call\\n\",\" # the Reloader. It handles code loading, db connection management, etc.\\n\",\" # Effectively this block denotes a \\\"unit of work\\\" to Rails.\\n\"],\"context_line\":\" @reloader.call do\\n\",\"post_context\":[\" klass = constantize(job_hash[\\\"class\\\"])\\n\",\" worker = klass.new\\n\",\" worker.jid = job_hash[\\\"jid\\\"]\\n\"],\"project_root\":\"/app\",\"filename\":\"sidekiq/processor.rb\"},{\"abs_path\":\"/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/rails.rb\",\"function\":\"call\",\"lineno\":42,\"in_app\":false,\"pre_context\":[\" end\\n\",\"\\n\",\" def call\\n\"],\"context_line\":\" @app.reloader.wrap do\\n\",\"post_context\":[\" yield\\n\",\" end\\n\",\" end\\n\"],\"project_root\":\"/app\",\"filename\":\"sidekiq/rails.rb\"},{\"abs_path\":\"/app/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.0/lib/active_support/reloader.rb\",\"function\":\"wrap\",\"lineno\":71,\"in_app\":false,\"pre_context\":[\"\\n\",\" # Run the supplied block as a work unit, reloading code as needed\\n\",\" def self.wrap\\n\"],\"context_line\":\" executor.wrap do\\n\",\"post_context\":[\" super\\n\",\" end\\n\",\" end\\n\"],\"project_root\":\"/app\",\"filename\":\"active_support/reloader.rb\"},{\"abs_path\":\"/app/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.0/lib/active_support/execution_wrapper.rb\",\"function\":\"wrap\",\"lineno\":88,\"in_app\":false,\"pre_context\":[\"\\n\",\" instance = run!\\n\",\" begin\\n\"],\"context_line\":\" yield\\n\",\"post_context\":[\" ensure\\n\",\" instance.complete!\\n\",\" end\\n\"],\"project_root\":\"/app\",\"filename\":\"active_support/execution_wrapper.rb\"},{\"abs_path\":\"/app/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.0/lib/active_support/reloader.rb\",\"function\":\"block in wrap\",\"lineno\":72,\"in_app\":false,\"pre_context\":[\" # Run the supplied block as a work unit, reloading code as needed\\n\",\" def self.wrap\\n\",\" executor.wrap do\\n\"],\"context_line\":\" super\\n\",\"post_context\":[\" end\\n\",\" end\\n\",\"\\n\"],\"project_root\":\"/app\",\"filename\":\"active_support/reloader.rb\"},{\"abs_path\":\"/app/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.0/lib/active_support/execution_wrapper.rb\",\"function\":\"wrap\",\"lineno\":88,\"in_app\":false,\"pre_context\":[\"\\n\",\" instance = run!\\n\",\" begin\\n\"],\"context_line\":\" yield\\n\",\"post_context\":[\" ensure\\n\",\" instance.complete!\\n\",\" end\\n\"],\"project_root\":\"/app\",\"filename\":\"active_support/execution_wrapper.rb\"},{\"abs_path\":\"/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/rails.rb\",\"function\":\"block in call\",\"lineno\":43,\"in_app\":false,\"pre_context\":[\"\\n\",\" def call\\n\",\" @app.reloader.wrap do\\n\"],\"context_line\":\" yield\\n\",\"post_context\":[\" end\\n\",\" end\\n\",\"\\n\"],\"project_root\":\"/app\",\"filename\":\"sidekiq/rails.rb\"},{\"abs_path\":\"/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/processor.rb\",\"function\":\"block (5 levels) in dispatch\",\"lineno\":135,\"in_app\":false,\"pre_context\":[\" klass = constantize(job_hash[\\\"class\\\"])\\n\",\" worker = klass.new\\n\",\" worker.jid = job_hash[\\\"jid\\\"]\\n\"],\"context_line\":\" @retrier.local(worker, jobstr, queue) do\\n\",\"post_context\":[\" yield worker\\n\",\" end\\n\",\" end\\n\"],\"project_root\":\"/app\",\"filename\":\"sidekiq/processor.rb\"},{\"abs_path\":\"/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/job_retry.rb\",\"function\":\"local\",\"lineno\":111,\"in_app\":false,\"pre_context\":[\" # Skip exception is unwrapped within Sidekiq::Processor#process before\\n\",\" # calling the handle_exception handlers.\\n\",\" def local(worker, jobstr, queue)\\n\"],\"context_line\":\" yield\\n\",\"post_context\":[\" rescue Handled => ex\\n\",\" raise ex\\n\",\" rescue Sidekiq::Shutdown => ey\\n\"],\"project_root\":\"/app\",\"filename\":\"sidekiq/job_retry.rb\"},{\"abs_path\":\"/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/processor.rb\",\"function\":\"block (6 levels) in dispatch\",\"lineno\":136,\"in_app\":false,\"pre_context\":[\" worker = klass.new\\n\",\" worker.jid = job_hash[\\\"jid\\\"]\\n\",\" @retrier.local(worker, jobstr, queue) do\\n\"],\"context_line\":\" yield worker\\n\",\"post_context\":[\" end\\n\",\" end\\n\",\" end\\n\"],\"project_root\":\"/app\",\"filename\":\"sidekiq/processor.rb\"},{\"abs_path\":\"/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/processor.rb\",\"function\":\"block in process\",\"lineno\":163,\"in_app\":false,\"pre_context\":[\" ack = false\\n\",\" begin\\n\",\" dispatch(job_hash, queue, jobstr) do |worker|\\n\"],\"context_line\":\" Sidekiq.server_middleware.invoke(worker, job_hash, queue) do\\n\",\"post_context\":[\" execute_job(worker, job_hash[\\\"args\\\"])\\n\",\" end\\n\",\" end\\n\"],\"project_root\":\"/app\",\"filename\":\"sidekiq/processor.rb\"},{\"abs_path\":\"/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/middleware/chain.rb\",\"function\":\"invoke\",\"lineno\":143,\"in_app\":false,\"pre_context\":[\" chain.shift.call(*args, &traverse_chain)\\n\",\" end\\n\",\" end\\n\"],\"context_line\":\" traverse_chain.call\\n\",\"post_context\":[\" end\\n\",\" end\\n\",\"\\n\"],\"project_root\":\"/app\",\"filename\":\"sidekiq/middleware/chain.rb\"},{\"abs_path\":\"/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/middleware/chain.rb\",\"function\":\"block in invoke\",\"lineno\":140,\"in_app\":false,\"pre_context\":[\" if chain.empty?\\n\",\" yield\\n\",\" else\\n\"],\"context_line\":\" chain.shift.call(*args, &traverse_chain)\\n\",\"post_context\":[\" end\\n\",\" end\\n\",\" traverse_chain.call\\n\"],\"project_root\":\"/app\",\"filename\":\"sidekiq/middleware/chain.rb\"},{\"abs_path\":\"/app/vendor/bundle/ruby/2.6.0/gems/sentry-raven-2.12.0/lib/raven/integrations/sidekiq.rb\",\"function\":\"call\",\"lineno\":9,\"in_app\":false,\"pre_context\":[\" def call(_worker, job, queue)\\n\",\" Raven.context.transaction.push \\\"Sidekiq/\#{job['class']}\\\"\\n\",\" Raven.extra_context(:sidekiq => job.merge(\\\"queue\\\" => queue))\\n\"],\"context_line\":\" yield\\n\",\"post_context\":[\" Context.clear!\\n\",\" BreadcrumbBuffer.clear!\\n\",\" end\\n\"],\"project_root\":\"/app\",\"filename\":\"raven/integrations/sidekiq.rb\"},{\"abs_path\":\"/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/middleware/chain.rb\",\"function\":\"block in invoke\",\"lineno\":140,\"in_app\":false,\"pre_context\":[\" if chain.empty?\\n\",\" yield\\n\",\" else\\n\"],\"context_line\":\" chain.shift.call(*args, &traverse_chain)\\n\",\"post_context\":[\" end\\n\",\" end\\n\",\" traverse_chain.call\\n\"],\"project_root\":\"/app\",\"filename\":\"sidekiq/middleware/chain.rb\"},{\"abs_path\":\"/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-unique-jobs-6.0.15/lib/sidekiq_unique_jobs/server/middleware.rb\",\"function\":\"call\",\"lineno\":29,\"in_app\":false,\"pre_context\":[\" @worker_class = worker_class\\n\",\" @item = item\\n\",\" @queue = queue\\n\"],\"context_line\":\" return yield if unique_disabled?\\n\",\"post_context\":[\"\\n\",\" SidekiqUniqueJobs::Job.add_uniqueness(item)\\n\",\" SidekiqUniqueJobs.with_context(logging_context(self.class, item)) do\\n\"],\"project_root\":\"/app\",\"filename\":\"sidekiq_unique_jobs/server/middleware.rb\"},{\"abs_path\":\"/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/middleware/chain.rb\",\"function\":\"block in invoke\",\"lineno\":138,\"in_app\":false,\"pre_context\":[\" chain = retrieve.dup\\n\",\" traverse_chain = lambda do\\n\",\" if chain.empty?\\n\"],\"context_line\":\" yield\\n\",\"post_context\":[\" else\\n\",\" chain.shift.call(*args, &traverse_chain)\\n\",\" end\\n\"],\"project_root\":\"/app\",\"filename\":\"sidekiq/middleware/chain.rb\"},{\"abs_path\":\"/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/processor.rb\",\"function\":\"block (2 levels) in process\",\"lineno\":164,\"in_app\":false,\"pre_context\":[\" begin\\n\",\" dispatch(job_hash, queue, jobstr) do |worker|\\n\",\" Sidekiq.server_middleware.invoke(worker, job_hash, queue) do\\n\"],\"context_line\":\" execute_job(worker, job_hash[\\\"args\\\"])\\n\",\"post_context\":[\" end\\n\",\" end\\n\",\" ack = true\\n\"],\"project_root\":\"/app\",\"filename\":\"sidekiq/processor.rb\"},{\"abs_path\":\"/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/processor.rb\",\"function\":\"execute_job\",\"lineno\":196,\"in_app\":false,\"pre_context\":[\" end\\n\",\"\\n\",\" def execute_job(worker, cloned_args)\\n\"],\"context_line\":\" worker.perform(*cloned_args)\\n\",\"post_context\":[\" end\\n\",\"\\n\",\" # Ruby doesn't provide atomic counters out of the box so we'll\\n\"],\"project_root\":\"/app\",\"filename\":\"sidekiq/processor.rb\"},{\"abs_path\":\"/app/app/workers/patent_ingest_worker.rb\",\"function\":\"perform\",\"lineno\":5,\"in_app\":true,\"pre_context\":[\" sidekiq_options queue: :patent_ingest\\n\",\"\\n\",\" def perform(type, request_id, xml)\\n\"],\"context_line\":\" wrap_perform do\\n\",\"post_context\":[\" Patent.ingest(type, request_id, xml)\\n\",\" end\\n\",\" end\\n\"],\"project_root\":\"/app\",\"filename\":\"app/workers/patent_ingest_worker.rb\"},{\"abs_path\":\"/app/app/workers/base_worker.rb\",\"function\":\"wrap_perform\",\"lineno\":10,\"in_app\":true,\"pre_context\":[\"\\n\",\" def wrap_perform(description = nil)\\n\",\" logger.info \\\"[\#{self.class.name}] Executing worker! \#{description}\\\".squish\\n\"],\"context_line\":\" yield\\n\",\"post_context\":[\" end\\n\",\"end\\n\",null],\"project_root\":\"/app\",\"filename\":\"app/workers/base_worker.rb\"},{\"abs_path\":\"/app/app/workers/patent_ingest_worker.rb\",\"function\":\"block in perform\",\"lineno\":6,\"in_app\":true,\"pre_context\":[\"\\n\",\" def perform(type, request_id, xml)\\n\",\" wrap_perform do\\n\"],\"context_line\":\" Patent.ingest(type, request_id, xml)\\n\",\"post_context\":[\" end\\n\",\" end\\n\",\"end\\n\"],\"project_root\":\"/app\",\"filename\":\"app/workers/patent_ingest_worker.rb\"},{\"abs_path\":\"/app/app/models/concerns/patent_concern/ingestable.rb\",\"function\":\"ingest\",\"lineno\":16,\"in_app\":true,\"pre_context\":[\" return\\n\",\" end\\n\",\"\\n\"],\"context_line\":\" run_injest(type, request_id, epo_patent)\\n\",\"post_context\":[\" end\\n\",\"\\n\",\" def parse_epo_xml(xml)\\n\"],\"project_root\":\"/app\",\"filename\":\"app/models/concerns/patent_concern/ingestable.rb\"},{\"abs_path\":\"/app/app/models/concerns/patent_concern/ingestable.rb\",\"function\":\"run_injest\",\"lineno\":50,\"in_app\":true,\"pre_context\":[\" if patent\\n\",\" Ingest::Patents::Update.run!(request.merge(patent: patent))\\n\",\" elsif epo_patent.create?\\n\"],\"context_line\":\" Ingest::Patents::Create.run!(request)\\n\",\"post_context\":[\" elsif epo_patent.delete? && patent\\n\",\" Ingest::Patents::Delete.run!(request.merge(patent: patent))\\n\",\" elsif epo_patent.amend? && patent.blank?\\n\"],\"project_root\":\"/app\",\"filename\":\"app/models/concerns/patent_concern/ingestable.rb\"},{\"abs_path\":\"/app/vendor/bundle/ruby/2.6.0/gems/active_interaction-3.7.1/lib/active_interaction/concerns/runnable.rb\",\"function\":\"run!\",\"lineno\":133,\"in_app\":false,\"pre_context\":[\" #\\n\",\" # @raise (see Runnable#run!)\\n\",\" def run!(*args)\\n\"],\"context_line\":\" new(*args).send(:run!)\\n\",\"post_context\":[\" end\\n\",\" end\\n\",\" end\\n\"],\"project_root\":\"/app\",\"filename\":\"active_interaction/concerns/runnable.rb\"},{\"abs_path\":\"/app/vendor/bundle/ruby/2.6.0/gems/active_interaction-3.7.1/lib/active_interaction/concerns/runnable.rb\",\"function\":\"run!\",\"lineno\":98,\"in_app\":false,\"pre_context\":[\" #\\n\",\" # @raise [InvalidInteractionError] If there are validation errors.\\n\",\" def run!\\n\"],\"context_line\":\" run\\n\",\"post_context\":[\"\\n\",\" unless valid?\\n\",\" raise InvalidInteractionError, errors.full_messages.join(', ')\\n\"],\"project_root\":\"/app\",\"filename\":\"active_interaction/concerns/runnable.rb\"},{\"abs_path\":\"/app/vendor/bundle/ruby/2.6.0/gems/active_interaction-3.7.1/lib/active_interaction/concerns/runnable.rb\",\"function\":\"run\",\"lineno\":77,\"in_app\":false,\"pre_context\":[\" def run # rubocop:disable MethodLength\\n\",\" self.result =\\n\",\" if valid?\\n\"],\"context_line\":\" run_callbacks(:execute) do\\n\",\"post_context\":[\" result_or_errors =\\n\",\" begin\\n\",\" execute\\n\"],\"project_root\":\"/app\",\"filename\":\"active_interaction/concerns/runnable.rb\"},{\"abs_path\":\"/app/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.0/lib/active_support/callbacks.rb\",\"function\":\"run_callbacks\",\"lineno\":101,\"in_app\":false,\"pre_context\":[\" callbacks = __callbacks[kind.to_sym]\\n\",\"\\n\",\" if callbacks.empty?\\n\"],\"context_line\":\" yield if block_given?\\n\",\"post_context\":[\" else\\n\",\" env = Filters::Environment.new(self, false, nil)\\n\",\" next_sequence = callbacks.compile\\n\"],\"project_root\":\"/app\",\"filename\":\"active_support/callbacks.rb\"},{\"abs_path\":\"/app/vendor/bundle/ruby/2.6.0/gems/active_interaction-3.7.1/lib/active_interaction/concerns/runnable.rb\",\"function\":\"block in run\",\"lineno\":80,\"in_app\":false,\"pre_context\":[\" run_callbacks(:execute) do\\n\",\" result_or_errors =\\n\",\" begin\\n\"],\"context_line\":\" execute\\n\",\"post_context\":[\" rescue Interrupt => interrupt\\n\",\" interrupt.errors\\n\",\" end\\n\"],\"project_root\":\"/app\",\"filename\":\"active_interaction/concerns/runnable.rb\"},{\"abs_path\":\"/app/app/interactions/ingest/patents/create.rb\",\"function\":\"execute\",\"lineno\":11,\"in_app\":true,\"pre_context\":[\" logger.info \\\"[Ingest::Patents::Create] [\#{type}] Inside `execute` for: \#{epo_patent}\\\"\\n\",\"\\n\",\" begin\\n\"],\"context_line\":\" transaction do\\n\",\"post_context\":[\" create_patent!\\n\",\" create_applicants!\\n\",\" create_inventors!\\n\"],\"project_root\":\"/app\",\"filename\":\"app/interactions/ingest/patents/create.rb\"},{\"abs_path\":\"/app/app/interactions/base_interaction.rb\",\"function\":\"transaction\",\"lineno\":7,\"in_app\":true,\"pre_context\":[\" end\\n\",\"\\n\",\" def transaction\\n\"],\"context_line\":\" ActiveRecord::Base.transaction { yield }\\n\",\"post_context\":[\" end\\n\",\"\\n\",\" def transaction_rollback\\n\"],\"project_root\":\"/app\",\"filename\":\"app/interactions/base_interaction.rb\"},{\"abs_path\":\"/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.0/lib/active_record/transactions.rb\",\"function\":\"transaction\",\"lineno\":212,\"in_app\":false,\"pre_context\":[\" module ClassMethods\\n\",\" # See the ConnectionAdapters::DatabaseStatements#transaction API docs.\\n\",\" def transaction(options = {}, &block)\\n\"],\"context_line\":\" connection.transaction(options, &block)\\n\",\"post_context\":[\" end\\n\",\"\\n\",\" def before_commit(*args, &block) # :nodoc:\\n\"],\"project_root\":\"/app\",\"filename\":\"active_record/transactions.rb\"},{\"abs_path\":\"/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.0/lib/active_record/connection_adapters/abstract/database_statements.rb\",\"function\":\"transaction\",\"lineno\":277,\"in_app\":false,\"pre_context\":[\" end\\n\",\" yield\\n\",\" else\\n\"],\"context_line\":\" transaction_manager.within_new_transaction(isolation: isolation, joinable: joinable) { yield }\\n\",\"post_context\":[\" end\\n\",\" rescue ActiveRecord::Rollback\\n\",\" # rollbacks are silently swallowed\\n\"],\"project_root\":\"/app\",\"filename\":\"active_record/connection_adapters/abstract/database_statements.rb\"},{\"abs_path\":\"/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.0/lib/active_record/connection_adapters/abstract/transaction.rb\",\"function\":\"within_new_transaction\",\"lineno\":278,\"in_app\":false,\"pre_context\":[\" end\\n\",\"\\n\",\" def within_new_transaction(options = {})\\n\"],\"context_line\":\" @connection.lock.synchronize do\\n\",\"post_context\":[\" transaction = begin_transaction options\\n\",\" yield\\n\",\" rescue Exception => error\\n\"],\"project_root\":\"/app\",\"filename\":\"active_record/connection_adapters/abstract/transaction.rb\"},{\"abs_path\":\"/app/vendor/ruby-2.6.5/lib/ruby/2.6.0/monitor.rb\",\"function\":\"mon_synchronize\",\"lineno\":235,\"in_app\":false,\"pre_context\":[\" # it may break locking state.\\n\",\" Thread.handle_interrupt(EXCEPTION_NEVER){ mon_enter }\\n\",\" begin\\n\"],\"context_line\":\" yield\\n\",\"post_context\":[\" ensure\\n\",\" Thread.handle_interrupt(EXCEPTION_NEVER){ mon_exit }\\n\",\" end\\n\"],\"project_root\":\"/app\",\"filename\":\"monitor.rb\"},{\"abs_path\":\"/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.0/lib/active_record/connection_adapters/abstract/transaction.rb\",\"function\":\"block in within_new_transaction\",\"lineno\":280,\"in_app\":false,\"pre_context\":[\" def within_new_transaction(options = {})\\n\",\" @connection.lock.synchronize do\\n\",\" transaction = begin_transaction options\\n\"],\"context_line\":\" yield\\n\",\"post_context\":[\" rescue Exception => error\\n\",\" if transaction\\n\",\" rollback_transaction\\n\"],\"project_root\":\"/app\",\"filename\":\"active_record/connection_adapters/abstract/transaction.rb\"},{\"abs_path\":\"/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.0/lib/active_record/connection_adapters/abstract/database_statements.rb\",\"function\":\"block in transaction\",\"lineno\":277,\"in_app\":false,\"pre_context\":[\" end\\n\",\" yield\\n\",\" else\\n\"],\"context_line\":\" transaction_manager.within_new_transaction(isolation: isolation, joinable: joinable) { yield }\\n\",\"post_context\":[\" end\\n\",\" rescue ActiveRecord::Rollback\\n\",\" # rollbacks are silently swallowed\\n\"],\"project_root\":\"/app\",\"filename\":\"active_record/connection_adapters/abstract/database_statements.rb\"},{\"abs_path\":\"/app/app/interactions/base_interaction.rb\",\"function\":\"block in transaction\",\"lineno\":7,\"in_app\":true,\"pre_context\":[\" end\\n\",\"\\n\",\" def transaction\\n\"],\"context_line\":\" ActiveRecord::Base.transaction { yield }\\n\",\"post_context\":[\" end\\n\",\"\\n\",\" def transaction_rollback\\n\"],\"project_root\":\"/app\",\"filename\":\"app/interactions/base_interaction.rb\"},{\"abs_path\":\"/app/app/interactions/ingest/patents/create.rb\",\"function\":\"block in execute\",\"lineno\":12,\"in_app\":true,\"pre_context\":[\"\\n\",\" begin\\n\",\" transaction do\\n\"],\"context_line\":\" create_patent!\\n\",\"post_context\":[\" create_applicants!\\n\",\" create_inventors!\\n\",\" create_citations!\\n\"],\"project_root\":\"/app\",\"filename\":\"app/interactions/ingest/patents/create.rb\"},{\"abs_path\":\"/app/app/interactions/ingest/patents/create.rb\",\"function\":\"create_patent!\",\"lineno\":63,\"in_app\":true,\"pre_context\":[\" Mobility.with_locale(epo_patent.title.lang) { @patent.title = epo_patent.title.content } if epo_patent.title\\n\",\" Mobility.with_locale(epo_patent.abstract.lang) { @patent.abstract = epo_patent.abstract.content } if epo_patent.abstract\\n\",\"\\n\"],\"context_line\":\" @patent.save!\\n\",\"post_context\":[\" end\\n\",\"\\n\",\" def create_classifications!\\n\"],\"project_root\":\"/app\",\"filename\":\"app/interactions/ingest/patents/create.rb\"},{\"abs_path\":\"/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.0/lib/active_record/suppressor.rb\",\"function\":\"save!\",\"lineno\":48,\"in_app\":false,\"pre_context\":[\" end\\n\",\"\\n\",\" def save!(*) # :nodoc:\\n\"],\"context_line\":\" SuppressorRegistry.suppressed[self.class.name] ? true : super\\n\",\"post_context\":[\" end\\n\",\" end\\n\",\"\\n\"],\"project_root\":\"/app\",\"filename\":\"active_record/suppressor.rb\"},{\"abs_path\":\"/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.0/lib/active_record/transactions.rb\",\"function\":\"save!\",\"lineno\":319,\"in_app\":false,\"pre_context\":[\" end\\n\",\"\\n\",\" def save!(*) #:nodoc:\\n\"],\"context_line\":\" with_transaction_returning_status { super }\\n\",\"post_context\":[\" end\\n\",\"\\n\",\" def touch(*) #:nodoc:\\n\"],\"project_root\":\"/app\",\"filename\":\"active_record/transactions.rb\"},{\"abs_path\":\"/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.0/lib/active_record/transactions.rb\",\"function\":\"with_transaction_returning_status\",\"lineno\":366,\"in_app\":false,\"pre_context\":[\" # instance.\\n\",\" def with_transaction_returning_status\\n\",\" status = nil\\n\"],\"context_line\":\" self.class.transaction do\\n\",\"post_context\":[\" if has_transactional_callbacks?\\n\",\" add_to_transaction\\n\",\" else\\n\"],\"project_root\":\"/app\",\"filename\":\"active_record/transactions.rb\"},{\"abs_path\":\"/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.0/lib/active_record/transactions.rb\",\"function\":\"transaction\",\"lineno\":212,\"in_app\":false,\"pre_context\":[\" module ClassMethods\\n\",\" # See the ConnectionAdapters::DatabaseStatements#transaction API docs.\\n\",\" def transaction(options = {}, &block)\\n\"],\"context_line\":\" connection.transaction(options, &block)\\n\",\"post_context\":[\" end\\n\",\"\\n\",\" def before_commit(*args, &block) # :nodoc:\\n\"],\"project_root\":\"/app\",\"filename\":\"active_record/transactions.rb\"},{\"abs_path\":\"/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.0/lib/active_record/connection_adapters/abstract/database_statements.rb\",\"function\":\"transaction\",\"lineno\":275,\"in_app\":false,\"pre_context\":[\" if isolation\\n\",\" raise ActiveRecord::TransactionIsolationError, \\\"cannot set isolation when joining a transaction\\\"\\n\",\" end\\n\"],\"context_line\":\" yield\\n\",\"post_context\":[\" else\\n\",\" transaction_manager.within_new_transaction(isolation: isolation, joinable: joinable) { yield }\\n\",\" end\\n\"],\"project_root\":\"/app\",\"filename\":\"active_record/connection_adapters/abstract/database_statements.rb\"},{\"abs_path\":\"/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.0/lib/active_record/transactions.rb\",\"function\":\"block in with_transaction_returning_status\",\"lineno\":375,\"in_app\":false,\"pre_context\":[\" end\\n\",\" remember_transaction_record_state\\n\",\"\\n\"],\"context_line\":\" status = yield\\n\",\"post_context\":[\" raise ActiveRecord::Rollback unless status\\n\",\" end\\n\",\" status\\n\"],\"project_root\":\"/app\",\"filename\":\"active_record/transactions.rb\"},{\"abs_path\":\"/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.0/lib/active_record/transactions.rb\",\"function\":\"block in save!\",\"lineno\":319,\"in_app\":false,\"pre_context\":[\" end\\n\",\"\\n\",\" def save!(*) #:nodoc:\\n\"],\"context_line\":\" with_transaction_returning_status { super }\\n\",\"post_context\":[\" end\\n\",\"\\n\",\" def touch(*) #:nodoc:\\n\"],\"project_root\":\"/app\",\"filename\":\"active_record/transactions.rb\"},{\"abs_path\":\"/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.0/lib/active_record/validations.rb\",\"function\":\"save!\",\"lineno\":53,\"in_app\":false,\"pre_context\":[\" # Attempts to save the record just like {ActiveRecord::Base#save}[rdoc-ref:Base#save] but\\n\",\" # will raise an ActiveRecord::RecordInvalid exception instead of returning +false+ if the record is not valid.\\n\",\" def save!(options = {})\\n\"],\"context_line\":\" perform_validations(options) ? super : raise_validation_error\\n\",\"post_context\":[\" end\\n\",\"\\n\",\" # Runs all the validations within the specified context. Returns +true+ if\\n\"],\"project_root\":\"/app\",\"filename\":\"active_record/validations.rb\"},{\"abs_path\":\"/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.0/lib/active_record/persistence.rb\",\"function\":\"save!\",\"lineno\":503,\"in_app\":false,\"pre_context\":[\" #\\n\",\" # Unless an error is raised, returns true.\\n\",\" def save!(*args, &block)\\n\"],\"context_line\":\" create_or_update(*args, &block) || raise(RecordNotSaved.new(\\\"Failed to save the record\\\", self))\\n\",\"post_context\":[\" end\\n\",\"\\n\",\" # Deletes the record in the database and freezes this instance to\\n\"],\"project_root\":\"/app\",\"filename\":\"active_record/persistence.rb\"},{\"abs_path\":\"/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.0/lib/active_record/timestamp.rb\",\"function\":\"create_or_update\",\"lineno\":129,\"in_app\":false,\"pre_context\":[\"\\n\",\" def create_or_update(touch: true, **)\\n\",\" @_touch_record = touch\\n\"],\"context_line\":\" super\\n\",\"post_context\":[\" end\\n\",\"\\n\",\" def should_record_timestamps?\\n\"],\"project_root\":\"/app\",\"filename\":\"active_record/timestamp.rb\"},{\"abs_path\":\"/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.0/lib/active_record/callbacks.rb\",\"function\":\"create_or_update\",\"lineno\":328,\"in_app\":false,\"pre_context\":[\" private\\n\",\"\\n\",\" def create_or_update(**)\\n\"],\"context_line\":\" _run_save_callbacks { super }\\n\",\"post_context\":[\" end\\n\",\"\\n\",\" def _create_record\\n\"],\"project_root\":\"/app\",\"filename\":\"active_record/callbacks.rb\"},{\"abs_path\":\"/app/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.0/lib/active_support/callbacks.rb\",\"function\":\"_run_save_callbacks\",\"lineno\":827,\"in_app\":false,\"pre_context\":[\"\\n\",\" module_eval <<-RUBY, __FILE__, __LINE__ + 1\\n\",\" def _run_\#{name}_callbacks(&block)\\n\"],\"context_line\":\" run_callbacks \#{name.inspect}, &block\\n\",\"post_context\":[\" end\\n\",\"\\n\",\" def self._\#{name}_callbacks\\n\"],\"project_root\":\"/app\",\"filename\":\"active_support/callbacks.rb\"},{\"abs_path\":\"/app/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.0/lib/active_support/callbacks.rb\",\"function\":\"run_callbacks\",\"lineno\":135,\"in_app\":false,\"pre_context\":[\" # Common case: no 'around' callbacks defined\\n\",\" if next_sequence.final?\\n\",\" next_sequence.invoke_before(env)\\n\"],\"context_line\":\" env.value = !env.halted && (!block_given? || yield)\\n\",\"post_context\":[\" next_sequence.invoke_after(env)\\n\",\" env.value\\n\",\" else\\n\"],\"project_root\":\"/app\",\"filename\":\"active_support/callbacks.rb\"},{\"abs_path\":\"/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.0/lib/active_record/callbacks.rb\",\"function\":\"block in create_or_update\",\"lineno\":328,\"in_app\":false,\"pre_context\":[\" private\\n\",\"\\n\",\" def create_or_update(**)\\n\"],\"context_line\":\" _run_save_callbacks { super }\\n\",\"post_context\":[\" end\\n\",\"\\n\",\" def _create_record\\n\"],\"project_root\":\"/app\",\"filename\":\"active_record/callbacks.rb\"},{\"abs_path\":\"/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.0/lib/active_record/persistence.rb\",\"function\":\"create_or_update\",\"lineno\":906,\"in_app\":false,\"pre_context\":[\" def create_or_update(**, &block)\\n\",\" _raise_readonly_record_error if readonly?\\n\",\" return false if destroyed?\\n\"],\"context_line\":\" result = new_record? ? _create_record(&block) : _update_record(&block)\\n\",\"post_context\":[\" result != false\\n\",\" end\\n\",\"\\n\"],\"project_root\":\"/app\",\"filename\":\"active_record/persistence.rb\"},{\"abs_path\":\"/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.0/lib/active_record/timestamp.rb\",\"function\":\"_create_record\",\"lineno\":111,\"in_app\":false,\"pre_context\":[\" end\\n\",\" end\\n\",\"\\n\"],\"context_line\":\" super\\n\",\"post_context\":[\" end\\n\",\"\\n\",\" def _update_record\\n\"],\"project_root\":\"/app\",\"filename\":\"active_record/timestamp.rb\"},{\"abs_path\":\"/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.0/lib/active_record/callbacks.rb\",\"function\":\"_create_record\",\"lineno\":332,\"in_app\":false,\"pre_context\":[\" end\\n\",\"\\n\",\" def _create_record\\n\"],\"context_line\":\" _run_create_callbacks { super }\\n\",\"post_context\":[\" end\\n\",\"\\n\",\" def _update_record\\n\"],\"project_root\":\"/app\",\"filename\":\"active_record/callbacks.rb\"},{\"abs_path\":\"/app/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.0/lib/active_support/callbacks.rb\",\"function\":\"_run_create_callbacks\",\"lineno\":827,\"in_app\":false,\"pre_context\":[\"\\n\",\" module_eval <<-RUBY, __FILE__, __LINE__ + 1\\n\",\" def _run_\#{name}_callbacks(&block)\\n\"],\"context_line\":\" run_callbacks \#{name.inspect}, &block\\n\",\"post_context\":[\" end\\n\",\"\\n\",\" def self._\#{name}_callbacks\\n\"],\"project_root\":\"/app\",\"filename\":\"active_support/callbacks.rb\"},{\"abs_path\":\"/app/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.0/lib/active_support/callbacks.rb\",\"function\":\"run_callbacks\",\"lineno\":135,\"in_app\":false,\"pre_context\":[\" # Common case: no 'around' callbacks defined\\n\",\" if next_sequence.final?\\n\",\" next_sequence.invoke_before(env)\\n\"],\"context_line\":\" env.value = !env.halted && (!block_given? || yield)\\n\",\"post_context\":[\" next_sequence.invoke_after(env)\\n\",\" env.value\\n\",\" else\\n\"],\"project_root\":\"/app\",\"filename\":\"active_support/callbacks.rb\"},{\"abs_path\":\"/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.0/lib/active_record/callbacks.rb\",\"function\":\"block in _create_record\",\"lineno\":332,\"in_app\":false,\"pre_context\":[\" end\\n\",\"\\n\",\" def _create_record\\n\"],\"context_line\":\" _run_create_callbacks { super }\\n\",\"post_context\":[\" end\\n\",\"\\n\",\" def _update_record\\n\"],\"project_root\":\"/app\",\"filename\":\"active_record/callbacks.rb\"},{\"abs_path\":\"/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.0/lib/active_record/attribute_methods/dirty.rb\",\"function\":\"_create_record\",\"lineno\":211,\"in_app\":false,\"pre_context\":[\" end\\n\",\"\\n\",\" def _create_record(attribute_names = attribute_names_for_partial_writes)\\n\"],\"context_line\":\" id = super\\n\",\"post_context\":[\" changes_applied\\n\",\" id\\n\",\" end\\n\"],\"project_root\":\"/app\",\"filename\":\"active_record/attribute_methods/dirty.rb\"},{\"abs_path\":\"/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.0/lib/active_record/locking/optimistic.rb\",\"function\":\"_create_record\",\"lineno\":70,\"in_app\":false,\"pre_context\":[\" # a change from the default, since the database might have no default\\n\",\" attribute_names |= [self.class.locking_column]\\n\",\" end\\n\"],\"context_line\":\" super\\n\",\"post_context\":[\" end\\n\",\"\\n\",\" def _touch_row(attribute_names, time)\\n\"],\"project_root\":\"/app\",\"filename\":\"active_record/locking/optimistic.rb\"},{\"abs_path\":\"/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.0/lib/active_record/counter_cache.rb\",\"function\":\"_create_record\",\"lineno\":163,\"in_app\":false,\"pre_context\":[\"\\n\",\" private\\n\",\" def _create_record(attribute_names = self.attribute_names)\\n\"],\"context_line\":\" id = super\\n\",\"post_context\":[\"\\n\",\" each_counter_cached_associations do |association|\\n\",\" association.increment_counters\\n\"],\"project_root\":\"/app\",\"filename\":\"active_record/counter_cache.rb\"},{\"abs_path\":\"/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.0/lib/active_record/persistence.rb\",\"function\":\"_create_record\",\"lineno\":933,\"in_app\":false,\"pre_context\":[\" def _create_record(attribute_names = self.attribute_names)\\n\",\" attribute_names = attributes_for_create(attribute_names)\\n\",\"\\n\"],\"context_line\":\" new_id = self.class._insert_record(\\n\",\"post_context\":[\" attributes_with_values(attribute_names)\\n\",\" )\\n\",\"\\n\"],\"project_root\":\"/app\",\"filename\":\"active_record/persistence.rb\"},{\"abs_path\":\"/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.0/lib/active_record/persistence.rb\",\"function\":\"_insert_record\",\"lineno\":375,\"in_app\":false,\"pre_context\":[\" im = arel_table.compile_insert(_substitute_values(values))\\n\",\" end\\n\",\"\\n\"],\"context_line\":\" connection.insert(im, \\\"\#{self} Create\\\", primary_key || false, primary_key_value)\\n\",\"post_context\":[\" end\\n\",\"\\n\",\" def _update_record(values, constraints) # :nodoc:\\n\"],\"project_root\":\"/app\",\"filename\":\"active_record/persistence.rb\"},{\"abs_path\":\"/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.0/lib/active_record/connection_adapters/abstract/query_cache.rb\",\"function\":\"insert\",\"lineno\":22,\"in_app\":false,\"pre_context\":[\" base.class_eval <<-end_code, __FILE__, __LINE__ + 1\\n\",\" def \#{method_name}(*)\\n\",\" ActiveRecord::Base.clear_query_caches_for_current_thread if @query_cache_enabled\\n\"],\"context_line\":\" super\\n\",\"post_context\":[\" end\\n\",\" end_code\\n\",\" end\\n\"],\"project_root\":\"/app\",\"filename\":\"active_record/connection_adapters/abstract/query_cache.rb\"},{\"abs_path\":\"/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.0/lib/active_record/connection_adapters/abstract/database_statements.rb\",\"function\":\"insert\",\"lineno\":162,\"in_app\":false,\"pre_context\":[\" # passed in as +id_value+.\\n\",\" def insert(arel, name = nil, pk = nil, id_value = nil, sequence_name = nil, binds = [])\\n\",\" sql, binds = to_sql_and_binds(arel, binds)\\n\"],\"context_line\":\" value = exec_insert(sql, name, binds, pk, sequence_name)\\n\",\"post_context\":[\" id_value || last_inserted_id(value)\\n\",\" end\\n\",\" alias create insert\\n\"],\"project_root\":\"/app\",\"filename\":\"active_record/connection_adapters/abstract/database_statements.rb\"},{\"abs_path\":\"/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.0/lib/active_record/connection_adapters/postgresql/database_statements.rb\",\"function\":\"exec_insert\",\"lineno\":130,\"in_app\":false,\"pre_context\":[\"\\n\",\" def exec_insert(sql, name = nil, binds = [], pk = nil, sequence_name = nil)\\n\",\" if use_insert_returning? || pk == false\\n\"],\"context_line\":\" super\\n\",\"post_context\":[\" else\\n\",\" result = exec_query(sql, name, binds)\\n\",\" unless sequence_name\\n\"],\"project_root\":\"/app\",\"filename\":\"active_record/connection_adapters/postgresql/database_statements.rb\"},{\"abs_path\":\"/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.0/lib/active_record/connection_adapters/abstract/database_statements.rb\",\"function\":\"exec_insert\",\"lineno\":135,\"in_app\":false,\"pre_context\":[\" # the executed +sql+ statement.\\n\",\" def exec_insert(sql, name = nil, binds = [], pk = nil, sequence_name = nil)\\n\",\" sql, binds = sql_for_insert(sql, pk, binds)\\n\"],\"context_line\":\" exec_query(sql, name, binds)\\n\",\"post_context\":[\" end\\n\",\"\\n\",\" # Executes delete +sql+ statement in the context of this connection using\\n\"],\"project_root\":\"/app\",\"filename\":\"active_record/connection_adapters/abstract/database_statements.rb\"},{\"abs_path\":\"/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.0/lib/active_record/connection_adapters/postgresql/database_statements.rb\",\"function\":\"exec_query\",\"lineno\":96,\"in_app\":false,\"pre_context\":[\" end\\n\",\"\\n\",\" def exec_query(sql, name = \\\"SQL\\\", binds = [], prepare: false)\\n\"],\"context_line\":\" execute_and_clear(sql, name, binds, prepare: prepare) do |result|\\n\",\"post_context\":[\" types = {}\\n\",\" fields = result.fields\\n\",\" fields.each_with_index do |fname, i|\\n\"],\"project_root\":\"/app\",\"filename\":\"active_record/connection_adapters/postgresql/database_statements.rb\"},{\"abs_path\":\"/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.0/lib/active_record/connection_adapters/postgresql_adapter.rb\",\"function\":\"execute_and_clear\",\"lineno\":649,\"in_app\":false,\"pre_context\":[\" if without_prepared_statement?(binds)\\n\",\" result = exec_no_cache(sql, name, [])\\n\",\" elsif !prepare\\n\"],\"context_line\":\" result = exec_no_cache(sql, name, binds)\\n\",\"post_context\":[\" else\\n\",\" result = exec_cache(sql, name, binds)\\n\",\" end\\n\"],\"project_root\":\"/app\",\"filename\":\"active_record/connection_adapters/postgresql_adapter.rb\"},{\"abs_path\":\"/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.0/lib/active_record/connection_adapters/postgresql_adapter.rb\",\"function\":\"exec_no_cache\",\"lineno\":666,\"in_app\":false,\"pre_context\":[\" update_typemap_for_default_timezone\\n\",\"\\n\",\" type_casted_binds = type_casted_binds(binds)\\n\"],\"context_line\":\" log(sql, name, binds, type_casted_binds) do\\n\",\"post_context\":[\" ActiveSupport::Dependencies.interlock.permit_concurrent_loads do\\n\",\" @connection.exec_params(sql, type_casted_binds)\\n\",\" end\\n\"],\"project_root\":\"/app\",\"filename\":\"active_record/connection_adapters/postgresql_adapter.rb\"},{\"abs_path\":\"/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.0/lib/active_record/connection_adapters/abstract_adapter.rb\",\"function\":\"log\",\"lineno\":697,\"in_app\":false,\"pre_context\":[\" end\\n\",\"\\n\",\" def log(sql, name = \\\"SQL\\\", binds = [], type_casted_binds = [], statement_name = nil) # :doc:\\n\"],\"context_line\":\" @instrumenter.instrument(\\n\",\"post_context\":[\" \\\"sql.active_record\\\",\\n\",\" sql: sql,\\n\",\" name: name,\\n\"],\"project_root\":\"/app\",\"filename\":\"active_record/connection_adapters/abstract_adapter.rb\"},{\"abs_path\":\"/app/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.0/lib/active_support/notifications/instrumenter.rb\",\"function\":\"instrument\",\"lineno\":24,\"in_app\":false,\"pre_context\":[\" # some of the listeners might have state\\n\",\" listeners_state = start name, payload\\n\",\" begin\\n\"],\"context_line\":\" yield payload if block_given?\\n\",\"post_context\":[\" rescue Exception => e\\n\",\" payload[:exception] = [e.class.name, e.message]\\n\",\" payload[:exception_object] = e\\n\"],\"project_root\":\"/app\",\"filename\":\"active_support/notifications/instrumenter.rb\"},{\"abs_path\":\"/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.0/lib/active_record/connection_adapters/abstract_adapter.rb\",\"function\":\"block in log\",\"lineno\":706,\"in_app\":false,\"pre_context\":[\" statement_name: statement_name,\\n\",\" connection_id: object_id,\\n\",\" connection: self) do\\n\"],\"context_line\":\" @lock.synchronize do\\n\",\"post_context\":[\" yield\\n\",\" end\\n\",\" rescue => e\\n\"],\"project_root\":\"/app\",\"filename\":\"active_record/connection_adapters/abstract_adapter.rb\"},{\"abs_path\":\"/app/vendor/ruby-2.6.5/lib/ruby/2.6.0/monitor.rb\",\"function\":\"mon_synchronize\",\"lineno\":235,\"in_app\":false,\"pre_context\":[\" # it may break locking state.\\n\",\" Thread.handle_interrupt(EXCEPTION_NEVER){ mon_enter }\\n\",\" begin\\n\"],\"context_line\":\" yield\\n\",\"post_context\":[\" ensure\\n\",\" Thread.handle_interrupt(EXCEPTION_NEVER){ mon_exit }\\n\",\" end\\n\"],\"project_root\":\"/app\",\"filename\":\"monitor.rb\"},{\"abs_path\":\"/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.0/lib/active_record/connection_adapters/abstract_adapter.rb\",\"function\":\"block (2 levels) in log\",\"lineno\":707,\"in_app\":false,\"pre_context\":[\" connection_id: object_id,\\n\",\" connection: self) do\\n\",\" @lock.synchronize do\\n\"],\"context_line\":\" yield\\n\",\"post_context\":[\" end\\n\",\" rescue => e\\n\",\" raise translate_exception_class(e, sql, binds)\\n\"],\"project_root\":\"/app\",\"filename\":\"active_record/connection_adapters/abstract_adapter.rb\"},{\"abs_path\":\"/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.0/lib/active_record/connection_adapters/postgresql_adapter.rb\",\"function\":\"block in exec_no_cache\",\"lineno\":667,\"in_app\":false,\"pre_context\":[\"\\n\",\" type_casted_binds = type_casted_binds(binds)\\n\",\" log(sql, name, binds, type_casted_binds) do\\n\"],\"context_line\":\" ActiveSupport::Dependencies.interlock.permit_concurrent_loads do\\n\",\"post_context\":[\" @connection.exec_params(sql, type_casted_binds)\\n\",\" end\\n\",\" end\\n\"],\"project_root\":\"/app\",\"filename\":\"active_record/connection_adapters/postgresql_adapter.rb\"},{\"abs_path\":\"/app/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.0/lib/active_support/dependencies/interlock.rb\",\"function\":\"permit_concurrent_loads\",\"lineno\":47,\"in_app\":false,\"pre_context\":[\" end\\n\",\"\\n\",\" def permit_concurrent_loads\\n\"],\"context_line\":\" @lock.yield_shares(compatible: [:load]) do\\n\",\"post_context\":[\" yield\\n\",\" end\\n\",\" end\\n\"],\"project_root\":\"/app\",\"filename\":\"active_support/dependencies/interlock.rb\"},{\"abs_path\":\"/app/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.0/lib/active_support/concurrency/share_lock.rb\",\"function\":\"yield_shares\",\"lineno\":187,\"in_app\":false,\"pre_context\":[\" end\\n\",\"\\n\",\" begin\\n\"],\"context_line\":\" yield\\n\",\"post_context\":[\" ensure\\n\",\" synchronize do\\n\",\" wait_for(:yield_shares) { @exclusive_thread && @exclusive_thread != Thread.current }\\n\"],\"project_root\":\"/app\",\"filename\":\"active_support/concurrency/share_lock.rb\"},{\"abs_path\":\"/app/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.0/lib/active_support/dependencies/interlock.rb\",\"function\":\"block in permit_concurrent_loads\",\"lineno\":48,\"in_app\":false,\"pre_context\":[\"\\n\",\" def permit_concurrent_loads\\n\",\" @lock.yield_shares(compatible: [:load]) do\\n\"],\"context_line\":\" yield\\n\",\"post_context\":[\" end\\n\",\" end\\n\",\"\\n\"],\"project_root\":\"/app\",\"filename\":\"active_support/dependencies/interlock.rb\"},{\"abs_path\":\"/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.0/lib/active_record/connection_adapters/postgresql_adapter.rb\",\"function\":\"block (2 levels) in exec_no_cache\",\"lineno\":668,\"in_app\":false,\"pre_context\":[\" type_casted_binds = type_casted_binds(binds)\\n\",\" log(sql, name, binds, type_casted_binds) do\\n\",\" ActiveSupport::Dependencies.interlock.permit_concurrent_loads do\\n\"],\"context_line\":\" @connection.exec_params(sql, type_casted_binds)\\n\",\"post_context\":[\" end\\n\",\" end\\n\",\" end\\n\"],\"project_root\":\"/app\",\"filename\":\"active_record/connection_adapters/postgresql_adapter.rb\"},{\"abs_path\":\"/app/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.0/lib/active_record/connection_adapters/postgresql_adapter.rb\",\"function\":\"async_exec_params\",\"lineno\":668,\"in_app\":false,\"pre_context\":[\" type_casted_binds = type_casted_binds(binds)\\n\",\" log(sql, name, binds, type_casted_binds) do\\n\",\" ActiveSupport::Dependencies.interlock.permit_concurrent_loads do\\n\"],\"context_line\":\" @connection.exec_params(sql, type_casted_binds)\\n\",\"post_context\":[\" end\\n\",\" end\\n\",\" end\\n\"],\"project_root\":\"/app\",\"filename\":\"active_record/connection_adapters/postgresql_adapter.rb\"}]}},{\"type\":\"ActiveRecord::RecordNotUnique\",\"value\":\"PG::UniqueViolation: ERROR: duplicate key value violates unique constraint \\\"index_patents_on_publication_number\\\"\\nDETAIL: Key (publication_number)=(AU2003206825B8) already exists.\\n\",\"module\":\"ActiveRecord\",\"stacktrace\":null}]},\"logentry\":{\"params\":null,\"message\":\"PG::UniqueViolation: ERROR: duplicate key value violates unique constraint \\\"index_patents_on_publication_number\\\"\\nDETAIL: Key (publication_number)=(AU2003206825B8) already exists.\\n\"}}],\"retry\":true,\"queue\":\"default\",\"backtrace\":true,\"jid\":\"dc592e52309f3e00e300924a\",\"created_at\":1571449724.19329,\"enqueued_at\":1571459752.233215,\"error_message\":\"undefined method `[]' for nil:NilClass\",\"error_class\":\"NoMethodError\",\"failed_at\":1571449728.058785,\"retry_count\":1,\"error_backtrace\":\"eJzNl+1u2jAUhm8F9c82aWDikJT2VqbJc5JD8DBxeuJAe/c7ttMuIKGCcLT9\\nQAp2/D4+n3Z+PDDZtuwATWWQFX1TaWDYF2+ML/LFktWw71gHjcW3OUp6bc4X\\nCacJrQrmB1ipFc0vsHhep8+qmf2qwYo9dJ2sQWzQ7AW8ltBaZZovD9+j8p4+\\neNrU78zIkCTJPGUjlYZK0LIqMiFdeYBTFkBTNoq+ajormxK8o5JPCE567qSz\\noPCXtDF4lFjJQnslni4vSbnf0eAO8H1rIvx16x79qhaQ9PbX2qcq2KmXOQ0s\\nuN/XMMJaNCUF23jp5Cn34vAKZW9B/DZFZEAeAlRoU+5mX/lMk+G6+zajweHF\\nu4F7VdEC8jSwcitV47npesSlJ9UczO7q/B5YfaNeepiTVzrPTbIxWIRp5zQX\\nNTwAjvbiIx6KrJRaT2PlanmPlZ/UgIUapWs9H9tyzP/bpBtZoelGQpwlfnpq\\nR6xsP6Wk+bi88nF5VaprpS23dxMpvwUCpUpo6aEfElDenwFnxmRjY7JJjEE6\\nijpHW53F54aMlqVVB+j6tjVoPSMUThgXwwQLTZXqRxyRREMzX4e+5Ebi0hC0\\nkdVwYvBT2+LT/qFtya2Qa5KBx+tqZzmdjHN6NUlOnxB5Fu4LdIOxsbsNP+k2\\n6WTdhm6kNQz+myowPLt4MZmmcz6G6qi1KaJ3Tr46LfhoFowiEc7lo7KxY5yG\\nGLcILR3PsT0TxKeptSTnw9YnONuHfBnGhGkiuyYP+thf/Wl5UZdOAu39EWrq\\n6DxdmTqa7nl6d3IDwm4RJH1P/vwDeE9JnQ==\\n\",\"retried_at\":1571456409.89409}"}}, "level"=>"error", "logger"=>"ruby", "message"=>"undefined method `[]' for nil:NilClass", "modules"=>{"rake"=>"12.3.3", "concurrent-ruby"=>"1.1.5", "i18n"=>"1.7.0", "minitest"=>"5.12.2", "thread_safe"=>"0.3.6", "tzinfo"=>"1.2.5", "zeitwerk"=>"2.2.0", "activesupport"=>"6.0.0", "builder"=>"3.2.3", "erubi"=>"1.9.0", "mini_portile2"=>"2.4.0", "nokogiri"=>"1.10.4", "rails-dom-testing"=>"2.0.3", "crass"=>"1.0.5", "loofah"=>"2.3.0", "rails-html-sanitizer"=>"1.3.0", "actionview"=>"6.0.0", "rack"=>"2.0.7", "rack-test"=>"1.1.0", "actionpack"=>"6.0.0", "nio4r"=>"2.5.2", "websocket-extensions"=>"0.1.4", "websocket-driver"=>"0.7.1", "actioncable"=>"6.0.0", "globalid"=>"0.4.2", "activejob"=>"6.0.0", "activemodel"=>"6.0.0", "activerecord"=>"6.0.0", "mimemagic"=>"0.3.3", "marcel"=>"0.3.3", "activestorage"=>"6.0.0", "mini_mime"=>"1.0.2", "mail"=>"2.7.1", "actionmailbox"=>"6.0.0", "actionmailer"=>"6.0.0", "actiontext"=>"6.0.0", "active_interaction"=>"3.7.1", "public_suffix"=>"4.0.1", "addressable"=>"2.7.0", "adroit-age"=>"2.0.0", "ancestry"=>"3.0.7", "attribute_normalizer"=>"1.2.0", "aws-eventstream"=>"1.0.3", "aws-partitions"=>"1.225.0", "aws-sigv4"=>"1.1.0", "jmespath"=>"1.4.0", "aws-sdk-core"=>"3.69.0", "aws-sdk-kms"=>"1.24.0", "aws-sdk-s3"=>"1.50.0", "bcrypt"=>"3.1.13", "bundler"=>"1.17.3", "method_source"=>"0.9.2", "thor"=>"0.20.3", "railties"=>"6.0.0", "sprockets"=>"4.0.0", "sprockets-rails"=>"3.2.1", "rails"=>"6.0.0", "boolean_timestamps"=>"1.0.2", "msgpack"=>"1.3.1", "bootsnap"=>"1.4.5", "chartkick"=>"3.2.1", "clockwork"=>"2.0.4", "deep_merge"=>"1.2.1", "dry-core"=>"0.4.9", "dry-configurable"=>"0.8.3", "dry-equalizer"=>"0.2.2", "dry-initializer"=>"3.0.1", "dry-logic"=>"1.0.3", "dry-container"=>"0.7.2", "dry-inflector"=>"0.2.0", "dry-types"=>"1.2.0", "dry-schema"=>"1.4.1", "config"=>"2.0.0", "connection_pool"=>"2.2.2", "i18n_data"=>"0.8.0", "sixarm_ruby_unaccent"=>"1.2.0", "unicode_utils"=>"1.4.0", "countries"=>"3.0.0", "default_value_for"=>"3.3.0", "descriptive-statistics"=>"2.2.0", "unf_ext"=>"0.0.7.6", "unf"=>"0.1.4", "domain_name"=>"0.5.20190701", "multi_json"=>"1.14.1", "elasticsearch-api"=>"7.3.0", "multipart-post"=>"2.1.1", "faraday"=>"0.17.0", "elasticsearch-transport"=>"7.3.0", "elasticsearch"=>"7.3.0", "email_prefixer"=>"1.2.0", "email_validator"=>"2.0.1", "enumerize"=>"2.3.1", "errbase"=>"0.1.1", "ffi"=>"1.11.1", "ethon"=>"0.12.0", "faker"=>"2.6.0", "fast_blank"=>"1.0.0", "fast_jsonapi"=>"1.5", "google-cloud-env"=>"1.2.1", "google-cloud-core"=>"1.3.2", "jwt"=>"2.2.1", "memoist"=>"0.16.0", "os"=>"1.0.1", "signet"=>"0.12.0", "googleauth"=>"0.9.0", "google-cloud-translate"=>"1.4.0", "groupdate"=>"4.1.2", "hashie"=>"3.6.0", "http-cookie"=>"1.0.3", "http-form_data"=>"2.1.1", "http_parser.rb"=>"0.6.0", "http"=>"4.1.1", "iso-639"=>"0.2.8", "iso_country_codes"=>"0.7.8", "libsqreen"=>"0.3.0.0.1", "request_store"=>"1.4.1", "lograge"=>"0.11.2", "mime-types-data"=>"3.2019.1009", "mime-types"=>"3.3", "net-http-digest_auth"=>"1.4.1", "net-http-persistent"=>"3.1.0", "ntlm-http"=>"0.1.1", "webrobots"=>"0.1.2", "mechanize"=>"2.7.6", "mobility"=>"0.8.8", "multi_xml"=>"0.6.0", "nokogiri-happymapper"=>"0.8.1", "oauth"=>"0.5.4", "oauth2"=>"1.4.2", "oj"=>"3.9.2", "pagy"=>"3.6.0", "pg"=>"1.1.4", "pg_query"=>"1.1.0", "pghero"=>"2.3.0", "puma"=>"4.2.1", "pundit"=>"2.1.0", "rack-protection"=>"2.0.7", "rack-proxy"=>"0.6.5", "rainbow"=>"3.0.0", "redis"=>"4.1.3", "retriable"=>"3.1.2", "roboto"=>"1.0.1", "rolify"=>"5.2.0", "rubyzip"=>"2.0.0", "safely_block"=>"0.2.2", "sassc"=>"2.2.1", "tilt"=>"2.0.10", "sassc-rails"=>"2.1.2", "sass-rails"=>"6.0.0", "searchjoy"=>"0.4.2", "searchkick"=>"4.1.0", "sentry-raven"=>"2.12.0", "sidekiq"=>"6.0.2", "sidekiq-bulk"=>"0.2.0", "sidekiq-oj"=>"0.2.0", "sidekiq-unique-jobs"=>"6.0.15", "sorcery"=>"0.14.0", "sq_mini_racer"=>"0.2.5.0.1.beta2", "sqreen"=>"1.18.0", "turbolinks-source"=>"5.2.0", "turbolinks"=>"5.2.1", "typhoeus"=>"1.3.1", "voight_kampff"=>"1.1.3", "webpacker"=>"4.0.7"}, "platform"=>"ruby", "release"=>"194f1effbc1f6c7e284325ef97b102b3f6d839b2", "sdk"=>{"name"=>"raven-ruby", "version"=>"2.12.0"}, "server_name"=>"worker_a.1", "tags"=>{}, "timestamp"=>"2019-10-19T04:35:58", "transaction"=>"Sidekiq/SentryWorker", "user"=>{}, "exception"=>{"values"=>[{"type"=>"NoMethodError", "value"=>"undefined method `[]' for nil:NilClass", "module"=>"", "stacktrace"=>{"frames"=>[{"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/util.rb", "function"=>"block in safe_thread", "lineno"=>24, "in_app"=>false, "pre_context"=>[" def safe_thread(name, &block)\n", " Thread.new do\n", " Thread.current.name = name\n"], "context_line"=>" watchdog(name, &block)\n", "post_context"=>[" end\n", " end\n", "\n"], "project_root"=>"/app", "filename"=>"sidekiq/util.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/util.rb", "function"=>"watchdog", "lineno"=>15, "in_app"=>false, "pre_context"=>[" include ExceptionHandler\n", "\n", " def watchdog(last_words)\n"], "context_line"=>" yield\n", "post_context"=>[" rescue Exception => ex\n", " handle_exception(ex, {context: last_words})\n", " raise ex\n"], "project_root"=>"/app", "filename"=>"sidekiq/util.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/processor.rb", "function"=>"run", "lineno"=>68, "in_app"=>false, "pre_context"=>[" private unless $TESTING\n", "\n", " def run\n"], "context_line"=>" process_one until @done\n", "post_context"=>[" @mgr.processor_stopped(self)\n", " rescue Sidekiq::Shutdown\n", " @mgr.processor_stopped(self)\n"], "project_root"=>"/app", "filename"=>"sidekiq/processor.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/processor.rb", "function"=>"process_one", "lineno"=>78, "in_app"=>false, "pre_context"=>["\n", " def process_one\n", " @job = fetch\n"], "context_line"=>" process(@job) if @job\n", "post_context"=>[" @job = nil\n", " end\n", "\n"], "project_root"=>"/app", "filename"=>"sidekiq/processor.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/processor.rb", "function"=>"process", "lineno"=>162, "in_app"=>false, "pre_context"=>["\n", " ack = false\n", " begin\n"], "context_line"=>" dispatch(job_hash, queue, jobstr) do |worker|\n", "post_context"=>[" Sidekiq.server_middleware.invoke(worker, job_hash, queue) do\n", " execute_job(worker, job_hash[\"args\"])\n", " end\n"], "project_root"=>"/app", "filename"=>"sidekiq/processor.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/processor.rb", "function"=>"dispatch", "lineno"=>123, "in_app"=>false, "pre_context"=>[" # we pass original String of JSON to respected methods\n", " # to re-parse it there if we need access to the original, untouched job\n", "\n"], "context_line"=>" @job_logger.prepare(job_hash) do\n", "post_context"=>[" @retrier.global(jobstr, queue) do\n", " @job_logger.call(job_hash, queue) do\n", " stats(jobstr, queue) do\n"], "project_root"=>"/app", "filename"=>"sidekiq/processor.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/job_logger.rb", "function"=>"prepare", "lineno"=>33, "in_app"=>false, "pre_context"=>[" Sidekiq::Context.with(job_hash_context(job_hash), &block)\n", " end\n", " else\n"], "context_line"=>" Sidekiq::Context.with(job_hash_context(job_hash), &block)\n", "post_context"=>[" end\n", " end\n", "\n"], "project_root"=>"/app", "filename"=>"sidekiq/job_logger.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/logger.rb", "function"=>"with", "lineno"=>10, "in_app"=>false, "pre_context"=>[" module Context\n", " def self.with(hash)\n", " current.merge!(hash)\n"], "context_line"=>" yield\n", "post_context"=>[" ensure\n", " hash.each_key { |key| current.delete(key) }\n", " end\n"], "project_root"=>"/app", "filename"=>"sidekiq/logger.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/processor.rb", "function"=>"block in dispatch", "lineno"=>124, "in_app"=>false, "pre_context"=>[" # to re-parse it there if we need access to the original, untouched job\n", "\n", " @job_logger.prepare(job_hash) do\n"], "context_line"=>" @retrier.global(jobstr, queue) do\n", "post_context"=>[" @job_logger.call(job_hash, queue) do\n", " stats(jobstr, queue) do\n", " # Rails 5 requires a Reloader to wrap code execution. In order to\n"], "project_root"=>"/app", "filename"=>"sidekiq/processor.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/job_retry.rb", "function"=>"global", "lineno"=>78, "in_app"=>false, "pre_context"=>[" # We want to be able to retry as much as possible so we don't\n", " # require the worker to be instantiated.\n", " def global(jobstr, queue)\n"], "context_line"=>" yield\n", "post_context"=>[" rescue Handled => ex\n", " raise ex\n", " rescue Sidekiq::Shutdown => ey\n"], "project_root"=>"/app", "filename"=>"sidekiq/job_retry.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/processor.rb", "function"=>"block (2 levels) in dispatch", "lineno"=>125, "in_app"=>false, "pre_context"=>["\n", " @job_logger.prepare(job_hash) do\n", " @retrier.global(jobstr, queue) do\n"], "context_line"=>" @job_logger.call(job_hash, queue) do\n", "post_context"=>[" stats(jobstr, queue) do\n", " # Rails 5 requires a Reloader to wrap code execution. In order to\n", " # constantize the worker and instantiate an instance, we have to call\n"], "project_root"=>"/app", "filename"=>"sidekiq/processor.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/job_logger.rb", "function"=>"call", "lineno"=>13, "in_app"=>false, "pre_context"=>[" start = ::Process.clock_gettime(::Process::CLOCK_MONOTONIC)\n", " @logger.info(\"start\")\n", "\n"], "context_line"=>" yield\n", "post_context"=>["\n", " with_elapsed_time_context(start) do\n", " @logger.info(\"done\")\n"], "project_root"=>"/app", "filename"=>"sidekiq/job_logger.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/processor.rb", "function"=>"block (3 levels) in dispatch", "lineno"=>126, "in_app"=>false, "pre_context"=>[" @job_logger.prepare(job_hash) do\n", " @retrier.global(jobstr, queue) do\n", " @job_logger.call(job_hash, queue) do\n"], "context_line"=>" stats(jobstr, queue) do\n", "post_context"=>[" # Rails 5 requires a Reloader to wrap code execution. In order to\n", " # constantize the worker and instantiate an instance, we have to call\n", " # the Reloader. It handles code loading, db connection management, etc.\n"], "project_root"=>"/app", "filename"=>"sidekiq/processor.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/processor.rb", "function"=>"stats", "lineno"=>257, "in_app"=>false, "pre_context"=>[" WORKER_STATE.set(tid, {queue: queue, payload: jobstr, run_at: Time.now.to_i})\n", "\n", " begin\n"], "context_line"=>" yield\n", "post_context"=>[" rescue Exception\n", " FAILURE.incr\n", " raise\n"], "project_root"=>"/app", "filename"=>"sidekiq/processor.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/processor.rb", "function"=>"block (4 levels) in dispatch", "lineno"=>131, "in_app"=>false, "pre_context"=>[" # constantize the worker and instantiate an instance, we have to call\n", " # the Reloader. It handles code loading, db connection management, etc.\n", " # Effectively this block denotes a \"unit of work\" to Rails.\n"], "context_line"=>" @reloader.call do\n", "post_context"=>[" klass = constantize(job_hash[\"class\"])\n", " worker = klass.new\n", " worker.jid = job_hash[\"jid\"]\n"], "project_root"=>"/app", "filename"=>"sidekiq/processor.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/rails.rb", "function"=>"call", "lineno"=>42, "in_app"=>false, "pre_context"=>[" end\n", "\n", " def call\n"], "context_line"=>" @app.reloader.wrap do\n", "post_context"=>[" yield\n", " end\n", " end\n"], "project_root"=>"/app", "filename"=>"sidekiq/rails.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.0/lib/active_support/reloader.rb", "function"=>"wrap", "lineno"=>71, "in_app"=>false, "pre_context"=>["\n", " # Run the supplied block as a work unit, reloading code as needed\n", " def self.wrap\n"], "context_line"=>" executor.wrap do\n", "post_context"=>[" super\n", " end\n", " end\n"], "project_root"=>"/app", "filename"=>"active_support/reloader.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.0/lib/active_support/execution_wrapper.rb", "function"=>"wrap", "lineno"=>88, "in_app"=>false, "pre_context"=>["\n", " instance = run!\n", " begin\n"], "context_line"=>" yield\n", "post_context"=>[" ensure\n", " instance.complete!\n", " end\n"], "project_root"=>"/app", "filename"=>"active_support/execution_wrapper.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.0/lib/active_support/reloader.rb", "function"=>"block in wrap", "lineno"=>72, "in_app"=>false, "pre_context"=>[" # Run the supplied block as a work unit, reloading code as needed\n", " def self.wrap\n", " executor.wrap do\n"], "context_line"=>" super\n", "post_context"=>[" end\n", " end\n", "\n"], "project_root"=>"/app", "filename"=>"active_support/reloader.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.0/lib/active_support/execution_wrapper.rb", "function"=>"wrap", "lineno"=>88, "in_app"=>false, "pre_context"=>["\n", " instance = run!\n", " begin\n"], "context_line"=>" yield\n", "post_context"=>[" ensure\n", " instance.complete!\n", " end\n"], "project_root"=>"/app", "filename"=>"active_support/execution_wrapper.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/rails.rb", "function"=>"block in call", "lineno"=>43, "in_app"=>false, "pre_context"=>["\n", " def call\n", " @app.reloader.wrap do\n"], "context_line"=>" yield\n", "post_context"=>[" end\n", " end\n", "\n"], "project_root"=>"/app", "filename"=>"sidekiq/rails.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/processor.rb", "function"=>"block (5 levels) in dispatch", "lineno"=>135, "in_app"=>false, "pre_context"=>[" klass = constantize(job_hash[\"class\"])\n", " worker = klass.new\n", " worker.jid = job_hash[\"jid\"]\n"], "context_line"=>" @retrier.local(worker, jobstr, queue) do\n", "post_context"=>[" yield worker\n", " end\n", " end\n"], "project_root"=>"/app", "filename"=>"sidekiq/processor.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/job_retry.rb", "function"=>"local", "lineno"=>111, "in_app"=>false, "pre_context"=>[" # Skip exception is unwrapped within Sidekiq::Processor#process before\n", " # calling the handle_exception handlers.\n", " def local(worker, jobstr, queue)\n"], "context_line"=>" yield\n", "post_context"=>[" rescue Handled => ex\n", " raise ex\n", " rescue Sidekiq::Shutdown => ey\n"], "project_root"=>"/app", "filename"=>"sidekiq/job_retry.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/processor.rb", "function"=>"block (6 levels) in dispatch", "lineno"=>136, "in_app"=>false, "pre_context"=>[" worker = klass.new\n", " worker.jid = job_hash[\"jid\"]\n", " @retrier.local(worker, jobstr, queue) do\n"], "context_line"=>" yield worker\n", "post_context"=>[" end\n", " end\n", " end\n"], "project_root"=>"/app", "filename"=>"sidekiq/processor.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/processor.rb", "function"=>"block in process", "lineno"=>163, "in_app"=>false, "pre_context"=>[" ack = false\n", " begin\n", " dispatch(job_hash, queue, jobstr) do |worker|\n"], "context_line"=>" Sidekiq.server_middleware.invoke(worker, job_hash, queue) do\n", "post_context"=>[" execute_job(worker, job_hash[\"args\"])\n", " end\n", " end\n"], "project_root"=>"/app", "filename"=>"sidekiq/processor.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/middleware/chain.rb", "function"=>"invoke", "lineno"=>143, "in_app"=>false, "pre_context"=>[" chain.shift.call(*args, &traverse_chain)\n", " end\n", " end\n"], "context_line"=>" traverse_chain.call\n", "post_context"=>[" end\n", " end\n", "\n"], "project_root"=>"/app", "filename"=>"sidekiq/middleware/chain.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/middleware/chain.rb", "function"=>"block in invoke", "lineno"=>140, "in_app"=>false, "pre_context"=>[" if chain.empty?\n", " yield\n", " else\n"], "context_line"=>" chain.shift.call(*args, &traverse_chain)\n", "post_context"=>[" end\n", " end\n", " traverse_chain.call\n"], "project_root"=>"/app", "filename"=>"sidekiq/middleware/chain.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/sentry-raven-2.12.0/lib/raven/integrations/sidekiq.rb", "function"=>"call", "lineno"=>9, "in_app"=>false, "pre_context"=>[" def call(_worker, job, queue)\n", " Raven.context.transaction.push \"Sidekiq/\#{job['class']}\"\n", " Raven.extra_context(:sidekiq => job.merge(\"queue\" => queue))\n"], "context_line"=>" yield\n", "post_context"=>[" Context.clear!\n", " BreadcrumbBuffer.clear!\n", " end\n"], "project_root"=>"/app", "filename"=>"raven/integrations/sidekiq.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/middleware/chain.rb", "function"=>"block in invoke", "lineno"=>140, "in_app"=>false, "pre_context"=>[" if chain.empty?\n", " yield\n", " else\n"], "context_line"=>" chain.shift.call(*args, &traverse_chain)\n", "post_context"=>[" end\n", " end\n", " traverse_chain.call\n"], "project_root"=>"/app", "filename"=>"sidekiq/middleware/chain.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-unique-jobs-6.0.15/lib/sidekiq_unique_jobs/server/middleware.rb", "function"=>"call", "lineno"=>29, "in_app"=>false, "pre_context"=>[" @worker_class = worker_class\n", " @item = item\n", " @queue = queue\n"], "context_line"=>" return yield if unique_disabled?\n", "post_context"=>["\n", " SidekiqUniqueJobs::Job.add_uniqueness(item)\n", " SidekiqUniqueJobs.with_context(logging_context(self.class, item)) do\n"], "project_root"=>"/app", "filename"=>"sidekiq_unique_jobs/server/middleware.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/middleware/chain.rb", "function"=>"block in invoke", "lineno"=>138, "in_app"=>false, "pre_context"=>[" chain = retrieve.dup\n", " traverse_chain = lambda do\n", " if chain.empty?\n"], "context_line"=>" yield\n", "post_context"=>[" else\n", " chain.shift.call(*args, &traverse_chain)\n", " end\n"], "project_root"=>"/app", "filename"=>"sidekiq/middleware/chain.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/processor.rb", "function"=>"block (2 levels) in process", "lineno"=>164, "in_app"=>false, "pre_context"=>[" begin\n", " dispatch(job_hash, queue, jobstr) do |worker|\n", " Sidekiq.server_middleware.invoke(worker, job_hash, queue) do\n"], "context_line"=>" execute_job(worker, job_hash[\"args\"])\n", "post_context"=>[" end\n", " end\n", " ack = true\n"], "project_root"=>"/app", "filename"=>"sidekiq/processor.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/sidekiq-6.0.2/lib/sidekiq/processor.rb", "function"=>"execute_job", "lineno"=>196, "in_app"=>false, "pre_context"=>[" end\n", "\n", " def execute_job(worker, cloned_args)\n"], "context_line"=>" worker.perform(*cloned_args)\n", "post_context"=>[" end\n", "\n", " # Ruby doesn't provide atomic counters out of the box so we'll\n"], "project_root"=>"/app", "filename"=>"sidekiq/processor.rb"}, {"abs_path"=>"/app/app/workers/sentry_worker.rb", "function"=>"perform", "lineno"=>7, "in_app"=>true, "pre_context"=>[" sidekiq_options queue: :default\n", "\n", " def perform(event)\n"], "context_line"=>" Raven.send_event(event)\n", "post_context"=>[" end\n", "end\n", nil], "project_root"=>"/app", "filename"=>"app/workers/sentry_worker.rb"}, {"abs_path"=>"/app/vendor/ruby-2.6.5/lib/ruby/2.6.0/forwardable.rb", "function"=>"send_event", "lineno"=>230, "in_app"=>false, "pre_context"=>[" end\n", " end;\n", " end\n"], "context_line"=>"end\n", "post_context"=>["\n", "# SingleForwardable can be used to setup delegation at the object level as well.\n", "#\n"], "project_root"=>"/app", "filename"=>"forwardable.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/sentry-raven-2.12.0/lib/raven/instance.rb", "function"=>"send_event", "lineno"=>81, "in_app"=>false, "pre_context"=>[" # evt = Raven::Event.new(:message => \"An error\")\n", " # Raven.send_event(evt)\n", " def send_event(event, hint = nil)\n"], "context_line"=>" client.send_event(event, hint)\n", "post_context"=>[" end\n", "\n", " # Capture and process any exceptions from the given block.\n"], "project_root"=>"/app", "filename"=>"raven/instance.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/sentry-raven-2.12.0/lib/raven/client.rb", "function"=>"send_event", "lineno"=>34, "in_app"=>false, "pre_context"=>[" event = event.to_hash\n", "\n", " unless @state.should_try?\n"], "context_line"=>" failed_send(nil, event)\n", "post_context"=>[" return\n", " end\n", "\n"], "project_root"=>"/app", "filename"=>"raven/client.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/sentry-raven-2.12.0/lib/raven/client.rb", "function"=>"failed_send", "lineno"=>115, "in_app"=>false, "pre_context"=>[" else\n", " configuration.logger.warn \"Not sending event due to previous failure(s).\"\n", " end\n"], "context_line"=>" configuration.logger.warn(\"Failed to submit event: \#{get_log_message(event)}\")\n", "post_context"=>[" configuration.transport_failure_callback.call(event) if configuration.transport_failure_callback\n", " end\n", " end\n"], "project_root"=>"/app", "filename"=>"raven/client.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/sentry-raven-2.12.0/lib/raven/client.rb", "function"=>"get_log_message", "lineno"=>89, "in_app"=>false, "pre_context"=>[" end\n", "\n", " def get_log_message(event)\n"], "context_line"=>" (event && event[:message]) || get_message_from_exception(event) || '<no message value>'\n", "post_context"=>[" end\n", "\n", " def generate_auth_header\n"], "project_root"=>"/app", "filename"=>"raven/client.rb"}, {"abs_path"=>"/app/vendor/bundle/ruby/2.6.0/gems/sentry-raven-2.12.0/lib/raven/client.rb", "function"=>"get_message_from_exception", "lineno"=>83, "in_app"=>false, "pre_context"=>[" end\n", "\n", " def get_message_from_exception(event)\n"], "context_line"=>" (event && event[:exception][:values][0][:type] &&\n", "post_context"=>[" event[:exception][:values][0][:value] &&\n", " \"\#{event[:exception][:values][0][:type]}: \#{event[:exception][:values][0][:value]}\")\n", " end\n"], "project_root"=>"/app", "filename"=>"raven/client.rb"}]}}]}, "logentry"=>{"params"=>nil, "message"=>"undefined method `[]' for nil:NilClass"}}
@kapso kapso changed the title Sentry errors out Sentry errors out with - undefined method `[]' for nil:NilClass Oct 19, 2019
@kapso
Copy link
Author

kapso commented Oct 20, 2019

I am seeing so many of these errors.

I am a regular Bugsnag user for most of my projects, but wanted to give Sentry a try, but it looks like this is not a production ready service.

@mikker
Copy link

mikker commented Oct 22, 2019

@goofansu
Copy link

goofansu commented Oct 22, 2019

It can be easily reproduced by an offline network.

sentry-raven version: 2.12.0

Reproduce steps:

  1. Make yourself offline
  2. Trigger an error, for example, 1/0
  3. Sentry reports above error but get "Failed to open TCP connection" because of offline
  4. Sentry reports Failed to open TCP connection error, but get "NoMethodError (undefined method `[]' for nil:NilClass)"
  5. Then it will quickly loop step 4 error, causing CPU 100% (Maybe because ActiveJob is busy retrying to send the error reports)

The error logs for SentryJob:

[ActiveJob] [SentryJob] [49ca5dcb-a4c2-4b56-92ea-251bd12150b0] Unable to record event with remote Sentry server (Raven::Error - Failed to open TCP connection to sentry.io:443 (getaddrinfo: nodename nor servname provided, or not known)):
/Users/james/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/sentry-raven-2.12.0/lib/raven/transports/http.rb:34:in `rescue in send_event'
/Users/james/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/sentry-raven-2.12.0/lib/raven/transports/http.rb:16:in `send_event'
/Users/james/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/sentry-raven-2.12.0/lib/raven/client.rb:43:in `send_event'
/Users/james/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/sentry-raven-2.12.0/lib/raven/instance.rb:81:in `send_event'
/Users/james/.rbenv/versions/2.6.5/lib/ruby/2.6.0/forwardable.rb:230:in `send_event'
/Users/james/src/totspot/app/jobs/sentry_job.rb:5:in `perform'
/Users/james/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activejob-6.0.0/lib/active_job/execution.rb:39:in `block in perform_now'
/Users/james/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activesupport-6.0.0/lib/active_support/callbacks.rb:112:in `block in run_callbacks'
/Users/james/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/sentry-raven-2.12.0/lib/raven/integrations/rails/active_job.rb:18:in `capture_and_reraise_with_sentry'
/Users/james/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/sentry-raven-2.12.0/lib/raven/integrations/rails/active_job.rb:12:in `block (2 levels) in included'
/Users/james/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activesupport-6.0.0/lib/active_support/callbacks.rb:121:in `instance_exec'
[ActiveJob] [SentryJob] [49ca5dcb-a4c2-4b56-92ea-251bd12150b0] Error performing SentryJob (Job ID: 49ca5dcb-a4c2-4b56-92ea-251bd12150b0) from Sidekiq(default) in 522.85ms: NoMethodError (undefined method `[]' for nil:NilClass):
/Users/james/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/sentry-raven-2.12.0/lib/raven/client.rb:83:in `get_message_from_exception'
/Users/james/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/sentry-raven-2.12.0/lib/raven/client.rb:89:in `get_log_message'
/Users/james/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/sentry-raven-2.12.0/lib/raven/client.rb:115:in `failed_send'
/Users/james/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/sentry-raven-2.12.0/lib/raven/client.rb:47:in `rescue in send_event'
/Users/james/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/sentry-raven-2.12.0/lib/raven/client.rb:42:in `send_event'
/Users/james/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/sentry-raven-2.12.0/lib/raven/instance.rb:81:in `send_event'
/Users/james/.rbenv/versions/2.6.5/lib/ruby/2.6.0/forwardable.rb:230:in `send_event'
/Users/james/src/totspot/app/jobs/sentry_job.rb:5:in `perform'
/Users/james/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activejob-6.0.0/lib/active_job/execution.rb:39:in `block in perform_now'
/Users/james/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activesupport-6.0.0/lib/active_support/callbacks.rb:112:in `block in run_callbacks'
/Users/james/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/sentry-raven-2.12.0/lib/raven/integrations/rails/active_job.rb:18:in `capture_and_reraise_with_sentry'
/Users/james/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/sentry-raven-2.12.0/lib/raven/integrations/rails/active_job.rb:12:in `block (2 levels) in included'
/Users/james/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activesupport-6.0.0/lib/active_support/callbacks.rb:121:in `instance_exec'
/Users/james/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activesupport-6.0.0/lib/active_support/callbacks.rb:121:in `block in run_callbacks'
/Users/james/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/i18n-1.7.0/lib/i18n.rb:297:in `with_locale'
/Users/james/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activejob-6.0.0/lib/active_job/translation.rb:9:in `block (2 levels) in <module:Translation>'
/Users/james/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activesupport-6.0.0/lib/active_support/callbacks.rb:121:in `instance_exec'
/Users/james/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activesupport-6.0.0/lib/active_support/callbacks.rb:121:in `block in run_callbacks'
/Users/james/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activesupport-6.0.0/lib/active_support/core_ext/time/zones.rb:66:in `use_zone'
/Users/james/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activejob-6.0.0/lib/active_job/timezones.rb:9:in `block (2 levels) in <module:Timezones>'
/Users/james/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activesupport-6.0.0/lib/active_support/callbacks.rb:121:in `instance_exec'
/Users/james/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activesupport-6.0.0/lib/active_support/callbacks.rb:121:in `block in run_callbacks'
/Users/james/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activejob-6.0.0/lib/active_job/logging.rb:25:in `block (4 levels) in <module:Logging>'
/Users/james/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activesupport-6.0.0/lib/active_support/notifications.rb:180:in `block in instrument'
/Users/james/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activesupport-6.0.0/lib/active_support/notifications/instrumenter.rb:24:in `instrument'
/Users/james/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activesupport-6.0.0/lib/active_support/notifications.rb:180:in `instrument'
/Users/james/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activejob-6.0.0/lib/active_job/logging.rb:24:in `block (3 levels) in <module:Logging>'
/Users/james/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activejob-6.0.0/lib/active_job/logging.rb:45:in `block in tag_logger'
/Users/james/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activesupport-6.0.0/lib/active_support/tagged_logging.rb:80:in `block in tagged'
/Users/james/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activesupport-6.0.0/lib/active_support/tagged_logging.rb:28:in `tagged'
/Users/james/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activesupport-6.0.0/lib/active_support/tagged_logging.rb:80:in `tagged'
/Users/james/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activejob-6.0.0/lib/active_job/logging.rb:45:in `tag_logger'
/Users/james/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activejob-6.0.0/lib/active_job/logging.rb:21:in `block (2 levels) in <module:Logging>'
/Users/james/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activesupport-6.0.0/lib/active_support/callbacks.rb:121:in `instance_exec'
/Users/james/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activesupport-6.0.0/lib/active_support/callbacks.rb:121:in `block in run_callbacks'
/Users/james/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activesupport-6.0.0/lib/active_support/callbacks.rb:139:in `run_callbacks'
/Users/james/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activejob-6.0.0/lib/active_job/execution.rb:38:in `perform_now'
/Users/james/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activejob-6.0.0/lib/active_job/execution.rb:24:in `block in execute'
/Users/james/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activesupport-6.0.0/lib/active_support/callbacks.rb:112:in `block in run_callbacks'
/Users/james/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activejob-6.0.0/lib/active_job/railtie.rb:43:in `block (4 levels) in <class:Railtie>'
/Users/james/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activesupport-6.0.0/lib/active_support/execution_wrapper.rb:88:in `wrap'
/Users/james/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activesupport-6.0.0/lib/active_support/reloader.rb:72:in `block in wrap'
/Users/james/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activesupport-6.0.0/lib/active_support/execution_wrapper.rb:84:in `wrap'
/Users/james/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activesupport-6.0.0/lib/active_support/reloader.rb:71:in `wrap'
/Users/james/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activejob-6.0.0/lib/active_job/railtie.rb:42:in `block (3 levels) in <class:Railtie>'
/Users/james/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activesupport-6.0.0/lib/active_support/callbacks.rb:121:in `instance_exec'
/Users/james/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activesupport-6.0.0/lib/active_support/callbacks.rb:121:in `block in run_callbacks'
/Users/james/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activesupport-6.0.0/lib/active_support/callbacks.rb:139:in `run_callbacks'
/Users/james/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activejob-6.0.0/lib/active_job/execution.rb:22:in `execute'
/Users/james/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activejob-6.0.0/lib/active_job/queue_adapters/sidekiq_adapter.rb:42:in `perform'
/Users/james/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/sidekiq-5.2.7/lib/sidekiq/processor.rb:192:in `execute_job'
/Users/james/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/sidekiq-5.2.7/lib/sidekiq/processor.rb:165:in `block (2 levels) in process'
/Users/james/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/sidekiq-5.2.7/lib/sidekiq/middleware/chain.rb:128:in `block in invoke'
/Users/james/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/sentry-raven-2.12.0/lib/raven/integrations/sidekiq.rb:9:in `call'
/Users/james/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/sidekiq-5.2.7/lib/sidekiq/middleware/chain.rb:130:in `block in invoke'
/Users/james/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/sidekiq-5.2.7/lib/sidekiq/middleware/chain.rb:133:in `invoke'
/Users/james/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/sidekiq-5.2.7/lib/sidekiq/processor.rb:164:in `block in process'
/Users/james/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/sidekiq-5.2.7/lib/sidekiq/processor.rb:137:in `block (6 levels) in dispatch'
/Users/james/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/sidekiq-5.2.7/lib/sidekiq/job_retry.rb:109:in `local'
/Users/james/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/sidekiq-5.2.7/lib/sidekiq/processor.rb:136:in `block (5 levels) in dispatch'
/Users/james/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/sidekiq-5.2.7/lib/sidekiq/rails.rb:43:in `block in call'
/Users/james/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activesupport-6.0.0/lib/active_support/execution_wrapper.rb:88:in `wrap'
/Users/james/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activesupport-6.0.0/lib/active_support/reloader.rb:72:in `block in wrap'
/Users/james/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activesupport-6.0.0/lib/active_support/execution_wrapper.rb:88:in `wrap'
/Users/james/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activesupport-6.0.0/lib/active_support/reloader.rb:71:in `wrap'
/Users/james/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/sidekiq-5.2.7/lib/sidekiq/rails.rb:42:in `call'
/Users/james/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/sidekiq-5.2.7/lib/sidekiq/processor.rb:132:in `block (4 levels) in dispatch'
/Users/james/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/sidekiq-5.2.7/lib/sidekiq/processor.rb:250:in `stats'
/Users/james/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/sidekiq-5.2.7/lib/sidekiq/processor.rb:127:in `block (3 levels) in dispatch'
/Users/james/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/sidekiq-5.2.7/lib/sidekiq/job_logger.rb:8:in `call'
/Users/james/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/sidekiq-5.2.7/lib/sidekiq/processor.rb:126:in `block (2 levels) in dispatch'
/Users/james/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/sidekiq-5.2.7/lib/sidekiq/job_retry.rb:74:in `global'
/Users/james/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/sidekiq-5.2.7/lib/sidekiq/processor.rb:125:in `block in dispatch'
/Users/james/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/sidekiq-5.2.7/lib/sidekiq/logging.rb:48:in `with_context'
/Users/james/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/sidekiq-5.2.7/lib/sidekiq/logging.rb:42:in `with_job_hash_context'
/Users/james/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/sidekiq-5.2.7/lib/sidekiq/processor.rb:124:in `dispatch'
/Users/james/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/sidekiq-5.2.7/lib/sidekiq/processor.rb:163:in `process'
/Users/james/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/sidekiq-5.2.7/lib/sidekiq/processor.rb:83:in `process_one'
/Users/james/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/sidekiq-5.2.7/lib/sidekiq/processor.rb:71:in `run'
/Users/james/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/sidekiq-5.2.7/lib/sidekiq/util.rb:16:in `watchdog'
/Users/james/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/sidekiq-5.2.7/lib/sidekiq/util.rb:25:in `block in safe_thread'

@olivierlacan
Copy link
Contributor

olivierlacan commented Oct 23, 2019

This is a very big problem @nateberkopec @HazAT you need to pull this release and/or issue a bugfix release as soon as you can. Redis servers/clusters will take a while to keel over due (memory bloat, out of memory, swap to disk, bye bye) to this but they eventually will and in our experience (staging and production) that seems to correlate with normal exception volume so it's easy to accidentally dismiss as a false negative (the Sentry Exception from SentryWorker for undefined method []' for nil:NilClass`).

@d4mk0
Copy link

d4mk0 commented Oct 23, 2019

Hello! :)
We found similar problem on our project (which uses sidekiq+redis for background jobs).

After release with update sentry-raven from 2.9 to 2.12 SentryJob sent fails to our sentry account.
When sentry received 16k events with NoMethodError: undefined method [] for nil:NilClass errors, our redis storage was overflowed cause sentryjob tasks have big payload, it occupied approximately 40Gb of our RAM with ~180k enqueued jobs.

Our site was crashed with very large response time from our services which also uses same redis for another reasons.

We tried run Sidekiq::Queue.new('sentry_send_event').clear command from rails console (which also opens ~ 5-10 minutes :D), but it can't be completed successfully cause we get Redis::ConnectionTimeout errors. When we tried run this commands 20+ times we seen something like [0, false] result. And... services response time returns to normal value... Fuhh

Why we not found this issue #932 before release? I don't know :(

Moral:
2.12.0 version is NOT READY for production usage!
If you also made update to 2.12.0 (and u background adapter is sidekiq) without testing you can: quiet sidekiq jobs execution, clear all tasks from sentry_send_event queue, unquiet sidekiq jobs execution.

@HazAT
Copy link
Member

HazAT commented Oct 23, 2019

Hey, really sorry about that, I will fix this first thing tomorrow morning.

@HazAT HazAT closed this as completed in 9d46787 Oct 24, 2019
@HazAT
Copy link
Member

HazAT commented Oct 24, 2019

2.12.1 with a fix + test has been released.
Sorry for the inconvenience this has caused.

@jarthod
Copy link

jarthod commented Oct 26, 2019

I am still experiencing this exception with 2.12.2, because I have this custom block:

config.should_capture = Proc.new { |e| !e.message['Broken pipe'] }

It looks like the message property was actually removed in #931 but I'm surprised this wasn't advertised as a breaking change, the changelog entry doesn't sound worrying. I tried to find the new recommended way to do this but didn't find any example. The property is still in the class so is it normal that it's sometimes nil and sometimes string? shall I just change my condition to handle nil values?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

7 participants