Skip to content

Commit

Permalink
Merge branch 'users/jawilley/diagnostics/includeTaskRunTime2' of http…
Browse files Browse the repository at this point in the history
…s://github.com/Azure/azure-cosmos-dotnet-v3 into users/jawilley/diagnostics/includeTaskRunTime2
  • Loading branch information
Jake Willey committed Jun 19, 2020
2 parents 4e032c7 + 392cba6 commit 6543b7b
Show file tree
Hide file tree
Showing 133 changed files with 2,216 additions and 1,370 deletions.
1 change: 1 addition & 0 deletions CODEOWNERS
Validating CODEOWNERS rules …
Original file line number Diff line number Diff line change
Expand Up @@ -15,3 +15,4 @@ Microsoft.Azure.Cosmos/src/Spatial @lalithamv @sboshra @kirankumarkolli @j82w
Microsoft.Azure.Cosmos/tests @khdang @sboshra @bchong95 @kirankumarkolli @j82w @ealsur @FabianMeiswinkel @kirillg
Microsoft.Azure.Cosmos.Samples @khdang @sboshra @bchong95 @kirankumarkolli @j82w @ealsur @FabianMeiswinkel @kirillg
Microsoft.Azure.Cosmos/tests/Microsoft.Azure.Cosmos.Tests/DotNetSDKAPI.json @kirillg @kirankumarkolli
Microsoft.Azure.Cosmos/tests/Microsoft.Azure.Cosmos.Tests/DirectContractTests.cs @kirillg @kirankumarkolli
Original file line number Diff line number Diff line change
Expand Up @@ -194,12 +194,14 @@ private static async Task ListContainersInDatabase()
{
Console.WriteLine("\n5. Reading all CosmosContainer resources for a database");

FeedIterator<ContainerProperties> resultSetIterator = database.GetContainerQueryIterator<ContainerProperties>();
while (resultSetIterator.HasMoreResults)
using (FeedIterator<ContainerProperties> resultSetIterator = database.GetContainerQueryIterator<ContainerProperties>())
{
foreach (ContainerProperties container in await resultSetIterator.ReadNextAsync())
while (resultSetIterator.HasMoreResults)
{
Console.WriteLine(container.Id);
foreach (ContainerProperties container in await resultSetIterator.ReadNextAsync())
{
Console.WriteLine(container.Id);
}
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -93,14 +93,16 @@ private static async Task RunDatabaseDemo(CosmosClient client)
}

Console.WriteLine("\n5. Reading all databases resources for an account");
FeedIterator<DatabaseProperties> iterator = client.GetDatabaseQueryIterator<DatabaseProperties>();
do
using (FeedIterator<DatabaseProperties> iterator = client.GetDatabaseQueryIterator<DatabaseProperties>())
{
foreach (DatabaseProperties db in await iterator.ReadNextAsync())
while(iterator.HasMoreResults)
{
Console.WriteLine(db.Id);
foreach (DatabaseProperties db in await iterator.ReadNextAsync())
{
Console.WriteLine(db.Id);
}
}
} while (iterator.HasMoreResults);
}

// Delete the database from Azure Cosmos.
await database.DeleteAsync();
Expand Down
10 changes: 6 additions & 4 deletions Microsoft.Azure.Cosmos.Samples/Usage/Handlers/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -94,13 +94,15 @@ public static async Task Main(string[] args)
await container.ReplaceItemAsync<Item>(item, item.Id, new PartitionKey(item.Id));

// Querying
FeedIterator<Item> query = container.GetItemQueryIterator<Item>(new QueryDefinition("SELECT * FROM c"), requestOptions: new QueryRequestOptions() { MaxConcurrency = 1});
List<Item> results = new List<Item>();
while (query.HasMoreResults)
using (FeedIterator<Item> query = container.GetItemQueryIterator<Item>(new QueryDefinition("SELECT * FROM c"), requestOptions: new QueryRequestOptions() { MaxConcurrency = 1 }))
{
FeedResponse<Item> response = await query.ReadNextAsync();
while (query.HasMoreResults)
{
FeedResponse<Item> response = await query.ReadNextAsync();

results.AddRange(response.ToList());
results.AddRange(response.ToList());
}
}

// Read Item
Expand Down
53 changes: 32 additions & 21 deletions Microsoft.Azure.Cosmos.Samples/Usage/IndexManagement/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -145,16 +145,17 @@ private static async Task ExplicitlyExcludeFromIndex(CosmosClient client)
ItemResponse<dynamic> created = await container.CreateItemAsync<dynamic>(new { id = "doc1", partitionKey = "doc1", orderId = "order1" }, new PartitionKey("doc1"));
Console.WriteLine("\nItem created: \n{0}", JsonConvert.SerializeObject(created.Resource));

FeedIterator<dynamic> resultSetIterator = container.GetItemQueryIterator<dynamic>(new QueryDefinition("SELECT * FROM root r WHERE r.orderId='order1'"), requestOptions: new QueryRequestOptions { MaxItemCount = 1 });
bool found = false;
while (resultSetIterator.HasMoreResults)
using (FeedIterator<dynamic> resultSetIterator = container.GetItemQueryIterator<dynamic>(
new QueryDefinition("SELECT * FROM root r WHERE r.orderId='order1'"),
requestOptions: new QueryRequestOptions { MaxItemCount = 1 }))
{
FeedResponse<dynamic> feedResponse = await resultSetIterator.ReadNextAsync();
found = feedResponse.Count > 0;
while (resultSetIterator.HasMoreResults)
{
FeedResponse<dynamic> feedResponse = await resultSetIterator.ReadNextAsync();
Console.WriteLine($"Item count by query: {feedResponse.Count}");
}
}

Console.WriteLine("Item found by query: {0}", found);

// Now, create an item but this time explictly exclude it from the collection using IndexingDirective
// Then query for that document
// Shoud NOT find it, because we excluded it from the index
Expand All @@ -166,14 +167,16 @@ private static async Task ExplicitlyExcludeFromIndex(CosmosClient client)

Console.WriteLine("\nItem created: \n{0}", JsonConvert.SerializeObject(created.Resource));

resultSetIterator = container.GetItemQueryIterator<dynamic>(new QueryDefinition("SELECT * FROM root r WHERE r.orderId='order2'"), requestOptions: new QueryRequestOptions { MaxItemCount = 1 });
found = false;
while (resultSetIterator.HasMoreResults)
using (FeedIterator<dynamic> resultSetIterator = container.GetItemQueryIterator<dynamic>(
new QueryDefinition("SELECT * FROM root r WHERE r.orderId='order2'"),
requestOptions: new QueryRequestOptions { MaxItemCount = 1 }))
{
FeedResponse<dynamic> feedResponse = await resultSetIterator.ReadNextAsync();
found = feedResponse.Count > 0;
while (resultSetIterator.HasMoreResults)
{
FeedResponse<dynamic> feedResponse = await resultSetIterator.ReadNextAsync();
Console.WriteLine($"Item count by query: {feedResponse.Count}");
}
}
Console.WriteLine("Item found by query: {0}", found);

ItemResponse<dynamic> document = await container.ReadItemAsync<dynamic>((string)created.Resource.id, new PartitionKey("doc2"));
Console.WriteLine("Item read by id: {0}", document != null);
Expand Down Expand Up @@ -300,16 +303,25 @@ private static async Task<QueryStats> GetQueryResult(Container container, string
{
try
{
FeedIterator<dynamic> documentQuery = container.GetItemQueryIterator<dynamic>(
using (FeedIterator<dynamic> documentQuery = container.GetItemQueryIterator<dynamic>(
query,
requestOptions:
requestOptions:
new QueryRequestOptions
{
MaxItemCount = -1
});
}))
{
int itemCount = 0;
double requestCharge = 0;
while (documentQuery.HasMoreResults)
{
FeedResponse<dynamic> response = await documentQuery.ReadNextAsync();
itemCount += response.Count;
requestCharge += response.RequestCharge;
}

FeedResponse<dynamic> response = await documentQuery.ReadNextAsync();
return new QueryStats(response.Count, response.RequestCharge);
return new QueryStats(itemCount, requestCharge);
}
}
catch (Exception e)
{
Expand All @@ -333,10 +345,9 @@ private static void LogException(Exception e)
Console.ForegroundColor = ConsoleColor.Red;

Exception baseException = e.GetBaseException();
if (e is CosmosException)
if (e is CosmosException cosmosException)
{
CosmosException de = (CosmosException)e;
Console.WriteLine("{0} error occurred: {1}, Message: {2}", de.StatusCode, de.Message, baseException.Message);
Console.WriteLine("{0} error occurred: {1}, Message: {2}", cosmosException.StatusCode, cosmosException.Message, baseException.Message);
}
else
{
Expand Down
122 changes: 64 additions & 58 deletions Microsoft.Azure.Cosmos.Samples/Usage/ItemManagement/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -267,58 +267,62 @@ private static async Task ReadAllItems()
//******************************************************************************************************************
Console.WriteLine("\n1.3 - Read all items with query using a specific partition key");

FeedIterator<SalesOrder> resultSet = container.GetItemQueryIterator<SalesOrder>(
List<SalesOrder> allSalesForAccount1 = new List<SalesOrder>();
using (FeedIterator<SalesOrder> resultSet = container.GetItemQueryIterator<SalesOrder>(
queryDefinition: null,
requestOptions: new QueryRequestOptions()
{
PartitionKey = new PartitionKey("Account1")
});

List<SalesOrder> allSalesForAccount1 = new List<SalesOrder>();
while (resultSet.HasMoreResults)
}))
{
FeedResponse<SalesOrder> response = await resultSet.ReadNextAsync();
SalesOrder sale = response.First();
Console.WriteLine($"\n1.3.1 Account Number: {sale.AccountNumber}; Id: {sale.Id};");
if (response.Diagnostics != null)
while (resultSet.HasMoreResults)
{
Console.WriteLine($" Diagnostics {response.Diagnostics.ToString()}");
}
FeedResponse<SalesOrder> response = await resultSet.ReadNextAsync();
SalesOrder sale = response.First();
Console.WriteLine($"\n1.3.1 Account Number: {sale.AccountNumber}; Id: {sale.Id};");
if (response.Diagnostics != null)
{
Console.WriteLine($" Diagnostics {response.Diagnostics.ToString()}");
}

allSalesForAccount1.AddRange(response);
allSalesForAccount1.AddRange(response);
}
}



Console.WriteLine($"\n1.3.2 Read all items found {allSalesForAccount1.Count} items.");

// Use the same query as before but get the cosmos response message to access the stream directly
FeedIterator streamResultSet = container.GetItemQueryStreamIterator(
List<SalesOrder> allSalesForAccount1FromStream = new List<SalesOrder>();
using (FeedIterator streamResultSet = container.GetItemQueryStreamIterator(
queryDefinition: null,
requestOptions: new QueryRequestOptions()
{
PartitionKey = new PartitionKey("Account1")
});

List<SalesOrder> allSalesForAccount1FromStream = new List<SalesOrder>();
while (streamResultSet.HasMoreResults)
}))
{
using (ResponseMessage responseMessage = await streamResultSet.ReadNextAsync())
while (streamResultSet.HasMoreResults)
{
// Item stream operations do not throw exceptions for better performance
if (responseMessage.IsSuccessStatusCode)
using (ResponseMessage responseMessage = await streamResultSet.ReadNextAsync())
{
dynamic streamResponse = FromStream<dynamic>(responseMessage.Content);
List<SalesOrder> salesOrders = streamResponse.Documents.ToObject<List<SalesOrder>>();
Console.WriteLine($"\n1.3.3 - Read all items via stream {salesOrders.Count}");
allSalesForAccount1FromStream.AddRange(salesOrders);
}
else
{
Console.WriteLine($"Read all items from stream failed. Status code: {responseMessage.StatusCode} Message: {responseMessage.ErrorMessage}");
// Item stream operations do not throw exceptions for better performance
if (responseMessage.IsSuccessStatusCode)
{
dynamic streamResponse = FromStream<dynamic>(responseMessage.Content);
List<SalesOrder> salesOrders = streamResponse.Documents.ToObject<List<SalesOrder>>();
Console.WriteLine($"\n1.3.3 - Read all items via stream {salesOrders.Count}");
allSalesForAccount1FromStream.AddRange(salesOrders);
}
else
{
Console.WriteLine($"Read all items from stream failed. Status code: {responseMessage.StatusCode} Message: {responseMessage.ErrorMessage}");
}
}
}
}

Console.WriteLine($"\n1.3.4 Read all items found {allSalesForAccount1FromStream.Count} items.");
Console.WriteLine($"\n1.3.4 Read all items found {allSalesForAccount1FromStream.Count} items.");
}

if (allSalesForAccount1.Count != allSalesForAccount1FromStream.Count)
{
Expand All @@ -343,56 +347,58 @@ private static async Task QueryItems()
"select * from sales s where s.AccountNumber = @AccountInput ")
.WithParameter("@AccountInput", "Account1");

FeedIterator<SalesOrder> resultSet = container.GetItemQueryIterator<SalesOrder>(
List<SalesOrder> allSalesForAccount1 = new List<SalesOrder>();
using (FeedIterator<SalesOrder> resultSet = container.GetItemQueryIterator<SalesOrder>(
query,
requestOptions: new QueryRequestOptions()
{
PartitionKey = new PartitionKey("Account1"),
MaxItemCount = 1
});

List<SalesOrder> allSalesForAccount1 = new List<SalesOrder>();
while (resultSet.HasMoreResults)
}))
{
FeedResponse<SalesOrder> response = await resultSet.ReadNextAsync();
SalesOrder sale = response.First();
Console.WriteLine($"\n1.4.1 Account Number: {sale.AccountNumber}; Id: {sale.Id};");
if(response.Diagnostics != null)
while (resultSet.HasMoreResults)
{
Console.WriteLine($" Diagnostics {response.Diagnostics.ToString()}");
}
FeedResponse<SalesOrder> response = await resultSet.ReadNextAsync();
SalesOrder sale = response.First();
Console.WriteLine($"\n1.4.1 Account Number: {sale.AccountNumber}; Id: {sale.Id};");
if (response.Diagnostics != null)
{
Console.WriteLine($" Diagnostics {response.Diagnostics.ToString()}");
}

allSalesForAccount1.AddRange(response);
allSalesForAccount1.AddRange(response);
}
}

Console.WriteLine($"\n1.4.2 Query found {allSalesForAccount1.Count} items.");

// Use the same query as before but get the cosmos response message to access the stream directly
FeedIterator streamResultSet = container.GetItemQueryStreamIterator(
List<SalesOrder> allSalesForAccount1FromStream = new List<SalesOrder>();
using (FeedIterator streamResultSet = container.GetItemQueryStreamIterator(
query,
requestOptions: new QueryRequestOptions()
{
PartitionKey = new PartitionKey("Account1"),
MaxItemCount = 10,
MaxConcurrency = 1
});

List<SalesOrder> allSalesForAccount1FromStream = new List<SalesOrder>();
while (streamResultSet.HasMoreResults)
}))
{
using (ResponseMessage responseMessage = await streamResultSet.ReadNextAsync())
while (streamResultSet.HasMoreResults)
{
// Item stream operations do not throw exceptions for better performance
if (responseMessage.IsSuccessStatusCode)
{
dynamic streamResponse = FromStream<dynamic>(responseMessage.Content);
List<SalesOrder> salesOrders = streamResponse.Documents.ToObject<List<SalesOrder>>();
Console.WriteLine($"\n1.4.3 - Item Query via stream {salesOrders.Count}");
allSalesForAccount1FromStream.AddRange(salesOrders);
}
else
using (ResponseMessage responseMessage = await streamResultSet.ReadNextAsync())
{
Console.WriteLine($"Query item from stream failed. Status code: {responseMessage.StatusCode} Message: {responseMessage.ErrorMessage}");
// Item stream operations do not throw exceptions for better performance
if (responseMessage.IsSuccessStatusCode)
{
dynamic streamResponse = FromStream<dynamic>(responseMessage.Content);
List<SalesOrder> salesOrders = streamResponse.Documents.ToObject<List<SalesOrder>>();
Console.WriteLine($"\n1.4.3 - Item Query via stream {salesOrders.Count}");
allSalesForAccount1FromStream.AddRange(salesOrders);
}
else
{
Console.WriteLine($"Query item from stream failed. Status code: {responseMessage.StatusCode} Message: {responseMessage.ErrorMessage}");
}
}
}
}
Expand Down
Loading

0 comments on commit 6543b7b

Please sign in to comment.