Skip to content

Commit 96190e1

Browse files
committed
Fixes status codes
1 parent 402f9aa commit 96190e1

2 files changed

Lines changed: 169 additions & 1 deletion

File tree

Microsoft.Azure.Cosmos/src/Tracing/TraceWriter.TraceJsonWriter.cs

Lines changed: 112 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -394,7 +394,7 @@ public void Visit(StoreResult storeResult)
394394
this.jsonWriter.WriteStringValue(storeResult.StatusCode.ToString());
395395

396396
this.jsonWriter.WriteFieldName(nameof(storeResult.SubStatusCode));
397-
this.jsonWriter.WriteStringValue(storeResult.SubStatusCode.ToString());
397+
this.jsonWriter.WriteStringValue(this.GetSubStatusCodeString(storeResult.StatusCode, storeResult.SubStatusCode));
398398

399399
this.jsonWriter.WriteFieldName(nameof(storeResult.LSN));
400400
this.jsonWriter.WriteNumberValue(storeResult.LSN);
@@ -452,6 +452,116 @@ public void Visit(StoreResult storeResult)
452452
this.jsonWriter.WriteObjectEnd();
453453
}
454454

455+
internal string GetSubStatusCodeString(StatusCodes statusCode, SubStatusCodes subStatusCode)
456+
{
457+
if ((int)subStatusCode == 1002)
458+
{
459+
return statusCode == StatusCodes.NotFound
460+
? "ReadSessionNotAvailable"
461+
: SubStatusCodes.PartitionKeyRangeGone.ToString();
462+
}
463+
464+
if ((int)subStatusCode == 2001)
465+
{
466+
return statusCode == StatusCodes.NoContent
467+
? "MissedTargetLsn"
468+
: SubStatusCodes.SplitIsDisabled.ToString();
469+
}
470+
471+
if ((int)subStatusCode == 2002)
472+
{
473+
return statusCode == StatusCodes.NoContent
474+
? "MissedTargetLsnOver100"
475+
: SubStatusCodes.CollectionsInPartitionGotUpdated.ToString();
476+
}
477+
478+
if ((int)subStatusCode == 2003)
479+
{
480+
return statusCode == StatusCodes.NoContent
481+
? "MissedTargetLsnOver1000"
482+
: SubStatusCodes.CanNotAcquirePKRangesLock.ToString();
483+
}
484+
485+
if ((int)subStatusCode == 2004)
486+
{
487+
return statusCode == StatusCodes.NoContent
488+
? "MissedTargetLsnOver10000"
489+
: SubStatusCodes.ResourceNotFound.ToString();
490+
}
491+
492+
if ((int)subStatusCode == 2011)
493+
{
494+
return statusCode == StatusCodes.NoContent
495+
? "MissedTargetGlobalCommittedLsn"
496+
: SubStatusCodes.StorageSplitConflictingWithNWayThroughputSplit.ToString();
497+
}
498+
499+
if ((int)subStatusCode == 2012)
500+
{
501+
return statusCode == StatusCodes.NoContent
502+
? "MissedTargetGlobalCommittedLsnOver100"
503+
: SubStatusCodes.MergeIsDisabled.ToString();
504+
}
505+
506+
if ((int)subStatusCode == 1004)
507+
{
508+
return statusCode == StatusCodes.BadRequest
509+
? "CrossPartitionQueryNotServable"
510+
: SubStatusCodes.ConfigurationNameNotFound.ToString();
511+
}
512+
513+
if ((int)subStatusCode == 1007)
514+
{
515+
return statusCode == StatusCodes.Gone
516+
? "CompletingSplit"
517+
: SubStatusCodes.InsufficientBindablePartitions.ToString();
518+
}
519+
520+
if ((int)subStatusCode == 1008)
521+
{
522+
return statusCode == StatusCodes.Gone
523+
? "CompletingPartitionMigration"
524+
: SubStatusCodes.DatabaseAccountNotFound.ToString();
525+
}
526+
527+
if ((int)subStatusCode == 1005)
528+
{
529+
return statusCode == StatusCodes.NotFound
530+
? "ConfigurationPropertyNotFound"
531+
: SubStatusCodes.ProvisionLimitReached.ToString();
532+
}
533+
534+
if ((int)subStatusCode == 3207)
535+
{
536+
return statusCode == StatusCodes.Conflict
537+
? "ConfigurationNameAlreadyExists"
538+
: SubStatusCodes.PrepareTimeLimitExceeded.ToString();
539+
}
540+
541+
if ((int)subStatusCode == 6001)
542+
{
543+
return statusCode == StatusCodes.ServiceUnavailable
544+
? "AggregatedHealthStateError"
545+
: SubStatusCodes.PartitionMigrationWaitForFullSyncReceivedInternalServerErrorDuringCompleteMigrationFromBackend.ToString();
546+
}
547+
548+
if ((int)subStatusCode == 6002)
549+
{
550+
return statusCode == StatusCodes.ServiceUnavailable
551+
? "ApplicationHealthStateError"
552+
: SubStatusCodes.PartitionMigrationWaitForFullSyncReceivedInternalServerErrorDuringAbortMigrationFromBackend.ToString();
553+
}
554+
555+
if ((int)subStatusCode == 6003)
556+
{
557+
return statusCode == StatusCodes.ServiceUnavailable
558+
? "HealthStateError"
559+
: SubStatusCodes.PartitionMigrationFinalizeMigrationsDidNotCompleteInTenRetries.ToString();
560+
}
561+
562+
return subStatusCode.ToString();
563+
}
564+
455565
public void Visit(PartitionKeyRangeCacheTraceDatum partitionKeyRangeCacheTraceDatum)
456566
{
457567
this.jsonWriter.WriteObjectStart();
@@ -602,5 +712,6 @@ private void WriteDateTimeStringValue(DateTime value)
602712
}
603713

604714
}
715+
605716
}
606717
}

Microsoft.Azure.Cosmos/tests/Microsoft.Azure.Cosmos.EmulatorTests/Tracing/EndToEndTraceWriterBaselineTests.cs

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ namespace Microsoft.Azure.Cosmos.EmulatorTests.Tracing
1919
using Microsoft.Azure.Cosmos.ChangeFeed;
2020
using Microsoft.Azure.Cosmos.CosmosElements;
2121
using Microsoft.Azure.Cosmos.Diagnostics;
22+
using Microsoft.Azure.Cosmos.FaultInjection;
2223
using Microsoft.Azure.Cosmos.SDK.EmulatorTests;
2324
using Microsoft.Azure.Cosmos.Services.Management.Tests.BaselineTest;
2425
using Microsoft.Azure.Cosmos.Telemetry;
@@ -716,6 +717,62 @@ public async Task QueryAsync()
716717
this.ExecuteTestSuite(inputs);
717718
}
718719

720+
[TestMethod]
721+
public async Task ValidateCorrectSubStatusCodeTestAsync()
722+
{
723+
FaultInjectionCondition condition = new FaultInjectionConditionBuilder()
724+
.WithConnectionType(FaultInjectionConnectionType.Direct)
725+
.WithOperationType(FaultInjectionOperationType.ReadItem)
726+
.Build();
727+
728+
FaultInjectionServerErrorResult result = new FaultInjectionServerErrorResultBuilder(FaultInjectionServerErrorType.ReadSessionNotAvailable)
729+
.Build();
730+
731+
FaultInjectionRule rule = new FaultInjectionRuleBuilder("readSessionNotAvailable", condition, result)
732+
.Build();
733+
734+
FaultInjector injector = new FaultInjector(new List<FaultInjectionRule> { rule });
735+
736+
rule.Disable();
737+
738+
CosmosClientOptions clientOptions = new CosmosClientOptions()
739+
{
740+
ConnectionMode = ConnectionMode.Direct,
741+
ConsistencyLevel = ConsistencyLevel.Eventual,
742+
FaultInjector = injector,
743+
};
744+
745+
(string endpoint, string authKey) = TestCommon.GetAccountInfo();
746+
747+
using (CosmosClient client = new CosmosClient(endpoint, authKey, clientOptions))
748+
{
749+
750+
Database testDatabase = await client.CreateDatabaseAsync("testDatabase");
751+
Container testContainer = await testDatabase.CreateContainerAsync(new ContainerProperties("testContainer", "/pk"));
752+
753+
ToDoActivity testItem = ToDoActivity.CreateRandomToDoActivity();
754+
await testContainer.CreateItemAsync(testItem, new PartitionKey(testItem.pk));
755+
756+
rule.Enable();
757+
758+
try
759+
{
760+
ItemResponse<ToDoActivity> ir = await testContainer.ReadItemAsync<ToDoActivity>(testItem.id, new PartitionKey(testItem.pk));
761+
Console.WriteLine(ir.Diagnostics);
762+
}
763+
catch (CosmosException ex)
764+
{
765+
Console.WriteLine(ex.Diagnostics);
766+
Assert.IsTrue(ex.Diagnostics.ToString().Contains("ReadSessionNotAvailable"));
767+
}
768+
finally
769+
{
770+
await testDatabase.DeleteAsync();
771+
}
772+
}
773+
}
774+
775+
719776
[TestMethod]
720777
public async Task ValidateInvalidCredentialsTraceAsync()
721778
{

0 commit comments

Comments
 (0)