Skip to content

0x8D03 is a transient "transfer already in progress" state, but is reported as 400 "Failed to start file download" #49

Description

@jordlee

Environment: ILCE-7M5 (CFCA6014E092) · USB · Camera Remote SDK V2.02.00 · darwin-arm64 (macOS 15) · server 3.0.0 · remote-transfer

Summary

0x8D03 (CrError_RemoteTransfer_GetContentsDataDisable) is a transient, retryable "a transfer is already in progress" condition, not a failure of the requested transfer. The server surfaces it as:

HTTP 400 {"message":"Failed to start file download: 0x00008D03","success":false}

That wording says the download failed and implies a permanent fault. Both are wrong: the request was simply issued while another transfer was in flight, and the identical request succeeds moments later.

Deterministic reproduction

Connect in remote-transfer, then:

Step Request Result
1 POST .../131082/2/download (67.8 MB) 202
2 POST .../131305/1/download — 0.3 s later, while step 1 is in flight 400 0x8D03
3 wait for step 1 to complete (~20 s)
4 repeat step 2 verbatim 202, completes normally

Recovery is immediate — a retry 2 s after the in-flight transfer finished already succeeded in my run. No reconnect, no restart, no replug.

Why this matters beyond the wording

This misreporting produced the wrong causal model in #40. There, one transfer hung permanently (a Linux-only defect), so every later transfer correctly reported "busy" — for the rest of the session. Read through this message, that looked like "one failed download latches the whole RemoteTransfer subsystem into 0x8D03", and the investigation went hunting for a latching mechanism that does not exist. See #40 for the correction.

A retryable-busy state reported as a hard failure is the kind of thing that costs a day of debugging exactly once per person who hits it.

Expected

  • 409 Conflict (or 503 with Retry-After) rather than 400.
  • A message that names the actual state and the remedy, e.g. "A transfer is already in progress on this camera. Retry when it completes — watch for transferProgress."
  • Ideally include the in-flight transfer's identity (content/file id) so a client can wait on the right event.

Related: the underlying lack of queueing is filed separately.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions