diff --git a/src/sdk/namespace_blob.js b/src/sdk/namespace_blob.js index f718162e48..e2395694e1 100644 --- a/src/sdk/namespace_blob.js +++ b/src/sdk/namespace_blob.js @@ -170,11 +170,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 fe3ee1051c..5a7f962634 100644 --- a/src/sdk/namespace_s3.js +++ b/src/sdk/namespace_s3.js @@ -217,11 +217,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; } }