Skip to content

Commit 73b2cbf

Browse files
committed
Addressed review comments: (1) pluralized SECRET_xyz config entries, (2) renamed 'containerInfo' -> 'buildContainerInfo', (3) added additional case to illegalSecretInput() check.
1 parent 6f062c0 commit 73b2cbf

File tree

7 files changed

+34
-32
lines changed

7 files changed

+34
-32
lines changed

resource-managers/mesos/src/main/scala/org/apache/spark/deploy/mesos/config.scala

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,30 +22,30 @@ import java.util.concurrent.TimeUnit
2222
import org.apache.spark.internal.config.ConfigBuilder
2323

2424
private[spark] class MesosSecretConfig(taskType: String) {
25-
private[spark] val SECRET_NAME =
25+
private[spark] val SECRET_NAMES =
2626
ConfigBuilder(s"spark.mesos.$taskType.secret.names")
2727
.doc("A comma-separated list of secret reference names. Consult the Mesos Secret " +
2828
"protobuf for more information.")
2929
.stringConf
3030
.toSequence
3131
.createOptional
3232

33-
private[spark] val SECRET_VALUE =
33+
private[spark] val SECRET_VALUES =
3434
ConfigBuilder(s"spark.mesos.$taskType.secret.values")
3535
.doc("A comma-separated list of secret values.")
3636
.stringConf
3737
.toSequence
3838
.createOptional
3939

40-
private[spark] val SECRET_ENVKEY =
40+
private[spark] val SECRET_ENVKEYS =
4141
ConfigBuilder(s"spark.mesos.$taskType.secret.envkeys")
4242
.doc("A comma-separated list of the environment variables to contain the secrets." +
4343
"The environment variable will be set on the driver.")
4444
.stringConf
4545
.toSequence
4646
.createOptional
4747

48-
private[spark] val SECRET_FILENAME =
48+
private[spark] val SECRET_FILENAMES =
4949
ConfigBuilder(s"spark.mesos.$taskType.secret.filenames")
5050
.doc("A comma-separated list of file paths secret will be written to. Consult the Mesos " +
5151
"Secret protobuf for more information.")

resource-managers/mesos/src/main/scala/org/apache/spark/scheduler/cluster/mesos/MesosClusterScheduler.scala

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -543,7 +543,8 @@ private[spark] class MesosClusterScheduler(
543543
.setName(s"Driver for ${appName}")
544544
.setSlaveId(offer.offer.getSlaveId)
545545
.setCommand(buildDriverCommand(desc))
546-
.setContainer(MesosSchedulerBackendUtil.containerInfo(desc.conf, config.driverSecretConfig))
546+
.setContainer(MesosSchedulerBackendUtil.buildContainerInfo(
547+
desc.conf, config.driverSecretConfig))
547548
.addAllResources(cpuResourcesToUse.asJava)
548549
.addAllResources(memResourcesToUse.asJava)
549550
.setLabels(driverLabels)

resource-managers/mesos/src/main/scala/org/apache/spark/scheduler/cluster/mesos/MesosCoarseGrainedSchedulerBackend.scala

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -460,7 +460,8 @@ private[spark] class MesosCoarseGrainedSchedulerBackend(
460460
.setName(s"${sc.appName} $taskId")
461461
.setLabels(MesosProtoUtils.mesosLabels(taskLabels))
462462
.addAllResources(resourcesToUse.asJava)
463-
.setContainer(MesosSchedulerBackendUtil.containerInfo(sc.conf, executorSecretConfig))
463+
.setContainer(MesosSchedulerBackendUtil.buildContainerInfo(
464+
sc.conf, executorSecretConfig))
464465

465466
tasks(offer.getId) ::= taskBuilder.build()
466467
remainingResources(offerId) = resourcesLeft.asJava

resource-managers/mesos/src/main/scala/org/apache/spark/scheduler/cluster/mesos/MesosFineGrainedSchedulerBackend.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,7 @@ private[spark] class MesosFineGrainedSchedulerBackend(
161161
.setData(ByteString.copyFrom(createExecArg()))
162162

163163
executorInfo.setContainer(
164-
MesosSchedulerBackendUtil.containerInfo(sc.conf, config.executorSecretConfig))
164+
MesosSchedulerBackendUtil.buildContainerInfo(sc.conf, config.executorSecretConfig))
165165
(executorInfo.build(), resourcesAfterMem.asJava)
166166
}
167167

resource-managers/mesos/src/main/scala/org/apache/spark/scheduler/cluster/mesos/MesosSchedulerBackendUtil.scala

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717

1818
package org.apache.spark.scheduler.cluster.mesos
1919

20-
import org.apache.mesos.Protos._
20+
import org.apache.mesos.Protos.{ContainerInfo, Environment, Image, NetworkInfo, Parameter, Secret, Volume}
2121
import org.apache.mesos.Protos.ContainerInfo.{DockerInfo, MesosInfo}
2222
import org.apache.mesos.Protos.Environment.Variable
2323
import org.apache.mesos.protobuf.ByteString
@@ -126,7 +126,8 @@ private[mesos] object MesosSchedulerBackendUtil extends Logging {
126126
.toList
127127
}
128128

129-
def containerInfo(conf: SparkConf, secretConfig: MesosSecretConfig): ContainerInfo.Builder = {
129+
def buildContainerInfo(conf: SparkConf, secretConfig: MesosSecretConfig):
130+
ContainerInfo.Builder = {
130131
val containerType = if (conf.contains("spark.mesos.executor.docker.image") &&
131132
conf.get("spark.mesos.containerizer", "docker") == "docker") {
132133
ContainerInfo.Type.DOCKER
@@ -219,10 +220,10 @@ private[mesos] object MesosSchedulerBackendUtil extends Logging {
219220
}
220221

221222
val referenceSecrets: Seq[Secret] =
222-
conf.get(secretConfig.SECRET_NAME).getOrElse(Nil).map(s => createReferenceSecret(s))
223+
conf.get(secretConfig.SECRET_NAMES).getOrElse(Nil).map(s => createReferenceSecret(s))
223224

224225
val valueSecrets: Seq[Secret] = {
225-
conf.get(secretConfig.SECRET_VALUE).getOrElse(Nil).map(s => createValueSecret(s))
226+
conf.get(secretConfig.SECRET_VALUES).getOrElse(Nil).map(s => createValueSecret(s))
226227
}
227228

228229
if (valueSecrets.nonEmpty && referenceSecrets.nonEmpty) {
@@ -232,13 +233,10 @@ private[mesos] object MesosSchedulerBackendUtil extends Logging {
232233
if (referenceSecrets.nonEmpty) referenceSecrets else valueSecrets
233234
}
234235

235-
private def illegalSecretInput(dest: Seq[String], s: Seq[Secret]): Boolean = {
236-
if (dest.isEmpty) { // no destination set (ie not using secrets of this type
237-
return false
238-
}
239-
if (dest.nonEmpty && s.nonEmpty) {
240-
// make sure there is a destination for each secret of this type
241-
if (dest.length != s.length) {
236+
private def illegalSecretInput(dest: Seq[String], secrets: Seq[Secret]): Boolean = {
237+
if (dest.nonEmpty) {
238+
// make sure there is a one-to-one correspondence between destinations and secrets
239+
if (dest.length != secrets.length) {
242240
return true
243241
}
244242
}
@@ -248,7 +246,7 @@ private[mesos] object MesosSchedulerBackendUtil extends Logging {
248246
private def getSecretVolume(conf: SparkConf, secretConfig: MesosSecretConfig): List[Volume] = {
249247
val secrets = getSecrets(conf, secretConfig)
250248
val secretPaths: Seq[String] =
251-
conf.get(secretConfig.SECRET_FILENAME).getOrElse(Nil)
249+
conf.get(secretConfig.SECRET_FILENAMES).getOrElse(Nil)
252250

253251
if (illegalSecretInput(secretPaths, secrets)) {
254252
throw new SparkException(
@@ -272,7 +270,7 @@ private[mesos] object MesosSchedulerBackendUtil extends Logging {
272270
private def getSecretEnvVar(conf: SparkConf, secretConfig: MesosSecretConfig):
273271
List[Variable] = {
274272
val secrets = getSecrets(conf, secretConfig)
275-
val secretEnvKeys = conf.get(secretConfig.SECRET_ENVKEY).getOrElse(Nil)
273+
val secretEnvKeys = conf.get(secretConfig.SECRET_ENVKEYS).getOrElse(Nil)
276274
if (illegalSecretInput(secretEnvKeys, secrets)) {
277275
throw new SparkException(
278276
s"Need to give equal numbers of secrets and environment keys " +

resource-managers/mesos/src/test/scala/org/apache/spark/scheduler/cluster/mesos/MesosSchedulerBackendUtilSuite.scala

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@ class MesosSchedulerBackendUtilSuite extends SparkFunSuite {
2727
conf.set("spark.mesos.executor.docker.parameters", "a,b")
2828
conf.set("spark.mesos.executor.docker.image", "test")
2929

30-
val containerInfo = MesosSchedulerBackendUtil.containerInfo(conf, config.executorSecretConfig)
30+
val containerInfo = MesosSchedulerBackendUtil.buildContainerInfo(
31+
conf, config.executorSecretConfig)
3132
val params = containerInfo.getDocker.getParametersList
3233

3334
assert(params.size() == 0)
@@ -38,7 +39,8 @@ class MesosSchedulerBackendUtilSuite extends SparkFunSuite {
3839
conf.set("spark.mesos.executor.docker.parameters", "a=1,b=2,c=3")
3940
conf.set("spark.mesos.executor.docker.image", "test")
4041

41-
val containerInfo = MesosSchedulerBackendUtil.containerInfo(conf, config.executorSecretConfig)
42+
val containerInfo = MesosSchedulerBackendUtil.buildContainerInfo(
43+
conf, config.executorSecretConfig)
4244
val params = containerInfo.getDocker.getParametersList
4345
assert(params.size() == 3)
4446
assert(params.get(0).getKey == "a")

resource-managers/mesos/src/test/scala/org/apache/spark/scheduler/cluster/mesos/Utils.scala

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -113,8 +113,8 @@ object Utils {
113113
val secretName = "/path/to/secret,/anothersecret"
114114
val envKey = "SECRET_ENV_KEY,PASSWORD"
115115
Map(
116-
secretConfig.SECRET_NAME.key -> secretName,
117-
secretConfig.SECRET_ENVKEY.key -> envKey
116+
secretConfig.SECRET_NAMES.key -> secretName,
117+
secretConfig.SECRET_ENVKEYS.key -> envKey
118118
)
119119
}
120120

@@ -125,7 +125,7 @@ object Utils {
125125
.getVariablesList
126126
.asScala
127127
assert(envVars
128-
.filter(!_.getName.startsWith("SPARK_")).length == 2) // user-defined secret env vars
128+
.count(!_.getName.startsWith("SPARK_")) == 2) // user-defined secret env vars
129129
val variableOne = envVars.filter(_.getName == "SECRET_ENV_KEY").head
130130
assert(variableOne.getSecret.isInitialized)
131131
assert(variableOne.getSecret.getType == Secret.Type.REFERENCE)
@@ -142,8 +142,8 @@ object Utils {
142142
val secretValues = "user,password"
143143
val envKeys = "USER,PASSWORD"
144144
Map(
145-
secretConfig.SECRET_VALUE.key -> secretValues,
146-
secretConfig.SECRET_ENVKEY.key -> envKeys
145+
secretConfig.SECRET_VALUES.key -> secretValues,
146+
secretConfig.SECRET_ENVKEYS.key -> envKeys
147147
)
148148
}
149149

@@ -154,7 +154,7 @@ object Utils {
154154
.getVariablesList
155155
.asScala
156156
assert(envVars
157-
.filter(!_.getName.startsWith("SPARK_")).length == 2) // user-defined secret env vars
157+
.count(!_.getName.startsWith("SPARK_")) == 2) // user-defined secret env vars
158158
val variableOne = envVars.filter(_.getName == "USER").head
159159
assert(variableOne.getSecret.isInitialized)
160160
assert(variableOne.getSecret.getType == Secret.Type.VALUE)
@@ -171,8 +171,8 @@ object Utils {
171171
val secretName = "/path/to/secret,/anothersecret"
172172
val secretPath = "/topsecret,/mypassword"
173173
Map(
174-
secretConfig.SECRET_NAME.key -> secretName,
175-
secretConfig.SECRET_FILENAME.key -> secretPath
174+
secretConfig.SECRET_NAMES.key -> secretName,
175+
secretConfig.SECRET_FILENAMES.key -> secretPath
176176
)
177177
}
178178

@@ -193,8 +193,8 @@ object Utils {
193193
val secretValues = "user,password"
194194
val secretPath = "/whoami,/mypassword"
195195
Map(
196-
secretConfig.SECRET_VALUE.key -> secretValues,
197-
secretConfig.SECRET_FILENAME.key -> secretPath
196+
secretConfig.SECRET_VALUES.key -> secretValues,
197+
secretConfig.SECRET_FILENAMES.key -> secretPath
198198
)
199199
}
200200

0 commit comments

Comments
 (0)