{"record":{"id":"6337bf8ad5465e45","repo":"apache/pulsar","slug":"timeout-during-delete-cursors-operation","errorCode":null,"errorMessage":"Timeout during delete-cursors operation","messagePattern":"Timeout during delete-cursors operation","errorType":"exception","errorClass":"ManagedLedgerException","httpStatus":null,"severity":"error","filePath":"managed-ledger/src/main/java/org/apache/bookkeeper/mledger/impl/ManagedLedgerImpl.java","lineNumber":1165,"sourceCode":"        }\n        final Result result = new Result();\n\n        asyncDeleteCursor(name, new DeleteCursorCallback() {\n            @Override\n            public void deleteCursorComplete(Object ctx) {\n                counter.countDown();\n            }\n\n            @Override\n            public void deleteCursorFailed(ManagedLedgerException exception, Object ctx) {\n                result.exception = exception;\n                counter.countDown();\n            }\n\n        }, null);\n\n        if (!counter.await(AsyncOperationTimeoutSeconds, TimeUnit.SECONDS)) {\n            throw new ManagedLedgerException(\"Timeout during delete-cursors operation\");\n        }\n\n        if (result.exception != null) {\n            log.error().exception(result.exception).log(\"Deleting cursor\");\n            throw result.exception;\n        }\n    }\n\n    @Override\n    public ManagedCursor newNonDurableCursor(Position startCursorPosition) throws ManagedLedgerException {\n        return newNonDurableCursor(\n            startCursorPosition,\n            \"non-durable-cursor-\" + UUID.randomUUID());\n    }\n\n    @Override\n    public ManagedCursor newNonDurableCursor(Position startPosition, String subscriptionName)\n            throws ManagedLedgerException {","sourceCodeStart":1147,"sourceCodeEnd":1183,"githubUrl":"https://github.com/apache/pulsar/blob/820761864ed8e2a7d2e52dd9763ad2ae117c1395/managed-ledger/src/main/java/org/apache/bookkeeper/mledger/impl/ManagedLedgerImpl.java#L1147-L1183","documentation":"VALIDATION enforces that managedLedgerOffloadMaxBlockSizeInBytes is at least 5MB (5 * 1024 * 1024), matching most object-storage part/upload minimums, and throws IllegalArgumentException for smaller values. Offload uses multipart/block uploads whose parts must not be below the provider's minimum size.","triggerScenarios":"Starting offload with TieredStorageConfiguration.getMaxBlockSizeInBytes() set to a value below 5242880 bytes — e.g. managedLedgerOffloadMaxBlockSizeInBytes=1048576 (1MB).","commonSituations":"Setting the block size to 1MB or 4MB in broker.conf to try to reduce memory usage or to speed up small-ledger offloads, not realizing the 5MB provider minimum; unit confusion (entering KB instead of bytes).","solutions":["Set managedLedgerOffloadMaxBlockSizeInBytes to at least 5242880 (5MB), e.g. 67108864 (64MB) which is the usual default.","If you intended a smaller unit, convert: 10MB = 10485760 bytes.","To reduce memory, lower managedLedgerOffloadMemoryBufferSize or other buffers instead of the min block size."],"exampleFix":"// before: broker.conf\nmanagedLedgerOffloadMaxBlockSizeInBytes=1048576  # 1MB -> rejected\n\n// after:\nmanagedLedgerOffloadMaxBlockSizeInBytes=67108864  # 64MB","handlingStrategy":"validation","validationCode":"int minBlock = 5 * 1024 * 1024;\nif (config.getMaxBlockSizeInBytes() < minBlock) {\n    throw new IllegalStateException(\"managedLedgerOffloadMaxBlockSizeInBytes must be >= 5242880 (5MB), got \" + config.getMaxBlockSizeInBytes());\n}","typeGuard":null,"tryCatchPattern":"try {\n    provider.validate(tieringConfig);\n} catch (IllegalArgumentException e) {\n    if (e.getMessage().contains(\"cannot be less than 5MB\")) {\n        log.error(\"Raise managedLedgerOffloadMaxBlockSizeInBytes to at least 5242880 bytes\");\n    }\n    throw e;\n}","preventionTips":["Never configure block sizes below 5MB; 64MB is the safe default.","Remember the value is in bytes, not KB/MB — compute with explicit expressions.","Note the minimum mirrors object-storage multipart upload part limits.","To cut memory use, tune managedLedgerOffloadMemoryBufferSize instead."],"tags":["configuration","validation","offload","block-size"],"backgroundTag":"config-value-out-of-range","analyzedSha":"820761864ed8e2a7d2e52dd9763ad2ae117c1395","analyzedAt":"2026-09-06T00:14:20.138Z","contentChangedAt":"2026-09-06T00:14:20.138Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}