{"record":{"id":"7f313cb17e651beb","repo":"risingwavelabs/risingwave","slug":"schema-history-putobject-timed-out-after-y","errorCode":null,"errorMessage":"[Schema history] putObject timed out after {:?}. You can adjust it via {} (ms), or set it to 0 to disable.","messagePattern":"\\[Schema history\\] putObject timed out after (.+?)\\. You can adjust it via (.+?) \\(ms\\), or set it to 0 to disable\\.","errorType":"exception","errorClass":"ObjectError","httpStatus":null,"severity":"error","filePath":"src/jni_core/src/opendal_schema_history.rs","lineNumber":170,"sourceCode":"        JAVA_BINDING_ASYNC_RUNTIME\n            .block_on(async {\n                let f = async {\n                    let object_store = get_object_store().await;\n                    object_store.upload(&object_name, data.into()).await\n                };\n\n                match total_timeout {\n                    Some(timeout) => match tokio::time::timeout(timeout, f).await {\n                        Ok(res) => res,\n                        Err(_) => Err(ObjectError::timeout(format!(\n                            \"[Schema history] putObject timed out after {:?}. You can adjust it via {} (ms), or set it to 0 to disable.\",\n                            timeout, PUT_OBJECT_TOTAL_TIMEOUT_ENV\n                        ))),\n                    },\n                    None => f.await,\n                }\n            })\n            .map_err(|e| anyhow!(e))?;\n        Ok(())\n    });\n}\n\n#[unsafe(no_mangle)]\npub extern \"system\" fn Java_com_risingwave_java_binding_Binding_getObject<'a>(\n    env: EnvParam<'a>,\n    object_name: JString<'a>,\n) -> JByteArray<'a> {\n    execute_and_catch(env, move |env: &mut EnvParam<'_>| {\n        let object_name = env.get_string(&object_name)?;\n        let object_name: Cow<'_, str> = (&object_name).into();\n\n        // Security check: validate file extension before any operation\n        validate_dat_file_extension(&object_name).map_err(|e| anyhow!(e))?;\n        let object_name = prepend_data_directory(&object_name);\n        let result = JAVA_BINDING_ASYNC_RUNTIME\n            .block_on(async {","sourceCodeStart":152,"sourceCodeEnd":188,"githubUrl":"https://github.com/risingwavelabs/risingwave/blob/6469eb736d691e8e9b8a419a57edd6429ca77417/src/jni_core/src/opendal_schema_history.rs#L152-L188","documentation":"putObject wraps the object-store upload in tokio::time::timeout with a 3s default (RW_CDC_SCHEMA_HISTORY_PUT_OBJECT_TIMEOUT_MS). When the upload exceeds this deadline, an ObjectError::timeout is raised with this message telling the operator which env var to tune (or set to 0 to disable).","triggerScenarios":"Calling Binding.putObject when the remote object store (S3/GCS/Azure) takes longer than the configured timeout in milliseconds to complete the upload.","commonSituations":"Slow or throttled S3 endpoints, large schema-history payloads, high network latency, or the 3000ms default being too tight for a region with high RTT.","solutions":["Set RW_CDC_SCHEMA_HISTORY_PUT_OBJECT_TIMEOUT_MS to a larger value (e.g. 30000) in the JVM environment.","Set RW_CDC_SCHEMA_HISTORY_PUT_OBJECT_TIMEOUT_MS=0 to disable the timeout entirely.","Check network connectivity/latency to the object store endpoint and retry the operation.","Reduce payload size or use a closer object store region."],"exampleFix":"// before\n// (env) RW_CDC_SCHEMA_HISTORY_PUT_OBJECT_TIMEOUT_MS unset (default 3000)\n// after\n// (env) RW_CDC_SCHEMA_HISTORY_PUT_OBJECT_TIMEOUT_MS=30000","handlingStrategy":"retry","validationCode":"String t = System.getenv(\"RW_CDC_SCHEMA_HISTORY_PUT_OBJECT_TIMEOUT_MS\"); long timeoutMs = (t == null) ? 3000 : Long.parseLong(t.trim());","typeGuard":null,"tryCatchPattern":"try { binding.putObject(name, bytes); } catch (RisingWaveException e) { if (e.getMessage().contains(\"timed out\")) { /* retry or raise timeout */ } }","preventionTips":["Set RW_CDC_SCHEMA_HISTORY_PUT_OBJECT_TIMEOUT_MS generously (e.g. 30000) for high-latency storage","Set it to 0 to disable the deadline when uploads are large","Monitor object store latency and co-locate the compute with the store region"],"tags":["timeout","object-store","network"],"backgroundTag":"request-timeout","analyzedSha":"6469eb736d691e8e9b8a419a57edd6429ca77417","analyzedAt":"2026-09-11T21:06:21.487Z","contentChangedAt":"2026-09-11T21:06:21.487Z","schemaVersion":2},"datasetVersion":"2026-09-14T16:17:12.679Z"}