ARTIFACTORY: How to Resolve Federated Repository Errors: "Invalid repository layout" or "Failed to identify local member"
OverviewFederated Repositories in JFrog Artifactory may fail to sync or accept member repositories, displaying "Invalid repository layout" or "Failed to identify local member".This occurs when a repository (e.g., artifactory-build-info) is missing its required repoLayoutRef attribute, typically following a repository conversion, system upgrade, or database migration.
Observed Log Errors
The artifactory-service.log reports errors such as:Plaintext
[ERROR] [dateRepositoryConfigService:87] - Failed to update repository artifactory-build-info: Invalid repository layout [ERROR] [.a.a.m.i.a.h.AutoHealingJob:26] - Error occurred while trying to recover federated repositories: Failed to identify local member
Resolution
1. Check ConfigurationRun the Get Repository API to confirm "repoLayoutRef" is missing from the JSON payload:Bash
curl -u <USERNAME>:<PASSWORD> "https://<ARTIFACTORY_URL>/artifactory/api/repositories/artifactory-build-info"
2. Apply Missing Layout
Create a file named update-layout.json:JSON
{
"rclass": "federated",
"repoLayoutRef": "simple-default"
}Update the repository configuration:Bash
curl -u <USERNAME>:<PASSWORD> \ -X POST "https://<ARTIFACTORY_URL>/artifactory/api/repositories/artifactory-build-info" \ -H "Content-Type: application/json" \ -T update-layout.json
Note:
Replace artifactory-build-info in the command examples with your impacted Federated repository key.
3. Verify
Re-run the GET request from Step 1 to confirm "repoLayoutRef": "simple-default" is now present. Member synchronization and AutoHealingJob will now function normally. You can verify by adding a new member repository to the concerned Federated repository.
4. Validate all the Federated repository configurations
In order to validate the Layout configuration for all the federated repositories, you can use the REST API below:curl -u <USERNAME>:<PASSWORD> \ -X POST "https://<ARTIFACTORY_URL>/artifactory/api/repositories/configurations?repoType=federated"|jq -r '.FEDERATED[] | "\(.key): \(.repoLayoutRef // "MISSING")"'