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

Đang mở Phù hợp với người mới
#279 0 bình luận 0 reaction 0 người được giao Xem trên GitHub

Maintainer thường phản hồi trong vòng 1 ngày

@mkrueger đang làm issue này rồi.

Từ ngày 4/11/2026.

  • #288 của @mkrueger — đang mở

Đánh giá

Độ khó
2/5
Thời gian dự kiến
1-3 giờ
Mức phù hợp với người mới
78/100
Loại issue
Lỗi
Độ rõ ràng
Đặc tả rõ ràng
Mức độ hoạt động
Sôi nổi
Công nghệ
azure, cli, csharp
Lĩnh vực
cli, databases

Hướng nghiên cứu

Bắt đầu với PrintCommand.PrintItemAsync và nhánh NotFound của ReadItemStreamAsync, sau đó theo dõi cách ShellExitCode ánh xạ lỗi lệnh sang mã thoát. Kiểm tra quy ước mã thoát được ghi trong tài liệu và các bài kiểm thử gần đó cho thao tác đọc từng mục. Công việc hoàn tất khi mục không tồn tại vẫn hiển thị thông báo lỗi dễ hiểu và trả về mã thoát 5.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

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.

Ngôn ngữ chính
C#
Star
4
Fork
7
Merge trung bình
1 ngày 23 giờ
Pull request đã merge (30 ngày)
23

Chuẩn bị môi trường

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của Azure/CosmosDBShell

Tất cả issue của Azure/CosmosDBShell

Issue tương tự

Thêm issue về C#

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.