From 112fbc13d7886da609475ee8387fb23b719799ba Mon Sep 17 00:00:00 2001 From: harishsurf Date: Fri, 31 May 2024 12:49:49 +0000 Subject: [PATCH] set WORKER_COUNT=1 when starting quay with Sqlite without this, multiple workers tend to write simultaneously causing concurrent write issues --- .../tasks/autodetect-image-archive.yaml | 2 +- .../tasks/migrate-pre-1_3_0.yaml | 92 ------------------- .../tasks/upgrade-postgres-service.yaml | 31 ------- .../roles/mirror_appliance/tasks/upgrade.yaml | 6 -- .../mirror_appliance/tasks/wait-for-quay.yaml | 1 + .../templates/quay.service.j2 | 2 + cmd/utils.go | 2 +- 7 files changed, 5 insertions(+), 131 deletions(-) delete mode 100644 ansible-runner/context/app/project/roles/mirror_appliance/tasks/migrate-pre-1_3_0.yaml delete mode 100755 ansible-runner/context/app/project/roles/mirror_appliance/tasks/upgrade-postgres-service.yaml diff --git a/ansible-runner/context/app/project/roles/mirror_appliance/tasks/autodetect-image-archive.yaml b/ansible-runner/context/app/project/roles/mirror_appliance/tasks/autodetect-image-archive.yaml index 0894b4d..83da465 100755 --- a/ansible-runner/context/app/project/roles/mirror_appliance/tasks/autodetect-image-archive.yaml +++ b/ansible-runner/context/app/project/roles/mirror_appliance/tasks/autodetect-image-archive.yaml @@ -26,5 +26,5 @@ - name: Loading Quay if quay.tar exists shell: - cmd: podman image import --change 'ENV container=oci' --change 'ENV PATH=/app/bin/:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin' --change 'ENV PYTHONUNBUFFERED=1' --change 'ENV PYTHONIOENCODING=UTF-8' --change 'ENV LC_ALL=C.UTF-8' --change 'ENV LANG=C.UTF-8' --change 'ENV QUAYDIR=/quay-registry' --change 'ENV QUAYCONF=/quay-registry/conf' --change 'ENV QUAYRUN=/quay-registry/conf' --change 'ENV QUAYPATH=/quay-registry' --change 'ENV PYTHONUSERBASE=/app' --change 'ENV PYTHONPATH=/quay-registry' --change 'ENV TZ=UTC' --change 'ENV RED_HAT_QUAY=true' --change 'ENTRYPOINT=["dumb-init","--","/quay-registry/quay-entrypoint.sh"]' --change 'WORKDIR=/quay-registry' --change 'EXPOSE=7443' --change 'EXPOSE=8080' --change 'EXPOSE=8443' --change 'VOLUME=/conf/stack' --change 'VOLUME=/datastorage' --change 'VOLUME=/sqlite/data' --change 'VOLUME=/tmp' --change 'VOLUME=/var/log' --change 'USER=1001' --change 'CMD ["registry"]' - {{ quay_image }} < {{ quay_root }}/quay.tar + cmd: podman image import --change 'ENV container=oci' --change 'ENV PATH=/app/bin/:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin' --change 'ENV PYTHONUNBUFFERED=1' --change 'ENV PYTHONIOENCODING=UTF-8' --change 'ENV LC_ALL=C.UTF-8' --change 'ENV LANG=C.UTF-8' --change 'ENV QUAYDIR=/quay-registry' --change 'ENV QUAYCONF=/quay-registry/conf' --change 'ENV QUAYRUN=/quay-registry/conf' --change 'ENV QUAYPATH=/quay-registry' --change 'ENV PYTHONUSERBASE=/app' --change 'ENV PYTHONPATH=/quay-registry' --change 'ENV TZ=UTC' --change 'ENV RED_HAT_QUAY=true' --change 'ENTRYPOINT=["dumb-init","--","/quay-registry/quay-entrypoint.sh"]' --change 'WORKDIR=/quay-registry' --change 'EXPOSE=7443' --change 'EXPOSE=8080' --change 'EXPOSE=8443' --change 'VOLUME=/conf/stack' --change 'VOLUME=/datastorage' --change 'VOLUME=/sqlite' --change 'VOLUME=/tmp' --change 'VOLUME=/var/log' --change 'USER=1001' --change 'CMD ["registry"]' - {{ quay_image }} < {{ quay_root }}/quay.tar when: p.stat.exists and local_install == "false" diff --git a/ansible-runner/context/app/project/roles/mirror_appliance/tasks/migrate-pre-1_3_0.yaml b/ansible-runner/context/app/project/roles/mirror_appliance/tasks/migrate-pre-1_3_0.yaml deleted file mode 100644 index 2b806e7..0000000 --- a/ansible-runner/context/app/project/roles/mirror_appliance/tasks/migrate-pre-1_3_0.yaml +++ /dev/null @@ -1,92 +0,0 @@ -- name: Check for old quay-storage - stat: - path: /etc/quay-install/quay-storage - register: stat_quay_storage - when: 'ansible_user_uid == 0 and quay_storage == "quay-storage"' - -- name: Migrate quay-storage - block: - - name: Stop Quay service - systemd: - name: quay-app.service - state: stopped - scope: "{{ systemd_scope }}" - - - name: Create temporary data-only container for quay-storage - containers.podman.podman_container: - name: quay-copy - image: "{{ pause_image }}" - state: present - volumes: - - "{{ quay_storage }}:/data" - - - name: Copy data to quay-storage volume - command: podman cp /etc/quay-install/quay-storage/. quay-copy:/data - - - name: Delete temporary container - containers.podman.podman_container: - name: quay-copy - state: absent - - - name: Delete /etc/quay-install/quay-storage - file: - path: /etc/quay-install/quay-storage - state: absent - when: 'ansible_user_uid == 0 and quay_storage == "quay-storage" and stat_quay_storage.stat.exists' - -- name: Check for old pg-storage - stat: - path: /etc/quay-install/pg-data - register: stat_pg_storage - when: 'ansible_user_uid == 0 and pg_storage == "pg-storage"' - -- name: Migrate pg-storage - block: - - name: Stop Postgres service - systemd: - name: quay-postgres.service - state: stopped - scope: "{{ systemd_scope }}" - - - name: Create temporary data-only container for pg-storage - containers.podman.podman_container: - name: quay-copy - image: "{{ postgres_image }}" - user: root - state: present - entrypoint: /bin/sh - command: - - -ec - - ls -al /data; chown -R postgres:postgres /data - volumes: - - "{{ pg_storage }}:/data" - - - name: Copy data to pg-storage volume - command: podman cp /etc/quay-install/pg-data/. quay-copy:/data - - - name: Fix permissions - command: "podman start -a quay-copy" - - - name: Delete temporary container - containers.podman.podman_container: - name: quay-copy - state: absent - - - name: Delete /etc/quay-install/pg-data - file: - path: /etc/quay-install/pg-data - state: absent - when: 'ansible_user_uid == 0 and pg_storage == "pg-storage" and stat_pg_storage.stat.exists' - -- name: Check for old Quay root /etc/quay-install - stat: - path: /etc/quay-install - register: stat_quay_root - when: 'ansible_user_uid == 0 and quay_root == "~/quay-install"' - -- name: Migrate Quay root - command: "mv /etc/quay-install {{ quay_root }}" - args: - removes: /etc/quay-install - creates: "{{ quay_root }}" - when: 'ansible_user_uid == 0 and quay_root == "~/quay-install" and stat_quay_root.stat.exists' diff --git a/ansible-runner/context/app/project/roles/mirror_appliance/tasks/upgrade-postgres-service.yaml b/ansible-runner/context/app/project/roles/mirror_appliance/tasks/upgrade-postgres-service.yaml deleted file mode 100755 index 334d928..0000000 --- a/ansible-runner/context/app/project/roles/mirror_appliance/tasks/upgrade-postgres-service.yaml +++ /dev/null @@ -1,31 +0,0 @@ -- name: Copy Postgres systemd service file - template: - src: ../templates/postgres.service.j2 - dest: "{{ systemd_unit_dir }}/quay-postgres.service" - -- name: Check if Postgres image is loaded - command: podman inspect --type=image {{ postgres_image }} - register: pg - ignore_errors: yes - -- name: Pull Postgres image - containers.podman.podman_image: - name: "{{ postgres_image }}" - when: pg.rc != 0 - retries: 5 - delay: 5 - -- name: Create Postgres Password Secret - containers.podman.podman_secret: - state: present - name: pgdb_pass - data: "{{ PGDB_PASSWORD }}" - skip_existing: true - -- name: Start Postgres service - systemd: - name: quay-postgres.service - enabled: yes - daemon_reload: yes - state: restarted - scope: "{{ systemd_scope }}" diff --git a/ansible-runner/context/app/project/roles/mirror_appliance/tasks/upgrade.yaml b/ansible-runner/context/app/project/roles/mirror_appliance/tasks/upgrade.yaml index 3f3e988..2af203f 100755 --- a/ansible-runner/context/app/project/roles/mirror_appliance/tasks/upgrade.yaml +++ b/ansible-runner/context/app/project/roles/mirror_appliance/tasks/upgrade.yaml @@ -7,9 +7,6 @@ - name: Set SELinux Rules include_tasks: set-selinux-rules.yaml -- name: Autodetect root or rootless from previous install - include_tasks: migrate-pre-1_3_0.yaml - - name: Autodetect Image Archive include_tasks: autodetect-image-archive.yaml @@ -19,9 +16,6 @@ - name: Upgrade Quay Pod Service include_tasks: upgrade-pod-service.yaml -- name: Upgrade Postgres Service - include_tasks: upgrade-postgres-service.yaml - - name: Upgrade Redis Service include_tasks: upgrade-redis-service.yaml diff --git a/ansible-runner/context/app/project/roles/mirror_appliance/tasks/wait-for-quay.yaml b/ansible-runner/context/app/project/roles/mirror_appliance/tasks/wait-for-quay.yaml index 755840e..306db36 100644 --- a/ansible-runner/context/app/project/roles/mirror_appliance/tasks/wait-for-quay.yaml +++ b/ansible-runner/context/app/project/roles/mirror_appliance/tasks/wait-for-quay.yaml @@ -22,3 +22,4 @@ - name: Fail the playbook due to Quay not becoming alive fail: msg: "Quay did not become alive. Check debug logs above for details." + diff --git a/ansible-runner/context/app/project/roles/mirror_appliance/templates/quay.service.j2 b/ansible-runner/context/app/project/roles/mirror_appliance/templates/quay.service.j2 index 2ab04dc..839fc29 100755 --- a/ansible-runner/context/app/project/roles/mirror_appliance/templates/quay.service.j2 +++ b/ansible-runner/context/app/project/roles/mirror_appliance/templates/quay.service.j2 @@ -19,6 +19,8 @@ ExecStart=/usr/bin/podman run \ --cidfile %t/%n-cid \ --cgroups=no-conmon \ --replace \ + -e WORKER_COUNT_UNSUPPORTED_MINIMUM=1 \ + -e WORKER_COUNT=1 \ {{ quay_image }} ExecStop=-/usr/bin/podman stop --ignore --cidfile %t/%n-cid -t 10 diff --git a/cmd/utils.go b/cmd/utils.go index dc8fd7e..a635308 100644 --- a/cmd/utils.go +++ b/cmd/utils.go @@ -247,7 +247,7 @@ func getImageMetadata(app, imageName, archivePath string) string { --change 'EXPOSE=8443' \ --change 'VOLUME=/conf/stack' \ --change 'VOLUME=/datastorage' \ - --change 'VOLUME=/sqlite/data' \ + --change 'VOLUME=/sqlite' \ --change 'VOLUME=/tmp' \ --change 'VOLUME=/var/log' \ --change 'USER=1001' \