Merge "Add trace timer around SubNodeAdder::getSubNodes method" into stable-3.10
diff --git a/src/main/java/com/googlesource/gerrit/plugins/task/util/Copier.java b/src/main/java/com/googlesource/gerrit/plugins/task/util/Copier.java
index 434a4de..5fba939 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/task/util/Copier.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/task/util/Copier.java
@@ -23,6 +23,8 @@
       try {
         if (includeInaccessible) {
           field.setAccessible(true);
+        } else if (!field.canAccess(from)) {
+          continue;
         }
         Object val = field.get(from);
         if (!field.getName().equals("this$0")) { // Can't copy internal final field
diff --git a/test/docker/docker-compose.yaml b/test/docker/docker-compose.yaml
index 57cb5f2..512812f 100755
--- a/test/docker/docker-compose.yaml
+++ b/test/docker/docker-compose.yaml
@@ -1,4 +1,3 @@
-version: '3'
 services:
 
   gerrit-01:
diff --git a/test/docker/gerrit/Dockerfile b/test/docker/gerrit/Dockerfile
index ecac697..c52439f 100755
--- a/test/docker/gerrit/Dockerfile
+++ b/test/docker/gerrit/Dockerfile
@@ -1,6 +1,6 @@
 FROM gerritcodereview/gerrit:3.10.0-ubuntu22
 
-ENV GERRIT_SITE /var/gerrit
+ENV GERRIT_SITE=/var/gerrit
 RUN rm -rf "$GERRIT_SITE/plugins" && mkdir "$GERRIT_SITE/plugins"
 RUN git config -f "$GERRIT_SITE/etc/gerrit.config" auth.type \
     DEVELOPMENT_BECOME_ANY_ACCOUNT
diff --git a/test/docker/run.sh b/test/docker/run.sh
index 0335cfa..e24535c 100755
--- a/test/docker/run.sh
+++ b/test/docker/run.sh
@@ -53,76 +53,76 @@
 
 check_prerequisite() {
     docker --version > /dev/null || die "docker is not installed"
-    docker-compose --version > /dev/null || die "docker-compose is not installed"
+    docker compose --version > /dev/null || die "docker compose is not installed"
 }
 
 build_images() {
-    docker-compose "${COMPOSE_ARGS[@]}" build --quiet
+    docker compose "${COMPOSE_ARGS[@]}" build --quiet
 }
 
 run_task_plugin_tests() {
     echo "Running test suite with default root_project and root_branch"
-    docker-compose "${COMPOSE_ARGS[@]}" up --detach
-    docker-compose "${COMPOSE_ARGS[@]}" exec -T --user=admin run_tests \
+    docker compose "${COMPOSE_ARGS[@]}" up --detach
+    docker compose "${COMPOSE_ARGS[@]}" exec -T --user=admin run_tests \
         '/task/test/docker/run_tests/start.sh'
     # TODO: Once the 'retest' functionality is fixed, the re-run with custom root prj and
     #       branch can be done without needing to bring down and start the containers again.
-    docker-compose "${COMPOSE_ARGS[@]}" down -v --rmi local 2>/dev/null
+    docker compose "${COMPOSE_ARGS[@]}" down -v --rmi local 2>/dev/null
 
     ROOT_CFG_PRJ=task-config
     ROOT_CFG_BRANCH=refs/heads/master
     echo "Re-running test suite with root_project=$ROOT_CFG_PRJ and root_branch=$ROOT_CFG_BRANCH"
-    docker-compose "${COMPOSE_ARGS[@]}" up --detach
+    docker compose "${COMPOSE_ARGS[@]}" up --detach
     configure_root_prj_and_branch
-    docker-compose "${COMPOSE_ARGS[@]}" exec -T --user=admin run_tests \
+    docker compose "${COMPOSE_ARGS[@]}" exec -T --user=admin run_tests \
         sh -c "/task/test/docker/run_tests/start.sh \
             --root-config-project $ROOT_CFG_PRJ \
             --root-config-branch $ROOT_CFG_BRANCH"
 }
 
 configure_root_prj_and_branch() {
-    docker-compose "${COMPOSE_ARGS[@]}" exec -T gerrit-01 \
+    docker compose "${COMPOSE_ARGS[@]}" exec -T gerrit-01 \
         sh -c "git config -f \$GERRIT_SITE/etc/task.config rootConfig.project $ROOT_CFG_PRJ"
-    docker-compose "${COMPOSE_ARGS[@]}" exec -T gerrit-01 \
+    docker compose "${COMPOSE_ARGS[@]}" exec -T gerrit-01 \
         sh -c "git config -f \$GERRIT_SITE/etc/task.config rootConfig.branch $ROOT_CFG_BRANCH"
-    docker-compose "${COMPOSE_ARGS[@]}" exec -T --user=admin run_tests \
+    docker compose "${COMPOSE_ARGS[@]}" exec -T --user=admin run_tests \
         sh -c "./task/test/docker/run_tests/wait-for-it.sh \$GERRIT_HOST:29418 -t -60" || \
             die "Failed to start gerrit"
-    docker-compose "${COMPOSE_ARGS[@]}" exec -T --user=admin run_tests \
+    docker compose "${COMPOSE_ARGS[@]}" exec -T --user=admin run_tests \
         sh -c "cat \$USER_HOME/.ssh/id_rsa.pub | ssh -p 29418 -i /server-ssh-key/ssh_host_rsa_key \
             \"Gerrit Code Review@\$GERRIT_HOST\" suexec --as admin@example.com -- gerrit set-account \
             admin --add-ssh-key -" || die "Failed to add ssh key to admin account"
-    docker-compose "${COMPOSE_ARGS[@]}" exec -T --user=admin run_tests \
+    docker compose "${COMPOSE_ARGS[@]}" exec -T --user=admin run_tests \
         sh -c "ssh -p 29418 \$GERRIT_HOST gerrit plugin reload task" || die "Failed to reload plugin"
 }
 
 retest() {
-    docker-compose "${COMPOSE_ARGS[@]}" exec -T --user=admin run_tests \
+    docker compose "${COMPOSE_ARGS[@]}" exec -T --user=admin run_tests \
         sh -c "/task/test/docker/run_tests/start.sh --retest"
     RESULT=$?
     cleanup
 }
 
 get_run_test_container() {
-    docker-compose "${COMPOSE_ARGS[@]}" ps | grep run_tests | awk '{ print $1 }'
+    docker compose "${COMPOSE_ARGS[@]}" ps | grep run_tests | awk '{ print $1 }'
 }
 
 cleanup() {
     if [ "$PRESERVE" = "true" ] ; then
         echo "Preserving the following docker setup"
-        docker-compose "${COMPOSE_ARGS[@]}" ps
+        docker compose "${COMPOSE_ARGS[@]}" ps
         echo ""
         echo "To exec into runtests container, use following command:"
         echo "docker exec -it $(get_run_test_container) /bin/bash"
         echo ""
         echo "Run the following command to bring down the setup:"
-        echo "docker-compose ${COMPOSE_ARGS[@]} down -v --rmi local"
+        echo "docker compose ${COMPOSE_ARGS[@]} down -v --rmi local"
         echo ""
         options_prefix "COMPOSE_ARGS" "--compose-arg"
         echo "Use command below to re run tests after making changes to test scripts"
         echo " $MYDIR/$MYPROG --retest --preserve ${COMPOSE_ARGS[@]}"
     else
-        docker-compose "${COMPOSE_ARGS[@]}" down -v --rmi local 2>/dev/null
+        docker compose "${COMPOSE_ARGS[@]}" down -v --rmi local 2>/dev/null
     fi
 }
 
diff --git a/tools/playbooks/install_docker.yaml b/tools/playbooks/install_docker.yaml
index 89cf315..85f3045 100644
--- a/tools/playbooks/install_docker.yaml
+++ b/tools/playbooks/install_docker.yaml
@@ -4,5 +4,6 @@
   tasks:
     - name: Install compose
       shell: |
-        sudo curl -L "https://github.com/docker/compose/releases/download/1.29.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
-        sudo chmod +x /usr/local/bin/docker-compose
+        sudo mkdir -p /usr/local/lib/docker/cli-plugins
+        sudo curl -SL "https://github.com/docker/compose/releases/download/v2.36.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/lib/docker/cli-plugins/docker-compose
+        sudo chmod +x /usr/local/lib/docker/cli-plugins/docker-compose