forked from Azure/azure-storage-net
-
Notifications
You must be signed in to change notification settings - Fork 0
/
changelog.txt
293 lines (240 loc) · 23.4 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
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
Changes in 4.3.0 :
- All: Support building Universal and Windows Runtime based Windows Phone applications.
- All: Update OData dependencies to v5.6.2 and Newtonsoft.Json dependency to v5.0.8
Changes in 4.2.1 :
- All: Fixed a bug where a TimeoutException was not properly retried.
- All: Fixed a bug where the IngressBytes of a RequestResult was not properly set in the exception case.
- All: Fixed a bug where default request options were overwritten on the resulting objects returned from a List* or GetBlobReferenceFromServer call.
Changes in 4.2.0 :
- All: Added the NameValidator class which contains helpers that check to see if resource names are valid.
- All: Fixed a bug where the RequestUrl of a LogRecord was not correctly HTML4 decoded.
- All: The maximum allowed MaximumExecutionTime is 24 days.
- All: Reworded a log line error.
- All (WP): Fixed an issue which caused WindowsPhone applications to fail Windows App Certification that is required to submit apps to the store.
- All (WP): Added Windows Phone 8.1 Silverlight support.
- Blobs: Added support for generating SAS tokens for blob snapshots.
- Blobs: Removed ability to set CloudBlobClient.DefaultDelimiter to "\\".
- Queues (RT): Fixed an issue where the messagettl and visibilitytimeout query parameters were not properly set while adding a message to the queue.
- Tables: CloudTable.DeleteIfExists and its async counterparts returns false instead of throwing an exception when the table does not exist.
Changes in 4.1.0 :
- All: Added parsing logic and the LogRecord class to further augment the Analytics Client ListLogs methods.
- All: Added Storage Analytics version constant strings.
- All: Updated the ErrorCodeStrings classes.
- All: Fixed an issue which caused Async methods to hang when an exception was thrown while translating a previous exception.
- Blobs: Fixed an issue in DownloadToFile that caused empty files to be created in the error case.
- Files: Fixed an issue in DownloadToFile that caused empty files to be created in the error case.
Changes in 4.0.1 :
- Tables: Removed Serialized attribute and ISerializable implementation from TableEntity. Implement ITabeEntity for your custom entities if you need either.
Changes in 4.0.0 :
- Files: Added support for File service.
- All: RequestResult tracks Ingress and Egress Bytes for all requests.
- All: Get{BlockBlob|PageBlob|Directory|Container|Queue|Table}Reference always treat the string parameter as a relative address.
- All: ServerTimeout is set to null by default. Therefore, "timeout" query parameter will not be sent to the server if ServerTimeout is not set by the user.
- All: Renamed DoesServiceRequest to DoesServiceRequestAttribute.
- All: Added DefaultRequestOptions to the Service Clients.
- All: Deprecated all service client request options properties (RetryPolicy, LocationMode, ServerTimeout, MaximumExecutionTime, SingleBlobUploadThresholdInBytes, ParallelOperationThreadCount, and TablePayloadFormat) via the Obsolete attribute.
- All: No longer shipping the WindowsAzure.Storage.Table-Preview package or the WindowsAzure.Storage-Preview package; everything is included in the WindowsAzure.Storage RTM package.
- All: Introduced AnalyticsClient and related entity types to simplify downloading logging and metrics data.
- All: MultiBufferMemoryStream, the BufferManager-aware high performance memory stream, is public.
- All: Shared Access Signature requests use the api-version query parameter instead of the x-ms-version header.
- All: Validated that the maxResults parameter passed into any List operation (eg ListBlobs, ListQueues, etc) is either null or has a positive value.
- All (RT): The RT libraries have been merged into a single dll. The winmd is no longer created. Code has been moved from //Lib/WindowsRuntimeTable to //Lib/WindowsRuntime/Table.
- All: Deprecated SharedKeyLiteAuthenticationHandler, use SharedKeyAuthenticationHandler instead.
- All: SharedKeyAuthenticationHandler.SignRequest does not add x-ms-date header if already present.
- Blobs: Update blob length only in APIs where the server includes the x-ms-blob-content-length or Content-Length header in the response.
- Blobs: Renamed CloudBlobDirectory.GetSubdirectoryReference to CloudBlobDirectory.GetDirectoryReference.
- Blobs: Changed the deprecated ParallelOperationThreadCount, SingleBlobUploadThresholdInBytes, and LocationMode on the BlobClient to nullables.
- Blobs: Fixed an issue that allowed whitespace metadata values to be set.
- Blobs: Changed the type of exception thrown to ArgumentNullException when a null prefix is passed to the ListBlobs method.
- Queues: Changed the deprecated LocationMode on the QueueClient to a nullable.
- Queues: Changed the visibility of QueueRequest.WriteMessageContent method to public.
- Queues: Removed the CloudQueueClient(Uri) constructor because queues don't support anonymous access. The correct usage is to use the CloudQueueClient(Uri, StorageCredentials) constructor instead.
- Tables: Changed the deprecated PayloadFormat and LocationMode on the TableClient to nullables.
- Tables: Deprecated the DataServices namespace via the Obsolete attribute.
- Tables: TableEntity is serializable via the ISerializable interface.
- Tables: Made the DateTime public in the EntityProperty class.
- Tables: Removed the CloudTableClient(Uri) constructor because tables don't support anonymous access. The correct usage is to use the CloudTableClient(Uri, StorageCredentials) constructor instead.
- Tables: CloudTable(Uri) correctly parses partition key and row key limit values from passed in URLs with SAS tokens.
- Tables (RT): Windows RT class "TableBatchOperationExtensions" no longer exists; functionality has been moved to methods in the TableBatchOperation class.
- Tables (RT): Windows RT class "CloudTableExtensions" no longer exists; functionality has been moved to methods in the CloudTable class.
- Tables (RT): Windows RT class "TableQueryExtensions" no longer exists; functionality has been moved to methods in the TableQuery class.
- Tables (RT): Windows RT class "TableOperationFactory" no longer exists; functionality has been moved to methods in the TableOperation class.
Issues fixed in 3.2.1 :
- All: Fixed a race condition that was causing deadlock during Task cancellation.
- Queues: CloudQueue objects returned by listing queues include metadata when QueueListingDetails.Metadata is used.
Issues fixed in 3.2.0 :
- All: Added support for secondary location access in Azure Storage Emulator
- All: Fixed a race condition that was causing NullReferenceException during asynchronous upload/download.
Issues fixed in 3.1.0.1 :
- All: Fixed an issue that was causing the Cloud{BlobContainer|Queue|Table|BlockBlob|PageBlob} names to be set incorrectly when the absolute Uri was passed to the Get{Container|Queue|Table|BlockBlob|PageBlob}Reference methods. This also ensures that the SharedAccessSignature which includes the canonicalized names of these resources is calculated correctly.
- All: Removed the System.Data.Services.Client dependency from the Nuget package.
- Queues: Added an overload to GetSharedAccessSignature that takes only the SharedAccessQueuePolicy in CloudQueue.
- Tables: Added an overload to GetSharedAccessSignature that takes only the SharedAccessTablePolicy and an overload that takes the SharedAccessTablePolicy and an accessPolicyIndentifier string in CloudTable.
Issues fixed in 3.1.0 :
- All: Added the ability to choose which SAS Version to use when generating Shared Access Signatures (either the 2012-02-12 or 2013-08-15 versions).
Issues fixed in 3.0.3 :
- 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.
Issues fixed in 3.0.2 :
- 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.1 :
- 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.
Changes in 3.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 2.1.0.4 :
- Tables: Do not send the cast operator in the table query 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.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.
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.0.6.1 :
- Tables: Fix for Table Service layer to drain response stream
Issues fixed in 2.0.6 :
- 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.5.1 :
- All: Make sure the response stream is drained to prevent socket exhaustion.
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.4.1 :
- All: Updated Odata dependency to latest and also changed nuspec to allow any version >= 5.2.0.
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.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.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.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.