Skip to content

Avoid exception in Gitea project comments import due to undefined `:url`

What does this MR do and why?

Fix an import failure during gitea project imports, that happens on some comments creation and stop the full import process. This failure seems to happens on comments containing a link in the text, but I'm not 100% certain of this assertion. However, the patch fix the issue and solve the problem, allowing a full project import

Details

Avoid exception in Gitea project comments import due to undefined :url

use :html_url instead of :url as :url is not defined

  "meta.root_caller_id": "Import::GiteaController#create",
  "exception.class": "NoMethodError",
  "exception.message": "undefined method `gsub' for nil:NilClass\n\n      content.gsub(URI_REGEXP) do |url|\n             ^^^^^",
  "exception.backtrace": [
    "lib/gitlab/url_sanitizer.rb:37:in `sanitize'",
    "lib/gitlab/legacy_github_import/importer.rb:257:in `rescue in block (2 levels) in create_comments'",
    "lib/gitlab/legacy_github_import/importer.rb:239:in `block (2 levels) in create_comments'",
    "lib/gitlab/legacy_github_import/importer.rb:238:in `each'",
    "lib/gitlab/legacy_github_import/importer.rb:238:in `block in create_comments'",
    "lib/gitlab/legacy_github_import/importer.rb:237:in `create_comments'",
    "lib/gitlab/legacy_github_import/importer.rb:230:in `block in import_comments'",
    "lib/gitlab/legacy_github_import/importer.rb:317:in `block in fetch_resources'",

Exception log

{
  "severity": "ERROR",
  "time": "2024-02-19T16:57:22.867Z",
  "correlation_id": "01HQ14S6DA5Z1YRSJJP2GZSC4Z",
  "meta.caller_id": "RepositoryImportWorker",
  "meta.remote_ip": "xx.xxx.xx.xxx",
  "meta.feature_category": "importers",
  "meta.user": "root",
  "meta.user_id": 1,
  "meta.project": "root/test-bigup",
  "meta.root_namespace": "root",
  "meta.client_id": "user/1",
  "meta.root_caller_id": "Import::GiteaController#create",
  "exception.class": "NoMethodError",
  "exception.message": "undefined method `gsub' for nil:NilClass\n\n      content.gsub(URI_REGEXP) do |url|\n             ^^^^^",
  "exception.backtrace": [
    "lib/gitlab/url_sanitizer.rb:37:in `sanitize'",
    "lib/gitlab/legacy_github_import/importer.rb:257:in `rescue in block (2 levels) in create_comments'",
    "lib/gitlab/legacy_github_import/importer.rb:239:in `block (2 levels) in create_comments'",
    "lib/gitlab/legacy_github_import/importer.rb:238:in `each'",
    "lib/gitlab/legacy_github_import/importer.rb:238:in `block in create_comments'",
    "lib/gitlab/legacy_github_import/importer.rb:237:in `create_comments'",
    "lib/gitlab/legacy_github_import/importer.rb:230:in `block in import_comments'",
    "lib/gitlab/legacy_github_import/importer.rb:317:in `block in fetch_resources'",
    "lib/gitlab/legacy_github_import/client.rb:155:in `request'",
    "lib/gitlab/legacy_github_import/client.rb:66:in `method_missing'",
    "lib/gitlab/legacy_github_import/importer.rb:316:in `public_send'",
    "lib/gitlab/legacy_github_import/importer.rb:316:in `fetch_resources'",
    "lib/gitlab/legacy_github_import/importer.rb:224:in `import_comments'",
    "lib/gitlab/legacy_github_import/importer.rb:55:in `execute'",
    "app/services/projects/import_service.rb:143:in `import_data'",
    "app/services/projects/import_service.rb:27:in `execute'",
    "app/workers/repository_import_worker.rb:24:in `perform'",
    "lib/gitlab/sidekiq_middleware/skip_jobs.rb:49:in `call'",
    "lib/gitlab/database/load_balancing/sidekiq_server_middleware.rb:29:in `call'",
    "lib/gitlab/sidekiq_middleware/duplicate_jobs/strategies/until_executing.rb:16:in `perform'",
    "lib/gitlab/sidekiq_middleware/duplicate_jobs/duplicate_job.rb:44:in `perform'",
    "lib/gitlab/sidekiq_middleware/duplicate_jobs/server.rb:8:in `call'",
    "lib/click_house/migration_support/sidekiq_middleware.rb:7:in `call'",
    "lib/gitlab/sidekiq_middleware/pause_control/strategies/base.rb:31:in `perform'",
    "lib/gitlab/sidekiq_middleware/pause_control/strategy_handler.rb:22:in `perform'",
    "lib/gitlab/sidekiq_middleware/pause_control/server.rb:8:in `call'",
    "lib/gitlab/sidekiq_middleware/worker_context.rb:9:in `wrap_in_optional_context'",
    "lib/gitlab/sidekiq_middleware/worker_context/server.rb:19:in `block in call'",
    "lib/gitlab/application_context.rb:130:in `block in use'",
    "lib/gitlab/application_context.rb:130:in `use'",
    "lib/gitlab/application_context.rb:64:in `with_context'",
    "lib/gitlab/sidekiq_middleware/worker_context/server.rb:17:in `call'",
    "lib/gitlab/sidekiq_status/server_middleware.rb:7:in `call'",
    "lib/gitlab/sidekiq_versioning/middleware.rb:9:in `call'",
    "lib/gitlab/sidekiq_middleware/query_analyzer.rb:7:in `block in call'",
    "lib/gitlab/database/query_analyzer.rb:37:in `within'",
    "lib/gitlab/sidekiq_middleware/query_analyzer.rb:7:in `call'",
    "lib/gitlab/sidekiq_middleware/admin_mode/server.rb:14:in `call'",
    "lib/gitlab/sidekiq_middleware/instrumentation_logger.rb:9:in `call'",
    "lib/gitlab/sidekiq_middleware/batch_loader.rb:7:in `call'",
    "lib/gitlab/sidekiq_middleware/extra_done_log_metadata.rb:7:in `call'",
    "lib/gitlab/sidekiq_middleware/request_store_middleware.rb:8:in `block in call'",
    "lib/gitlab/sidekiq_middleware/request_store_middleware.rb:7:in `call'",
    "lib/gitlab/sidekiq_middleware/server_metrics.rb:105:in `block in call'",
    "lib/gitlab/sidekiq_middleware/server_metrics.rb:133:in `block in instrument'",
    "lib/gitlab/metrics/background_transaction.rb:33:in `run'",
    "lib/gitlab/sidekiq_middleware/server_metrics.rb:133:in `instrument'",
    "lib/gitlab/sidekiq_middleware/server_metrics.rb:104:in `call'",
    "lib/gitlab/sidekiq_middleware/monitor.rb:10:in `block in call'",
    "lib/gitlab/sidekiq_daemon/monitor.rb:46:in `within_job'",
    "lib/gitlab/sidekiq_middleware/monitor.rb:9:in `call'",
    "lib/gitlab/sidekiq_middleware/size_limiter/server.rb:13:in `call'",
    "lib/gitlab/sidekiq_logging/structured_logger.rb:21:in `call'"
  ],
  "exception.cause_class": "ActiveRecord::RecordInvalid",
  "user.username": "root",
  "tags.program": "sidekiq",
  "tags.locale": "en",
  "tags.feature_category": "importers",
  "tags.correlation_id": "01HQ14S6DA5Z1YRSJJP2GZSC4Z",
  "extra.sidekiq": {
    "retry": false,
    "queue": "default",
    "version": 0,
    "backtrace": 5,
    "dead": false,
    "status_expiration": 86400,
    "args": [
      "1613"
    ],
    "class": "RepositoryImportWorker",
    "jid": "50efe5d9b146a3e54da63583",
    "created_at": 1708361817.7725816,
    "correlation_id": "01HQ14S6DA5Z1YRSJJP2GZSC4Z",
    "meta.caller_id": "Import::GiteaController#create",
    "meta.remote_ip": "xx.xxx.xx.xxx",
    "meta.feature_category": "importers",
    "meta.user": "root",
    "meta.user_id": 1,
    "meta.project": "root/test-bigup",
    "meta.root_namespace": "root",
    "meta.client_id": "user/1",
    "meta.root_caller_id": "Import::GiteaController#create",
    "worker_data_consistency": "always",
    "idempotency_key": "resque:gitlab:duplicate:default:6b96d2313655d4e96326b54af901ed4b18528db1e1e6e8d631546f5e7590ae6d",
    "size_limiter": "validated",
    "enqueued_at": 1708361817.7768738
  },
  "extra.import_type": "gitea",
  "extra.project_id": 1613,
  "extra.source": "Projects::ImportService",
  "extra.external_identifiers": {}
}

Merge request reports