Error al Crear Proyecto en Team Foundation Server TF30162: Task "Populate Reports" from Group "Reporting" failed
Recientemente me solicitaron apoyo para resolver un problema que se estaba presentando en la creación de nuevo proyecto “Team Project” con Team Foundation Server 2012. Básicamente al llevar un 90% de avance en la creación del nuevo proyecto se generaba el siguiente mensaje de error:
Al revisar de primera mano el mensaje de error todo apunta a que existe un problema entre Team Foundation Server (TFS) y el servicio de Reporting Services. El primer paso fue verificar que toda la configuración del TFS con el servidor de Reporting Services, Sharepoint y el Datawarehouse estuviera funcionando correctamente. Esto se puede verificar en la consola de administración del TFS:
La cual como se puede observar estaba correcta, al revisar detalladamente el log que TFS genera de la creación del proyecto:
2013-03-18T16:14:34 | Módulo: Rosetta | Subproceso: 21 | Estableciendo orígenes de datos para el informe: /TfsReports/TFS2012/nuevo1234/Errores/Estado del error
---Inicio de la entrada de excepción---
Tiempo: 2013-03-18T16:14:35
Módulo: Engine
Descripción del evento: TF30162: Error en la tarea "Populate Reports" del grupo "Reporting"
Tipo de excepción: Microsoft.TeamFoundation.Client.PcwException
Mensaje de excepción: El Asistente para creación de proyectos detectó un error al crear informes en SQL Server Reporting Services en http://…/ReportServer/ReportService2005.asmx.
Detalles de la excepción: El Asistente para creación de proyectos detectó un problema
al crear informes en SQL Server Reporting Services en http://…/ReportServer/ReportService2005.asmx.
El motivo del error no se puede determinar en este momento.
Debido al error de la operación, el asistente no pudo finalizar la
creación del sitio de SQL Server Reporting Services.
Referencia de la pila:
en Microsoft.VisualStudio.TeamFoundation.PCW.RosettaReportUploader.Execute(ProjectCreationContext context, XmlNode taskXml)
en Microsoft.VisualStudio.TeamFoundation.PCW.ProjectCreationEngine.TaskExecutor.PerformTask(IProjectComponentCreator componentCreator, ProjectCreationContext context, XmlNode taskXml)
en Microsoft.VisualStudio.TeamFoundation.PCW.ProjectCreationEngine.RunTask(Object taskObj)
-- Excepción interna --
Mensaje de excepción: TF30225: Error al cargar el informe 'Estado del error': Se produjo un error dentro de la base de datos del servidor de informes. Se puede deber a un error de conexión, a que se superó el tiempo de espera o a un bajo rendimiento del disco dentro de la base de datos. ---> Microsoft.ReportingServices.Diagnostics.Utilities.ReportServerStorageException: Se produjo un error dentro de la base de datos del servidor de informes. Se puede deber a un error de conexión, a que se superó el tiempo de espera o a un bajo rendimiento del disco dentro de la base de datos. ---> System.Exception: Para obtener más información acerca de este error, vaya al servidor de informes en el equipo del servidor local o habilite los errores remotos (tipo ReportingUploaderException)
Seguimiento de la pila de la excepción: en Microsoft.TeamFoundation.Client.Reporting.ReportingUploader.UploadReport(XmlNode report)
en Microsoft.TeamFoundation.Client.Reporting.ReportingUploader.HandleCreateReports(XmlNode node)
en Microsoft.TeamFoundation.Client.Reporting.ReportingUploader.Run()
en Microsoft.VisualStudio.TeamFoundation.PCW.RosettaReportUploader.Execute(ProjectCreationContext context, XmlNode taskXml)
Detalles de la excepción interna:
Mensaje de excepción: Se produjo un error dentro de la base de datos del servidor de informes. Se puede deber a un error de conexión, a que se superó el tiempo de espera o a un bajo rendimiento del disco dentro de la base de datos. ---> Microsoft.ReportingServices.Diagnostics.Utilities.ReportServerStorageException: Se produjo un error dentro de la base de datos del servidor de informes. Se puede deber a un error de conexión, a que se superó el tiempo de espera o a un bajo rendimiento del disco dentro de la base de datos. ---> System.Exception: Para obtener más información acerca de este error, vaya al servidor de informes en el equipo del servidor local o habilite los errores remotos (tipo SoapException)Detalles de SoapException: <detail><ErrorCode xmlns="http://www.microsoft.com/sql/reportingservices">rsReportServerDatabaseError</ErrorCode><HttpStatus xmlns="http://www.microsoft.com/sql/reportingservices">400</HttpStatus><Message xmlns="http://www.microsoft.com/sql/reportingservices">Se produjo un error dentro de la base de datos del servidor de informes. Se puede deber a un error de conexión, a que se superó el tiempo de espera o a un bajo rendimiento del disco dentro de la base de datos.</Message><HelpLink xmlns="http://www.microsoft.com/sql/reportingservices">http://go.microsoft.com/fwlink/?LinkId=20476&EvtSrc=Microsoft.ReportingServices.Diagnostics.Utilities.ErrorStrings&EvtID=rsReportServerDatabaseError&ProdName=Microsoft%20SQL%20Server%20Reporting%20Services&ProdVer=10.50.1617.0</HelpLink><ProductName xmlns="http://www.microsoft.com/sql/reportingservices">Microsoft SQL Server Reporting Services</ProductName><ProductVersion xmlns="http://www.microsoft.com/sql/reportingservices">10.50.1617.0</ProductVersion><ProductLocaleId xmlns="http://www.microsoft.com/sql/reportingservices">127</ProductLocaleId><OperatingSystem xmlns="http://www.microsoft.com/sql/reportingservices">OsIndependent</OperatingSystem><CountryLocaleId xmlns="http://www.microsoft.com/sql/reportingservices">1033</CountryLocaleId><MoreInformation xmlns="http://www.microsoft.com/sql/reportingservices"><Source>ReportingServicesLibrary</Source><Message msrs:ErrorCode="rsReportServerDatabaseError" msrs:HelpLink="http://go.microsoft.com/fwlink/?LinkId=20476&EvtSrc=Microsoft.ReportingServices.Diagnostics.Utilities.ErrorStrings&EvtID=rsReportServerDatabaseError&ProdName=Microsoft%20SQL%20Server%20Reporting%20Services&ProdVer=10.50.1617.0" xmlns:msrs="http://www.microsoft.com/sql/reportingservices">Se produjo un error dentro de la base de datos del servidor de informes. Se puede deber a un error de conexión, a que se superó el tiempo de espera o a un bajo rendimiento del disco dentro de la base de datos.</Message><MoreInformation><Source></Source><Message>Para obtener más información acerca de este error, vaya al servidor de informes en el equipo del servidor local o habilite los errores remotos</Message></MoreInformation></MoreInformation><Warnings xmlns="http://www.microsoft.com/sql/reportingservices" /></detail>
Seguimiento de la pila de la excepción: en Microsoft.TeamFoundation.Client.Channels.TfsHttpClientBase.HandleReply(TfsClientOperation operation, TfsMessage message, Object[]& outputs)
en Microsoft.TeamFoundation.Client.Channels.TfsHttpClientBase.Invoke(TfsClientOperation operation, Object[] parameters, TimeSpan timeout, Object[]& outputs)
en Microsoft.TeamFoundation.Client.Reporting.ReportingService.Invoke(TfsClientOperation operation, Object[] outputs)
en Microsoft.TeamFoundation.Client.Reporting.ReportingService.SetCacheOptions(String Report, Boolean CacheReport, ExpirationDefinition Expiration)
en Microsoft.TeamFoundation.Client.Reporting.ReportingUploader.UploadReport(XmlNode report)
Poner especial atencion a las secciones remarcadas en Rojo. Partiendo del siguiente mensaje:TF30225: Error al cargar el informe 'Estado del error': Se produjo un error dentro de la base de datos del servidor de informes. Se puede deber a un error de conexión, a que se superó el tiempo de espera o a un bajo rendimiento del disco dentro de la base de datos podemos observar que al parecer el error se esta generando a partir de un tiempo de respuesta en la conexión o un bajo rendimiento en el disco duro de la instancia donde se ejecuta el motor de Reporting Services.
El problema con el mensaje anterior es que en realidad esta es una excepción genérica que se genera de lado del Webservice que es invocado desde el TFS, para poder ver la verdadera excepción original fue necesario habilitar el envio de errores remotos para ver el detalle del error.
Al poder tener este detalle VOILA:
library!WindowsService_30!aac!04/01/2013-12:35:08:: e ERROR: Throwing Microsoft.ReportingServices.Diagnostics.Utilities.ReportServerStorageException: , An error occurred within the report server database. This may be due to a connection failure, timeout or low disk condition within the database.;
schedule!WindowsService_30!aac!04/01/2013-12:35:08:: Error processing event 'TimedSubscription', data = 3edab974-4f5c-4f51-adc3-fc48b506f804, error = Microsoft.ReportingServices.Diagnostics.Utilities.ReportServerStorageException: An error occurred within the report server database. This may be due to a connection failure, timeout or low disk condition within the database. ---> System.Data.SqlClient.SqlException: The EXECUTE permission was denied on the object 'xp_sqlagent_notify', database 'mssqlsystemresource', schema 'sys'.
Finalmente dimos con la causa principal del problema y es la falta de permisos en la base de datos sobre el objeto ‘xp_sqlagent_notify’, para resolver esto básicamente debemos brindar los permisos necesarios. En este caso lo que se opto fue por crear un Rol: RSExecRole y en su configuración de permisos "Securables" se brindaron los siguientes:
master:
xp_sqlagent_notify (execute)
xp_sqlagent_enum_jobs (execute)
msdb:
sp_add_category (execute)
sp_verify_job_identifiers (execute)
sysjobs (select)
Finalmente se asigno este rol a la cuenta de servicio (Network Service)
Al parecer este problema se genera al momento de actualizar el TFS de la versión RTM a RC, sin embargo esto no es 100% confirmado.
Como ven, al final siempre es necesario llegar al origen de los errores en las excepciones para no caer en la trampa de desviar nuestra atención a realizar otras validaciones o modificaciones en nuestros servicios para resolver el problema.
Espero que si alguien se topa con esta situación este post le sea de utilidad.
Las referencias utilizadas para encontrar solución a este problema las adjunto a continuación:
http://social.msdn.microsoft.com/Forums/en-US/tfssetup/thread/8205ff48-7893-4ef5-862b-395d21a53e55/
http://social.msdn.microsoft.com/forums/en-US/tfssetup/thread/1a270abd-48a0-4c73-a16d-ee01ce9c4ff9/
Para saber como habilitar los mensajes de error remotos en reporting services:
http://technet.microsoft.com/en-us/library/aa337165.aspx
Saludos Cordiales,
Carlos A. Lone
ASP.NET MVP