{"record":{"id":"83651f7f04795cdc","repo":"risingwavelabs/risingwave","slug":"object-not-found","errorCode":null,"errorMessage":"object {} not found","messagePattern":"object (.+?) not found","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/frontend/src/handler/vacuum.rs","lineNumber":118,"sourceCode":"            if let Some(connector_type) = sink.properties.get(CONNECTOR_TYPE_KEY) {\n                if connector_type == \"iceberg\" {\n                    sink.id\n                } else {\n                    return Err(ErrorCode::InvalidInputSyntax(format!(\n                        \"VACUUM can only be used on Iceberg sinks, but sink '{}' is of type '{}'\",\n                        real_object_name, connector_type\n                    ))\n                    .into());\n                }\n            } else {\n                return Err(ErrorCode::InvalidInputSyntax(format!(\n                    \"VACUUM can only be used on Iceberg sinks, but sink '{}' has no connector type specified\",\n                    real_object_name\n                ))\n                    .into());\n            }\n        } else {\n            bail!(\"object {} not found\", real_object_name);\n        }\n    };\n\n    let mut shutdown_rx = session.reset_cancel_query_flag();\n\n    if full {\n        // VACUUM FULL compacts data files before rewriting the resulting manifests.\n        await_cancelable(\n            &mut shutdown_rx,\n            session.env().meta_client().compact_iceberg_table(sink_id),\n        )\n        .await?;\n    }\n\n    // Run the same eligibility check as periodic manifest maintenance immediately,\n    // then expire snapshots so replaced manifests can be cleaned up.\n    await_cancelable(\n        &mut shutdown_rx,","sourceCodeStart":100,"sourceCodeEnd":136,"githubUrl":"https://github.com/risingwavelabs/risingwave/blob/6469eb736d691e8e9b8a419a57edd6429ca77417/src/frontend/src/handler/vacuum.rs#L100-L136","documentation":"handle_vacuum looks up the requested object (expected to be an Iceberg sink) by name; if no catalog object matches the given name, it bails with \"object {} not found\". VACUUM only operates on Iceberg sinks, so the name must resolve to a known sink in the database.","triggerScenarios":"Running `VACUUM '<name>'` (or the handler API) where real_object_name does not match any existing sink/table in the catalog.","commonSituations":"Typos in the sink name, the sink was dropped before the VACUUM ran, connecting to the wrong database/cluster, or casing mismatches since names are resolved exactly.","solutions":["Run `SHOW SINKS` and verify the exact sink name before running VACUUM.","Quote the identifier with correct case if it contains uppercase or special characters.","Confirm the VACUUM command is issued against the database/cluster that owns the sink.","Recreate the sink if it was dropped and then run VACUUM."],"exampleFix":"// before\nVACUUM 'my_iceberg_sink';\n// after\nSHOW SINKS; -- confirm name exists first\nVACUUM 'my_iceberg_sink';","handlingStrategy":"validation","validationCode":"-- run before VACUUM\nSELECT sink_name FROM rw_catalog.rw_sinks WHERE sink_name = 'my_iceberg_sink';","typeGuard":null,"tryCatchPattern":"match vacuum_result {\n    Err(e) if e.to_string().contains(\"not found\") => eprintln!(\"Sink does not exist; check SHOW SINKS\"),\n    other => other?,\n}","preventionTips":["Always list sinks (SHOW SINKS) and copy the exact name.","Use consistent lowercase identifier naming to avoid case issues.","Check the target sink has a connector type (Iceberg) before vacuuming.","Run VACUUM against the same database/connection used to create the sink."],"tags":["sql","vacuum","catalog","iceberg"],"backgroundTag":"entity-not-found","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"}