{"record":{"id":"a79877062212e793","repo":"hcengineering/platform","slug":"delete-is-not-implemented","errorCode":null,"errorMessage":"delete is not implemented","messagePattern":"delete is not implemented","errorType":"http","errorClass":null,"httpStatus":501,"severity":"error","filePath":"foundations/hulylake/server/src/handlers.rs","lineNumber":515,"sourceCode":"                let content_length = merge::content_length(parts);\n                match content_length {\n                    Some(content_length) => response.body(SizedStream::new(\n                        content_length as u64,\n                        stream::empty::<Result<_, io::Error>>().boxed_local(),\n                    )),\n                    None => response.finish(),\n                }\n            }\n        }\n    } else {\n        HttpResponse::NotFound().finish()\n    };\n\n    Ok(response)\n}\n\npub async fn delete(_path: Path<ObjectPath>) -> HandlerResult<HttpResponse> {\n    unimplemented!(\"delete is not implemented\")\n}\n\nfn objectpart_etag(parts: &Vec<ObjectPart<PartData>>) -> Option<EntityTag> {\n    parts\n        .last()\n        .map(|p| EntityTag::new_strong(p.data.etag.to_owned()))\n}\n\nfn objectpart_date(parts: &Vec<ObjectPart<PartData>>) -> Option<SystemTime> {\n    parts.last().map(|p| p.data.date).map(|d| d.into())\n}\n\nfn objectpart_strategy(parts: &Vec<ObjectPart<PartData>>) -> Option<MergeStrategy> {\n    parts.first().map(|p| p.data.merge_strategy.unwrap())\n}\n\nfn objectpart_accept_ranges(parts: &Vec<ObjectPart<PartData>>) -> Option<&str> {\n    let strategy = objectpart_strategy(parts)?;","sourceCodeStart":497,"sourceCodeEnd":533,"githubUrl":"https://github.com/hcengineering/platform/blob/63e28dc96483967b2fc21c881b3f1023c1de7718/foundations/hulylake/server/src/handlers.rs#L497-L533","documentation":"The DELETE object handler in the hulylake S3-compatible server is a stub: it immediately panics with unimplemented!, signaling the operation has no implementation yet. Any DELETE request to an object path reaches this handler and aborts the request task.","triggerScenarios":"Sending an HTTP DELETE request for an object (e.g. s3-style DeleteObject) to the hulylake server; any client (AWS SDK, mc, s3cmd) performing object deletion against this endpoint.","commonSituations":"Lifecycle or cleanup jobs that delete stale objects; users testing the S3 API surface of hulylake; applications assuming full S3 compatibility and issuing deletes.","solutions":["Do not issue DELETE requests against hulylake until the handler is implemented","Implement the delete handler (remove object data and metadata, return proper response)","Use a different storage backend that supports deletion for workflows requiring it"],"exampleFix":"// before\npub async fn delete(_path: Path<ObjectPath>) -> HandlerResult<HttpResponse> {\n    unimplemented!(\"delete is not implemented\")\n}\n// after\npub async fn delete(path: Path<ObjectPath>) -> HandlerResult<HttpResponse> {\n    service::delete_object(&path.object).await?;\n    Ok(HttpResponse::NoContent().finish())\n}","handlingStrategy":"fallback","validationCode":"const res = await fetch(`${base}/${key}`, { method: 'DELETE' })\nif (!res.ok && res.status >= 500) {\n  // hulylake delete is unimplemented; route to a backend that supports it\n}","typeGuard":null,"tryCatchPattern":"try {\n  await deleteObject(path)\n} catch (err) {\n  logger.warn('delete unsupported on hulylake, falling back', { path, err })\n  await fallbackStorage.delete(path)\n}","preventionTips":["Check backend feature support matrix before issuing S3 verbs","Keep deletion workflows behind an abstraction with per-backend capability flags","Track upstream implementation of the delete handler and remove the workaround"],"tags":["rust","unimplemented","s3","api"],"backgroundTag":"not-implemented-endpoint","analyzedSha":"63e28dc96483967b2fc21c881b3f1023c1de7718","analyzedAt":"2026-08-29T15:21:27.377Z","schemaVersion":2},"datasetVersion":"2026-08-29T17:17:51.833Z"}