Chris Weldon bio photo

Chris Weldon

A savvy software engineer and agilist, Chris slings code in C#, but has also been known for commanding fleets of systems. He's currently a Tech Lead at Wolters Kluwer.

Email Twitter Facebook Github

The way My Sites are created in SharePoint 2013 is vastly different from SharePoint 2010, but for good reason. I won’t go into the details of how it’s changed, as Wictor Wilen has done an excellent job of this already in his blog post SharePoint 2013: Personal Site Instantiation Queues and Bad Throughput. I encountered problems with a new development workstation not setting up My Sites for users appropriately - blocking us from testing our solution, which was dependent upon a user having a My Site. In looking online (and in Wictor’s blog post), everything was pointing to checking the following three timer jobs:

  • My Site Instantiation Interactive Request Queue
  • My Site Instantiation Non-Interactive Request Queue
  • My Site Second Instantiation Interactive Request Queue

The problem is, those timer jobs were missing from my server! I checked for the timer jobs first through Central Administration, and then subsequently thru PowerShell. The following are the results I found:

Get-SPTimerJob | sort Name | ft Name

Timer Jobs Missing

I decided to check for the My Site timer jobs on a know working SharePoint 2013 farm. Sure enough, they were there:

Timer Jobs Present on Farm

I wanted to look for a way to re-register timer jobs. There should be no reason for me to do something drastic like uninstall/reinstall the User Profile Service just to get the timer job re-registered. This timer job, as expected, was in the Microsoft.Office.Server.UserProfiles assembly:

Timer Jobs Definition

So, I cracked open dotPeek and decided to hunt for that timer job definition and find who was using it. It turns out, there’s a web application-level feature (MySiteInstantiationQueuesFeatureReceiver) which registers these timer jobs:

Timer Job Feature

There is a public static method inside that feature receiver used for registering the timer jobs.

Method to Register Timer Jobs

So, I had one of two options: invoke the static method directly, or simply toggle the feature. I opted to toggle the feature:

$feat = Get-SPFeature 65B53AAF-4754-46D7-BB5B-7ED4CF5564E1
Disable-SPFeature $feat -Url http://webapp
Enable-SPFeature $feat -Url http://webapp

Toggle Feature

Finally, I double checked and verified the timer jobs were now present!

Timer Jobs Present

I then went to the My Site host URL and got into the queue for provisioning. Within 5 minutes, my personal my site was provisioned!

My Site Provisioned