[bug-bash] print maps a missing item's HTTP 404 to exit 1 instead of documented not-found exit 5

Aberta Para iniciantes
#279 0 comentários 0 reações 0 responsáveis Ver no GitHub

Mantenedores costumam responder em até 1 dia

@mkrueger já está trabalhando nisso.

Desde 4/11/2026.

  • #288 de @mkrueger — aberto

Avaliação

Dificuldade
2/5
Tempo estimado
1-3 horas
Facilidade para iniciantes
78/100
Tipo de issue
Bug
Clareza
Claramente especificada
Status de atividade
Ativa
Stack de tecnologia
azure, cli, csharp
Domínio
cli, databases

Direção de pesquisa

Comece por PrintCommand.PrintItemAsync e seu ramo NotFound de ReadItemStreamAsync; em seguida, acompanhe como ShellExitCode mapeia erros de comando para códigos de saída. Confira o contrato documentado dos códigos de saída e os testes próximos para leituras pontuais. O trabalho estará concluído quando um item ausente ainda gerar a mensagem de erro amigável e retornar o código de saída 5.

Escrita pelo modelo de indexação a partir do texto da issue.

Descrição

bug bug-bash

Environment

Windows x64, CosmosDBShell 1.1.291-preview (db49321323).
Verified on a disposable container with partition key /pk, using an authorized
Azure CLI identity and Gateway connection mode.

Repro

The following creates a unique disposable shared-throughput database (400 RU/s)
and an empty container. Supply an authorized Azure NoSQL account using these
environment variables; no real endpoint or identity is included in this report:

# Set COSMOS_ENDPOINT, AZURE_SUBSCRIPTION_ID and COSMOS_RESOURCE_GROUP first.
foreach ($name in @('COSMOS_ENDPOINT', 'AZURE_SUBSCRIPTION_ID', 'COSMOS_RESOURCE_GROUP')) {
    if ([string]::IsNullOrWhiteSpace([Environment]::GetEnvironmentVariable($name))) {
        throw "Set $name to an authorized test account value before continuing."
    }
}
$package = "$env:USERPROFILE\.dotnet\tools\.store\cosmosdbshell\1.1.291-preview"
$shell = Join-Path $package 'cosmosdbshell.win-x64\1.1.291-preview\tools\net10.0\win-x64\CosmosDBShell.exe'
& $shell --version
$connection = @(
    '--connect', $env:COSMOS_ENDPOINT,
    '--connect-azure-cli', '--connect-mode', 'gateway',
    '--connect-subscription', $env:AZURE_SUBSCRIPTION_ID,
    '--connect-resource-group', $env:COSMOS_RESOURCE_GROUP,
    '--output', 'json', '--quiet'
)
$db = 'BugBash_Print_' + [guid]::NewGuid().ToString('N')
& $shell @connection -c "mkdb $db --scale=m --ru=400"
if ($LASTEXITCODE -ne 0) { throw 'Fixture database creation failed; stop.' }
& $shell @connection --database $db -c 'mkcon Items /pk'
if ($LASTEXITCODE -ne 0) { throw 'Fixture container creation failed; stop.' }

# Exact failing command. The new container is empty, so this item cannot exist.
& $shell @connection --database $db --container Items -c 'print absent p1'
$readExit = $LASTEXITCODE
"Observed exit code: $readExit"

Actual: Observed exit code 1. Expected: 5.

Expected

A point read that returns HTTP 404 maps to not-found exit code 5, as documented
in the CLI's exit-code contract.

Actual

The command returns exit code 1, with a JSON stderr error saying the item was
not found and suggesting the partition key be verified.

Observed direct live reproduction:

print absent p1

stderr:

{"status":"error","error":"Item with id 'absent' not found using partition key 'p1'. Verify the partition key value is correct."}

Also reproduced for an item correctly absent after atomic batch rollback, and
after a successful explicit item deletion. This is an exit-code classification
bug, not a batch rollback or item deletion failure.

Cleanup

Delete only the database created by the commands above:

& $shell @connection -c "rmdb $db true"

Investigation lead

PrintCommand.PrintItemAsync uses ReadItemStreamAsync. Its explicit NotFound
branch throws a plain CommandException without preserving the HTTP status or
an SDK exception. ShellExitCode therefore cannot recognize the original 404
and falls back to general failure.

The fix should preserve the useful friendly error message while retaining the
original status classification. No fix has been implemented.

Linguagem predominante
C#
Estrelas
4
Forks
7
Merge médio
1d 23h
PRs com merge (30d)
23

Preparar o ambiente

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Mais de Azure/CosmosDBShell

Todas as issues de Azure/CosmosDBShell

Issues semelhantes

Mais issues de C#

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.