From f8bf6c4b2c5fb41ae92df09b9f968d5d5d61bb2b Mon Sep 17 00:00:00 2001 From: Drew Blessing Date: Fri, 11 Dec 2015 17:27:20 -0600 Subject: [PATCH] [ci skip] Add user repository integrity check rake task --- doc/raketasks/README.md | 3 +- doc/raketasks/check.md | 63 +++++++++++++++++++++++++++ doc/raketasks/check_repos_output.png | Bin 0 -> 73786 bytes lib/tasks/gitlab/check.rake | 56 ++++++++++++++++++++++-- 4 files changed, 117 insertions(+), 5 deletions(-) create mode 100644 doc/raketasks/check.md create mode 100644 doc/raketasks/check_repos_output.png diff --git a/doc/raketasks/README.md b/doc/raketasks/README.md index a8dc5c24df..cc8a22cd00 100644 --- a/doc/raketasks/README.md +++ b/doc/raketasks/README.md @@ -1,10 +1,11 @@ # Rake tasks - [Backup restore](backup_restore.md) +- [Check](check.md) - [Cleanup](cleanup.md) - [Features](features.md) - [Maintenance](maintenance.md) and self-checks - [User management](user_management.md) - [Web hooks](web_hooks.md) - [Import](import.md) of git repositories in bulk -- [Rebuild authorized_keys file](http://doc.gitlab.com/ce/raketasks/maintenance.html#rebuild-authorized_keys-file) task for administrators \ No newline at end of file +- [Rebuild authorized_keys file](http://doc.gitlab.com/ce/raketasks/maintenance.html#rebuild-authorized_keys-file) task for administrators diff --git a/doc/raketasks/check.md b/doc/raketasks/check.md new file mode 100644 index 0000000000..3ff3fee6a4 --- /dev/null +++ b/doc/raketasks/check.md @@ -0,0 +1,63 @@ +# Check Rake Tasks + +## Repository Integrity + +Even though Git is very resilient and tries to prevent data integrity issues, +there are times when things go wrong. The following Rake tasks intend to +help GitLab administrators diagnose problem repositories so they can be fixed. + +There are 3 things that are checked to determine integrity. + +1. Git repository file system check ([git fsck](https://git-scm.com/docs/git-fsck)). + This step verifies the connectivity and validity of objects in the repository. +1. Check for `config.lock` in the repository directory. +1. Check for any branch/references lock files in `refs/heads`. + +It's important to note that the existence of `config.lock` or reference locks +alone do not necessarily indicate a problem. Lock files are routinely created +and removed as Git and GitLab perform operations on the repository. They serve +to prevent data integrity issues. However, if a Git operation is interrupted these +locks may not be cleaned up properly. + +The following symptoms may indicate a problem with repository integrity. If users +experience these symptoms you may use the rake tasks described below to determine +exactly which repositories are causing the trouble. + +- Receiving an error when trying to push code - `remote: error: cannot lock ref` +- A 500 error when viewing the GitLab dashboard or when accessing a specific project. + +### Check all GitLab repositories + +This task loops through all repositories on the GitLab server and runs the +3 integrity checks described previously. + +``` +# omnibus-gitlab +sudo gitlab-rake gitlab:repo:check + +# installation from source +bundle exec rake gitlab:repo:check RAILS_ENV=production +``` + +### Check repositories for a specific user + +This task checks all repositories that a specific user has access to. This is important +because sometimes you know which user is experiencing trouble but you don't know +which project might be the cause. + +If the rake task is executed without brackets at the end, you will be prompted +to enter a username. + +```bash +# omnibus-gitlab +sudo gitlab-rake gitlab:user:check_repos +sudo gitlab-rake gitlab:user:check_repos[] + +# installation from source +bundle exec rake gitlab:user:check_repos RAILS_ENV=production +bundle exec rake gitlab:user:check_repos[] RAILS_ENV=production +``` + +Example output: + +![gitlab:user:check_repos output](check_repos_output.png) diff --git a/doc/raketasks/check_repos_output.png b/doc/raketasks/check_repos_output.png new file mode 100644 index 0000000000000000000000000000000000000000..916b16851018bd6de0258f465e6e125ea56d1e0c GIT binary patch literal 73786 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 DWM-fi literal 0 HcmV?d00001 diff --git a/lib/tasks/gitlab/check.rake b/lib/tasks/gitlab/check.rake index a25fac62cf..167b011266 100644 --- a/lib/tasks/gitlab/check.rake +++ b/lib/tasks/gitlab/check.rake @@ -822,10 +822,27 @@ namespace :gitlab do namespace_dirs.each do |namespace_dir| repo_dirs = Dir.glob(File.join(namespace_dir, '*')) - repo_dirs.each do |dir| - puts "\nChecking repo at #{dir}" - system(*%W(#{Gitlab.config.git.bin_path} fsck), chdir: dir) - end + repo_dirs.each { |repo_dir| check_repo_integrity(repo_dir) } + end + end + end + + namespace :user do + desc "GitLab | Check the integrity of a specific user's repositories" + task :check_repos, [:username] => :environment do |t, args| + username = args[:username] || prompt("Check repository integrity for which username? ".blue) + user = User.find_by(username: username) + if user + repo_dirs = user.authorized_projects.map do |p| + File.join( + Gitlab.config.gitlab_shell.repos_path, + "#{p.path_with_namespace}.git" + ) + end + + repo_dirs.each { |repo_dir| check_repo_integrity(repo_dir) } + else + puts "\nUser '#{username}' not found".red end end end @@ -952,4 +969,35 @@ namespace :gitlab do false end end + + def check_repo_integrity(repo_dir) + puts "\nChecking repo at #{repo_dir.yellow}" + + git_fsck(repo_dir) + check_config_lock(repo_dir) + check_ref_locks(repo_dir) + end + + def git_fsck(repo_dir) + puts "Running `git fsck`".yellow + system(*%W(#{Gitlab.config.git.bin_path} fsck), chdir: repo_dir) + end + + def check_config_lock(repo_dir) + config_exists = File.exist?(File.join(repo_dir,'config.lock')) + config_output = config_exists ? 'yes'.red : 'no'.green + puts "'config.lock' file exists?".yellow + " ... #{config_output}" + end + + def check_ref_locks(repo_dir) + lock_files = Dir.glob(File.join(repo_dir,'refs/heads/*.lock')) + if lock_files.present? + puts "Ref lock files exist:".red + lock_files.each do |lock_file| + puts " #{lock_file}" + end + else + puts "No ref lock files exist".green + end + end end