From 9c8879d8bb9e814b9f9aef0e2391633dd38462c3 Mon Sep 17 00:00:00 2001 From: Arnaud Date: Wed, 1 Oct 2025 09:54:15 +0200 Subject: [PATCH] Add storage delete (block or dataset delete) --- examples/golang/codex.go | 25 +++++++++++++++++++ .../requests/node_storage_request.nim | 21 +++++++++++++--- 2 files changed, 43 insertions(+), 3 deletions(-) diff --git a/examples/golang/codex.go b/examples/golang/codex.go index 26b2f009..79714e49 100644 --- a/examples/golang/codex.go +++ b/examples/golang/codex.go @@ -156,6 +156,10 @@ package main return codex_storage_space(codexCtx, (CodexCallback) callback, resp); } + static int cGoCodexStorageDelete(void* codexCtx, char* cid, void* resp) { + return codex_storage_delete(codexCtx, cid, (CodexCallback) callback, resp); + } + static int cGoCodexStart(void* codexCtx, void* resp) { return codex_start(codexCtx, (CodexCallback) callback, resp); } @@ -1027,6 +1031,21 @@ func (self CodexNode) CodexStorageSpace() (CodexSpace, error) { return space, err } +func (self CodexNode) CodexStorageDelete(cid string) error { + bridge := newBridgeCtx() + defer bridge.free() + + var cCid = C.CString(cid) + defer C.free(unsafe.Pointer(cCid)) + + if C.cGoCodexStorageDelete(self.ctx, cCid, bridge.resp) != C.RET_OK { + return bridge.CallError("cGoCodexStorageDelete") + } + + _, err := bridge.wait() + return err +} + func (self CodexNode) CodexStart() error { bridge := newBridgeCtx() defer bridge.free() @@ -1286,6 +1305,12 @@ func main() { } log.Println("Storage Space content:", space) + + if err := node.CodexStorageDelete(cid); err != nil { + log.Fatal("Error happened:", err.Error()) + } + + log.Println("Storage Delete finished.") // } // err = node.CodexConnect(peerId, []string{}) diff --git a/library/codex_thread_requests/requests/node_storage_request.nim b/library/codex_thread_requests/requests/node_storage_request.nim index 23db7b1f..74d05c4f 100644 --- a/library/codex_thread_requests/requests/node_storage_request.nim +++ b/library/codex_thread_requests/requests/node_storage_request.nim @@ -18,7 +18,8 @@ import ../../../codex/manifest import ../../../codex/stores/repostore from ../../../codex/codex import CodexServer, node, repoStore -from ../../../codex/node import iterateManifests, fetchManifest, fetchDatasetAsyncTask +from ../../../codex/node import + iterateManifests, fetchManifest, fetchDatasetAsyncTask, delete from libp2p import Cid, init, `$` logScope: @@ -75,9 +76,23 @@ proc list( return ok(serde.toJson(manifests)) proc delete( - codex: ptr CodexServer, cid: cstring + codex: ptr CodexServer, cCid: cstring ): Future[Result[string, string]] {.async: (raises: []).} = - return err("DELETE operation not implemented yet.") + let cid = Cid.init($cCid) + if cid.isErr: + return err("Failed to delete the data: cannot parse cid: " & $cCid) + + let node = codex[].node + try: + let res = await node.delete(cid.get()) + if res.isErr: + return err("Failed to delete the data: " & res.error.msg) + except CancelledError: + return err("Failed to delete the data: cancelled operation.") + except CatchableError as err: + return err("Failed to delete the data: " & err.msg) + + return ok("") proc fetch( codex: ptr CodexServer, cCid: cstring