마이그레이션 후 기여 및 멤버십 매핑 문제 해결
GitLab v19.5Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
요약
플레이스홀더 사용자 재할당 중에 다음과 같은 문제가 발생할 수 있습니다. failed 상태의 소스 사용자에 대해 재할당을 재시도하려면 GraphQL API 또는 Rails 콘솔을 사용할 수 있습니다. 실패한 재할당을 재시도하려면 importSourceUserRetryFailedReassignment 뮤테이션을 사용합니다:
플레이스홀더 사용자 재할당 중에 다음과 같은 문제가 발생할 수 있습니다.
소스 사용자 재할당 실패#
failed 상태의 소스 사용자에 대해 재할당을 재시도하려면 GraphQL API 또는 Rails 콘솔을 사용할 수 있습니다. 자세한 내용은 이슈 589777을 참고합니다. UI 지원은 이슈 593001에서 논의되고 있습니다.
GraphQL API 사용#
히스토리
- GitLab 18.11에서 도입되었습니다.
실패한 재할당을 재시도하려면 importSourceUserRetryFailedReassignment 뮤테이션을 사용합니다:
mutation {
importSourceUserRetryFailedReassignment(input: { id: "gid://gitlab/Import::SourceUser/" }) {
importSourceUser {
id
status
}
errors
}
}
를 임포트 소스 사용자 ID로 바꿉니다.
이 ID는 네임스페이스에서 importSourceUsers를 쿼리하여 확인할 수 있습니다.
Rails 콘솔 사용#
Rails 콘솔에서 실패한 소스 사용자를 수동으로 재시도할 수 있습니다:
# Find by the source user's placeholder user ID because placeholder user IDs are easy to fetch from the UI
placeholder_user_id = <PLACEHOLDER_USER_ID>
import_source_user = Import::SourceUser.find_by(placeholder_user_id: placeholder_user_id)
if import_source_user.failed?
import_source_user.update!(status: Import::SourceUser::STATUSES[:reassignment_in_progress])
Import::ReassignPlaceholderUserRecordsWorker.perform_async(import_source_user.id)
puts "Reassignment retry queued"
else
puts "Import source user status: #{import_source_user.status} (expected 'failed')"
end
반복적인 실패 조사#
소스 사용자가 다시 실패하는 경우 importer.log에서
Failed to reassign placeholder user 메시지가 포함된 로그를 확인하여 근본 원인 조사를 시작합니다.
소스 사용자는 성공적으로 재할당되었지만 플레이스홀더 사용자가 삭제되지 않은 경우#
플레이스홀더 사용자는 사용자 기여를 성공적으로 재할당한 후 삭제됩니다. 다만 재할당 이후에도 플레이스홀더 사용자의 ID를 참조하는 일부 데이터베이스 레코드가 데이터베이스에 남아 있어 플레이스홀더 사용자가 삭제되지 않을 수 있습니다. 이 경우 관리자는 관리자 사용자 테이블에서 플레이스홀더 사용자를 계속 볼 수 있습니다. 플레이스홀더 사용자는 라이선스 한도에 포함되지 않고 일반적인 GitLab 운영에도 영향을 주지 않지만, 마이그레이션 후 모든 플레이스홀더 사용자가 삭제되기를 원하는 관리자도 있습니다.
GitLab 18.5 이하에서 플레이스홀더 사용자를 재할당하는 경우 이 상황이 발생할 가능성이 더 높습니다. 이때 importer.log에 해당 플레이스홀더 사용자의 ID와 함께 Unable to delete placeholder user because it is still referenced in other tables 메시지가 표시됩니다.
이러한 사용자를 삭제하려면 다음 중 하나를 수행합니다:
- 관리자 권한으로 플레이스홀더 사용자를 삭제합니다. 남아 있는 플레이스홀더 사용자 기여를 삭제해도 된다고 확신하는 경우에 적합한 방법입니다.
- GitLab 인스턴스를 GitLab 18.6 이상으로 업그레이드한 다음 Rails 콘솔에서 해당 플레이스홀더 사용자의 재할당을 재시도합니다. GitLab 18.5 이하에서 재할당이 완료되었고 남아 있는 플레이스홀더 사용자 기여가 무엇인지 확실하지 않은 경우에 적합한 방법입니다.
Rails 콘솔에서 완료된 플레이스홀더 사용자의 재할당을 재시도하려면 다음을 실행합니다:
# Find the placeholder user's source user
placeholder_user_id = <PLACEHOLDER_USER_ID>
import_source_user = Import::SourceUser.find_by(placeholder_user_id: placeholder_user_id)
if import_source_user.completed?
import_source_user.update!(status: Import::SourceUser::STATUSES[:reassignment_in_progress])
Import::ReassignPlaceholderUserRecordsWorker.perform_async(import_source_user.id)
puts "Reassignment retry queued"
else
puts "Import source user status: #{import_source_user.status} (expected 'completed')"
end