Skip to content

Improve error tracking of merge failures

Stan Hu requested to merge sh-track-merge-exception into master

We saw in gitaly#2395 (closed) that a failure to create a worktree while attempting to merge a squashed commit would log an error only via Rails.logger, which made it hard to tell what happened and whether the error was a systemic problem.

We improve this by using the error tracking interface, which not only logs the exception to Sentry but also to exceptions_json.log.

This does log some acceptable errors (e.g. Branch has been updated since the merge was requested), but it makes it possible to see how often that problem is occurring.

Example log:

{
  "severity": "ERROR",
  "time": "2020-01-25T01:44:48.579Z",
  "correlation_id": "e6463d7e37a7f2c8059da93dc03e4e0f",
  "extra.server": {
    "os": {
      "name": "Darwin",
      "version": "Darwin Kernel Version 19.2.0: Sat Nov  9 03:47:04 PST 2019; root:xnu-6153.61.1~20/RELEASE_X86_64",
      "build": "19.2.0",
      "kernel_version": "Darwin MacBook-Pro-3.local 19.2.0 Darwin Kernel Version 19.2.0: Sat Nov  9 03:47:04 PST 2019; root:xnu-6153.61.1~20/RELEASE_X86_64 x86_64"
    },
    "runtime": {
      "name": "ruby",
      "version": "ruby 2.6.5p114 (2019-10-01 revision 67812) [x86_64-darwin19]"
    }
  },
  "extra.merge_request_id": 25,
  "extra.merge_request": "namespace25/project25!1",
  "extra.save_message_on_model": true,
  "exception.class": "MergeRequests::MergeBaseService::MergeError",
  "exception.message": "Only fast-forward merge is allowed for your project. Please update your source branch",
  "exception.backtrace": [
    "app/services/merge_requests/merge_base_service.rb:50:in `raise_error'",
    "app/services/merge_requests/merge_service.rb:61:in `error_check!'",
    "app/services/merge_requests/merge_service.rb:39:in `validate!'",
    "app/services/merge_requests/merge_service.rb:21:in `execute'",
    "spec/services/merge_requests/merge_service_spec.rb:386:in `block (7 levels) in <top (required)>'",
    "spec/spec_helper.rb:251:in `block (3 levels) in <top (required)>'",
    "spec/spec_helper.rb:251:in `block (2 levels) in <top (required)>'"
  ]
}
Edited by 🤖 GitLab Bot 🤖

Merge request reports

Loading