in SmvCloudWorker/WorkerRole.cs [293:388]
public override bool OnStart()
{
try
{
// Set the maximum number of concurrent connections .
System.Net.ServicePointManager.DefaultConnectionLimit = 12;
// Set options for blob storage.
options = new BlobRequestOptions();
options.ServerTimeout = TimeSpan.FromMinutes(10);
options.RetryPolicy = new ExponentialRetry(TimeSpan.FromSeconds(CloudConstants.RetryBackoffInterval), CloudConstants.MaxRetries);
// Get the connection strings.
string assemblyDir = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
string cloudConfigPath = Path.Combine(assemblyDir, CloudConstants.CloudConfigXmlFileName);
string cloudConfigContents = Utility.ReadFile(cloudConfigPath);
string schemaPath = Path.Combine(assemblyDir, CloudConstants.CloudConfigXsdFileName);
using (var c = new StringReader(cloudConfigContents))
{
if (!Utility.ValidateXmlFile(schemaPath, c))
{
Trace.TraceError("Could not load cloud config from file: " + cloudConfigPath);
return false;
}
}
var serializer = new XmlSerializer(typeof(SMVCloudConfig));
using (var reader = new StringReader(cloudConfigContents))
{
cloudConfig = (SMVCloudConfig)serializer.Deserialize(reader);
}
bool done = false;
while (!done)
{
try
{
var storageAccount = CloudStorageAccount.Parse(cloudConfig.StorageConnectionString.value);
// Setup queue storage.
CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();
queueClient.DefaultRequestOptions = new QueueRequestOptions();
queueClient.DefaultRequestOptions.RetryPolicy = new ExponentialRetry(TimeSpan.FromSeconds(CloudConstants.RetryBackoffInterval),
CloudConstants.MaxRetries);
inputQueue = queueClient.GetQueueReference(CloudConstants.InputQueueName);
// Setup blob storage.
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
blobClient.DefaultRequestOptions = new BlobRequestOptions();
blobClient.DefaultRequestOptions.RetryPolicy = new ExponentialRetry(TimeSpan.FromSeconds(CloudConstants.RetryBackoffInterval),
CloudConstants.MaxRetries);
jobsContainer = blobClient.GetContainerReference(CloudConstants.InputBlobContainerName);
resultsContainer = blobClient.GetContainerReference(CloudConstants.OutputBlobContainerName);
versionsContainer = blobClient.GetContainerReference(CloudConstants.VersionsContainerName);
// Setup table storage.
var tableStorage = storageAccount.CreateCloudTableClient();
tableStorage.DefaultRequestOptions = new TableRequestOptions();
tableStorage.DefaultRequestOptions.RetryPolicy = new ExponentialRetry(TimeSpan.FromSeconds(CloudConstants.RetryBackoffInterval), CloudConstants.MaxRetries);
CloudTable table = tableStorage.GetTableReference(CloudConstants.TableName);
tableDataSource = new ActionsTableDataSource(table);
// Setup the service bus topic.
var namespaceManager = NamespaceManager.CreateFromConnectionString(cloudConfig.ServiceBusConnectionString.value);
if (!namespaceManager.TopicExists(CloudConstants.ResultsTopicName))
{
namespaceManager.CreateTopic(CloudConstants.ResultsTopicName);
}
done = true;
}
catch (Exception e)
{
Trace.TraceError("Failure trying to connect to Azure storage: " + e.ToString());
}
}
// Get paths to important directories in the file system. Remove the trailing slash from the paths.
LocalResource localResource = RoleEnvironment.GetLocalResource(CloudConstants.SmvWorkingDirectoryResourceName);
workingDirectory = localResource.RootPath.Remove(localResource.RootPath.Length - 1);
localResource = RoleEnvironment.GetLocalResource(CloudConstants.SmvResultsDirectoryResourceName);
resultsDirectory = localResource.RootPath.Remove(localResource.RootPath.Length - 1);
localResource = RoleEnvironment.GetLocalResource(CloudConstants.SmvDirectoryResourceName);
smvVersionsDirectory = localResource.RootPath.Remove(localResource.RootPath.Length - 1);
}
catch (Exception e)
{
Trace.TraceError("Exception while running OnStart(): " + e.ToString());
return false;
}
Utility.result = null;
return base.OnStart();
}