{"record":{"id":"bde8f46c12c63479","repo":"passbolt/passbolt_api","slug":"the-metadata-private-key-could-not-be-updated-please-try","errorCode":null,"errorMessage":"The metadata private key could not be updated. Please try again later.","messagePattern":"The metadata private key could not be updated\\. Please try again later\\.","errorType":"exception","errorClass":"InternalErrorException","httpStatus":500,"severity":"critical","filePath":"plugins/PassboltCe/Metadata/src/Service/MetadataPrivateKeysUpdateService.php","lineNumber":92,"sourceCode":"            'modified_by' => $uac->getId(),\n        ], [\n            'accessibleFields' => [\n                'data' => true,\n                'modified_by' => true,\n            ],\n        ]);\n        if (!empty($metadataPrivateKey->getErrors())) {\n            $this->handleValidationErrors($metadataPrivateKey, $metadataPrivateKeysTable);\n        }\n\n        $updated = $metadataPrivateKeysTable->save($metadataPrivateKey);\n        if ($updated === false) {\n            if (!empty($metadataPrivateKey->getErrors())) {\n                $this->handleValidationErrors($metadataPrivateKey, $metadataPrivateKeysTable);\n            }\n            $msg = __('The metadata private key could not be updated.') . ' ';\n            $msg .= __('Please try again later.');\n            throw new InternalErrorException($msg);\n        }\n\n        return $updated;\n    }\n\n    /**\n     * Handle validation or build rules failure\n     *\n     * @param \\Passbolt\\Metadata\\Model\\Entity\\MetadataPrivateKey $entity that is failing the validation\n     * @param \\Passbolt\\Metadata\\Model\\Table\\MetadataPrivateKeysTable $table table\n     * @throws \\App\\Error\\Exception\\ValidationException\n     * @return void\n     */\n    public function handleValidationErrors(MetadataPrivateKey $entity, MetadataPrivateKeysTable $table): void\n    {\n        if (Configure::read('debug')) {\n            Log::error(json_encode($entity->getErrors()));\n        }","sourceCodeStart":74,"sourceCodeEnd":110,"githubUrl":"https://github.com/passbolt/passbolt_api/blob/31c1bbc10f32808a607fa9bd81891e898779c0bc/plugins/PassboltCe/Metadata/src/Service/MetadataPrivateKeysUpdateService.php#L74-L110","documentation":"InternalErrorException (500) thrown when the save of the patched metadata private key returns false without entity validation errors, i.e. an unexpected persistence failure. The message tells the caller it is a transient server-side issue and to retry later.","triggerScenarios":"update() calls save() which returns false with no validation errors — e.g. database connection failure, lock timeout, transaction/trigger failure, or constraint violation not surfaced as a validation error.","commonSituations":"Database server overloaded or temporarily down; migration drift between server version and schema; DB user lacking write privileges; deadlock under concurrent updates.","solutions":["Retry the request after a short delay, as the message suggests.","Check server logs (cake error logs / database logs) for the underlying DB error.","Verify database connectivity, credentials, and that migrations are up to date (`ddev refresh`).","If persistent, inspect MetadataPrivateKeysTable beforeSave rules and DB constraints for hidden failures."],"exampleFix":null,"handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":"catch (InternalErrorException) { // 500\n  await delay(backoff++);\n  return retryUpdate(id, payload, maxRetries = 3);\n}","preventionTips":["Implement exponential backoff retry for 500s","Monitor server DB health and logs","Keep schema migrations in sync with the server version"],"tags":["internal-error","database","metadata","php"],"backgroundTag":"database-write-failed","analyzedSha":"31c1bbc10f32808a607fa9bd81891e898779c0bc","analyzedAt":"2026-09-17T00:04:38.960Z","contentChangedAt":"2026-09-17T00:04:38.960Z","schemaVersion":2},"datasetVersion":"2026-09-21T04:17:39.646Z"}