forked from Azure/azure-storage-net
-
Notifications
You must be signed in to change notification settings - Fork 0
/
changelog.txt
199 lines (166 loc) · 15.8 KB
/
changelog.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
Issues fixed in 2.0.1 :
- All: CloudStorageAccount.*Parse methods throw an exception for "UseDevelopmentStorage=true" string.
- All: StorageErrorCodeStrings class is missing.
- Blobs: ICloudBlob interface does not have GetSharedAccessSignature method.
Issues fixed in 2.0.2 :
- All: CompletedSynchronously property returns inconsistent values on IAsyncResult objects returned by asynchronous methods and thus TaskFactory.FromAsync does not work properly.
- Tables: Public DynamicTableEntity constructors use DateTime even though the Timestamp property is of type DateTimeOffset.
- Tables: BeginSaveChangesWithRetries overload ignores the options argument.
Issues fixed in 2.0.3 :
- All (RT): General metadata correctness test fails when using the RT library to develop windows store apps.
- Queues: CloudQueueMessage.MaxNumberOfMessagesToPeek, CloudQueueMessage.MaxMessageSize and CloudQueueMessage.MaximumTimeToLive have disappeared from CloudQueueMessage.
- Queues: CloudQueue.BeginCreateIfNotExists and CloudQueue.BeginDeleteIfExists methods expect valid options argument.
- Tables: When one or more of the batches fails, but then succeeds on a retry, the "extra" TableResults of the failed transactions are also returned.
- Tables: TableQuery.GenerateFilterConditionForLong does not append 'L' at the end of the value and thus values larger than Int32.MaxValue cannot be used when filtering.
- Tables: TableEntity does not support serializing nullable values.
- Tables: CloudTable.EndListTablesSegmented method does not work correctly.
Issues fixed in 2.0.4 :
- All: Flush HttpWebRequest's request stream before calling BeginGetResponse.
- All: Support Null Retry Policies.
- Blobs: Continue ListContainers parsing if a container property is unknown.
- Queues (RT): DeleteMessageAsync(string messageId, string popReceipt) ignores the messageId and popReceipt.
- Tables: Add a TableConstant to define minimum DateTime supported.
- Tables: Correct count behavior with synchronous non segmented execution.
- Tables: Allow String.Empty in TableQuery Filters.
Issues fixed in 2.0.4.1 :
- All: Updated Odata dependency to latest and also changed nuspec to allow any version >= 5.2.0.
Issues fixed in 2.0.5 :
- All: StorageException is serializable. Also, other useful objects for debugging (StorageExtendedErrorInformation and RequestResult) are also serializable.
- All: SharedAccessSignature helper uses culture invariant characteristics to calculate SAS.
- All: CloudStorageAccount can parse connection strings with extra blank values.
- All: OperationContext StartTime and EndTime are populated during execution.
- All: StorageCredentials.UpdateKey does not work on SAS/Anonymous credentials anymore.
- All: Metadata headers are sorted using en-US culture to prevent 403 errors in some cultures.
- All: Fixed issue where in some cases a sync method call could result in a 0 ms timeout being set on HttpWebRequest.
- Blobs: Snapshot time embedded in blob Uri is parsed in the constructor.
- Blobs: GetBlobReferenceFromServer works with blob Uri that contain a SAS token.
- Blobs: BlobWriteStream honors AccessCondition.
- Blobs: BlobWriteStream prevents using StoreBlobContentMD5 on existing page blobs.
- Blobs: ICloudBlob has OpenRead method.
- Blobs: Cloud*Blob.OpenRead can be used with snapshots.
- Blobs: AbortCopy does not throw an exception anymore when a copy is successfully aborted.
- Queues: Ability to recreate CloudQueueMessage with Message Id and Pop Receipt.
- Tables: Exceptions during TableBatchOperation parse the entity index from the server response.
- Tables: Floating-point number filter is generated using invariant culture.
Issues fixed in 2.0.5.1 :
- All: Make sure the response stream is drained to prevent socket exhaustion.
Issues fixed in 2.0.6.0 :
- All: Default RetryPolicy filters updated to not retry 100-407, 409-499, 501, and 505
- All: Support for all flavors of SharedKey and SharedKeyLite message signing through AuthenticationScheme property on client classes.
- All: Unusable HttpWebRequestFactory and WebRequestExtensions are not public anymore
- All: TranslateFromExceptionMessage has been deprecated in Microsoft.WindowsAzure.Storage.dll and is now available only in Microsoft.WindowsAzure.Storage.WinMD
- All: StorageCredentials supports empty account keys.
- All: RequestResult deserialization does not fail when Content-MD5 is missing
- Blobs (RT): DownloadToStreamAsync and DownloadRangeToStreamAsync writes the entire data to the given stream before returning back to the caller.
- Blobs (RT): UploadFromStreamAsync commits the blob in a worker thread to unblock UI.
- Blobs: Blob stream now uses a GUID instead of a random number as block ID prefix to prevent collisions.
- Queues: Changed return type of CloudQueue.BeginSetMetadata(AsyncCallback, object) to ICancellableAsyncResult.
- Tables: Changed default message signing to SharedKey (except for Data Services).
- Tables: EntityProperty updated to set the IsNull value for properties correctly in the case when the user sets an EntityProperty value through its setter.
- Tables: EdmType for null values in EntityProperty is set correctly and does not default to string any more.
Issues fixed in 2.0.6.1 :
- Tables: Fix for Table Service layer to drain response stream
Changes in 2.1.0 :
- All: Changed User-Agent header value to include .NET CLR and OS versions
- All: Performance improvements across all services (major improvements detailed below).
- All: Added logging functionality for all operations.
- All: Added Task overloads for all asynchronous APIs.
- All: Listing methods provide a third overload for that accepts just prefix.
- All: Exposed header, query and generic constants as public to assist clients developing via the protocol layer.
- All: Buffers that would end up in Large Object Heap are avoided as much as possible.
- All: OperationContext.ClientRequestID is automatically set for each operation with a new GUID if the user does not provide one.
- All: StorageCredentials exposes a new UpdateSASToken method to allow users to update their SAS Token in place.
- All: StorageCredentials exposes a new UpdateKey overload that only requires key value.
- All: StorageCredentials exposes a new ExportBase64EncodedKey method that returns the key in Base64 encoding.
- All: .NET MD5 implementation is used by default, FISMA (Native) MD5 can be enabled by setting CloudStorageAccount.UseV1MD5 to false explicitly.
- All: Mark the assembly to allow partially trusted callers.
- All: Added EndpointSuffix to CloudStorageAccount.
- All: Delays between request are pre-empted when user cancels the operation.
- All: Fix to measure End-to-end timeouts more accurately.
- All: Types that contain disposable objects implement IDisposable.
- All: Synchronous APIs correctly timeout if network IO is pending.
- All: When a request times out, the StorageException object that was thrown will contain a TimeoutException as InnerException.
- All: Synchronous requests do not retry errors anymore that occur before sending the request.
- All: Wait handles used for asynchronous requests are unregistered properly for better GC.
- All: CloudStorageAccount.ToString can recreate the original connection string that was passed in to CloudStorageAccount.Parse.
- All: Expose IBufferManager on ServiceClients enabling users to provide a buffer pooling implementation.
- All: Abort a pending request if upload times out to prevent socket exhaustion
- All: Fixed a potential overflow in ExponentialRetry.
- All: Queue and Table SAS validation should not check for signed resource(sr). Tables should check the table name(tn).
- Blobs: ICloudBlob exposes new BeginOpenRead/EndOpenRead methods to asynchronously open a stream to read from the blob.
- Blobs: Cloud[Block|Page]Blob.OpenRead performs a service request.
- Blobs: Streams opened with OpenRead methods do not discard the cache anymore if seeked to a position within the cached range.
- Blobs: Streams opened with OpenRead methods provide true synchronous Read API.
- Blobs: Streams opened with OpenRead methods do not allow calling multiple BeginRead methods because the result is undefined.
- Blobs: ICloudBlob.StreamMinimumReadSizeInBytes can be set to any value larger than or equal to 16KB.
- Blobs: OpenWrite methods return CloudBlobStream instead of Stream. The CloudBlobStream type provides explicit commit and asynchronous flush functionality.
- Blobs: Parallel upload performance of streams opened with OpenWrite methods is improved considerably due to keeping number of active operations at a certain level.
- Blobs: ICloudBlob exposes new UploadFromStream overloads that accept a length parameter, allowing users to upload a portion of the stream.
- Blobs: CloudBlockBlob.UploadFromStream correctly updates the locally cached MD5.
- Blobs: CloudBlockBlob exposes new UploadFromFile, UploadFromByteArray, and UploadText methods.
- Blobs: CloudPageBlob exposes new UploadFromFile and UploadFromByteArray methods.
- Blobs: CloudBlockBlob exposes new DownloadToFile, DownloadToByteArray, DownloadRangeToByteArray, and DownloadText methods.
- Blobs: CloudPageBlob exposes new DownloadToFile, DownloadToByteArray, and DownloadRangeToByteArray methods.
- Blobs: Added support for page blob sequence numbers.
- Blobs: Added support for public access to container creation.
- Blobs: Cloud[Block|Page]Blob.Exists also updates properties.
- Blobs: Cloud[Block|Page]Blob.StartCopyFromBlob verifies the source URI to prevent a possible NullReferenceException.
- Blobs: ICloudBlob exposes new IsSnapshot and SnapshotQualifiedUri properties for easier handling of blob snapshots.
- Blobs: Blob downloads skip length validation if Content-Length header is not set.
- Blobs: BlobProperties constructor that takes another BlobProperties object correctly copies all properties.
- Blobs: Traversing to the parent container from a CloudBlobDirectory does not create a new CloudBlobContainer object.
- Blobs (RT): IRandomAccessStreamWithContentType returned by ICloudBlob.OpenReadAsync correctly implements CloneStream and Seek.
- Blobs (RT): OpenWriteAsync methods return ICloudBlobStream instead of IOutputStream. ICloudBlobStream type provides explicit commit functionality.
- Blobs (RT): ICloudBlobStream.FlushAsync no longer blocks.
- Queues: MaxResults argument in queue listing APIs is nullable.
- Queues: CloudQueue.EndBeginClear is deprecated.
- Queues: All queue APIs are correctly marked with DoesServiceRequest attribute.
- Queues: New CloudQueue.BeginDeleteMessage overloads with less arguments.
- Queues (RT): visibilityTimeout argument of CloudQueue.UpdateMessage is not nullable.
- Queues (RT): CloudQueueClient.ListQueuesSegmentedAsync takes a new argument of type QueueRequestOptions.
- Tables: Table Service Layer supports queries with LINQ.
- Tables: TableEntity derived classes now support compiled serializers to improve serialization performance.
- Tables: Table allows query execution with a resolver against non-generic query types (dynamic entity types).
- Tables: Added IgnorePropertyAttribute for TableEntities to allow individual properties on POCO objects to be ignored during serialization.
- Tables: If-Match condition for Delete/Replace/Merge operations will not be set if entity ETag is null.
- Tables: Executing a batch operation with no operations will throw an InvalidOperationException instead of an ArgumentOutOfRangeException.
- Tables: To support IQueryable projections the TableQuery class Generic type is no longer constrained with where T: ITableEntity, new(). For TableQueries not created with via the IQueryable these same effective constraints are validated at runtime.
- Tables: Performance improvement to reduce Activator.CreateInstance usage for entity instantiation.
- Tables: Exposed PropertyAsObject Property in EntityProperty as publicly readable.
- Tables: Exposed table serialialization logic. Allow users to persist and read back entities that don't derive from TableEntity using static methods(ReadUserObject and WriteUserObject).
- Tables: Exposed CreateEntityPropertyFromObject in EntityProperty so users can pass in a value and get the corresponding EntityProperty.
- Tables: Escape single quote in PartitionKey and RowKey correctly while generating URIs.
Issues fixed in 2.1.0.2 :
- Blobs: Streams opened by OpenRead do not throw NotSupportedException when Flush is called.
- Tables: Generic ExecuteQuery methods on CloudTable execute IQueryable queries correctly by generating the filter string.
Issues fixed in 2.1.0.3 :
- All: Registered wait handles are unregistered sooner for more efficient GC.
Issues fixed in 2.1.0.4 :
- Tables: Do not send the cast operator in the table query filter string.
Changes in 3.0.0.0 :
- All: Support for 2013-08-15 REST version - see here for additional details: http://blogs.msdn.com/b/windowsazurestorage/archive/2013/11/27/windows-azure-storage-release-introducing-cors-json-minute-metrics-and-more.aspx.
- All: Suppress warning for FiddlerCore EntensionAttribute conflict.
- Blobs: Added support for XML serialize/deserialize of BlobContinuationToken.
- Blobs: Added ParallelOperationThreadCount and SingleBlobUploadThresholdInBytes to BlobRequestOptions.
- Tables: Fixed GetHashCode() in EntityProperty to return equal values for binary types.
- Tables: JsonMinimalMetadata is now the default payload format (rather than AtomPub). Payload format can be specified for all table requests by using CloudTableClient.TablePayloadFormat or for an individual table request by using TableRequestOptions.TablePayloadFormat.
- Tables (RT): Fixed error parsing for tables.
Issues fixed in 3.0.1.0 :
- All (WP): Set the Accept type to application/xml explicitly for Get/SetACL.
- Blobs: LastModified and ETag properties are populated after Lease operations.
- Tables: Added an explicit reference to Microsoft.Data.Services.Client in the Nuget package.
- Tables: Fixed an issue caused by a Json .NET bug that resulted in an error being thrown while parsing a table query response. More details on the bug can be found here: http://james.newtonking.com/archive/2013/11/29/fixing-jarray-getenumerator-method-not-found-bug
- Tables (RT): Fixed continuation tokens for queries and listing operations.
Issues fixed in 3.0.2.0 :
- All (WP): Fixed an issue causing ArgumentOutOfRangeException in many APIs.
- Queues: Fixed an issue causing NullReferenceException when trying to re-create an existing queue.
- Tables: Fixed an issue with TableServiceContext causing NullReferenceException when the error response cannot be parsed.
- Tables (RT): Do not allow users to set JsonFullMetadata format on RequestOptions in RT, because JSON is not supported on the RT library yet.
Issues fixed in 3.0.3.0 :
- All: Fixed an issue that was causing a deadlock because the cancellation registration was being de-registered while holding on to a lock that the cancellation callback was waiting on.
- All: Fixed an issue where parsing exception information out of the response stream while using async was blocking on IO calls.
- All (WP): Fixed an issue with cancellation and timeout during upload and download causing a thread to hang. HttpWebRequest.Abort is not called during stream operations anymore.
- Blobs: Streams opened with OpenRead methods use the user-provided buffer pooling implementation.
- Blobs: If the parent of a blob is the container, Cloud{BlockBlob|PageBlob|BlobDirectory}.Parent returns a valid CloudBlobDirectory with an empty prefix. Similarly, container.GetDirectoryReference("") gets a valid CloudBlobDirectory representing the container.
- Tables (Perf): Fixed an issue where the entity properties were being enumerated twice during table write operations while using JSON.
- Tables (Perf): Parse the URI for the account name only once in the client constructor and store it so that all table operations can use the stored value.