Skip to content

Commit

Permalink
Merge pull request #92 from Azure/dev
Browse files Browse the repository at this point in the history
Merging changes from dev branch. 3.0.0.8 release
  • Loading branch information
gtrifonov committed Oct 10, 2014
2 parents 173213b + 30597ce commit 587414f
Show file tree
Hide file tree
Showing 78 changed files with 1,680 additions and 957 deletions.
5 changes: 5 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -64,3 +64,8 @@ test/net/Scenario/App.IncrementVersion.config
test/net/Scenario/App.IncrementVersion.config
test/net/Scenario/App.Coverage.config
test/net/Scenario/App.Release.config
/test/net/stress/App.Debug.config
/test/net/stress/app.Release.config
/SDK.Client.sln.GhostDoc.xml
/test/net/Scenario/App.Stage.config
/test/net/Scenario/App.LKG.config
4 changes: 2 additions & 2 deletions .nuget/windowsazure.mediaservices.nuspec
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,15 @@
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
<metadata>
<id>windowsazure.mediaservices</id>
<version>3.0.0.7</version>
<version>3.0.0.8</version>
<title>Windows Azure Media Services .NET SDK</title>
<authors>Microsoft Corporation</authors>
<owners>Microsoft Corporation</owners>
<licenseUrl>http://go.microsoft.com/fwlink/?LinkID=272666&amp;clcid=0x409</licenseUrl>
<projectUrl>http://aka.ms/wamsmsdn</projectUrl>
<iconUrl>http://nimbuspmteam.blob.core.windows.net/nuget/Media Services 150.png</iconUrl>
<requireLicenseAcceptance>true</requireLicenseAcceptance>
<description>This package contains Windows Azure Media Service library 3.0.0.7 for .NET.</description>
<description>This package contains Windows Azure Media Service library 3.0.0.8 for .NET.</description>
<releaseNotes>For more information, please check our forum: http://social.msdn.microsoft.com/Forums/en-US/MediaServices/threads

For MSDN documentation please visit http://aka.ms/wamsmsdn
Expand Down
29 changes: 28 additions & 1 deletion SDK.Client.sln
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 2013
VisualStudioVersion = 12.0.30110.0
VisualStudioVersion = 12.0.30501.0
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SDK.Client", "src\net\Client\SDK.Client.csproj", "{E194B46E-9063-4CFA-85FC-51E5AAD55586}"
EndProject
Expand Down Expand Up @@ -39,6 +39,9 @@ Global
Release|Any CPU = Release|Any CPU
Release|x64 = Release|x64
Release|x86 = Release|x86
Stage|Any CPU = Stage|Any CPU
Stage|x64 = Stage|x64
Stage|x86 = Stage|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{E194B46E-9063-4CFA-85FC-51E5AAD55586}.Coverage|Any CPU.ActiveCfg = Coverage|Any CPU
Expand All @@ -65,6 +68,12 @@ Global
{E194B46E-9063-4CFA-85FC-51E5AAD55586}.Release|x64.Build.0 = Release|x64
{E194B46E-9063-4CFA-85FC-51E5AAD55586}.Release|x86.ActiveCfg = Release|x86
{E194B46E-9063-4CFA-85FC-51E5AAD55586}.Release|x86.Build.0 = Release|x86
{E194B46E-9063-4CFA-85FC-51E5AAD55586}.Stage|Any CPU.ActiveCfg = Stage|Any CPU
{E194B46E-9063-4CFA-85FC-51E5AAD55586}.Stage|Any CPU.Build.0 = Stage|Any CPU
{E194B46E-9063-4CFA-85FC-51E5AAD55586}.Stage|x64.ActiveCfg = Stage|x64
{E194B46E-9063-4CFA-85FC-51E5AAD55586}.Stage|x64.Build.0 = Stage|x64
{E194B46E-9063-4CFA-85FC-51E5AAD55586}.Stage|x86.ActiveCfg = Stage|x86
{E194B46E-9063-4CFA-85FC-51E5AAD55586}.Stage|x86.Build.0 = Stage|x86
{8713AE4E-44F6-41AA-B8DC-CD1236F484CD}.Coverage|Any CPU.ActiveCfg = Coverage|Any CPU
{8713AE4E-44F6-41AA-B8DC-CD1236F484CD}.Coverage|Any CPU.Build.0 = Coverage|Any CPU
{8713AE4E-44F6-41AA-B8DC-CD1236F484CD}.Coverage|x64.ActiveCfg = Coverage|x64
Expand All @@ -89,6 +98,12 @@ Global
{8713AE4E-44F6-41AA-B8DC-CD1236F484CD}.Release|x64.Build.0 = Release|x64
{8713AE4E-44F6-41AA-B8DC-CD1236F484CD}.Release|x86.ActiveCfg = Release|x86
{8713AE4E-44F6-41AA-B8DC-CD1236F484CD}.Release|x86.Build.0 = Release|x86
{8713AE4E-44F6-41AA-B8DC-CD1236F484CD}.Stage|Any CPU.ActiveCfg = Stage|Any CPU
{8713AE4E-44F6-41AA-B8DC-CD1236F484CD}.Stage|Any CPU.Build.0 = Stage|Any CPU
{8713AE4E-44F6-41AA-B8DC-CD1236F484CD}.Stage|x64.ActiveCfg = Stage|x64
{8713AE4E-44F6-41AA-B8DC-CD1236F484CD}.Stage|x64.Build.0 = Stage|x64
{8713AE4E-44F6-41AA-B8DC-CD1236F484CD}.Stage|x86.ActiveCfg = Stage|x86
{8713AE4E-44F6-41AA-B8DC-CD1236F484CD}.Stage|x86.Build.0 = Stage|x86
{19DA48B7-6C3C-4B2C-8789-1CC9CCBDA4C7}.Coverage|Any CPU.ActiveCfg = Release|Any CPU
{19DA48B7-6C3C-4B2C-8789-1CC9CCBDA4C7}.Coverage|Any CPU.Build.0 = Release|Any CPU
{19DA48B7-6C3C-4B2C-8789-1CC9CCBDA4C7}.Coverage|x64.ActiveCfg = Release|Any CPU
Expand All @@ -105,6 +120,10 @@ Global
{19DA48B7-6C3C-4B2C-8789-1CC9CCBDA4C7}.Release|Any CPU.Build.0 = Release|Any CPU
{19DA48B7-6C3C-4B2C-8789-1CC9CCBDA4C7}.Release|x64.ActiveCfg = Release|Any CPU
{19DA48B7-6C3C-4B2C-8789-1CC9CCBDA4C7}.Release|x86.ActiveCfg = Release|Any CPU
{19DA48B7-6C3C-4B2C-8789-1CC9CCBDA4C7}.Stage|Any CPU.ActiveCfg = Stage|Any CPU
{19DA48B7-6C3C-4B2C-8789-1CC9CCBDA4C7}.Stage|Any CPU.Build.0 = Stage|Any CPU
{19DA48B7-6C3C-4B2C-8789-1CC9CCBDA4C7}.Stage|x64.ActiveCfg = Stage|Any CPU
{19DA48B7-6C3C-4B2C-8789-1CC9CCBDA4C7}.Stage|x86.ActiveCfg = Stage|Any CPU
{04DB0E20-008C-45EF-B427-B6F33B25CD67}.Coverage|Any CPU.ActiveCfg = Release|Any CPU
{04DB0E20-008C-45EF-B427-B6F33B25CD67}.Coverage|Any CPU.Build.0 = Release|Any CPU
{04DB0E20-008C-45EF-B427-B6F33B25CD67}.Coverage|x64.ActiveCfg = Release|Any CPU
Expand All @@ -121,6 +140,10 @@ Global
{04DB0E20-008C-45EF-B427-B6F33B25CD67}.Release|Any CPU.Build.0 = Release|Any CPU
{04DB0E20-008C-45EF-B427-B6F33B25CD67}.Release|x64.ActiveCfg = Release|Any CPU
{04DB0E20-008C-45EF-B427-B6F33B25CD67}.Release|x86.ActiveCfg = Release|Any CPU
{04DB0E20-008C-45EF-B427-B6F33B25CD67}.Stage|Any CPU.ActiveCfg = Stage|Any CPU
{04DB0E20-008C-45EF-B427-B6F33B25CD67}.Stage|Any CPU.Build.0 = Stage|Any CPU
{04DB0E20-008C-45EF-B427-B6F33B25CD67}.Stage|x64.ActiveCfg = Stage|Any CPU
{04DB0E20-008C-45EF-B427-B6F33B25CD67}.Stage|x86.ActiveCfg = Stage|Any CPU
{0CD55683-0485-4630-89B5-54EA080E2FC1}.Coverage|Any CPU.ActiveCfg = Release|Any CPU
{0CD55683-0485-4630-89B5-54EA080E2FC1}.Coverage|Any CPU.Build.0 = Release|Any CPU
{0CD55683-0485-4630-89B5-54EA080E2FC1}.Coverage|x64.ActiveCfg = Release|Any CPU
Expand All @@ -137,6 +160,10 @@ Global
{0CD55683-0485-4630-89B5-54EA080E2FC1}.Release|Any CPU.Build.0 = Release|Any CPU
{0CD55683-0485-4630-89B5-54EA080E2FC1}.Release|x64.ActiveCfg = Release|Any CPU
{0CD55683-0485-4630-89B5-54EA080E2FC1}.Release|x86.ActiveCfg = Release|Any CPU
{0CD55683-0485-4630-89B5-54EA080E2FC1}.Stage|Any CPU.ActiveCfg = Stage|Any CPU
{0CD55683-0485-4630-89B5-54EA080E2FC1}.Stage|Any CPU.Build.0 = Stage|Any CPU
{0CD55683-0485-4630-89B5-54EA080E2FC1}.Stage|x64.ActiveCfg = Stage|Any CPU
{0CD55683-0485-4630-89B5-54EA080E2FC1}.Stage|x86.ActiveCfg = Stage|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
Expand Down
7 changes: 5 additions & 2 deletions build.proj
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,12 @@
<PackageDirectory>.\Package</PackageDirectory>
<BuildOutputDirectory>$(PublishDirectory)\Build</BuildOutputDirectory>
<TestOutputDirectory>$(PublishDirectory)\TestResults</TestOutputDirectory>
<NugetDirectory>.\.nuget</NugetDirectory>

</PropertyGroup>

<Target Name="RestorePackages">
<Exec Command="&quot;$(NugetDirectory)\NuGet.exe&quot; restore &quot;.\SDK.Client.sln&quot;" />
</Target>
<!-- Clean the build in all configurations -->
<Target Name="Clean">
<!-- Clean the solutions -->
Expand Down Expand Up @@ -93,7 +96,7 @@

</Target>

<Target Name="Build" DependsOnTargets="Clean;BuildDebug;BuildRelease" />
<Target Name="Build" DependsOnTargets="RestorePackages;Clean;BuildDebug;BuildRelease" />

<!-- Publish any build artificates to the Publish directory -->
<Target Name="Publish" DependsOnTargets="Build">
Expand Down
4 changes: 2 additions & 2 deletions ci/AssemblyInfo.cs
Original file line number Diff line number Diff line change
Expand Up @@ -47,8 +47,8 @@
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
[assembly: AssemblyVersion("3.0.0.7")]
[assembly: AssemblyFileVersion("3.0.0.7")]
[assembly: AssemblyVersion("3.0.0.8")]
[assembly: AssemblyFileVersion("3.0.0.8")]
[assembly: NeutralResourcesLanguage("en-US")]

//For delay signing specify PublicKey for each friendly assembly
Expand Down
155 changes: 92 additions & 63 deletions src/net/Client/AzureMediaServicesClassFactory.cs
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@
using System.Data.Services.Common;
using System.Net;
using Microsoft.Practices.TransientFaultHandling;
using Microsoft.WindowsAzure.MediaServices.Client.OAuth;
using Microsoft.WindowsAzure.MediaServices.Client.Versioning;
using Microsoft.WindowsAzure.MediaServices.Client.OAuth;
using Microsoft.WindowsAzure.MediaServices.Client.RequestAdapters;
using Microsoft.WindowsAzure.MediaServices.Client.TransientFaultHandling;

namespace Microsoft.WindowsAzure.MediaServices.Client
Expand All @@ -33,39 +33,43 @@ public class AzureMediaServicesClassFactory : MediaServicesClassFactory
private readonly Uri _azureMediaServicesEndpoint;
private readonly OAuthDataServiceAdapter _dataServiceAdapter;
private readonly ServiceVersionAdapter _serviceVersionAdapter;
private readonly MediaContextBase _mediaContext;

private readonly MediaContextBase _mediaContext;
private readonly UserAgentAdapter _userAgentAdapter;

private const int ConnectionRetryMaxAttempts = 4;
private const int ConnectionRetrySleepQuantum = 100;

private static Cache<Uri> _endpointCache = new Cache<Uri>();

/// <summary>
/// Initializes a new instance of the <see cref="MediaServicesClassFactory"/> class.
/// </summary>
public AzureMediaServicesClassFactory() { }

/// <summary>
/// Initializes a new instance of the <see cref="MediaServicesClassFactory"/> class.
/// </summary>
/// <param name="azureMediaServicesEndpoint">The Windows Azure Media Services endpoint to use.</param>
/// <param name="dataServiceAdapter">The data service adapter.</param>
/// <param name="serviceVersionAdapter">The service version adapter.</param>
/// <param name="mediaContext">The <seealso cref="CloudMediaContext"/> instance.</param>
public AzureMediaServicesClassFactory(Uri azureMediaServicesEndpoint, OAuthDataServiceAdapter dataServiceAdapter, ServiceVersionAdapter serviceVersionAdapter, MediaContextBase mediaContext)
private static Cache<Uri> _endpointCache = new Cache<Uri>();

public AzureMediaServicesClassFactory()
{

}

/// <summary>
/// Initializes a new instance of the <see cref="MediaServicesClassFactory" /> class.
/// </summary>
/// <param name="azureMediaServicesEndpoint">The Windows Azure Media Services endpoint to use.</param>
/// <param name="dataServiceAdapter">The data service adapter.</param>
/// <param name="serviceVersionAdapter">The service version adapter.</param>
/// <param name="mediaContext">The <seealso cref="CloudMediaContext" /> instance.</param>
/// <param name="userAgentAdapter">The user agent request adapter</param>
public AzureMediaServicesClassFactory(Uri azureMediaServicesEndpoint, OAuthDataServiceAdapter dataServiceAdapter, ServiceVersionAdapter serviceVersionAdapter, MediaContextBase mediaContext, UserAgentAdapter userAgentAdapter)
{
this._dataServiceAdapter = dataServiceAdapter;
this._serviceVersionAdapter = serviceVersionAdapter;
this._mediaContext = mediaContext;

string cacheKey = string.Format(
this._mediaContext = mediaContext;
_userAgentAdapter = userAgentAdapter;
var clientRequestIdAdapter = new ClientRequestIdAdapter();

string cacheKey = string.Format(
"{0},{1}",
mediaContext.Credentials.ClientId,
azureMediaServicesEndpoint.ToString());

this._azureMediaServicesEndpoint = _endpointCache.GetOrAdd(
cacheKey,
() => GetAccountApiEndpoint(this._dataServiceAdapter, this._serviceVersionAdapter, azureMediaServicesEndpoint),
cacheKey,
() => GetAccountApiEndpoint(this._dataServiceAdapter, this._serviceVersionAdapter, azureMediaServicesEndpoint, userAgentAdapter,clientRequestIdAdapter),
() => mediaContext.Credentials.TokenExpiration);
}

Expand All @@ -80,18 +84,24 @@ public override IMediaDataServiceContext CreateDataServiceContext()
IgnoreMissingProperties = true,
IgnoreResourceNotFoundException = true,
MergeOption = MergeOption.PreserveChanges,
};
};

var clientRequestIdAdapter = new ClientRequestIdAdapter();

this._dataServiceAdapter.Adapt(dataContext);
this._serviceVersionAdapter.Adapt(dataContext);

dataContext.ReadingEntity += this.OnReadingEntity;

MediaRetryPolicy queryRetryPolicy = GetQueryRetryPolicy();

return new MediaDataServiceContext(dataContext, queryRetryPolicy);
}

this._userAgentAdapter.Adapt(dataContext);
clientRequestIdAdapter.Adapt(dataContext);

dataContext.ReadingEntity += this.OnReadingEntity;
var queryRetryPolicy = GetQueryRetryPolicy(null);
var context = new MediaDataServiceContext(dataContext, queryRetryPolicy, clientRequestIdAdapter);
queryRetryPolicy.RetryPolicyAdapter = context;
return context;

}


/// <summary>
/// Creates retry policy for working with Azure blob storage.
/// </summary>
Expand All @@ -108,41 +118,58 @@ public override MediaRetryPolicy GetBlobStorageClientRetryPolicy()
return retryPolicy;
}

/// <summary>
/// Creates retry policy for saving changes in Media Services REST layer.
/// </summary>
/// <returns>Retry policy.</returns>
public override MediaRetryPolicy GetSaveChangesRetryPolicy()
{
var retryPolicy = new MediaRetryPolicy(
GetSaveChangesErrorDetectionStrategy(),
retryCount: ConnectionRetryMaxAttempts,
minBackoff: TimeSpan.FromMilliseconds(ConnectionRetrySleepQuantum),
maxBackoff: TimeSpan.FromMilliseconds(ConnectionRetrySleepQuantum * 16),
deltaBackoff: TimeSpan.FromMilliseconds(ConnectionRetrySleepQuantum));

return retryPolicy;
}

/// <summary>
/// Creates retry policy for saving changes in Media Services REST layer.
/// </summary>
/// <returns>Retry policy.</returns>
public override MediaRetryPolicy GetSaveChangesRetryPolicy(IRetryPolicyAdapter adapter)
{
var retryPolicy = new MediaRetryPolicy(
GetSaveChangesErrorDetectionStrategy(),
retryCount: ConnectionRetryMaxAttempts,
minBackoff: TimeSpan.FromMilliseconds(ConnectionRetrySleepQuantum),
maxBackoff: TimeSpan.FromMilliseconds(ConnectionRetrySleepQuantum * 16),
deltaBackoff: TimeSpan.FromMilliseconds(ConnectionRetrySleepQuantum)
);
retryPolicy.RetryPolicyAdapter = adapter;
return retryPolicy;
}

[Obsolete]
public override MediaRetryPolicy GetSaveChangesRetryPolicy()
{
return GetSaveChangesRetryPolicy(null);
}


[Obsolete]
/// <summary>
/// Creates retry policy for querying Media Services REST layer.
/// </summary>
/// <returns>Retry policy.</returns>
public override MediaRetryPolicy GetQueryRetryPolicy()
{
var retryPolicy = new MediaRetryPolicy(
GetQueryErrorDetectionStrategy(),
retryCount: ConnectionRetryMaxAttempts,
minBackoff: TimeSpan.FromMilliseconds(ConnectionRetrySleepQuantum),
maxBackoff: TimeSpan.FromMilliseconds(ConnectionRetrySleepQuantum * 16),
deltaBackoff: TimeSpan.FromMilliseconds(ConnectionRetrySleepQuantum));

return retryPolicy;
public override MediaRetryPolicy GetQueryRetryPolicy()
{
return GetQueryRetryPolicy(null);
}
/// <summary>
/// Creates retry policy for querying Media Services REST layer.
/// </summary>
/// <returns>Retry policy.</returns>
public override MediaRetryPolicy GetQueryRetryPolicy(IRetryPolicyAdapter adapter)
{
var retryPolicy = new MediaRetryPolicy(
GetQueryErrorDetectionStrategy(),
retryCount: ConnectionRetryMaxAttempts,
minBackoff: TimeSpan.FromMilliseconds(ConnectionRetrySleepQuantum),
maxBackoff: TimeSpan.FromMilliseconds(ConnectionRetrySleepQuantum * 16),
deltaBackoff: TimeSpan.FromMilliseconds(ConnectionRetrySleepQuantum));
retryPolicy.RetryPolicyAdapter = adapter;
return retryPolicy;
}

private Uri GetAccountApiEndpoint(OAuthDataServiceAdapter dataServiceAdapter, ServiceVersionAdapter versionAdapter, Uri apiServer)
{
RetryPolicy retryPolicy = new RetryPolicy(
private Uri GetAccountApiEndpoint(OAuthDataServiceAdapter dataServiceAdapter, ServiceVersionAdapter versionAdapter, Uri apiServer, UserAgentAdapter userAgentAdapter,ClientRequestIdAdapter clientRequestIdAdapter)
{
MediaRetryPolicy retryPolicy = new MediaRetryPolicy(
GetWebRequestTransientErrorDetectionStrategy(),
RetryStrategyFactory.DefaultStrategy());

Expand All @@ -154,7 +181,9 @@ private Uri GetAccountApiEndpoint(OAuthDataServiceAdapter dataServiceAdapter, Se
request.AllowAutoRedirect = false;
dataServiceAdapter.AddAccessTokenToRequest(request);
versionAdapter.AddVersionToRequest(request);
userAgentAdapter.AddUserAgentToRequest(request);
clientRequestIdAdapter.AddClientRequestId(request);
using (WebResponse response = request.GetResponse())
{
apiEndpoint = GetAccountApiEndpointFromResponse(response);
Expand Down
6 changes: 3 additions & 3 deletions src/net/Client/BulkIngest/IngestManifestAssetCollection.cs
Original file line number Diff line number Diff line change
Expand Up @@ -209,9 +209,9 @@ private Task<IIngestManifestAsset> CreateAsync(IIngestManifest ingestManifest, I

dataContext.AddObject(IngestManifestAssetCollection.EntitySet,data);
dataContext.AttachTo(AssetCollection.AssetSet, asset);
dataContext.SetLink(data,"Asset",asset);

MediaRetryPolicy retryPolicy = this.MediaContext.MediaServicesClassFactory.GetSaveChangesRetryPolicy();
dataContext.SetLink(data,"Asset",asset);

MediaRetryPolicy retryPolicy = this.MediaContext.MediaServicesClassFactory.GetSaveChangesRetryPolicy(dataContext as IRetryPolicyAdapter);

Task<IIngestManifestAsset> task = retryPolicy.ExecuteAsync<IMediaDataServiceResponse>(() => dataContext.SaveChangesAsync(data))
.ContinueWith<IIngestManifestAsset>(t =>
Expand Down
6 changes: 3 additions & 3 deletions src/net/Client/BulkIngest/IngestManifestAssetData.cs
Original file line number Diff line number Diff line change
Expand Up @@ -60,9 +60,9 @@ public Task DeleteAsync()
{
IMediaDataServiceContext dataContext = GetMediaContext().MediaServicesClassFactory.CreateDataServiceContext();
dataContext.AttachTo(IngestManifestAssetCollection.EntitySet, this);
dataContext.DeleteObject(this);

MediaRetryPolicy retryPolicy = this.GetMediaContext().MediaServicesClassFactory.GetSaveChangesRetryPolicy();
dataContext.DeleteObject(this);

MediaRetryPolicy retryPolicy = this.GetMediaContext().MediaServicesClassFactory.GetSaveChangesRetryPolicy(dataContext as IRetryPolicyAdapter);

return retryPolicy.ExecuteAsync<IMediaDataServiceResponse>(() => dataContext.SaveChangesAsync(this));
}
Expand Down

0 comments on commit 587414f

Please sign in to comment.