diff --git a/common/config/rush/pnpm-lock.yaml b/common/config/rush/pnpm-lock.yaml index 3bfb97d4bb86..a09de01d5d0d 100644 --- a/common/config/rush/pnpm-lock.yaml +++ b/common/config/rush/pnpm-lock.yaml @@ -13256,7 +13256,7 @@ packages: dev: false file:projects/core-http-compat.tgz: - resolution: {integrity: sha512-oRYiWyqhAamtLlSZxYaWCGSKyl6A7P3grILLMa2G+GtRmqomlrnMwWJb1yz9TqWakYO7VubXGr3xO0K/LR50zA==, tarball: file:projects/core-http-compat.tgz} + resolution: {integrity: sha512-kb8AlUxGYulbQUvdsIwBApht7u8v9SiLXM/KVUgTMrZG+ik2rxLpb6O66Krfn+qgOpsrgYLz7dMfMTNjf4tC2g==, tarball: file:projects/core-http-compat.tgz} name: '@rush-temp/core-http-compat' version: 0.0.0 dependencies: @@ -13643,12 +13643,12 @@ packages: dev: false file:projects/data-tables.tgz: - resolution: {integrity: sha512-TEbNW856SR3kFwVpkaq6xq+/lScXvhz1tDQwNF6qBlgQOSMwk5VnR+R82rTsPT0G9gSoTWrnox0ZpAja5SolDA==, tarball: file:projects/data-tables.tgz} + resolution: {integrity: sha512-zFQEY/Qa2Ud1QWmhQHRwpaB4zOj4uMVUU4MMabmJn1SddUjy0ovTRWA6l6sL8gYIsx7LUdlDy49xqyhy+U0f9w==, tarball: file:projects/data-tables.tgz} name: '@rush-temp/data-tables' version: 0.0.0 dependencies: '@azure-tools/test-recorder': 1.0.2 - '@azure/core-tracing': 1.0.0-preview.13 + '@azure/core-tracing': 1.0.0-preview.14 '@microsoft/api-extractor': 7.19.4 '@types/chai': 4.3.0 '@types/mocha': 7.0.2 @@ -14958,7 +14958,7 @@ packages: dev: false file:projects/perf-data-tables.tgz: - resolution: {integrity: sha512-0HnabFIBko9eTEkMSRH34JvoRtKba6Av18Q/4bbi+k31s2M8mBVXSjIrjlwJYWHP7Y69kS6J3kbV94L7SYf6Kg==, tarball: file:projects/perf-data-tables.tgz} + resolution: {integrity: sha512-NyZJL22Y1a7ARbMZcFPMfeB0/CQbfXRZqfH0wOpq3UMd4BqMFvyUVNuBXRap2Ah7dUfh874PRqRwOf15w05bvA==, tarball: file:projects/perf-data-tables.tgz} name: '@rush-temp/perf-data-tables' version: 0.0.0 dependencies: @@ -15540,7 +15540,7 @@ packages: dev: false file:projects/search-documents.tgz: - resolution: {integrity: sha512-QeAh37wZ7x+si7DtdLlPkhtPSKALaFyEbsrVY6wM8OtZPgfJPW2/qBsO/ugOv8ru4EWbCG8ktahimx9Nghsa2w==, tarball: file:projects/search-documents.tgz} + resolution: {integrity: sha512-v95+TnIgfPJtOulZuW73xOA/OgPCA72RP5aMD0ZAlp3qJNclhxBxULu3r7TUdQVfRrPqKuJaAGCiLUCLPqFRuQ==, tarball: file:projects/search-documents.tgz} name: '@rush-temp/search-documents' version: 0.0.0 dependencies: @@ -16422,7 +16422,7 @@ packages: dev: false file:projects/testing-recorder-new.tgz: - resolution: {integrity: sha512-IzlvKcllARl3HKjtBicSvjXCawMUH1xPyU8NzW9r6UbXzre6di7K3pjVdSwgnGEPqoHLUNXb1WqAfMMkNz0rBQ==, tarball: file:projects/testing-recorder-new.tgz} + resolution: {integrity: sha512-8CmCvHXr6QPXJpZRBhREuF+RM4c5qytOZkSJ8/StQkPtJ5sNhIS2X9xg2aeNHkud3LlS6YmsvEeLKls3Jk2odQ==, tarball: file:projects/testing-recorder-new.tgz} name: '@rush-temp/testing-recorder-new' version: 0.0.0 dependencies: diff --git a/sdk/tables/data-tables/CHANGELOG.md b/sdk/tables/data-tables/CHANGELOG.md index da5be6b39231..2fb1f295d642 100644 --- a/sdk/tables/data-tables/CHANGELOG.md +++ b/sdk/tables/data-tables/CHANGELOG.md @@ -1,6 +1,6 @@ # Release History -## 13.0.2 (Unreleased) +## 13.1.0 (Unreleased) ### Features Added @@ -12,6 +12,10 @@ ### Other Changes +- Updated our `@azure/core-tracing` dependency to the latest version (1.0.0-preview.14) + - Notable changes include Removal of `@opentelemetry/api` as a transitive dependency and ensuring that the active context is properly propagated. + - Customers who would like to continue using OpenTelemetry driven tracing should visit our [OpenTelemetry Instrumentation](https://www.npmjs.com/package/@azure/opentelemetry-instrumentation-azure-sdk) package for instructions. + ## 13.0.1 (2022-01-12) ### Bugs Fixed diff --git a/sdk/tables/data-tables/package.json b/sdk/tables/data-tables/package.json index c9891f873e17..51a4f978fd82 100644 --- a/sdk/tables/data-tables/package.json +++ b/sdk/tables/data-tables/package.json @@ -1,6 +1,6 @@ { "name": "@azure/data-tables", - "version": "13.0.2", + "version": "13.1.0", "description": "An isomorphic client library for the Azure Tables service.", "sdk-type": "client", "main": "dist/index.js", @@ -81,7 +81,7 @@ "@azure/core-paging": "^1.1.1", "@azure/core-xml": "^1.0.0", "@azure/logger": "^1.0.0", - "@azure/core-tracing": "1.0.0-preview.13", + "@azure/core-tracing": "1.0.0-preview.14", "tslib": "^2.2.0", "uuid": "^8.3.0" }, @@ -144,6 +144,10 @@ { "path": "swagger/README.md", "prefix": "package-version" + }, + { + "path": "src/utils/tracing.ts", + "prefix": "packageVersion" } ] } diff --git a/sdk/tables/data-tables/recordings/browsers/tableclient_tracing/recording_should_trace_through_the_various_operations.json b/sdk/tables/data-tables/recordings/browsers/tableclient_tracing/recording_should_trace_through_the_various_operations.json new file mode 100644 index 000000000000..b9d46994abbb --- /dev/null +++ b/sdk/tables/data-tables/recordings/browsers/tableclient_tracing/recording_should_trace_through_the_various_operations.json @@ -0,0 +1,508 @@ +{ + "Entries": [ + { + "RequestUri": "https://fakeaccountname.table.core.windows.net/Tables?st=2021-08-03T08:52:15Z\u0026spr=https\u0026sig=fakesigval", + "RequestMethod": "POST", + "RequestHeaders": { + "Accept": "application/json;odata=minimalmetadata", + "Accept-Encoding": "gzip, deflate, br", + "Accept-Language": "en-US", + "Content-Length": "38", + "Content-Type": "application/json;odata=nometadata", + "dataserviceversion": "3.0", + "Referer": "http://localhost:9876/", + "sec-ch-ua": "", + "sec-ch-ua-mobile": "?0", + "sec-ch-ua-platform": "", + "Sec-Fetch-Dest": "empty", + "Sec-Fetch-Mode": "cors", + "Sec-Fetch-Site": "same-site", + "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/93.0.4577.0 Safari/537.36", + "x-ms-client-request-id": "cd21d320-ecd5-4aa9-8295-c1edbd908c61", + "x-ms-useragent": "azsdk-js-data-tables/13.0.2 core-rest-pipeline/1.5.1 OS/Linuxx86_64", + "x-ms-version": "2019-02-02" + }, + "RequestBody": { + "TableName": "tableClientTestbrowser" + }, + "StatusCode": 409, + "ResponseHeaders": { + "Cache-Control": "no-cache", + "Content-Type": "application/json; odata=minimalmetadata; streaming=true; charset=utf-8", + "Date": "Tue, 15 Feb 2022 19:59:46 GMT", + "Server": [ + "Windows-Azure-Table/1.0", + "Microsoft-HTTPAPI/2.0" + ], + "Transfer-Encoding": "chunked", + "X-Content-Type-Options": "nosniff", + "x-ms-client-request-id": "cd21d320-ecd5-4aa9-8295-c1edbd908c61", + "x-ms-request-id": "52f9a583-8002-0047-18a6-22c6c0000000", + "x-ms-version": "2019-02-02" + }, + "ResponseBody": { + "odata.error": { + "code": "TableAlreadyExists", + "message": { + "lang": "en-US", + "value": "The table specified already exists.\nRequestId:52f9a583-8002-0047-18a6-22c6c0000000\nTime:2022-02-15T19:59:47.2006288Z" + } + } + } + }, + { + "RequestUri": "https://fakeaccountname.table.core.windows.net/tableClientTestbrowser?st=2021-08-03T08:52:15Z\u0026spr=https\u0026sig=fakesigval", + "RequestMethod": "POST", + "RequestHeaders": { + "Accept": "application/json;odata=minimalmetadata", + "Accept-Encoding": "gzip, deflate, br", + "Accept-Language": "en-US", + "Content-Length": "57", + "Content-Type": "application/json;odata=nometadata", + "dataserviceversion": "3.0", + "prefer": "return-no-content", + "Referer": "http://localhost:9876/", + "sec-ch-ua": "", + "sec-ch-ua-mobile": "?0", + "sec-ch-ua-platform": "", + "Sec-Fetch-Dest": "empty", + "Sec-Fetch-Mode": "cors", + "Sec-Fetch-Site": "same-site", + "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/93.0.4577.0 Safari/537.36", + "x-ms-client-request-id": "87db0841-c40a-481c-a2d3-689fa811284f", + "x-ms-useragent": "azsdk-js-data-tables/13.0.2 core-rest-pipeline/1.5.1 OS/Linuxx86_64", + "x-ms-version": "2019-02-02" + }, + "RequestBody": { + "PartitionKey": "A\u0027aaa_bbbb2\u0022", + "RowKey": "\u0022A\u0027aaa_bbbb2" + }, + "StatusCode": 204, + "ResponseHeaders": { + "Cache-Control": "no-cache", + "Content-Length": "0", + "DataServiceId": "https://fakeaccountname.table.core.windows.net/tableClientTestbrowser(PartitionKey=\u0027A\u0027\u0027aaa_bbbb2%22\u0027,RowKey=\u0027%22A\u0027\u0027aaa_bbbb2\u0027)", + "Date": "Tue, 15 Feb 2022 19:59:46 GMT", + "ETag": "W/\u0022datetime\u00272022-02-15T19%3A59%3A47.2226169Z\u0027\u0022", + "Location": "https://fakeaccountname.table.core.windows.net/tableClientTestbrowser(PartitionKey=\u0027A\u0027\u0027aaa_bbbb2%22\u0027,RowKey=\u0027%22A\u0027\u0027aaa_bbbb2\u0027)", + "Preference-Applied": "return-no-content", + "Server": [ + "Windows-Azure-Table/1.0", + "Microsoft-HTTPAPI/2.0" + ], + "X-Content-Type-Options": "nosniff", + "x-ms-client-request-id": "87db0841-c40a-481c-a2d3-689fa811284f", + "x-ms-request-id": "52f9a584-8002-0047-19a6-22c6c0000000", + "x-ms-version": "2019-02-02" + }, + "ResponseBody": null + }, + { + "RequestUri": "https://fakeaccountname.table.core.windows.net/tableClientTestbrowser(PartitionKey=\u0027A\u0027\u0027aaa_bbbb2\u0022\u0027,RowKey=\u0027\u0022A\u0027\u0027aaa_bbbb2\u0027)?st=2021-08-03T08:52:15Z\u0026spr=https\u0026sig=fakesigval", + "RequestMethod": "PUT", + "RequestHeaders": { + "Accept": "application/json", + "Accept-Encoding": "gzip, deflate, br", + "Accept-Language": "en-US", + "Content-Length": "57", + "Content-Type": "application/json", + "dataserviceversion": "3.0", + "Referer": "http://localhost:9876/", + "sec-ch-ua": "", + "sec-ch-ua-mobile": "?0", + "sec-ch-ua-platform": "", + "Sec-Fetch-Dest": "empty", + "Sec-Fetch-Mode": "cors", + "Sec-Fetch-Site": "same-site", + "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/93.0.4577.0 Safari/537.36", + "x-ms-client-request-id": "8e2863a2-6a5f-48fb-9a7b-2fb0789c5ec1", + "x-ms-useragent": "azsdk-js-data-tables/13.0.2 core-rest-pipeline/1.5.1 OS/Linuxx86_64", + "x-ms-version": "2019-02-02" + }, + "RequestBody": { + "PartitionKey": "A\u0027aaa_bbbb2\u0022", + "RowKey": "\u0022A\u0027aaa_bbbb2" + }, + "StatusCode": 204, + "ResponseHeaders": { + "Cache-Control": "no-cache", + "Content-Length": "0", + "Date": "Tue, 15 Feb 2022 19:59:46 GMT", + "ETag": "W/\u0022datetime\u00272022-02-15T19%3A59%3A47.2454492Z\u0027\u0022", + "Server": [ + "Windows-Azure-Table/1.0", + "Microsoft-HTTPAPI/2.0" + ], + "X-Content-Type-Options": "nosniff", + "x-ms-client-request-id": "8e2863a2-6a5f-48fb-9a7b-2fb0789c5ec1", + "x-ms-request-id": "52f9a585-8002-0047-1aa6-22c6c0000000", + "x-ms-version": "2019-02-02" + }, + "ResponseBody": null + }, + { + "RequestUri": "https://fakeaccountname.table.core.windows.net/tableClientTestbrowser(PartitionKey=\u0027A\u0027\u0027aaa_bbbb2\u0022\u0027,RowKey=\u0027\u0022A\u0027\u0027aaa_bbbb2\u0027)?st=2021-08-03T08:52:15Z\u0026spr=https\u0026sig=fakesigval", + "RequestMethod": "GET", + "RequestHeaders": { + "Accept": "application/json;odata=minimalmetadata", + "Accept-Encoding": "gzip, deflate, br", + "Accept-Language": "en-US", + "dataserviceversion": "3.0", + "Referer": "http://localhost:9876/", + "sec-ch-ua": "", + "sec-ch-ua-mobile": "?0", + "sec-ch-ua-platform": "", + "Sec-Fetch-Dest": "empty", + "Sec-Fetch-Mode": "cors", + "Sec-Fetch-Site": "same-site", + "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/93.0.4577.0 Safari/537.36", + "x-ms-client-request-id": "23c824fb-2da3-4350-9474-4236d022e632", + "x-ms-useragent": "azsdk-js-data-tables/13.0.2 core-rest-pipeline/1.5.1 OS/Linuxx86_64", + "x-ms-version": "2019-02-02" + }, + "RequestBody": null, + "StatusCode": 200, + "ResponseHeaders": { + "Access-Control-Allow-Origin": "*", + "Access-Control-Expose-Headers": "x-ms-request-id,x-ms-client-request-id,Server,x-ms-version,X-Content-Type-Options,Cache-Control,ETag,Content-Type,Content-Length,Date,Transfer-Encoding", + "Cache-Control": "no-cache", + "Content-Type": "application/json; odata=minimalmetadata; streaming=true; charset=utf-8", + "Date": "Tue, 15 Feb 2022 19:59:46 GMT", + "ETag": "W/\u0022datetime\u00272022-02-15T19%3A59%3A47.2454492Z\u0027\u0022", + "Server": [ + "Windows-Azure-Table/1.0", + "Microsoft-HTTPAPI/2.0" + ], + "Transfer-Encoding": "chunked", + "X-Content-Type-Options": "nosniff", + "x-ms-client-request-id": "23c824fb-2da3-4350-9474-4236d022e632", + "x-ms-request-id": "52f9a586-8002-0047-1ba6-22c6c0000000", + "x-ms-version": "2019-02-02" + }, + "ResponseBody": { + "odata.metadata": "https://fakeaccountname.table.core.windows.net/$metadata#tableClientTestbrowser/@Element", + "odata.etag": "W/\u0022datetime\u00272022-02-15T19%3A59%3A47.2454492Z\u0027\u0022", + "PartitionKey": "A\u0027aaa_bbbb2\u0022", + "RowKey": "\u0022A\u0027aaa_bbbb2", + "Timestamp": "2022-02-15T19:59:47.2454492Z" + } + }, + { + "RequestUri": "https://fakeaccountname.table.core.windows.net/tableClientTestbrowser(PartitionKey=\u0027A\u0027\u0027aaa_bbbb2\u0022\u0027,RowKey=\u0027\u0022A\u0027\u0027aaa_bbbb2\u0027)?st=2021-08-03T08:52:15Z\u0026spr=https\u0026sig=fakesigval", + "RequestMethod": "PUT", + "RequestHeaders": { + "Accept": "application/json", + "Accept-Encoding": "gzip, deflate, br", + "Accept-Language": "en-US", + "Content-Length": "57", + "Content-Type": "application/json", + "dataserviceversion": "3.0", + "If-Match": "*", + "Referer": "http://localhost:9876/", + "sec-ch-ua": "", + "sec-ch-ua-mobile": "?0", + "sec-ch-ua-platform": "", + "Sec-Fetch-Dest": "empty", + "Sec-Fetch-Mode": "cors", + "Sec-Fetch-Site": "same-site", + "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/93.0.4577.0 Safari/537.36", + "x-ms-client-request-id": "22a757aa-77d2-4838-88bc-a6433e23cab7", + "x-ms-useragent": "azsdk-js-data-tables/13.0.2 core-rest-pipeline/1.5.1 OS/Linuxx86_64", + "x-ms-version": "2019-02-02" + }, + "RequestBody": { + "PartitionKey": "A\u0027aaa_bbbb2\u0022", + "RowKey": "\u0022A\u0027aaa_bbbb2" + }, + "StatusCode": 204, + "ResponseHeaders": { + "Cache-Control": "no-cache", + "Content-Length": "0", + "Date": "Tue, 15 Feb 2022 19:59:46 GMT", + "ETag": "W/\u0022datetime\u00272022-02-15T19%3A59%3A47.2804302Z\u0027\u0022", + "Server": [ + "Windows-Azure-Table/1.0", + "Microsoft-HTTPAPI/2.0" + ], + "X-Content-Type-Options": "nosniff", + "x-ms-client-request-id": "22a757aa-77d2-4838-88bc-a6433e23cab7", + "x-ms-request-id": "52f9a587-8002-0047-1ca6-22c6c0000000", + "x-ms-version": "2019-02-02" + }, + "ResponseBody": null + }, + { + "RequestUri": "https://fakeaccountname.table.core.windows.net/tableClientTestbrowser()?st=2021-08-03T08:52:15Z\u0026spr=https\u0026sig=fakesigval", + "RequestMethod": "GET", + "RequestHeaders": { + "Accept": "application/json;odata=minimalmetadata", + "Accept-Encoding": "gzip, deflate, br", + "Accept-Language": "en-US", + "dataserviceversion": "3.0", + "Referer": "http://localhost:9876/", + "sec-ch-ua": "", + "sec-ch-ua-mobile": "?0", + "sec-ch-ua-platform": "", + "Sec-Fetch-Dest": "empty", + "Sec-Fetch-Mode": "cors", + "Sec-Fetch-Site": "same-site", + "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/93.0.4577.0 Safari/537.36", + "x-ms-client-request-id": "22422e0f-ccf9-4c4e-9ef0-d8acfd83647d", + "x-ms-useragent": "azsdk-js-data-tables/13.0.2 core-rest-pipeline/1.5.1 OS/Linuxx86_64", + "x-ms-version": "2019-02-02" + }, + "RequestBody": null, + "StatusCode": 200, + "ResponseHeaders": { + "Access-Control-Allow-Origin": "*", + "Access-Control-Expose-Headers": "x-ms-request-id,x-ms-client-request-id,Server,x-ms-version,X-Content-Type-Options,Cache-Control,Content-Type,Content-Length,Date,Transfer-Encoding", + "Cache-Control": "no-cache", + "Content-Type": "application/json; odata=minimalmetadata; streaming=true; charset=utf-8", + "Date": "Tue, 15 Feb 2022 19:59:46 GMT", + "Server": [ + "Windows-Azure-Table/1.0", + "Microsoft-HTTPAPI/2.0" + ], + "Transfer-Encoding": "chunked", + "X-Content-Type-Options": "nosniff", + "x-ms-client-request-id": "22422e0f-ccf9-4c4e-9ef0-d8acfd83647d", + "x-ms-request-id": "52f9a588-8002-0047-1da6-22c6c0000000", + "x-ms-version": "2019-02-02" + }, + "ResponseBody": { + "odata.metadata": "https://fakeaccountname.table.core.windows.net/$metadata#tableClientTestbrowser", + "value": [ + { + "odata.etag": "W/\u0022datetime\u00272022-02-15T19%3A59%3A47.2804302Z\u0027\u0022", + "PartitionKey": "A\u0027aaa_bbbb2\u0022", + "RowKey": "\u0022A\u0027aaa_bbbb2", + "Timestamp": "2022-02-15T19:59:47.2804302Z" + }, + { + "odata.etag": "W/\u0022datetime\u00272022-02-15T19%3A59%3A46.4184498Z\u0027\u0022", + "PartitionKey": "listEntitiesTest", + "RowKey": "0", + "Timestamp": "2022-02-15T19:59:46.4184498Z", + "foo": "testEntity" + }, + { + "odata.etag": "W/\u0022datetime\u00272022-02-15T19%3A59%3A46.4344404Z\u0027\u0022", + "PartitionKey": "listEntitiesTest", + "RowKey": "1", + "Timestamp": "2022-02-15T19:59:46.4344404Z", + "foo": "testEntity" + }, + { + "odata.etag": "W/\u0022datetime\u00272022-02-15T19%3A59%3A46.6063417Z\u0027\u0022", + "PartitionKey": "listEntitiesTest", + "RowKey": "10", + "Timestamp": "2022-02-15T19:59:46.6063417Z", + "foo": "testEntity" + }, + { + "odata.etag": "W/\u0022datetime\u00272022-02-15T19%3A59%3A46.6213332Z\u0027\u0022", + "PartitionKey": "listEntitiesTest", + "RowKey": "11", + "Timestamp": "2022-02-15T19:59:46.6213332Z", + "foo": "testEntity" + }, + { + "odata.etag": "W/\u0022datetime\u00272022-02-15T19%3A59%3A46.6413215Z\u0027\u0022", + "PartitionKey": "listEntitiesTest", + "RowKey": "12", + "Timestamp": "2022-02-15T19:59:46.6413215Z", + "foo": "testEntity" + }, + { + "odata.etag": "W/\u0022datetime\u00272022-02-15T19%3A59%3A46.6653081Z\u0027\u0022", + "PartitionKey": "listEntitiesTest", + "RowKey": "13", + "Timestamp": "2022-02-15T19:59:46.6653081Z", + "foo": "testEntity" + }, + { + "odata.etag": "W/\u0022datetime\u00272022-02-15T19%3A59%3A46.7022868Z\u0027\u0022", + "PartitionKey": "listEntitiesTest", + "RowKey": "14", + "Timestamp": "2022-02-15T19:59:46.7022868Z", + "foo": "testEntity" + }, + { + "odata.etag": "W/\u0022datetime\u00272022-02-15T19%3A59%3A46.7202776Z\u0027\u0022", + "PartitionKey": "listEntitiesTest", + "RowKey": "15", + "Timestamp": "2022-02-15T19:59:46.7202776Z", + "foo": "testEntity" + }, + { + "odata.etag": "W/\u0022datetime\u00272022-02-15T19%3A59%3A46.738266Z\u0027\u0022", + "PartitionKey": "listEntitiesTest", + "RowKey": "16", + "Timestamp": "2022-02-15T19:59:46.738266Z", + "foo": "testEntity" + }, + { + "odata.etag": "W/\u0022datetime\u00272022-02-15T19%3A59%3A46.7572565Z\u0027\u0022", + "PartitionKey": "listEntitiesTest", + "RowKey": "17", + "Timestamp": "2022-02-15T19:59:46.7572565Z", + "foo": "testEntity" + }, + { + "odata.etag": "W/\u0022datetime\u00272022-02-15T19%3A59%3A46.7742461Z\u0027\u0022", + "PartitionKey": "listEntitiesTest", + "RowKey": "18", + "Timestamp": "2022-02-15T19:59:46.7742461Z", + "foo": "testEntity" + }, + { + "odata.etag": "W/\u0022datetime\u00272022-02-15T19%3A59%3A46.7932356Z\u0027\u0022", + "PartitionKey": "listEntitiesTest", + "RowKey": "19", + "Timestamp": "2022-02-15T19:59:46.7932356Z", + "foo": "testEntity" + }, + { + "odata.etag": "W/\u0022datetime\u00272022-02-15T19%3A59%3A46.4504315Z\u0027\u0022", + "PartitionKey": "listEntitiesTest", + "RowKey": "2", + "Timestamp": "2022-02-15T19:59:46.4504315Z", + "foo": "testEntity" + }, + { + "odata.etag": "W/\u0022datetime\u00272022-02-15T19%3A59%3A46.4724185Z\u0027\u0022", + "PartitionKey": "listEntitiesTest", + "RowKey": "3", + "Timestamp": "2022-02-15T19:59:46.4724185Z", + "foo": "testEntity" + }, + { + "odata.etag": "W/\u0022datetime\u00272022-02-15T19%3A59%3A46.4874092Z\u0027\u0022", + "PartitionKey": "listEntitiesTest", + "RowKey": "4", + "Timestamp": "2022-02-15T19:59:46.4874092Z", + "foo": "testEntity" + }, + { + "odata.etag": "W/\u0022datetime\u00272022-02-15T19%3A59%3A46.5044001Z\u0027\u0022", + "PartitionKey": "listEntitiesTest", + "RowKey": "5", + "Timestamp": "2022-02-15T19:59:46.5044001Z", + "foo": "testEntity" + }, + { + "odata.etag": "W/\u0022datetime\u00272022-02-15T19%3A59%3A46.5193919Z\u0027\u0022", + "PartitionKey": "listEntitiesTest", + "RowKey": "6", + "Timestamp": "2022-02-15T19:59:46.5193919Z", + "foo": "testEntity" + }, + { + "odata.etag": "W/\u0022datetime\u00272022-02-15T19%3A59%3A46.5513733Z\u0027\u0022", + "PartitionKey": "listEntitiesTest", + "RowKey": "7", + "Timestamp": "2022-02-15T19:59:46.5513733Z", + "foo": "testEntity" + }, + { + "odata.etag": "W/\u0022datetime\u00272022-02-15T19%3A59%3A46.567364Z\u0027\u0022", + "PartitionKey": "listEntitiesTest", + "RowKey": "8", + "Timestamp": "2022-02-15T19:59:46.567364Z", + "foo": "testEntity" + }, + { + "odata.etag": "W/\u0022datetime\u00272022-02-15T19%3A59%3A46.5883527Z\u0027\u0022", + "PartitionKey": "listEntitiesTest", + "RowKey": "9", + "Timestamp": "2022-02-15T19:59:46.5883527Z", + "foo": "testEntity" + }, + { + "odata.etag": "W/\u0022datetime\u00272022-02-15T19%3A59%3A46.3984612Z\u0027\u0022", + "PartitionKey": "listEntitiesTest", + "RowKey": "binary1", + "Timestamp": "2022-02-15T19:59:46.3984612Z", + "foo@odata.type": "Edm.Binary", + "foo": "QmFy" + } + ] + } + }, + { + "RequestUri": "https://fakeaccountname.table.core.windows.net/tableClientTestbrowser(PartitionKey=\u0027A\u0027\u0027aaa_bbbb2\u0022\u0027,RowKey=\u0027\u0022A\u0027\u0027aaa_bbbb2\u0027)?st=2021-08-03T08:52:15Z\u0026spr=https\u0026sig=fakesigval", + "RequestMethod": "DELETE", + "RequestHeaders": { + "Accept": "application/json;odata=minimalmetadata", + "Accept-Encoding": "gzip, deflate, br", + "Accept-Language": "en-US", + "dataserviceversion": "3.0", + "If-Match": "*", + "Referer": "http://localhost:9876/", + "sec-ch-ua": "", + "sec-ch-ua-mobile": "?0", + "sec-ch-ua-platform": "", + "Sec-Fetch-Dest": "empty", + "Sec-Fetch-Mode": "cors", + "Sec-Fetch-Site": "same-site", + "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/93.0.4577.0 Safari/537.36", + "x-ms-client-request-id": "d8f11063-eb3b-4885-a8a8-d0793cf266dc", + "x-ms-useragent": "azsdk-js-data-tables/13.0.2 core-rest-pipeline/1.5.1 OS/Linuxx86_64", + "x-ms-version": "2019-02-02" + }, + "RequestBody": null, + "StatusCode": 204, + "ResponseHeaders": { + "Cache-Control": "no-cache", + "Content-Length": "0", + "Date": "Tue, 15 Feb 2022 19:59:46 GMT", + "Server": [ + "Windows-Azure-Table/1.0", + "Microsoft-HTTPAPI/2.0" + ], + "X-Content-Type-Options": "nosniff", + "x-ms-client-request-id": "d8f11063-eb3b-4885-a8a8-d0793cf266dc", + "x-ms-request-id": "52f9a589-8002-0047-1ea6-22c6c0000000", + "x-ms-version": "2019-02-02" + }, + "ResponseBody": null + }, + { + "RequestUri": "https://fakeaccountname.table.core.windows.net/Tables(\u0027tableClientTestbrowser\u0027)?st=2021-08-03T08:52:15Z\u0026spr=https\u0026sig=fakesigval", + "RequestMethod": "DELETE", + "RequestHeaders": { + "Accept": "application/json", + "Accept-Encoding": "gzip, deflate, br", + "Accept-Language": "en-US", + "Referer": "http://localhost:9876/", + "sec-ch-ua": "", + "sec-ch-ua-mobile": "?0", + "sec-ch-ua-platform": "", + "Sec-Fetch-Dest": "empty", + "Sec-Fetch-Mode": "cors", + "Sec-Fetch-Site": "same-site", + "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/93.0.4577.0 Safari/537.36", + "x-ms-client-request-id": "98e604b0-2c5d-481f-b1a7-109622898b2b", + "x-ms-useragent": "azsdk-js-data-tables/13.0.2 core-rest-pipeline/1.5.1 OS/Linuxx86_64", + "x-ms-version": "2019-02-02" + }, + "RequestBody": null, + "StatusCode": 204, + "ResponseHeaders": { + "Cache-Control": "no-cache", + "Content-Length": "0", + "Date": "Tue, 15 Feb 2022 19:59:46 GMT", + "Server": [ + "Windows-Azure-Table/1.0", + "Microsoft-HTTPAPI/2.0" + ], + "X-Content-Type-Options": "nosniff", + "x-ms-client-request-id": "98e604b0-2c5d-481f-b1a7-109622898b2b", + "x-ms-request-id": "52f9a58a-8002-0047-1fa6-22c6c0000000", + "x-ms-version": "2019-02-02" + }, + "ResponseBody": null + } + ], + "Variables": {} +} diff --git a/sdk/tables/data-tables/recordings/browsers/tableserviceclient_tracing/recording_should_trace_through_the_various_operations.json b/sdk/tables/data-tables/recordings/browsers/tableserviceclient_tracing/recording_should_trace_through_the_various_operations.json new file mode 100644 index 000000000000..e936ffdfac45 --- /dev/null +++ b/sdk/tables/data-tables/recordings/browsers/tableserviceclient_tracing/recording_should_trace_through_the_various_operations.json @@ -0,0 +1,124 @@ +{ + "Entries": [ + { + "RequestUri": "https://fakeaccountname.table.core.windows.net/Tables?st=2021-08-03T08:52:15Z\u0026spr=https\u0026sig=fakesigval", + "RequestMethod": "POST", + "RequestHeaders": { + "Accept": "application/json;odata=minimalmetadata", + "Accept-Encoding": "gzip, deflate, br", + "Accept-Language": "en-US", + "Content-Length": "34", + "Content-Type": "application/json;odata=nometadata", + "dataserviceversion": "3.0", + "Referer": "http://localhost:9876/", + "sec-ch-ua": "", + "sec-ch-ua-mobile": "?0", + "sec-ch-ua-platform": "", + "Sec-Fetch-Dest": "empty", + "Sec-Fetch-Mode": "cors", + "Sec-Fetch-Site": "same-site", + "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/93.0.4577.0 Safari/537.36", + "x-ms-client-request-id": "0350588b-51e1-46ec-8121-84190e90b949", + "x-ms-useragent": "azsdk-js-data-tables/13.0.2 core-rest-pipeline/1.5.1 OS/Linuxx86_64", + "x-ms-version": "2019-02-02" + }, + "RequestBody": { + "TableName": "testTracingbrowser" + }, + "StatusCode": 201, + "ResponseHeaders": { + "Cache-Control": "no-cache", + "Content-Type": "application/json; odata=minimalmetadata; streaming=true; charset=utf-8", + "Date": "Tue, 15 Feb 2022 21:56:16 GMT", + "Location": "https://fakeaccountname.table.core.windows.net/Tables(\u0027testTracingbrowser\u0027)", + "Server": [ + "Windows-Azure-Table/1.0", + "Microsoft-HTTPAPI/2.0" + ], + "Transfer-Encoding": "chunked", + "X-Content-Type-Options": "nosniff", + "x-ms-client-request-id": "0350588b-51e1-46ec-8121-84190e90b949", + "x-ms-request-id": "749d3b01-3002-0003-10b6-220911000000", + "x-ms-version": "2019-02-02" + }, + "ResponseBody": { + "odata.metadata": "https://fakeaccountname.table.core.windows.net/$metadata#Tables/@Element", + "TableName": "testTracingbrowser" + } + }, + { + "RequestUri": "https://fakeaccountname.table.core.windows.net/?st=2021-08-03T08:52:15Z\u0026spr=https\u0026sig=fakesigval\u0026restype=service\u0026comp=properties", + "RequestMethod": "GET", + "RequestHeaders": { + "Accept": "application/xml", + "Accept-Encoding": "gzip, deflate, br", + "Accept-Language": "en-US", + "Referer": "http://localhost:9876/", + "sec-ch-ua": "", + "sec-ch-ua-mobile": "?0", + "sec-ch-ua-platform": "", + "Sec-Fetch-Dest": "empty", + "Sec-Fetch-Mode": "cors", + "Sec-Fetch-Site": "same-site", + "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/93.0.4577.0 Safari/537.36", + "x-ms-client-request-id": "8dd95fd3-e5d7-4e62-ab6a-29f44eab9968", + "x-ms-useragent": "azsdk-js-data-tables/13.0.2 core-rest-pipeline/1.5.1 OS/Linuxx86_64", + "x-ms-version": "2019-02-02" + }, + "RequestBody": null, + "StatusCode": 200, + "ResponseHeaders": { + "Access-Control-Allow-Origin": "*", + "Access-Control-Expose-Headers": "x-ms-request-id,x-ms-client-request-id,Server,x-ms-version,Content-Length,Date,Transfer-Encoding", + "Content-Type": "application/xml", + "Date": "Tue, 15 Feb 2022 21:56:16 GMT", + "Server": [ + "Windows-Azure-Table/1.0", + "Microsoft-HTTPAPI/2.0" + ], + "Transfer-Encoding": "chunked", + "x-ms-client-request-id": "8dd95fd3-e5d7-4e62-ab6a-29f44eab9968", + "x-ms-request-id": "749d3b0f-3002-0003-1cb6-220911000000", + "x-ms-version": "2019-02-02" + }, + "ResponseBody": "\uFEFF\u003C?xml version=\u00221.0\u0022 encoding=\u0022utf-8\u0022?\u003E\u003CStorageServiceProperties\u003E\u003CLogging\u003E\u003CVersion\u003E1.0\u003C/Version\u003E\u003CRead\u003Efalse\u003C/Read\u003E\u003CWrite\u003Efalse\u003C/Write\u003E\u003CDelete\u003Efalse\u003C/Delete\u003E\u003CRetentionPolicy\u003E\u003CEnabled\u003Efalse\u003C/Enabled\u003E\u003C/RetentionPolicy\u003E\u003C/Logging\u003E\u003CHourMetrics\u003E\u003CVersion\u003E1.0\u003C/Version\u003E\u003CEnabled\u003Etrue\u003C/Enabled\u003E\u003CIncludeAPIs\u003Etrue\u003C/IncludeAPIs\u003E\u003CRetentionPolicy\u003E\u003CEnabled\u003Etrue\u003C/Enabled\u003E\u003CDays\u003E7\u003C/Days\u003E\u003C/RetentionPolicy\u003E\u003C/HourMetrics\u003E\u003CMinuteMetrics\u003E\u003CVersion\u003E1.0\u003C/Version\u003E\u003CEnabled\u003Efalse\u003C/Enabled\u003E\u003CRetentionPolicy\u003E\u003CEnabled\u003Efalse\u003C/Enabled\u003E\u003C/RetentionPolicy\u003E\u003C/MinuteMetrics\u003E\u003CCors\u003E\u003CCorsRule\u003E\u003CAllowedMethods\u003EGET,HEAD,POST,PUT,DELETE,OPTIONS,MERGE\u003C/AllowedMethods\u003E\u003CAllowedOrigins\u003E*\u003C/AllowedOrigins\u003E\u003CAllowedHeaders\u003E*\u003C/AllowedHeaders\u003E\u003CExposedHeaders\u003E*\u003C/ExposedHeaders\u003E\u003CMaxAgeInSeconds\u003E86400\u003C/MaxAgeInSeconds\u003E\u003C/CorsRule\u003E\u003C/Cors\u003E\u003C/StorageServiceProperties\u003E" + }, + { + "RequestUri": "https://fakeaccountname.table.core.windows.net/Tables(\u0027testTracingbrowser\u0027)?st=2021-08-03T08:52:15Z\u0026spr=https\u0026sig=fakesigval", + "RequestMethod": "DELETE", + "RequestHeaders": { + "Accept": "application/json", + "Accept-Encoding": "gzip, deflate, br", + "Accept-Language": "en-US", + "Referer": "http://localhost:9876/", + "sec-ch-ua": "", + "sec-ch-ua-mobile": "?0", + "sec-ch-ua-platform": "", + "Sec-Fetch-Dest": "empty", + "Sec-Fetch-Mode": "cors", + "Sec-Fetch-Site": "same-site", + "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/93.0.4577.0 Safari/537.36", + "x-ms-client-request-id": "190d4696-5219-4163-8dfb-4732e40c4a8a", + "x-ms-useragent": "azsdk-js-data-tables/13.0.2 core-rest-pipeline/1.5.1 OS/Linuxx86_64", + "x-ms-version": "2019-02-02" + }, + "RequestBody": null, + "StatusCode": 204, + "ResponseHeaders": { + "Cache-Control": "no-cache", + "Content-Length": "0", + "Date": "Tue, 15 Feb 2022 21:56:16 GMT", + "Server": [ + "Windows-Azure-Table/1.0", + "Microsoft-HTTPAPI/2.0" + ], + "X-Content-Type-Options": "nosniff", + "x-ms-client-request-id": "190d4696-5219-4163-8dfb-4732e40c4a8a", + "x-ms-request-id": "749d3b13-3002-0003-20b6-220911000000", + "x-ms-version": "2019-02-02" + }, + "ResponseBody": null + } + ], + "Variables": {} +} diff --git a/sdk/tables/data-tables/recordings/node/tableclient_tracing/recording_should_trace_through_the_various_operations.json b/sdk/tables/data-tables/recordings/node/tableclient_tracing/recording_should_trace_through_the_various_operations.json new file mode 100644 index 000000000000..9f2ab05a419c --- /dev/null +++ b/sdk/tables/data-tables/recordings/node/tableclient_tracing/recording_should_trace_through_the_various_operations.json @@ -0,0 +1,436 @@ +{ + "Entries": [ + { + "RequestUri": "https://fakeaccountname.table.core.windows.net/Tables?st=2021-08-03T08:52:15Z\u0026spr=https\u0026sig=fakesigval", + "RequestMethod": "POST", + "RequestHeaders": { + "Accept": "application/json;odata=minimalmetadata", + "Accept-Encoding": "gzip,deflate", + "Content-Length": "35", + "Content-Type": "application/json;odata=nometadata", + "DataServiceVersion": "3.0", + "User-Agent": "azsdk-js-data-tables/13.0.2 core-rest-pipeline/1.5.1 Node/v16.13.1 OS/(x64-Linux-5.10.60.1-microsoft-standard-WSL2)", + "x-ms-client-request-id": "63b2609b-010a-44c5-94c9-c35a69be791a", + "x-ms-version": "2019-02-02" + }, + "RequestBody": { + "TableName": "tableClientTestnode" + }, + "StatusCode": 409, + "ResponseHeaders": { + "Cache-Control": "no-cache", + "Content-Type": "application/json; odata=minimalmetadata; streaming=true; charset=utf-8", + "Date": "Tue, 15 Feb 2022 19:59:36 GMT", + "Server": [ + "Windows-Azure-Table/1.0", + "Microsoft-HTTPAPI/2.0" + ], + "Transfer-Encoding": "chunked", + "X-Content-Type-Options": "nosniff", + "x-ms-client-request-id": "63b2609b-010a-44c5-94c9-c35a69be791a", + "x-ms-request-id": "d5cbe88e-5002-006b-0ca6-222a6f000000", + "x-ms-version": "2019-02-02" + }, + "ResponseBody": { + "odata.error": { + "code": "TableAlreadyExists", + "message": { + "lang": "en-US", + "value": "The table specified already exists.\nRequestId:d5cbe88e-5002-006b-0ca6-222a6f000000\nTime:2022-02-15T19:59:37.2689650Z" + } + } + } + }, + { + "RequestUri": "https://fakeaccountname.table.core.windows.net/tableClientTestnode?st=2021-08-03T08:52:15Z\u0026spr=https\u0026sig=fakesigval", + "RequestMethod": "POST", + "RequestHeaders": { + "Accept": "application/json;odata=minimalmetadata", + "Accept-Encoding": "gzip,deflate", + "Content-Length": "57", + "Content-Type": "application/json;odata=nometadata", + "DataServiceVersion": "3.0", + "Prefer": "return-no-content", + "User-Agent": "azsdk-js-data-tables/13.0.2 core-rest-pipeline/1.5.1 Node/v16.13.1 OS/(x64-Linux-5.10.60.1-microsoft-standard-WSL2)", + "x-ms-client-request-id": "1b1e116c-a431-47da-976c-ddea24f474e2", + "x-ms-version": "2019-02-02" + }, + "RequestBody": { + "PartitionKey": "A\u0027aaa_bbbb2\u0022", + "RowKey": "\u0022A\u0027aaa_bbbb2" + }, + "StatusCode": 204, + "ResponseHeaders": { + "Cache-Control": "no-cache", + "Content-Length": "0", + "DataServiceId": "https://fakeaccountname.table.core.windows.net/tableClientTestnode(PartitionKey=\u0027A\u0027\u0027aaa_bbbb2%22\u0027,RowKey=\u0027%22A\u0027\u0027aaa_bbbb2\u0027)", + "Date": "Tue, 15 Feb 2022 19:59:36 GMT", + "ETag": "W/\u0022datetime\u00272022-02-15T19%3A59%3A37.285955Z\u0027\u0022", + "Location": "https://fakeaccountname.table.core.windows.net/tableClientTestnode(PartitionKey=\u0027A\u0027\u0027aaa_bbbb2%22\u0027,RowKey=\u0027%22A\u0027\u0027aaa_bbbb2\u0027)", + "Preference-Applied": "return-no-content", + "Server": [ + "Windows-Azure-Table/1.0", + "Microsoft-HTTPAPI/2.0" + ], + "X-Content-Type-Options": "nosniff", + "x-ms-client-request-id": "1b1e116c-a431-47da-976c-ddea24f474e2", + "x-ms-request-id": "d5cbe88f-5002-006b-0da6-222a6f000000", + "x-ms-version": "2019-02-02" + }, + "ResponseBody": null + }, + { + "RequestUri": "https://fakeaccountname.table.core.windows.net/tableClientTestnode(PartitionKey=\u0027A\u0027\u0027aaa_bbbb2\u0022\u0027,RowKey=\u0027\u0022A\u0027\u0027aaa_bbbb2\u0027)?st=2021-08-03T08:52:15Z\u0026spr=https\u0026sig=fakesigval", + "RequestMethod": "PUT", + "RequestHeaders": { + "Accept": "application/json", + "Accept-Encoding": "gzip,deflate", + "Content-Length": "57", + "Content-Type": "application/json", + "DataServiceVersion": "3.0", + "User-Agent": "azsdk-js-data-tables/13.0.2 core-rest-pipeline/1.5.1 Node/v16.13.1 OS/(x64-Linux-5.10.60.1-microsoft-standard-WSL2)", + "x-ms-client-request-id": "3e95a9d1-2d55-423d-81c7-232604182de5", + "x-ms-version": "2019-02-02" + }, + "RequestBody": { + "PartitionKey": "A\u0027aaa_bbbb2\u0022", + "RowKey": "\u0022A\u0027aaa_bbbb2" + }, + "StatusCode": 204, + "ResponseHeaders": { + "Cache-Control": "no-cache", + "Content-Length": "0", + "Date": "Tue, 15 Feb 2022 19:59:36 GMT", + "ETag": "W/\u0022datetime\u00272022-02-15T19%3A59%3A37.3038114Z\u0027\u0022", + "Server": [ + "Windows-Azure-Table/1.0", + "Microsoft-HTTPAPI/2.0" + ], + "X-Content-Type-Options": "nosniff", + "x-ms-client-request-id": "3e95a9d1-2d55-423d-81c7-232604182de5", + "x-ms-request-id": "d5cbe890-5002-006b-0ea6-222a6f000000", + "x-ms-version": "2019-02-02" + }, + "ResponseBody": null + }, + { + "RequestUri": "https://fakeaccountname.table.core.windows.net/tableClientTestnode(PartitionKey=\u0027A\u0027\u0027aaa_bbbb2\u0022\u0027,RowKey=\u0027\u0022A\u0027\u0027aaa_bbbb2\u0027)?st=2021-08-03T08:52:15Z\u0026spr=https\u0026sig=fakesigval", + "RequestMethod": "GET", + "RequestHeaders": { + "Accept": "application/json;odata=minimalmetadata", + "Accept-Encoding": "gzip,deflate", + "DataServiceVersion": "3.0", + "User-Agent": "azsdk-js-data-tables/13.0.2 core-rest-pipeline/1.5.1 Node/v16.13.1 OS/(x64-Linux-5.10.60.1-microsoft-standard-WSL2)", + "x-ms-client-request-id": "bc89744c-44ba-4240-8c85-60bf964bddf4", + "x-ms-version": "2019-02-02" + }, + "RequestBody": null, + "StatusCode": 200, + "ResponseHeaders": { + "Access-Control-Allow-Origin": "*", + "Access-Control-Expose-Headers": "x-ms-request-id,x-ms-client-request-id,Server,x-ms-version,X-Content-Type-Options,Cache-Control,ETag,Content-Type,Content-Length,Date,Transfer-Encoding", + "Cache-Control": "no-cache", + "Content-Type": "application/json; odata=minimalmetadata; streaming=true; charset=utf-8", + "Date": "Tue, 15 Feb 2022 19:59:36 GMT", + "ETag": "W/\u0022datetime\u00272022-02-15T19%3A59%3A37.3038114Z\u0027\u0022", + "Server": [ + "Windows-Azure-Table/1.0", + "Microsoft-HTTPAPI/2.0" + ], + "Transfer-Encoding": "chunked", + "X-Content-Type-Options": "nosniff", + "x-ms-client-request-id": "bc89744c-44ba-4240-8c85-60bf964bddf4", + "x-ms-request-id": "d5cbe891-5002-006b-0fa6-222a6f000000", + "x-ms-version": "2019-02-02" + }, + "ResponseBody": { + "odata.metadata": "https://fakeaccountname.table.core.windows.net/$metadata#tableClientTestnode/@Element", + "odata.etag": "W/\u0022datetime\u00272022-02-15T19%3A59%3A37.3038114Z\u0027\u0022", + "PartitionKey": "A\u0027aaa_bbbb2\u0022", + "RowKey": "\u0022A\u0027aaa_bbbb2", + "Timestamp": "2022-02-15T19:59:37.3038114Z" + } + }, + { + "RequestUri": "https://fakeaccountname.table.core.windows.net/tableClientTestnode(PartitionKey=\u0027A\u0027\u0027aaa_bbbb2\u0022\u0027,RowKey=\u0027\u0022A\u0027\u0027aaa_bbbb2\u0027)?st=2021-08-03T08:52:15Z\u0026spr=https\u0026sig=fakesigval", + "RequestMethod": "PUT", + "RequestHeaders": { + "Accept": "application/json", + "Accept-Encoding": "gzip,deflate", + "Content-Length": "57", + "Content-Type": "application/json", + "DataServiceVersion": "3.0", + "If-Match": "*", + "User-Agent": "azsdk-js-data-tables/13.0.2 core-rest-pipeline/1.5.1 Node/v16.13.1 OS/(x64-Linux-5.10.60.1-microsoft-standard-WSL2)", + "x-ms-client-request-id": "afe3ae94-178f-4987-a985-cf060ac1bd11", + "x-ms-version": "2019-02-02" + }, + "RequestBody": { + "PartitionKey": "A\u0027aaa_bbbb2\u0022", + "RowKey": "\u0022A\u0027aaa_bbbb2" + }, + "StatusCode": 204, + "ResponseHeaders": { + "Cache-Control": "no-cache", + "Content-Length": "0", + "Date": "Tue, 15 Feb 2022 19:59:36 GMT", + "ETag": "W/\u0022datetime\u00272022-02-15T19%3A59%3A37.3427907Z\u0027\u0022", + "Server": [ + "Windows-Azure-Table/1.0", + "Microsoft-HTTPAPI/2.0" + ], + "X-Content-Type-Options": "nosniff", + "x-ms-client-request-id": "afe3ae94-178f-4987-a985-cf060ac1bd11", + "x-ms-request-id": "d5cbe892-5002-006b-10a6-222a6f000000", + "x-ms-version": "2019-02-02" + }, + "ResponseBody": null + }, + { + "RequestUri": "https://fakeaccountname.table.core.windows.net/tableClientTestnode()?st=2021-08-03T08:52:15Z\u0026spr=https\u0026sig=fakesigval", + "RequestMethod": "GET", + "RequestHeaders": { + "Accept": "application/json;odata=minimalmetadata", + "Accept-Encoding": "gzip,deflate", + "DataServiceVersion": "3.0", + "User-Agent": "azsdk-js-data-tables/13.0.2 core-rest-pipeline/1.5.1 Node/v16.13.1 OS/(x64-Linux-5.10.60.1-microsoft-standard-WSL2)", + "x-ms-client-request-id": "b7d006c3-8425-46d2-a9ac-09023988113b", + "x-ms-version": "2019-02-02" + }, + "RequestBody": null, + "StatusCode": 200, + "ResponseHeaders": { + "Access-Control-Allow-Origin": "*", + "Access-Control-Expose-Headers": "x-ms-request-id,x-ms-client-request-id,Server,x-ms-version,X-Content-Type-Options,Cache-Control,Content-Type,Content-Length,Date,Transfer-Encoding", + "Cache-Control": "no-cache", + "Content-Type": "application/json; odata=minimalmetadata; streaming=true; charset=utf-8", + "Date": "Tue, 15 Feb 2022 19:59:36 GMT", + "Server": [ + "Windows-Azure-Table/1.0", + "Microsoft-HTTPAPI/2.0" + ], + "Transfer-Encoding": "chunked", + "X-Content-Type-Options": "nosniff", + "x-ms-client-request-id": "b7d006c3-8425-46d2-a9ac-09023988113b", + "x-ms-request-id": "d5cbe893-5002-006b-11a6-222a6f000000", + "x-ms-version": "2019-02-02" + }, + "ResponseBody": { + "odata.metadata": "https://fakeaccountname.table.core.windows.net/$metadata#tableClientTestnode", + "value": [ + { + "odata.etag": "W/\u0022datetime\u00272022-02-15T19%3A59%3A37.3427907Z\u0027\u0022", + "PartitionKey": "A\u0027aaa_bbbb2\u0022", + "RowKey": "\u0022A\u0027aaa_bbbb2", + "Timestamp": "2022-02-15T19:59:37.3427907Z" + }, + { + "odata.etag": "W/\u0022datetime\u00272022-02-15T19%3A59%3A36.6059656Z\u0027\u0022", + "PartitionKey": "listEntitiesTest", + "RowKey": "0", + "Timestamp": "2022-02-15T19:59:36.6059656Z", + "foo": "testEntity" + }, + { + "odata.etag": "W/\u0022datetime\u00272022-02-15T19%3A59%3A36.6239544Z\u0027\u0022", + "PartitionKey": "listEntitiesTest", + "RowKey": "1", + "Timestamp": "2022-02-15T19:59:36.6239544Z", + "foo": "testEntity" + }, + { + "odata.etag": "W/\u0022datetime\u00272022-02-15T19%3A59%3A36.7908598Z\u0027\u0022", + "PartitionKey": "listEntitiesTest", + "RowKey": "10", + "Timestamp": "2022-02-15T19:59:36.7908598Z", + "foo": "testEntity" + }, + { + "odata.etag": "W/\u0022datetime\u00272022-02-15T19%3A59%3A36.8048518Z\u0027\u0022", + "PartitionKey": "listEntitiesTest", + "RowKey": "11", + "Timestamp": "2022-02-15T19:59:36.8048518Z", + "foo": "testEntity" + }, + { + "odata.etag": "W/\u0022datetime\u00272022-02-15T19%3A59%3A36.8208429Z\u0027\u0022", + "PartitionKey": "listEntitiesTest", + "RowKey": "12", + "Timestamp": "2022-02-15T19:59:36.8208429Z", + "foo": "testEntity" + }, + { + "odata.etag": "W/\u0022datetime\u00272022-02-15T19%3A59%3A36.8338353Z\u0027\u0022", + "PartitionKey": "listEntitiesTest", + "RowKey": "13", + "Timestamp": "2022-02-15T19:59:36.8338353Z", + "foo": "testEntity" + }, + { + "odata.etag": "W/\u0022datetime\u00272022-02-15T19%3A59%3A36.8468289Z\u0027\u0022", + "PartitionKey": "listEntitiesTest", + "RowKey": "14", + "Timestamp": "2022-02-15T19:59:36.8468289Z", + "foo": "testEntity" + }, + { + "odata.etag": "W/\u0022datetime\u00272022-02-15T19%3A59%3A36.8648177Z\u0027\u0022", + "PartitionKey": "listEntitiesTest", + "RowKey": "15", + "Timestamp": "2022-02-15T19:59:36.8648177Z", + "foo": "testEntity" + }, + { + "odata.etag": "W/\u0022datetime\u00272022-02-15T19%3A59%3A36.8798093Z\u0027\u0022", + "PartitionKey": "listEntitiesTest", + "RowKey": "16", + "Timestamp": "2022-02-15T19:59:36.8798093Z", + "foo": "testEntity" + }, + { + "odata.etag": "W/\u0022datetime\u00272022-02-15T19%3A59%3A36.8938014Z\u0027\u0022", + "PartitionKey": "listEntitiesTest", + "RowKey": "17", + "Timestamp": "2022-02-15T19:59:36.8938014Z", + "foo": "testEntity" + }, + { + "odata.etag": "W/\u0022datetime\u00272022-02-15T19%3A59%3A36.9087922Z\u0027\u0022", + "PartitionKey": "listEntitiesTest", + "RowKey": "18", + "Timestamp": "2022-02-15T19:59:36.9087922Z", + "foo": "testEntity" + }, + { + "odata.etag": "W/\u0022datetime\u00272022-02-15T19%3A59%3A36.9277817Z\u0027\u0022", + "PartitionKey": "listEntitiesTest", + "RowKey": "19", + "Timestamp": "2022-02-15T19:59:36.9277817Z", + "foo": "testEntity" + }, + { + "odata.etag": "W/\u0022datetime\u00272022-02-15T19%3A59%3A36.6379476Z\u0027\u0022", + "PartitionKey": "listEntitiesTest", + "RowKey": "2", + "Timestamp": "2022-02-15T19:59:36.6379476Z", + "foo": "testEntity" + }, + { + "odata.etag": "W/\u0022datetime\u00272022-02-15T19%3A59%3A36.6559373Z\u0027\u0022", + "PartitionKey": "listEntitiesTest", + "RowKey": "3", + "Timestamp": "2022-02-15T19:59:36.6559373Z", + "foo": "testEntity" + }, + { + "odata.etag": "W/\u0022datetime\u00272022-02-15T19%3A59%3A36.6739262Z\u0027\u0022", + "PartitionKey": "listEntitiesTest", + "RowKey": "4", + "Timestamp": "2022-02-15T19:59:36.6739262Z", + "foo": "testEntity" + }, + { + "odata.etag": "W/\u0022datetime\u00272022-02-15T19%3A59%3A36.6949138Z\u0027\u0022", + "PartitionKey": "listEntitiesTest", + "RowKey": "5", + "Timestamp": "2022-02-15T19:59:36.6949138Z", + "foo": "testEntity" + }, + { + "odata.etag": "W/\u0022datetime\u00272022-02-15T19%3A59%3A36.7169029Z\u0027\u0022", + "PartitionKey": "listEntitiesTest", + "RowKey": "6", + "Timestamp": "2022-02-15T19:59:36.7169029Z", + "foo": "testEntity" + }, + { + "odata.etag": "W/\u0022datetime\u00272022-02-15T19%3A59%3A36.7348915Z\u0027\u0022", + "PartitionKey": "listEntitiesTest", + "RowKey": "7", + "Timestamp": "2022-02-15T19:59:36.7348915Z", + "foo": "testEntity" + }, + { + "odata.etag": "W/\u0022datetime\u00272022-02-15T19%3A59%3A36.7608791Z\u0027\u0022", + "PartitionKey": "listEntitiesTest", + "RowKey": "8", + "Timestamp": "2022-02-15T19:59:36.7608791Z", + "foo": "testEntity" + }, + { + "odata.etag": "W/\u0022datetime\u00272022-02-15T19%3A59%3A36.7768676Z\u0027\u0022", + "PartitionKey": "listEntitiesTest", + "RowKey": "9", + "Timestamp": "2022-02-15T19:59:36.7768676Z", + "foo": "testEntity" + }, + { + "odata.etag": "W/\u0022datetime\u00272022-02-15T19%3A59%3A36.5899735Z\u0027\u0022", + "PartitionKey": "listEntitiesTest", + "RowKey": "binary1", + "Timestamp": "2022-02-15T19:59:36.5899735Z", + "foo@odata.type": "Edm.Binary", + "foo": "QmFy" + } + ] + } + }, + { + "RequestUri": "https://fakeaccountname.table.core.windows.net/tableClientTestnode(PartitionKey=\u0027A\u0027\u0027aaa_bbbb2\u0022\u0027,RowKey=\u0027\u0022A\u0027\u0027aaa_bbbb2\u0027)?st=2021-08-03T08:52:15Z\u0026spr=https\u0026sig=fakesigval", + "RequestMethod": "DELETE", + "RequestHeaders": { + "Accept": "application/json;odata=minimalmetadata", + "Accept-Encoding": "gzip,deflate", + "DataServiceVersion": "3.0", + "If-Match": "*", + "User-Agent": "azsdk-js-data-tables/13.0.2 core-rest-pipeline/1.5.1 Node/v16.13.1 OS/(x64-Linux-5.10.60.1-microsoft-standard-WSL2)", + "x-ms-client-request-id": "63bce35c-0171-4ece-9f36-5f575371db38", + "x-ms-version": "2019-02-02" + }, + "RequestBody": null, + "StatusCode": 204, + "ResponseHeaders": { + "Cache-Control": "no-cache", + "Content-Length": "0", + "Date": "Tue, 15 Feb 2022 19:59:36 GMT", + "Server": [ + "Windows-Azure-Table/1.0", + "Microsoft-HTTPAPI/2.0" + ], + "X-Content-Type-Options": "nosniff", + "x-ms-client-request-id": "63bce35c-0171-4ece-9f36-5f575371db38", + "x-ms-request-id": "d5cbe894-5002-006b-12a6-222a6f000000", + "x-ms-version": "2019-02-02" + }, + "ResponseBody": null + }, + { + "RequestUri": "https://fakeaccountname.table.core.windows.net/Tables(\u0027tableClientTestnode\u0027)?st=2021-08-03T08:52:15Z\u0026spr=https\u0026sig=fakesigval", + "RequestMethod": "DELETE", + "RequestHeaders": { + "Accept": "application/json", + "Accept-Encoding": "gzip,deflate", + "User-Agent": "azsdk-js-data-tables/13.0.2 core-rest-pipeline/1.5.1 Node/v16.13.1 OS/(x64-Linux-5.10.60.1-microsoft-standard-WSL2)", + "x-ms-client-request-id": "0cf6a357-b3ba-4109-adea-02aa200c02f8", + "x-ms-version": "2019-02-02" + }, + "RequestBody": null, + "StatusCode": 204, + "ResponseHeaders": { + "Cache-Control": "no-cache", + "Content-Length": "0", + "Date": "Tue, 15 Feb 2022 19:59:36 GMT", + "Server": [ + "Windows-Azure-Table/1.0", + "Microsoft-HTTPAPI/2.0" + ], + "X-Content-Type-Options": "nosniff", + "x-ms-client-request-id": "0cf6a357-b3ba-4109-adea-02aa200c02f8", + "x-ms-request-id": "d5cbe895-5002-006b-13a6-222a6f000000", + "x-ms-version": "2019-02-02" + }, + "ResponseBody": null + } + ], + "Variables": {} +} diff --git a/sdk/tables/data-tables/recordings/node/tableserviceclient_tracing/recording_should_trace_through_the_various_operations.json b/sdk/tables/data-tables/recordings/node/tableserviceclient_tracing/recording_should_trace_through_the_various_operations.json new file mode 100644 index 000000000000..6d0c486d2135 --- /dev/null +++ b/sdk/tables/data-tables/recordings/node/tableserviceclient_tracing/recording_should_trace_through_the_various_operations.json @@ -0,0 +1,97 @@ +{ + "Entries": [ + { + "RequestUri": "https://fakeaccountname.table.core.windows.net/Tables?st=2021-08-03T08:52:15Z\u0026spr=https\u0026sig=fakesigval", + "RequestMethod": "POST", + "RequestHeaders": { + "Accept": "application/json;odata=minimalmetadata", + "Accept-Encoding": "gzip,deflate", + "Content-Length": "31", + "Content-Type": "application/json;odata=nometadata", + "DataServiceVersion": "3.0", + "User-Agent": "azsdk-js-data-tables/13.0.2 core-rest-pipeline/1.5.1 Node/v16.13.1 OS/(x64-Linux-5.10.60.1-microsoft-standard-WSL2)", + "x-ms-client-request-id": "55d5ff12-5ad7-42c8-aca0-908899b06c89", + "x-ms-version": "2019-02-02" + }, + "RequestBody": { + "TableName": "testTracingnode" + }, + "StatusCode": 201, + "ResponseHeaders": { + "Cache-Control": "no-cache", + "Content-Type": "application/json; odata=minimalmetadata; streaming=true; charset=utf-8", + "Date": "Tue, 15 Feb 2022 21:56:07 GMT", + "Location": "https://fakeaccountname.table.core.windows.net/Tables(\u0027testTracingnode\u0027)", + "Server": [ + "Windows-Azure-Table/1.0", + "Microsoft-HTTPAPI/2.0" + ], + "Transfer-Encoding": "chunked", + "X-Content-Type-Options": "nosniff", + "x-ms-client-request-id": "55d5ff12-5ad7-42c8-aca0-908899b06c89", + "x-ms-request-id": "8b2d8773-5002-0048-64b6-22f542000000", + "x-ms-version": "2019-02-02" + }, + "ResponseBody": { + "odata.metadata": "https://fakeaccountname.table.core.windows.net/$metadata#Tables/@Element", + "TableName": "testTracingnode" + } + }, + { + "RequestUri": "https://fakeaccountname.table.core.windows.net/?st=2021-08-03T08:52:15Z\u0026spr=https\u0026sig=fakesigval\u0026restype=service\u0026comp=properties", + "RequestMethod": "GET", + "RequestHeaders": { + "Accept": "application/xml", + "Accept-Encoding": "gzip,deflate", + "User-Agent": "azsdk-js-data-tables/13.0.2 core-rest-pipeline/1.5.1 Node/v16.13.1 OS/(x64-Linux-5.10.60.1-microsoft-standard-WSL2)", + "x-ms-client-request-id": "3d460085-63cf-489c-9213-d4c8891e50a3", + "x-ms-version": "2019-02-02" + }, + "RequestBody": null, + "StatusCode": 200, + "ResponseHeaders": { + "Access-Control-Allow-Origin": "*", + "Access-Control-Expose-Headers": "x-ms-request-id,x-ms-client-request-id,Server,x-ms-version,Content-Length,Date,Transfer-Encoding", + "Content-Type": "application/xml", + "Date": "Tue, 15 Feb 2022 21:56:07 GMT", + "Server": [ + "Windows-Azure-Table/1.0", + "Microsoft-HTTPAPI/2.0" + ], + "Transfer-Encoding": "chunked", + "x-ms-client-request-id": "3d460085-63cf-489c-9213-d4c8891e50a3", + "x-ms-request-id": "8b2d8789-5002-0048-75b6-22f542000000", + "x-ms-version": "2019-02-02" + }, + "ResponseBody": "\uFEFF\u003C?xml version=\u00221.0\u0022 encoding=\u0022utf-8\u0022?\u003E\u003CStorageServiceProperties\u003E\u003CLogging\u003E\u003CVersion\u003E1.0\u003C/Version\u003E\u003CRead\u003Efalse\u003C/Read\u003E\u003CWrite\u003Efalse\u003C/Write\u003E\u003CDelete\u003Efalse\u003C/Delete\u003E\u003CRetentionPolicy\u003E\u003CEnabled\u003Efalse\u003C/Enabled\u003E\u003C/RetentionPolicy\u003E\u003C/Logging\u003E\u003CHourMetrics\u003E\u003CVersion\u003E1.0\u003C/Version\u003E\u003CEnabled\u003Etrue\u003C/Enabled\u003E\u003CIncludeAPIs\u003Etrue\u003C/IncludeAPIs\u003E\u003CRetentionPolicy\u003E\u003CEnabled\u003Etrue\u003C/Enabled\u003E\u003CDays\u003E7\u003C/Days\u003E\u003C/RetentionPolicy\u003E\u003C/HourMetrics\u003E\u003CMinuteMetrics\u003E\u003CVersion\u003E1.0\u003C/Version\u003E\u003CEnabled\u003Efalse\u003C/Enabled\u003E\u003CRetentionPolicy\u003E\u003CEnabled\u003Efalse\u003C/Enabled\u003E\u003C/RetentionPolicy\u003E\u003C/MinuteMetrics\u003E\u003CCors\u003E\u003CCorsRule\u003E\u003CAllowedMethods\u003EGET,HEAD,POST,PUT,DELETE,OPTIONS,MERGE\u003C/AllowedMethods\u003E\u003CAllowedOrigins\u003E*\u003C/AllowedOrigins\u003E\u003CAllowedHeaders\u003E*\u003C/AllowedHeaders\u003E\u003CExposedHeaders\u003E*\u003C/ExposedHeaders\u003E\u003CMaxAgeInSeconds\u003E86400\u003C/MaxAgeInSeconds\u003E\u003C/CorsRule\u003E\u003C/Cors\u003E\u003C/StorageServiceProperties\u003E" + }, + { + "RequestUri": "https://fakeaccountname.table.core.windows.net/Tables(\u0027testTracingnode\u0027)?st=2021-08-03T08:52:15Z\u0026spr=https\u0026sig=fakesigval", + "RequestMethod": "DELETE", + "RequestHeaders": { + "Accept": "application/json", + "Accept-Encoding": "gzip,deflate", + "User-Agent": "azsdk-js-data-tables/13.0.2 core-rest-pipeline/1.5.1 Node/v16.13.1 OS/(x64-Linux-5.10.60.1-microsoft-standard-WSL2)", + "x-ms-client-request-id": "a27ed54b-b751-46e7-9a15-a0a06d52c257", + "x-ms-version": "2019-02-02" + }, + "RequestBody": null, + "StatusCode": 204, + "ResponseHeaders": { + "Cache-Control": "no-cache", + "Content-Length": "0", + "Date": "Tue, 15 Feb 2022 21:56:07 GMT", + "Server": [ + "Windows-Azure-Table/1.0", + "Microsoft-HTTPAPI/2.0" + ], + "X-Content-Type-Options": "nosniff", + "x-ms-client-request-id": "a27ed54b-b751-46e7-9a15-a0a06d52c257", + "x-ms-request-id": "8b2d8791-5002-0048-7db6-22f542000000", + "x-ms-version": "2019-02-02" + }, + "ResponseBody": null + } + ], + "Variables": {} +} diff --git a/sdk/tables/data-tables/src/TableClient.ts b/sdk/tables/data-tables/src/TableClient.ts index 2d49731020bf..d7c1803d7a2a 100644 --- a/sdk/tables/data-tables/src/TableClient.ts +++ b/sdk/tables/data-tables/src/TableClient.ts @@ -2,6 +2,7 @@ // Licensed under the MIT license. import "@azure/core-paging"; + import { CreateTableEntityResponse, DeleteTableEntityOptions, @@ -52,16 +53,15 @@ import { serializeSignedIdentifiers, } from "./serialization"; import { parseXML, stringifyXML } from "@azure/core-xml"; + import { InternalTableTransaction } from "./TableTransaction"; import { ListEntitiesResponse } from "./utils/internalModels"; import { PagedAsyncIterableIterator } from "@azure/core-paging"; import { Pipeline } from "@azure/core-rest-pipeline"; -import { SpanStatusCode } from "@azure/core-tracing"; import { Table } from "./generated/operationsInterfaces"; import { TableQueryEntitiesOptionalParams } from "./generated/models"; import { Uuid } from "./utils/uuid"; import { cosmosPatchPolicy } from "./cosmosPathPolicy"; -import { createSpan } from "./utils/tracing"; import { escapeQuotes } from "./odata"; import { getClientParamsFromConnectionString } from "./utils/connectionString"; import { handleTableAlreadyExists } from "./utils/errorHelpers"; @@ -70,6 +70,7 @@ import { isCredential } from "./utils/isCredential"; import { logger } from "./logger"; import { tablesNamedKeyCredentialPolicy } from "./tablesNamedCredentialPolicy"; import { tablesSASTokenPolicy } from "./tablesSASTokenPolicy"; +import { tracingClient } from "./utils/tracing"; /** * A TableClient represents a Client to the Azure Tables service allowing you @@ -291,20 +292,16 @@ export class TableClient { * ``` */ // eslint-disable-next-line @azure/azure-sdk/ts-naming-options - public async deleteTable(options: OperationOptions = {}): Promise { - const { span, updatedOptions } = createSpan("TableClient-deleteTable", options); - try { - await this.table.delete(this.tableName, updatedOptions); - } catch (e) { - if (e.statusCode === 404) { - logger.info("TableClient-deleteTable: Table doesn't exist"); - } else { - span.setStatus({ code: SpanStatusCode.ERROR, message: e.message }); - throw e; + public deleteTable(options: OperationOptions = {}): Promise { + return tracingClient.withSpan("TableClient.deleteTable", options, async (updatedOptions) => { + try { + await this.table.delete(this.tableName, updatedOptions); + } catch (e) { + if (e.statusCode === 404) { + logger.info("TableClient.deleteTable: Table doesn't exist"); + } } - } finally { - span.end(); - } + }); } /** @@ -333,15 +330,14 @@ export class TableClient { * ``` */ // eslint-disable-next-line @azure/azure-sdk/ts-naming-options - public async createTable(options: OperationOptions = {}): Promise { - const { span, updatedOptions } = createSpan("TableClient-createTable", options); - try { - await this.table.create({ name: this.tableName }, updatedOptions); - } catch (e) { - handleTableAlreadyExists(e, { ...updatedOptions, span, logger, tableName: this.tableName }); - } finally { - span.end(); - } + public createTable(options: OperationOptions = {}): Promise { + return tracingClient.withSpan("TableClient.createTable", options, async (updatedOptions) => { + try { + await this.table.create({ name: this.tableName }, updatedOptions); + } catch (e) { + handleTableAlreadyExists(e, { ...updatedOptions, logger, tableName: this.tableName }); + } + }); } /** @@ -371,24 +367,21 @@ export class TableClient { * console.log(entity); * ``` */ - public async getEntity>( + public getEntity>( partitionKey: string, rowKey: string, // eslint-disable-next-line @azure/azure-sdk/ts-naming-options options: GetTableEntityOptions = {} ): Promise>> { - const { span, updatedOptions } = createSpan("TableClient-getEntity", options); - - let parsedBody: any; - function onResponse(rawResponse: FullOperationResponse, flatResponse: unknown): void { - parsedBody = rawResponse.parsedBody; - if (updatedOptions.onResponse) { - updatedOptions.onResponse(rawResponse, flatResponse); + return tracingClient.withSpan("TableClient.getEntity", options, async (updatedOptions) => { + let parsedBody: any; + function onResponse(rawResponse: FullOperationResponse, flatResponse: unknown): void { + parsedBody = rawResponse.parsedBody; + if (updatedOptions.onResponse) { + updatedOptions.onResponse(rawResponse, flatResponse); + } } - } - - try { - const { disableTypeConversion, queryOptions, ...getEntityOptions } = updatedOptions || {}; + const { disableTypeConversion, queryOptions, ...getEntityOptions } = updatedOptions; await this.table.queryEntitiesWithPartitionAndRowKey( this.tableName, escapeQuotes(partitionKey), @@ -405,12 +398,7 @@ export class TableClient { ); return tableEntity; - } catch (e) { - span.setStatus({ code: SpanStatusCode.ERROR, message: e.message }); - throw e; - } finally { - span.end(); - } + }); } /** @@ -493,31 +481,29 @@ export class TableClient { tableName: string, options: InternalListTableEntitiesOptions = {} ): AsyncIterableIterator>> { - const { span, updatedOptions } = createSpan("TableClient-listEntitiesPage", options); - - try { - let result = await this._listEntities(tableName, updatedOptions); + let result = await tracingClient.withSpan( + "TableClient.listEntitiesPage", + options, + (updatedOptions) => this._listEntities(tableName, updatedOptions) + ); - yield result; + yield result; - while (result.continuationToken) { - const optionsWithContinuation: InternalListTableEntitiesOptions = { - ...updatedOptions, - continuationToken: result.continuationToken, - }; - - result = await this._listEntities(tableName, optionsWithContinuation); + while (result.continuationToken) { + const optionsWithContinuation: InternalListTableEntitiesOptions = { + ...options, + continuationToken: result.continuationToken, + }; - yield result; - } - } catch (e) { - span.setStatus({ - code: SpanStatusCode.ERROR, - message: e.message, - }); - throw e; - } finally { - span.end(); + result = await tracingClient.withSpan( + "TableClient.listEntitiesPage", + optionsWithContinuation, + (updatedOptions, span) => { + span.setAttribute("continuationToken", result.continuationToken); + return this._listEntities(tableName, updatedOptions); + } + ); + yield result; } } @@ -584,26 +570,19 @@ export class TableClient { * await client.createEntity({partitionKey: "p1", rowKey: "r1", foo: "Hello!"}); * ``` */ - public async createEntity( + public createEntity( entity: TableEntity, // eslint-disable-next-line @azure/azure-sdk/ts-naming-options options: OperationOptions = {} ): Promise { - const { span, updatedOptions } = createSpan("TableClient-createEntity", options); - - try { + return tracingClient.withSpan("TableClient.createEntity", options, (updatedOptions) => { const { ...createTableEntity } = updatedOptions || {}; - return await this.table.insertEntity(this.tableName, { + return this.table.insertEntity(this.tableName, { ...createTableEntity, tableEntityProperties: serialize(entity), responsePreference: "return-no-content", }); - } catch (e) { - span.setStatus({ code: SpanStatusCode.ERROR, message: e.message }); - throw e; - } finally { - span.end(); - } + }); } /** @@ -631,32 +610,25 @@ export class TableClient { * await client.deleteEntity("", "") * ``` */ - public async deleteEntity( + public deleteEntity( partitionKey: string, rowKey: string, // eslint-disable-next-line @azure/azure-sdk/ts-naming-options options: DeleteTableEntityOptions = {} ): Promise { - const { span, updatedOptions } = createSpan("TableClient-deleteEntity", options); - - try { - const { etag = "*", ...rest } = updatedOptions || {}; + return tracingClient.withSpan("TableClient.deleteEntity", options, (updatedOptions) => { + const { etag = "*", ...rest } = updatedOptions; const deleteOptions: TableDeleteEntityOptionalParams = { ...rest, }; - return await this.table.deleteEntity( + return this.table.deleteEntity( this.tableName, escapeQuotes(partitionKey), escapeQuotes(rowKey), etag, deleteOptions ); - } catch (e) { - span.setStatus({ code: SpanStatusCode.ERROR, message: e.message }); - throw e; - } finally { - span.end(); - } + }); } /** @@ -698,41 +670,43 @@ export class TableClient { * await client.updateEntity(entity, "Replace") * ``` */ - public async updateEntity( + public updateEntity( entity: TableEntity, mode: UpdateMode = "Merge", // eslint-disable-next-line @azure/azure-sdk/ts-naming-options options: UpdateTableEntityOptions = {} ): Promise { - const { span, updatedOptions } = createSpan(`TableClient-updateEntity-${mode}`, options); - - try { - const partitionKey = escapeQuotes(entity.partitionKey); - const rowKey = escapeQuotes(entity.rowKey); - - const { etag = "*", ...updateEntityOptions } = updatedOptions || {}; - if (mode === "Merge") { - return await this.table.mergeEntity(this.tableName, partitionKey, rowKey, { - tableEntityProperties: serialize(entity), - ifMatch: etag, - ...updateEntityOptions, - }); - } - if (mode === "Replace") { - return await this.table.updateEntity(this.tableName, partitionKey, rowKey, { - tableEntityProperties: serialize(entity), - ifMatch: etag, - ...updateEntityOptions, - }); - } + return tracingClient.withSpan( + "TableClient.updateEntity", + options, + async (updatedOptions) => { + const partitionKey = escapeQuotes(entity.partitionKey); + const rowKey = escapeQuotes(entity.rowKey); + + const { etag = "*", ...updateEntityOptions } = updatedOptions || {}; + if (mode === "Merge") { + return this.table.mergeEntity(this.tableName, partitionKey, rowKey, { + tableEntityProperties: serialize(entity), + ifMatch: etag, + ...updateEntityOptions, + }); + } + if (mode === "Replace") { + return this.table.updateEntity(this.tableName, partitionKey, rowKey, { + tableEntityProperties: serialize(entity), + ifMatch: etag, + ...updateEntityOptions, + }); + } - throw new Error(`Unexpected value for update mode: ${mode}`); - } catch (e) { - span.setStatus({ code: SpanStatusCode.ERROR, message: e.message }); - throw e; - } finally { - span.end(); - } + throw new Error(`Unexpected value for update mode: ${mode}`); + }, + { + spanAttributes: { + updateEntityMode: mode, + }, + } + ); } /** @@ -770,38 +744,40 @@ export class TableClient { * await client.upsertEntity(entity, "Replace") * ``` */ - public async upsertEntity( + public upsertEntity( entity: TableEntity, mode: UpdateMode = "Merge", // eslint-disable-next-line @azure/azure-sdk/ts-naming-options options: OperationOptions = {} ): Promise { - const { span, updatedOptions } = createSpan(`TableClient-upsertEntity-${mode}`, options); - - try { - const partitionKey = escapeQuotes(entity.partitionKey); - const rowKey = escapeQuotes(entity.rowKey); - - if (mode === "Merge") { - return await this.table.mergeEntity(this.tableName, partitionKey, rowKey, { - tableEntityProperties: serialize(entity), - ...updatedOptions, - }); - } + return tracingClient.withSpan( + "TableClient.upsertEntity", + options, + async (updatedOptions) => { + const partitionKey = escapeQuotes(entity.partitionKey); + const rowKey = escapeQuotes(entity.rowKey); + + if (mode === "Merge") { + return this.table.mergeEntity(this.tableName, partitionKey, rowKey, { + tableEntityProperties: serialize(entity), + ...updatedOptions, + }); + } - if (mode === "Replace") { - return await this.table.updateEntity(this.tableName, partitionKey, rowKey, { - tableEntityProperties: serialize(entity), - ...updatedOptions, - }); + if (mode === "Replace") { + return this.table.updateEntity(this.tableName, partitionKey, rowKey, { + tableEntityProperties: serialize(entity), + ...updatedOptions, + }); + } + throw new Error(`Unexpected value for update mode: ${mode}`); + }, + { + spanAttributes: { + upsertEntityMode: mode, + }, } - throw new Error(`Unexpected value for update mode: ${mode}`); - } catch (e) { - span.setStatus({ code: SpanStatusCode.ERROR, message: e.message }); - throw e; - } finally { - span.end(); - } + ); } /** @@ -809,17 +785,15 @@ export class TableClient { * Shared Access Signatures. * @param options - The options parameters. */ - public async getAccessPolicy(options: OperationOptions = {}): Promise { - const { span, updatedOptions } = createSpan("TableClient-getAccessPolicy", options); - try { - const signedIdentifiers = await this.table.getAccessPolicy(this.tableName, updatedOptions); - return deserializeSignedIdentifier(signedIdentifiers); - } catch (e) { - span.setStatus({ code: SpanStatusCode.ERROR, message: e.message }); - throw e; - } finally { - span.end(); - } + public getAccessPolicy(options: OperationOptions = {}): Promise { + return tracingClient.withSpan( + "TableClient.getAccessPolicy", + options, + async (updatedOptions) => { + const signedIdentifiers = await this.table.getAccessPolicy(this.tableName, updatedOptions); + return deserializeSignedIdentifier(signedIdentifiers); + } + ); } /** @@ -827,23 +801,17 @@ export class TableClient { * @param tableAcl - The Access Control List for the table. * @param options - The options parameters. */ - public async setAccessPolicy( + public setAccessPolicy( tableAcl: SignedIdentifier[], options: OperationOptions = {} ): Promise { - const { span, updatedOptions } = createSpan("TableClient-setAccessPolicy", options); - try { + return tracingClient.withSpan("TableClient.setAccessPolicy", options, (updatedOptions) => { const serlializedAcl = serializeSignedIdentifiers(tableAcl); - return await this.table.setAccessPolicy(this.tableName, { + return this.table.setAccessPolicy(this.tableName, { ...updatedOptions, tableAcl: serlializedAcl, }); - } catch (e) { - span.setStatus({ code: SpanStatusCode.ERROR, message: e.message }); - throw e; - } finally { - span.end(); - } + }); } /** diff --git a/sdk/tables/data-tables/src/TableServiceClient.ts b/sdk/tables/data-tables/src/TableServiceClient.ts index 9d20059f20cb..d0128bf4a734 100644 --- a/sdk/tables/data-tables/src/TableServiceClient.ts +++ b/sdk/tables/data-tables/src/TableServiceClient.ts @@ -36,15 +36,14 @@ import { parseXML, stringifyXML } from "@azure/core-xml"; import { GeneratedClient } from "./generated/generatedClient"; import { PagedAsyncIterableIterator } from "@azure/core-paging"; import { Pipeline } from "@azure/core-rest-pipeline"; -import { SpanStatusCode } from "@azure/core-tracing"; import { TableItemResultPage } from "./models"; -import { createSpan } from "./utils/tracing"; import { getClientParamsFromConnectionString } from "./utils/connectionString"; import { handleTableAlreadyExists } from "./utils/errorHelpers"; import { isCredential } from "./utils/isCredential"; import { logger } from "./logger"; import { tablesNamedKeyCredentialPolicy } from "./tablesNamedCredentialPolicy"; import { tablesSASTokenPolicy } from "./tablesSASTokenPolicy"; +import { tracingClient } from "./utils/tracing"; /** * A TableServiceClient represents a Client to the Azure Tables service allowing you @@ -198,15 +197,9 @@ export class TableServiceClient { * @param options - The options parameters. */ public async getStatistics(options: OperationOptions = {}): Promise { - const { span, updatedOptions } = createSpan("TableServiceClient-getStatistics", options); - try { - return await this.service.getStatistics(injectSecondaryEndpointHeader(updatedOptions)); - } catch (e) { - span.setStatus({ code: SpanStatusCode.ERROR, message: e.message }); - throw e; - } finally { - span.end(); - } + return tracingClient.withSpan("TableServiceClient.getStatistics", options, (updatedOptions) => + this.service.getStatistics(injectSecondaryEndpointHeader(updatedOptions)) + ); } /** @@ -214,16 +207,10 @@ export class TableServiceClient { * (Cross-Origin Resource Sharing) rules. * @param options - The options parameters. */ - public async getProperties(options: OperationOptions = {}): Promise { - const { span, updatedOptions } = createSpan("TableServiceClient-getProperties", options); - try { - return await this.service.getProperties(updatedOptions); - } catch (e) { - span.setStatus({ code: SpanStatusCode.ERROR, message: e.message }); - throw e; - } finally { - span.end(); - } + public getProperties(options: OperationOptions = {}): Promise { + return tracingClient.withSpan("TableServiceClient.getProperties", options, (updatedOptions) => + this.service.getProperties(updatedOptions) + ); } /** @@ -232,19 +219,13 @@ export class TableServiceClient { * @param properties - The Table Service properties. * @param options - The options parameters. */ - public async setProperties( + public setProperties( properties: ServiceProperties, options: SetPropertiesOptions = {} ): Promise { - const { span, updatedOptions } = createSpan("TableServiceClient-setProperties", options); - try { - return await this.service.setProperties(properties, updatedOptions); - } catch (e) { - span.setStatus({ code: SpanStatusCode.ERROR, message: e.message }); - throw e; - } finally { - span.end(); - } + return tracingClient.withSpan("TableServiceClient.setProperties", options, (updatedOptions) => + this.service.setProperties(properties, updatedOptions) + ); } /** @@ -252,15 +233,18 @@ export class TableServiceClient { * @param name - The name of the table. * @param options - The options parameters. */ - public async createTable(name: string, options: OperationOptions = {}): Promise { - const { span, updatedOptions } = createSpan("TableServiceClient-createTable", options); - try { - await this.table.create({ name }, { ...updatedOptions }); - } catch (e) { - handleTableAlreadyExists(e, { ...updatedOptions, span, logger, tableName: name }); - } finally { - span.end(); - } + public createTable(name: string, options: OperationOptions = {}): Promise { + return tracingClient.withSpan( + "TableServiceClient.createTable", + options, + async (updatedOptions) => { + try { + await this.table.create({ name }, updatedOptions); + } catch (e) { + handleTableAlreadyExists(e, { ...updatedOptions, logger, tableName: name }); + } + } + ); } /** @@ -268,20 +252,22 @@ export class TableServiceClient { * @param name - The name of the table. * @param options - The options parameters. */ - public async deleteTable(name: string, options: OperationOptions = {}): Promise { - const { span, updatedOptions } = createSpan("TableServiceClient-deleteTable", options); - try { - await this.table.delete(name, updatedOptions); - } catch (e) { - if (e.statusCode === 404) { - logger.info("TableServiceClient-deleteTable: Table doesn't exist"); - } else { - span.setStatus({ code: SpanStatusCode.ERROR, message: e.message }); - throw e; + public deleteTable(name: string, options: OperationOptions = {}): Promise { + return tracingClient.withSpan( + "TableServiceClient.deleteTable", + options, + async (updatedOptions) => { + try { + await this.table.delete(name, updatedOptions); + } catch (e) { + if (e.statusCode === 404) { + logger.info("TableServiceClient.deleteTable: Table doesn't exist"); + } else { + throw e; + } + } } - } finally { - span.end(); - } + ); } /** @@ -336,26 +322,28 @@ export class TableServiceClient { private async *listTablesPage( options: InternalListTablesOptions = {} ): AsyncIterableIterator { - const { span, updatedOptions } = createSpan("TableServiceClient-listTablesPage", options); + let result = await tracingClient.withSpan( + "TableServiceClient.listTablesPage", + options, + (updatedOptions) => this._listTables(updatedOptions) + ); - try { - let result = await this._listTables(updatedOptions); + yield result; + while (result.continuationToken) { + const optionsWithContinuation: InternalListTablesOptions = { + ...options, + continuationToken: result.continuationToken, + }; + result = await tracingClient.withSpan( + "TableServiceClient.listTablesPage", + optionsWithContinuation, + async (updatedOptions, span) => { + span.setAttribute("continuationToken", updatedOptions.continuationToken); + return this._listTables(updatedOptions); + } + ); yield result; - - while (result.continuationToken) { - const optionsWithContinuation: InternalListTablesOptions = { - ...updatedOptions, - continuationToken: result.continuationToken, - }; - result = await this._listTables(optionsWithContinuation); - yield result; - } - } catch (e) { - span.setStatus({ code: SpanStatusCode.ERROR, message: e.message }); - throw e; - } finally { - span.end(); } } diff --git a/sdk/tables/data-tables/src/TableTransaction.ts b/sdk/tables/data-tables/src/TableTransaction.ts index 6e7279d257b4..ee59ccd76405 100644 --- a/sdk/tables/data-tables/src/TableTransaction.ts +++ b/sdk/tables/data-tables/src/TableTransaction.ts @@ -36,13 +36,12 @@ import { transactionRequestAssemblePolicyName, } from "./TablePolicies"; -import { SpanStatusCode } from "@azure/core-tracing"; import { TableClientLike } from "./utils/internalModels"; import { TableServiceErrorOdataError } from "./generated"; import { cosmosPatchPolicy } from "./cosmosPathPolicy"; -import { createSpan } from "./utils/tracing"; import { getTransactionHeaders } from "./utils/transactionHeaders"; import { isCosmosEndpoint } from "./utils/isCosmosEndpoint"; +import { tracingClient } from "./utils/tracing"; /** * Helper to build a list of transaction actions @@ -268,31 +267,23 @@ export class InternalTableTransaction { const headers = getTransactionHeaders(this.resetableState.transactionId); - const { span, updatedOptions } = createSpan( - "TableTransaction-submitTransaction", - {} as OperationOptions + return tracingClient.withSpan( + "TableTransaction.submitTransaction", + {} as OperationOptions, + async (updatedOptions) => { + const request = createPipelineRequest({ + url: this.url, + method: "POST", + body, + headers: createHttpHeaders(headers), + tracingOptions: updatedOptions.tracingOptions, + allowInsecureConnection: this.allowInsecureConnection, + }); + + const rawTransactionResponse = await this.client.sendRequest(request); + return parseTransactionResponse(rawTransactionResponse); + } ); - const request = createPipelineRequest({ - url: this.url, - method: "POST", - body, - headers: createHttpHeaders(headers), - tracingOptions: updatedOptions.tracingOptions, - allowInsecureConnection: this.allowInsecureConnection, - }); - - try { - const rawTransactionResponse = await this.client.sendRequest(request); - return parseTransactionResponse(rawTransactionResponse); - } catch (error) { - span.setStatus({ - code: SpanStatusCode.ERROR, - message: error.message, - }); - throw error; - } finally { - span.end(); - } } private checkPartitionKey(partitionKey: string): void { diff --git a/sdk/tables/data-tables/src/generated/generatedClientContext.ts b/sdk/tables/data-tables/src/generated/generatedClientContext.ts index ce588cc9ec8b..f63e6c97747c 100644 --- a/sdk/tables/data-tables/src/generated/generatedClientContext.ts +++ b/sdk/tables/data-tables/src/generated/generatedClientContext.ts @@ -32,7 +32,7 @@ export class GeneratedClientContext extends coreClient.ServiceClient { requestContentType: "application/json; charset=utf-8" }; - const packageDetails = `azsdk-js-data-tables/13.0.2`; + const packageDetails = `azsdk-js-data-tables/13.1.0`; const userAgentPrefix = options.userAgentOptions && options.userAgentOptions.userAgentPrefix ? `${options.userAgentOptions.userAgentPrefix} ${packageDetails}` diff --git a/sdk/tables/data-tables/src/utils/errorHelpers.ts b/sdk/tables/data-tables/src/utils/errorHelpers.ts index 2f490119e291..01f4d160dc0f 100644 --- a/sdk/tables/data-tables/src/utils/errorHelpers.ts +++ b/sdk/tables/data-tables/src/utils/errorHelpers.ts @@ -4,7 +4,6 @@ import { OperationOptions, OperationRequest } from "@azure/core-client"; import { PipelineResponse, RestError } from "@azure/core-rest-pipeline"; import { AzureLogger } from "@azure/logger"; -import { SpanStatusCode } from "@azure/core-tracing"; import { TableServiceError } from "../generated"; export type TableServiceErrorResponse = PipelineResponse & { @@ -24,7 +23,7 @@ export type TableServiceErrorResponse = PipelineResponse & { export function handleTableAlreadyExists( error: unknown, - options: OperationOptions & { tableName?: string; span?: any; logger?: AzureLogger } = {} + options: OperationOptions & { tableName?: string; logger?: AzureLogger } = {} ): void { const responseError = getErrorResponse(error); if ( @@ -38,7 +37,6 @@ export function handleTableAlreadyExists( options.onResponse(responseError, {}); } } else { - options?.span.setStatus({ code: SpanStatusCode.ERROR, message: (error as Error)?.message }); throw error; } } diff --git a/sdk/tables/data-tables/src/utils/tracing.ts b/sdk/tables/data-tables/src/utils/tracing.ts index 52a69c0edcc4..1a8dfedd2df5 100644 --- a/sdk/tables/data-tables/src/utils/tracing.ts +++ b/sdk/tables/data-tables/src/utils/tracing.ts @@ -1,13 +1,14 @@ // Copyright (c) Microsoft Corporation. // Licensed under the MIT license. -import { createSpanFunction } from "@azure/core-tracing"; +import { createTracingClient } from "@azure/core-tracing"; /** - * Creates a span using the global tracer. + * A tracing client that can be used to manage spans. * @internal */ -export const createSpan = createSpanFunction({ - packagePrefix: "Azure.Data.Tables", +export const tracingClient = createTracingClient({ namespace: "Microsoft.Data.Tables", + packageName: "@azure/data-tables", + packageVersion: "13.1.0", }); diff --git a/sdk/tables/data-tables/swagger/README.md b/sdk/tables/data-tables/swagger/README.md index 39d5c55beaf1..c5ce1a36a23a 100644 --- a/sdk/tables/data-tables/swagger/README.md +++ b/sdk/tables/data-tables/swagger/README.md @@ -6,7 +6,7 @@ ```yaml v3: true -package-version: 13.0.2 +package-version: 13.1.0 package-name: "@azure/data-tables" title: TablesClient description: Tables Client diff --git a/sdk/tables/data-tables/test/internal/browser/generateSas.browser.spec.ts b/sdk/tables/data-tables/test/internal/browser/generateSas.browser.spec.ts index 8517ec03b60a..0cd4a12a591b 100644 --- a/sdk/tables/data-tables/test/internal/browser/generateSas.browser.spec.ts +++ b/sdk/tables/data-tables/test/internal/browser/generateSas.browser.spec.ts @@ -2,6 +2,7 @@ // Licensed under the MIT license. import { AzureNamedKeyCredential, generateTableSas } from "../../../src"; + import { assert } from "chai"; // This file is empty as sas generation is not supported in browsers diff --git a/sdk/tables/data-tables/test/public/tableclient.spec.ts b/sdk/tables/data-tables/test/public/tableclient.spec.ts index a5f9b804e76c..01521a8e432e 100644 --- a/sdk/tables/data-tables/test/public/tableclient.spec.ts +++ b/sdk/tables/data-tables/test/public/tableclient.spec.ts @@ -7,7 +7,7 @@ import { isNode, isNode8 } from "@azure/test-utils"; import { Context } from "mocha"; import { FullOperationResponse } from "@azure/core-client"; -import { assert } from "chai"; +import { assert } from "@azure/test-utils"; import { createTableClient } from "./utils/recordedClient"; describe("special characters", () => { @@ -619,4 +619,35 @@ describe(`TableClient`, () => { }); }); }); + + describe("tracing", () => { + it("should trace through the various operations", async () => { + await assert.supportsTracing( + async (options) => { + await client.createTable(options); + const entity = { + partitionKey: "A'aaa_bbbb2\"", + rowKey: `"A'aaa_bbbb2`, + }; + await client.createEntity(entity, options); + await client.upsertEntity(entity, "Replace", options); + await client.getEntity(entity.partitionKey, entity.rowKey, options); + await client.updateEntity(entity, "Replace", options); + await client.listEntities(options).byPage().next(); + await client.deleteEntity(entity.partitionKey, entity.rowKey, options); + await client.deleteTable(options); + }, + [ + "TableClient.createTable", + "TableClient.createEntity", + "TableClient.upsertEntity", + "TableClient.getEntity", + "TableClient.updateEntity", + "TableClient.listEntitiesPage", + "TableClient.deleteEntity", + "TableClient.deleteTable", + ] + ); + }); + }); }); diff --git a/sdk/tables/data-tables/test/public/tableserviceclient.spec.ts b/sdk/tables/data-tables/test/public/tableserviceclient.spec.ts index cffe9ae16a4c..c2edf7ba3984 100644 --- a/sdk/tables/data-tables/test/public/tableserviceclient.spec.ts +++ b/sdk/tables/data-tables/test/public/tableserviceclient.spec.ts @@ -6,7 +6,7 @@ import { TableItem, TableItemResultPage, TableServiceClient } from "../../src"; import { Context } from "mocha"; import { FullOperationResponse } from "@azure/core-client"; -import { assert } from "chai"; +import { assert } from "@azure/test-utils"; import { createTableServiceClient } from "./utils/recordedClient"; import { isNode } from "@azure/test-utils"; @@ -140,11 +140,41 @@ describe(`TableServiceClient`, () => { assert.deepEqual(result, lastPage); }); }); - describe("Statistics", () => { it("should getStatistics", async () => { const result = await client.getStatistics(); assert.deepEqual(result.geoReplication?.status, "live"); }); }); + + describe("tracing", () => { + it("should trace through the various operations", async () => { + const tableName = `testTracing${suffix}`; + await recorder.setMatcher("HeaderlessMatcher"); + await assert.supportsTracing( + async (options) => { + await client.createTable(tableName, options); + await client.getProperties(options); + try { + await client.setProperties({}, options); + } catch { + // ignore exceptions + } + try { + await client.getStatistics(options); + } catch { + // ignore exceptions + } + await client.deleteTable(tableName, options); + }, + [ + "TableServiceClient.createTable", + "TableServiceClient.getProperties", + "TableServiceClient.setProperties", + "TableServiceClient.getStatistics", + "TableServiceClient.deleteTable", + ] + ); + }); + }); }); diff --git a/sdk/tables/perf-tests/data-tables/package.json b/sdk/tables/perf-tests/data-tables/package.json index 3b63bf0f9fbe..1de9050eed8b 100644 --- a/sdk/tables/perf-tests/data-tables/package.json +++ b/sdk/tables/perf-tests/data-tables/package.json @@ -8,7 +8,7 @@ "author": "", "license": "ISC", "dependencies": { - "@azure/data-tables": "^13.0.2", + "@azure/data-tables": "^13.1.0", "@azure/test-utils-perf": "^1.0.0", "dotenv": "^8.2.0", "uuid": "^8.3.0" diff --git a/sdk/test-utils/testing-recorder-new/package.json b/sdk/test-utils/testing-recorder-new/package.json index 7837b8a416bf..af5e5f095ae1 100644 --- a/sdk/test-utils/testing-recorder-new/package.json +++ b/sdk/test-utils/testing-recorder-new/package.json @@ -100,7 +100,7 @@ "typescript": "~4.2.0", "xhr-mock": "^2.4.1", "uuid": "^8.3.0", - "@azure/data-tables": "^13.0.2", + "@azure/data-tables": "^13.1.0", "@types/uuid": "^8.0.0" } }