You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@beam.apache.org by ke...@apache.org on 2019/02/20 04:47:13 UTC
[beam] branch master updated: [BEAM-6639] Retry pulling
clickhouse-server docker image
This is an automated email from the ASF dual-hosted git repository.
kenn pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/beam.git
The following commit(s) were added to refs/heads/master by this push:
new efe66f1 [BEAM-6639] Retry pulling clickhouse-server docker image
new 399de52 Merge pull request #7797: [BEAM-6639] Retry pulling clickhouse-server docker image
efe66f1 is described below
commit efe66f156fedc0fda412f8737801f4e0777966db
Author: Gleb Kanterov <gl...@spotify.com>
AuthorDate: Sat Feb 9 16:59:44 2019 +0100
[BEAM-6639] Retry pulling clickhouse-server docker image
---
.../beam/sdk/io/clickhouse/BaseClickHouseTest.java | 61 ++++++++++++++++++++--
1 file changed, 58 insertions(+), 3 deletions(-)
diff --git a/sdks/java/io/clickhouse/src/test/java/org/apache/beam/sdk/io/clickhouse/BaseClickHouseTest.java b/sdks/java/io/clickhouse/src/test/java/org/apache/beam/sdk/io/clickhouse/BaseClickHouseTest.java
index 44e98f7..edf29a5 100644
--- a/sdks/java/io/clickhouse/src/test/java/org/apache/beam/sdk/io/clickhouse/BaseClickHouseTest.java
+++ b/sdks/java/io/clickhouse/src/test/java/org/apache/beam/sdk/io/clickhouse/BaseClickHouseTest.java
@@ -18,12 +18,25 @@
package org.apache.beam.sdk.io.clickhouse;
import com.github.dockerjava.api.command.CreateContainerCmd;
+import com.github.dockerjava.api.model.Image;
+import java.io.IOException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
+import java.util.List;
+import org.apache.beam.sdk.util.BackOff;
+import org.apache.beam.sdk.util.BackOffUtils;
+import org.apache.beam.sdk.util.FluentBackoff;
+import org.apache.beam.sdk.util.Sleeper;
+import org.apache.beam.vendor.guava.v20_0.com.google.common.base.Joiner;
+import org.joda.time.Duration;
import org.junit.AfterClass;
import org.junit.BeforeClass;
+import org.rnorth.ducttape.unreliables.Unreliables;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.testcontainers.DockerClientFactory;
import org.testcontainers.containers.BindMode;
import org.testcontainers.containers.ClickHouseContainer;
import org.testcontainers.containers.GenericContainer;
@@ -37,8 +50,16 @@ public class BaseClickHouseTest {
public static GenericContainer zookeeper;
public static ClickHouseContainer clickHouse;
+ // yandex/clickhouse-server:19.1.6
+ // use SHA256 not to pull docker hub for tag if image already exists locally
+ private static final String CLICKHOUSE_IMAGE =
+ "yandex/clickhouse-server@"
+ + "sha256:c75f66f3619ca70a9f7215966505eaed2fc0ca0ee7d6a7b5407d1b14df8ddefc";
+
+ private static final Logger LOG = LoggerFactory.getLogger(BaseClickHouseTest.class);
+
@BeforeClass
- public static void setup() {
+ public static void setup() throws IOException, InterruptedException {
// network sharing doesn't work with ClassRule
network = Network.newNetwork();
@@ -48,11 +69,13 @@ public class BaseClickHouseTest {
.withExposedPorts(2181)
.withNetwork(network)
.withNetworkAliases("zookeeper");
+
+ // so far zookeeper container always starts successfully, so no extra retries
zookeeper.start();
clickHouse =
(ClickHouseContainer)
- new ClickHouseContainer("yandex/clickhouse-server:19.1")
+ new ClickHouseContainer(CLICKHOUSE_IMAGE)
.withStartupAttempts(10)
.withCreateContainerCmdModifier(
// type inference for `(CreateContainerCmd) -> cmd.` doesn't work
@@ -65,7 +88,39 @@ public class BaseClickHouseTest {
"config.d/zookeeper_default.xml",
"/etc/clickhouse-server/config.d/zookeeper_default.xml",
BindMode.READ_ONLY);
- clickHouse.start();
+
+ BackOff backOff =
+ FluentBackoff.DEFAULT
+ .withMaxRetries(3)
+ .withInitialBackoff(Duration.standardSeconds(15))
+ .backoff();
+
+ // try to start clickhouse-server a couple of times, see BEAM-6639
+ while (true) {
+ try {
+ Unreliables.retryUntilSuccess(
+ 10,
+ () -> {
+ DockerClientFactory.instance()
+ .checkAndPullImage(DockerClientFactory.instance().client(), CLICKHOUSE_IMAGE);
+
+ return null;
+ });
+
+ clickHouse.start();
+ break;
+ } catch (Exception e) {
+ if (!BackOffUtils.next(Sleeper.DEFAULT, backOff)) {
+ throw e;
+ } else {
+ List<Image> images =
+ DockerClientFactory.instance().client().listImagesCmd().withShowAll(true).exec();
+ String listImagesOutput = "listImagesCmd:\n" + Joiner.on('\n').join(images) + "\n";
+
+ LOG.warn("failed to start clickhouse-server\n\n" + listImagesOutput, e);
+ }
+ }
+ }
}
@AfterClass