Skip to content
This repository was archived by the owner on Jan 9, 2020. It is now read-only.

Commit 1780d8e

Browse files
committed
Use ImageIds to look up containers and match image ids with repo tags
1 parent 70fee6d commit 1780d8e

File tree

1 file changed

+13
-12
lines changed

1 file changed

+13
-12
lines changed

resource-managers/kubernetes/integration-tests/src/test/scala/org/apache/spark/deploy/k8s/integrationtest/docker/KubernetesSuiteDockerManager.scala

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ import java.nio.file.Paths
2323
import com.google.common.base.Charsets
2424
import com.google.common.io.Files
2525
import com.spotify.docker.client.{DefaultDockerClient, DockerCertificates, LoggingBuildHandler}
26-
import com.spotify.docker.client.DockerClient.{ListContainersParam, RemoveContainerParam}
26+
import com.spotify.docker.client.DockerClient.{ListContainersParam, ListImagesParam, RemoveContainerParam}
2727
import com.spotify.docker.client.messages.Container
2828
import org.apache.http.client.utils.URIBuilder
2929
import org.scalatest.concurrent.{Eventually, PatienceConfiguration}
@@ -145,30 +145,35 @@ private[spark] class KubernetesSuiteDockerManager(
145145
* Forces all containers running an image with the configured tag to halt and be removed.
146146
*/
147147
private def removeRunningContainers(): Unit = {
148+
val imageIds = dockerClient.listImages(ListImagesParam.allImages())
149+
.asScala
150+
.filter(image => image.repoTags().asScala.exists(_.endsWith(s":$dockerTag")))
151+
.map(_.id())
152+
.toSet
148153
Eventually.eventually(KubernetesSuite.TIMEOUT, KubernetesSuite.INTERVAL) {
149-
val runningContainersWithImageTag = stopRunningContainers()
154+
val runningContainersWithImageTag = stopRunningContainers(imageIds)
150155
require(
151156
runningContainersWithImageTag.isEmpty,
152157
s"${runningContainersWithImageTag.size} containers found still running" +
153158
s" with the image tag $dockerTag")
154159
}
155160
dockerClient.listContainers(ListContainersParam.allContainers())
156161
.asScala
157-
.filter(containerHasImageWithTag(_))
162+
.filter(container => imageIds.contains(container.imageId()))
158163
.foreach(container => dockerClient.removeContainer(
159164
container.id(), RemoveContainerParam.forceKill(true)))
160165
Eventually.eventually(KubernetesSuite.TIMEOUT, KubernetesSuite.INTERVAL) {
161166
val containersWithImageTag = dockerClient.listContainers(ListContainersParam.allContainers())
162167
.asScala
163-
.filter(containerHasImageWithTag(_))
168+
.filter(container => imageIds.contains(container.imageId()))
164169
require(containersWithImageTag.isEmpty, s"${containersWithImageTag.size} containers still" +
165170
s" found with image tag $dockerTag.")
166171
}
167172

168173
}
169174

170-
private def stopRunningContainers(): Iterable[Container] = {
171-
val runningContainersWithImageTag = getRunningContainersWithImageTag()
175+
private def stopRunningContainers(imageIds: Set[String]): Iterable[Container] = {
176+
val runningContainersWithImageTag = getRunningContainersWithImageIds(imageIds)
172177
if (runningContainersWithImageTag.nonEmpty) {
173178
log.info(s"Found ${runningContainersWithImageTag.size} containers running with" +
174179
s" an image with the tag $dockerTag. Attempting to remove these containers," +
@@ -180,17 +185,13 @@ private[spark] class KubernetesSuiteDockerManager(
180185
runningContainersWithImageTag
181186
}
182187

183-
private def getRunningContainersWithImageTag(): Iterable[Container] = {
188+
private def getRunningContainersWithImageIds(imageIds: Set[String]): Iterable[Container] = {
184189
dockerClient
185190
.listContainers(
186191
ListContainersParam.allContainers(),
187192
ListContainersParam.withStatusRunning())
188193
.asScala
189-
.filter(containerHasImageWithTag(_))
190-
}
191-
192-
private def containerHasImageWithTag(container: Container): Boolean = {
193-
container.image().endsWith(s":$dockerTag")
194+
.filter(container => imageIds.contains(container.imageId()))
194195
}
195196

196197
private def deleteImage(name: String): Unit = {

0 commit comments

Comments
 (0)