@@ -17,6 +17,7 @@ namespace Stats.CreateAzureCdnWarehouseReports
1717 public class Job
1818 : JobBase
1919 {
20+ private const int DefaultSqlCommandTimeout = 1800 ; // 30 minute SQL command timeout by default
2021 private const string _recentPopularityDetailByPackageReportBaseName = "recentpopularitydetail_" ;
2122 private CloudStorageAccount _cloudStorageAccount ;
2223 private CloudStorageAccount _dataStorageAccount ;
@@ -25,6 +26,7 @@ public class Job
2526 private SqlConnectionStringBuilder _galleryDatabase ;
2627 private string _reportName ;
2728 private string [ ] _dataContainerNames ;
29+ private int _sqlCommandTimeout = DefaultSqlCommandTimeout ;
2830
2931 private static readonly IDictionary < string , string > _storedProcedures = new Dictionary < string , string >
3032 {
@@ -48,6 +50,7 @@ public override void Init(IDictionary<string, string> jobArgsDictionary)
4850 var statisticsDatabaseConnectionString = JobConfigurationManager . GetArgument ( jobArgsDictionary , JobArgumentNames . StatisticsDatabase ) ;
4951 var galleryDatabaseConnectionString = JobConfigurationManager . GetArgument ( jobArgsDictionary , JobArgumentNames . SourceDatabase ) ;
5052 var dataStorageAccountConnectionString = JobConfigurationManager . GetArgument ( jobArgsDictionary , JobArgumentNames . DataStorageAccount ) ;
53+ _sqlCommandTimeout = JobConfigurationManager . TryGetIntArgument ( jobArgsDictionary , JobArgumentNames . CommandTimeOut ) ?? DefaultSqlCommandTimeout ;
5154
5255 _cloudStorageAccount = ValidateAzureCloudStorageAccount ( cloudStorageAccountConnectionString , JobArgumentNames . AzureCdnCloudStorageAccount ) ;
5356 _statisticsContainerName = ValidateAzureContainerName ( JobConfigurationManager . GetArgument ( jobArgsDictionary , JobArgumentNames . AzureCdnCloudStorageContainerName ) , JobArgumentNames . AzureCdnCloudStorageContainerName ) ;
@@ -81,12 +84,12 @@ public override async Task Run()
8184 // generate all reports
8285 var reportGenerators = new Dictionary < ReportBuilder , ReportDataCollector >
8386 {
84- { new ReportBuilder ( reportBuilderLogger , ReportNames . NuGetClientVersion ) , new ReportDataCollector ( reportCollectorLogger , _storedProcedures [ ReportNames . NuGetClientVersion ] , _statisticsDatabase ) } ,
85- { new ReportBuilder ( reportBuilderLogger , ReportNames . Last6Weeks ) , new ReportDataCollector ( reportCollectorLogger , _storedProcedures [ ReportNames . Last6Weeks ] , _statisticsDatabase ) } ,
86- { new ReportBuilder ( reportBuilderLogger , ReportNames . RecentCommunityPopularity ) , new ReportDataCollector ( reportCollectorLogger , _storedProcedures [ ReportNames . RecentCommunityPopularity ] , _statisticsDatabase ) } ,
87- { new ReportBuilder ( reportBuilderLogger , ReportNames . RecentCommunityPopularityDetail ) , new ReportDataCollector ( reportCollectorLogger , _storedProcedures [ ReportNames . RecentCommunityPopularityDetail ] , _statisticsDatabase ) } ,
88- { new ReportBuilder ( reportBuilderLogger , ReportNames . RecentPopularity ) , new ReportDataCollector ( reportCollectorLogger , _storedProcedures [ ReportNames . RecentPopularity ] , _statisticsDatabase ) } ,
89- { new ReportBuilder ( reportBuilderLogger , ReportNames . RecentPopularityDetail ) , new ReportDataCollector ( reportCollectorLogger , _storedProcedures [ ReportNames . RecentPopularityDetail ] , _statisticsDatabase ) }
87+ { new ReportBuilder ( reportBuilderLogger , ReportNames . NuGetClientVersion ) , new ReportDataCollector ( reportCollectorLogger , _storedProcedures [ ReportNames . NuGetClientVersion ] , _statisticsDatabase , _sqlCommandTimeout ) } ,
88+ { new ReportBuilder ( reportBuilderLogger , ReportNames . Last6Weeks ) , new ReportDataCollector ( reportCollectorLogger , _storedProcedures [ ReportNames . Last6Weeks ] , _statisticsDatabase , _sqlCommandTimeout ) } ,
89+ { new ReportBuilder ( reportBuilderLogger , ReportNames . RecentCommunityPopularity ) , new ReportDataCollector ( reportCollectorLogger , _storedProcedures [ ReportNames . RecentCommunityPopularity ] , _statisticsDatabase , _sqlCommandTimeout ) } ,
90+ { new ReportBuilder ( reportBuilderLogger , ReportNames . RecentCommunityPopularityDetail ) , new ReportDataCollector ( reportCollectorLogger , _storedProcedures [ ReportNames . RecentCommunityPopularityDetail ] , _statisticsDatabase , _sqlCommandTimeout ) } ,
91+ { new ReportBuilder ( reportBuilderLogger , ReportNames . RecentPopularity ) , new ReportDataCollector ( reportCollectorLogger , _storedProcedures [ ReportNames . RecentPopularity ] , _statisticsDatabase , _sqlCommandTimeout ) } ,
92+ { new ReportBuilder ( reportBuilderLogger , ReportNames . RecentPopularityDetail ) , new ReportDataCollector ( reportCollectorLogger , _storedProcedures [ ReportNames . RecentPopularityDetail ] , _statisticsDatabase , _sqlCommandTimeout ) }
9093 } ;
9194
9295 foreach ( var reportGenerator in reportGenerators )
@@ -102,7 +105,7 @@ public override async Task Run()
102105 {
103106 // generate only the specific report
104107 var reportBuilder = new ReportBuilder ( reportBuilderLogger , _reportName ) ;
105- var reportDataCollector = new ReportDataCollector ( reportCollectorLogger , _storedProcedures [ _reportName ] , _statisticsDatabase ) ;
108+ var reportDataCollector = new ReportDataCollector ( reportCollectorLogger , _storedProcedures [ _reportName ] , _statisticsDatabase , _sqlCommandTimeout ) ;
106109
107110 await ProcessReport ( LoggerFactory , destinationContainer , reportBuilder , reportDataCollector , reportGenerationTime ) ;
108111 }
@@ -162,14 +165,14 @@ private static async Task ProcessReport(ILoggerFactory loggerFactory, CloudBlobC
162165
163166 private async Task RebuildPackageReports ( CloudBlobContainer destinationContainer , DateTime reportGenerationTime )
164167 {
165- var dirtyPackageIds = await ReportDataCollector . GetDirtyPackageIds ( LoggerFactory . CreateLogger < ReportDataCollector > ( ) , _statisticsDatabase , reportGenerationTime ) ;
168+ var dirtyPackageIds = await ReportDataCollector . GetDirtyPackageIds ( LoggerFactory . CreateLogger < ReportDataCollector > ( ) , _statisticsDatabase , reportGenerationTime , _sqlCommandTimeout ) ;
166169
167170 if ( ! dirtyPackageIds . Any ( ) )
168171 return ;
169172
170173 // first process the top 100 packages
171174 var top100 = dirtyPackageIds . Take ( 100 ) ;
172- var reportDataCollector = new ReportDataCollector ( LoggerFactory . CreateLogger < ReportDataCollector > ( ) , _storedProceduresPerPackageId [ ReportNames . RecentPopularityDetailByPackageId ] , _statisticsDatabase ) ;
175+ var reportDataCollector = new ReportDataCollector ( LoggerFactory . CreateLogger < ReportDataCollector > ( ) , _storedProceduresPerPackageId [ ReportNames . RecentPopularityDetailByPackageId ] , _statisticsDatabase , _sqlCommandTimeout ) ;
173176 var top100Task = Parallel . ForEach ( top100 , new ParallelOptions { MaxDegreeOfParallelism = 4 } , dirtyPackageId =>
174177 {
175178 var packageId = dirtyPackageId . PackageId . ToLowerInvariant ( ) ;
@@ -199,7 +202,8 @@ private async Task RebuildPackageReports(CloudBlobContainer destinationContainer
199202 new ReportDataCollector (
200203 LoggerFactory . CreateLogger < ReportDataCollector > ( ) ,
201204 _storedProceduresPerPackageId [ ReportNames . RecentPopularityDetailByPackageId ] ,
202- _statisticsDatabase )
205+ _statisticsDatabase ,
206+ _sqlCommandTimeout )
203207 }
204208 } ;
205209
@@ -215,15 +219,15 @@ private async Task RebuildPackageReports(CloudBlobContainer destinationContainer
215219 if ( top100Task . IsCompleted )
216220 {
217221 var runToCursor = dirtyPackageIds . First ( ) . RunToCuror ;
218- await ReportDataCollector . UpdateDirtyPackageIdCursor ( _statisticsDatabase , runToCursor ) ;
222+ await ReportDataCollector . UpdateDirtyPackageIdCursor ( _statisticsDatabase , runToCursor , _sqlCommandTimeout ) ;
219223 }
220224 }
221225 }
222226
223227 private async Task CleanInactiveRecentPopularityDetailByPackageReports ( CloudBlobContainer destinationContainer , DateTime reportGenerationTime )
224228 {
225229 Logger . LogDebug ( "Getting list of inactive packages." ) ;
226- var packageIds = await ReportDataCollector . ListInactivePackageIdReports ( _statisticsDatabase , reportGenerationTime ) ;
230+ var packageIds = await ReportDataCollector . ListInactivePackageIdReports ( _statisticsDatabase , reportGenerationTime , _sqlCommandTimeout ) ;
227231 Logger . LogInformation ( "Found {InactivePackageCount} inactive packages." , packageIds . Count ) ;
228232
229233 // Collect the list of reports
0 commit comments