From f1fcb4d0d7d31b17b6ad9c43d80fe77ec130e01c Mon Sep 17 00:00:00 2001 From: Arthur Petukhovsky Date: Fri, 10 Jan 2025 02:03:59 +0100 Subject: [PATCH] Patch compute_ctl to run basebackup --- .dockerignore | 1 + Cargo.lock | 4 +- compute/compute-node.Dockerfile | 1140 +------------------------- compute_tools/src/bin/compute_ctl.rs | 44 +- compute_tools/src/compute.rs | 81 +- debug-oom/.gitignore | 1 + debug-oom/README.md | 21 + debug-oom/spec.yml | 99 +++ 8 files changed, 170 insertions(+), 1221 deletions(-) create mode 100644 debug-oom/.gitignore create mode 100644 debug-oom/README.md create mode 100644 debug-oom/spec.yml diff --git a/.dockerignore b/.dockerignore index 9e2d2e7108..7cd96f9e1c 100644 --- a/.dockerignore +++ b/.dockerignore @@ -24,3 +24,4 @@ !storage_controller/ !vendor/postgres-*/ !workspace_hack/ +!debug-oom/ diff --git a/Cargo.lock b/Cargo.lock index 9e0e343996..1c386574d7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4494,9 +4494,9 @@ checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" [[package]] name = "pq-sys" -version = "0.6.3" +version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6cc05d7ea95200187117196eee9edd0644424911821aeb28a18ce60ea0b8793" +checksum = "31c0052426df997c0cbd30789eb44ca097e3541717a7b8fa36b1c464ee7edebd" dependencies = [ "vcpkg", ] diff --git a/compute/compute-node.Dockerfile b/compute/compute-node.Dockerfile index 06aaf9e7f4..10bc056e47 100644 --- a/compute/compute-node.Dockerfile +++ b/compute/compute-node.Dockerfile @@ -104,1106 +104,6 @@ RUN cd postgres && \ esac; \ done; -######################################################################################### -# -# Layer "postgis-build" -# Build PostGIS from the upstream PostGIS mirror. -# -######################################################################################### -FROM build-deps AS postgis-build -ARG DEBIAN_VERSION -ARG PG_VERSION -COPY --from=pg-build /usr/local/pgsql/ /usr/local/pgsql/ -RUN apt update && \ - apt install --no-install-recommends --no-install-suggests -y \ - gdal-bin libboost-dev libboost-thread-dev libboost-filesystem-dev \ - libboost-system-dev libboost-iostreams-dev libboost-program-options-dev libboost-timer-dev \ - libcgal-dev libgdal-dev libgmp-dev libmpfr-dev libopenscenegraph-dev libprotobuf-c-dev \ - protobuf-c-compiler xsltproc \ - && apt clean && rm -rf /var/lib/apt/lists/* - - -# Postgis 3.5.0 requires SFCGAL 1.4+ -# -# It would be nice to update all versions together, but we must solve the SFCGAL dependency first. -# SFCGAL > 1.3 requires CGAL > 5.2, Bullseye's libcgal-dev is 5.2 -# and also we must check backward compatibility with older versions of PostGIS. -# -# Use new version only for v17 -RUN case "${DEBIAN_VERSION}" in \ - "bookworm") \ - export SFCGAL_VERSION=1.4.1 \ - export SFCGAL_CHECKSUM=1800c8a26241588f11cddcf433049e9b9aea902e923414d2ecef33a3295626c3 \ - ;; \ - "bullseye") \ - export SFCGAL_VERSION=1.3.10 \ - export SFCGAL_CHECKSUM=4e39b3b2adada6254a7bdba6d297bb28e1a9835a9f879b74f37e2dab70203232 \ - ;; \ - *) \ - echo "unexpected PostgreSQL version" && exit 1 \ - ;; \ - esac && \ - mkdir -p /sfcgal && \ - wget https://gitlab.com/sfcgal/SFCGAL/-/archive/v${SFCGAL_VERSION}/SFCGAL-v${SFCGAL_VERSION}.tar.gz -O SFCGAL.tar.gz && \ - echo "${SFCGAL_CHECKSUM} SFCGAL.tar.gz" | sha256sum --check && \ - mkdir sfcgal-src && cd sfcgal-src && tar xzf ../SFCGAL.tar.gz --strip-components=1 -C . && \ - cmake -DCMAKE_BUILD_TYPE=Release -GNinja . && ninja -j $(getconf _NPROCESSORS_ONLN) && \ - DESTDIR=/sfcgal ninja install -j $(getconf _NPROCESSORS_ONLN) && \ - ninja clean && cp -R /sfcgal/* / - -ENV PATH="/usr/local/pgsql/bin:$PATH" - -# Postgis 3.5.0 supports v17 -RUN case "${PG_VERSION}" in \ - "v17") \ - export POSTGIS_VERSION=3.5.0 \ - export POSTGIS_CHECKSUM=ca698a22cc2b2b3467ac4e063b43a28413f3004ddd505bdccdd74c56a647f510 \ - ;; \ - "v14" | "v15" | "v16") \ - export POSTGIS_VERSION=3.3.3 \ - export POSTGIS_CHECKSUM=74eb356e3f85f14233791013360881b6748f78081cc688ff9d6f0f673a762d13 \ - ;; \ - *) \ - echo "unexpected PostgreSQL version" && exit 1 \ - ;; \ - esac && \ - wget https://download.osgeo.org/postgis/source/postgis-${POSTGIS_VERSION}.tar.gz -O postgis.tar.gz && \ - echo "${POSTGIS_CHECKSUM} postgis.tar.gz" | sha256sum --check && \ - mkdir postgis-src && cd postgis-src && tar xzf ../postgis.tar.gz --strip-components=1 -C . && \ - find /usr/local/pgsql -type f | sed 's|^/usr/local/pgsql/||' > /before.txt &&\ - ./autogen.sh && \ - ./configure --with-sfcgal=/usr/local/bin/sfcgal-config && \ - make -j $(getconf _NPROCESSORS_ONLN) && \ - make -j $(getconf _NPROCESSORS_ONLN) install && \ - cd extensions/postgis && \ - make clean && \ - make -j $(getconf _NPROCESSORS_ONLN) install && \ - echo 'trusted = true' >> /usr/local/pgsql/share/extension/postgis.control && \ - echo 'trusted = true' >> /usr/local/pgsql/share/extension/postgis_raster.control && \ - echo 'trusted = true' >> /usr/local/pgsql/share/extension/postgis_sfcgal.control && \ - echo 'trusted = true' >> /usr/local/pgsql/share/extension/postgis_tiger_geocoder.control && \ - echo 'trusted = true' >> /usr/local/pgsql/share/extension/postgis_topology.control && \ - echo 'trusted = true' >> /usr/local/pgsql/share/extension/address_standardizer.control && \ - echo 'trusted = true' >> /usr/local/pgsql/share/extension/address_standardizer_data_us.control && \ - mkdir -p /extensions/postgis && \ - cp /usr/local/pgsql/share/extension/postgis.control /extensions/postgis && \ - cp /usr/local/pgsql/share/extension/postgis_raster.control /extensions/postgis && \ - cp /usr/local/pgsql/share/extension/postgis_sfcgal.control /extensions/postgis && \ - cp /usr/local/pgsql/share/extension/postgis_tiger_geocoder.control /extensions/postgis && \ - cp /usr/local/pgsql/share/extension/postgis_topology.control /extensions/postgis && \ - cp /usr/local/pgsql/share/extension/address_standardizer.control /extensions/postgis && \ - cp /usr/local/pgsql/share/extension/address_standardizer_data_us.control /extensions/postgis - -# Uses versioned libraries, i.e. libpgrouting-3.4 -# and may introduce function signature changes between releases -# i.e. release 3.5.0 has new signature for pg_dijkstra function -# -# Use new version only for v17 -# last release v3.6.2 - Mar 30, 2024 -RUN case "${PG_VERSION}" in \ - "v17") \ - export PGROUTING_VERSION=3.6.2 \ - export PGROUTING_CHECKSUM=f4a1ed79d6f714e52548eca3bb8e5593c6745f1bde92eb5fb858efd8984dffa2 \ - ;; \ - "v14" | "v15" | "v16") \ - export PGROUTING_VERSION=3.4.2 \ - export PGROUTING_CHECKSUM=cac297c07d34460887c4f3b522b35c470138760fe358e351ad1db4edb6ee306e \ - ;; \ - *) \ - echo "unexpected PostgreSQL version" && exit 1 \ - ;; \ - esac && \ - wget https://github.com/pgRouting/pgrouting/archive/v${PGROUTING_VERSION}.tar.gz -O pgrouting.tar.gz && \ - echo "${PGROUTING_CHECKSUM} pgrouting.tar.gz" | sha256sum --check && \ - mkdir pgrouting-src && cd pgrouting-src && tar xzf ../pgrouting.tar.gz --strip-components=1 -C . && \ - mkdir build && cd build && \ - cmake -GNinja -DCMAKE_BUILD_TYPE=Release .. && \ - ninja -j $(getconf _NPROCESSORS_ONLN) && \ - ninja -j $(getconf _NPROCESSORS_ONLN) install && \ - echo 'trusted = true' >> /usr/local/pgsql/share/extension/pgrouting.control && \ - find /usr/local/pgsql -type f | sed 's|^/usr/local/pgsql/||' > /after.txt &&\ - cp /usr/local/pgsql/share/extension/pgrouting.control /extensions/postgis && \ - sort -o /before.txt /before.txt && sort -o /after.txt /after.txt && \ - comm -13 /before.txt /after.txt | tar --directory=/usr/local/pgsql --zstd -cf /extensions/postgis.tar.zst -T - - -######################################################################################### -# -# Layer "plv8-build" -# Build plv8 -# -######################################################################################### -FROM build-deps AS plv8-build -ARG PG_VERSION -COPY --from=pg-build /usr/local/pgsql/ /usr/local/pgsql/ - -COPY compute/patches/plv8-3.1.10.patch /plv8-3.1.10.patch - -RUN apt update && \ - apt install --no-install-recommends --no-install-suggests -y \ - ninja-build python3-dev libncurses5 binutils clang \ - && apt clean && rm -rf /var/lib/apt/lists/* - -# plv8 3.2.3 supports v17 -# last release v3.2.3 - Sep 7, 2024 -# -# clone the repo instead of downloading the release tarball because plv8 has submodule dependencies -# and the release tarball doesn't include them -# -# Use new version only for v17 -# because since v3.2, plv8 doesn't include plcoffee and plls extensions -RUN case "${PG_VERSION}" in \ - "v17") \ - export PLV8_TAG=v3.2.3 \ - ;; \ - "v14" | "v15" | "v16") \ - export PLV8_TAG=v3.1.10 \ - ;; \ - *) \ - echo "unexpected PostgreSQL version" && exit 1 \ - ;; \ - esac && \ - git clone --recurse-submodules --depth 1 --branch ${PLV8_TAG} https://github.com/plv8/plv8.git plv8-src && \ - tar -czf plv8.tar.gz --exclude .git plv8-src && \ - cd plv8-src && \ - if [[ "${PG_VERSION}" < "v17" ]]; then patch -p1 < /plv8-3.1.10.patch; fi && \ - # generate and copy upgrade scripts - mkdir -p upgrade && ./generate_upgrade.sh ${PLV8_TAG#v} && \ - cp upgrade/* /usr/local/pgsql/share/extension/ && \ - export PATH="/usr/local/pgsql/bin:$PATH" && \ - make DOCKER=1 -j $(getconf _NPROCESSORS_ONLN) install && \ - rm -rf /plv8-* && \ - find /usr/local/pgsql/ -name "plv8-*.so" | xargs strip && \ - # don't break computes with installed old version of plv8 - cd /usr/local/pgsql/lib/ && \ - case "${PG_VERSION}" in \ - "v17") \ - ln -s plv8-3.2.3.so plv8-3.1.8.so && \ - ln -s plv8-3.2.3.so plv8-3.1.5.so && \ - ln -s plv8-3.2.3.so plv8-3.1.10.so \ - ;; \ - "v14" | "v15" | "v16") \ - ln -s plv8-3.1.10.so plv8-3.1.5.so && \ - ln -s plv8-3.1.10.so plv8-3.1.8.so \ - ;; \ - esac && \ - echo 'trusted = true' >> /usr/local/pgsql/share/extension/plv8.control && \ - echo 'trusted = true' >> /usr/local/pgsql/share/extension/plcoffee.control && \ - echo 'trusted = true' >> /usr/local/pgsql/share/extension/plls.control - -######################################################################################### -# -# Layer "h3-pg-build" -# Build h3_pg -# -######################################################################################### -FROM build-deps AS h3-pg-build -ARG PG_VERSION -COPY --from=pg-build /usr/local/pgsql/ /usr/local/pgsql/ - -# not version-specific -# last release v4.1.0 - Jan 18, 2023 -RUN mkdir -p /h3/usr/ && \ - wget https://github.com/uber/h3/archive/refs/tags/v4.1.0.tar.gz -O h3.tar.gz && \ - echo "ec99f1f5974846bde64f4513cf8d2ea1b8d172d2218ab41803bf6a63532272bc h3.tar.gz" | sha256sum --check && \ - mkdir h3-src && cd h3-src && tar xzf ../h3.tar.gz --strip-components=1 -C . && \ - mkdir build && cd build && \ - cmake .. -GNinja -DBUILD_BENCHMARKS=0 -DCMAKE_BUILD_TYPE=Release \ - -DBUILD_FUZZERS=0 -DBUILD_FILTERS=0 -DBUILD_GENERATORS=0 -DBUILD_TESTING=0 \ - && ninja -j $(getconf _NPROCESSORS_ONLN) && \ - DESTDIR=/h3 ninja install && \ - cp -R /h3/usr / && \ - rm -rf build - -# not version-specific -# last release v4.1.3 - Jul 26, 2023 -RUN wget https://github.com/zachasme/h3-pg/archive/refs/tags/v4.1.3.tar.gz -O h3-pg.tar.gz && \ - echo "5c17f09a820859ffe949f847bebf1be98511fb8f1bd86f94932512c00479e324 h3-pg.tar.gz" | sha256sum --check && \ - mkdir h3-pg-src && cd h3-pg-src && tar xzf ../h3-pg.tar.gz --strip-components=1 -C . && \ - export PATH="/usr/local/pgsql/bin:$PATH" && \ - make -j $(getconf _NPROCESSORS_ONLN) && \ - make -j $(getconf _NPROCESSORS_ONLN) install && \ - echo 'trusted = true' >> /usr/local/pgsql/share/extension/h3.control && \ - echo 'trusted = true' >> /usr/local/pgsql/share/extension/h3_postgis.control - -######################################################################################### -# -# Layer "unit-pg-build" -# compile unit extension -# -######################################################################################### -FROM build-deps AS unit-pg-build -ARG PG_VERSION -COPY --from=pg-build /usr/local/pgsql/ /usr/local/pgsql/ - -# not version-specific -# last release 7.9 - Sep 15, 2024 -RUN wget https://github.com/df7cb/postgresql-unit/archive/refs/tags/7.9.tar.gz -O postgresql-unit.tar.gz && \ - echo "e46de6245dcc8b2c2ecf29873dbd43b2b346773f31dd5ce4b8315895a052b456 postgresql-unit.tar.gz" | sha256sum --check && \ - mkdir postgresql-unit-src && cd postgresql-unit-src && tar xzf ../postgresql-unit.tar.gz --strip-components=1 -C . && \ - make -j $(getconf _NPROCESSORS_ONLN) PG_CONFIG=/usr/local/pgsql/bin/pg_config && \ - make -j $(getconf _NPROCESSORS_ONLN) install PG_CONFIG=/usr/local/pgsql/bin/pg_config && \ - # unit extension's "create extension" script relies on absolute install path to fill some reference tables. - # We move the extension from '/usr/local/pgsql/' to '/usr/local/' after it is build. So we need to adjust the path. - # This one-liner removes pgsql/ part of the path. - # NOTE: Other extensions that rely on MODULEDIR variable after building phase will need the same fix. - find /usr/local/pgsql/share/extension/ -name "unit*.sql" -print0 | xargs -0 sed -i "s|pgsql/||g" && \ - echo 'trusted = true' >> /usr/local/pgsql/share/extension/unit.control - -######################################################################################### -# -# Layer "vector-pg-build" -# compile pgvector extension -# -######################################################################################### -FROM build-deps AS vector-pg-build -ARG PG_VERSION -COPY --from=pg-build /usr/local/pgsql/ /usr/local/pgsql/ - -COPY compute/patches/pgvector.patch /pgvector.patch - -# By default, pgvector Makefile uses `-march=native`. We don't want that, -# because we build the images on different machines than where we run them. -# Pass OPTFLAGS="" to remove it. -# -# vector >0.7.4 supports v17 -# last release v0.8.0 - Oct 30, 2024 -RUN wget https://github.com/pgvector/pgvector/archive/refs/tags/v0.8.0.tar.gz -O pgvector.tar.gz && \ - echo "867a2c328d4928a5a9d6f052cd3bc78c7d60228a9b914ad32aa3db88e9de27b0 pgvector.tar.gz" | sha256sum --check && \ - mkdir pgvector-src && cd pgvector-src && tar xzf ../pgvector.tar.gz --strip-components=1 -C . && \ - patch -p1 < /pgvector.patch && \ - make -j $(getconf _NPROCESSORS_ONLN) OPTFLAGS="" PG_CONFIG=/usr/local/pgsql/bin/pg_config && \ - make -j $(getconf _NPROCESSORS_ONLN) OPTFLAGS="" install PG_CONFIG=/usr/local/pgsql/bin/pg_config && \ - echo 'trusted = true' >> /usr/local/pgsql/share/extension/vector.control - -######################################################################################### -# -# Layer "pgjwt-pg-build" -# compile pgjwt extension -# -######################################################################################### -FROM build-deps AS pgjwt-pg-build -ARG PG_VERSION -COPY --from=pg-build /usr/local/pgsql/ /usr/local/pgsql/ - -# not version-specific -# doesn't use releases, last commit f3d82fd - Mar 2, 2023 -RUN wget https://github.com/michelp/pgjwt/archive/f3d82fd30151e754e19ce5d6a06c71c20689ce3d.tar.gz -O pgjwt.tar.gz && \ - echo "dae8ed99eebb7593b43013f6532d772b12dfecd55548d2673f2dfd0163f6d2b9 pgjwt.tar.gz" | sha256sum --check && \ - mkdir pgjwt-src && cd pgjwt-src && tar xzf ../pgjwt.tar.gz --strip-components=1 -C . && \ - make -j $(getconf _NPROCESSORS_ONLN) install PG_CONFIG=/usr/local/pgsql/bin/pg_config && \ - echo 'trusted = true' >> /usr/local/pgsql/share/extension/pgjwt.control - -######################################################################################### -# -# Layer "hypopg-pg-build" -# compile hypopg extension -# -######################################################################################### -FROM build-deps AS hypopg-pg-build -ARG PG_VERSION -COPY --from=pg-build /usr/local/pgsql/ /usr/local/pgsql/ - -# HypoPG 1.4.1 supports v17 -# last release 1.4.1 - Apr 28, 2024 -RUN wget https://github.com/HypoPG/hypopg/archive/refs/tags/1.4.1.tar.gz -O hypopg.tar.gz && \ - echo "9afe6357fd389d8d33fad81703038ce520b09275ec00153c6c89282bcdedd6bc hypopg.tar.gz" | sha256sum --check && \ - mkdir hypopg-src && cd hypopg-src && tar xzf ../hypopg.tar.gz --strip-components=1 -C . && \ - make -j $(getconf _NPROCESSORS_ONLN) PG_CONFIG=/usr/local/pgsql/bin/pg_config && \ - make -j $(getconf _NPROCESSORS_ONLN) install PG_CONFIG=/usr/local/pgsql/bin/pg_config && \ - echo 'trusted = true' >> /usr/local/pgsql/share/extension/hypopg.control - -######################################################################################### -# -# Layer "pg-hashids-pg-build" -# compile pg_hashids extension -# -######################################################################################### -FROM build-deps AS pg-hashids-pg-build -ARG PG_VERSION -COPY --from=pg-build /usr/local/pgsql/ /usr/local/pgsql/ - -# not version-specific -# last release v1.2.1 -Jan 12, 2018 -RUN wget https://github.com/iCyberon/pg_hashids/archive/refs/tags/v1.2.1.tar.gz -O pg_hashids.tar.gz && \ - echo "74576b992d9277c92196dd8d816baa2cc2d8046fe102f3dcd7f3c3febed6822a pg_hashids.tar.gz" | sha256sum --check && \ - mkdir pg_hashids-src && cd pg_hashids-src && tar xzf ../pg_hashids.tar.gz --strip-components=1 -C . && \ - make -j $(getconf _NPROCESSORS_ONLN) PG_CONFIG=/usr/local/pgsql/bin/pg_config USE_PGXS=1 && \ - make -j $(getconf _NPROCESSORS_ONLN) install PG_CONFIG=/usr/local/pgsql/bin/pg_config USE_PGXS=1 && \ - echo 'trusted = true' >> /usr/local/pgsql/share/extension/pg_hashids.control - -######################################################################################### -# -# Layer "rum-pg-build" -# compile rum extension -# -######################################################################################### -FROM build-deps AS rum-pg-build -ARG PG_VERSION -COPY --from=pg-build /usr/local/pgsql/ /usr/local/pgsql/ - -COPY compute/patches/rum.patch /rum.patch - -# supports v17 since https://github.com/postgrespro/rum/commit/cb1edffc57736cd2a4455f8d0feab0d69928da25 -# doesn't use releases since 1.3.13 - Sep 19, 2022 -# use latest commit from the master branch -RUN wget https://github.com/postgrespro/rum/archive/cb1edffc57736cd2a4455f8d0feab0d69928da25.tar.gz -O rum.tar.gz && \ - echo "65e0a752e99f4c3226400c9b899f997049e93503db8bf5c8072efa136d32fd83 rum.tar.gz" | sha256sum --check && \ - mkdir rum-src && cd rum-src && tar xzf ../rum.tar.gz --strip-components=1 -C . && \ - patch -p1 < /rum.patch && \ - make -j $(getconf _NPROCESSORS_ONLN) PG_CONFIG=/usr/local/pgsql/bin/pg_config USE_PGXS=1 && \ - make -j $(getconf _NPROCESSORS_ONLN) install PG_CONFIG=/usr/local/pgsql/bin/pg_config USE_PGXS=1 && \ - echo 'trusted = true' >> /usr/local/pgsql/share/extension/rum.control - -######################################################################################### -# -# Layer "pgtap-pg-build" -# compile pgTAP extension -# -######################################################################################### -FROM build-deps AS pgtap-pg-build -ARG PG_VERSION -COPY --from=pg-build /usr/local/pgsql/ /usr/local/pgsql/ - -# pgtap 1.3.3 supports v17 -# last release v1.3.3 - Apr 8, 2024 -RUN wget https://github.com/theory/pgtap/archive/refs/tags/v1.3.3.tar.gz -O pgtap.tar.gz && \ - echo "325ea79d0d2515bce96bce43f6823dcd3effbd6c54cb2a4d6c2384fffa3a14c7 pgtap.tar.gz" | sha256sum --check && \ - mkdir pgtap-src && cd pgtap-src && tar xzf ../pgtap.tar.gz --strip-components=1 -C . && \ - make -j $(getconf _NPROCESSORS_ONLN) PG_CONFIG=/usr/local/pgsql/bin/pg_config && \ - make -j $(getconf _NPROCESSORS_ONLN) install PG_CONFIG=/usr/local/pgsql/bin/pg_config && \ - echo 'trusted = true' >> /usr/local/pgsql/share/extension/pgtap.control - -######################################################################################### -# -# Layer "ip4r-pg-build" -# compile ip4r extension -# -######################################################################################### -FROM build-deps AS ip4r-pg-build -ARG PG_VERSION -COPY --from=pg-build /usr/local/pgsql/ /usr/local/pgsql/ - -# not version-specific -# last release v2.4.2 - Jul 29, 2023 -RUN wget https://github.com/RhodiumToad/ip4r/archive/refs/tags/2.4.2.tar.gz -O ip4r.tar.gz && \ - echo "0f7b1f159974f49a47842a8ab6751aecca1ed1142b6d5e38d81b064b2ead1b4b ip4r.tar.gz" | sha256sum --check && \ - mkdir ip4r-src && cd ip4r-src && tar xzf ../ip4r.tar.gz --strip-components=1 -C . && \ - make -j $(getconf _NPROCESSORS_ONLN) PG_CONFIG=/usr/local/pgsql/bin/pg_config && \ - make -j $(getconf _NPROCESSORS_ONLN) install PG_CONFIG=/usr/local/pgsql/bin/pg_config && \ - echo 'trusted = true' >> /usr/local/pgsql/share/extension/ip4r.control - -######################################################################################### -# -# Layer "prefix-pg-build" -# compile Prefix extension -# -######################################################################################### -FROM build-deps AS prefix-pg-build -ARG PG_VERSION -COPY --from=pg-build /usr/local/pgsql/ /usr/local/pgsql/ - -# not version-specific -# last release v1.2.10 - Jul 5, 2023 -RUN wget https://github.com/dimitri/prefix/archive/refs/tags/v1.2.10.tar.gz -O prefix.tar.gz && \ - echo "4342f251432a5f6fb05b8597139d3ccde8dcf87e8ca1498e7ee931ca057a8575 prefix.tar.gz" | sha256sum --check && \ - mkdir prefix-src && cd prefix-src && tar xzf ../prefix.tar.gz --strip-components=1 -C . && \ - make -j $(getconf _NPROCESSORS_ONLN) PG_CONFIG=/usr/local/pgsql/bin/pg_config && \ - make -j $(getconf _NPROCESSORS_ONLN) install PG_CONFIG=/usr/local/pgsql/bin/pg_config && \ - echo 'trusted = true' >> /usr/local/pgsql/share/extension/prefix.control - -######################################################################################### -# -# Layer "hll-pg-build" -# compile hll extension -# -######################################################################################### -FROM build-deps AS hll-pg-build -ARG PG_VERSION -COPY --from=pg-build /usr/local/pgsql/ /usr/local/pgsql/ - -# not version-specific -# last release v2.18 - Aug 29, 2023 -RUN wget https://github.com/citusdata/postgresql-hll/archive/refs/tags/v2.18.tar.gz -O hll.tar.gz && \ - echo "e2f55a6f4c4ab95ee4f1b4a2b73280258c5136b161fe9d059559556079694f0e hll.tar.gz" | sha256sum --check && \ - mkdir hll-src && cd hll-src && tar xzf ../hll.tar.gz --strip-components=1 -C . && \ - make -j $(getconf _NPROCESSORS_ONLN) PG_CONFIG=/usr/local/pgsql/bin/pg_config && \ - make -j $(getconf _NPROCESSORS_ONLN) install PG_CONFIG=/usr/local/pgsql/bin/pg_config && \ - echo 'trusted = true' >> /usr/local/pgsql/share/extension/hll.control - -######################################################################################### -# -# Layer "plpgsql-check-pg-build" -# compile plpgsql_check extension -# -######################################################################################### -FROM build-deps AS plpgsql-check-pg-build -ARG PG_VERSION -COPY --from=pg-build /usr/local/pgsql/ /usr/local/pgsql/ - -# plpgsql_check v2.7.11 supports v17 -# last release v2.7.11 - Sep 16, 2024 -RUN wget https://github.com/okbob/plpgsql_check/archive/refs/tags/v2.7.11.tar.gz -O plpgsql_check.tar.gz && \ - echo "208933f8dbe8e0d2628eb3851e9f52e6892b8e280c63700c0f1ce7883625d172 plpgsql_check.tar.gz" | sha256sum --check && \ - mkdir plpgsql_check-src && cd plpgsql_check-src && tar xzf ../plpgsql_check.tar.gz --strip-components=1 -C . && \ - make -j $(getconf _NPROCESSORS_ONLN) PG_CONFIG=/usr/local/pgsql/bin/pg_config USE_PGXS=1 && \ - make -j $(getconf _NPROCESSORS_ONLN) install PG_CONFIG=/usr/local/pgsql/bin/pg_config USE_PGXS=1 && \ - echo 'trusted = true' >> /usr/local/pgsql/share/extension/plpgsql_check.control - -######################################################################################### -# -# Layer "timescaledb-pg-build" -# compile timescaledb extension -# -######################################################################################### -FROM build-deps AS timescaledb-pg-build -COPY --from=pg-build /usr/local/pgsql/ /usr/local/pgsql/ - -ARG PG_VERSION -ENV PATH="/usr/local/pgsql/bin:$PATH" - -RUN case "${PG_VERSION}" in \ - "v14" | "v15") \ - export TIMESCALEDB_VERSION=2.10.1 \ - export TIMESCALEDB_CHECKSUM=6fca72a6ed0f6d32d2b3523951ede73dc5f9b0077b38450a029a5f411fdb8c73 \ - ;; \ - "v16") \ - export TIMESCALEDB_VERSION=2.13.0 \ - export TIMESCALEDB_CHECKSUM=584a351c7775f0e067eaa0e7277ea88cab9077cc4c455cbbf09a5d9723dce95d \ - ;; \ - "v17") \ - export TIMESCALEDB_VERSION=2.17.1 \ - export TIMESCALEDB_CHECKSUM=6277cf43f5695e23dae1c5cfeba00474d730b66ed53665a84b787a6bb1a57e28 \ - ;; \ - esac && \ - wget https://github.com/timescale/timescaledb/archive/refs/tags/${TIMESCALEDB_VERSION}.tar.gz -O timescaledb.tar.gz && \ - echo "${TIMESCALEDB_CHECKSUM} timescaledb.tar.gz" | sha256sum --check && \ - mkdir timescaledb-src && cd timescaledb-src && tar xzf ../timescaledb.tar.gz --strip-components=1 -C . && \ - ./bootstrap -DSEND_TELEMETRY_DEFAULT:BOOL=OFF -DUSE_TELEMETRY:BOOL=OFF -DAPACHE_ONLY:BOOL=ON -DCMAKE_BUILD_TYPE=Release && \ - cd build && \ - make -j $(getconf _NPROCESSORS_ONLN) && \ - make install -j $(getconf _NPROCESSORS_ONLN) && \ - echo "trusted = true" >> /usr/local/pgsql/share/extension/timescaledb.control - -######################################################################################### -# -# Layer "pg-hint-plan-pg-build" -# compile pg_hint_plan extension -# -######################################################################################### -FROM build-deps AS pg-hint-plan-pg-build -COPY --from=pg-build /usr/local/pgsql/ /usr/local/pgsql/ - -ARG PG_VERSION -ENV PATH="/usr/local/pgsql/bin:$PATH" - -# version-specific, has separate releases for each version -RUN case "${PG_VERSION}" in \ - "v14") \ - export PG_HINT_PLAN_VERSION=14_1_4_1 \ - export PG_HINT_PLAN_CHECKSUM=c3501becf70ead27f70626bce80ea401ceac6a77e2083ee5f3ff1f1444ec1ad1 \ - ;; \ - "v15") \ - export PG_HINT_PLAN_VERSION=15_1_5_0 \ - export PG_HINT_PLAN_CHECKSUM=564cbbf4820973ffece63fbf76e3c0af62c4ab23543142c7caaa682bc48918be \ - ;; \ - "v16") \ - export PG_HINT_PLAN_VERSION=16_1_6_0 \ - export PG_HINT_PLAN_CHECKSUM=fc85a9212e7d2819d4ae4ac75817481101833c3cfa9f0fe1f980984e12347d00 \ - ;; \ - "v17") \ - export PG_HINT_PLAN_VERSION=17_1_7_0 \ - export PG_HINT_PLAN_CHECKSUM=06dd306328c67a4248f48403c50444f30959fb61ebe963248dbc2afb396fe600 \ - ;; \ - *) \ - echo "Export the valid PG_HINT_PLAN_VERSION variable" && exit 1 \ - ;; \ - esac && \ - wget https://github.com/ossc-db/pg_hint_plan/archive/refs/tags/REL${PG_HINT_PLAN_VERSION}.tar.gz -O pg_hint_plan.tar.gz && \ - echo "${PG_HINT_PLAN_CHECKSUM} pg_hint_plan.tar.gz" | sha256sum --check && \ - mkdir pg_hint_plan-src && cd pg_hint_plan-src && tar xzf ../pg_hint_plan.tar.gz --strip-components=1 -C . && \ - make -j $(getconf _NPROCESSORS_ONLN) && \ - make install -j $(getconf _NPROCESSORS_ONLN) && \ - echo "trusted = true" >> /usr/local/pgsql/share/extension/pg_hint_plan.control - - -######################################################################################### -# -# Layer "pg-cron-pg-build" -# compile pg_cron extension -# -######################################################################################### -FROM build-deps AS pg-cron-pg-build -ARG PG_VERSION -COPY --from=pg-build /usr/local/pgsql/ /usr/local/pgsql/ - -# This is an experimental extension that we do not support on prod yet. -# !Do not remove! -# We set it in shared_preload_libraries and computes will fail to start if library is not found. -ENV PATH="/usr/local/pgsql/bin/:$PATH" -RUN wget https://github.com/citusdata/pg_cron/archive/refs/tags/v1.6.4.tar.gz -O pg_cron.tar.gz && \ - echo "52d1850ee7beb85a4cb7185731ef4e5a90d1de216709d8988324b0d02e76af61 pg_cron.tar.gz" | sha256sum --check && \ - mkdir pg_cron-src && cd pg_cron-src && tar xzf ../pg_cron.tar.gz --strip-components=1 -C . && \ - make -j $(getconf _NPROCESSORS_ONLN) && \ - make -j $(getconf _NPROCESSORS_ONLN) install && \ - echo 'trusted = true' >> /usr/local/pgsql/share/extension/pg_cron.control - -######################################################################################### -# -# Layer "rdkit-pg-build" -# compile rdkit extension -# -######################################################################################### -FROM build-deps AS rdkit-pg-build -ARG PG_VERSION -COPY --from=pg-build /usr/local/pgsql/ /usr/local/pgsql/ - -RUN apt update && \ - apt install --no-install-recommends --no-install-suggests -y \ - libboost-iostreams1.74-dev \ - libboost-regex1.74-dev \ - libboost-serialization1.74-dev \ - libboost-system1.74-dev \ - libeigen3-dev \ - libboost-all-dev \ - && apt clean && rm -rf /var/lib/apt/lists/* - -# rdkit Release_2024_09_1 supports v17 -# last release Release_2024_09_1 - Sep 27, 2024 -# -# Use new version only for v17 -# because Release_2024_09_1 has some backward incompatible changes -# https://github.com/rdkit/rdkit/releases/tag/Release_2024_09_1 -ENV PATH="/usr/local/pgsql/bin/:/usr/local/pgsql/:$PATH" -RUN case "${PG_VERSION}" in \ - "v17") \ - export RDKIT_VERSION=Release_2024_09_1 \ - export RDKIT_CHECKSUM=034c00d6e9de323506834da03400761ed8c3721095114369d06805409747a60f \ - ;; \ - "v14" | "v15" | "v16") \ - export RDKIT_VERSION=Release_2023_03_3 \ - export RDKIT_CHECKSUM=bdbf9a2e6988526bfeb8c56ce3cdfe2998d60ac289078e2215374288185e8c8d \ - ;; \ - *) \ - echo "unexpected PostgreSQL version" && exit 1 \ - ;; \ - esac && \ - wget https://github.com/rdkit/rdkit/archive/refs/tags/${RDKIT_VERSION}.tar.gz -O rdkit.tar.gz && \ - echo "${RDKIT_CHECKSUM} rdkit.tar.gz" | sha256sum --check && \ - mkdir rdkit-src && cd rdkit-src && tar xzf ../rdkit.tar.gz --strip-components=1 -C . && \ - cmake \ - -D RDK_BUILD_CAIRO_SUPPORT=OFF \ - -D RDK_BUILD_INCHI_SUPPORT=ON \ - -D RDK_BUILD_AVALON_SUPPORT=ON \ - -D RDK_BUILD_PYTHON_WRAPPERS=OFF \ - -D RDK_BUILD_DESCRIPTORS3D=OFF \ - -D RDK_BUILD_FREESASA_SUPPORT=OFF \ - -D RDK_BUILD_COORDGEN_SUPPORT=ON \ - -D RDK_BUILD_MOLINTERCHANGE_SUPPORT=OFF \ - -D RDK_BUILD_YAEHMOP_SUPPORT=OFF \ - -D RDK_BUILD_STRUCTCHECKER_SUPPORT=OFF \ - -D RDK_TEST_MULTITHREADED=OFF \ - -D RDK_BUILD_CPP_TESTS=OFF \ - -D RDK_USE_URF=OFF \ - -D RDK_BUILD_PGSQL=ON \ - -D RDK_PGSQL_STATIC=ON \ - -D PostgreSQL_CONFIG=pg_config \ - -D PostgreSQL_INCLUDE_DIR=`pg_config --includedir` \ - -D PostgreSQL_TYPE_INCLUDE_DIR=`pg_config --includedir-server` \ - -D PostgreSQL_LIBRARY_DIR=`pg_config --libdir` \ - -D RDK_INSTALL_INTREE=OFF \ - -D RDK_INSTALL_COMIC_FONTS=OFF \ - -D RDK_BUILD_FREETYPE_SUPPORT=OFF \ - -D CMAKE_BUILD_TYPE=Release \ - -GNinja \ - . && \ - ninja -j $(getconf _NPROCESSORS_ONLN) && \ - ninja -j $(getconf _NPROCESSORS_ONLN) install && \ - echo 'trusted = true' >> /usr/local/pgsql/share/extension/rdkit.control - -######################################################################################### -# -# Layer "pg-uuidv7-pg-build" -# compile pg_uuidv7 extension -# -######################################################################################### -FROM build-deps AS pg-uuidv7-pg-build -ARG PG_VERSION -COPY --from=pg-build /usr/local/pgsql/ /usr/local/pgsql/ - -# not version-specific -# last release v1.6.0 - Oct 9, 2024 -ENV PATH="/usr/local/pgsql/bin/:$PATH" -RUN wget https://github.com/fboulnois/pg_uuidv7/archive/refs/tags/v1.6.0.tar.gz -O pg_uuidv7.tar.gz && \ - echo "0fa6c710929d003f6ce276a7de7a864e9d1667b2d78be3dc2c07f2409eb55867 pg_uuidv7.tar.gz" | sha256sum --check && \ - mkdir pg_uuidv7-src && cd pg_uuidv7-src && tar xzf ../pg_uuidv7.tar.gz --strip-components=1 -C . && \ - make -j $(getconf _NPROCESSORS_ONLN) && \ - make -j $(getconf _NPROCESSORS_ONLN) install && \ - echo 'trusted = true' >> /usr/local/pgsql/share/extension/pg_uuidv7.control - -######################################################################################### -# -# Layer "pg-roaringbitmap-pg-build" -# compile pg_roaringbitmap extension -# -######################################################################################### -FROM build-deps AS pg-roaringbitmap-pg-build -ARG PG_VERSION -COPY --from=pg-build /usr/local/pgsql/ /usr/local/pgsql/ - -# not version-specific -# last release v0.5.4 - Jun 28, 2022 -ENV PATH="/usr/local/pgsql/bin/:$PATH" -RUN wget https://github.com/ChenHuajun/pg_roaringbitmap/archive/refs/tags/v0.5.4.tar.gz -O pg_roaringbitmap.tar.gz && \ - echo "b75201efcb1c2d1b014ec4ae6a22769cc7a224e6e406a587f5784a37b6b5a2aa pg_roaringbitmap.tar.gz" | sha256sum --check && \ - mkdir pg_roaringbitmap-src && cd pg_roaringbitmap-src && tar xzf ../pg_roaringbitmap.tar.gz --strip-components=1 -C . && \ - make -j $(getconf _NPROCESSORS_ONLN) && \ - make -j $(getconf _NPROCESSORS_ONLN) install && \ - echo 'trusted = true' >> /usr/local/pgsql/share/extension/roaringbitmap.control - -######################################################################################### -# -# Layer "pg-semver-pg-build" -# compile pg_semver extension -# -######################################################################################### -FROM build-deps AS pg-semver-pg-build -ARG PG_VERSION -COPY --from=pg-build /usr/local/pgsql/ /usr/local/pgsql/ - -# Release 0.40.0 breaks backward compatibility with previous versions -# see release note https://github.com/theory/pg-semver/releases/tag/v0.40.0 -# Use new version only for v17 -# -# last release v0.40.0 - Jul 22, 2024 -ENV PATH="/usr/local/pgsql/bin/:$PATH" -RUN case "${PG_VERSION}" in \ - "v17") \ - export SEMVER_VERSION=0.40.0 \ - export SEMVER_CHECKSUM=3e50bcc29a0e2e481e7b6d2bc937cadc5f5869f55d983b5a1aafeb49f5425cfc \ - ;; \ - "v14" | "v15" | "v16") \ - export SEMVER_VERSION=0.32.1 \ - export SEMVER_CHECKSUM=fbdaf7512026d62eec03fad8687c15ed509b6ba395bff140acd63d2e4fbe25d7 \ - ;; \ - *) \ - echo "unexpected PostgreSQL version" && exit 1 \ - ;; \ - esac && \ - wget https://github.com/theory/pg-semver/archive/refs/tags/v${SEMVER_VERSION}.tar.gz -O pg_semver.tar.gz && \ - echo "${SEMVER_CHECKSUM} pg_semver.tar.gz" | sha256sum --check && \ - mkdir pg_semver-src && cd pg_semver-src && tar xzf ../pg_semver.tar.gz --strip-components=1 -C . && \ - make -j $(getconf _NPROCESSORS_ONLN) && \ - make -j $(getconf _NPROCESSORS_ONLN) install && \ - echo 'trusted = true' >> /usr/local/pgsql/share/extension/semver.control - -######################################################################################### -# -# Layer "pg-embedding-pg-build" -# compile pg_embedding extension -# -######################################################################################### -FROM build-deps AS pg-embedding-pg-build -COPY --from=pg-build /usr/local/pgsql/ /usr/local/pgsql/ - -# This is our extension, support stopped in favor of pgvector -# TODO: deprecate it -ARG PG_VERSION -ENV PATH="/usr/local/pgsql/bin/:$PATH" -RUN case "${PG_VERSION}" in \ - "v14" | "v15") \ - export PG_EMBEDDING_VERSION=0.3.5 \ - export PG_EMBEDDING_CHECKSUM=0e95b27b8b6196e2cf0a0c9ec143fe2219b82e54c5bb4ee064e76398cbe69ae9 \ - ;; \ - *) \ - echo "pg_embedding not supported on this PostgreSQL version. Use pgvector instead." && exit 0;; \ - esac && \ - wget https://github.com/neondatabase/pg_embedding/archive/refs/tags/${PG_EMBEDDING_VERSION}.tar.gz -O pg_embedding.tar.gz && \ - echo "${PG_EMBEDDING_CHECKSUM} pg_embedding.tar.gz" | sha256sum --check && \ - mkdir pg_embedding-src && cd pg_embedding-src && tar xzf ../pg_embedding.tar.gz --strip-components=1 -C . && \ - make -j $(getconf _NPROCESSORS_ONLN) && \ - make -j $(getconf _NPROCESSORS_ONLN) install - -######################################################################################### -# -# Layer "pg-anon-pg-build" -# compile anon extension -# -######################################################################################### -FROM build-deps AS pg-anon-pg-build -ARG PG_VERSION -COPY --from=pg-build /usr/local/pgsql/ /usr/local/pgsql/ - -# This is an experimental extension, never got to real production. -# !Do not remove! It can be present in shared_preload_libraries and compute will fail to start if library is not found. -ENV PATH="/usr/local/pgsql/bin/:$PATH" -RUN case "${PG_VERSION}" in "v17") \ - echo "postgresql_anonymizer does not yet support PG17" && exit 0;; \ - esac && \ - wget https://github.com/neondatabase/postgresql_anonymizer/archive/refs/tags/neon_1.1.1.tar.gz -O pg_anon.tar.gz && \ - echo "321ea8d5c1648880aafde850a2c576e4a9e7b9933a34ce272efc839328999fa9 pg_anon.tar.gz" | sha256sum --check && \ - mkdir pg_anon-src && cd pg_anon-src && tar xzf ../pg_anon.tar.gz --strip-components=1 -C . && \ - find /usr/local/pgsql -type f | sed 's|^/usr/local/pgsql/||' > /before.txt &&\ - make -j $(getconf _NPROCESSORS_ONLN) install PG_CONFIG=/usr/local/pgsql/bin/pg_config && \ - echo 'trusted = true' >> /usr/local/pgsql/share/extension/anon.control && \ - find /usr/local/pgsql -type f | sed 's|^/usr/local/pgsql/||' > /after.txt &&\ - mkdir -p /extensions/anon && cp /usr/local/pgsql/share/extension/anon.control /extensions/anon && \ - sort -o /before.txt /before.txt && sort -o /after.txt /after.txt && \ - comm -13 /before.txt /after.txt | tar --directory=/usr/local/pgsql --zstd -cf /extensions/anon.tar.zst -T - - -######################################################################################### -# -# Layer "rust extensions" -# This layer is used to build `pgrx` deps -# -######################################################################################### -FROM build-deps AS rust-extensions-build -ARG PG_VERSION -COPY --from=pg-build /usr/local/pgsql/ /usr/local/pgsql/ - -RUN apt update && \ - apt install --no-install-recommends --no-install-suggests -y curl libclang-dev && \ - apt clean && rm -rf /var/lib/apt/lists/* && \ - useradd -ms /bin/bash nonroot -b /home - -ENV HOME=/home/nonroot -ENV PATH="/home/nonroot/.cargo/bin:/usr/local/pgsql/bin/:$PATH" -USER nonroot -WORKDIR /home/nonroot - -RUN curl -sSO https://static.rust-lang.org/rustup/dist/$(uname -m)-unknown-linux-gnu/rustup-init && \ - chmod +x rustup-init && \ - ./rustup-init -y --no-modify-path --profile minimal --default-toolchain stable && \ - rm rustup-init && \ - case "${PG_VERSION}" in \ - 'v17') \ - echo 'v17 is not supported yet by pgrx. Quit' && exit 0;; \ - esac && \ - cargo install --locked --version 0.11.3 cargo-pgrx && \ - /bin/bash -c 'cargo pgrx init --pg${PG_VERSION:1}=/usr/local/pgsql/bin/pg_config' - -USER root - -######################################################################################### -# -# Layer "rust extensions pgrx12" -# -# pgrx started to support Postgres 17 since version 12, -# but some older extension aren't compatible with it. -# This layer should be used as a base for new pgrx extensions, -# and eventually get merged with `rust-extensions-build` -# -######################################################################################### -FROM build-deps AS rust-extensions-build-pgrx12 -ARG PG_VERSION -COPY --from=pg-build /usr/local/pgsql/ /usr/local/pgsql/ - -RUN apt update && \ - apt install --no-install-recommends --no-install-suggests -y curl libclang-dev && \ - apt clean && rm -rf /var/lib/apt/lists/* && \ - useradd -ms /bin/bash nonroot -b /home - -ENV HOME=/home/nonroot -ENV PATH="/home/nonroot/.cargo/bin:/usr/local/pgsql/bin/:$PATH" -USER nonroot -WORKDIR /home/nonroot - -RUN curl -sSO https://static.rust-lang.org/rustup/dist/$(uname -m)-unknown-linux-gnu/rustup-init && \ - chmod +x rustup-init && \ - ./rustup-init -y --no-modify-path --profile minimal --default-toolchain stable && \ - rm rustup-init && \ - cargo install --locked --version 0.12.6 cargo-pgrx && \ - /bin/bash -c 'cargo pgrx init --pg${PG_VERSION:1}=/usr/local/pgsql/bin/pg_config' - -USER root - -######################################################################################### -# -# Layers "pg-onnx-build" and "pgrag-pg-build" -# Compile "pgrag" extensions -# -######################################################################################### - -FROM rust-extensions-build-pgrx12 AS pg-onnx-build - -# cmake 3.26 or higher is required, so installing it using pip (bullseye-backports has cmake 3.25). -# Install it using virtual environment, because Python 3.11 (the default version on Debian 12 (Bookworm)) complains otherwise -RUN apt update && apt install --no-install-recommends --no-install-suggests -y \ - python3 python3-pip python3-venv && \ - apt clean && rm -rf /var/lib/apt/lists/* && \ - python3 -m venv venv && \ - . venv/bin/activate && \ - python3 -m pip install cmake==3.30.5 && \ - wget https://github.com/microsoft/onnxruntime/archive/refs/tags/v1.18.1.tar.gz -O onnxruntime.tar.gz && \ - mkdir onnxruntime-src && cd onnxruntime-src && tar xzf ../onnxruntime.tar.gz --strip-components=1 -C . && \ - ./build.sh --config Release --parallel --cmake_generator Ninja \ - --skip_submodule_sync --skip_tests --allow_running_as_root - - -FROM pg-onnx-build AS pgrag-pg-build - -RUN apt update && apt install --no-install-recommends --no-install-suggests -y protobuf-compiler \ - && apt clean && rm -rf /var/lib/apt/lists/* && \ - wget https://github.com/neondatabase-labs/pgrag/archive/refs/tags/v0.0.0.tar.gz -O pgrag.tar.gz && \ - echo "2cbe394c1e74fc8bcad9b52d5fbbfb783aef834ca3ce44626cfd770573700bb4 pgrag.tar.gz" | sha256sum --check && \ - mkdir pgrag-src && cd pgrag-src && tar xzf ../pgrag.tar.gz --strip-components=1 -C . && \ - \ - cd exts/rag && \ - sed -i 's/pgrx = "0.12.6"/pgrx = { version = "0.12.6", features = [ "unsafe-postgres" ] }/g' Cargo.toml && \ - cargo pgrx install --release && \ - echo "trusted = true" >> /usr/local/pgsql/share/extension/rag.control && \ - \ - cd ../rag_bge_small_en_v15 && \ - sed -i 's/pgrx = "0.12.6"/pgrx = { version = "0.12.6", features = [ "unsafe-postgres" ] }/g' Cargo.toml && \ - ORT_LIB_LOCATION=/home/nonroot/onnxruntime-src/build/Linux \ - REMOTE_ONNX_URL=http://pg-ext-s3-gateway/pgrag-data/bge_small_en_v15.onnx \ - cargo pgrx install --release --features remote_onnx && \ - echo "trusted = true" >> /usr/local/pgsql/share/extension/rag_bge_small_en_v15.control && \ - \ - cd ../rag_jina_reranker_v1_tiny_en && \ - sed -i 's/pgrx = "0.12.6"/pgrx = { version = "0.12.6", features = [ "unsafe-postgres" ] }/g' Cargo.toml && \ - ORT_LIB_LOCATION=/home/nonroot/onnxruntime-src/build/Linux \ - REMOTE_ONNX_URL=http://pg-ext-s3-gateway/pgrag-data/jina_reranker_v1_tiny_en.onnx \ - cargo pgrx install --release --features remote_onnx && \ - echo "trusted = true" >> /usr/local/pgsql/share/extension/rag_jina_reranker_v1_tiny_en.control - - -######################################################################################### -# -# Layer "pg-jsonschema-pg-build" -# Compile "pg_jsonschema" extension -# -######################################################################################### - -FROM rust-extensions-build-pgrx12 AS pg-jsonschema-pg-build -ARG PG_VERSION -# version 0.3.3 supports v17 -# last release v0.3.3 - Oct 16, 2024 -# -# there were no breaking changes -# so we can use the same version for all postgres versions -RUN case "${PG_VERSION}" in \ - "v14" | "v15" | "v16" | "v17") \ - export PG_JSONSCHEMA_VERSION=0.3.3 \ - export PG_JSONSCHEMA_CHECKSUM=40c2cffab4187e0233cb8c3bde013be92218c282f95f4469c5282f6b30d64eac \ - ;; \ - *) \ - echo "unexpected PostgreSQL version" && exit 1 \ - ;; \ - esac && \ - wget https://github.com/supabase/pg_jsonschema/archive/refs/tags/v${PG_JSONSCHEMA_VERSION}.tar.gz -O pg_jsonschema.tar.gz && \ - echo "${PG_JSONSCHEMA_CHECKSUM} pg_jsonschema.tar.gz" | sha256sum --check && \ - mkdir pg_jsonschema-src && cd pg_jsonschema-src && tar xzf ../pg_jsonschema.tar.gz --strip-components=1 -C . && \ - # see commit 252b3685a27a0f4c31a0f91e983c6314838e89e8 - # `unsafe-postgres` feature allows to build pgx extensions - # against postgres forks that decided to change their ABI name (like us). - # With that we can build extensions without forking them and using stock - # pgx. As this feature is new few manual version bumps were required. - sed -i 's/pgrx = "0.12.6"/pgrx = { version = "0.12.6", features = [ "unsafe-postgres" ] }/g' Cargo.toml && \ - cargo pgrx install --release && \ - echo "trusted = true" >> /usr/local/pgsql/share/extension/pg_jsonschema.control - -######################################################################################### -# -# Layer "pg-graphql-pg-build" -# Compile "pg_graphql" extension -# -######################################################################################### - -FROM rust-extensions-build-pgrx12 AS pg-graphql-pg-build -ARG PG_VERSION - -# version 1.5.9 supports v17 -# last release v1.5.9 - Oct 16, 2024 -# -# there were no breaking changes -# so we can use the same version for all postgres versions -RUN case "${PG_VERSION}" in \ - "v14" | "v15" | "v16" | "v17") \ - export PG_GRAPHQL_VERSION=1.5.9 \ - export PG_GRAPHQL_CHECKSUM=cf768385a41278be1333472204fc0328118644ae443182cf52f7b9b23277e497 \ - ;; \ - *) \ - echo "unexpected PostgreSQL version" && exit 1 \ - ;; \ - esac && \ - wget https://github.com/supabase/pg_graphql/archive/refs/tags/v${PG_GRAPHQL_VERSION}.tar.gz -O pg_graphql.tar.gz && \ - echo "${PG_GRAPHQL_CHECKSUM} pg_graphql.tar.gz" | sha256sum --check && \ - mkdir pg_graphql-src && cd pg_graphql-src && tar xzf ../pg_graphql.tar.gz --strip-components=1 -C . && \ - sed -i 's/pgrx = "=0.12.6"/pgrx = { version = "0.12.6", features = [ "unsafe-postgres" ] }/g' Cargo.toml && \ - cargo pgrx install --release && \ - # it's needed to enable extension because it uses untrusted C language - sed -i 's/superuser = false/superuser = true/g' /usr/local/pgsql/share/extension/pg_graphql.control && \ - echo "trusted = true" >> /usr/local/pgsql/share/extension/pg_graphql.control - -######################################################################################### -# -# Layer "pg-tiktoken-build" -# Compile "pg_tiktoken" extension -# -######################################################################################### - -FROM rust-extensions-build-pgrx12 AS pg-tiktoken-pg-build -ARG PG_VERSION - -# doesn't use releases -# 9118dd4549b7d8c0bbc98e04322499f7bf2fa6f7 - on Oct 29, 2024 -RUN wget https://github.com/kelvich/pg_tiktoken/archive/9118dd4549b7d8c0bbc98e04322499f7bf2fa6f7.tar.gz -O pg_tiktoken.tar.gz && \ - echo "a5bc447e7920ee149d3c064b8b9f0086c0e83939499753178f7d35788416f628 pg_tiktoken.tar.gz" | sha256sum --check && \ - mkdir pg_tiktoken-src && cd pg_tiktoken-src && tar xzf ../pg_tiktoken.tar.gz --strip-components=1 -C . && \ - # TODO update pgrx version in the pg_tiktoken repo and remove this line - sed -i 's/pgrx = { version = "=0.10.2",/pgrx = { version = "0.11.3",/g' Cargo.toml && \ - sed -i 's/pgrx-tests = "=0.10.2"/pgrx-tests = "0.11.3"/g' Cargo.toml && \ - cargo pgrx install --release && \ - echo "trusted = true" >> /usr/local/pgsql/share/extension/pg_tiktoken.control - -######################################################################################### -# -# Layer "pg-pgx-ulid-build" -# Compile "pgx_ulid" extension -# -######################################################################################### - -FROM rust-extensions-build AS pg-pgx-ulid-build -ARG PG_VERSION - -# doesn't support v17 yet -# https://github.com/pksunkara/pgx_ulid/pull/52 -RUN case "${PG_VERSION}" in "v17") \ - echo "pgx_ulid does not support pg17 as of the latest version (0.1.5)" && exit 0;; \ - esac && \ - wget https://github.com/pksunkara/pgx_ulid/archive/refs/tags/v0.1.5.tar.gz -O pgx_ulid.tar.gz && \ - echo "9d1659a2da65af0133d5451c454de31b37364e3502087dadf579f790bc8bef17 pgx_ulid.tar.gz" | sha256sum --check && \ - mkdir pgx_ulid-src && cd pgx_ulid-src && tar xzf ../pgx_ulid.tar.gz --strip-components=1 -C . && \ - sed -i 's/pgrx = "^0.11.2"/pgrx = { version = "=0.11.3", features = [ "unsafe-postgres" ] }/g' Cargo.toml && \ - cargo pgrx install --release && \ - echo "trusted = true" >> /usr/local/pgsql/share/extension/ulid.control - -######################################################################################### -# -# Layer "pg-session-jwt-build" -# Compile "pg_session_jwt" extension -# -######################################################################################### - -FROM rust-extensions-build-pgrx12 AS pg-session-jwt-build -ARG PG_VERSION - -# NOTE: local_proxy depends on the version of pg_session_jwt -# Do not update without approve from proxy team -# Make sure the version is reflected in proxy/src/serverless/local_conn_pool.rs -RUN wget https://github.com/neondatabase/pg_session_jwt/archive/refs/tags/v0.1.2-v17.tar.gz -O pg_session_jwt.tar.gz && \ - echo "c8ecbed9cb8c6441bce5134a176002b043018adf9d05a08e457dda233090a86e pg_session_jwt.tar.gz" | sha256sum --check && \ - mkdir pg_session_jwt-src && cd pg_session_jwt-src && tar xzf ../pg_session_jwt.tar.gz --strip-components=1 -C . && \ - sed -i 's/pgrx = "0.12.6"/pgrx = { version = "=0.12.6", features = [ "unsafe-postgres" ] }/g' Cargo.toml && \ - cargo pgrx install --release - -######################################################################################### -# -# Layer "wal2json-build" -# Compile "wal2json" extension -# -######################################################################################### - -FROM build-deps AS wal2json-pg-build -ARG PG_VERSION -COPY --from=pg-build /usr/local/pgsql/ /usr/local/pgsql/ - -# wal2json wal2json_2_6 supports v17 -# last release wal2json_2_6 - Apr 25, 2024 -ENV PATH="/usr/local/pgsql/bin/:$PATH" -RUN wget https://github.com/eulerto/wal2json/archive/refs/tags/wal2json_2_6.tar.gz -O wal2json.tar.gz && \ - echo "18b4bdec28c74a8fc98a11c72de38378a760327ef8e5e42e975b0029eb96ba0d wal2json.tar.gz" | sha256sum --check && \ - mkdir wal2json-src && cd wal2json-src && tar xzf ../wal2json.tar.gz --strip-components=1 -C . && \ - make -j $(getconf _NPROCESSORS_ONLN) && \ - make -j $(getconf _NPROCESSORS_ONLN) install - -######################################################################################### -# -# Layer "pg_ivm" -# compile pg_ivm extension -# -######################################################################################### -FROM build-deps AS pg-ivm-build -ARG PG_VERSION -COPY --from=pg-build /usr/local/pgsql/ /usr/local/pgsql/ - -# pg_ivm v1.9 supports v17 -# last release v1.9 - Jul 31 -ENV PATH="/usr/local/pgsql/bin/:$PATH" -RUN wget https://github.com/sraoss/pg_ivm/archive/refs/tags/v1.9.tar.gz -O pg_ivm.tar.gz && \ - echo "59e15722939f274650abf637f315dd723c87073496ca77236b044cb205270d8b pg_ivm.tar.gz" | sha256sum --check && \ - mkdir pg_ivm-src && cd pg_ivm-src && tar xzf ../pg_ivm.tar.gz --strip-components=1 -C . && \ - make -j $(getconf _NPROCESSORS_ONLN) && \ - make -j $(getconf _NPROCESSORS_ONLN) install && \ - echo 'trusted = true' >> /usr/local/pgsql/share/extension/pg_ivm.control - -######################################################################################### -# -# Layer "pg_partman" -# compile pg_partman extension -# -######################################################################################### -FROM build-deps AS pg-partman-build -ARG PG_VERSION -COPY --from=pg-build /usr/local/pgsql/ /usr/local/pgsql/ - -# should support v17 https://github.com/pgpartman/pg_partman/discussions/693 -# last release 5.1.0 Apr 2, 2024 -ENV PATH="/usr/local/pgsql/bin/:$PATH" -RUN wget https://github.com/pgpartman/pg_partman/archive/refs/tags/v5.1.0.tar.gz -O pg_partman.tar.gz && \ - echo "3e3a27d7ff827295d5c55ef72f07a49062d6204b3cb0b9a048645d6db9f3cb9f pg_partman.tar.gz" | sha256sum --check && \ - mkdir pg_partman-src && cd pg_partman-src && tar xzf ../pg_partman.tar.gz --strip-components=1 -C . && \ - make -j $(getconf _NPROCESSORS_ONLN) && \ - make -j $(getconf _NPROCESSORS_ONLN) install && \ - echo 'trusted = true' >> /usr/local/pgsql/share/extension/pg_partman.control - -######################################################################################### -# -# Layer "pg_mooncake" -# compile pg_mooncake extension -# -######################################################################################### -FROM rust-extensions-build AS pg-mooncake-build -ARG PG_VERSION -COPY --from=pg-build /usr/local/pgsql/ /usr/local/pgsql/ - -# The topmost commit in the `neon` branch at the time of writing this -# https://github.com/Mooncake-Labs/pg_mooncake/commits/neon/ -# https://github.com/Mooncake-Labs/pg_mooncake/commit/077c92c452bb6896a7b7776ee95f039984f076af -ENV PG_MOONCAKE_VERSION=077c92c452bb6896a7b7776ee95f039984f076af -ENV PATH="/usr/local/pgsql/bin/:$PATH" - -RUN case "${PG_VERSION}" in \ - 'v14') \ - echo "pg_mooncake is not supported on Postgres ${PG_VERSION}" && exit 0;; \ - esac && \ - git clone --depth 1 --branch neon https://github.com/Mooncake-Labs/pg_mooncake.git pg_mooncake-src && \ - cd pg_mooncake-src && \ - git checkout "${PG_MOONCAKE_VERSION}" && \ - git submodule update --init --depth 1 --recursive && \ - make BUILD_TYPE=release -j $(getconf _NPROCESSORS_ONLN) && \ - make BUILD_TYPE=release -j $(getconf _NPROCESSORS_ONLN) install && \ - echo 'trusted = true' >> /usr/local/pgsql/share/extension/pg_mooncake.control - -######################################################################################### -# -# Layer "pg_repack" -# compile pg_repack extension -# -######################################################################################### - -FROM build-deps AS pg-repack-build -ARG PG_VERSION -COPY --from=pg-build /usr/local/pgsql/ /usr/local/pgsql/ - -ENV PATH="/usr/local/pgsql/bin/:$PATH" - -RUN wget https://github.com/reorg/pg_repack/archive/refs/tags/ver_1.5.2.tar.gz -O pg_repack.tar.gz && \ - echo '4516cad42251ed3ad53ff619733004db47d5755acac83f75924cd94d1c4fb681 pg_repack.tar.gz' | sha256sum --check && \ - mkdir pg_repack-src && cd pg_repack-src && tar xzf ../pg_repack.tar.gz --strip-components=1 -C . && \ - make -j $(getconf _NPROCESSORS_ONLN) && \ - make -j $(getconf _NPROCESSORS_ONLN) install - ######################################################################################### # # Layer "neon-pg-ext-build" @@ -1213,43 +113,9 @@ RUN wget https://github.com/reorg/pg_repack/archive/refs/tags/ver_1.5.2.tar.gz - FROM build-deps AS neon-pg-ext-build ARG PG_VERSION +COPY --from=pg-build /usr/local/pgsql/ /usr/local/pgsql/ + # Public extensions -COPY --from=postgis-build /usr/local/pgsql/ /usr/local/pgsql/ -COPY --from=postgis-build /sfcgal/* / -COPY --from=plv8-build /usr/local/pgsql/ /usr/local/pgsql/ -COPY --from=h3-pg-build /usr/local/pgsql/ /usr/local/pgsql/ -COPY --from=h3-pg-build /h3/usr / -COPY --from=unit-pg-build /usr/local/pgsql/ /usr/local/pgsql/ -COPY --from=vector-pg-build /usr/local/pgsql/ /usr/local/pgsql/ -COPY --from=pgjwt-pg-build /usr/local/pgsql/ /usr/local/pgsql/ -COPY --from=pgrag-pg-build /usr/local/pgsql/ /usr/local/pgsql/ -COPY --from=pg-jsonschema-pg-build /usr/local/pgsql/ /usr/local/pgsql/ -COPY --from=pg-graphql-pg-build /usr/local/pgsql/ /usr/local/pgsql/ -COPY --from=pg-tiktoken-pg-build /usr/local/pgsql/ /usr/local/pgsql/ -COPY --from=hypopg-pg-build /usr/local/pgsql/ /usr/local/pgsql/ -COPY --from=pg-hashids-pg-build /usr/local/pgsql/ /usr/local/pgsql/ -COPY --from=rum-pg-build /usr/local/pgsql/ /usr/local/pgsql/ -COPY --from=pgtap-pg-build /usr/local/pgsql/ /usr/local/pgsql/ -COPY --from=ip4r-pg-build /usr/local/pgsql/ /usr/local/pgsql/ -COPY --from=prefix-pg-build /usr/local/pgsql/ /usr/local/pgsql/ -COPY --from=hll-pg-build /usr/local/pgsql/ /usr/local/pgsql/ -COPY --from=plpgsql-check-pg-build /usr/local/pgsql/ /usr/local/pgsql/ -COPY --from=timescaledb-pg-build /usr/local/pgsql/ /usr/local/pgsql/ -COPY --from=pg-hint-plan-pg-build /usr/local/pgsql/ /usr/local/pgsql/ -COPY --from=pg-cron-pg-build /usr/local/pgsql/ /usr/local/pgsql/ -COPY --from=pg-pgx-ulid-build /usr/local/pgsql/ /usr/local/pgsql/ -COPY --from=pg-session-jwt-build /usr/local/pgsql/ /usr/local/pgsql/ -COPY --from=rdkit-pg-build /usr/local/pgsql/ /usr/local/pgsql/ -COPY --from=pg-uuidv7-pg-build /usr/local/pgsql/ /usr/local/pgsql/ -COPY --from=pg-roaringbitmap-pg-build /usr/local/pgsql/ /usr/local/pgsql/ -COPY --from=pg-semver-pg-build /usr/local/pgsql/ /usr/local/pgsql/ -COPY --from=pg-embedding-pg-build /usr/local/pgsql/ /usr/local/pgsql/ -COPY --from=wal2json-pg-build /usr/local/pgsql /usr/local/pgsql -COPY --from=pg-anon-pg-build /usr/local/pgsql/ /usr/local/pgsql/ -COPY --from=pg-ivm-build /usr/local/pgsql/ /usr/local/pgsql/ -COPY --from=pg-partman-build /usr/local/pgsql/ /usr/local/pgsql/ -COPY --from=pg-mooncake-build /usr/local/pgsql/ /usr/local/pgsql/ -COPY --from=pg-repack-build /usr/local/pgsql/ /usr/local/pgsql/ COPY pgxn/ pgxn/ RUN make -j $(getconf _NPROCESSORS_ONLN) \ @@ -1491,6 +357,8 @@ COPY --from=sql_exporter_preprocessor --chmod=0644 /home/nonroot/compute/etc/neo COPY --from=sql_exporter_preprocessor --chmod=0644 /home/nonroot/compute/etc/sql_exporter_autoscaling.yml /etc/sql_exporter_autoscaling.yml COPY --from=sql_exporter_preprocessor --chmod=0644 /home/nonroot/compute/etc/neon_collector_autoscaling.yml /etc/neon_collector_autoscaling.yml +COPY debug-oom/backup.tar.gz /var/db/backups/backup.tar.gz + # Create remote extension download directory RUN mkdir /usr/local/download_extensions && chown -R postgres:postgres /usr/local/download_extensions diff --git a/compute_tools/src/bin/compute_ctl.rs b/compute_tools/src/bin/compute_ctl.rs index 6ede5fdceb..36bce324d5 100644 --- a/compute_tools/src/bin/compute_ctl.rs +++ b/compute_tools/src/bin/compute_ctl.rs @@ -68,6 +68,7 @@ use compute_tools::spec::*; use compute_tools::swap::resize_swap; use rlimit::{setrlimit, Resource}; use utils::failpoint_support; +use utils::id::{TenantId, TimelineId}; // this is an arbitrary build tag. Fine as a default / for testing purposes // in-case of not-set environment var @@ -87,9 +88,9 @@ fn main() -> Result<()> { let cli_args = process_cli(&clap_args)?; - let cli_spec = try_spec_from_cli(&clap_args, &cli_args)?; + // let cli_spec = try_spec_from_cli(&clap_args, &cli_args)?; - let wait_spec_result = wait_spec(build_tag, cli_args, cli_spec)?; + let wait_spec_result = wait_spec(build_tag, cli_args)?; start_postgres(&clap_args, wait_spec_result)? @@ -313,14 +314,41 @@ fn wait_spec( http_port, .. }: ProcessCliResult, - CliSpecParams { - spec, - live_config_allowed, - }: CliSpecParams, ) -> Result { let mut new_state = ComputeState::new(); let spec_set; + let live_config_allowed = true; + + let spec = Some(ComputeSpec { + // format_version: todo!(), + // operation_uuid: todo!(), + // features: todo!(), + // swap_size_bytes: todo!(), + // disk_quota_bytes: todo!(), + // disable_lfc_resizing: todo!(), + // cluster: todo!(), + // delta_operations: todo!(), + // skip_pg_catalog_updates: todo!(), + // tenant_id: todo!(), + // timeline_id: todo!(), + // pageserver_connstring: todo!(), + // safekeeper_connstrings: todo!(), + // mode: todo!(), + // storage_auth_token: todo!(), + // remote_extensions: todo!(), + // pgbouncer_settings: todo!(), + // shard_stripe_size: todo!(), + // local_proxy_config: todo!(), + // reconfigure_concurrency: todo!(), + pageserver_connstring: Some("pageserver-1.example.com:5432".to_string()), + safekeeper_connstrings: vec!["safekeeper-1.example.com:5432".to_string()], + tenant_id: Some(TenantId::generate()), + timeline_id: Some(TimelineId::generate()), + + ..Default::default() + }); + if let Some(spec) = spec { let pspec = ParsedSpec::try_from(spec).map_err(|msg| anyhow::anyhow!(msg))?; info!("new pspec.spec: {:?}", pspec.spec); @@ -355,9 +383,7 @@ fn wait_spec( // available for binding. Prewarming helps Postgres start quicker later, // because QEMU will already have its memory allocated from the host, and // the necessary binaries will already be cached. - if !spec_set { - compute.prewarm_postgres()?; - } + compute.prewarm_postgres()?; // Launch http service first, so that we can serve control-plane requests // while configuration is still in progress. diff --git a/compute_tools/src/compute.rs b/compute_tools/src/compute.rs index 1ac97a378b..71ff355f38 100644 --- a/compute_tools/src/compute.rs +++ b/compute_tools/src/compute.rs @@ -358,64 +358,22 @@ impl ComputeNode { let spec = compute_state.pspec.as_ref().expect("spec must be set"); let start_time = Instant::now(); - let shard0_connstr = spec.pageserver_connstr.split(',').next().unwrap(); - let mut config = postgres::Config::from_str(shard0_connstr)?; - - // Use the storage auth token from the config file, if given. - // Note: this overrides any password set in the connection string. - if let Some(storage_auth_token) = &spec.storage_auth_token { - info!("Got storage auth token from spec file"); - config.password(storage_auth_token); - } else { - info!("Storage auth token not set"); - } - - // Connect to pageserver - let mut client = config.connect(NoTls)?; - let pageserver_connect_micros = start_time.elapsed().as_micros() as u64; - - let basebackup_cmd = match lsn { - Lsn(0) => { - if spec.spec.mode != ComputeMode::Primary { - format!( - "basebackup {} {} --gzip --replica", - spec.tenant_id, spec.timeline_id - ) - } else { - format!("basebackup {} {} --gzip", spec.tenant_id, spec.timeline_id) - } - } - _ => { - if spec.spec.mode != ComputeMode::Primary { - format!( - "basebackup {} {} {} --gzip --replica", - spec.tenant_id, spec.timeline_id, lsn - ) - } else { - format!( - "basebackup {} {} {} --gzip", - spec.tenant_id, spec.timeline_id, lsn - ) - } - } - }; - - let copyreader = client.copy_out(basebackup_cmd.as_str())?; - let mut measured_reader = MeasuredReader::new(copyreader); + // Open backup file directly + let backup_file = std::fs::File::open("/var/db/backups/backup.tar.gz")?; + let mut measured_reader = MeasuredReader::new(backup_file); let mut bufreader = std::io::BufReader::new(&mut measured_reader); - // Read the archive directly from the `CopyOutReader` + // Read the archive directly from the file // // Set `ignore_zeros` so that unpack() reads all the Copy data and - // doesn't stop at the end-of-archive marker. Otherwise, if the server - // sends an Error after finishing the tarball, we will not notice it. + // doesn't stop at the end-of-archive marker. let mut ar = tar::Archive::new(flate2::read::GzDecoder::new(&mut bufreader)); ar.set_ignore_zeros(true); ar.unpack(&self.pgdata)?; // Report metrics let mut state = self.state.lock().unwrap(); - state.metrics.pageserver_connect_micros = pageserver_connect_micros; + state.metrics.pageserver_connect_micros = 0; state.metrics.basebackup_bytes = measured_reader.get_byte_count() as u64; state.metrics.basebackup_ms = start_time.elapsed().as_millis() as u64; Ok(()) @@ -628,32 +586,7 @@ impl ComputeNode { self.http_port, )?; - // Syncing safekeepers is only safe with primary nodes: if a primary - // is already connected it will be kicked out, so a secondary (standby) - // cannot sync safekeepers. - let lsn = match spec.mode { - ComputeMode::Primary => { - info!("checking if safekeepers are synced"); - let lsn = if let Ok(Some(lsn)) = self.check_safekeepers_synced(compute_state) { - lsn - } else { - info!("starting safekeepers syncing"); - self.sync_safekeepers(pspec.storage_auth_token.clone()) - .with_context(|| "failed to sync safekeepers")? - }; - info!("safekeepers synced at LSN {}", lsn); - lsn - } - ComputeMode::Static(lsn) => { - info!("Starting read-only node at static LSN {}", lsn); - lsn - } - ComputeMode::Replica => { - info!("Initializing standby from latest Pageserver LSN"); - Lsn(0) - } - }; - + let lsn = Lsn(0); info!( "getting basebackup@{} from pageserver {}", lsn, &pspec.pageserver_connstr diff --git a/debug-oom/.gitignore b/debug-oom/.gitignore new file mode 100644 index 0000000000..ac4e5b3b27 --- /dev/null +++ b/debug-oom/.gitignore @@ -0,0 +1 @@ +backup.tar.gz \ No newline at end of file diff --git a/debug-oom/README.md b/debug-oom/README.md new file mode 100644 index 0000000000..3597d1aadd --- /dev/null +++ b/debug-oom/README.md @@ -0,0 +1,21 @@ +To build a compute image: +``` +docker build --build-arg GIT_VERSION=custombuild --build-arg PG_VERSION=v16 -t neon-local-v16 -f ../compute/compute-node.Dockerfile .. && \ +../../autoscaling/bin/vm-builder \ + -spec=../compute/vm-image-spec-bullseye.yaml \ + -src=neon-local-v16:latest \ + -dst=vm-neon-local-v16:latest \ + -target-arch=linux/amd64 \ + -size 2G && \ +../../autoscaling/bin/kind load docker-image vm-neon-local-v16:latest --name neonvm-arthur +``` + +To start a compute node: +``` +kubectl apply -f ./spec.yml +``` + +How to destroy: +``` +kubectl delete -f ./spec.yml +``` \ No newline at end of file diff --git a/debug-oom/spec.yml b/debug-oom/spec.yml new file mode 100644 index 0000000000..108907579e --- /dev/null +++ b/debug-oom/spec.yml @@ -0,0 +1,99 @@ +apiVersion: vm.neon.tech/v1 +kind: VirtualMachine +metadata: + annotations: + autoscaling.neon.tech/bounds: '{"min":{"cpu":"250m","mem":"1Gi"},"max":{"cpu":"2","mem":"8Gi"}}' + autoscaling.neon.tech/config: '{"enableLFCMetrics":true}' + creationTimestamp: "2025-01-04T18:37:29Z" + finalizers: + - vm.neon.tech/finalizer + generation: 1 + labels: + autoscaling.neon.tech/enabled: "true" + neon/component: compute-node + neon/compute-id: compute-purple-art-unreal + neon/endpoint-id: ep-unreal + name: compute-purple-art-unreal + namespace: default +spec: + cpuScalingMode: QmpScaling + disks: + - emptyDisk: + discard: true + size: 36096Mi + mountPath: /neonvm/cache + name: cache + readOnly: false + - emptyDisk: + discard: true + enableQuotas: true + size: 150Gi + mountPath: /var/db/postgres/compute + name: pgdata + readOnly: false + enableAcceleration: true + enableNetworkMonitoring: false + enableSSH: true + guest: + args: + - -c + - /usr/local/bin/compute_ctl -D /var/db/postgres/compute/pgdata -b /usr/local/bin/postgres + -C postgresql://cloud_admin@127.0.0.1/postgres?options=-c%20default_transaction_read_only%3Dfalse + --compute-id compute-purple-art-unreal --control-plane-uri http://dontexist.local:9096 + --resize-swap-on-bind --set-disk-quota-for-fs /var/db/postgres/compute 2>&1 + command: + - /bin/sh + cpus: + max: 10 + min: 250m + use: 500m + env: + - name: RUST_LOG + value: info + - name: OTEL_SDK_DISABLED + value: "true" + - name: AUTOSCALING + value: "true" + memorySlotSize: 1Gi + memorySlots: + max: 40 + min: 1 + use: 2 + ports: + - name: postgres + port: 5432 + protocol: TCP + - name: control + port: 3080 + protocol: TCP + - name: pooler + port: 6432 + protocol: TCP + - name: host-metrics + port: 9100 + protocol: TCP + - name: metrics + port: 9187 + protocol: TCP + - name: sql-exporter + port: 9399 + protocol: TCP + - name: sql-exporter-2 + port: 9499 + protocol: TCP + - name: vm-monitor + port: 10301 + protocol: TCP + - name: local-proxy + port: 10432 + protocol: TCP + rootDisk: + image: vm-neon-local-v16 + imagePullPolicy: IfNotPresent + size: 20Gi + settings: + swap: 40Gi + sysctl: + - vm.overcommit_memory=2 + restartPolicy: Always + schedulerName: autoscale-scheduler \ No newline at end of file