bitflicker64 commented on code in PR #3194:
URL: https://github.com/apache/hugegraph/pull/3194#discussion_r3941731435


##########
hugegraph-server/Dockerfile:
##########
@@ -59,8 +59,10 @@ RUN apt-get -q update \
        iproute2 \
        vim \
     && apt-get clean \
-    && rm -rf /var/lib/apt/lists/* \
-    && sed -i "s/^restserver.url.*$/restserver.url=http:\/\/0.0.0.0:8080/g" 
./conf/rest-server.properties
+    && rm -rf /var/lib/apt/lists/*
+
+COPY --from=build /pkg/hugegraph-server/apache-hugegraph-server-*/ 
/hugegraph-server/

Review Comment:
   ⚠️ With the apt layer now ahead of this `COPY`, its cache key no longer 
includes the application source, so the layer is reused until the 
`eclipse-temurin:11-jre-jammy` digest changes. What is lost is the 
per-source-change reinstall: rebuilding the same commit already hit cache 
before, but any source change used to force a fresh `apt-get install`, and now 
nothing short of a base image update does.
   
   This only bites on a registry-cache flow, and that flow is out of tree: 
`docker/bake.hcl` gates every `cache-to` behind `EXPORT_CACHE`, which defaults 
to `false`, and no workflow here runs `bake` to build or push. The PR's own 
numbers show the effect, with eight runtime layers restored in 2.0-9.3 s 
"without rerunning package installation".
   
   Could you add a documented way to force a reinstall, for example `ARG 
RUNTIME_DEPS_EPOCH=1` immediately before the apt block in all four files, 
bumped when packages need refreshing? `--no-cache-filter` is not an option as 
things stand, since the runtime stage has no `AS` name. A short note on the 
cache behaviour in `docker/README.md` would help whoever operates the publish 
flow.



##########
hugegraph-server/Dockerfile:
##########
@@ -28,14 +28,14 @@ ARG MAVEN_ARGS
 ARG SOURCE_REVISION=local
 
 RUN 
--mount=type=cache,id=hugegraph-maven-${SOURCE_REVISION},target=/root/.m2,sharing=locked
 \
-    mvn install $MAVEN_ARGS -e -B -ntp -Dmaven.test.skip=true 
-Dmaven.javadoc.skip=true \
+    mvn install -pl 
hugegraph-server/hugegraph-dist,hugegraph-pd/hg-pd-dist,hugegraph-store/hg-store-dist
 \
+        -am $MAVEN_ARGS -e -B -ntp -Dmaven.test.skip=true 
-Dmaven.javadoc.skip=true \

Review Comment:
   🧹 The module list is hardcoded ahead of `$MAVEN_ARGS`, which is the only 
Maven knob `docker/bake.hcl` exposes. Maven accumulates repeated `-pl` values 
rather than letting a later one replace an earlier one, so `MAVEN_ARGS` can 
still add modules or drop them with a `!` prefix, but it can no longer set the 
scope outright. The PR description notes that the fork experiments "enabled the 
same module selection through `MAVEN_ARGS`"; that route closes here.
   
   Drift between the four copies is already covered by the `docker-bake-check` 
job in `.github/workflows/docker-build-ci.yml`, so this is only about 
overridability.
   
   Suggested change: hoist the list into a build arg beside the existing `ARG 
MAVEN_ARGS` and pass it through `_common.args` in `docker/bake.hcl`.
   
   ```dockerfile
   ARG 
MAVEN_PROJECTS="hugegraph-server/hugegraph-dist,hugegraph-pd/hg-pd-dist,hugegraph-store/hg-store-dist"
   ```
   
   with the command becoming `mvn install -pl "$MAVEN_PROJECTS" -am $MAVEN_ARGS 
...`. All four files stay byte-identical, so the CI identity check still passes.



##########
hugegraph-server/Dockerfile:
##########
@@ -28,14 +28,14 @@ ARG MAVEN_ARGS
 ARG SOURCE_REVISION=local
 
 RUN 
--mount=type=cache,id=hugegraph-maven-${SOURCE_REVISION},target=/root/.m2,sharing=locked
 \
-    mvn install $MAVEN_ARGS -e -B -ntp -Dmaven.test.skip=true 
-Dmaven.javadoc.skip=true \
+    mvn install -pl 
hugegraph-server/hugegraph-dist,hugegraph-pd/hg-pd-dist,hugegraph-store/hg-store-dist
 \
+        -am $MAVEN_ARGS -e -B -ntp -Dmaven.test.skip=true 
-Dmaven.javadoc.skip=true \
     && rm ./hugegraph-server/*.tar.gz ./hugegraph-pd/*.tar.gz 
./hugegraph-store/*.tar.gz

Review Comment:
   🧹 The reactor is scoped but the build context is not, so the caching win is 
smaller than the benchmark suggests. `.dockerignore` at head excludes only 
build output, archives, IDE and OS files, `.git`, `.github`, `**/*.md` and the 
compose files, so `hugegraph-test`, `hg-pd-test`, `hg-store-test`, 
`hugegraph-cluster-test/**`, `hugegraph-example`, `hg-pd-cli`, `hg-store-cli` 
and `install-dist` all still land in the context and still feed the `COPY . .` 
cache key on line 25. Editing any of them therefore invalidates this shared 
build stage and pays for a full scoped Maven run, for modules the build no 
longer compiles.
   
   A follow-up rather than a change here, but worth recording. One caveat for 
whoever picks it up: these directories cannot be ignored wholesale, because the 
root pom lists them in `<modules>` and Maven fails when a listed module's 
`pom.xml` is absent, so only their `src/` subtrees can be excluded.



##########
hugegraph-server/Dockerfile-hstore:
##########
@@ -61,8 +57,13 @@ RUN apt-get -q update \
        iproute2 \
        vim \
     && apt-get clean \
-    && rm -rf /var/lib/apt/lists/* \
-    && sed -i "s/^restserver.url.*$/restserver.url=http:\/\/0.0.0.0:8080/g" 
./conf/rest-server.properties
+    && rm -rf /var/lib/apt/lists/*
+
+COPY --from=build /pkg/hugegraph-server/apache-hugegraph-server-*/ 
/hugegraph-server/
+# remove hugegraph.properties and rename hstore.properties.template for 
default hstore backend
+RUN cd /hugegraph-server/conf/graphs \
+    && rm hugegraph.properties && mv hstore.properties.template 
hugegraph.properties
+RUN sed -i "s/^restserver.url.*$/restserver.url=http:\/\/0.0.0.0:8080/g" 
./conf/rest-server.properties

Review Comment:
   🧹 Both of these `RUN`s edit only the tree copied on line 62, so they are 
invalidated together and the split just costs an image layer. This is the one 
file where that layer is avoidable: the plain server Dockerfile also gained a 
standalone `sed` layer, but it has a single edit with nothing to fold into.
   
   ```suggestion
   RUN cd /hugegraph-server/conf/graphs \
       && rm hugegraph.properties && mv hstore.properties.template 
hugegraph.properties \
       && cd /hugegraph-server \
       && sed -i "s/^restserver.url.*$/restserver.url=http:\/\/0.0.0.0:8080/g" 
./conf/rest-server.properties
   ```
   
   The comment on line 63 then covers only part of what the merged `RUN` does, 
so it is worth widening at the same time.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to