hcengineering/platform · error

delete is not implemented

Error message

delete is not implemented

What it means

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.

Source

Thrown at foundations/hulylake/server/src/handlers.rs:515

                let content_length = merge::content_length(parts);
                match content_length {
                    Some(content_length) => response.body(SizedStream::new(
                        content_length as u64,
                        stream::empty::<Result<_, io::Error>>().boxed_local(),
                    )),
                    None => response.finish(),
                }
            }
        }
    } else {
        HttpResponse::NotFound().finish()
    };

    Ok(response)
}

pub async fn delete(_path: Path<ObjectPath>) -> HandlerResult<HttpResponse> {
    unimplemented!("delete is not implemented")
}

fn objectpart_etag(parts: &Vec<ObjectPart<PartData>>) -> Option<EntityTag> {
    parts
        .last()
        .map(|p| EntityTag::new_strong(p.data.etag.to_owned()))
}

fn objectpart_date(parts: &Vec<ObjectPart<PartData>>) -> Option<SystemTime> {
    parts.last().map(|p| p.data.date).map(|d| d.into())
}

fn objectpart_strategy(parts: &Vec<ObjectPart<PartData>>) -> Option<MergeStrategy> {
    parts.first().map(|p| p.data.merge_strategy.unwrap())
}

fn objectpart_accept_ranges(parts: &Vec<ObjectPart<PartData>>) -> Option<&str> {
    let strategy = objectpart_strategy(parts)?;

View on GitHub (pinned to 63e28dc964)

Solutions

  1. Do not issue DELETE requests against hulylake until the handler is implemented
  2. Implement the delete handler (remove object data and metadata, return proper response)
  3. Use a different storage backend that supports deletion for workflows requiring it

Example fix

// before
pub async fn delete(_path: Path<ObjectPath>) -> HandlerResult<HttpResponse> {
    unimplemented!("delete is not implemented")
}
// after
pub async fn delete(path: Path<ObjectPath>) -> HandlerResult<HttpResponse> {
    service::delete_object(&path.object).await?;
    Ok(HttpResponse::NoContent().finish())
}
Defensive patterns

Strategy: fallback

Validate before calling

const res = await fetch(`${base}/${key}`, { method: 'DELETE' })
if (!res.ok && res.status >= 500) {
  // hulylake delete is unimplemented; route to a backend that supports it
}

Try / catch

try {
  await deleteObject(path)
} catch (err) {
  logger.warn('delete unsupported on hulylake, falling back', { path, err })
  await fallbackStorage.delete(path)
}

Prevention

When it happens

Trigger: 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.

Common situations: Lifecycle or cleanup jobs that delete stale objects; users testing the S3 API surface of hulylake; applications assuming full S3 compatibility and issuing deletes.

Related errors


AI-assisted analysis of hcengineering/platform@63e28dc964 (2026-08-29). Data as JSON: /api/errors/a79877062212e793. Report an issue: GitHub.