mirror of
https://github.com/status-im/nim-codex.git
synced 2025-02-13 03:06:43 +00:00
fix: return correct code when missing CID is a Manifest CID; add back CORS headers
This commit is contained in:
parent
f99dbafe3c
commit
b6f2b5fe24
@ -280,7 +280,8 @@ proc deleteEntireDataset(self: CodexNodeRef, cid: Cid): Future[?!void] {.async.}
|
|||||||
var store = self.networkStore.localStore
|
var store = self.networkStore.localStore
|
||||||
|
|
||||||
if not (await cid in store):
|
if not (await cid in store):
|
||||||
return failure("Dataset's manifest is not available locally - nothing to delete")
|
# As per the contract for delete*, an absent dataset is not an error.
|
||||||
|
return success()
|
||||||
|
|
||||||
without manifestBlock =? await store.getBlock(cid), err:
|
without manifestBlock =? await store.getBlock(cid), err:
|
||||||
return failure(err)
|
return failure(err)
|
||||||
@ -288,10 +289,10 @@ proc deleteEntireDataset(self: CodexNodeRef, cid: Cid): Future[?!void] {.async.}
|
|||||||
without manifest =? Manifest.decode(manifestBlock), err:
|
without manifest =? Manifest.decode(manifestBlock), err:
|
||||||
return failure(err)
|
return failure(err)
|
||||||
|
|
||||||
let maxContinousRuntime = initDuration(milliseconds = 100)
|
let runtimeQuota = initDuration(milliseconds = 100)
|
||||||
var lastIdle = getTime()
|
var lastIdle = getTime()
|
||||||
for i in 0 ..< manifest.blocksCount:
|
for i in 0 ..< manifest.blocksCount:
|
||||||
if (getTime() - lastIdle) >= maxContinousRuntime:
|
if (getTime() - lastIdle) >= runtimeQuota:
|
||||||
await idleAsync()
|
await idleAsync()
|
||||||
lastIdle = getTime()
|
lastIdle = getTime()
|
||||||
|
|
||||||
|
@ -278,7 +278,11 @@ proc initDataApi(node: CodexNodeRef, repoStore: RepoStore, router: var RestRoute
|
|||||||
if err =? (await node.delete(cid.get())).errorOption:
|
if err =? (await node.delete(cid.get())).errorOption:
|
||||||
return RestApiResponse.error(Http500, err.msg, headers = headers)
|
return RestApiResponse.error(Http500, err.msg, headers = headers)
|
||||||
|
|
||||||
return RestApiResponse.response("", Http204, headers = headers)
|
if corsOrigin =? allowedOrigin:
|
||||||
|
resp.setCorsHeaders("DELETE", corsOrigin)
|
||||||
|
|
||||||
|
resp.status = Http204
|
||||||
|
await resp.sendBody("")
|
||||||
|
|
||||||
router.api(MethodPost, "/api/codex/v1/data/{cid}/network") do(
|
router.api(MethodPost, "/api/codex/v1/data/{cid}/network") do(
|
||||||
cid: Cid, resp: HttpResponseRef
|
cid: Cid, resp: HttpResponseRef
|
||||||
|
@ -8,6 +8,7 @@ import pkg/codex/stores
|
|||||||
import pkg/codex/blocktype as bt
|
import pkg/codex/blocktype as bt
|
||||||
import pkg/codex/sales
|
import pkg/codex/sales
|
||||||
import pkg/codex/merkletree
|
import pkg/codex/merkletree
|
||||||
|
import pkg/codex/manifest
|
||||||
import ../examples
|
import ../examples
|
||||||
|
|
||||||
export examples
|
export examples
|
||||||
@ -51,6 +52,15 @@ proc example*(_: type BlockExcPeerCtx): BlockExcPeerCtx =
|
|||||||
proc example*(_: type Cid): Cid =
|
proc example*(_: type Cid): Cid =
|
||||||
bt.Block.example.cid
|
bt.Block.example.cid
|
||||||
|
|
||||||
|
proc example*(_: type Manifest): Manifest =
|
||||||
|
Manifest.new(
|
||||||
|
treeCid = Cid.example,
|
||||||
|
blockSize = 256.NBytes,
|
||||||
|
datasetSize = 4096.NBytes,
|
||||||
|
filename = "example.txt".some,
|
||||||
|
mimetype = "text/plain".some,
|
||||||
|
)
|
||||||
|
|
||||||
proc example*(_: type MultiHash, mcodec = Sha256HashCodec): MultiHash =
|
proc example*(_: type MultiHash, mcodec = Sha256HashCodec): MultiHash =
|
||||||
let bytes = newSeqWith(256, rand(uint8))
|
let bytes = newSeqWith(256, rand(uint8))
|
||||||
MultiHash.digest($mcodec, bytes).tryGet()
|
MultiHash.digest($mcodec, bytes).tryGet()
|
||||||
|
@ -15,9 +15,7 @@ import pkg/codex/rng
|
|||||||
|
|
||||||
import ../helpers
|
import ../helpers
|
||||||
|
|
||||||
proc storeManifest*(
|
proc makeManifestBlock*(manifest: Manifest): ?!bt.Block =
|
||||||
store: BlockStore, manifest: Manifest
|
|
||||||
): Future[?!bt.Block] {.async.} =
|
|
||||||
without encodedVerifiable =? manifest.encode(), err:
|
without encodedVerifiable =? manifest.encode(), err:
|
||||||
trace "Unable to encode manifest"
|
trace "Unable to encode manifest"
|
||||||
return failure(err)
|
return failure(err)
|
||||||
@ -26,6 +24,15 @@ proc storeManifest*(
|
|||||||
trace "Unable to create block from manifest"
|
trace "Unable to create block from manifest"
|
||||||
return failure(error)
|
return failure(error)
|
||||||
|
|
||||||
|
success blk
|
||||||
|
|
||||||
|
proc storeManifest*(
|
||||||
|
store: BlockStore, manifest: Manifest
|
||||||
|
): Future[?!bt.Block] {.async.} =
|
||||||
|
without blk =? makeManifestBlock(manifest), err:
|
||||||
|
trace "Unable to create manifest block", err = err.msg
|
||||||
|
return failure(err)
|
||||||
|
|
||||||
if err =? (await store.putBlock(blk)).errorOption:
|
if err =? (await store.putBlock(blk)).errorOption:
|
||||||
trace "Unable to store manifest block", cid = blk.cid, err = err.msg
|
trace "Unable to store manifest block", cid = blk.cid, err = err.msg
|
||||||
return failure(err)
|
return failure(err)
|
||||||
|
@ -2,9 +2,11 @@ import std/httpclient
|
|||||||
import std/sequtils
|
import std/sequtils
|
||||||
from pkg/libp2p import `==`, `$`, Cid
|
from pkg/libp2p import `==`, `$`, Cid
|
||||||
import pkg/codex/units
|
import pkg/codex/units
|
||||||
|
import pkg/codex/manifest
|
||||||
import ./twonodes
|
import ./twonodes
|
||||||
import ../examples
|
import ../examples
|
||||||
import ../codex/examples
|
import ../codex/examples
|
||||||
|
import ../codex/slots/helpers
|
||||||
import json
|
import json
|
||||||
|
|
||||||
twonodessuite "REST API":
|
twonodessuite "REST API":
|
||||||
@ -274,7 +276,12 @@ twonodessuite "REST API":
|
|||||||
response = client1.downloadRaw($cid, local = true)
|
response = client1.downloadRaw($cid, local = true)
|
||||||
check response.status == "404 Not Found"
|
check response.status == "404 Not Found"
|
||||||
|
|
||||||
test "should return 200 when attempting delete of non-existing dataset",
|
test "should return 200 when attempting delete of non-existing block", twoNodesConfig:
|
||||||
twoNodesConfig:
|
|
||||||
let response = client1.deleteRaw($(Cid.example()))
|
let response = client1.deleteRaw($(Cid.example()))
|
||||||
check response.status == "204 No Content"
|
check response.status == "204 No Content"
|
||||||
|
|
||||||
|
test "should return 200 when attempting delete of non-existing dataset",
|
||||||
|
twoNodesConfig:
|
||||||
|
let cid = Manifest.example().makeManifestBlock().get.cid
|
||||||
|
let response = client1.deleteRaw($cid)
|
||||||
|
check response.status == "204 No Content"
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
import std/os
|
|
||||||
import std/macros
|
import std/macros
|
||||||
import pkg/questionable
|
import pkg/questionable
|
||||||
import ./multinodes
|
import ./multinodes
|
||||||
|
Loading…
x
Reference in New Issue
Block a user