diff --git a/doc/administration/geo/replication/troubleshooting/replication.md b/doc/administration/geo/replication/troubleshooting/replication.md index 9fa87fd806ff18d6bf3cd251b6c272a12a57e264..636fe5090ad2088fe6df52d7d25c57c4ac04251b 100644 --- a/doc/administration/geo/replication/troubleshooting/replication.md +++ b/doc/administration/geo/replication/troubleshooting/replication.md @@ -72,104 +72,108 @@ Commands that change data can cause damage if not run correctly or under the rig [Start a Rails console session](../../../../administration/operations/rails_console.md#starting-a-rails-console-session) to enact the following, basic troubleshooting steps: -- **For Blob types** (using the `Packages::PackageFile` component as an example) - - - Find registry records that failed to sync: - - ```ruby - Geo::PackageFileRegistry.failed - ``` - - The term registry records, in this case, refers to registry tables in the - Geo tracking database. Each record, or row, tracks a single replicable in the - main GitLab database, such as an LFS file, or a project Git repository. Here - are some other Rails models that correspond to Geo registry tables that can - be queried like the above: - - ```plaintext - CiSecureFileRegistry - ContainerRepositoryRegistry - DependencyProxyBlobRegistry - DependencyProxyManifestRegistry - JobArtifactRegistry - LfsObjectRegistry - MergeRequestDiffRegistry - PackageFileRegistry - PagesDeploymentRegistry - PipelineArtifactRegistry - ProjectWikiRepositoryRegistry - SnippetRepositoryRegistry - TerraformStateVersionRegistry - UploadRegistry - ``` - - - Find registry records that are missing on the primary site: - - ```ruby - Geo::PackageFileRegistry.where(last_sync_failure: 'The file is missing on the Geo primary site') - ``` - - - Resync a package file, synchronously, given an ID: - - ```ruby - model_record = Packages::PackageFile.find(id) - model_record.replicator.sync - ``` - - - Resync a package file, synchronously, given a registry ID: - - ```ruby - registry = Geo::PackageFileRegistry.find(registry_id) - registry.replicator.sync - ``` - - - Resync a package file, asynchronously, given a registry ID. - Since GitLab 16.2, a component can be asynchronously replicated as follows: - - ```ruby - registry = Geo::PackageFileRegistry.find(registry_id) - registry.replicator.enqueue_sync - ``` - - - Reverify a package file, asynchronously, given a registry ID. - Since GitLab 16.2, a component can be asynchronously reverified as follows: - - ```ruby - registry = Geo::PackageFileRegistry.find(registry_id) - registry.replicator.verify_async - ``` - -- **For Repository types** (using the `SnippetRepository` component as an example) - - - Resync a snippet repository, synchronously, given an ID: - - ```ruby - model_record = Geo::SnippetRepositoryRegistry.find(id) - model_record.replicator.sync - ``` - - - Resync a snippet repository, synchronously, given a registry ID - - ```ruby - registry = Geo::SnippetRepositoryRegistry.find(registry_id) - registry.replicator.sync - ``` - - - Resync a snippet repository, asynchronously, given a registry ID. - Since GitLab 16.2, a component can be asynchronously replicated as follows: - - ```ruby - registry = Geo::SnippetRepositoryRegistry.find(registry_id) - registry.replicator.enqueue_sync - ``` - - - Reverify a snippet repository, asynchronously, given a registry ID. - Since GitLab 16.2, a component can be asynchronously reverified as follows: - - ```ruby - registry = Geo::SnippetRepositoryRegistry.find(registry_id) - registry.replicator.verify_async - ``` +#### For blob types + +Using the `Packages::PackageFile` component as an example: + +- Find registry records that failed to sync: + + ```ruby + Geo::PackageFileRegistry.failed + ``` + + The term registry records, in this case, refers to registry tables in the + Geo tracking database. Each record, or row, tracks a single replicable in the + main GitLab database, such as an LFS file, or a project Git repository. Here + are some other Rails models that correspond to Geo registry tables that can + be queried like the above: + + ```plaintext + CiSecureFileRegistry + ContainerRepositoryRegistry + DependencyProxyBlobRegistry + DependencyProxyManifestRegistry + JobArtifactRegistry + LfsObjectRegistry + MergeRequestDiffRegistry + PackageFileRegistry + PagesDeploymentRegistry + PipelineArtifactRegistry + ProjectWikiRepositoryRegistry + SnippetRepositoryRegistry + TerraformStateVersionRegistry + UploadRegistry + ``` + +- Find registry records that are missing on the primary site: + + ```ruby + Geo::PackageFileRegistry.where(last_sync_failure: 'The file is missing on the Geo primary site') + ``` + +- Resync a package file, synchronously, given an ID: + + ```ruby + model_record = Packages::PackageFile.find(id) + model_record.replicator.sync + ``` + +- Resync a package file, synchronously, given a registry ID: + + ```ruby + registry = Geo::PackageFileRegistry.find(registry_id) + registry.replicator.sync + ``` + +- Resync a package file, asynchronously, given a registry ID. + Since GitLab 16.2, a component can be asynchronously replicated as follows: + + ```ruby + registry = Geo::PackageFileRegistry.find(registry_id) + registry.replicator.enqueue_sync + ``` + +- Reverify a package file, asynchronously, given a registry ID. + Since GitLab 16.2, a component can be asynchronously reverified as follows: + + ```ruby + registry = Geo::PackageFileRegistry.find(registry_id) + registry.replicator.verify_async + ``` + +#### For repository types + +Using the `SnippetRepository` component as an example: + +- Resync a snippet repository, synchronously, given an ID: + + ```ruby + model_record = Geo::SnippetRepositoryRegistry.find(id) + model_record.replicator.sync + ``` + +- Resync a snippet repository, synchronously, given a registry ID + + ```ruby + registry = Geo::SnippetRepositoryRegistry.find(registry_id) + registry.replicator.sync + ``` + +- Resync a snippet repository, asynchronously, given a registry ID. + Since GitLab 16.2, a component can be asynchronously replicated as follows: + + ```ruby + registry = Geo::SnippetRepositoryRegistry.find(registry_id) + registry.replicator.enqueue_sync + ``` + +- Reverify a snippet repository, asynchronously, given a registry ID. + Since GitLab 16.2, a component can be asynchronously reverified as follows: + + ```ruby + registry = Geo::SnippetRepositoryRegistry.find(registry_id) + registry.replicator.verify_async + ``` ### Resync and reverify multiple components