From fe00d3aeee3c216d92dfcc708dbfbad63fc7926f Mon Sep 17 00:00:00 2001
From: Ian Baum <ibaum@gitlab.com>
Date: Fri, 10 Sep 2021 15:33:49 +0000
Subject: [PATCH] Update Version Specfic updates with note about multi-arch fix

---
 .../replication/version_specific_updates.md   | 35 +++++++++++++++++++
 1 file changed, 35 insertions(+)

diff --git a/doc/administration/geo/replication/version_specific_updates.md b/doc/administration/geo/replication/version_specific_updates.md
index 8a0badbdd631..c93a7cc90e16 100644
--- a/doc/administration/geo/replication/version_specific_updates.md
+++ b/doc/administration/geo/replication/version_specific_updates.md
@@ -11,6 +11,41 @@ Review this page for update instructions for your version. These steps
 accompany the [general steps](updating_the_geo_sites.md#general-update-steps)
 for updating Geo nodes.
 
+## Updating to 14.1, 14.2, 14.3
+
+We found an [issue](https://gitlab.com/gitlab-org/gitlab/-/issues/336013) where the Container Registry replication wasn't fully working if you used multi-arch images. In case of a multi-arch image, only the primary architecture (for example `amd64`) would be replicated to the secondary node. This has been [fixed in GitLab 14.3](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/67624) and was backported to 14.2 and 14.1, but manual steps are required to force a re-sync.
+
+You can check if you are affected by running:
+
+```shell
+docker manifest inspect <SECONDARY_IMAGE_LOCATION> | jq '.mediaType'
+```
+
+Where `<SECONDARY_IMAGE_LOCATION>` is a container image on your secondary node.
+If the output matches `application/vnd.docker.distribution.manifest.list.v2+json`
+(there can be a `mediaType` entry at several levels, we only care about the top level entry),
+then you don't need to do anything.
+
+Otherwise, on all your **secondary** nodes, in a [Rails console](../../operations/rails_console.md), run the following:
+
+ ```ruby
+ list_type = 'application/vnd.docker.distribution.manifest.list.v2+json'
+
+ Geo::ContainerRepositoryRegistry.synced.each do |gcr|
+   cr = gcr.container_repository
+   primary = Geo::ContainerRepositorySync.new(cr)
+   cr.tags.each do |tag|
+     primary_manifest = JSON.parse(primary.send(:client).repository_raw_manifest(cr.path, tag.name))
+     next unless primary_manifest['mediaType'].eql?(list_type)
+
+     cr.delete_tag_by_name(tag.name)
+   end
+   primary.execute
+ end
+ ```
+
+If you are running a version prior to 14.1 and are using Geo and multi-arch containers in your Container Registry, we recommend [upgrading](updating_the_geo_sites.md) to at least GitLab 14.1.
+
 ## Updating to GitLab 14.0/14.1
 
 We found an issue where [Primary sites can not be removed from the UI](https://gitlab.com/gitlab-org/gitlab/-/issues/338231).
-- 
GitLab