From e4a58dd76dff269fd6fbc58f6f0e9c5c5e163531 Mon Sep 17 00:00:00 2001 From: Utkarsh Srivastava Date: Wed, 11 Sep 2024 15:05:24 +0530 Subject: [PATCH] prevent issue report on read_object_md if the object doesn't exist Signed-off-by: Utkarsh Srivastava add todo comment to be able to handle GLACIER objects Signed-off-by: Utkarsh Srivastava (cherry picked from commit ea8d44c3bc9ca220b7269c624f75cdbbbcf808c4) --- src/sdk/namespace_blob.js | 16 +++++++++++----- src/sdk/namespace_s3.js | 20 +++++++++++++++----- 2 files changed, 26 insertions(+), 10 deletions(-) diff --git a/src/sdk/namespace_blob.js b/src/sdk/namespace_blob.js index db6a6cfe90..3375689edf 100644 --- a/src/sdk/namespace_blob.js +++ b/src/sdk/namespace_blob.js @@ -161,11 +161,17 @@ class NamespaceBlob { } catch (err) { this._translate_error_code(err); dbg.warn('NamespaceBlob.read_object_md:', inspect(err)); - object_sdk.rpc_client.pool.update_issues_report({ - namespace_resource_id: this.namespace_resource_id, - error_code: err.code || (err.details && err.details.errorCode) || 'InternalError', - time: Date.now(), - }); + + // It's totally expected to issue `HeadObject` against an object that doesn't exist + // this shouldn't be counted as an issue for the namespace store + if (err.rpc_code !== 'NO_SUCH_OBJECT') { + object_sdk.rpc_client.pool.update_issues_report({ + namespace_resource_id: this.namespace_resource_id, + error_code: err.code || (err.details && err.details.errorCode) || 'InternalError', + time: Date.now(), + }); + } + throw err; } } diff --git a/src/sdk/namespace_s3.js b/src/sdk/namespace_s3.js index c90ab07896..f2cd3503e6 100644 --- a/src/sdk/namespace_s3.js +++ b/src/sdk/namespace_s3.js @@ -207,11 +207,21 @@ class NamespaceS3 { } catch (err) { this._translate_error_code(params, err); dbg.warn('NamespaceS3.read_object_md:', inspect(err)); - object_sdk.rpc_client.pool.update_issues_report({ - namespace_resource_id: this.namespace_resource_id, - error_code: String(err.code), - time: Date.now(), - }); + + // It's totally expected to issue `HeadObject` against an object that doesn't exist + // this shouldn't be counted as an issue for the namespace store + // + // @TODO: Another error to tolerate is 'InvalidObjectState'. This shouldn't also + // result in IO_ERROR for the namespace however that means we can not do `getObject` + // even when `can_use_get_inline` is true. + if (err.rpc_code !== 'NO_SUCH_OBJECT') { + object_sdk.rpc_client.pool.update_issues_report({ + namespace_resource_id: this.namespace_resource_id, + error_code: String(err.code), + time: Date.now(), + }); + } + throw err; } }