You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
RemoteStreamingResultSet: rebuild the typed exception from the in-band error line's status/exception/exceptionArgs #8874
#8235 makes the in-band error line of a streamed query (Accept: application/x-ndjson on GET/POST /api/v1/query and POST /api/v1/command) carry status, exception and exceptionArgs, decided by the same classifyError the buffered encoding answers with.
The Java driver does not read them yet: RemoteStreamingResultSet.hasNext (network module) reads only error.message and throws a plain RemoteException, while the buffered path (RemoteHttpComponent.manageException) rebuilds ConcurrentModificationException, DuplicatedKeyException, RecordNotFoundException, etc. So a caller using the streamed encoding still cannot catch a retryable conflict as a NeedRetryException.
What to do
Rebuild the typed exception from exception/exceptionArgs (reusing the manageException mapping) when the streamed error line carries them, falling back to RemoteException for a server that predates #8235.
Related: PR #9475 (#8899) adds a retryAfter member (integer seconds) to the in-band error line of both NDJSON streams for a retryable refusal (503 RetryLater, 409 in-flight), and in production mode the query line's message is now the classified label rather than the raw text. A driver-side rebuild of the typed exception here can key on status/exception/exceptionArgs and use retryAfter for the back-off.
Fixed by #9472. queryStream() and commandStream() on RemoteDatabase now throw the same typed exception the buffered path throws when the server reports a failure mid-stream: ConcurrentModificationException (retryable), DuplicatedKeyException, RecordNotFoundException, SecurityException, or NeedRetryException for a 503 with no detail. A server older than #8235, an exception type the client does not know, or malformed exception arguments still fall back to the generic RemoteException.
Still open: the buffered (non-streaming) error path has the same weakness with malformed exception arguments, tracked in #9473.
❤️ Thanks for helping make ArcadeDB better! ArcadeDB is free and open source, sustained by its community. If it's useful to you or your company, please consider becoming a sponsor to keep development going.
Activity
address review: log an unreadable streamed error line at WARNING, doc…
robfrank commentedon Oct 7, 2026
Related: PR #9475 (#8899) adds a
retryAftermember (integer seconds) to the in-banderrorline of both NDJSON streams for a retryable refusal (503 RetryLater, 409 in-flight), and in production mode the query line'smessageis now the classified label rather than the raw text. A driver-side rebuild of the typed exception here can key onstatus/exception/exceptionArgsand useretryAfterfor the back-off.feat(#8874): rebuild the typed exception from the streamed error line (…
robfrank commentedon Oct 8, 2026
Fixed by #9472.
queryStream()andcommandStream()onRemoteDatabasenow throw the same typed exception the buffered path throws when the server reports a failure mid-stream:ConcurrentModificationException(retryable),DuplicatedKeyException,RecordNotFoundException,SecurityException, orNeedRetryExceptionfor a 503 with no detail. A server older than #8235, an exception type the client does not know, or malformed exception arguments still fall back to the genericRemoteException.Still open: the buffered (non-streaming) error path has the same weakness with malformed exception arguments, tracked in #9473.
❤️ Thanks for helping make ArcadeDB better! ArcadeDB is free and open source, sustained by its community. If it's useful to you or your company, please consider becoming a sponsor to keep development going.
feat(#8874): rebuild the typed exception from the streamed error line (…