Welcome to MSDN Blogs Sign in | Join | Help

Determining the number of Team System Web Access Users

We have documented some scalability limitations for Team System Web Access in a white paper called Team System Web Access 2008 Scalability Limits. The white paper contains some configuration recommendations and limitations for TSWA.

One of the recommendations is to limit the number of concurrent users to a number below 100. Unfortunately, TFS and TSWA do not provide an easy way to measure TSWA user load.

With this in mind, I have created a report that will provide this information.

This report retrieves data from the tbl_Command table in the TfsActivityLogging database, in the same way as the reports in the Grant Holliday's TFS Performance Report Pack. The TSWA report requires the TfsActivityReportDS data source as listed in Grant's instructions. The best approach is to install Grant's reports, and upload the attached TSWA report to the same folder in Reporting Services. Be sure and read my blog post here for some additional instructions, and for SQL Server 2005 Reporting Services-compatible reports if you are using SSRS 2005.

The TSWA Usage report takes four parameters. These are Start Date, End Date, TSWA Instances, and IP Addresses. Because you may have multiple TSWA instances, the report allows you to filter by the instance name (as reported in the UserAgent column of tbl_command) and IP address (the IP of the computer where the TSWA instance is running). If you have multiple TSWA instances of the same version running on the same computer, we currently don't have a way to differentiate between these instances. The TSWA Instances and IP Addresses parameters are multi-select, with all values selected by default.

There are 3 tables displayed in the report. These are Unique Logins By Instance / IP, Total Logins By Instance IP, and User Logins By Instance / IP.  The first is the number of unique logins from each TSWA instance. Here multiple logins by the same user are counted once. This is the one you should use to measure number of users. The second report shows the total number of logins from each TSWA instance (i.e. duplicates are counted), and the third the number of logins broken out by individual users.

 

Enjoy! 

-Jim

SSL on TFS 2008 + Windows Server 2008 + IIS 7

MSDN has long had a document on Setting up Team Foundation Server to Require HTTPS and Secure Sockets Layer (SSL). It is geared specifically to Windows Server 2003 and IIS 6 though, as the OS and IIS platforms. Ruidong Li (a senior support engineer on our TFS config support team) went through that document recently and updated it with Windows Server 2008 / IIS 7 in mind. It is attached here for your reference. Please let us know if you find it useful or have any comments\corrections.

Windows 7: Be first. Save half.

You know I love me some Windows 7, and if you’re like me, you’re going to love this too…


Pre-order Windows 7 today at Microsoft Store. You'll get it for at least half off and be one of the first to get it. Hurry, quantities are limited.*

It's pretty simple

Windows 7 is coming on October 22, 2009. Here's an easy way to get it fast and save a bundle: Pre-order a Windows 7 Home Premium Upgrade for $49 or a Windows 7 Professional Upgrade for $99 at Microsoft Store.  That's about half off the estimated retail prices.

Want more info?  Go to the Windows team blog and find out all the details. 

*The offer begins on June 26, 2009 and will continue while supplies last, or until July 11, 2009, whichever comes first.


Click here for the deal (link live ~ @ 9pm PT June 25th, 2009)

Posted by Trevor Hancock | 0 Comments
Filed under:

Mounting .VHDs in Windows 7 \ Windows Server 2008 R2 with a simple mouse-click

One of the coolest features in Windows 7 (all my personal machines at work & home are now Win7 or WS2K8R2, BTW <g>) is the native ability to mount .VHD files (virtual hard drives). As you know if you are a loyal reader (PLUG: if you’re not, why not subscribe to our feed now? RSS2 | ATOM1 ), we use virtualization and .VHD files extensively here in support. Needless to say, this native .VHD ability proved a welcome boon. In my opinion though, it is just a wee bit too involved to get a .VHD mounted. You have to open Disk Management, click this, navigate to that, and so on… too many clicks. You could use diskpart.exe as well of course, but then you have to type out the command (GASP!).  Wouldn’t it be great if you could just right-click a .VHD file and select MOUNT or DISMOUNT?

Well, it would appear I am not alone in my desire for this. I was going to start writing something to do it this past Sunday when I said to myself, “Self… this has been done! Bing yourself a solution.” A few Bings later and I found this excellent post from Ravikanth Chaganti, who not only describes how to do it, but provides downloadable files which, when installed, give your the right-clicky goodness of which I speak:

image

The REALLY cool thing for me (which is surprising – I don’t think this could get much cooler) is that this process works for me for local and network .VHD files, and encrypted ones as well (no surprise there of course). Consequentially I have been able to stop using TrueCrypt for my encrypted “locker” at home (scanned bills, etc., located on my Windows Home Server), in favor of a BitLocker-encypted .VHD which I just right-click to mount over UNC! As soon as I mount it I am prompted to unlock the drive, just like if I had plugged in a flash drive. This is Windows7 “out of the box”. Remember to enable the “Bitlocker Drive Encryption” feature of Windows Server 2008 R2 if you plan to try this there.

Real slick! Thanks to the Windows team and Ravikanth for this. <G>

Adding external build data to TFS

Wendell Phillips brings us today’s post about adding external build data to TFS.

-Trev

 

I recently found a need to add build data to Team Foundation Server 2008 from an external build process.  TFS ordinarily only maintains and processes build information from Team Build processes linked to the TF Server. If you use any build process that does not use Team Build and you want to use TFS to track your software lifecycle you might need to know and report on the builds where issues were found and where they were fixed.  Just entering a value in the “Found in” or “Integrated in” fields does not work as values must exist as a known build to TFS in order to be reportable.  Values not present in the dropdown list are ignored.  So the code below adds data to the TFS Builds database so that your external build appears in the dropdown and can be reported on.

I found an interesting blog from Jason Prickett and a forum post from Martin Woodward that, when combined and massaged a little gave me the code I needed to add Build Data to a TF 2008 Server.  The code is an “interesting” combination of parameters and hard-coded values.  The hard-coded values could also be passed in as arguments with a little modification.  Oh yeah, I am not a programmer so any comments on the elegance of the code will not be understood <g>.  I hope you find this useful.

-Wendell

using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.TeamFoundation.Build.Proxy;
using Microsoft.TeamFoundation.Client;
using Common = Microsoft.TeamFoundation.Build.Common;
using Microsoft.TeamFoundation.Build.Client;

namespace AddFakeBuild
{
    class Program
    {
       
        static void Main(string[] args)
        {
            AddBuild("http://2008on2008:8080", "BuildTest", "BuildAgent1", "BuildDef1", "wpBuild002");
            if (args.Length != 5)
            {
                Console.WriteLine("Incorrect number of parameters, expecting 5");
            }

        }
        static void AddBuild(String serverName, String teamProject, String buildAgentName, String definitionName, String buildNumber)
        {
            // Get the TeamFoundation Server
             TeamFoundationServer tfs;
            tfs = new TeamFoundationServer(serverName);

            // Get the Build Server
            IBuildServer buildServer = (IBuildServer)tfs.GetService(typeof(IBuildServer));

            //Check the Build Agent Name, get the agent if it exists or create it if it does not exist;
          
             IBuildAgent buildAgent = GetBuildAgent(teamProject, buildAgentName,tfs);
            
            // Create a fake definition
             IBuildDefinition definition = AddDefinition(buildServer, teamProject, definitionName, buildAgent);

            // Create the build detail object
             IBuildDetail buildDetail;
            try
             {
                 buildDetail = definition.CreateManualBuild(buildNumber);
             }
             catch
            {
                Console.WriteLine("Build Number already exists");
                return;
             }

            
            // Create platform/flavor information against which test 
            // results can be published
            IConfigurationSummary confSummary = InformationNodeConverters.AddConfigurationSummary(buildDetail, "Debug", "x86", "");
            ICompilationSummary compSummary = confSummary.AddCompilationSummary();
            compSummary.ProjectFile = "Dummy.sln";
            compSummary.Save();

            // Complete the build by setting the status to succeeded and setting the drop location.
            buildDetail.Status = BuildStatus.Succeeded;
            // The drop location is not copied properly from the definition so we have to copy it manually.
            buildDetail.DropLocation = definition.DefaultDropLocation;
            buildDetail.Save();
        }
        static IBuildAgent GetBuildAgent(String teamProject, String buildAgentName,TeamFoundationServer tfs) 
            {
            IBuildAgent agent;
            // Get the Build Server
            IBuildServer buildServer = (IBuildServer)tfs.GetService(typeof(IBuildServer));
            
            IBuildAgentQueryResult queryResult = buildServer.QueryBuildAgents(buildServer.CreateBuildAgentSpec(teamProject, buildAgentName));
             
            if (queryResult.Failures.Length > 0 || queryResult.Agents.Length != 1)
            {

                 agent = AddAgent(buildServer, teamProject, buildAgentName);
                return agent;
                

            }
            
            agent = queryResult.Agents[0];
            return agent;
          

          }


        private static IBuildDefinition AddDefinition(IBuildServer buildServer, string teamProject, string definitionName, IBuildAgent agent)
        {
            IBuildDefinition definition;
            try
            {
                // See if it already exists, if so return it
                definition = buildServer.GetBuildDefinition(teamProject, definitionName);
                return definition;
            }
            catch (BuildDefinitionNotFoundException)
            {
                // no definition was found so continue on and try to create one
            }

            definition = buildServer.CreateBuildDefinition(teamProject);
            definition.Name = definitionName;
            definition.ConfigurationFolderPath = "$/";
            definition.ContinuousIntegrationType = ContinuousIntegrationType.None;
            definition.DefaultBuildAgent = agent;
            definition.DefaultDropLocation = @"\\MySharedMachine\drops\";
            definition.Description = "Fake build definition used to create fake builds.";
            definition.Enabled = false;
            definition.Workspace.AddMapping("$/", "c:\\fake", WorkspaceMappingType.Map);
            definition.Save();

            return definition;
        }

        private static IBuildAgent AddAgent(IBuildServer buildServer, String teamProject, String agentName)
        {
            IBuildAgent agent = buildServer.CreateBuildAgent(teamProject);
            agent.Name = agentName;
            agent.BuildDirectory = "c:\\nobuilddir";
            agent.Description = "Fake build agent used to create fake builds.";
            agent.MachineName = "NoBuildMachine";
            agent.Port = 9191;
            agent.Status = AgentStatus.Disabled;
            //try
            //{
            agent.Save();
            
           // }
            //catch (BuildAgentAlreadyExistsException)
            //{
                
            //}
            return agent;
        }
    }
}

The TFS Performance Report Pack and SQL Server 2005 Reporting Services

Grant Holliday has created a great set of TFS performance monitoring reports, called the TFS Performance Report Pack. These reports, and instructions for uploading them to SQL Server Reporting Services, are available on his excellent blog at http://blogs.msdn.com/granth/archive/2009/02/03/announcing-tfs-performance-report-pack.aspx. He lists SQL Server 2008 Reporting Services as a requirement, with a note that they should work in SSRS 2005. It turns out some of the reports function under both SSRS 2008 and 2005, some do not. Several posters have mentioned incompatibilities with some reports and SSRS 2005.

These reports are compatible with either SSRS version:

  • Server Status - Historical Performance Trends.rdl
  • Server Status - Recent Performance Trends.rdl
  • Server Status - Top Users Bypassing Proxies.rdl

These reports require SSRS 2008:

  • Execution Time Summary.rdl
  • Execution Time for User.rdl
  • Server Status - Source Control Request Queue.rdl

I have created versions of the three reports above that are functionally similar to Grant's reports, but also work with SSRS 2005. You can download my updated reports here. To use my reports, install Grant's TFS Performance Report Pack, and replace the three reports with the versions in the zip file I provided.

I also noticed that some of Grant's reports were configured to use a private data source, rather than the shared data source referred to in the instructions he provided with his reports. When I uploaded and tested his reports, I received this error:

An error has occurred during report processing.

Cannot create a connection to data source 'PrivateDataSource'.

with these reports:

  • Server Status - Historical Performance Trends
  • Server Status - Recent Performance Trends
  • Server Status - Top Users Bypassing Proxies

 

You can hook up the correct data source as follows in SSRS:

  1. Navigate to the report in SSRS and click on it.
  2. After you receive the error, click the Properties tab.
  3. Click the Data Sources link on the left. It will be configured to "A custom data source".
  4. Click on "A shared data source" and then click the adjacent Browse button.
  5. In the tree view, navigate the TfsActivityReportDS data source, which you created in Step 4 of Grant's instructions. I created mine in the Server Status folder, so I had to expand Server Status in the tree view to find TfsActivityReportDS. Highlight TfsActivityReportDS and click OK.
  6. Back in the Data Sources page, click Apply.
  7. Click View, and the report should display without error.

There is another possible gotcha in his instructions. When configuring the connection string in Step 4.1, the connection string is "Data Source=localhost;Initial Catalog=TfsActivityLogging". The Data Source here assumes a single server TFS installation. If SQL Server is installed as a named instance, and/or TFS is installed as a dual server installation, you need to list the instance name and/or the Data Tier computer in the Data Source.

If the connnection string here is incorrect, you may see an error like this:

An error has occurred during report processing. (rsProcessingAborted)

Cannot create a connection to data source 'TfsActivityReportDS'. (rsErrorOpeningConnection)

A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server)

Connnection String Data Source Examples :

Single Server TFS installation, SQL installed as an instance named Instance1

Data Source=localhost\Instance1;

Dual Server TFS installation, SQL installed as default instance

Data Source=<datatiercomputername>;

Dual Server TFS installation, SQL installed as an instance named Instance1

Data Source=<datatiercomputername>\Instance1;

 

Grant's reports, and my SSRS 2005 compatible clones if you need them, provide a great view into various aspects of your TFS server performance.

Enjoy!

 

Jim

Problems configuring TFS 2010 when resource has underscore (_) in name

A user of TFS 2010 recently reported a problem when configuring it after the installed had laid down the bits. Seems they had installed SQL 2008 to a instance named “TFS_BETA”. They then ran the configuration wizard of TFS 2010 and selected the custom configuration. Almost immediately they were presented with this error:

-------------------------------------
Team Foundation Server Configuration
-------------------------------------

TF255186: The following class could not be found: MSReportServer_Instance. The Windows Management Instrumentation (WMI) namespace is: \\DEV-SER-11\root\Microsoft\SqlServer\ReportServer\TFS_BETA\v10. The instance of SQL Server Reporting Services is: TFS_BETA.

<OK>


The issue here is that underscore is not a valid character for FQDN’s and as such cause issues with Web applications that use session cookies (such as Reporting Services). We have seen this with VSTSWA as well, and even documented it:

http://support.microsoft.com/kb/968549


The fix in this case with TFS 2010 and SSRS was to create an instance without an underscore in the name.

Posted by CSSTFSBLOG | 4 Comments
Filed under:

A few notes on PROXY and Team Foundation Server

Last week saw a couple interesting requests and references around TFS and proxy. I thought I’d share…

1. Augusto Alvarez has a nice post over on his BLOG that details Publishing Team Foundation Server 2005 (Single-Server Mode) with ISA Server 2006. It also works for 2008. If you’re trying to do the same, Augusto’s steps could be quite helpful to you.

2. The following question was posed:

Anyone know of a way to not use the web proxy (other than the “Bypass proxy on local” setting in IE)? Corporate has a web proxy + script they use.

In this situation, where a script is being used to configure client proxy settings, TFS Team Explorer may experience issues. As an application which uses the .NET runtime, it does not support automatic proxy discovery scripts. If Internet Explorer uses the automatic configuration options to determine the HTTP proxy settings, you can manually configure the global HTTP proxy settings in the Machine.config file. http://support.microsoft.com/kb/307220 explains how.

3. http://support.microsoft.com/kb/910804. This article appears to be specific to the help system, but it contains a proxy configuration you can add to devenv.exe.config that will affect the entire app, including Team Explorer.

4. Registry key for Team Explorer itself:

a. Using REGEDIT, add a String value called BypassProxyOnLocal under HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\8.0\TeamFoundation\RequestSettings. 

b. Change the value to "true" (no quotes).

NOTE: Change this to …\VisualStudio\9.0\… for TE 2008.


HTH,
-Trev

TFS 2005 to 2008 Upgrade Best Practices… and some for VSTSWA 2008 as well

The following post come from Vimal Thiagaraj (VIM), a member of our TFS setup and install team. Vim provides us today with a best practices document for upgrading from TFS 2005 to TFS 2008 SP1, and for upgrading\installing VSTSWA (TFS web access) 2008 SP1 as well.

-Trev

 

1. Make full backups of the following databases from the TFS 2005 data tier server. Do not append to existing backup sets and preferably, store the backups in a different location than the usual backup storage.

  • Report Server
  • ReportServerTempDB
  • TfsActivityLogging
  • TfsBuild
  • TfsIntegration
  • TfsVersionControl
  • TfsWarehouse
  • TfsWorkItemTracking
  • TfsWorkItemTrackingAttachments
  • STS_Content_TFS
  • STS_Config_TFS

2. If installed, remove the following applications from the TFS application tier (or ATDT, if single-server TFS install):

  • Team Explorer 2008 SP1 or Visual Studio 2008 SP1
  • .NET framework 3.5 SP1
  • .NET framework 2.0 SP2

3. Check for triggers on any of the “Tfs...” named SQL databases listed above. The TFS databases should *not* have any triggers. If any are found, drop them from the database. NOTE: Database triggers only. Don’t mess with any table triggers.

How to check the trigger presence:

a. Open SQL Server Management studio and connect to the SQL database engine hosting your TFS databases.

b. Click on the plus sign to expand databases

c. Expand the “TFS...” named database

d. Expand programmability

e. Click on database triggers

This will show any triggers in the right-hand reading pane. If there are any present, delete them.

 

4. Slip-stream TFS 2008 installer with TFS 2008 SP1. NOTE: if this is done you can ignore step #2 above.


(Please make sure the following commands are run with elevated privileges, the folders created have the full control for the logged in user, and remember to remove the read-only attribute from files after they are copied from CD/DVD)

To integrate the installation of Team Foundation Server 2008 and Team Foundation Server 2008 Service Pack 1:

a. Download TFS SP1 from the Microsoft Web site, and save the update to a folder on the local computer. For example, you can save the file to C:\SP1Download.

b. From the files that originated on the DVD for Team Foundation Server, copy the “AT” folder to a location on the local computer. For example, you can copy the folder to C:\InstallMedia.

c. Open a Command Prompt window, and type the following command, replacing “C:\SP1Download” with the location that you chose in step a and “C:\SP1Extract” with a separate location on the local computer:


C:\SP1Download\TFS90SP1-KB949786-ENU /extract:C:\SP1Extract

d. Create a folder where you can merge files from SP1 and the DVD.

e. Type the following command, replacing “C:\InstallMedia” with the location that you chose in step b, “C:\SP1Extract” with the location that you chose in step c, and “C:\MergeFolder” with the absolute path of the location that you chose in step d:

msiexec /a C:\InstallMedia\vs_setup.msi /p C:\SP1Extract\TFS90sp1-KB949786.msp TARGETDIR=C:\MergeFolder

NOTE: You must replace C:\MergeFolder with an absolute path, but you can replace C:\InstallMedia and C:\SP1Extract with absolute or relative paths

f. From C:\MergeFolder (which you created in step d), run setup.exe to install Team Foundation Server with SP1.

Upgrading to Visual Studio Team System Web Access 2008 (VSTSWA 2008 SP1)

The latest edition of VSTSWA is available with Service pack 1 in the following location:

http://www.microsoft.com/downloads/details.aspx?FamilyId=3ECD00BA-972B-4120-A8D5-3D38311893DE&displaylang=en

Following are some tips for installing and configuring this update, whether you are upgrading from a previous version of installing for the first time:

1. You must install TFS 2008 SP1 before installing VSTSWA 2008 SP1.

2. To install VSTSWA 2008 SP1, you must uninstall any other versions of the same application first.

3. During install, you will be prompted to specify a service account. You should specify the one used for TFS 2008 SP1(ex: domainname\TFSService)

Verification after installing VSTSWA 2008 SP1

Check whether the following app pools are running with TFSService account,

Tswa or TswaPool1

Wiwa or Wiwapool1

If not running you may need to stop the application pool(s), right-click to open properties and then change the service account on the Identity tab to that used for TFS itself. Finally, restart the application pool (a restart of IIS – IISRESET – may also be necessary of you will find the following error in TSWA: “Unable to create WorkItemStore see inner exception for details”.

Case sensitivity issues with VSTSWA

Visual Studio Team System Web access is known for case sensitivity when it comes to connection URL’S. Though the reports and documents may work outside Team Explorer, we may still get the following error in VSTSWA.

HTTP Header SOAPAction: http://schemas.microsoft.com/sqlserver/2005/06/30/reporting/reportingservices/ListChildren.

This is usually seen when TFS communication URLs have had their case changed. This is most often seen after:

1. Performing a move of TFS databases from one server to another.

2. An uninstall/reinstall or upgrade of SharePoint services, or...

3. Incorrect case URL’s are supplied in “TfsAdminutil configureconnections” execution.

 

Which connection URL’s do we need to be mindful of?

The following URLs, stored in TFS’ internal configuration, should appear with the following case:

SharepointUri

http://<SERVERNAME>:80

SharepointSitesUri

http://<SERVERNAME>:80/Sites

SharepointAdminUri

http://<SERVERNAME>:17012/_vti_adm/admin.asmx

SharepointUnc

\\<SERVERNAME>\Sites

ReportsUri

http://<SERVERNAME>/Reports

ReportServerUri

/ReportServer/ReportService.asmx">http://<SERVERNAME>/ReportServer/ReportService.asmx

 

How to check the connection URL’s ?

1. On the TFS AT, open a command prompt and change directory (CD) to the following folder:

\Program Files\Microsoft Visual Studio 2008 Team Foundation Server\Tools

2. Run the following command:

Tfsadminutil configureconnections /view

This will give a view similar to the following:

TfsAdminUtil - Team Foundation Admin Utility
Copyright (c) Microsoft Corporation. All rights reserved.

There is no current VSTS client certificate configured. This is not an error condition.
Current value for ATUri = http://<
Serverame>:8080
There is no current setting for PublicATUri. This is not an error condition.
Current value for SharepointUri = http://<SERVERNAME>:80
Current value for SharepointSitesUri = http://<SERVERNAME>:80/Sites
Current value for SharepointAdminUri = http://<SERVERNAME>:17012/_vti_adm/admin.asmx
Current value for SharepointUnc = \\<SERVERNAME>\Sites
Current value for ReportsUri = http://<SERVERNAME>/Reports
Current value for ReportServerUri = /ReportServer/ReportService.asmx">http://<SERVERNAME>/ReportServer/ReportService.asmx

How to fix the Connection URL’s?

Compare the results of the Tfsadminutil configureconnections /view command with those detailed in the previous table, and make sure the cases match. If not, use the following command lines to fix (once again, executed from a Command Window opened in the \Program Files\Microsoft Visual Studio 2008 Team Foundation Server\Tools folder on the TFS AT machine):

TfsAdminUtil configureconnections /SharepointUri : http://<SERVERNAME>:80

TfsAdminUtil configureconnections / SharepointSitesUri : http://<SERVERNAME>:80/Sites

TfsAdminUtil configureconnections / SharepointAdminUri: http://<SERVERNAME>:17012/_vti_adm/admin.asmx

TfsAdminUtil configureconnections / SharepointUnc :\\<SERVERNAME>\Sites

TfsAdminUtil configureconnections / ReportsUri :http://<SERVERNAME>/Reports

TfsAdminUtil configureconnections /ReportServerUri: /ReportServer/ReportService.asmx">http://<SERVERNAME>/ReportServer/ReportService.asmx

How to clear the cache for VSTSWA?

After making any URL changes, it is a best practice to clear the cache for the web site. To do that, delete any files and folders found under:

Program Files\Microsoft Visual Studio 2008 Team System Web Access\Cache\TSWA

NOTE: This may differ in your setup. If that is the case, search the VSTSWA WEB.CONFIG file (located in the root of VSTSWA web application folder) for the “WorkItemTrackingCacheRoot” key. This will contain the path to the cache folder your install uses.

“Synchronization Engine has Crashed” error when migrating work items using the TFS to TFS Migration Tool

Today’s post comes from Brett Keown. As they worked on a supported issue together, Brett and a recent customer also had the opportunity to speak about the CodePlex “TFS to TFS Migration Tool”. The TFS to TFS Migration Tool is not supported by Microsoft CSS, and Brett did not help the customer with it’s usage, but it was an interesting opportunity for him to learn about a real-world scenario with the the tool and see some issues encountered… which he reports for us here today. Hopefully you will find this useful if you ever encounter a similar situation and problem.

-Trev

 

WARNING: The TFS to TFS Migration tool discussed here is not supported by Microsoft CSS. For support with the TFS to TFS Migration tool please visit the CodePlex TFS to TFS Migration discussion site. This is the official discussion and support forum for the tool. Thanks to Bill, Curtis, Ed, Graham, Matthew, Jim (and all those behind the scenes) for the great tool and guide to its use. Images in this post were taken from the End User Guide.

A recent customer of mine was experiencing some TFS issues, and was also working to migrate some source code and work items between two TF servers. While we here at Microsoft do not support this tool, and I could not help them with it in our support case, the customer and I got to talking about this migration. The customer was attempting to perform a one-way migration of a single project between two Team Foundation 2008 Single Tier Servers. The customer had gone through the entire setup process, created the project on the new server (all of 15 minutes!) and then migrated their source code. This went flawlessly. Their next step was to migrate work items…

On the first attempt they received an error message over and over in the migration progress window saying “Synchronization engine has crashed”. After checking the forums they found that the most common cause for this is the account being used for migration not being a member of the target server’s TFS “Service Accounts” group. Curtis Pettit has documented a fix for that here: http://blogs.msdn.com/curtisp/archive/2008/12/05/administrator-permissions-are-not-enough-for-wit-migration.aspx". He says, from the Application Tier, open a command prompt in the installation directory for TFS, and then run this command


TFSSecurity.exe /g+ "Service Accounts" "domain\userName" /server:http://serverName:8080


As I said previously, that was the most common reason and fix for this error message. Unfortunately for my customer, that was not the case in their migration. Upon further review and testing they found that they were attempting to link work items to a version control migration session that did not exist (they had deleted it when the SCC migration had completed). On their “Add/Edit Migration Session” dialog they had selected the option to “Enable Linking”, but the “Linked Version Control Session” selected did not exist!

image

Once this was resolved, work item migration completed.

- Brett

TFS 2008 Reports Fix (for issues when using SQL Server 2008 Reporting Services) Released Publically

 

http://code.msdn.microsoft.com/KB969210

 

As promised some time ago, we have now put this fix up for public consumption. You no longer need to contact Microsoft support in order to acquire this fix. We have also included localized copies of the fixed reports with this release, including versions in Simplified Chinese, Traditional Chinese, German, English, Spanish, French, Italian, Japanese, Korean and Russian. The “installation” is still a manual one – there is not a single .EXE you just run in order to fix up your reports – but the process is pretty straight forward, though perhaps a little arduous if you have a lot of projects to update. If you do have just too many projects to update manually, drop us a line in TFS support and we may be able to help you out with a more automated way of patching. Once again, this support call should be free because this overall issue is considered a bug. You may be asked to provide a PID, MSDN incident or credit card to open the issue, but it will be refunded.

HTH
-Trev

BLOGS! BLOOOOGS! Get your BLOGS here!!

There are a lot of BLOGs at Microsoft. Just finding them all can be a challenge, let alone filtering them down to a nice list from which to pick your favorites and those most relevant to you. BlogMS attempts to help you in that.

Described as a directory featuring “242 blogs and essential resources in one place”, BlogMS maintains an organized list of many Microsoft BLOGs, a link to a list of ALL Microsoft BLOGs, and also provides weekly and monthly BLOG summaries….

“A summary will be published weekly (each Monday) and monthly providing you a single article with a listing of all the latest announcements.   You can then browse through this article saving you valuable time and effort.  When you identify articles of interest you will be able to click on the article link, and it will take you directly to the blog.”

Check it out: http://blogs.technet.com/blogms/pages/directory-of-microsoft-team-blogs.aspx

- Trev

Posted by CSSTFSBLOG | 1 Comments
Filed under:

Users of MOSS 2007 – Watch out for SP2 “trial version reset” issue

If you us Microsoft Office SharePoint Server 2007 with your TF server and have applied the recently released Service Pack 2 to it, chances are that the MOSS server now thinks it is a 180 day trial version, and in 180 days client access will be denied. This issue is caused by the MOSS 2007 SP2. Some key points:

  • Products that will have this issue after applying SP2 include MOSS 2007, Project Server 2007, Form Server 2007, Search Server 2008 and Search Server 2008 Express.
  • WSS 3.0 is not affected by this issue
  • Even if your MOSS install is made to become a trial version by installing SP2, and this expiration date is hit 180 days later, your data will be safe.  Product expiration 180 days after SP2 installation will not affect data, configuration or application code, but will render SharePoint inaccessible for end-users.
  • At time of writing there is a HOTFIX in the works to mitigate this issue. In the meantime there is a manual process available to resolve it.

More details on this issue and how to fix it are available at the SharePoint Team Blog here:

http://blogs.msdn.com/sharepoint/archive/2009/05/21/attention-important-information-on-service-pack-2.aspx

HTH,
- Trev

 

TFS Performance. Episode 1 - The Phantom Baseline

Here are some words of wisdom from our “go to” Engineer for TFS:

My name is Brad Peterson and I am an Escalation Engineer from the TFS support team. My office is in Issaquah Washington. This is my very first of hopefully many blog posts!

Team Foundation Server performance comes up frequently around the support water cooler, and the first question that comes up is “What is good performance?” and then “What is bad performance?” It isn’t really a question that can be answered quantitatively in my mind because there are so many factors involved. Think about how many variables are involved. Here are a few just off the top of my head for the Application Tier:

1. Application Tier Processor Speed

2. Application Tier Memory

3. Other applications running on the Application Tier, including AntiVirus

4. Network Card performance

5. Network Performance

6. Disk Performance

7. Virtualization

8. Etc….

With just the factors above, it becomes impossible to quantify what a server should be capable of. Brian Harry has posted hardware guidelines that relates a hardware configuration to a number of users. That is a clear place to start in evaluating whether you should achieve acceptable performance. So, what is acceptable performance?

Often when customers call Support about performance they have no idea whether the server is really slow, they usually only know that a user has complained about a particular action, or the nebulous “it just seems slower today”. I think a key first step to take is to establish a performance baseline. You can get a pretty good set of numbers to use for comparison purposes by looking at the TFSActivityLogging database.

(In TFS 2008, the install sets command logging (into the TfsActivityLogging database) on by default. In TFS 2005, command logging is turned off by default. To turn it on, see the topic here: Global Web.Config File Settings in Team Foundation Server Components )

Note: There a SQL job that truncates this database (TfsActivityLogging Administration Job). It defaults to 2 weeks worth of data, but if you want more or less, you can edit the job and change the @maxAgeDays parameter passed to prc_PruneCommands to change the number of days that you want to store data for. This database can grow pretty quickly so make sure you have sufficient disk space. You do not want to EVER run out of disk space on the drive storing SQL databases.

There are a couple of things to keep in mind when looking at data in this database. The data here is length of time that the web method took to run. With that in mind, we do not include the time from the client to the Application Tier. Here are some quick notes on the fields in the table tbl_Command.

StartTime

The StartTime field is the datetime from the server in UTC time. For more than you would ever want to know about UTC, check out:

http://en.wikipedia.org/wiki/UTC

If you want to know what the current UTC time is (to figure the number of hours to adjust):

How to convert UTC time to local time

ExecutionTime

The ExecutionTime field stores the duration in Microseconds, so to convert the ExecutionTime to seconds divide by 1,000,000

ExecutionCount

First of all, this field does not exist in TFS 2005. For a given Web Method, it may execute multiple times for this one call. A couple of examples are the ReadIdentity call. This is done along with the hourly sync and would be called for each user. The “Get” command is generally set to 1 but there will be a corresponding set of “Download” commands with ExecutionCount counts relating the number of files downloaded. With TFS 2005, you will see many rows for Download (one for each file).

IdentityName

Who was “running” the command.

IPAddress

This may be useful but often companies may have Proxies and other devices that force traffic through a device and the ipaddress reported is the same for many users. Think reverse proxy that traffic goes through when traffic is coming from outside the firewall.

UserAgent

One of my favorites (but not for performance purposes). It usually has the name of the application and version of that application that is accessing TFS. Useful for questions such as “Has everybody upgraded to SP1?” or “What applications are accessing my server”.

Command

What command was executed.

Application

The TFS application area is the relevant web method call coming from.

Status

Success of the call. Value is 0 if successful and -1 if not successful. Don’t get too excited, a value of -1 is pretty common and usually not that interesting. To get more information about it look at the tbl_Parameter and look at the related records based on CommandID.

Setting a baseline.

OK, so what query should I run to get a baseline for performance?

As with any database, there is a countless number of interesting queries you could run.

Grant Holliday and has done a lot of work in this area:

TFS Performance & Excel 2007 Heat Map « Grant Holliday

Announcing TFS Performance Report Pack

If I was to want one query that would give me a good beginning breakdown of performance on a server, I start here (Excuse my ugly sql) to get a general idea of the past 2 weeks (TFS 2008):

Select Application, SUM(ExecutionCount) AS Total_Executions,

cast(cast(sum(ExecutionTime)/1000000 as decimal(10,2))/SUM(ExecutionCount) as decimal(10,2) ) as avg_sec_per_exec

from tbl_Command nolock group by Application

The results of this query give you a starting point to look at for a general baseline.

What should the numbers returned look like? They vary quite a bit. The avg_sec_per_exec we have seen for servers that are running acceptably are under a second for all except the warehouse which is a little more than a second.

In future episodes, I will try to illustrate how you can drill down in your server from the the baseline information to help you troubleshoot your performance questions.

Posted by CSSTFSBLOG | 3 Comments

Re-Using Same TFS Application Tier Name breaks Network Service account access to SQL.

TFS Disaster Recovery is always a frustrating and harried time, particularly when an unforeseen problem arises.  We hope that the information here will help you through one of these issues.  

We found an issue after rebuilding a failed Application Tier while keeping the same computer name. We received a Logon Failure on SQL Server  for the Network Service account associated with the computer name of the Application Tier.  An error occurs like “Login failed for user 'Domain Name\Application Tier Machine Name$”  ($ sign indicates that its Network Account for Application Tier)  A typical scenario would be Reports failing with this error as Reports or Default App Pool on the Application Tier would be using the Network Service Account. 

When you look at the account on the Data Tier, everything looks OK as the account would appear to have the right name.  However, the rebuilt Application Tier would have a new SID despite having the same Network Service account name.

To resolve this error we had to delete the old account in SQL’s master, msdb & tempdb System databases, from the application specific databases( i.e.: ReportServer, ReportServerTempDB) and from logins, and recreate the correct permissions.

The correct permissions to recreate depend on what services were running as the Network Service account on the Application Tier. 

For Reporting Services this can be done by stepping through the Reporting Services Configuration Tool. 

For TFS, use the TfsAdminUtil changeaccount option:

TfsAdminUtil changeaccount “NT Authority\Network Service”  “NT Authority\Network Service”

For SharePoint depending on the application pool identity:

#1. If the app pool identities for the Central Admin Site & the Web Application(typically default web site) are both running the as Network Service, then the “new” machine account needs to be dbowner on the WSS_Config, WSS_Content and WSS_AdminContent databases.

#2. If the app pool identity for only the Central Admin Site is running as Network Service, the login needs to a dbowner on only the WSS_Config & WSS_AdminContent databases.

#3. If the app pool identity for only the Web Application is running  as Network Service, the login needs to a dbowner on only the WSS_Content database.

 

Thank you to Romit Gulati and Lakhminder Singh.

Posted by CSSTFSBLOG | 2 Comments
More Posts Next page »
 
Page view tracker