TF10217, TF53010, TF14105 오류
"정확히" 어떤 경우에 이런 오류가 나는지는 아직 검증을 해보진 않았습니다. 변경 상황으로 볼때, 특정 사용자 계정을 TFS로부터 삭제한 후, 해당 사용자 계정으로 check-in 된 changeset이 존재할 때 나타나는 것으로 보입니다.
어쨌든, 테스트 환경이 유동적이다 보니 사용자 계정도 임의로 삭제해 보곤 하는데요. 그러는 중에, 정상적으로 등록된 사용자 계정으로 특정 프로젝트(또는 파일)에 대해서 지난 chank-in 기록을 살펴 보려고 시도를 하면(예를 들어, "View History") 아래와 같은 오류가 발생합니다.

"
TF10217: Team Foundation was unable to complete your request due to
an unexprected error. For more details, see the event log on the Team Foundation Server.
"
"TF10217" 오류 코드 만으로는 그다지 영양가 있는 해결책을 찾을 수 없어서 TFS App-tier가 설치된 컴퓨터의 이벤트 로그를 확인해 보니 다음과 같은 오류 항목이 있었습니다.
이벤트 형식: 오류
이벤트 원본: TFS Version Control
이벤트 범주: 없음
이벤트 ID: 3000
날짜: 2007-01-29
시간: 오전 11:15:51
사용자: N/A
컴퓨터: TestPC
설명:
TF53010: An unexpected condition has occurred in a Team Foundation component.
The information contained here should be made available to your site administrative staff.
Technical Information (for the administrative staff):
Date (UTC): 2007-01-29 오전 2:15:51
Machine: TestPC
Application Domain: /LM/W3SVC/4/Root/VersionControl-2-128145054612471881
Assembly: Microsoft.TeamFoundation.Common, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a; v2.0.50727
Process Details:
Process Name: w3wp
Process Id: 432
Thread Id: 988
Account name: TESTDOMAIN\TestUser
Detailed Message: TF14105:
An exception occurred in the Team Foundation Source Control System.
Web Request Details
Url: http://dxtfs:8080/VersionControl/v1.0/repository.asmx [method: POST]
User Agent: Team Foundation (devenv.exe, 8.0.50727.762)
Headers: Cont...[중간생략]...X-VersionControl-Instance=e68ac739-ed23-476e-a704-f8d2f5ba0569
Path: /VersionControl/v1.0/repository.asmx
Local Request: False
Host Address: 192.168.2.51
User: TESTDOMAIN\TestUser [authentication type: NTLM]
Exception Message: Object reference not set to an instance of an object. (type NullReferenceException)
Exception Stack Trace:
at Microsoft.TeamFoundation.VersionControl.Server.Changeset.lookupDisplayNames()
at Microsoft.TeamFoundation.VersionControl.Server.Item.QueryItemHistory(IPrincipal userPrincipal,
String user, ItemSpec itemSpec, Workspace localWorkspace, VersionSpec versionItem, VersionSpec versionFrom,
VersionSpec versionTo, Int32 maxCount, Boolean includeFiles, Boolean generateDownloadUrls, Boolean slotMode)
at Microsoft.TeamFoundation.VersionControl.Server.Repository.QueryHistory(String workspaceName,
String workspaceOwner, ItemSpec itemSpec, VersionSpec versionItem, String user, VersionSpec versionFrom,
VersionSpec versionTo, Int32 maxCount, Boolean includeFiles, Boolean generateDownloadUrls, Boolean slotMode)
자세한 정보는 http://go.microsoft.com/fwlink/events.asp에 있는 도움말 및 지원 센터를 참조하십시오.
요즘 ^^ 마이크로소프트의 이벤트로 로그가 상당히 자세하다는 것을 실감할 수 있습니다. ^^ 위의 결과로 구글 검색을 해보니 다음과 같은 토픽이 눈에 띄었습니다.
View History Errors
; http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=808057&SiteID=1
위의 토픽에서 알려준데로, TFS DB-tier 의 "SQL Server Management Studio" 환경에서 "TfsVersionControl" DB를 대상으로 다음과 같은 쿼리를 실행해 보면,
select * from tbl_Changeset a
where not exists (
select * from tbl_Identity b
where b.IdentityId = a.OwnerId
)
아래와 같은 식으로 출력 결과가 나올 것입니다.

보시는 것처럼 OwnerId == 18 인 것으로 나오는데요. 바로 이것에 해당하는 사용자 계정이 삭제되었기 때문에 "Microsoft.TeamFoundation.VersionControl.Server.Changeset.lookupDisplayNames" 메서드에서 실패가 나는 것으로 보입니다. 실제로 "tbl_Identity" 테이블에서 "IdentityId" 필드값이 18 번인 것을 찾아보면 없습니다.
해결 방법은 "View History Errors"에서 일러주는 데로 18번 값을 갖는 레코드를 임시로 하나 넣어주는 방법이 있습니다.
BEGIN TRAN
DECLARE @deletedUniqueUserId INT
DECLARE @authKey VARBINARY(85)
DECLARE @base VARBINARY(85)
SET @base = 0xFFEEEEEE
SET @authKey = @base + CAST (NEWID() AS VARBINARY(85))
SELECT @deletedUniqueUserId = CounterValue
FROM tbl_Counter WITH (UPDLOCK)
WHERE CounterName = 'UniqueUserId'
SET IDENTITY_INSERT dbo.tbl_Identity ON
INSERT INTO dbo.tbl_Identity(IdentityId, AuthenticationKey, AuthenticationType, DisplayName, IsGroupIdentity, UniqueUserId, CreationDate)
VALUES (18, @authKey, 1, 'LCC\Unknown', 0, @deletedUniqueUserId, GETUTCDATE())
UPDATE tbl_Counter
SET CounterValue = CounterValue + 1
WHERE CounterName = 'UniqueUserId'
SET IDENTITY_INSERT dbo.tbl_Identity OFF
COMMIT TRAN
[내용추가: 2007-02-25]
해당 changeset 레코드를 삭제하는 방법은, 문제가 있는 것으로 판명되었기 때문에 내용에서 삭제했습니다.
[이 토픽에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]