This is an automated email from the ASF dual-hosted git repository.

wenjun pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/dolphinscheduler.git


The following commit(s) were added to refs/heads/dev by this push:
     new 0e2d0fb81e [Fix-16228] Fix E2E health check url is not correct (#16227)
0e2d0fb81e is described below

commit 0e2d0fb81ecec048dce8d807a9f31f35e526bb92
Author: Wenjun Ruan <[email protected]>
AuthorDate: Thu Jun 27 21:49:21 2024 +0800

    [Fix-16228] Fix E2E health check url is not correct (#16227)
---
 .../resources/docker/basic/docker-compose.yaml     |  3 +--
 .../datasource-clickhouse/docker-compose.yaml      |  3 +--
 .../docker/datasource-hive/docker-compose.yaml     |  3 +--
 .../docker/datasource-mysql/docker-compose.yaml    |  3 +--
 .../datasource-postgresql/docker-compose.yaml      |  3 +--
 .../datasource-sqlserver/docker-compose.yaml       |  3 +--
 .../docker/file-manage/docker-compose.yaml         |  3 +--
 .../api/test/core/DolphinSchedulerExtension.java   | 23 +++++++++++++---------
 .../dao/repository/impl/CommandDaoImplTest.java    | 10 ----------
 .../resources/docker/basic/docker-compose.yaml     |  2 +-
 .../datasource-clickhouse/docker-compose.yaml      |  2 +-
 .../docker/datasource-hive/docker-compose.yaml     |  2 +-
 .../docker/datasource-mysql/docker-compose.yaml    |  2 +-
 .../datasource-postgresql/docker-compose.yaml      |  4 ++--
 .../datasource-sqlserver/docker-compose.yaml       |  2 +-
 .../docker/file-manage/docker-compose.yaml         |  2 +-
 .../docker/workflow-http/docker-compose.yaml       |  2 +-
 17 files changed, 30 insertions(+), 42 deletions(-)

diff --git 
a/dolphinscheduler-api-test/dolphinscheduler-api-test-case/src/test/resources/docker/basic/docker-compose.yaml
 
b/dolphinscheduler-api-test/dolphinscheduler-api-test-case/src/test/resources/docker/basic/docker-compose.yaml
index f1a1cf1fbb..edeca6af11 100644
--- 
a/dolphinscheduler-api-test/dolphinscheduler-api-test-case/src/test/resources/docker/basic/docker-compose.yaml
+++ 
b/dolphinscheduler-api-test/dolphinscheduler-api-test-case/src/test/resources/docker/basic/docker-compose.yaml
@@ -21,7 +21,6 @@ services:
   dolphinscheduler:
     image: apache/dolphinscheduler-standalone-server:ci
     environment:
-      MASTER_MAX_CPU_LOAD_AVG: 100
       WORKER_TENANT_AUTO_CREATE: 'true'
     ports:
       - "12345:12345"
@@ -29,7 +28,7 @@ services:
       network:
         ipv4_address: 10.5.0.5
     healthcheck:
-      test: [ "CMD", "curl", "http://localhost:12345/actuator/health"; ]
+      test: [ "CMD", "curl", 
"http://localhost:12345/dolphinscheduler/actuator/health"; ]
       interval: 5s
       timeout: 60s
       retries: 120
diff --git 
a/dolphinscheduler-api-test/dolphinscheduler-api-test-case/src/test/resources/docker/datasource-clickhouse/docker-compose.yaml
 
b/dolphinscheduler-api-test/dolphinscheduler-api-test-case/src/test/resources/docker/datasource-clickhouse/docker-compose.yaml
index fd14568ad9..29e4ba140b 100644
--- 
a/dolphinscheduler-api-test/dolphinscheduler-api-test-case/src/test/resources/docker/datasource-clickhouse/docker-compose.yaml
+++ 
b/dolphinscheduler-api-test/dolphinscheduler-api-test-case/src/test/resources/docker/datasource-clickhouse/docker-compose.yaml
@@ -21,14 +21,13 @@ services:
   dolphinscheduler:
     image: apache/dolphinscheduler-standalone-server:ci
     environment:
-      MASTER_MAX_CPU_LOAD_AVG: 100
       WORKER_TENANT_AUTO_CREATE: 'true'
     ports:
       - "12345:12345"
     networks:
       - api-test
     healthcheck:
-      test: [ "CMD", "curl", "http://localhost:12345/actuator/health"; ]
+      test: [ "CMD", "curl", 
"http://localhost:12345/dolphinscheduler/actuator/health"; ]
       interval: 5s
       timeout: 60s
       retries: 120
diff --git 
a/dolphinscheduler-api-test/dolphinscheduler-api-test-case/src/test/resources/docker/datasource-hive/docker-compose.yaml
 
b/dolphinscheduler-api-test/dolphinscheduler-api-test-case/src/test/resources/docker/datasource-hive/docker-compose.yaml
index 7cfe64badd..c8ec0c5792 100644
--- 
a/dolphinscheduler-api-test/dolphinscheduler-api-test-case/src/test/resources/docker/datasource-hive/docker-compose.yaml
+++ 
b/dolphinscheduler-api-test/dolphinscheduler-api-test-case/src/test/resources/docker/datasource-hive/docker-compose.yaml
@@ -21,14 +21,13 @@ services:
   dolphinscheduler:
     image: apache/dolphinscheduler-standalone-server:ci
     environment:
-      MASTER_MAX_CPU_LOAD_AVG: 100
       WORKER_TENANT_AUTO_CREATE: 'true'
     ports:
       - "12345:12345"
     networks:
       - api-test
     healthcheck:
-      test: [ "CMD", "curl", "http://localhost:12345/actuator/health"; ]
+      test: [ "CMD", "curl", 
"http://localhost:12345/dolphinscheduler/actuator/health"; ]
       interval: 5s
       timeout: 60s
       retries: 120
diff --git 
a/dolphinscheduler-api-test/dolphinscheduler-api-test-case/src/test/resources/docker/datasource-mysql/docker-compose.yaml
 
b/dolphinscheduler-api-test/dolphinscheduler-api-test-case/src/test/resources/docker/datasource-mysql/docker-compose.yaml
index d4134ef3f9..054e1bd482 100644
--- 
a/dolphinscheduler-api-test/dolphinscheduler-api-test-case/src/test/resources/docker/datasource-mysql/docker-compose.yaml
+++ 
b/dolphinscheduler-api-test/dolphinscheduler-api-test-case/src/test/resources/docker/datasource-mysql/docker-compose.yaml
@@ -21,7 +21,6 @@ services:
   dolphinscheduler:
     image: apache/dolphinscheduler-standalone-server:ci
     environment:
-      MASTER_MAX_CPU_LOAD_AVG: 100
       WORKER_TENANT_AUTO_CREATE: 'true'
     ports:
       - "12345:12345"
@@ -31,7 +30,7 @@ services:
       - ./download-mysql.sh:/tmp/download-mysql.sh
     entrypoint: [ 'bash', '-c', '/bin/bash /tmp/download-mysql.sh && 
/opt/dolphinscheduler/bin/start.sh && tail -f /dev/null' ]
     healthcheck:
-      test: [ "CMD", "curl", "http://localhost:12345/actuator/health"; ]
+      test: [ "CMD", "curl", 
"http://localhost:12345/dolphinscheduler/actuator/health"; ]
       interval: 5s
       timeout: 60s
       retries: 120
diff --git 
a/dolphinscheduler-api-test/dolphinscheduler-api-test-case/src/test/resources/docker/datasource-postgresql/docker-compose.yaml
 
b/dolphinscheduler-api-test/dolphinscheduler-api-test-case/src/test/resources/docker/datasource-postgresql/docker-compose.yaml
index 00f88b4c9a..5281556e85 100644
--- 
a/dolphinscheduler-api-test/dolphinscheduler-api-test-case/src/test/resources/docker/datasource-postgresql/docker-compose.yaml
+++ 
b/dolphinscheduler-api-test/dolphinscheduler-api-test-case/src/test/resources/docker/datasource-postgresql/docker-compose.yaml
@@ -21,14 +21,13 @@ services:
   dolphinscheduler:
     image: apache/dolphinscheduler-standalone-server:ci
     environment:
-      MASTER_MAX_CPU_LOAD_AVG: 100
       WORKER_TENANT_AUTO_CREATE: 'true'
     ports:
       - "12345:12345"
     networks:
       - api-test
     healthcheck:
-      test: [ "CMD", "curl", "http://localhost:12345/actuator/health"; ]
+      test: [ "CMD", "curl", 
"http://localhost:12345/dolphinscheduler/actuator/health"; ]
       interval: 5s
       timeout: 60s
       retries: 120
diff --git 
a/dolphinscheduler-api-test/dolphinscheduler-api-test-case/src/test/resources/docker/datasource-sqlserver/docker-compose.yaml
 
b/dolphinscheduler-api-test/dolphinscheduler-api-test-case/src/test/resources/docker/datasource-sqlserver/docker-compose.yaml
index e8dde399b9..656f6a3ecc 100644
--- 
a/dolphinscheduler-api-test/dolphinscheduler-api-test-case/src/test/resources/docker/datasource-sqlserver/docker-compose.yaml
+++ 
b/dolphinscheduler-api-test/dolphinscheduler-api-test-case/src/test/resources/docker/datasource-sqlserver/docker-compose.yaml
@@ -21,14 +21,13 @@ services:
   dolphinscheduler:
     image: apache/dolphinscheduler-standalone-server:ci
     environment:
-      MASTER_MAX_CPU_LOAD_AVG: 100
       WORKER_TENANT_AUTO_CREATE: 'true'
     ports:
       - "12345:12345"
     networks:
       - api-test
     healthcheck:
-      test: [ "CMD", "curl", "http://localhost:12345/actuator/health"; ]
+      test: [ "CMD", "curl", 
"http://localhost:12345/dolphinscheduler/actuator/health"; ]
       interval: 5s
       timeout: 60s
       retries: 120
diff --git 
a/dolphinscheduler-api-test/dolphinscheduler-api-test-case/src/test/resources/docker/file-manage/docker-compose.yaml
 
b/dolphinscheduler-api-test/dolphinscheduler-api-test-case/src/test/resources/docker/file-manage/docker-compose.yaml
index 0ac4886ad8..8dca2fbf03 100644
--- 
a/dolphinscheduler-api-test/dolphinscheduler-api-test-case/src/test/resources/docker/file-manage/docker-compose.yaml
+++ 
b/dolphinscheduler-api-test/dolphinscheduler-api-test-case/src/test/resources/docker/file-manage/docker-compose.yaml
@@ -21,14 +21,13 @@ services:
   dolphinscheduler:
     image: apache/dolphinscheduler-standalone-server:ci
     environment:
-      MASTER_MAX_CPU_LOAD_AVG: 100
       WORKER_TENANT_AUTO_CREATE: 'true'
     ports:
       - "12345:12345"
     networks:
       - api-test
     healthcheck:
-      test: [ "CMD", "curl", "http://localhost:12345/actuator/health"; ]
+      test: [ "CMD", "curl", 
"http://localhost:12345/dolphinscheduler/actuator/health"; ]
       interval: 5s
       timeout: 60s
       retries: 120
diff --git 
a/dolphinscheduler-api-test/dolphinscheduler-api-test-core/src/main/java/org/apache/dolphinscheduler/api/test/core/DolphinSchedulerExtension.java
 
b/dolphinscheduler-api-test/dolphinscheduler-api-test-core/src/main/java/org/apache/dolphinscheduler/api/test/core/DolphinSchedulerExtension.java
index 87771cc010..c91ecf99bf 100644
--- 
a/dolphinscheduler-api-test/dolphinscheduler-api-test-core/src/main/java/org/apache/dolphinscheduler/api/test/core/DolphinSchedulerExtension.java
+++ 
b/dolphinscheduler-api-test/dolphinscheduler-api-test-core/src/main/java/org/apache/dolphinscheduler/api/test/core/DolphinSchedulerExtension.java
@@ -24,6 +24,7 @@ import java.net.URL;
 import java.time.Duration;
 import java.util.List;
 import java.util.Objects;
+import java.util.Optional;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
@@ -31,6 +32,7 @@ import org.junit.jupiter.api.extension.AfterAllCallback;
 import org.junit.jupiter.api.extension.BeforeAllCallback;
 import org.junit.jupiter.api.extension.ExtensionContext;
 import org.slf4j.Logger;
+import org.testcontainers.containers.ContainerState;
 import org.testcontainers.containers.DockerComposeContainer;
 import org.testcontainers.containers.wait.strategy.Wait;
 
@@ -49,6 +51,9 @@ final class DolphinSchedulerExtension implements 
BeforeAllCallback, AfterAllCall
         if (!localMode) {
             compose = createDockerCompose(context);
             compose.start();
+            compose.getContainerByServiceName(serviceName)
+                    .map(ContainerState::isHealthy)
+                    .orElseThrow(() -> new 
IllegalStateException("DolphinScheduler service is not healthy"));
         }
     }
 
@@ -63,17 +68,17 @@ final class DolphinSchedulerExtension implements 
BeforeAllCallback, AfterAllCall
         final Class<?> clazz = context.getRequiredTestClass();
         final DolphinScheduler annotation = 
clazz.getAnnotation(DolphinScheduler.class);
         final List<File> files = Stream.of(annotation.composeFiles())
-            .map(it -> DolphinScheduler.class.getClassLoader().getResource(it))
-            .filter(Objects::nonNull)
-            .map(URL::getPath)
-            .map(File::new)
-            .collect(Collectors.toList());
+                .map(it -> 
DolphinScheduler.class.getClassLoader().getResource(it))
+                .filter(Objects::nonNull)
+                .map(URL::getPath)
+                .map(File::new)
+                .collect(Collectors.toList());
 
         compose = new DockerComposeContainer<>(files)
-            .withPull(true)
-            .withTailChildContainers(true)
-            .withLogConsumer(serviceName, outputFrame -> 
log.info(outputFrame.getUtf8String()))
-            .waitingFor(serviceName, 
Wait.forHealthcheck().withStartupTimeout(Duration.ofSeconds(Constants.DOCKER_COMPOSE_DEFAULT_TIMEOUT)));
+                .withPull(true)
+                .withTailChildContainers(true)
+                .withLogConsumer(serviceName, outputFrame -> 
log.info(outputFrame.getUtf8String()))
+                .waitingFor(serviceName, 
Wait.forHealthcheck().withStartupTimeout(Duration.ofSeconds(Constants.DOCKER_COMPOSE_DEFAULT_TIMEOUT)));
 
         return compose;
     }
diff --git 
a/dolphinscheduler-dao/src/test/java/org/apache/dolphinscheduler/dao/repository/impl/CommandDaoImplTest.java
 
b/dolphinscheduler-dao/src/test/java/org/apache/dolphinscheduler/dao/repository/impl/CommandDaoImplTest.java
index df5a2562aa..9185a96551 100644
--- 
a/dolphinscheduler-dao/src/test/java/org/apache/dolphinscheduler/dao/repository/impl/CommandDaoImplTest.java
+++ 
b/dolphinscheduler-dao/src/test/java/org/apache/dolphinscheduler/dao/repository/impl/CommandDaoImplTest.java
@@ -18,7 +18,6 @@
 package org.apache.dolphinscheduler.dao.repository.impl;
 
 import static com.google.common.truth.Truth.assertThat;
-import static org.junit.jupiter.api.Assertions.assertFalse;
 
 import org.apache.dolphinscheduler.common.enums.CommandType;
 import org.apache.dolphinscheduler.common.enums.FailureStrategy;
@@ -34,7 +33,6 @@ import org.apache.dolphinscheduler.dao.utils.WorkerGroupUtils;
 import org.apache.commons.lang3.RandomUtils;
 
 import java.util.List;
-import java.util.stream.Collectors;
 
 import org.junit.jupiter.api.RepeatedTest;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -63,14 +61,6 @@ class CommandDaoImplTest extends BaseDaoTest {
         }
 
         List<Command> commands = 
commandDao.queryCommandByIdSlot(currentSlotIndex, totalSlot, idStep, fetchSize);
-        assertFalse(commands.isEmpty(),
-                "Commands should not be empty, currentSlotIndex: " + 
currentSlotIndex +
-                        ", totalSlot: " + totalSlot +
-                        ", idStep: " + idStep +
-                        ", fetchSize: " + fetchSize +
-                        ", total command size: " + commandSize +
-                        ", total commands: "
-                        + 
commandDao.queryAll().stream().map(Command::getId).collect(Collectors.toList()));
         assertThat(commands.size())
                 .isEqualTo(commandDao.queryAll()
                         .stream()
diff --git 
a/dolphinscheduler-e2e/dolphinscheduler-e2e-case/src/test/resources/docker/basic/docker-compose.yaml
 
b/dolphinscheduler-e2e/dolphinscheduler-e2e-case/src/test/resources/docker/basic/docker-compose.yaml
index 89d645c2c1..37bebedc64 100644
--- 
a/dolphinscheduler-e2e/dolphinscheduler-e2e-case/src/test/resources/docker/basic/docker-compose.yaml
+++ 
b/dolphinscheduler-e2e/dolphinscheduler-e2e-case/src/test/resources/docker/basic/docker-compose.yaml
@@ -28,7 +28,7 @@ services:
     networks:
       - e2e
     healthcheck:
-      test: [ "CMD", "curl", "http://localhost:12345/actuator/health"; ]
+      test: [ "CMD", "curl", 
"http://localhost:12345/dolphinscheduler/actuator/health"; ]
       interval: 5s
       timeout: 5s
       retries: 120
diff --git 
a/dolphinscheduler-e2e/dolphinscheduler-e2e-case/src/test/resources/docker/datasource-clickhouse/docker-compose.yaml
 
b/dolphinscheduler-e2e/dolphinscheduler-e2e-case/src/test/resources/docker/datasource-clickhouse/docker-compose.yaml
index 3b9ccc0f93..ec108f067e 100644
--- 
a/dolphinscheduler-e2e/dolphinscheduler-e2e-case/src/test/resources/docker/datasource-clickhouse/docker-compose.yaml
+++ 
b/dolphinscheduler-e2e/dolphinscheduler-e2e-case/src/test/resources/docker/datasource-clickhouse/docker-compose.yaml
@@ -28,7 +28,7 @@ services:
     networks:
       - e2e
     healthcheck:
-      test: [ "CMD", "curl", "http://localhost:12345/actuator/health"; ]
+      test: [ "CMD", "curl", 
"http://localhost:12345/dolphinscheduler/actuator/health"; ]
       interval: 5s
       timeout: 5s
       retries: 120
diff --git 
a/dolphinscheduler-e2e/dolphinscheduler-e2e-case/src/test/resources/docker/datasource-hive/docker-compose.yaml
 
b/dolphinscheduler-e2e/dolphinscheduler-e2e-case/src/test/resources/docker/datasource-hive/docker-compose.yaml
index b7609ff874..d28abc8c22 100644
--- 
a/dolphinscheduler-e2e/dolphinscheduler-e2e-case/src/test/resources/docker/datasource-hive/docker-compose.yaml
+++ 
b/dolphinscheduler-e2e/dolphinscheduler-e2e-case/src/test/resources/docker/datasource-hive/docker-compose.yaml
@@ -28,7 +28,7 @@ services:
     networks:
       - e2e
     healthcheck:
-      test: [ "CMD", "curl", "http://localhost:12345/actuator/health"; ]
+      test: [ "CMD", "curl", 
"http://localhost:12345/dolphinscheduler/actuator/health"; ]
       interval: 5s
       timeout: 5s
       retries: 120
diff --git 
a/dolphinscheduler-e2e/dolphinscheduler-e2e-case/src/test/resources/docker/datasource-mysql/docker-compose.yaml
 
b/dolphinscheduler-e2e/dolphinscheduler-e2e-case/src/test/resources/docker/datasource-mysql/docker-compose.yaml
index 099736805e..8287eb83de 100644
--- 
a/dolphinscheduler-e2e/dolphinscheduler-e2e-case/src/test/resources/docker/datasource-mysql/docker-compose.yaml
+++ 
b/dolphinscheduler-e2e/dolphinscheduler-e2e-case/src/test/resources/docker/datasource-mysql/docker-compose.yaml
@@ -31,7 +31,7 @@ services:
       - ./download-mysql.sh:/tmp/download-mysql.sh
     entrypoint: ['bash', '-c', '/bin/bash /tmp/download-mysql.sh && 
/opt/dolphinscheduler/bin/start.sh && tail -f /dev/null']
     healthcheck:
-      test: [ "CMD", "curl", "http://localhost:12345/actuator/health"; ]
+      test: [ "CMD", "curl", 
"http://localhost:12345/dolphinscheduler/actuator/health"; ]
       interval: 5s
       timeout: 5s
       retries: 120
diff --git 
a/dolphinscheduler-e2e/dolphinscheduler-e2e-case/src/test/resources/docker/datasource-postgresql/docker-compose.yaml
 
b/dolphinscheduler-e2e/dolphinscheduler-e2e-case/src/test/resources/docker/datasource-postgresql/docker-compose.yaml
index 7d1e38832c..878bf24364 100644
--- 
a/dolphinscheduler-e2e/dolphinscheduler-e2e-case/src/test/resources/docker/datasource-postgresql/docker-compose.yaml
+++ 
b/dolphinscheduler-e2e/dolphinscheduler-e2e-case/src/test/resources/docker/datasource-postgresql/docker-compose.yaml
@@ -28,9 +28,9 @@ services:
     networks:
       - e2e
     healthcheck:
-      test: [ "CMD", "curl", "http://localhost:12345/actuator/health"; ]
+      test: [ "CMD", "curl", 
"http://localhost:12345/dolphinscheduler/actuator/health"; ]
       interval: 5s
-      timeout: 300s
+      timeout: 5s
       retries: 120
     depends_on:
       postgres:
diff --git 
a/dolphinscheduler-e2e/dolphinscheduler-e2e-case/src/test/resources/docker/datasource-sqlserver/docker-compose.yaml
 
b/dolphinscheduler-e2e/dolphinscheduler-e2e-case/src/test/resources/docker/datasource-sqlserver/docker-compose.yaml
index cf94105313..0e85692395 100644
--- 
a/dolphinscheduler-e2e/dolphinscheduler-e2e-case/src/test/resources/docker/datasource-sqlserver/docker-compose.yaml
+++ 
b/dolphinscheduler-e2e/dolphinscheduler-e2e-case/src/test/resources/docker/datasource-sqlserver/docker-compose.yaml
@@ -28,7 +28,7 @@ services:
     networks:
       - e2e
     healthcheck:
-      test: [ "CMD", "curl", "http://localhost:12345/actuator/health"; ]
+      test: [ "CMD", "curl", 
"http://localhost:12345/dolphinscheduler/actuator/health"; ]
       interval: 5s
       timeout: 5s
       retries: 120
diff --git 
a/dolphinscheduler-e2e/dolphinscheduler-e2e-case/src/test/resources/docker/file-manage/docker-compose.yaml
 
b/dolphinscheduler-e2e/dolphinscheduler-e2e-case/src/test/resources/docker/file-manage/docker-compose.yaml
index ccfe940a6d..49b9de813f 100644
--- 
a/dolphinscheduler-e2e/dolphinscheduler-e2e-case/src/test/resources/docker/file-manage/docker-compose.yaml
+++ 
b/dolphinscheduler-e2e/dolphinscheduler-e2e-case/src/test/resources/docker/file-manage/docker-compose.yaml
@@ -28,7 +28,7 @@ services:
     networks:
       - e2e
     healthcheck:
-      test: [ "CMD", "curl", "http://localhost:12345/actuator/health"; ]
+      test: [ "CMD", "curl", 
"http://localhost:12345/dolphinscheduler/actuator/health"; ]
       interval: 5s
       timeout: 5s
       retries: 120
diff --git 
a/dolphinscheduler-e2e/dolphinscheduler-e2e-case/src/test/resources/docker/workflow-http/docker-compose.yaml
 
b/dolphinscheduler-e2e/dolphinscheduler-e2e-case/src/test/resources/docker/workflow-http/docker-compose.yaml
index 2591e3d74a..0f6a4a6205 100644
--- 
a/dolphinscheduler-e2e/dolphinscheduler-e2e-case/src/test/resources/docker/workflow-http/docker-compose.yaml
+++ 
b/dolphinscheduler-e2e/dolphinscheduler-e2e-case/src/test/resources/docker/workflow-http/docker-compose.yaml
@@ -29,7 +29,7 @@ services:
     networks:
       - e2e
     healthcheck:
-      test: [ "CMD", "curl", "http://localhost:12345/actuator/health"; ]
+      test: [ "CMD", "curl", 
"http://localhost:12345/dolphinscheduler/actuator/health"; ]
       interval: 5s
       timeout: 5s
       retries: 120

Reply via email to