From 067fbd99f4b8e5c206a8f638ff02e40605e97ba7 Mon Sep 17 00:00:00 2001 From: Chrysostomos Nanakos Date: Fri, 19 Jun 2026 20:58:04 +0300 Subject: [PATCH 1/2] fix(discovery): togglePrivateQueries refuses enable when mix not set up (#1462) Signed-off-by: Chrysostomos Nanakos --- .../requests/node_mix_request.nim | 3 ++- storage/discovery.nim | 6 ++++-- storage/node.nim | 4 ++-- storage/storage.nim | 8 +++----- tests/cbindings/storage.c | 6 +++--- .../storage/blockexchange/discovery/testdiscovery.nim | 10 +++++++++- 6 files changed, 23 insertions(+), 14 deletions(-) diff --git a/library/storage_thread_requests/requests/node_mix_request.nim b/library/storage_thread_requests/requests/node_mix_request.nim index 5c089852..27e394ec 100644 --- a/library/storage_thread_requests/requests/node_mix_request.nim +++ b/library/storage_thread_requests/requests/node_mix_request.nim @@ -24,5 +24,6 @@ proc process*( defer: destroyShared(self) - let previous = storage[].node.togglePrivateQueries(self.privateQueries) + let previous = storage[].node.togglePrivateQueries(self.privateQueries).valueOr: + return err(error.msg) return ok($previous) diff --git a/storage/discovery.nim b/storage/discovery.nim index b498dd81..bd46e0d1 100644 --- a/storage/discovery.nim +++ b/storage/discovery.nim @@ -262,10 +262,12 @@ proc close*(d: Discovery) {.async: (raises: []).} = else: trace "Discovery store closed" -proc togglePrivateQueries*(d: Discovery, enabled: bool): bool = +proc togglePrivateQueries*(d: Discovery, enabled: bool): ?!bool = + if enabled and (d.mixProto.isNil or d.dhtMixProxies.len == 0): + return failure("Cannot enable private queries: Mix is not configured") let old = d.privateQueries d.privateQueries = enabled - return old + success(old) proc new*( T: type Discovery, diff --git a/storage/node.nim b/storage/node.nim index 90c40454..dc437fbe 100644 --- a/storage/node.nim +++ b/storage/node.nim @@ -450,8 +450,8 @@ proc iterateManifests*(self: StorageNodeRef, onManifest: OnManifest) {.async.} = onManifest(cid, manifest) -proc togglePrivateQueries*(self: StorageNodeRef, enable: bool): bool = - return self.discovery.togglePrivateQueries(enable) +proc togglePrivateQueries*(self: StorageNodeRef, enable: bool): ?!bool = + self.discovery.togglePrivateQueries(enable) proc onExpiryUpdate( self: StorageNodeRef, rootCid: Cid, expiry: SecondsSince1970 diff --git a/storage/storage.nim b/storage/storage.nim index 558f24b1..9571d586 100644 --- a/storage/storage.nim +++ b/storage/storage.nim @@ -120,6 +120,9 @@ proc start*(s: StorageServer) {.async.} = s.storageNode.discovery.mixProto = mixProto + discard s.storageNode.discovery.togglePrivateQueries(s.config.mixEnabled).valueOr: + raise newException(StorageError, "Failed to enable private queries: " & error.msg) + s.storageNode.engine.network.excludeRelays(relayPool.keys.toSeq) let (announceAddrs, discoveryAddrs) = nattedAddress( @@ -373,11 +376,6 @@ proc new*( switch.mount(network) switch.mount(manifestProto) - # Enables private queries by default when mix is enabled. - if config.mixEnabled: - info "Enabling private queries over DHT by default", enabled = config.mixEnabled - discard discovery.togglePrivateQueries(true) - StorageServer( config: config, storageNode: storageNode, diff --git a/tests/cbindings/storage.c b/tests/cbindings/storage.c index 0ad23102..aae45529 100644 --- a/tests/cbindings/storage.c +++ b/tests/cbindings/storage.c @@ -869,9 +869,9 @@ int check_toggle_private_queries(void *storage_ctx) } int ret = is_resp_ok(r, &res); - if (res == NULL || strcmp(res, "false") != 0) + if (ret == RET_OK) { - fprintf(stderr, "toggle private queries content mismatch, res:%s\n", res ? res : "(null)"); + fprintf(stderr, "expected toggle(true) to fail when mix is not configured, got ok\n"); free(res); return RET_ERR; } @@ -886,7 +886,7 @@ int check_toggle_private_queries(void *storage_ctx) } ret = is_resp_ok(r, &res); - if (res == NULL || strcmp(res, "true") != 0) + if (res == NULL || strcmp(res, "false") != 0) { fprintf(stderr, "toggle private queries content mismatch, res:%s\n", res ? res : "(null)"); free(res); diff --git a/tests/storage/blockexchange/discovery/testdiscovery.nim b/tests/storage/blockexchange/discovery/testdiscovery.nim index 8c1a3b11..16059de6 100644 --- a/tests/storage/blockexchange/discovery/testdiscovery.nim +++ b/tests/storage/blockexchange/discovery/testdiscovery.nim @@ -151,5 +151,13 @@ asyncchecksuite "Block Advertising and Discovery": discovery.refCid = refCid check (await discovery.find(refCid)) == @[directSpr] - check discovery.togglePrivateQueries(true) == false + let toggleRes = discovery.togglePrivateQueries(true) + check toggleRes.isOk + check toggleRes.get == false check (await discovery.find(refCid)) == @[privateSpr] + + test "should fail to enable private queries when MixProtocol is nil": + let discovery = MixMockDiscovery.new() + discovery.dhtMixProxies = @[SignedPeerRecord.example] + let res = discovery.togglePrivateQueries(true) + check res.isErr From abdbca00f3b41c6963a43cd0a21b80b4bcff8cda Mon Sep 17 00:00:00 2001 From: Giuliano Mega Date: Fri, 19 Jun 2026 15:14:50 -0300 Subject: [PATCH 2/2] fix: use output of build job to feed test job instead of re-guessing the tag (#1463) --- .github/workflows/release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index de2ce79d..f828c5d9 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -224,7 +224,7 @@ jobs: TF_VAR_region: europe-west4 TF_VAR_zone: europe-west4-a TF_PLUGIN_CACHE_DIR: /home/runner/.terraform.d/plugin-cache - STORAGEDOCKERIMAGE: ${{ github.ref_type == 'tag' && format('logosstorage/logos-storage-nim:{0}-dist-tests', github.ref_name) || 'logosstorage/logos-storage-nim:latest-dist-tests' }} + STORAGEDOCKERIMAGE: ${{ needs.build-docker-dist-tests.outputs.logos_storage_image }} TEST_TYPE: release-tests BRANCH: ${{ inputs.branch || 'master' }} SOURCE: https://github.com/logos-storage/logos-storage-nim-cs-dist-tests