{"record":{"id":"ca7e6c97a03276cb","repo":"aeron-io/aeron","slug":"failed-to-send-get-start-position-request","errorCode":null,"errorMessage":"failed to send get start position request","messagePattern":"failed to send get start position request","errorType":"exception","errorClass":"ArchiveException","httpStatus":null,"severity":"error","filePath":"aeron-archive/src/main/java/io/aeron/archive/client/AeronArchive.java","lineNumber":1522,"sourceCode":"     * Get the start position for a recording.\n     *\n     * @param recordingId of the recording for which the position is required.\n     * @return the start position of a recording.\n     * @see #getStopPosition(long)\n     */\n    public long getStartPosition(final long recordingId)\n    {\n        lock.lock();\n        try\n        {\n            ensureConnected();\n            ensureNotReentrant();\n\n            lastCorrelationId = aeron.nextCorrelationId();\n\n            if (!archiveProxy.getStartPosition(recordingId, lastCorrelationId, controlSessionId))\n            {\n                throw new ArchiveException(\"failed to send get start position request\");\n            }\n\n            return pollForResponse(lastCorrelationId);\n        }\n        finally\n        {\n            lock.unlock();\n        }\n    }\n\n    /**\n     * Get the position recorded for an active recording. If no active recording then return {@link #NULL_POSITION}.\n     *\n     * @param recordingId of the active recording for which the position is required.\n     * @return the recorded position for the active recording or {@link #NULL_POSITION} if recording not active.\n     * @see #getStopPosition(long)\n     */\n    public long getRecordingPosition(final long recordingId)","sourceCodeStart":1504,"sourceCodeEnd":1540,"githubUrl":"https://github.com/aeron-io/aeron/blob/6d60124e15e35c11b49ba2e3c2c2858a09a18803/aeron-archive/src/main/java/io/aeron/archive/client/AeronArchive.java#L1504-L1540","documentation":"AeronArchive.getStartPosition() throws this ArchiveException when the get-start-position request could not be sent to the archive control-request publication. archiveProxy.getStartPosition() returned false, meaning the offer failed because the publication is not connected, has been closed, or was back-pressured throughout the proxy's retry window, so pollForResponse never runs.","triggerScenarios":"Calling getStartPosition(recordingId) when the archive is unreachable, the control session has been closed or timed out, the control publication's terminal buffer is full of unsent commands, or the control channel configuration is wrong.","commonSituations":"Position lookups during archive restarts or failover; clients holding an archive session past the archive's session timeout; monitoring loops polling start positions faster than the control stream drains.","solutions":["Verify archive availability and matching control-channel configuration (endpoint, aeron.dir).","Retry getStartPosition with backoff; transient back-pressure is the most common cause.","Recreate the archive session with AeronArchive.connect() if the control session died.","Rate-limit position polling loops to keep the control publication from saturating.","Inspect archive-side logs for the session close or publication failure that caused the rejected offer."],"exampleFix":null,"handlingStrategy":"retry","validationCode":"if (!archive.archiveProxy().controlPublication().isConnected()) {\n    throw new IllegalStateException(\"archive control publication not connected\");\n}","typeGuard":null,"tryCatchPattern":"try {\n    long start = archive.getStartPosition(recordingId);\n} catch (ArchiveException e) {\n    if (e.getMessage().contains(\"failed to send get start position request\")) {\n        Thread.sleep(backoffMs); // retry or reconnect\n    } else { throw e; }\n}","preventionTips":["Verify archive health before starting position-monitoring loops.","Cap polling frequency to avoid saturating the control publication.","Use a retry helper with exponential backoff around all archive queries.","Reconnect the session promptly when the archive reports session closure."],"tags":["aeron-archive","backpressure","control-channel","position"],"backgroundTag":"api-request-failed","analyzedSha":"6d60124e15e35c11b49ba2e3c2c2858a09a18803","analyzedAt":"2026-09-12T11:17:07.683Z","contentChangedAt":"2026-09-12T11:17:07.683Z","schemaVersion":2},"datasetVersion":"2026-09-15T23:17:13.987Z"}