SP2013 + Win2012: Unable to retrieve topology component health states. This may be because the admin component is not up and running

I’ve just been fighting an issue with SharePoint 2013 Foundation – the search functionality specifically. Once I’d provisioned a search application via the wizard, the health status of the service wasn’t available despite the fact the administration service was started. There are known issues for using this on Windows Server 2008 R2 (https://office.microsoft.com/en-us/help/sharepoint-server-2013-known-issues-HA102919021.aspx#_Search) but this was on Windows 2012 so none of the patches applied.

The problem was that none of the noderunner.exe instances would not stay loaded when restarting the admin service (which would trigger new node-runner instances) and would give this error:

Content Plugin can not be initialized - list of CSS addresses is not set.”

…and…

Unexpected exception in node activator: System.ArgumentException: An item with the same key has already been added.

  • at System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add)
  • at Microsoft.Ceres.CoreServices.Node.BootstrapPropertyLoader.AddEnvironmentProperties(IDictionary`2 result)
  • at Microsoft.Ceres.CoreServices.Node.NodeActivator.InitializeBootstrapProperties(IDictionary`2 overlay)
  • at Microsoft.Ceres.CoreServices.Node.NodeActivator.ActivateNode(IDictionary`2 configuration)”

In a normal SharePoint 2013 search server, it’s normal to see at least 3-4 node-runners loaded even when there’s no crawling happening but here there were none.

Cause

In the end it ended up being a trailing whitespace on an environmental variable that caused the failure in this instance.

clip_image001

If your “SharePoint Search Host Controller” service isn’t started (SPSearchHostController) then all bets are off – that needs to be started & this solution isn’t for you. If on the other hand this service seems to be perfectly healthy and the search admin page is still saying “Unable to retrieve topology component health states” then the below solution might be for you.

Solution

Remove any trailing white-space from any environmental variables “PSModulePath” & reboot – there may be more than one instance of this variable name listed. Your server should now load noderunner.exe properly and your search topology should now be reported correctly.

Also: quite a common practise I’ve seen on the internet for search configuration is a memory limit for the node-runner process. Do not limit the memory as this kills the SharePoint crawler & remember, SP search is expected to consume up-to 24gb. This might seem like a lot but most smart-phones these days come with 4-8gb of RAM – this is enterprise crawling, indexing and searching we’re talking about here so 24gb really isn’t much when you think of it like that.