Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Refactor compute dockerfile #10371

Open
wants to merge 5 commits into
base: main
Choose a base branch
from
Open

Conversation

hlinnaka
Copy link
Contributor

Refactor how extensions are built in compute Dockerfile

  1. Rename some of the extension layers, so that names correspond more
    precisely to the upstream repository name and the source directory
    name. For example, instead of "pg-jsonschema-pg-build", spell it
    "pg_jsonschema-build". Some of the layer names had the extra "pg-"
    part, and some didn't; harmonize on not having it. And use an
    underscore if the upstream project name uses an underscore.

  2. Each extension now consists of two dockerfile targets:
    [extension]-src and [extension]-build. By convention, the -src
    target downloads the sources and applies any neon-specific patches
    if necessary. The source tarball is downloaded and extracted under
    /ext-src. For example, the 'pgvector' extension creates the
    following files and directory:

     /ext-src/pgvector.tar.gz  # original tarball
     /ext-src/pgvector.patch   # neon-specific patch, copied from patches/ dir
     /ext-src/pgvector-src/    # extracted tarball, with patch applied
    

    This separation avoids re-downloading the sources every time the
    extension is recompiled. The 'extension-tests' target also uses the
    [extension]-src layers, by copying the /ext-src/ dirs from all
    the extensions together into one image.

This refactoring came about when I was experimenting with different
ways of splitting up the Dockerfile so that each extension would be in
a separate file. That's not part of this PR yet, but this is a good
step in modularizing the extensions.

@hlinnaka hlinnaka changed the base branch from main to compute-image-set-env January 13, 2025 15:09
Copy link

github-actions bot commented Jan 13, 2025

6740 tests run: 6407 passed, 0 failed, 333 skipped (full report)


Flaky tests (2)

Postgres 17

Code coverage* (full report)

  • functions: 33.4% (8517 of 25538 functions)
  • lines: 49.1% (71516 of 145568 lines)

* collected from Rust tests only


The comment gets automatically updated with the latest test results
321ba26 at 2025-01-31T00:40:52.274Z :recycle:

Base automatically changed from compute-image-set-env to main January 14, 2025 17:03
@hlinnaka hlinnaka force-pushed the refactor-compute-dockerfile branch 8 times, most recently from fbe2a18 to ef9d7d3 Compare January 21, 2025 03:56
@hlinnaka hlinnaka marked this pull request as ready for review January 21, 2025 03:56
@hlinnaka hlinnaka requested review from a team as code owners January 21, 2025 03:56
@hlinnaka hlinnaka requested review from knizhnik, lubennikovaav and tristan957 and removed request for knizhnik January 21, 2025 03:56
compute/compute-node.Dockerfile Outdated Show resolved Hide resolved
compute/compute-node.Dockerfile Show resolved Hide resolved
compute/compute-node.Dockerfile Outdated Show resolved Hide resolved
@hlinnaka hlinnaka force-pushed the refactor-compute-dockerfile branch 7 times, most recently from 1e837ce to 98b15a6 Compare January 27, 2025 19:45
@hlinnaka hlinnaka requested a review from bayandin January 27, 2025 19:46
Copy link
Member

@bayandin bayandin left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It seems tests for extension tried to get regression.out even from all layers/directories (for example from onnxruntime-src)

+ docker cp docker-compose-neon-test-extensions-1:/ext-src/onnxruntime-src/regression.out onnxruntime-src
Error response from daemon: Could not find the file /ext-src/onnxruntime-src/regression.out in container docker-compose-neon-test-extensions-1
+ true

https://github.com/neondatabase/neon/actions/runs/12997051648/job/36281529046?pr=10371#step:7:1897

Copy link
Contributor

@myrrc myrrc left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, thanks for the work

@hlinnaka hlinnaka force-pushed the refactor-compute-dockerfile branch from 98b15a6 to 8552cbb Compare January 30, 2025 20:35
1. Rename some of the extension layers, so that names correspond more
   precisely to the upstream repository name and the source directory
   name. For example, instead of "pg-jsonschema-pg-build", spell it
   "pg_jsonschema-build". Some of the layer names had the extra "pg-"
   part, and some didn't; harmonize on not having it. And use an
   underscore if the upstream project name uses an underscore.

2. Each extension now consists of two dockerfile targets:
   [extension]-src and [extension]-build. By convention, the -src
   target downloads the sources and applies any neon-specific patches
   if necessary. The source tarball is downloaded and extracted under
   /ext-src. For example, the 'pgvector' extension creates the
   following files and directory:

    /ext-src/pgvector.tar.gz  # original tarball
    /ext-src/pgvector.patch   # neon-specific patch, copied from patches/ dir
    /ext-src/pgvector-src/    # extracted tarball, with patch applied

    This separation avoids re-downloading the sources every time the
    extension is recompiled. The 'extension-tests' target also uses the
    [extension]-src layers, by copying the /ext-src/ dirs from all
    the extensions together into one image.

This refactoring came about when I was experimenting with different
ways of splitting up the Dockerfile so that each extension would be in
a separate file. That's not part of this PR yet, but this is a good
step in modularizing the extensions.
That was removed in 'main' already, but got reintroduced when I
resolve merge conflicts.
The run_tests.sh script tries to run "neon-test.sh" or "make
installcheck" for every directory in /ext-src. Hide the directories
for extensions that we don't want to test. Or in case of
onnxbuild-src, have a no-op "neon-test.sh" file to silence the error
that you get on "make installcheck" in that directory.
@hlinnaka hlinnaka force-pushed the refactor-compute-dockerfile branch from 8552cbb to 321ba26 Compare January 30, 2025 23:42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants