diff --git a/build.gradle b/build.gradle index 52ea9afcf9..ed88d25d3e 100644 --- a/build.gradle +++ b/build.gradle @@ -87,9 +87,7 @@ subprojects { jettyVersion = '9.2.12.v20150709' jerseyVersion = '1.19.+' jooqVersion = '3.11.+' - fenzoVersion = '1.1.0-rc.9' spectatorVersion = '0.59.+' - mesosVersion = '1.7.2' postgresqlVersion = '42.2.9' protobufVersion = '3.7.+' protobufVersionOSAware = protobufVersion diff --git a/titus-api/gradle/dependency-locks/testCompileClasspath.lockfile b/titus-api/gradle/dependency-locks/testCompileClasspath.lockfile index 3e44fdf336..32b1c5336b 100644 --- a/titus-api/gradle/dependency-locks/testCompileClasspath.lockfile +++ b/titus-api/gradle/dependency-locks/testCompileClasspath.lockfile @@ -61,7 +61,6 @@ com.lmax:disruptor:3.0.1 com.netflix.archaius:archaius2-api:2.3.16 com.netflix.archaius:archaius2-core:2.3.16 com.netflix.archaius:archaius2-guice:2.3.16 -com.netflix.fenzo:fenzo-core:1.1.0-rc.9 com.netflix.frigga:frigga:0.25.0 com.netflix.governator:governator-api:1.15.11 com.netflix.governator:governator-core:1.15.11 @@ -209,7 +208,6 @@ org.apache.commons:commons-lang3:3.12.0 org.apache.commons:commons-math3:3.6.1 org.apache.logging.log4j:log4j-api:2.13.3 org.apache.logging.log4j:log4j-to-slf4j:2.13.3 -org.apache.mesos:mesos:1.7.2 org.apache.thrift:libthrift:0.9.2 org.apache.tomcat.embed:tomcat-embed-core:9.0.39 org.apache.tomcat.embed:tomcat-embed-websocket:9.0.39 diff --git a/titus-api/gradle/dependency-locks/testRuntimeClasspath.lockfile b/titus-api/gradle/dependency-locks/testRuntimeClasspath.lockfile index b85fb8da97..9f2f820ba3 100644 --- a/titus-api/gradle/dependency-locks/testRuntimeClasspath.lockfile +++ b/titus-api/gradle/dependency-locks/testRuntimeClasspath.lockfile @@ -64,7 +64,6 @@ com.lmax:disruptor:3.0.1 com.netflix.archaius:archaius2-api:2.3.16 com.netflix.archaius:archaius2-core:2.3.16 com.netflix.archaius:archaius2-guice:2.3.16 -com.netflix.fenzo:fenzo-core:1.1.0-rc.9 com.netflix.frigga:frigga:0.25.0 com.netflix.governator:governator-api:1.15.11 com.netflix.governator:governator-core:1.15.11 @@ -220,7 +219,6 @@ org.apache.commons:commons-lang3:3.12.0 org.apache.commons:commons-math3:3.6.1 org.apache.logging.log4j:log4j-api:2.13.3 org.apache.logging.log4j:log4j-to-slf4j:2.13.3 -org.apache.mesos:mesos:1.7.2 org.apache.thrift:libthrift:0.9.2 org.apache.tomcat.embed:tomcat-embed-core:9.0.39 org.apache.tomcat.embed:tomcat-embed-websocket:9.0.39 diff --git a/titus-client/gradle/dependency-locks/testCompileClasspath.lockfile b/titus-client/gradle/dependency-locks/testCompileClasspath.lockfile index 3e44fdf336..32b1c5336b 100644 --- a/titus-client/gradle/dependency-locks/testCompileClasspath.lockfile +++ b/titus-client/gradle/dependency-locks/testCompileClasspath.lockfile @@ -61,7 +61,6 @@ com.lmax:disruptor:3.0.1 com.netflix.archaius:archaius2-api:2.3.16 com.netflix.archaius:archaius2-core:2.3.16 com.netflix.archaius:archaius2-guice:2.3.16 -com.netflix.fenzo:fenzo-core:1.1.0-rc.9 com.netflix.frigga:frigga:0.25.0 com.netflix.governator:governator-api:1.15.11 com.netflix.governator:governator-core:1.15.11 @@ -209,7 +208,6 @@ org.apache.commons:commons-lang3:3.12.0 org.apache.commons:commons-math3:3.6.1 org.apache.logging.log4j:log4j-api:2.13.3 org.apache.logging.log4j:log4j-to-slf4j:2.13.3 -org.apache.mesos:mesos:1.7.2 org.apache.thrift:libthrift:0.9.2 org.apache.tomcat.embed:tomcat-embed-core:9.0.39 org.apache.tomcat.embed:tomcat-embed-websocket:9.0.39 diff --git a/titus-client/gradle/dependency-locks/testRuntimeClasspath.lockfile b/titus-client/gradle/dependency-locks/testRuntimeClasspath.lockfile index b85fb8da97..9f2f820ba3 100644 --- a/titus-client/gradle/dependency-locks/testRuntimeClasspath.lockfile +++ b/titus-client/gradle/dependency-locks/testRuntimeClasspath.lockfile @@ -64,7 +64,6 @@ com.lmax:disruptor:3.0.1 com.netflix.archaius:archaius2-api:2.3.16 com.netflix.archaius:archaius2-core:2.3.16 com.netflix.archaius:archaius2-guice:2.3.16 -com.netflix.fenzo:fenzo-core:1.1.0-rc.9 com.netflix.frigga:frigga:0.25.0 com.netflix.governator:governator-api:1.15.11 com.netflix.governator:governator-core:1.15.11 @@ -220,7 +219,6 @@ org.apache.commons:commons-lang3:3.12.0 org.apache.commons:commons-math3:3.6.1 org.apache.logging.log4j:log4j-api:2.13.3 org.apache.logging.log4j:log4j-to-slf4j:2.13.3 -org.apache.mesos:mesos:1.7.2 org.apache.thrift:libthrift:0.9.2 org.apache.tomcat.embed:tomcat-embed-core:9.0.39 org.apache.tomcat.embed:tomcat-embed-websocket:9.0.39 diff --git a/titus-common-api/gradle/dependency-locks/testCompileClasspath.lockfile b/titus-common-api/gradle/dependency-locks/testCompileClasspath.lockfile index 3e44fdf336..32b1c5336b 100644 --- a/titus-common-api/gradle/dependency-locks/testCompileClasspath.lockfile +++ b/titus-common-api/gradle/dependency-locks/testCompileClasspath.lockfile @@ -61,7 +61,6 @@ com.lmax:disruptor:3.0.1 com.netflix.archaius:archaius2-api:2.3.16 com.netflix.archaius:archaius2-core:2.3.16 com.netflix.archaius:archaius2-guice:2.3.16 -com.netflix.fenzo:fenzo-core:1.1.0-rc.9 com.netflix.frigga:frigga:0.25.0 com.netflix.governator:governator-api:1.15.11 com.netflix.governator:governator-core:1.15.11 @@ -209,7 +208,6 @@ org.apache.commons:commons-lang3:3.12.0 org.apache.commons:commons-math3:3.6.1 org.apache.logging.log4j:log4j-api:2.13.3 org.apache.logging.log4j:log4j-to-slf4j:2.13.3 -org.apache.mesos:mesos:1.7.2 org.apache.thrift:libthrift:0.9.2 org.apache.tomcat.embed:tomcat-embed-core:9.0.39 org.apache.tomcat.embed:tomcat-embed-websocket:9.0.39 diff --git a/titus-common-api/gradle/dependency-locks/testRuntimeClasspath.lockfile b/titus-common-api/gradle/dependency-locks/testRuntimeClasspath.lockfile index b85fb8da97..9f2f820ba3 100644 --- a/titus-common-api/gradle/dependency-locks/testRuntimeClasspath.lockfile +++ b/titus-common-api/gradle/dependency-locks/testRuntimeClasspath.lockfile @@ -64,7 +64,6 @@ com.lmax:disruptor:3.0.1 com.netflix.archaius:archaius2-api:2.3.16 com.netflix.archaius:archaius2-core:2.3.16 com.netflix.archaius:archaius2-guice:2.3.16 -com.netflix.fenzo:fenzo-core:1.1.0-rc.9 com.netflix.frigga:frigga:0.25.0 com.netflix.governator:governator-api:1.15.11 com.netflix.governator:governator-core:1.15.11 @@ -220,7 +219,6 @@ org.apache.commons:commons-lang3:3.12.0 org.apache.commons:commons-math3:3.6.1 org.apache.logging.log4j:log4j-api:2.13.3 org.apache.logging.log4j:log4j-to-slf4j:2.13.3 -org.apache.mesos:mesos:1.7.2 org.apache.thrift:libthrift:0.9.2 org.apache.tomcat.embed:tomcat-embed-core:9.0.39 org.apache.tomcat.embed:tomcat-embed-websocket:9.0.39 diff --git a/titus-common-ext/jooq-common/gradle/dependency-locks/testCompileClasspath.lockfile b/titus-common-ext/jooq-common/gradle/dependency-locks/testCompileClasspath.lockfile index 968dbcede9..69fbf0703e 100644 --- a/titus-common-ext/jooq-common/gradle/dependency-locks/testCompileClasspath.lockfile +++ b/titus-common-ext/jooq-common/gradle/dependency-locks/testCompileClasspath.lockfile @@ -62,7 +62,6 @@ com.lmax:disruptor:3.0.1 com.netflix.archaius:archaius2-api:2.3.16 com.netflix.archaius:archaius2-core:2.3.16 com.netflix.archaius:archaius2-guice:2.3.16 -com.netflix.fenzo:fenzo-core:1.1.0-rc.9 com.netflix.frigga:frigga:0.25.0 com.netflix.governator:governator-api:1.15.11 com.netflix.governator:governator-core:1.15.11 @@ -214,7 +213,6 @@ org.apache.commons:commons-lang3:3.12.0 org.apache.commons:commons-math3:3.6.1 org.apache.logging.log4j:log4j-api:2.13.3 org.apache.logging.log4j:log4j-to-slf4j:2.13.3 -org.apache.mesos:mesos:1.7.2 org.apache.thrift:libthrift:0.9.2 org.apache.tomcat.embed:tomcat-embed-core:9.0.39 org.apache.tomcat.embed:tomcat-embed-websocket:9.0.39 diff --git a/titus-common-ext/jooq-common/gradle/dependency-locks/testRuntimeClasspath.lockfile b/titus-common-ext/jooq-common/gradle/dependency-locks/testRuntimeClasspath.lockfile index 499ba3bb4f..9e8aad62f7 100644 --- a/titus-common-ext/jooq-common/gradle/dependency-locks/testRuntimeClasspath.lockfile +++ b/titus-common-ext/jooq-common/gradle/dependency-locks/testRuntimeClasspath.lockfile @@ -65,7 +65,6 @@ com.lmax:disruptor:3.0.1 com.netflix.archaius:archaius2-api:2.3.16 com.netflix.archaius:archaius2-core:2.3.16 com.netflix.archaius:archaius2-guice:2.3.16 -com.netflix.fenzo:fenzo-core:1.1.0-rc.9 com.netflix.frigga:frigga:0.25.0 com.netflix.governator:governator-api:1.15.11 com.netflix.governator:governator-core:1.15.11 @@ -225,7 +224,6 @@ org.apache.commons:commons-lang3:3.12.0 org.apache.commons:commons-math3:3.6.1 org.apache.logging.log4j:log4j-api:2.13.3 org.apache.logging.log4j:log4j-to-slf4j:2.13.3 -org.apache.mesos:mesos:1.7.2 org.apache.thrift:libthrift:0.9.2 org.apache.tomcat.embed:tomcat-embed-core:9.0.39 org.apache.tomcat.embed:tomcat-embed-websocket:9.0.39 diff --git a/titus-common/gradle/dependency-locks/testCompileClasspath.lockfile b/titus-common/gradle/dependency-locks/testCompileClasspath.lockfile index 7ebc725e68..ec60a8077d 100644 --- a/titus-common/gradle/dependency-locks/testCompileClasspath.lockfile +++ b/titus-common/gradle/dependency-locks/testCompileClasspath.lockfile @@ -61,7 +61,6 @@ com.lmax:disruptor:3.0.1 com.netflix.archaius:archaius2-api:2.3.16 com.netflix.archaius:archaius2-core:2.3.16 com.netflix.archaius:archaius2-guice:2.3.16 -com.netflix.fenzo:fenzo-core:1.1.0-rc.9 com.netflix.frigga:frigga:0.25.0 com.netflix.governator:governator-api:1.15.11 com.netflix.governator:governator-core:1.15.11 @@ -211,7 +210,6 @@ org.apache.commons:commons-lang3:3.12.0 org.apache.commons:commons-math3:3.6.1 org.apache.logging.log4j:log4j-api:2.13.3 org.apache.logging.log4j:log4j-to-slf4j:2.13.3 -org.apache.mesos:mesos:1.7.2 org.apache.thrift:libthrift:0.9.2 org.apache.tomcat.embed:tomcat-embed-core:9.0.39 org.apache.tomcat.embed:tomcat-embed-websocket:9.0.39 diff --git a/titus-common/gradle/dependency-locks/testRuntimeClasspath.lockfile b/titus-common/gradle/dependency-locks/testRuntimeClasspath.lockfile index eb74b96147..6b3c0040f8 100644 --- a/titus-common/gradle/dependency-locks/testRuntimeClasspath.lockfile +++ b/titus-common/gradle/dependency-locks/testRuntimeClasspath.lockfile @@ -64,7 +64,6 @@ com.lmax:disruptor:3.0.1 com.netflix.archaius:archaius2-api:2.3.16 com.netflix.archaius:archaius2-core:2.3.16 com.netflix.archaius:archaius2-guice:2.3.16 -com.netflix.fenzo:fenzo-core:1.1.0-rc.9 com.netflix.frigga:frigga:0.25.0 com.netflix.governator:governator-api:1.15.11 com.netflix.governator:governator-core:1.15.11 @@ -222,7 +221,6 @@ org.apache.commons:commons-lang3:3.12.0 org.apache.commons:commons-math3:3.6.1 org.apache.logging.log4j:log4j-api:2.13.3 org.apache.logging.log4j:log4j-to-slf4j:2.13.3 -org.apache.mesos:mesos:1.7.2 org.apache.thrift:libthrift:0.9.2 org.apache.tomcat.embed:tomcat-embed-core:9.0.39 org.apache.tomcat.embed:tomcat-embed-websocket:9.0.39 diff --git a/titus-ext/aws/gradle/dependency-locks/testCompileClasspath.lockfile b/titus-ext/aws/gradle/dependency-locks/testCompileClasspath.lockfile index 789fdccd08..54aedd397e 100644 --- a/titus-ext/aws/gradle/dependency-locks/testCompileClasspath.lockfile +++ b/titus-ext/aws/gradle/dependency-locks/testCompileClasspath.lockfile @@ -71,7 +71,6 @@ com.lmax:disruptor:3.0.1 com.netflix.archaius:archaius2-api:2.3.16 com.netflix.archaius:archaius2-core:2.3.16 com.netflix.archaius:archaius2-guice:2.3.16 -com.netflix.fenzo:fenzo-core:1.1.0-rc.9 com.netflix.frigga:frigga:0.25.0 com.netflix.governator:governator-api:1.15.11 com.netflix.governator:governator-core:1.15.11 @@ -225,7 +224,6 @@ org.apache.httpcomponents:httpclient:4.5.13 org.apache.httpcomponents:httpcore:4.4.13 org.apache.logging.log4j:log4j-api:2.13.3 org.apache.logging.log4j:log4j-to-slf4j:2.13.3 -org.apache.mesos:mesos:1.7.2 org.apache.thrift:libthrift:0.9.2 org.apache.tomcat.embed:tomcat-embed-core:9.0.39 org.apache.tomcat.embed:tomcat-embed-websocket:9.0.39 diff --git a/titus-ext/aws/gradle/dependency-locks/testRuntimeClasspath.lockfile b/titus-ext/aws/gradle/dependency-locks/testRuntimeClasspath.lockfile index 349c0e7308..6d0641cf2d 100644 --- a/titus-ext/aws/gradle/dependency-locks/testRuntimeClasspath.lockfile +++ b/titus-ext/aws/gradle/dependency-locks/testRuntimeClasspath.lockfile @@ -74,7 +74,6 @@ com.lmax:disruptor:3.0.1 com.netflix.archaius:archaius2-api:2.3.16 com.netflix.archaius:archaius2-core:2.3.16 com.netflix.archaius:archaius2-guice:2.3.16 -com.netflix.fenzo:fenzo-core:1.1.0-rc.9 com.netflix.frigga:frigga:0.25.0 com.netflix.governator:governator-api:1.15.11 com.netflix.governator:governator-core:1.15.11 @@ -236,7 +235,6 @@ org.apache.httpcomponents:httpclient:4.5.13 org.apache.httpcomponents:httpcore:4.4.13 org.apache.logging.log4j:log4j-api:2.13.3 org.apache.logging.log4j:log4j-to-slf4j:2.13.3 -org.apache.mesos:mesos:1.7.2 org.apache.thrift:libthrift:0.9.2 org.apache.tomcat.embed:tomcat-embed-core:9.0.39 org.apache.tomcat.embed:tomcat-embed-websocket:9.0.39 diff --git a/titus-ext/cassandra/gradle/dependency-locks/testCompileClasspath.lockfile b/titus-ext/cassandra/gradle/dependency-locks/testCompileClasspath.lockfile index 3e44fdf336..32b1c5336b 100644 --- a/titus-ext/cassandra/gradle/dependency-locks/testCompileClasspath.lockfile +++ b/titus-ext/cassandra/gradle/dependency-locks/testCompileClasspath.lockfile @@ -61,7 +61,6 @@ com.lmax:disruptor:3.0.1 com.netflix.archaius:archaius2-api:2.3.16 com.netflix.archaius:archaius2-core:2.3.16 com.netflix.archaius:archaius2-guice:2.3.16 -com.netflix.fenzo:fenzo-core:1.1.0-rc.9 com.netflix.frigga:frigga:0.25.0 com.netflix.governator:governator-api:1.15.11 com.netflix.governator:governator-core:1.15.11 @@ -209,7 +208,6 @@ org.apache.commons:commons-lang3:3.12.0 org.apache.commons:commons-math3:3.6.1 org.apache.logging.log4j:log4j-api:2.13.3 org.apache.logging.log4j:log4j-to-slf4j:2.13.3 -org.apache.mesos:mesos:1.7.2 org.apache.thrift:libthrift:0.9.2 org.apache.tomcat.embed:tomcat-embed-core:9.0.39 org.apache.tomcat.embed:tomcat-embed-websocket:9.0.39 diff --git a/titus-ext/cassandra/gradle/dependency-locks/testRuntimeClasspath.lockfile b/titus-ext/cassandra/gradle/dependency-locks/testRuntimeClasspath.lockfile index b85fb8da97..9f2f820ba3 100644 --- a/titus-ext/cassandra/gradle/dependency-locks/testRuntimeClasspath.lockfile +++ b/titus-ext/cassandra/gradle/dependency-locks/testRuntimeClasspath.lockfile @@ -64,7 +64,6 @@ com.lmax:disruptor:3.0.1 com.netflix.archaius:archaius2-api:2.3.16 com.netflix.archaius:archaius2-core:2.3.16 com.netflix.archaius:archaius2-guice:2.3.16 -com.netflix.fenzo:fenzo-core:1.1.0-rc.9 com.netflix.frigga:frigga:0.25.0 com.netflix.governator:governator-api:1.15.11 com.netflix.governator:governator-core:1.15.11 @@ -220,7 +219,6 @@ org.apache.commons:commons-lang3:3.12.0 org.apache.commons:commons-math3:3.6.1 org.apache.logging.log4j:log4j-api:2.13.3 org.apache.logging.log4j:log4j-to-slf4j:2.13.3 -org.apache.mesos:mesos:1.7.2 org.apache.thrift:libthrift:0.9.2 org.apache.tomcat.embed:tomcat-embed-core:9.0.39 org.apache.tomcat.embed:tomcat-embed-websocket:9.0.39 diff --git a/titus-ext/eureka/gradle/dependency-locks/compileClasspath.lockfile b/titus-ext/eureka/gradle/dependency-locks/compileClasspath.lockfile index 15c5aa65b1..d2035f7c51 100644 --- a/titus-ext/eureka/gradle/dependency-locks/compileClasspath.lockfile +++ b/titus-ext/eureka/gradle/dependency-locks/compileClasspath.lockfile @@ -43,7 +43,6 @@ com.netflix.archaius:archaius2-api:2.3.16 com.netflix.archaius:archaius2-core:2.3.16 com.netflix.archaius:archaius2-guice:2.3.16 com.netflix.eureka:eureka-client:1.10.16 -com.netflix.fenzo:fenzo-core:1.1.0-rc.9 com.netflix.frigga:frigga:0.25.0 com.netflix.governator:governator-api:1.15.11 com.netflix.governator:governator-core:1.15.11 @@ -175,7 +174,6 @@ org.apache.commons:commons-lang3:3.12.0 org.apache.commons:commons-math3:3.6.1 org.apache.httpcomponents:httpclient:4.5.3 org.apache.httpcomponents:httpcore:4.4.6 -org.apache.mesos:mesos:1.7.2 org.bitbucket.b_c:jose4j:0.7.6 org.bouncycastle:bcmail-jdk15on:1.52 org.bouncycastle:bcpkix-jdk15on:1.68 diff --git a/titus-ext/eureka/gradle/dependency-locks/runtimeClasspath.lockfile b/titus-ext/eureka/gradle/dependency-locks/runtimeClasspath.lockfile index af0e2dfd44..7880e90489 100644 --- a/titus-ext/eureka/gradle/dependency-locks/runtimeClasspath.lockfile +++ b/titus-ext/eureka/gradle/dependency-locks/runtimeClasspath.lockfile @@ -47,7 +47,6 @@ com.netflix.archaius:archaius2-api:2.3.16 com.netflix.archaius:archaius2-core:2.3.16 com.netflix.archaius:archaius2-guice:2.3.16 com.netflix.eureka:eureka-client:1.10.16 -com.netflix.fenzo:fenzo-core:1.1.0-rc.9 com.netflix.frigga:frigga:0.25.0 com.netflix.governator:governator-api:1.15.11 com.netflix.governator:governator-core:1.15.11 @@ -192,7 +191,6 @@ org.apache.commons:commons-math3:3.6.1 org.apache.commons:commons-math:2.2 org.apache.httpcomponents:httpclient:4.5.3 org.apache.httpcomponents:httpcore:4.4.6 -org.apache.mesos:mesos:1.7.2 org.bitbucket.b_c:jose4j:0.7.6 org.bouncycastle:bcmail-jdk15on:1.52 org.bouncycastle:bcpkix-jdk15on:1.68 diff --git a/titus-ext/eureka/gradle/dependency-locks/testCompileClasspath.lockfile b/titus-ext/eureka/gradle/dependency-locks/testCompileClasspath.lockfile index d64bd52ef0..1e41bc4aff 100644 --- a/titus-ext/eureka/gradle/dependency-locks/testCompileClasspath.lockfile +++ b/titus-ext/eureka/gradle/dependency-locks/testCompileClasspath.lockfile @@ -65,7 +65,6 @@ com.netflix.archaius:archaius2-api:2.3.16 com.netflix.archaius:archaius2-core:2.3.16 com.netflix.archaius:archaius2-guice:2.3.16 com.netflix.eureka:eureka-client:1.10.16 -com.netflix.fenzo:fenzo-core:1.1.0-rc.9 com.netflix.frigga:frigga:0.25.0 com.netflix.governator:governator-api:1.15.11 com.netflix.governator:governator-core:1.15.11 @@ -223,7 +222,6 @@ org.apache.httpcomponents:httpclient:4.5.3 org.apache.httpcomponents:httpcore:4.4.6 org.apache.logging.log4j:log4j-api:2.13.3 org.apache.logging.log4j:log4j-to-slf4j:2.13.3 -org.apache.mesos:mesos:1.7.2 org.apache.thrift:libthrift:0.9.2 org.apache.tomcat.embed:tomcat-embed-core:9.0.39 org.apache.tomcat.embed:tomcat-embed-websocket:9.0.39 diff --git a/titus-ext/eureka/gradle/dependency-locks/testRuntimeClasspath.lockfile b/titus-ext/eureka/gradle/dependency-locks/testRuntimeClasspath.lockfile index 3dac67eae4..b5c563734d 100644 --- a/titus-ext/eureka/gradle/dependency-locks/testRuntimeClasspath.lockfile +++ b/titus-ext/eureka/gradle/dependency-locks/testRuntimeClasspath.lockfile @@ -68,7 +68,6 @@ com.netflix.archaius:archaius2-api:2.3.16 com.netflix.archaius:archaius2-core:2.3.16 com.netflix.archaius:archaius2-guice:2.3.16 com.netflix.eureka:eureka-client:1.10.16 -com.netflix.fenzo:fenzo-core:1.1.0-rc.9 com.netflix.frigga:frigga:0.25.0 com.netflix.governator:governator-api:1.15.11 com.netflix.governator:governator-core:1.15.11 @@ -237,7 +236,6 @@ org.apache.httpcomponents:httpclient:4.5.3 org.apache.httpcomponents:httpcore:4.4.6 org.apache.logging.log4j:log4j-api:2.13.3 org.apache.logging.log4j:log4j-to-slf4j:2.13.3 -org.apache.mesos:mesos:1.7.2 org.apache.thrift:libthrift:0.9.2 org.apache.tomcat.embed:tomcat-embed-core:9.0.39 org.apache.tomcat.embed:tomcat-embed-websocket:9.0.39 diff --git a/titus-ext/job-validator/gradle/dependency-locks/testCompileClasspath.lockfile b/titus-ext/job-validator/gradle/dependency-locks/testCompileClasspath.lockfile index 3e44fdf336..32b1c5336b 100644 --- a/titus-ext/job-validator/gradle/dependency-locks/testCompileClasspath.lockfile +++ b/titus-ext/job-validator/gradle/dependency-locks/testCompileClasspath.lockfile @@ -61,7 +61,6 @@ com.lmax:disruptor:3.0.1 com.netflix.archaius:archaius2-api:2.3.16 com.netflix.archaius:archaius2-core:2.3.16 com.netflix.archaius:archaius2-guice:2.3.16 -com.netflix.fenzo:fenzo-core:1.1.0-rc.9 com.netflix.frigga:frigga:0.25.0 com.netflix.governator:governator-api:1.15.11 com.netflix.governator:governator-core:1.15.11 @@ -209,7 +208,6 @@ org.apache.commons:commons-lang3:3.12.0 org.apache.commons:commons-math3:3.6.1 org.apache.logging.log4j:log4j-api:2.13.3 org.apache.logging.log4j:log4j-to-slf4j:2.13.3 -org.apache.mesos:mesos:1.7.2 org.apache.thrift:libthrift:0.9.2 org.apache.tomcat.embed:tomcat-embed-core:9.0.39 org.apache.tomcat.embed:tomcat-embed-websocket:9.0.39 diff --git a/titus-ext/job-validator/gradle/dependency-locks/testRuntimeClasspath.lockfile b/titus-ext/job-validator/gradle/dependency-locks/testRuntimeClasspath.lockfile index b85fb8da97..9f2f820ba3 100644 --- a/titus-ext/job-validator/gradle/dependency-locks/testRuntimeClasspath.lockfile +++ b/titus-ext/job-validator/gradle/dependency-locks/testRuntimeClasspath.lockfile @@ -64,7 +64,6 @@ com.lmax:disruptor:3.0.1 com.netflix.archaius:archaius2-api:2.3.16 com.netflix.archaius:archaius2-core:2.3.16 com.netflix.archaius:archaius2-guice:2.3.16 -com.netflix.fenzo:fenzo-core:1.1.0-rc.9 com.netflix.frigga:frigga:0.25.0 com.netflix.governator:governator-api:1.15.11 com.netflix.governator:governator-core:1.15.11 @@ -220,7 +219,6 @@ org.apache.commons:commons-lang3:3.12.0 org.apache.commons:commons-math3:3.6.1 org.apache.logging.log4j:log4j-api:2.13.3 org.apache.logging.log4j:log4j-to-slf4j:2.13.3 -org.apache.mesos:mesos:1.7.2 org.apache.thrift:libthrift:0.9.2 org.apache.tomcat.embed:tomcat-embed-core:9.0.39 org.apache.tomcat.embed:tomcat-embed-websocket:9.0.39 diff --git a/titus-ext/jooq-relocation/gradle/dependency-locks/testCompileClasspath.lockfile b/titus-ext/jooq-relocation/gradle/dependency-locks/testCompileClasspath.lockfile index 968dbcede9..69fbf0703e 100644 --- a/titus-ext/jooq-relocation/gradle/dependency-locks/testCompileClasspath.lockfile +++ b/titus-ext/jooq-relocation/gradle/dependency-locks/testCompileClasspath.lockfile @@ -62,7 +62,6 @@ com.lmax:disruptor:3.0.1 com.netflix.archaius:archaius2-api:2.3.16 com.netflix.archaius:archaius2-core:2.3.16 com.netflix.archaius:archaius2-guice:2.3.16 -com.netflix.fenzo:fenzo-core:1.1.0-rc.9 com.netflix.frigga:frigga:0.25.0 com.netflix.governator:governator-api:1.15.11 com.netflix.governator:governator-core:1.15.11 @@ -214,7 +213,6 @@ org.apache.commons:commons-lang3:3.12.0 org.apache.commons:commons-math3:3.6.1 org.apache.logging.log4j:log4j-api:2.13.3 org.apache.logging.log4j:log4j-to-slf4j:2.13.3 -org.apache.mesos:mesos:1.7.2 org.apache.thrift:libthrift:0.9.2 org.apache.tomcat.embed:tomcat-embed-core:9.0.39 org.apache.tomcat.embed:tomcat-embed-websocket:9.0.39 diff --git a/titus-ext/jooq-relocation/gradle/dependency-locks/testRuntimeClasspath.lockfile b/titus-ext/jooq-relocation/gradle/dependency-locks/testRuntimeClasspath.lockfile index 499ba3bb4f..9e8aad62f7 100644 --- a/titus-ext/jooq-relocation/gradle/dependency-locks/testRuntimeClasspath.lockfile +++ b/titus-ext/jooq-relocation/gradle/dependency-locks/testRuntimeClasspath.lockfile @@ -65,7 +65,6 @@ com.lmax:disruptor:3.0.1 com.netflix.archaius:archaius2-api:2.3.16 com.netflix.archaius:archaius2-core:2.3.16 com.netflix.archaius:archaius2-guice:2.3.16 -com.netflix.fenzo:fenzo-core:1.1.0-rc.9 com.netflix.frigga:frigga:0.25.0 com.netflix.governator:governator-api:1.15.11 com.netflix.governator:governator-core:1.15.11 @@ -225,7 +224,6 @@ org.apache.commons:commons-lang3:3.12.0 org.apache.commons:commons-math3:3.6.1 org.apache.logging.log4j:log4j-api:2.13.3 org.apache.logging.log4j:log4j-to-slf4j:2.13.3 -org.apache.mesos:mesos:1.7.2 org.apache.thrift:libthrift:0.9.2 org.apache.tomcat.embed:tomcat-embed-core:9.0.39 org.apache.tomcat.embed:tomcat-embed-websocket:9.0.39 diff --git a/titus-ext/zookeeper/gradle/dependency-locks/compileClasspath.lockfile b/titus-ext/zookeeper/gradle/dependency-locks/compileClasspath.lockfile index 533f3f921c..7371b31348 100644 --- a/titus-ext/zookeeper/gradle/dependency-locks/compileClasspath.lockfile +++ b/titus-ext/zookeeper/gradle/dependency-locks/compileClasspath.lockfile @@ -39,7 +39,6 @@ com.jcraft:jzlib:1.1.3 com.netflix.archaius:archaius2-api:2.3.16 com.netflix.archaius:archaius2-core:2.3.16 com.netflix.archaius:archaius2-guice:2.3.16 -com.netflix.fenzo:fenzo-core:1.1.0-rc.9 com.netflix.frigga:frigga:0.25.0 com.netflix.governator:governator-api:1.15.11 com.netflix.governator:governator-core:1.15.11 @@ -165,7 +164,6 @@ org.apache.commons:commons-math3:3.6.1 org.apache.curator:curator-client:2.13.0 org.apache.curator:curator-framework:2.13.0 org.apache.curator:curator-recipes:2.13.0 -org.apache.mesos:mesos:1.7.2 org.apache.zookeeper:zookeeper:3.4.8 org.bitbucket.b_c:jose4j:0.7.6 org.bouncycastle:bcmail-jdk15on:1.52 diff --git a/titus-ext/zookeeper/gradle/dependency-locks/runtimeClasspath.lockfile b/titus-ext/zookeeper/gradle/dependency-locks/runtimeClasspath.lockfile index f9f55cc48d..ecf7de0629 100644 --- a/titus-ext/zookeeper/gradle/dependency-locks/runtimeClasspath.lockfile +++ b/titus-ext/zookeeper/gradle/dependency-locks/runtimeClasspath.lockfile @@ -42,7 +42,6 @@ com.jcraft:jzlib:1.1.3 com.netflix.archaius:archaius2-api:2.3.16 com.netflix.archaius:archaius2-core:2.3.16 com.netflix.archaius:archaius2-guice:2.3.16 -com.netflix.fenzo:fenzo-core:1.1.0-rc.9 com.netflix.frigga:frigga:0.25.0 com.netflix.governator:governator-api:1.15.11 com.netflix.governator:governator-core:1.15.11 @@ -176,7 +175,6 @@ org.apache.commons:commons-math3:3.6.1 org.apache.curator:curator-client:2.13.0 org.apache.curator:curator-framework:2.13.0 org.apache.curator:curator-recipes:2.13.0 -org.apache.mesos:mesos:1.7.2 org.apache.zookeeper:zookeeper:3.4.8 org.bitbucket.b_c:jose4j:0.7.6 org.bouncycastle:bcmail-jdk15on:1.52 diff --git a/titus-ext/zookeeper/gradle/dependency-locks/testCompileClasspath.lockfile b/titus-ext/zookeeper/gradle/dependency-locks/testCompileClasspath.lockfile index 7ef0867981..6eaea164d4 100644 --- a/titus-ext/zookeeper/gradle/dependency-locks/testCompileClasspath.lockfile +++ b/titus-ext/zookeeper/gradle/dependency-locks/testCompileClasspath.lockfile @@ -61,7 +61,6 @@ com.lmax:disruptor:3.0.1 com.netflix.archaius:archaius2-api:2.3.16 com.netflix.archaius:archaius2-core:2.3.16 com.netflix.archaius:archaius2-guice:2.3.16 -com.netflix.fenzo:fenzo-core:1.1.0-rc.9 com.netflix.frigga:frigga:0.25.0 com.netflix.governator:governator-api:1.15.11 com.netflix.governator:governator-core:1.15.11 @@ -214,7 +213,6 @@ org.apache.curator:curator-recipes:2.13.0 org.apache.curator:curator-test:2.12.0 org.apache.logging.log4j:log4j-api:2.13.3 org.apache.logging.log4j:log4j-to-slf4j:2.13.3 -org.apache.mesos:mesos:1.7.2 org.apache.thrift:libthrift:0.9.2 org.apache.tomcat.embed:tomcat-embed-core:9.0.39 org.apache.tomcat.embed:tomcat-embed-websocket:9.0.39 diff --git a/titus-ext/zookeeper/gradle/dependency-locks/testRuntimeClasspath.lockfile b/titus-ext/zookeeper/gradle/dependency-locks/testRuntimeClasspath.lockfile index 920d25b974..1807f947ac 100644 --- a/titus-ext/zookeeper/gradle/dependency-locks/testRuntimeClasspath.lockfile +++ b/titus-ext/zookeeper/gradle/dependency-locks/testRuntimeClasspath.lockfile @@ -64,7 +64,6 @@ com.lmax:disruptor:3.0.1 com.netflix.archaius:archaius2-api:2.3.16 com.netflix.archaius:archaius2-core:2.3.16 com.netflix.archaius:archaius2-guice:2.3.16 -com.netflix.fenzo:fenzo-core:1.1.0-rc.9 com.netflix.frigga:frigga:0.25.0 com.netflix.governator:governator-api:1.15.11 com.netflix.governator:governator-core:1.15.11 @@ -225,7 +224,6 @@ org.apache.curator:curator-recipes:2.13.0 org.apache.curator:curator-test:2.12.0 org.apache.logging.log4j:log4j-api:2.13.3 org.apache.logging.log4j:log4j-to-slf4j:2.13.3 -org.apache.mesos:mesos:1.7.2 org.apache.thrift:libthrift:0.9.2 org.apache.tomcat.embed:tomcat-embed-core:9.0.39 org.apache.tomcat.embed:tomcat-embed-websocket:9.0.39 diff --git a/titus-server-federation/gradle/dependency-locks/testCompileClasspath.lockfile b/titus-server-federation/gradle/dependency-locks/testCompileClasspath.lockfile index fcfca8e16a..7e67c6bb02 100644 --- a/titus-server-federation/gradle/dependency-locks/testCompileClasspath.lockfile +++ b/titus-server-federation/gradle/dependency-locks/testCompileClasspath.lockfile @@ -61,7 +61,6 @@ com.lmax:disruptor:3.0.1 com.netflix.archaius:archaius2-api:2.3.16 com.netflix.archaius:archaius2-core:2.3.16 com.netflix.archaius:archaius2-guice:2.3.16 -com.netflix.fenzo:fenzo-core:1.1.0-rc.9 com.netflix.frigga:frigga:0.25.0 com.netflix.governator:governator-api:1.15.11 com.netflix.governator:governator-core:1.15.11 @@ -212,7 +211,6 @@ org.apache.commons:commons-lang3:3.12.0 org.apache.commons:commons-math3:3.6.1 org.apache.logging.log4j:log4j-api:2.13.3 org.apache.logging.log4j:log4j-to-slf4j:2.13.3 -org.apache.mesos:mesos:1.7.2 org.apache.thrift:libthrift:0.9.2 org.apache.tomcat.embed:tomcat-embed-core:9.0.39 org.apache.tomcat.embed:tomcat-embed-websocket:9.0.39 diff --git a/titus-server-federation/gradle/dependency-locks/testRuntimeClasspath.lockfile b/titus-server-federation/gradle/dependency-locks/testRuntimeClasspath.lockfile index d76d34b569..94509d2cc1 100644 --- a/titus-server-federation/gradle/dependency-locks/testRuntimeClasspath.lockfile +++ b/titus-server-federation/gradle/dependency-locks/testRuntimeClasspath.lockfile @@ -65,7 +65,6 @@ com.netflix.archaius:archaius2-api:2.3.16 com.netflix.archaius:archaius2-core:2.3.16 com.netflix.archaius:archaius2-guice:2.3.16 com.netflix.archaius:archaius2-test:2.1.10 -com.netflix.fenzo:fenzo-core:1.1.0-rc.9 com.netflix.frigga:frigga:0.25.0 com.netflix.governator:governator-api:1.15.11 com.netflix.governator:governator-core:1.15.11 @@ -226,7 +225,6 @@ org.apache.commons:commons-lang3:3.12.0 org.apache.commons:commons-math3:3.6.1 org.apache.logging.log4j:log4j-api:2.13.3 org.apache.logging.log4j:log4j-to-slf4j:2.13.3 -org.apache.mesos:mesos:1.7.2 org.apache.thrift:libthrift:0.9.2 org.apache.tomcat.embed:tomcat-embed-core:9.0.39 org.apache.tomcat.embed:tomcat-embed-websocket:9.0.39 diff --git a/titus-server-gateway/gradle/dependency-locks/testCompileClasspath.lockfile b/titus-server-gateway/gradle/dependency-locks/testCompileClasspath.lockfile index 737d85f439..10fa70ade6 100644 --- a/titus-server-gateway/gradle/dependency-locks/testCompileClasspath.lockfile +++ b/titus-server-gateway/gradle/dependency-locks/testCompileClasspath.lockfile @@ -61,7 +61,6 @@ com.lmax:disruptor:3.0.1 com.netflix.archaius:archaius2-api:2.3.16 com.netflix.archaius:archaius2-core:2.3.16 com.netflix.archaius:archaius2-guice:2.3.16 -com.netflix.fenzo:fenzo-core:1.1.0-rc.9 com.netflix.frigga:frigga:0.25.0 com.netflix.governator:governator-api:1.15.11 com.netflix.governator:governator-core:1.15.11 @@ -210,7 +209,6 @@ org.apache.commons:commons-lang3:3.12.0 org.apache.commons:commons-math3:3.6.1 org.apache.logging.log4j:log4j-api:2.13.3 org.apache.logging.log4j:log4j-to-slf4j:2.13.3 -org.apache.mesos:mesos:1.7.2 org.apache.thrift:libthrift:0.9.2 org.apache.tomcat.embed:tomcat-embed-core:9.0.39 org.apache.tomcat.embed:tomcat-embed-websocket:9.0.39 diff --git a/titus-server-gateway/gradle/dependency-locks/testRuntimeClasspath.lockfile b/titus-server-gateway/gradle/dependency-locks/testRuntimeClasspath.lockfile index ab907f2a3b..4a3a001419 100644 --- a/titus-server-gateway/gradle/dependency-locks/testRuntimeClasspath.lockfile +++ b/titus-server-gateway/gradle/dependency-locks/testRuntimeClasspath.lockfile @@ -65,7 +65,6 @@ com.netflix.archaius:archaius2-api:2.3.16 com.netflix.archaius:archaius2-core:2.3.16 com.netflix.archaius:archaius2-guice:2.3.16 com.netflix.archaius:archaius2-test:2.1.10 -com.netflix.fenzo:fenzo-core:1.1.0-rc.9 com.netflix.frigga:frigga:0.25.0 com.netflix.governator:governator-api:1.15.11 com.netflix.governator:governator-core:1.15.11 @@ -223,7 +222,6 @@ org.apache.commons:commons-lang3:3.12.0 org.apache.commons:commons-math3:3.6.1 org.apache.logging.log4j:log4j-api:2.13.3 org.apache.logging.log4j:log4j-to-slf4j:2.13.3 -org.apache.mesos:mesos:1.7.2 org.apache.thrift:libthrift:0.9.2 org.apache.tomcat.embed:tomcat-embed-core:9.0.39 org.apache.tomcat.embed:tomcat-embed-websocket:9.0.39 diff --git a/titus-server-master/build.gradle b/titus-server-master/build.gradle index c81f65e966..123fc82984 100644 --- a/titus-server-master/build.gradle +++ b/titus-server-master/build.gradle @@ -7,7 +7,6 @@ dependencies { compile project(':titus-server-runtime') // Netflix dependencies - compile "com.netflix.fenzo:fenzo-core:${fenzoVersion}" compile "com.netflix.archaius:archaius2-guice:${archaius2Version}" compile "com.netflix.numerus:numerus:${numerusVersion}" compile "com.netflix.runtime:health-guice:${runtimeHealthVersion}" @@ -17,7 +16,6 @@ dependencies { compile "com.google.protobuf:protobuf-java:${protobufVersion}" // Misc dependencies - compile "org.apache.mesos:mesos:${mesosVersion}" compile "io.kubernetes:client-java:${kubernetesClientVersion}" compile "com.github.spullara.cli-parser:cli-parser:${cliParserVersion}" compile "com.google.inject:guice:${guiceVersion}" diff --git a/titus-server-master/gradle/dependency-locks/compileClasspath.lockfile b/titus-server-master/gradle/dependency-locks/compileClasspath.lockfile index 6f45d97406..bb85ef4a51 100644 --- a/titus-server-master/gradle/dependency-locks/compileClasspath.lockfile +++ b/titus-server-master/gradle/dependency-locks/compileClasspath.lockfile @@ -39,7 +39,6 @@ com.jcraft:jzlib:1.1.3 com.netflix.archaius:archaius2-api:2.3.16 com.netflix.archaius:archaius2-core:2.3.16 com.netflix.archaius:archaius2-guice:2.3.16 -com.netflix.fenzo:fenzo-core:1.1.0-rc.9 com.netflix.frigga:frigga:0.25.0 com.netflix.governator:governator-api:1.15.11 com.netflix.governator:governator-core:1.15.11 @@ -161,7 +160,6 @@ org.apache.commons:commons-compress:1.20 org.apache.commons:commons-io:1.3.2 org.apache.commons:commons-lang3:3.12.0 org.apache.commons:commons-math3:3.6.1 -org.apache.mesos:mesos:1.7.2 org.bitbucket.b_c:jose4j:0.7.6 org.bouncycastle:bcmail-jdk15on:1.52 org.bouncycastle:bcpkix-jdk15on:1.68 diff --git a/titus-server-master/gradle/dependency-locks/runtimeClasspath.lockfile b/titus-server-master/gradle/dependency-locks/runtimeClasspath.lockfile index c02bffc1f6..3d3795f7cc 100644 --- a/titus-server-master/gradle/dependency-locks/runtimeClasspath.lockfile +++ b/titus-server-master/gradle/dependency-locks/runtimeClasspath.lockfile @@ -42,7 +42,6 @@ com.jcraft:jzlib:1.1.3 com.netflix.archaius:archaius2-api:2.3.16 com.netflix.archaius:archaius2-core:2.3.16 com.netflix.archaius:archaius2-guice:2.3.16 -com.netflix.fenzo:fenzo-core:1.1.0-rc.9 com.netflix.frigga:frigga:0.25.0 com.netflix.governator:governator-api:1.15.11 com.netflix.governator:governator-core:1.15.11 @@ -172,7 +171,6 @@ org.apache.commons:commons-compress:1.20 org.apache.commons:commons-io:1.3.2 org.apache.commons:commons-lang3:3.12.0 org.apache.commons:commons-math3:3.6.1 -org.apache.mesos:mesos:1.7.2 org.bitbucket.b_c:jose4j:0.7.6 org.bouncycastle:bcmail-jdk15on:1.52 org.bouncycastle:bcpkix-jdk15on:1.68 diff --git a/titus-server-master/gradle/dependency-locks/testCompileClasspath.lockfile b/titus-server-master/gradle/dependency-locks/testCompileClasspath.lockfile index 3e44fdf336..32b1c5336b 100644 --- a/titus-server-master/gradle/dependency-locks/testCompileClasspath.lockfile +++ b/titus-server-master/gradle/dependency-locks/testCompileClasspath.lockfile @@ -61,7 +61,6 @@ com.lmax:disruptor:3.0.1 com.netflix.archaius:archaius2-api:2.3.16 com.netflix.archaius:archaius2-core:2.3.16 com.netflix.archaius:archaius2-guice:2.3.16 -com.netflix.fenzo:fenzo-core:1.1.0-rc.9 com.netflix.frigga:frigga:0.25.0 com.netflix.governator:governator-api:1.15.11 com.netflix.governator:governator-core:1.15.11 @@ -209,7 +208,6 @@ org.apache.commons:commons-lang3:3.12.0 org.apache.commons:commons-math3:3.6.1 org.apache.logging.log4j:log4j-api:2.13.3 org.apache.logging.log4j:log4j-to-slf4j:2.13.3 -org.apache.mesos:mesos:1.7.2 org.apache.thrift:libthrift:0.9.2 org.apache.tomcat.embed:tomcat-embed-core:9.0.39 org.apache.tomcat.embed:tomcat-embed-websocket:9.0.39 diff --git a/titus-server-master/gradle/dependency-locks/testRuntimeClasspath.lockfile b/titus-server-master/gradle/dependency-locks/testRuntimeClasspath.lockfile index b85fb8da97..9f2f820ba3 100644 --- a/titus-server-master/gradle/dependency-locks/testRuntimeClasspath.lockfile +++ b/titus-server-master/gradle/dependency-locks/testRuntimeClasspath.lockfile @@ -64,7 +64,6 @@ com.lmax:disruptor:3.0.1 com.netflix.archaius:archaius2-api:2.3.16 com.netflix.archaius:archaius2-core:2.3.16 com.netflix.archaius:archaius2-guice:2.3.16 -com.netflix.fenzo:fenzo-core:1.1.0-rc.9 com.netflix.frigga:frigga:0.25.0 com.netflix.governator:governator-api:1.15.11 com.netflix.governator:governator-core:1.15.11 @@ -220,7 +219,6 @@ org.apache.commons:commons-lang3:3.12.0 org.apache.commons:commons-math3:3.6.1 org.apache.logging.log4j:log4j-api:2.13.3 org.apache.logging.log4j:log4j-to-slf4j:2.13.3 -org.apache.mesos:mesos:1.7.2 org.apache.thrift:libthrift:0.9.2 org.apache.tomcat.embed:tomcat-embed-core:9.0.39 org.apache.tomcat.embed:tomcat-embed-websocket:9.0.39 diff --git a/titus-server-master/src/main/java/com/netflix/titus/master/TitusMasterModule.java b/titus-server-master/src/main/java/com/netflix/titus/master/TitusMasterModule.java index 0b0dcea8bd..fbe78cd0be 100644 --- a/titus-server-master/src/main/java/com/netflix/titus/master/TitusMasterModule.java +++ b/titus-server-master/src/main/java/com/netflix/titus/master/TitusMasterModule.java @@ -46,8 +46,7 @@ import com.netflix.titus.master.kubernetes.controller.KubeControllerModule; import com.netflix.titus.master.kubernetes.pod.KubePodModule; import com.netflix.titus.master.loadbalancer.LoadBalancerModule; -import com.netflix.titus.master.mesos.KubeClientStubModule; -import com.netflix.titus.master.mesos.MesosModule; +import com.netflix.titus.master.kubernetes.KubeClientStubModule; import com.netflix.titus.master.scheduler.SchedulerModule; import com.netflix.titus.master.service.management.ManagementModule; import com.netflix.titus.master.store.StoreModule; @@ -69,7 +68,6 @@ public class TitusMasterModule extends AbstractModule { public enum Mode { - MESOS, KUBE, EMBEDDED_KUBE, } @@ -100,9 +98,6 @@ protected void configure() { // Feature flags install(new FeatureFlagModule()); - // Mesos - install(new MesosModule()); - // Kubernetes if (mode == Mode.KUBE) { install(new KubeModule()); diff --git a/titus-server-master/src/main/java/com/netflix/titus/master/jobmanager/service/JobManagerUtil.java b/titus-server-master/src/main/java/com/netflix/titus/master/jobmanager/service/JobManagerUtil.java index b8d7788303..d16f895d67 100644 --- a/titus-server-master/src/main/java/com/netflix/titus/master/jobmanager/service/JobManagerUtil.java +++ b/titus-server-master/src/main/java/com/netflix/titus/master/jobmanager/service/JobManagerUtil.java @@ -16,7 +16,6 @@ package com.netflix.titus.master.jobmanager.service; -import java.io.IOException; import java.util.HashMap; import java.util.HashSet; import java.util.Map; @@ -25,29 +24,19 @@ import java.util.function.BiConsumer; import java.util.function.Function; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.google.common.base.Strings; -import com.netflix.archaius.api.Config; -import com.netflix.fenzo.PreferentialNamedConsumableResourceSet; -import com.netflix.fenzo.VirtualMachineLease; import com.netflix.titus.api.jobmanager.TaskAttributes; import com.netflix.titus.api.jobmanager.model.job.Job; import com.netflix.titus.api.jobmanager.model.job.JobDescriptor; import com.netflix.titus.api.jobmanager.model.job.JobFunctions; -import com.netflix.titus.api.jobmanager.model.job.JobModel; import com.netflix.titus.api.jobmanager.model.job.Task; import com.netflix.titus.api.jobmanager.model.job.TaskState; import com.netflix.titus.api.jobmanager.model.job.TaskStatus; -import com.netflix.titus.api.jobmanager.model.job.TwoLevelResource; import com.netflix.titus.api.jobmanager.model.job.disruptionbudget.SelfManagedDisruptionBudgetPolicy; -import com.netflix.titus.api.jobmanager.service.JobManagerException; -import com.netflix.titus.api.json.ObjectMappers; import com.netflix.titus.api.model.ApplicationSLA; import com.netflix.titus.api.model.Tier; import com.netflix.titus.common.framework.reconciler.EntityHolder; import com.netflix.titus.common.framework.reconciler.ReconciliationEngine; import com.netflix.titus.common.runtime.TitusRuntime; -import com.netflix.titus.common.util.CollectionsExt; import com.netflix.titus.common.util.StringExt; import com.netflix.titus.common.util.tuple.Pair; import com.netflix.titus.grpc.protogen.NetworkConfiguration.NetworkMode; @@ -55,16 +44,11 @@ import com.netflix.titus.master.kubernetes.client.model.PodWrapper; import com.netflix.titus.master.mesos.TitusExecutorDetails; import com.netflix.titus.master.service.management.ApplicationSlaManagementService; -import org.apache.mesos.Protos; - -import static com.netflix.titus.api.jobmanager.TaskAttributes.TASK_ATTRIBUTES_EXECUTOR_URI_OVERRIDE; /** * Collection of common functions. */ public final class JobManagerUtil { - private static final ObjectMapper mapper = ObjectMappers.defaultMapper(); - private static final String EXECUTOR_URI_OVERRIDE_PROPERTY_PREFIX = "titusMaster.jobManager"; private JobManagerUtil() { } @@ -187,68 +171,6 @@ public static Optional parseEniResourceId(String resourceId) { return Optional.of(resourceId.substring("resource-eni-".length())); } - public static Function newTaskLaunchConfigurationUpdater(String zoneAttributeName, - VirtualMachineLease lease, - PreferentialNamedConsumableResourceSet.ConsumeResult consumeResult, - Optional executorUriOverrideOpt, - Map attributesMap, - Map opportunisticResourcesContext, - String tier, - TitusRuntime titusRuntime) { - return oldTask -> { - if (oldTask.getStatus().getState() != TaskState.Accepted) { - throw JobManagerException.unexpectedTaskState(oldTask, TaskState.Accepted); - } - - Map taskContext = new HashMap<>(opportunisticResourcesContext); - Map attributes = CollectionsExt.nonNull(lease.getAttributeMap()); - String hostIp = findAttribute(attributes, "hostIp").orElse(lease.hostname()); - taskContext.put(TaskAttributes.TASK_ATTRIBUTES_AGENT_HOST, hostIp); - taskContext.put(TaskAttributes.TASK_ATTRIBUTES_AGENT_HOST_IP, hostIp); - - executorUriOverrideOpt.ifPresent(v -> taskContext.put(TASK_ATTRIBUTES_EXECUTOR_URI_OVERRIDE, v)); - taskContext.put(TaskAttributes.TASK_ATTRIBUTES_TIER, tier); - - if (!attributes.isEmpty()) { - attributesMap.forEach((k, v) -> taskContext.put("agent." + k, v)); - - // TODO Some agent attribute names are configurable, some not. We need to clean this up. - findAttribute(attributes, zoneAttributeName).ifPresent(value -> - taskContext.put(TaskAttributes.TASK_ATTRIBUTES_AGENT_ZONE, value) - ); - findAttribute(attributes, "id").ifPresent(value -> - taskContext.put(TaskAttributes.TASK_ATTRIBUTES_AGENT_INSTANCE_ID, value) - ); - } - - TaskStatus taskStatus = JobModel.newTaskStatus() - .withState(TaskState.Launched) - .withReasonCode("scheduled") - .withReasonMessage("Fenzo task placement on node " + TaskAttributes.TASK_ATTRIBUTES_AGENT_INSTANCE_ID + ". Next it needs to start.") - .withTimestamp(titusRuntime.getClock().wallTime()) - .build(); - - TwoLevelResource twoLevelResource = TwoLevelResource.newBuilder() - .withName(consumeResult.getAttrName()) - .withValue(consumeResult.getResName()) - .withIndex(consumeResult.getIndex()) - .build(); - - return JobFunctions.addAllocatedResourcesToTask(oldTask, taskStatus, twoLevelResource, taskContext); - }; - } - - public static Optional parseDetails(String statusData) { - if (StringExt.isEmpty(statusData)) { - return Optional.empty(); - } - try { - return Optional.of(mapper.readValue(statusData, TitusExecutorDetails.class)); - } catch (IOException e) { - return Optional.empty(); - } - } - /** * @return {@link Optional#empty()} when no binpacking should be applied for task relocation purposes */ @@ -257,32 +179,4 @@ public static Optional getRelocationBinpackMode(Job job) { ? Optional.of("SelfManaged") : Optional.empty(); } - - public static Optional getExecutorUriOverride(Config config, - Map attributesMap) { - String ami = attributesMap.getOrDefault("ami", "defaultAmi"); - String amiExecutorUriOverride = config.getString(EXECUTOR_URI_OVERRIDE_PROPERTY_PREFIX + ".amiExecutorUriOverride." + ami, ""); - if (!Strings.isNullOrEmpty(amiExecutorUriOverride)) { - return Optional.of(amiExecutorUriOverride); - } - - String asg = attributesMap.getOrDefault("asg", "defaultAsg"); - String asgExecutorUriOverride = config.getString(EXECUTOR_URI_OVERRIDE_PROPERTY_PREFIX + ".asgExecutorUriOverride." + asg, ""); - if (!Strings.isNullOrEmpty(asgExecutorUriOverride)) { - return Optional.of(asgExecutorUriOverride); - } - - String instance = attributesMap.getOrDefault("id", "defaultInstance"); - String instanceExecutorUriOverride = config.getString(EXECUTOR_URI_OVERRIDE_PROPERTY_PREFIX + ".instanceExecutorUriOverride." + instance, ""); - if (!Strings.isNullOrEmpty(instanceExecutorUriOverride)) { - return Optional.of(instanceExecutorUriOverride); - } - - return Optional.empty(); - } - - private static Optional findAttribute(Map attributes, String name) { - Protos.Attribute attribute = attributes.get(name); - return (attribute != null) ? Optional.of(attribute.getText().getValue()) : Optional.empty(); - } } diff --git a/titus-server-master/src/main/java/com/netflix/titus/master/jobmanager/service/KubeNotificationProcessor.java b/titus-server-master/src/main/java/com/netflix/titus/master/jobmanager/service/KubeNotificationProcessor.java index 7d86bc60c4..2e76b6e0be 100644 --- a/titus-server-master/src/main/java/com/netflix/titus/master/jobmanager/service/KubeNotificationProcessor.java +++ b/titus-server-master/src/main/java/com/netflix/titus/master/jobmanager/service/KubeNotificationProcessor.java @@ -61,8 +61,8 @@ import com.netflix.titus.master.kubernetes.client.model.PodWrapper; import com.netflix.titus.master.kubernetes.controller.KubeJobManagementReconciler; import com.netflix.titus.master.mesos.TitusExecutorDetails; -import com.netflix.titus.master.mesos.kubeapiserver.KubeUtil; -import com.netflix.titus.master.mesos.kubeapiserver.PodToTaskMapper; +import com.netflix.titus.master.kubernetes.KubeUtil; +import com.netflix.titus.master.kubernetes.PodToTaskMapper; import com.netflix.titus.runtime.kubernetes.KubeConstants; import io.kubernetes.client.openapi.models.V1ContainerState; import io.kubernetes.client.openapi.models.V1Node; diff --git a/titus-server-master/src/main/java/com/netflix/titus/master/jobmanager/service/V3JobManagerModule.java b/titus-server-master/src/main/java/com/netflix/titus/master/jobmanager/service/V3JobManagerModule.java index 08d80b6193..949bed59b1 100644 --- a/titus-server-master/src/main/java/com/netflix/titus/master/jobmanager/service/V3JobManagerModule.java +++ b/titus-server-master/src/main/java/com/netflix/titus/master/jobmanager/service/V3JobManagerModule.java @@ -39,8 +39,6 @@ import com.netflix.titus.master.jobmanager.service.service.ServiceDifferenceResolver; import com.netflix.titus.master.jobmanager.store.ArchivedTasksGc; import com.netflix.titus.master.jobmanager.store.ArchivedTasksGcConfiguration; -import com.netflix.titus.master.mesos.DefaultV3TaskInfoRequestFactory; -import com.netflix.titus.master.mesos.TaskInfoRequestFactory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -63,7 +61,6 @@ protected void configure() { bind(ReadOnlyJobOperations.class).to(DefaultV3JobOperations.class); bind(JobSubmitLimiter.class).to(DefaultJobSubmitLimiter.class); - bind(TaskInfoRequestFactory.class).to(DefaultV3TaskInfoRequestFactory.class); bind(KubeNotificationProcessor.class).asEagerSingleton(); bind(JobAndTaskMetrics.class).asEagerSingleton(); diff --git a/titus-server-master/src/main/java/com/netflix/titus/master/jobmanager/service/common/V3QAttributes.java b/titus-server-master/src/main/java/com/netflix/titus/master/jobmanager/service/common/V3QAttributes.java deleted file mode 100644 index 43ea1069cc..0000000000 --- a/titus-server-master/src/main/java/com/netflix/titus/master/jobmanager/service/common/V3QAttributes.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright 2018 Netflix, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.netflix.titus.master.jobmanager.service.common; - -import java.util.Objects; - -import com.netflix.fenzo.queues.QAttributes; - -public class V3QAttributes implements QAttributes { - - private final int tierNumber; - private final String bucketName; - - public V3QAttributes(int tierNumber, String bucketName) { - this.tierNumber = tierNumber; - this.bucketName = bucketName; - } - - @Override - public String getBucketName() { - return bucketName; - } - - @Override - public int getTierNumber() { - return tierNumber; - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - V3QAttributes that = (V3QAttributes) o; - return tierNumber == that.tierNumber && - Objects.equals(bucketName, that.bucketName); - } - - @Override - public int hashCode() { - return Objects.hash(tierNumber, bucketName); - } - - @Override - public String toString() { - return "V3QAttributes{" + - "tierNumber=" + tierNumber + - ", bucketName='" + bucketName + '\'' + - '}'; - } -} diff --git a/titus-server-master/src/main/java/com/netflix/titus/master/mesos/KubeClientStubModule.java b/titus-server-master/src/main/java/com/netflix/titus/master/kubernetes/KubeClientStubModule.java similarity index 93% rename from titus-server-master/src/main/java/com/netflix/titus/master/mesos/KubeClientStubModule.java rename to titus-server-master/src/main/java/com/netflix/titus/master/kubernetes/KubeClientStubModule.java index 7ae6f675fe..fef702ba1e 100644 --- a/titus-server-master/src/main/java/com/netflix/titus/master/mesos/KubeClientStubModule.java +++ b/titus-server-master/src/main/java/com/netflix/titus/master/kubernetes/KubeClientStubModule.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.netflix.titus.master.mesos; +package com.netflix.titus.master.kubernetes; import javax.inject.Singleton; @@ -25,7 +25,7 @@ import com.netflix.titus.master.kubernetes.client.DirectKubeConfiguration; import com.netflix.titus.master.kubernetes.client.NoOpDirectKubeApiServerIntegrator; import com.netflix.titus.master.kubernetes.controller.KubeJobManagementReconciler; -import com.netflix.titus.master.mesos.kubeapiserver.NoOpJobManagementReconciler; +import com.netflix.titus.master.kubernetes.controller.NoOpJobManagementReconciler; import com.netflix.titus.runtime.connector.kubernetes.KubeApiFacade; import com.netflix.titus.runtime.connector.kubernetes.NoOpKubeApiFacade; diff --git a/titus-server-master/src/main/java/com/netflix/titus/master/mesos/kubeapiserver/KubeUtil.java b/titus-server-master/src/main/java/com/netflix/titus/master/kubernetes/KubeUtil.java similarity index 99% rename from titus-server-master/src/main/java/com/netflix/titus/master/mesos/kubeapiserver/KubeUtil.java rename to titus-server-master/src/main/java/com/netflix/titus/master/kubernetes/KubeUtil.java index 3926b51b01..525ea94323 100644 --- a/titus-server-master/src/main/java/com/netflix/titus/master/mesos/kubeapiserver/KubeUtil.java +++ b/titus-server-master/src/main/java/com/netflix/titus/master/kubernetes/KubeUtil.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.netflix.titus.master.mesos.kubeapiserver; +package com.netflix.titus.master.kubernetes; import java.util.Collection; import java.util.Collections; diff --git a/titus-server-master/src/main/java/com/netflix/titus/master/mesos/kubeapiserver/PerformanceToolUtil.java b/titus-server-master/src/main/java/com/netflix/titus/master/kubernetes/PerformanceToolUtil.java similarity index 79% rename from titus-server-master/src/main/java/com/netflix/titus/master/mesos/kubeapiserver/PerformanceToolUtil.java rename to titus-server-master/src/main/java/com/netflix/titus/master/kubernetes/PerformanceToolUtil.java index a5397840b8..b5e0f7a080 100644 --- a/titus-server-master/src/main/java/com/netflix/titus/master/mesos/kubeapiserver/PerformanceToolUtil.java +++ b/titus-server-master/src/main/java/com/netflix/titus/master/kubernetes/PerformanceToolUtil.java @@ -1,5 +1,5 @@ /* - * Copyright 2019 Netflix, Inc. + * Copyright 2021 Netflix, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.netflix.titus.master.mesos.kubeapiserver; +package com.netflix.titus.master.kubernetes; import java.util.Collections; import java.util.HashMap; @@ -23,12 +23,9 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; -import com.google.protobuf.InvalidProtocolBufferException; import com.netflix.titus.api.jobmanager.model.job.Job; import com.netflix.titus.common.util.Evaluators; import com.netflix.titus.common.util.unit.TimeUnitExt; -import io.titanframework.messages.TitanProtos; -import org.apache.mesos.Protos; import static com.netflix.titus.api.jobmanager.JobAttributes.TITUS_PARAMETER_ATTRIBUTE_PREFIX; @@ -46,22 +43,6 @@ public class PerformanceToolUtil { static final String RUN_TIME = "github.com.netflix.titus.executor/runTime"; static final String KILL_TIME = "github.com.netflix.titus.executor/killTime"; - /** - * Performance tool annotations are encoded as environment variables like this: - * {@code TASK_LIFECYCLE_1=selector: slots=0.. slotStep=2; launched: delay=2s; startInitiated: delay=3s; started: delay=60s; killInitiated: delay=5s}
- */ - public static Map findPerformanceTestAnnotations(Protos.TaskInfo taskInfo) { - TitanProtos.ContainerInfo containerInfo; - try { - containerInfo = TitanProtos.ContainerInfo.parseFrom(taskInfo.getData()); - } catch (InvalidProtocolBufferException e) { - return Collections.emptyMap(); - } - return findLegacyTaskLifecycleEnv(containerInfo.getUserProvidedEnvMap()) - .map(PerformanceToolUtil::toLegacyAnnotations) - .orElse(Collections.emptyMap()); - } - public static Map toAnnotations(Job job) { Map attributes = job.getJobDescriptor().getAttributes(); if (attributes.containsKey(MOCK_VK_PROPERTY_PREPARE_TIME) || attributes.containsKey(MOCK_VK_PROPERTY_RUN_TIME) || attributes.containsKey(MOCK_VK_PROPERTY_KILL_TIME)) { diff --git a/titus-server-master/src/main/java/com/netflix/titus/master/mesos/kubeapiserver/PodToTaskMapper.java b/titus-server-master/src/main/java/com/netflix/titus/master/kubernetes/PodToTaskMapper.java similarity index 98% rename from titus-server-master/src/main/java/com/netflix/titus/master/mesos/kubeapiserver/PodToTaskMapper.java rename to titus-server-master/src/main/java/com/netflix/titus/master/kubernetes/PodToTaskMapper.java index fbe6683d01..a1dc48e0fd 100644 --- a/titus-server-master/src/main/java/com/netflix/titus/master/mesos/kubeapiserver/PodToTaskMapper.java +++ b/titus-server-master/src/main/java/com/netflix/titus/master/kubernetes/PodToTaskMapper.java @@ -1,5 +1,5 @@ /* - * Copyright 2020 Netflix, Inc. + * Copyright 2021 Netflix, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.netflix.titus.master.mesos.kubeapiserver; +package com.netflix.titus.master.kubernetes; import java.util.Optional; @@ -26,7 +26,6 @@ import com.netflix.titus.common.runtime.TitusRuntime; import com.netflix.titus.common.util.StringExt; import com.netflix.titus.common.util.tuple.Either; -import com.netflix.titus.master.kubernetes.ContainerResultCodeResolver; import com.netflix.titus.master.kubernetes.client.model.PodPhase; import com.netflix.titus.master.kubernetes.client.model.PodWrapper; import io.kubernetes.client.openapi.models.V1Node; diff --git a/titus-server-master/src/main/java/com/netflix/titus/master/kubernetes/client/DefaultDirectKubeApiServerIntegrator.java b/titus-server-master/src/main/java/com/netflix/titus/master/kubernetes/client/DefaultDirectKubeApiServerIntegrator.java index a034cc0284..bb6a8f9d77 100644 --- a/titus-server-master/src/main/java/com/netflix/titus/master/kubernetes/client/DefaultDirectKubeApiServerIntegrator.java +++ b/titus-server-master/src/main/java/com/netflix/titus/master/kubernetes/client/DefaultDirectKubeApiServerIntegrator.java @@ -48,7 +48,7 @@ import com.netflix.titus.master.kubernetes.client.model.PodEvent; import com.netflix.titus.master.kubernetes.client.model.PodUpdatedEvent; import com.netflix.titus.master.kubernetes.pod.PodFactory; -import com.netflix.titus.master.mesos.kubeapiserver.KubeUtil; +import com.netflix.titus.master.kubernetes.KubeUtil; import com.netflix.titus.runtime.connector.kubernetes.KubeApiException; import com.netflix.titus.runtime.connector.kubernetes.KubeApiFacade; import io.kubernetes.client.informer.ResourceEventHandler; diff --git a/titus-server-master/src/main/java/com/netflix/titus/master/kubernetes/client/DefaultDirectKubeApiServerIntegratorMetrics.java b/titus-server-master/src/main/java/com/netflix/titus/master/kubernetes/client/DefaultDirectKubeApiServerIntegratorMetrics.java index 7c9078057e..0cd88a75c7 100644 --- a/titus-server-master/src/main/java/com/netflix/titus/master/kubernetes/client/DefaultDirectKubeApiServerIntegratorMetrics.java +++ b/titus-server-master/src/main/java/com/netflix/titus/master/kubernetes/client/DefaultDirectKubeApiServerIntegratorMetrics.java @@ -27,7 +27,7 @@ import com.netflix.titus.api.jobmanager.model.job.Task; import com.netflix.titus.common.runtime.TitusRuntime; import com.netflix.titus.master.MetricConstants; -import com.netflix.titus.master.mesos.kubeapiserver.KubeUtil; +import com.netflix.titus.master.kubernetes.KubeUtil; import io.kubernetes.client.openapi.models.V1Pod; /** diff --git a/titus-server-master/src/main/java/com/netflix/titus/master/kubernetes/client/KubeModelConverters.java b/titus-server-master/src/main/java/com/netflix/titus/master/kubernetes/client/KubeModelConverters.java index fa170e246b..444fc5d170 100644 --- a/titus-server-master/src/main/java/com/netflix/titus/master/kubernetes/client/KubeModelConverters.java +++ b/titus-server-master/src/main/java/com/netflix/titus/master/kubernetes/client/KubeModelConverters.java @@ -22,7 +22,7 @@ import java.util.Optional; import com.netflix.titus.api.jobmanager.model.job.ebs.EbsVolume; -import com.netflix.titus.master.mesos.kubeapiserver.KubeUtil; +import com.netflix.titus.master.kubernetes.KubeUtil; import io.kubernetes.client.custom.Quantity; import io.kubernetes.client.openapi.models.V1CSIPersistentVolumeSource; import io.kubernetes.client.openapi.models.V1LabelSelector; diff --git a/titus-server-master/src/main/java/com/netflix/titus/master/kubernetes/client/model/PodWrapper.java b/titus-server-master/src/main/java/com/netflix/titus/master/kubernetes/client/model/PodWrapper.java index 9ef6866103..b86f5feda0 100644 --- a/titus-server-master/src/main/java/com/netflix/titus/master/kubernetes/client/model/PodWrapper.java +++ b/titus-server-master/src/main/java/com/netflix/titus/master/kubernetes/client/model/PodWrapper.java @@ -20,7 +20,7 @@ import com.netflix.titus.common.util.CollectionsExt; import com.netflix.titus.common.util.StringExt; -import com.netflix.titus.master.mesos.kubeapiserver.KubeUtil; +import com.netflix.titus.master.kubernetes.KubeUtil; import io.kubernetes.client.openapi.models.V1ContainerState; import io.kubernetes.client.openapi.models.V1ContainerStatus; import io.kubernetes.client.openapi.models.V1Pod; diff --git a/titus-server-master/src/main/java/com/netflix/titus/master/kubernetes/controller/BaseGcController.java b/titus-server-master/src/main/java/com/netflix/titus/master/kubernetes/controller/BaseGcController.java index 5b3e761eff..c860f36573 100644 --- a/titus-server-master/src/main/java/com/netflix/titus/master/kubernetes/controller/BaseGcController.java +++ b/titus-server-master/src/main/java/com/netflix/titus/master/kubernetes/controller/BaseGcController.java @@ -21,6 +21,7 @@ import java.util.List; import java.util.concurrent.ExecutorService; import javax.annotation.PreDestroy; +import javax.inject.Named; import com.netflix.spectator.api.Gauge; import com.netflix.titus.common.framework.scheduler.LocalScheduler; @@ -41,6 +42,8 @@ public abstract class BaseGcController { private static final Logger logger = LoggerFactory.getLogger(BaseGcController.class); + static final String GC_CONTROLLER = "gcController"; + protected final String name; protected final String description; protected final TitusRuntime titusRuntime; @@ -60,7 +63,7 @@ public abstract class BaseGcController { public BaseGcController( String name, String description, - TitusRuntime titusRuntime, + @Named(GC_CONTROLLER) TitusRuntime titusRuntime, LocalScheduler scheduler, FixedIntervalTokenBucketConfiguration tokenBucketConfiguration, ControllerConfiguration controllerConfiguration diff --git a/titus-server-master/src/main/java/com/netflix/titus/master/kubernetes/controller/DefaultKubeJobManagementReconciler.java b/titus-server-master/src/main/java/com/netflix/titus/master/kubernetes/controller/DefaultKubeJobManagementReconciler.java index 0668b91a79..5c2fc411ca 100644 --- a/titus-server-master/src/main/java/com/netflix/titus/master/kubernetes/controller/DefaultKubeJobManagementReconciler.java +++ b/titus-server-master/src/main/java/com/netflix/titus/master/kubernetes/controller/DefaultKubeJobManagementReconciler.java @@ -54,7 +54,7 @@ import com.netflix.titus.master.kubernetes.client.model.PodEvent; import com.netflix.titus.master.kubernetes.client.model.PodNotFoundEvent; import com.netflix.titus.master.mesos.MesosConfiguration; -import com.netflix.titus.master.mesos.kubeapiserver.KubeUtil; +import com.netflix.titus.master.kubernetes.KubeUtil; import com.netflix.titus.runtime.connector.kubernetes.KubeApiFacade; import io.kubernetes.client.openapi.models.V1Node; import io.kubernetes.client.openapi.models.V1Pod; diff --git a/titus-server-master/src/main/java/com/netflix/titus/master/kubernetes/controller/GcControllerUtil.java b/titus-server-master/src/main/java/com/netflix/titus/master/kubernetes/controller/GcControllerUtil.java index fa0fa6c462..6d488d1a05 100644 --- a/titus-server-master/src/main/java/com/netflix/titus/master/kubernetes/controller/GcControllerUtil.java +++ b/titus-server-master/src/main/java/com/netflix/titus/master/kubernetes/controller/GcControllerUtil.java @@ -17,7 +17,7 @@ package com.netflix.titus.master.kubernetes.controller; import com.google.gson.JsonSyntaxException; -import com.netflix.titus.master.mesos.kubeapiserver.KubeUtil; +import com.netflix.titus.master.kubernetes.KubeUtil; import com.netflix.titus.runtime.connector.kubernetes.KubeApiException; import com.netflix.titus.runtime.connector.kubernetes.KubeApiFacade; import io.kubernetes.client.openapi.models.V1Node; diff --git a/titus-server-master/src/main/java/com/netflix/titus/master/kubernetes/controller/KubeControllerModule.java b/titus-server-master/src/main/java/com/netflix/titus/master/kubernetes/controller/KubeControllerModule.java index bd3233fc57..6fd6eb0bb6 100644 --- a/titus-server-master/src/main/java/com/netflix/titus/master/kubernetes/controller/KubeControllerModule.java +++ b/titus-server-master/src/main/java/com/netflix/titus/master/kubernetes/controller/KubeControllerModule.java @@ -16,14 +16,20 @@ package com.netflix.titus.master.kubernetes.controller; +import java.time.Duration; import javax.inject.Named; import javax.inject.Singleton; import com.google.inject.AbstractModule; import com.google.inject.Provides; import com.netflix.archaius.ConfigProxyFactory; +import com.netflix.titus.common.framework.scheduler.LocalScheduler; +import com.netflix.titus.common.framework.scheduler.internal.DefaultLocalScheduler; +import com.netflix.titus.common.runtime.TitusRuntime; import com.netflix.titus.common.util.limiter.tokenbucket.FixedIntervalTokenBucketConfiguration; +import reactor.core.scheduler.Schedulers; +import static com.netflix.titus.master.kubernetes.controller.BaseGcController.GC_CONTROLLER; import static com.netflix.titus.master.kubernetes.controller.DefaultKubeJobManagementReconciler.GC_UNKNOWN_PODS; import static com.netflix.titus.master.kubernetes.controller.NodeGcController.NODE_GC_CONTROLLER; import static com.netflix.titus.master.kubernetes.controller.PersistentVolumeClaimGcController.PERSISTENT_VOLUME_CLAIM_GC_CONTROLLER; @@ -49,6 +55,13 @@ protected void configure() { bind(PersistentVolumeReclaimController.class).asEagerSingleton(); } + @Provides + @Singleton + @Named(GC_CONTROLLER) + public LocalScheduler getLocalScheduler(TitusRuntime titusRuntime) { + return new DefaultLocalScheduler(Duration.ofMillis(100), Schedulers.elastic(), titusRuntime.getClock(), titusRuntime.getRegistry()); + } + @Provides @Singleton public KubeControllerConfiguration getKubeControllerConfiguration(ConfigProxyFactory factory) { diff --git a/titus-server-master/src/main/java/com/netflix/titus/master/mesos/kubeapiserver/NoOpJobManagementReconciler.java b/titus-server-master/src/main/java/com/netflix/titus/master/kubernetes/controller/NoOpJobManagementReconciler.java similarity index 91% rename from titus-server-master/src/main/java/com/netflix/titus/master/mesos/kubeapiserver/NoOpJobManagementReconciler.java rename to titus-server-master/src/main/java/com/netflix/titus/master/kubernetes/controller/NoOpJobManagementReconciler.java index 26f075129a..d0f07e7288 100644 --- a/titus-server-master/src/main/java/com/netflix/titus/master/mesos/kubeapiserver/NoOpJobManagementReconciler.java +++ b/titus-server-master/src/main/java/com/netflix/titus/master/kubernetes/controller/NoOpJobManagementReconciler.java @@ -1,5 +1,5 @@ /* - * Copyright 2020 Netflix, Inc. + * Copyright 2021 Netflix, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.netflix.titus.master.mesos.kubeapiserver; +package com.netflix.titus.master.kubernetes.controller; import javax.inject.Singleton; diff --git a/titus-server-master/src/main/java/com/netflix/titus/master/kubernetes/controller/NodeGcController.java b/titus-server-master/src/main/java/com/netflix/titus/master/kubernetes/controller/NodeGcController.java index c128b3d3b5..bbe8c04d22 100644 --- a/titus-server-master/src/main/java/com/netflix/titus/master/kubernetes/controller/NodeGcController.java +++ b/titus-server-master/src/main/java/com/netflix/titus/master/kubernetes/controller/NodeGcController.java @@ -34,12 +34,11 @@ import com.netflix.titus.common.util.StringExt; import com.netflix.titus.common.util.limiter.tokenbucket.FixedIntervalTokenBucketConfiguration; import com.netflix.titus.common.util.time.Clock; -import com.netflix.titus.master.mesos.kubeapiserver.KubeUtil; +import com.netflix.titus.master.kubernetes.KubeUtil; import com.netflix.titus.runtime.connector.kubernetes.KubeApiFacade; import io.kubernetes.client.openapi.models.V1Node; import io.kubernetes.client.openapi.models.V1NodeCondition; import io.kubernetes.client.openapi.models.V1ObjectMeta; -import org.joda.time.DateTime; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -65,7 +64,7 @@ public class NodeGcController extends BaseGcController { @Inject public NodeGcController( TitusRuntime titusRuntime, - LocalScheduler scheduler, + @Named(GC_CONTROLLER) LocalScheduler scheduler, @Named(NODE_GC_CONTROLLER) FixedIntervalTokenBucketConfiguration tokenBucketConfiguration, @Named(NODE_GC_CONTROLLER) ControllerConfiguration controllerConfiguration, AgentManagementService agentManagementService, diff --git a/titus-server-master/src/main/java/com/netflix/titus/master/kubernetes/controller/PersistentVolumeClaimGcController.java b/titus-server-master/src/main/java/com/netflix/titus/master/kubernetes/controller/PersistentVolumeClaimGcController.java index 55d7e9c516..65fc4e0e74 100644 --- a/titus-server-master/src/main/java/com/netflix/titus/master/kubernetes/controller/PersistentVolumeClaimGcController.java +++ b/titus-server-master/src/main/java/com/netflix/titus/master/kubernetes/controller/PersistentVolumeClaimGcController.java @@ -29,9 +29,9 @@ import com.netflix.titus.common.runtime.TitusRuntime; import com.netflix.titus.common.util.limiter.tokenbucket.FixedIntervalTokenBucketConfiguration; import com.netflix.titus.common.util.tuple.Pair; -import com.netflix.titus.master.mesos.kubeapiserver.KubeUtil; -import com.netflix.titus.runtime.connector.kubernetes.KubeApiException; +import com.netflix.titus.master.kubernetes.KubeUtil; import com.netflix.titus.master.kubernetes.client.KubeModelConverters; +import com.netflix.titus.runtime.connector.kubernetes.KubeApiException; import com.netflix.titus.runtime.connector.kubernetes.KubeApiFacade; import io.kubernetes.client.openapi.models.V1PersistentVolumeClaim; import org.slf4j.Logger; @@ -57,7 +57,7 @@ public class PersistentVolumeClaimGcController extends BaseGcController { @Inject public PodDeletionGcController( TitusRuntime titusRuntime, - LocalScheduler scheduler, + @Named(GC_CONTROLLER) LocalScheduler scheduler, @Named(POD_DELETION_GC_CONTROLLER) FixedIntervalTokenBucketConfiguration tokenBucketConfiguration, @Named(POD_DELETION_GC_CONTROLLER) ControllerConfiguration controllerConfiguration, KubeApiFacade kubeApiFacade, diff --git a/titus-server-master/src/main/java/com/netflix/titus/master/kubernetes/controller/PodOnUnknownNodeGcController.java b/titus-server-master/src/main/java/com/netflix/titus/master/kubernetes/controller/PodOnUnknownNodeGcController.java index 24eed04a74..e341e1857a 100644 --- a/titus-server-master/src/main/java/com/netflix/titus/master/kubernetes/controller/PodOnUnknownNodeGcController.java +++ b/titus-server-master/src/main/java/com/netflix/titus/master/kubernetes/controller/PodOnUnknownNodeGcController.java @@ -28,7 +28,7 @@ import com.netflix.titus.common.runtime.TitusRuntime; import com.netflix.titus.common.util.StringExt; import com.netflix.titus.common.util.limiter.tokenbucket.FixedIntervalTokenBucketConfiguration; -import com.netflix.titus.master.mesos.kubeapiserver.KubeUtil; +import com.netflix.titus.master.kubernetes.KubeUtil; import com.netflix.titus.runtime.connector.kubernetes.KubeApiFacade; import io.kubernetes.client.openapi.models.V1Pod; import org.slf4j.Logger; @@ -46,7 +46,7 @@ public class PodOnUnknownNodeGcController extends BaseGcController { @Inject public PodOnUnknownNodeGcController( TitusRuntime titusRuntime, - LocalScheduler scheduler, + @Named(GC_CONTROLLER) LocalScheduler scheduler, @Named(POD_ON_UNKNOWN_NODE_GC_CONTROLLER) FixedIntervalTokenBucketConfiguration tokenBucketConfiguration, @Named(POD_ON_UNKNOWN_NODE_GC_CONTROLLER) ControllerConfiguration controllerConfiguration, KubeApiFacade kubeApiFacade diff --git a/titus-server-master/src/main/java/com/netflix/titus/master/kubernetes/controller/PodTerminalGcController.java b/titus-server-master/src/main/java/com/netflix/titus/master/kubernetes/controller/PodTerminalGcController.java index a09179fa4a..e71c9a033f 100644 --- a/titus-server-master/src/main/java/com/netflix/titus/master/kubernetes/controller/PodTerminalGcController.java +++ b/titus-server-master/src/main/java/com/netflix/titus/master/kubernetes/controller/PodTerminalGcController.java @@ -32,7 +32,7 @@ import com.netflix.titus.common.runtime.TitusRuntime; import com.netflix.titus.common.util.limiter.tokenbucket.FixedIntervalTokenBucketConfiguration; import com.netflix.titus.common.util.time.Clock; -import com.netflix.titus.master.mesos.kubeapiserver.KubeUtil; +import com.netflix.titus.master.kubernetes.KubeUtil; import com.netflix.titus.runtime.connector.kubernetes.KubeApiFacade; import io.kubernetes.client.openapi.models.V1Pod; import io.kubernetes.client.openapi.models.V1PodStatus; @@ -53,7 +53,7 @@ public class PodTerminalGcController extends BaseGcController { @Inject public PodTerminalGcController( TitusRuntime titusRuntime, - LocalScheduler scheduler, + @Named(GC_CONTROLLER) LocalScheduler scheduler, @Named(POD_TERMINAL_GC_CONTROLLER) FixedIntervalTokenBucketConfiguration tokenBucketConfiguration, @Named(POD_TERMINAL_GC_CONTROLLER) ControllerConfiguration controllerConfiguration, KubeApiFacade kubeApiFacade, diff --git a/titus-server-master/src/main/java/com/netflix/titus/master/kubernetes/controller/PodUnknownGcController.java b/titus-server-master/src/main/java/com/netflix/titus/master/kubernetes/controller/PodUnknownGcController.java index 03833bf88f..de2669ba7f 100644 --- a/titus-server-master/src/main/java/com/netflix/titus/master/kubernetes/controller/PodUnknownGcController.java +++ b/titus-server-master/src/main/java/com/netflix/titus/master/kubernetes/controller/PodUnknownGcController.java @@ -32,12 +32,11 @@ import com.netflix.titus.common.runtime.TitusRuntime; import com.netflix.titus.common.util.limiter.tokenbucket.FixedIntervalTokenBucketConfiguration; import com.netflix.titus.common.util.time.Clock; -import com.netflix.titus.master.mesos.kubeapiserver.KubeUtil; +import com.netflix.titus.master.kubernetes.KubeUtil; import com.netflix.titus.runtime.connector.kubernetes.KubeApiFacade; import io.kubernetes.client.openapi.models.V1ObjectMeta; import io.kubernetes.client.openapi.models.V1Pod; import io.kubernetes.client.openapi.models.V1PodStatus; -import org.joda.time.DateTime; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -55,7 +54,7 @@ public class PodUnknownGcController extends BaseGcController { @Inject public PodUnknownGcController( TitusRuntime titusRuntime, - LocalScheduler scheduler, + @Named(GC_CONTROLLER) LocalScheduler scheduler, @Named(POD_UNKNOWN_GC_CONTROLLER) FixedIntervalTokenBucketConfiguration tokenBucketConfiguration, @Named(POD_UNKNOWN_GC_CONTROLLER) ControllerConfiguration controllerConfiguration, KubeApiFacade kubeApiFacade, diff --git a/titus-server-master/src/main/java/com/netflix/titus/master/kubernetes/pod/KubePodModule.java b/titus-server-master/src/main/java/com/netflix/titus/master/kubernetes/pod/KubePodModule.java index 4e789d07b1..5b0a243aae 100644 --- a/titus-server-master/src/main/java/com/netflix/titus/master/kubernetes/pod/KubePodModule.java +++ b/titus-server-master/src/main/java/com/netflix/titus/master/kubernetes/pod/KubePodModule.java @@ -52,6 +52,7 @@ import com.netflix.titus.master.kubernetes.pod.topology.TopologyFactory; import com.netflix.titus.master.kubernetes.pod.v0.V0SpecPodFactory; import com.netflix.titus.master.kubernetes.pod.v1.V1SpecPodFactory; +import com.netflix.titus.master.mesos.MesosConfiguration; import com.netflix.titus.master.service.management.ApplicationSlaManagementService; public class KubePodModule extends AbstractModule { @@ -68,6 +69,15 @@ protected void configure() { bind(PodEnvFactory.class).to(DefaultPodEnvFactory.class); } + /** + * TODO Move properties from {@link MesosConfiguration} to other configuration classes. + */ + @Provides + @Singleton + public MesosConfiguration getMesosConfiguration(ConfigProxyFactory factory) { + return factory.newProxy(MesosConfiguration.class); + } + @Provides @Singleton public KubePodConfiguration getKubePodConfiguration(ConfigProxyFactory factory) { diff --git a/titus-server-master/src/main/java/com/netflix/titus/master/kubernetes/pod/KubePodUtil.java b/titus-server-master/src/main/java/com/netflix/titus/master/kubernetes/pod/KubePodUtil.java index 12f67a63c5..c2aade8aba 100644 --- a/titus-server-master/src/main/java/com/netflix/titus/master/kubernetes/pod/KubePodUtil.java +++ b/titus-server-master/src/main/java/com/netflix/titus/master/kubernetes/pod/KubePodUtil.java @@ -41,7 +41,7 @@ import com.netflix.titus.common.util.StringExt; import com.netflix.titus.common.util.tuple.Pair; import com.netflix.titus.grpc.protogen.JobDescriptor; -import com.netflix.titus.master.mesos.kubeapiserver.PerformanceToolUtil; +import com.netflix.titus.master.kubernetes.PerformanceToolUtil; import com.netflix.titus.master.kubernetes.client.KubeModelConverters; import com.netflix.titus.runtime.endpoint.v3.grpc.GrpcJobManagementModelConverters; import com.netflix.titus.runtime.kubernetes.KubeConstants; diff --git a/titus-server-master/src/main/java/com/netflix/titus/master/kubernetes/pod/resourcepool/FarzonePodResourcePoolResolver.java b/titus-server-master/src/main/java/com/netflix/titus/master/kubernetes/pod/resourcepool/FarzonePodResourcePoolResolver.java index b1f0a87a38..358a4cfcb8 100644 --- a/titus-server-master/src/main/java/com/netflix/titus/master/kubernetes/pod/resourcepool/FarzonePodResourcePoolResolver.java +++ b/titus-server-master/src/main/java/com/netflix/titus/master/kubernetes/pod/resourcepool/FarzonePodResourcePoolResolver.java @@ -22,7 +22,7 @@ import com.netflix.titus.api.jobmanager.model.job.Job; import com.netflix.titus.api.jobmanager.model.job.Task; import com.netflix.titus.master.kubernetes.pod.KubePodConfiguration; -import com.netflix.titus.master.mesos.kubeapiserver.KubeUtil; +import com.netflix.titus.master.kubernetes.KubeUtil; /** * Farzone resource pool resolver. diff --git a/titus-server-master/src/main/java/com/netflix/titus/master/kubernetes/pod/taint/DefaultTaintTolerationFactory.java b/titus-server-master/src/main/java/com/netflix/titus/master/kubernetes/pod/taint/DefaultTaintTolerationFactory.java index e4f7aa6f20..be3e8cc9ec 100644 --- a/titus-server-master/src/main/java/com/netflix/titus/master/kubernetes/pod/taint/DefaultTaintTolerationFactory.java +++ b/titus-server-master/src/main/java/com/netflix/titus/master/kubernetes/pod/taint/DefaultTaintTolerationFactory.java @@ -30,7 +30,7 @@ import com.netflix.titus.api.model.Tier; import com.netflix.titus.common.util.StringExt; import com.netflix.titus.master.kubernetes.pod.KubePodConfiguration; -import com.netflix.titus.master.mesos.kubeapiserver.KubeUtil; +import com.netflix.titus.master.kubernetes.KubeUtil; import com.netflix.titus.master.service.management.ApplicationSlaManagementService; import com.netflix.titus.runtime.kubernetes.KubeConstants; import io.kubernetes.client.openapi.models.V1Toleration; diff --git a/titus-server-master/src/main/java/com/netflix/titus/master/kubernetes/pod/v1/V1SpecPodFactory.java b/titus-server-master/src/main/java/com/netflix/titus/master/kubernetes/pod/v1/V1SpecPodFactory.java index 7506cfa1bf..540bd7dd7f 100644 --- a/titus-server-master/src/main/java/com/netflix/titus/master/kubernetes/pod/v1/V1SpecPodFactory.java +++ b/titus-server-master/src/main/java/com/netflix/titus/master/kubernetes/pod/v1/V1SpecPodFactory.java @@ -61,7 +61,7 @@ import com.netflix.titus.master.kubernetes.pod.env.PodEnvFactory; import com.netflix.titus.master.kubernetes.pod.taint.TaintTolerationFactory; import com.netflix.titus.master.kubernetes.pod.topology.TopologyFactory; -import com.netflix.titus.master.mesos.kubeapiserver.PerformanceToolUtil; +import com.netflix.titus.master.kubernetes.PerformanceToolUtil; import com.netflix.titus.master.service.management.ApplicationSlaManagementService; import com.netflix.titus.runtime.kubernetes.KubeConstants; import io.kubernetes.client.custom.Quantity; diff --git a/titus-server-master/src/main/java/com/netflix/titus/master/kubernetes/watcher/KubeAndJobServiceSyncStatusWatcher.java b/titus-server-master/src/main/java/com/netflix/titus/master/kubernetes/watcher/KubeAndJobServiceSyncStatusWatcher.java index 95458a0e0d..069dee1cdc 100644 --- a/titus-server-master/src/main/java/com/netflix/titus/master/kubernetes/watcher/KubeAndJobServiceSyncStatusWatcher.java +++ b/titus-server-master/src/main/java/com/netflix/titus/master/kubernetes/watcher/KubeAndJobServiceSyncStatusWatcher.java @@ -45,7 +45,7 @@ import com.netflix.titus.common.util.tuple.Either; import com.netflix.titus.common.util.tuple.Pair; import com.netflix.titus.master.kubernetes.ContainerResultCodeResolver; -import com.netflix.titus.master.mesos.kubeapiserver.PodToTaskMapper; +import com.netflix.titus.master.kubernetes.PodToTaskMapper; import com.netflix.titus.master.kubernetes.client.model.PodWrapper; import com.netflix.titus.runtime.connector.kubernetes.KubeApiFacade; import io.kubernetes.client.informer.ResourceEventHandler; diff --git a/titus-server-master/src/main/java/com/netflix/titus/master/mesos/ContainerEvent.java b/titus-server-master/src/main/java/com/netflix/titus/master/mesos/ContainerEvent.java deleted file mode 100644 index 89178556ab..0000000000 --- a/titus-server-master/src/main/java/com/netflix/titus/master/mesos/ContainerEvent.java +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright 2018 Netflix, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.netflix.titus.master.mesos; - -public interface ContainerEvent { -} diff --git a/titus-server-master/src/main/java/com/netflix/titus/master/mesos/ContainerInfoUtil.java b/titus-server-master/src/main/java/com/netflix/titus/master/mesos/ContainerInfoUtil.java index 4b16b213b8..a3fd8846c4 100644 --- a/titus-server-master/src/main/java/com/netflix/titus/master/mesos/ContainerInfoUtil.java +++ b/titus-server-master/src/main/java/com/netflix/titus/master/mesos/ContainerInfoUtil.java @@ -21,6 +21,10 @@ import com.netflix.titus.api.jobmanager.model.job.Task; import io.titanframework.messages.TitanProtos; +/** + * @deprecated Remove after migrating to V1 pod spec. + */ +@Deprecated public class ContainerInfoUtil { public static void setContainerInfoEnvVariables(TitanProtos.ContainerInfo.Builder containerInfoBuilder, Container container, Task task) { diff --git a/titus-server-master/src/main/java/com/netflix/titus/master/mesos/DefaultV3TaskInfoRequestFactory.java b/titus-server-master/src/main/java/com/netflix/titus/master/mesos/DefaultV3TaskInfoRequestFactory.java deleted file mode 100644 index b7b832c63e..0000000000 --- a/titus-server-master/src/main/java/com/netflix/titus/master/mesos/DefaultV3TaskInfoRequestFactory.java +++ /dev/null @@ -1,393 +0,0 @@ -/* - * Copyright 2019 Netflix, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.netflix.titus.master.mesos; - -import java.util.Collections; -import java.util.List; -import java.util.Map; -import java.util.Optional; -import java.util.regex.Pattern; -import java.util.stream.Collectors; -import javax.inject.Inject; -import javax.inject.Singleton; - -import com.google.common.base.Strings; -import com.google.common.primitives.Ints; -import com.netflix.fenzo.PreferentialNamedConsumableResourceSet; -import com.netflix.fenzo.TaskRequest; -import com.netflix.titus.api.jobmanager.JobAttributes; -import com.netflix.titus.api.jobmanager.TaskAttributes; -import com.netflix.titus.api.jobmanager.model.job.Container; -import com.netflix.titus.api.jobmanager.model.job.ContainerResources; -import com.netflix.titus.api.jobmanager.model.job.Image; -import com.netflix.titus.api.jobmanager.model.job.Job; -import com.netflix.titus.api.jobmanager.model.job.JobDescriptor; -import com.netflix.titus.api.jobmanager.model.job.JobFunctions; -import com.netflix.titus.api.jobmanager.model.job.JobGroupInfo; -import com.netflix.titus.api.jobmanager.model.job.JobState; -import com.netflix.titus.api.jobmanager.model.job.SecurityProfile; -import com.netflix.titus.api.jobmanager.model.job.Task; -import com.netflix.titus.api.jobmanager.model.job.vpc.SignedIpAddressAllocation; -import com.netflix.titus.api.model.EfsMount; -import com.netflix.titus.common.util.CollectionsExt; -import com.netflix.titus.common.util.Evaluators; -import com.netflix.titus.common.util.StringExt; -import com.netflix.titus.master.config.MasterConfiguration; -import com.netflix.titus.master.model.job.TitusQueuableTask; -import com.netflix.titus.runtime.endpoint.v3.grpc.GrpcJobManagementModelConverters; -import io.titanframework.messages.TitanProtos.ContainerInfo; -import io.titanframework.messages.TitanProtos.ContainerInfo.EfsConfigInfo; -import org.apache.mesos.Protos; - -import static com.netflix.titus.api.jobmanager.JobAttributes.JOB_PARAMETER_ATTRIBUTES_ALLOW_CPU_BURSTING; -import static com.netflix.titus.api.jobmanager.JobAttributes.JOB_PARAMETER_ATTRIBUTES_ALLOW_NESTED_CONTAINERS; -import static com.netflix.titus.api.jobmanager.JobAttributes.JOB_PARAMETER_ATTRIBUTES_ALLOW_NETWORK_BURSTING; -import static com.netflix.titus.api.jobmanager.JobAttributes.JOB_PARAMETER_ATTRIBUTES_KILL_WAIT_SECONDS; -import static com.netflix.titus.api.jobmanager.JobAttributes.JOB_PARAMETER_ATTRIBUTES_SCHED_BATCH; -import static com.netflix.titus.api.jobmanager.model.job.JobFunctions.getJobType; -import static com.netflix.titus.common.util.Evaluators.applyNotNull; - -/** - * Converts Titus Models into the Mesos proto objects - */ -@Singleton -public class DefaultV3TaskInfoRequestFactory implements TaskInfoRequestFactory { - - private static final String PASSTHROUGH_ATTRIBUTES_PREFIX = "titusParameter.agent."; - private static final String TITUS_AGENT_ATTRIBUTE_PREFIX = "titus.agent."; - private static final String OWNER_EMAIL_ATTRIBUTE = TITUS_AGENT_ATTRIBUTE_PREFIX + "ownerEmail"; - private static final String JOB_TYPE_ATTRIBUTE = TITUS_AGENT_ATTRIBUTE_PREFIX + "jobType"; - private static final String JOB_ID_ATTRIBUTE = TITUS_AGENT_ATTRIBUTE_PREFIX + "jobId"; - private static final String APPLICATION_NAME_ATTRIBUTE = TITUS_AGENT_ATTRIBUTE_PREFIX + "applicationName"; - private static final String RUNTIME_PREDICTION_ATTRIBUTE = "titus.agent.runtimePredictionSec"; - private static final String RUNTIME_PREDICTIONS_AVAILABLE_ATTRIBUTE = "titus.agent.runtimePredictionsAvailable"; - private static final String EXECUTOR_PER_TASK_LABEL = "executorpertask"; - private static final String LEGACY_EXECUTOR_NAME = "docker-executor"; - private static final String EXECUTOR_PER_TASK_EXECUTOR_NAME = "docker-per-task-executor"; - - private static final String ARN_PREFIX = "arn:aws:iam::"; - private static final String ARN_SUFFIX = ":role/"; - private static final Pattern IAM_PROFILE_RE = Pattern.compile(ARN_PREFIX + "(\\d+)" + ARN_SUFFIX + "\\S+"); - - private final MasterConfiguration jobCoordinatorConfiguration; - private final MesosConfiguration mesosConfiguration; - private final String iamArnPrefix; - - @Inject - public DefaultV3TaskInfoRequestFactory(MasterConfiguration jobCoordinatorConfiguration, - MesosConfiguration mesosConfiguration) { - this.jobCoordinatorConfiguration = jobCoordinatorConfiguration; - this.mesosConfiguration = mesosConfiguration; - // Get the AWS account ID to use for building IAM ARNs. - String accountId = Evaluators.getOrDefault(System.getenv("EC2_OWNER_ID"), "default"); - this.iamArnPrefix = ARN_PREFIX + accountId + ARN_SUFFIX; - } - - @Override - public TaskInfoRequest newTaskInfo(TitusQueuableTask fenzoTask, - Job job, - Task task, - String hostname, - Map attributesMap, - Protos.SlaveID slaveID, - PreferentialNamedConsumableResourceSet.ConsumeResult consumeResult, - Optional executorUriOverrideOpt, - Map passthroughAttributes) { - String taskId = task.getId(); - Protos.TaskID protoTaskId = Protos.TaskID.newBuilder().setValue(taskId).build(); - Protos.ExecutorInfo executorInfo = newExecutorInfo(task, attributesMap, executorUriOverrideOpt); - Protos.TaskInfo.Builder taskInfoBuilder = newTaskInfoBuilder(protoTaskId, executorInfo, slaveID, fenzoTask, job, task); - ContainerInfo.Builder containerInfoBuilder = newContainerInfoBuilder(job, task, fenzoTask, passthroughAttributes); - taskInfoBuilder.setData(containerInfoBuilder.build().toByteString()); - return new TaskInfoRequest(job, task, taskInfoBuilder.build(), containerInfoBuilder.getPassthroughAttributesMap()); - } - - private ContainerInfo.Builder newContainerInfoBuilder(Job job, Task task, TitusQueuableTask fenzoTask, - Map passthroughAttributes) { - JobDescriptor jobDescriptor = job.getJobDescriptor(); - Map jobAttributes = jobDescriptor.getAttributes(); - ContainerInfo.Builder containerInfoBuilder = ContainerInfo.newBuilder(); - Container container = jobDescriptor.getContainer(); - Map containerAttributes = container.getAttributes(); - ContainerResources containerResources = container.getContainerResources(); - SecurityProfile v3SecurityProfile = container.getSecurityProfile(); - - // Docker Values (Image, entrypoint, and command) - setImage(containerInfoBuilder, container.getImage()); - setEntryPointCommand(containerInfoBuilder, container, jobAttributes); - - // Netflix Values - // Configure Netflix Metadata - containerInfoBuilder.setAppName(jobDescriptor.getApplicationName()); - JobGroupInfo jobGroupInfo = jobDescriptor.getJobGroupInfo(); - if (jobGroupInfo != null) { - applyNotNull(jobGroupInfo.getStack(), containerInfoBuilder::setJobGroupStack); - applyNotNull(jobGroupInfo.getDetail(), containerInfoBuilder::setJobGroupDetail); - applyNotNull(jobGroupInfo.getSequence(), containerInfoBuilder::setJobGroupSequence); - } - - // Configure Metatron - String metatronAppMetadata = v3SecurityProfile.getAttributes().get(Container.ATTRIBUTE_NETFLIX_APP_METADATA); - String metatronAppSignature = v3SecurityProfile.getAttributes().get(Container.ATTRIBUTE_NETFLIX_APP_METADATA_SIG); - if (metatronAppMetadata != null && metatronAppSignature != null) { - ContainerInfo.MetatronCreds.Builder metatronBuilder = ContainerInfo.MetatronCreds.newBuilder() - .setAppMetadata(metatronAppMetadata) - .setMetadataSig(metatronAppSignature); - containerInfoBuilder.setMetatronCreds(metatronBuilder.build()); - } - - // Configure agent job attributes - containerInfoBuilder.setAllowCpuBursting(Boolean.parseBoolean(containerAttributes.get(JOB_PARAMETER_ATTRIBUTES_ALLOW_CPU_BURSTING))); - containerInfoBuilder.setAllowNetworkBursting(Boolean.parseBoolean(containerAttributes.get(JOB_PARAMETER_ATTRIBUTES_ALLOW_NETWORK_BURSTING))); - containerInfoBuilder.setBatch(Boolean.parseBoolean(containerAttributes.get(JOB_PARAMETER_ATTRIBUTES_SCHED_BATCH))); - - boolean allowNestedContainers = mesosConfiguration.isNestedContainersEnabled() && Boolean.parseBoolean(containerAttributes.get(JOB_PARAMETER_ATTRIBUTES_ALLOW_NESTED_CONTAINERS)); - containerInfoBuilder.setAllowNestedContainers(allowNestedContainers); - - String attributeKillWaitSeconds = containerAttributes.get(JOB_PARAMETER_ATTRIBUTES_KILL_WAIT_SECONDS); - Integer killWaitSeconds = attributeKillWaitSeconds == null ? null : Ints.tryParse(attributeKillWaitSeconds); - if (killWaitSeconds == null || killWaitSeconds < mesosConfiguration.getMinKillWaitSeconds() || killWaitSeconds > mesosConfiguration.getMaxKillWaitSeconds()) { - if (JobFunctions.isBatchJob(job)) { - killWaitSeconds = mesosConfiguration.getBatchDefaultKillWaitSeconds(); - } else if (JobFunctions.isServiceJob(job)) { - killWaitSeconds = mesosConfiguration.getServiceDefaultKillWaitSeconds(); - } else { - killWaitSeconds = mesosConfiguration.getMinKillWaitSeconds(); - } - } - containerInfoBuilder.setKillWaitSeconds(killWaitSeconds); - - // Send passthrough attributes that begin with the agent prefix - containerAttributes.forEach((k, v) -> { - if (k.startsWith(PASSTHROUGH_ATTRIBUTES_PREFIX)) { - containerInfoBuilder.putPassthroughAttributes(k, v); - } - }); - - containerInfoBuilder.putAllPassthroughAttributes(passthroughAttributes); - containerInfoBuilder.putPassthroughAttributes(OWNER_EMAIL_ATTRIBUTE, jobDescriptor.getOwner().getTeamEmail()); - containerInfoBuilder.putPassthroughAttributes(JOB_TYPE_ATTRIBUTE, getJobType(jobDescriptor).name()); - containerInfoBuilder.putPassthroughAttributes(JOB_ID_ATTRIBUTE, job.getId()); - containerInfoBuilder.putPassthroughAttributes(APPLICATION_NAME_ATTRIBUTE, jobDescriptor.getApplicationName()); - Evaluators.acceptNotNull(jobAttributes.get(JobAttributes.JOB_ATTRIBUTES_RUNTIME_PREDICTION_SEC), - v -> containerInfoBuilder.putPassthroughAttributes(RUNTIME_PREDICTION_ATTRIBUTE, v) - ); - Evaluators.acceptNotNull(jobAttributes.get(JobAttributes.JOB_ATTRIBUTES_RUNTIME_PREDICTION_AVAILABLE), - v -> containerInfoBuilder.putPassthroughAttributes(RUNTIME_PREDICTIONS_AVAILABLE_ATTRIBUTE, v) - ); - - // Configure Environment Variables - if (jobCoordinatorConfiguration.isContainerInfoEnvEnabled()) { - ContainerInfoUtil.setContainerInfoEnvVariables(containerInfoBuilder, container, task); - } - - // Always set this to true until it is removed from the executor - containerInfoBuilder.setIgnoreLaunchGuard(true); - - // AWS Values - // Configure IAM Role - Evaluators.acceptNotNull(v3SecurityProfile.getIamRole(), iam -> { - String qualifiedIam = IAM_PROFILE_RE.matcher(iam).matches() ? iam : iamArnPrefix + iam; - containerInfoBuilder.setIamProfile(qualifiedIam); - }); - - // Configure ENI (IP Address, SGs) - List securityGroups = v3SecurityProfile.getSecurityGroups(); - final TaskRequest.AssignedResources assignedResources = fenzoTask.getAssignedResources(); - String eniLabel = assignedResources == null ? "0" : "" + assignedResources.getConsumedNamedResources().get(0).getIndex(); - ContainerInfo.NetworkConfigInfo.Builder networkConfigInfoBuilder = ContainerInfo.NetworkConfigInfo.newBuilder() - .setEniLabel(eniLabel) - .setEniLablel(eniLabel) - .addAllSecurityGroups(securityGroups) - .setBandwidthLimitMbps((int) fenzoTask.getNetworkMbps()); - - containerInfoBuilder.setNetworkConfigInfo(networkConfigInfoBuilder.build()); - - // Configure GPU - containerInfoBuilder.setNumGpus(containerResources.getGpu()); - - // Configure EFS - containerInfoBuilder.addAllEfsConfigInfo(setupEfsMounts(containerResources.getEfsMounts())); - - // Configure shared memory size - containerInfoBuilder.setShmSizeMB(containerResources.getShmMB()); - - // Configure IP address allocation - setSignedAddressAllocation(containerInfoBuilder, task, containerResources); - - // Configure job accepted timestamp - setJobAcceptedTimestamp(containerInfoBuilder, job); - - return containerInfoBuilder; - } - - private void setImage(ContainerInfo.Builder containerInfoBuilder, Image image) { - containerInfoBuilder.setImageName(image.getName()); - String registryUrl = mesosConfiguration.getRegistryUrl(); - if (!Strings.isNullOrEmpty(registryUrl)) { - String updatedRegistryUrl = StringExt.appendToEndIfMissing(registryUrl, "/"); - String fullQualifiedImage = updatedRegistryUrl + image.getName(); - containerInfoBuilder.setFullyQualifiedImage(fullQualifiedImage); - } - applyNotNull(image.getDigest(), containerInfoBuilder::setImageDigest); - applyNotNull(image.getTag(), containerInfoBuilder::setVersion); - } - - private void setEntryPointCommand(ContainerInfo.Builder containerInfoBuilder, Container container, Map jobAttributes) { - if (CollectionsExt.isNullOrEmpty(container.getCommand()) && !shouldSkipEntryPointJoin(jobAttributes)) { - // fallback to the old behavior when no command is set to avoid breaking existing jobs relying on shell - // parsing and word splitting being done by the executor for flat string entrypoints - containerInfoBuilder.setEntrypointStr(StringExt.concatenate(container.getEntryPoint(), " ")); - return; - } - containerInfoBuilder.setProcess(ContainerInfo.Process.newBuilder() - .addAllEntrypoint(container.getEntryPoint()) - .addAllCommand(container.getCommand()) - ); - } - - private boolean shouldSkipEntryPointJoin(Map jobAttributes) { - return Boolean.parseBoolean(jobAttributes.getOrDefault(JobAttributes.JOB_PARAMETER_ATTRIBUTES_ENTRY_POINT_SKIP_SHELL_PARSING, - "false").trim()); - - } - - private void setSignedAddressAllocation(ContainerInfo.Builder containerInfoBuilder, Task task, ContainerResources containerResources) { - if (task.getTaskContext().containsKey(TaskAttributes.TASK_ATTRIBUTES_IP_ALLOCATION_ID)) { - String addressAllocationId = task.getTaskContext().get(TaskAttributes.TASK_ATTRIBUTES_IP_ALLOCATION_ID); - for (SignedIpAddressAllocation signedIpAddressAllocation : containerResources.getSignedIpAddressAllocations()) { - if (signedIpAddressAllocation.getIpAddressAllocation().getAllocationId().equals(addressAllocationId)) { - containerInfoBuilder.setSignedAddressAllocation(GrpcJobManagementModelConverters.toGrpcSignedAddressAllocation(signedIpAddressAllocation)); - break; - } - } - } - } - - private void setJobAcceptedTimestamp(ContainerInfo.Builder containerInfoBuilder, Job job) { - JobFunctions.findJobStatus(job, JobState.Accepted).ifPresent(jobStatus -> containerInfoBuilder.setJobAcceptedTimestampMs(jobStatus.getTimestamp())); - } - - private Protos.TaskInfo.Builder newTaskInfoBuilder(Protos.TaskID taskId, - Protos.ExecutorInfo executorInfo, - Protos.SlaveID slaveID, - TitusQueuableTask fenzoTask, - Job job, - Task task - ) { - - // use requested CPUs rather than what Fenzo assigned, since some CPUs could have been scheduled - // opportunistically (oversubscribed) - double requestedCpus = job.getJobDescriptor().getContainer().getContainerResources().getCpu(); - Protos.TaskInfo.Builder builder = Protos.TaskInfo.newBuilder() - .setTaskId(taskId) - .setName(taskId.getValue()) - .setExecutor(executorInfo) - .setSlaveId(slaveID) - .addResources(Protos.Resource.newBuilder() - .setName("cpus") - .setType(Protos.Value.Type.SCALAR) - .setScalar(Protos.Value.Scalar.newBuilder().setValue(requestedCpus).build())) - .addResources(Protos.Resource.newBuilder() - .setName("mem") - .setType(Protos.Value.Type.SCALAR) - .setScalar(Protos.Value.Scalar.newBuilder().setValue(fenzoTask.getMemory()).build())) - .addResources(Protos.Resource.newBuilder() - .setName("disk") - .setType(Protos.Value.Type.SCALAR) - .setScalar(Protos.Value.Scalar.newBuilder().setValue(fenzoTask.getDisk()).build())) - .addResources(Protos.Resource.newBuilder() - .setName("network") - .setType(Protos.Value.Type.SCALAR) - .setScalar(Protos.Value.Scalar.newBuilder().setValue(fenzoTask.getNetworkMbps()))); - - if (fenzoTask.isCpuOpportunistic() && fenzoTask.getOpportunisticCpus() > 0) { - builder.addResources(Protos.Resource.newBuilder() - .setName("opportunisticCpus") - .setType(Protos.Value.Type.SCALAR) - .setScalar(Protos.Value.Scalar.newBuilder().setValue(fenzoTask.getOpportunisticCpus()).build()) - ); - } - - // set scalars other than cpus, mem, disk - final Map scalars = fenzoTask.getScalarRequests(); - if (scalars != null && !scalars.isEmpty()) { - for (Map.Entry entry : scalars.entrySet()) { - if (!Container.PRIMARY_RESOURCES.contains(entry.getKey())) { // Already set above - builder.addResources(Protos.Resource.newBuilder() - .setName(entry.getKey()) - .setType(Protos.Value.Type.SCALAR) - .setScalar(Protos.Value.Scalar.newBuilder().setValue(entry.getValue()).build()) - ); - } - } - } - - return builder; - } - - private Protos.ExecutorInfo newExecutorInfo(Task task, - Map attributesMap, - Optional executorUriOverrideOpt) { - - boolean executorPerTask = attributesMap.containsKey(EXECUTOR_PER_TASK_LABEL); - String executorName = LEGACY_EXECUTOR_NAME; - String executorId = LEGACY_EXECUTOR_NAME; - if (executorPerTask) { - executorName = EXECUTOR_PER_TASK_EXECUTOR_NAME; - executorId = EXECUTOR_PER_TASK_EXECUTOR_NAME + "-" + task.getId(); - } - - Protos.CommandInfo commandInfo = newCommandInfo(executorPerTask, executorUriOverrideOpt); - return Protos.ExecutorInfo.newBuilder() - .setExecutorId(Protos.ExecutorID.newBuilder().setValue(executorId).build()) - .setName(executorName) - .setCommand(commandInfo) - .build(); - } - - private Protos.CommandInfo newCommandInfo(boolean executorPerTask, Optional executorUriOverrideOpt) { - Protos.CommandInfo.URI.Builder uriBuilder = Protos.CommandInfo.URI.newBuilder(); - Protos.CommandInfo.Builder commandInfoBuilder = Protos.CommandInfo.newBuilder(); - - if (executorPerTask && mesosConfiguration.isExecutorUriOverrideEnabled() && executorUriOverrideOpt.isPresent()) { - commandInfoBuilder.setShell(false); - commandInfoBuilder.setValue(mesosConfiguration.getExecutorUriOverrideCommand()); - uriBuilder.setValue(executorUriOverrideOpt.get()); - uriBuilder.setExtract(true); - uriBuilder.setCache(true); - commandInfoBuilder.addUris(uriBuilder.build()); - } else { - commandInfoBuilder.setValue(jobCoordinatorConfiguration.pathToTitusExecutor()); - } - - return commandInfoBuilder.build(); - } - - private List setupEfsMounts(List efsMounts) { - if (efsMounts.isEmpty()) { - return Collections.emptyList(); - } - return efsMounts.stream().map(efsMount -> EfsConfigInfo.newBuilder() - .setEfsFsId(efsMount.getEfsId()) - .setMntPerms(EfsConfigInfo.MountPerms.valueOf(efsMount.getMountPerm().name())) - .setMountPoint(efsMount.getMountPoint()) - .setEfsFsRelativeMntPoint(efsMount.getEfsRelativeMountPoint()) - .build() - ).collect(Collectors.toList()); - } -} diff --git a/titus-server-master/src/main/java/com/netflix/titus/master/mesos/LeaseRescindedEvent.java b/titus-server-master/src/main/java/com/netflix/titus/master/mesos/LeaseRescindedEvent.java deleted file mode 100644 index f537909f4f..0000000000 --- a/titus-server-master/src/main/java/com/netflix/titus/master/mesos/LeaseRescindedEvent.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright 2019 Netflix, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.netflix.titus.master.mesos; - -public class LeaseRescindedEvent { - - private static LeaseRescindedEvent ALL_EVENT = new LeaseRescindedEvent(Type.All, ""); - - public enum Type { - All, - LeaseId - } - - private final Type type; - private final String value; - - private LeaseRescindedEvent(Type type, String value) { - this.type = type; - this.value = value; - } - - public Type getType() { - return type; - } - - public String getValue() { - return value; - } - - public static LeaseRescindedEvent allEvent() { - return ALL_EVENT; - } - - public static LeaseRescindedEvent leaseIdEvent(String leaseId) { - return new LeaseRescindedEvent(Type.LeaseId, leaseId); - } -} diff --git a/titus-server-master/src/main/java/com/netflix/titus/master/mesos/MesosConfiguration.java b/titus-server-master/src/main/java/com/netflix/titus/master/mesos/MesosConfiguration.java index 9138ac8ca7..b03c475475 100644 --- a/titus-server-master/src/main/java/com/netflix/titus/master/mesos/MesosConfiguration.java +++ b/titus-server-master/src/main/java/com/netflix/titus/master/mesos/MesosConfiguration.java @@ -16,13 +16,11 @@ package com.netflix.titus.master.mesos; -import java.util.Set; - import com.netflix.archaius.api.annotations.Configuration; import com.netflix.archaius.api.annotations.DefaultValue; -import com.netflix.titus.runtime.kubernetes.KubeConstants; @Configuration(prefix = "titus.mesos") +@Deprecated public interface MesosConfiguration { @DefaultValue(".*invalidRequest.*") @@ -52,65 +50,6 @@ public interface MesosConfiguration { @DefaultValue("60000") long getOrphanedPodTimeoutMs(); - @DefaultValue("false") - boolean isAllowReconcilerUpdatesForUnknownTasks(); - - /** - * @return whether or not the nested containers should be allowed. - */ - @DefaultValue("false") - boolean isNestedContainersEnabled(); - - /** - * @return the min that can be set on the killWaitSeconds field. The default value will be used instead if the value specified - * is lower than the min. - */ - @DefaultValue("10") - int getMinKillWaitSeconds(); - - /** - * @return the max that can be set on the killWaitSeconds field. The default value will be used instead if the value specified - * is greater than the max. - */ - @DefaultValue("300") - int getMaxKillWaitSeconds(); - - /** - * @return maximum amount of seconds to wait before forcefully terminating a batch job container. - */ - @DefaultValue("10") - int getBatchDefaultKillWaitSeconds(); - - /** - * @return maximum amount of seconds to wait before forcefully terminating a service job container. - */ - @DefaultValue("120") - int getServiceDefaultKillWaitSeconds(); - - /** - * @return whether or not to override the executor URI on an agent. - */ - @DefaultValue("true") - boolean isExecutorUriOverrideEnabled(); - - /** - * @return the URI to use for all executor URI overrides. - */ - @DefaultValue("") - String getGlobalExecutorUriOverride(); - - /** - * @return the command to use with overridden executor URIs. - */ - @DefaultValue("./run") - String getExecutorUriOverrideCommand(); - - /** - * @return the registry URL that will be merged with the image name. - */ - @DefaultValue("") - String getRegistryUrl(); - /** * @return whether or not the kube api server integration is enabled. Only applied at startup. */ @@ -134,22 +73,4 @@ public interface MesosConfiguration { */ @DefaultValue("false") boolean isCompressionEnabledForKubeApiClient(); - - /** - * @return whether or not to GC unknown pods - */ - @DefaultValue("true") - boolean isGcUnknownPodsEnabled(); - - /** - * @return whether or not to add a json encoded job descriptor as a pod annotation - */ - @DefaultValue("true") - boolean isJobDescriptorAnnotationEnabled(); - - /** - * Taints tolerated by Fenzo. Nodes with taints not in this set are not added to Fenzo. The exception is - * {@link KubeConstants#TAINT_SCHEDULER} which is checked explicitly. - */ - Set getFenzoTaintTolerations(); } diff --git a/titus-server-master/src/main/java/com/netflix/titus/master/mesos/MesosModule.java b/titus-server-master/src/main/java/com/netflix/titus/master/mesos/MesosModule.java deleted file mode 100644 index e83355e0e1..0000000000 --- a/titus-server-master/src/main/java/com/netflix/titus/master/mesos/MesosModule.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright 2018 Netflix, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.netflix.titus.master.mesos; - -import java.time.Duration; -import javax.inject.Singleton; - -import com.google.inject.AbstractModule; -import com.google.inject.Injector; -import com.google.inject.Key; -import com.google.inject.Provides; -import com.google.inject.name.Names; -import com.netflix.archaius.ConfigProxyFactory; -import com.netflix.titus.common.framework.scheduler.LocalScheduler; -import com.netflix.titus.common.framework.scheduler.internal.DefaultLocalScheduler; -import com.netflix.titus.common.runtime.TitusRuntime; -import com.netflix.titus.master.mesos.kubeapiserver.LegacyKubeModule; -import reactor.core.scheduler.Schedulers; - -import static com.netflix.titus.master.mesos.kubeapiserver.LegacyKubeModule.MESOS_KUBE_ADAPTER; - -public class MesosModule extends AbstractModule { - - public static final String MESOS_INTEGRATION = "mesosIntegration"; - - @Override - protected void configure() { - bind(MesosSchedulerDriverFactory.class).to(StdSchedulerDriverFactory.class); - bind(VirtualMachineMasterServiceActivator.class).asEagerSingleton(); - - bind(VirtualMachineMasterService.class).annotatedWith(Names.named(MESOS_INTEGRATION)).to(VirtualMachineMasterServiceMesosImpl.class); - - install(new LegacyKubeModule()); - } - - @Provides - @Singleton - public MesosConfiguration getMesosConfiguration(ConfigProxyFactory factory) { - return factory.newProxy(MesosConfiguration.class); - } - - @Provides - @Singleton - public LocalScheduler getLocalScheduler(TitusRuntime titusRuntime) { - return new DefaultLocalScheduler(Duration.ofMillis(100), Schedulers.elastic(), titusRuntime.getClock(), titusRuntime.getRegistry()); - } - - @Provides - @Singleton - public VirtualMachineMasterService getVirtualMachineMasterService(Injector injector, MesosConfiguration configuration) { - String annotationName = configuration.isKubeApiServerIntegrationEnabled() ? MESOS_KUBE_ADAPTER : MESOS_INTEGRATION; - return injector.getInstance(Key.get(VirtualMachineMasterService.class, Names.named(annotationName))); - } -} diff --git a/titus-server-master/src/main/java/com/netflix/titus/master/mesos/MesosSchedulerCallbackHandler.java b/titus-server-master/src/main/java/com/netflix/titus/master/mesos/MesosSchedulerCallbackHandler.java deleted file mode 100644 index ea96dee549..0000000000 --- a/titus-server-master/src/main/java/com/netflix/titus/master/mesos/MesosSchedulerCallbackHandler.java +++ /dev/null @@ -1,545 +0,0 @@ -/* - * Copyright 2018 Netflix, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.netflix.titus.master.mesos; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Optional; -import java.util.Set; -import java.util.concurrent.ScheduledFuture; -import java.util.concurrent.ScheduledThreadPoolExecutor; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.atomic.AtomicLong; -import java.util.function.Function; -import java.util.regex.Matcher; -import java.util.regex.Pattern; -import java.util.stream.Collectors; - -import com.google.common.cache.Cache; -import com.google.common.cache.CacheBuilder; -import com.netflix.fenzo.VirtualMachineLease; -import com.netflix.fenzo.functions.Action1; -import com.netflix.fenzo.plugins.VMLeaseObject; -import com.netflix.spectator.api.Counter; -import com.netflix.spectator.api.Registry; -import com.netflix.titus.api.jobmanager.TaskAttributes; -import com.netflix.titus.api.jobmanager.model.job.Task; -import com.netflix.titus.api.jobmanager.service.V3JobOperations; -import com.netflix.titus.common.framework.fit.FitInjection; -import com.netflix.titus.common.runtime.TitusRuntime; -import com.netflix.titus.common.util.CollectionsExt; -import com.netflix.titus.common.util.RegExpExt; -import com.netflix.titus.common.util.StringExt; -import com.netflix.titus.common.util.SystemExt; -import com.netflix.titus.master.MetricConstants; -import com.netflix.titus.master.config.MasterConfiguration; -import com.netflix.titus.master.jobmanager.service.JobManagerUtil; -import org.apache.mesos.Protos; -import org.apache.mesos.Protos.ExecutorID; -import org.apache.mesos.Protos.FrameworkID; -import org.apache.mesos.Protos.MasterInfo; -import org.apache.mesos.Protos.Offer; -import org.apache.mesos.Protos.OfferID; -import org.apache.mesos.Protos.SlaveID; -import org.apache.mesos.Protos.TaskState; -import org.apache.mesos.Protos.TaskStatus; -import org.apache.mesos.Scheduler; -import org.apache.mesos.SchedulerDriver; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import rx.Observable; -import rx.Observer; -import rx.Subscription; -import rx.schedulers.Schedulers; - -import static com.netflix.titus.master.mesos.MesosTracer.logMesosCallbackDebug; -import static com.netflix.titus.master.mesos.MesosTracer.logMesosCallbackError; -import static com.netflix.titus.master.mesos.MesosTracer.logMesosCallbackInfo; -import static com.netflix.titus.master.mesos.MesosTracer.logMesosCallbackWarn; -import static com.netflix.titus.master.mesos.MesosTracer.traceMesosRequest; - -public class MesosSchedulerCallbackHandler implements Scheduler { - - private static final Set ACTIVE_MESOS_TASK_STATES = CollectionsExt.asSet( - TaskState.TASK_STAGING, - TaskState.TASK_STARTING, - TaskState.TASK_RUNNING - ); - - private Observer vmLeaseRescindedObserver; - private Observer vmTaskStatusObserver; - private static final Logger logger = LoggerFactory.getLogger(MesosSchedulerCallbackHandler.class); - private final V3JobOperations v3JobOperations; - private volatile ScheduledFuture reconcilerFuture = null; - private final MasterConfiguration config; - private final MesosConfiguration mesosConfiguration; - private final Registry registry; - private final Optional taskStatusUpdateFitInjection; - private final MesosStateTracker mesosStateTracker; - - private AtomicLong lastOfferReceivedAt = new AtomicLong(System.currentTimeMillis()); - private AtomicLong lastValidOfferReceivedAt = new AtomicLong(System.currentTimeMillis()); - private final AtomicLong lastOfferReceivedMillis; - private final AtomicLong lastValidOfferReceiveMillis; - private final Counter numMesosRegistered; - private final Counter numMesosDisconnects; - private final Counter numOfferRescinded; - private final Counter numReconcileTasks; - private final Counter numInvalidOffers; - private final Counter numOfferTooSmall; - private long reconciliationTrial = 0; - private final com.netflix.fenzo.functions.Action1> leaseHandler; - - private final Function invalidRequestMessageMatcherFactory; - private final Function crashedMessageMatcherFactory; - private final Function transientSystemErrorMessageMatcherFactory; - private final Function localSystemErrorMessageMatcherFactory; - private final Function unknownSystemErrorMessageMatcherFactory; - - private final Subscription subscription; - private ScheduledThreadPoolExecutor executor; - private boolean connected; - - /** - * Due to race condition in the initialization process, we may miss some state updates. For missed final updates - * the reconciliation process fails, and results in tasks in 'CRASHED' state. By caching last state update - * we can detect such scenarios, and return the last known final state, instead of 'TASK_LOST'. - */ - private final Cache lastStatusUpdate = CacheBuilder.newBuilder() - .expireAfterWrite(10, TimeUnit.MINUTES) - .build(); - - public MesosSchedulerCallbackHandler( - Action1> leaseHandler, - Observer vmLeaseRescindedObserver, - Observer vmTaskStatusObserver, - V3JobOperations v3JobOperations, - Optional taskStatusUpdateFitInjection, - MasterConfiguration config, - MesosConfiguration mesosConfiguration, - TitusRuntime titusRuntime) { - this.leaseHandler = leaseHandler; - this.vmLeaseRescindedObserver = vmLeaseRescindedObserver; - this.vmTaskStatusObserver = vmTaskStatusObserver; - this.v3JobOperations = v3JobOperations; - this.taskStatusUpdateFitInjection = taskStatusUpdateFitInjection; - this.config = config; - this.mesosConfiguration = mesosConfiguration; - this.registry = titusRuntime.getRegistry(); - this.mesosStateTracker = new MesosStateTracker(config, titusRuntime, Schedulers.computation()); - - numMesosRegistered = registry.counter(MetricConstants.METRIC_MESOS + "numMesosRegistered"); - numMesosDisconnects = registry.counter(MetricConstants.METRIC_MESOS + "numMesosDisconnects"); - numOfferRescinded = registry.counter(MetricConstants.METRIC_MESOS + "numOfferRescinded"); - numReconcileTasks = registry.counter(MetricConstants.METRIC_MESOS + "numReconcileTasks"); - lastOfferReceivedMillis = registry.gauge(MetricConstants.METRIC_MESOS + "lastOfferReceivedMillis", new AtomicLong()); - lastValidOfferReceiveMillis = registry.gauge(MetricConstants.METRIC_MESOS + "lastValidOfferReceiveMillis", new AtomicLong()); - numInvalidOffers = registry.counter(MetricConstants.METRIC_MESOS + "numInvalidOffers"); - numOfferTooSmall = registry.counter(MetricConstants.METRIC_MESOS + "numOfferTooSmall"); - - this.invalidRequestMessageMatcherFactory = RegExpExt.dynamicMatcher(mesosConfiguration::getInvalidRequestMessagePattern, "invalidRequestMessagePattern", Pattern.DOTALL, logger); - this.crashedMessageMatcherFactory = RegExpExt.dynamicMatcher(mesosConfiguration::getCrashedMessagePattern, "crashedMessagePattern", Pattern.DOTALL, logger); - this.transientSystemErrorMessageMatcherFactory = RegExpExt.dynamicMatcher(mesosConfiguration::getTransientSystemErrorMessagePattern, "transientSystemErrorMessagePattern", Pattern.DOTALL, logger); - this.localSystemErrorMessageMatcherFactory = RegExpExt.dynamicMatcher(mesosConfiguration::getLocalSystemErrorMessagePattern, "localSystemErrorMessagePattern", Pattern.DOTALL, logger); - this.unknownSystemErrorMessageMatcherFactory = RegExpExt.dynamicMatcher(mesosConfiguration::getUnknownSystemErrorMessagePattern, "unknownSystemErrorMessagePattern", Pattern.DOTALL, logger); - - this.subscription = Observable - .interval(10, 10, TimeUnit.SECONDS) - .doOnNext(tick -> { - lastOfferReceivedMillis.set(System.currentTimeMillis() - lastOfferReceivedAt.get()); - lastValidOfferReceiveMillis.set(System.currentTimeMillis() - lastValidOfferReceivedAt.get()); - }) - .subscribe(); - } - - public void shutdown() { - mesosStateTracker.shutdown(); - try { - if (executor != null) { - executor.shutdown(); - } - subscription.unsubscribe(); - } finally { - connected = false; - } - } - - // simple offer resource validator - private boolean validateOfferResources(Offer offer) { - for (Protos.Resource resource : offer.getResourcesList()) { - if ("cpus".equals(resource.getName())) { - final double cpus = resource.getScalar().getValue(); - if (cpus < 0.1) { - logMesosCallbackInfo("Declining offer: %s due to too few CPUs in offer from %s: %s", offer.getId().getValue(), offer.getHostname(), cpus); - return false; - } - } else if ("mem".equals(resource.getName())) { - double memoryMB = resource.getScalar().getValue(); - if (memoryMB < 1) { - logMesosCallbackInfo("Declining offer: %s due to too few memory in offer from %s: %s", offer.getId().getValue(), offer.getHostname(), memoryMB); - return false; - } - } - } - return true; - } - - @Override - public void resourceOffers(SchedulerDriver driver, List offers) { - lastOfferReceivedAt.set(System.currentTimeMillis()); - final List leaseObjects = offers.stream() - .filter(offer -> { - if (!validateOfferResources(offer)) { - traceMesosRequest( - "Declining new offer: " + offer.getId(), - () -> driver.declineOffer(offer.getId(), (Protos.Filters.getDefaultInstance().toBuilder()).setRefuseSeconds(60).build()) - ); - numOfferTooSmall.increment(); - return false; - } - logMesosCallbackInfo("Adding offer: " + offer.getId().getValue() + " from host: " + offer.getHostname()); - return true; - }) - .map(VMLeaseObject::new) - .collect(Collectors.toList()); - if (!leaseObjects.isEmpty()) { - lastValidOfferReceivedAt.set(System.currentTimeMillis()); - if (offers.size() > leaseObjects.size()) { - numInvalidOffers.increment(offers.size() - leaseObjects.size()); - } - } - leaseHandler.call(leaseObjects); - } - - @Override - public void disconnected(SchedulerDriver driver) { - logMesosCallbackError("Mesos driver disconnected: %s", driver); - numMesosDisconnects.increment(); - connected = false; - } - - @Override - public void error(SchedulerDriver driver, String msg) { - logMesosCallbackError("Error from Mesos: %s", msg); - } - - @Override - public void executorLost(SchedulerDriver driver, ExecutorID executorId, SlaveID slaveId, int status) { - logMesosCallbackError("Lost executor %s on slave %s with status=%s", executorId.getValue(), slaveId.getValue(), status); - } - - @Override - public void frameworkMessage(SchedulerDriver driver, ExecutorID executorId, SlaveID slaveId, byte[] data) { - logMesosCallbackError("Unexpected framework message: executorId=%s slaveID=%s, message=%s", executorId.getValue(), slaveId.getValue(), data); - } - - @Override - public void offerRescinded(SchedulerDriver driver, OfferID offerId) { - String leaseId = offerId.getValue(); - logMesosCallbackInfo("Rescinded offer: %s", leaseId); - vmLeaseRescindedObserver.onNext(LeaseRescindedEvent.leaseIdEvent(leaseId)); - numOfferRescinded.increment(); - } - - @Override - public void registered(SchedulerDriver driver, FrameworkID frameworkID, MasterInfo masterInfo) { - logMesosCallbackInfo("Mesos registered: %s, ID=%s, masterInfo=%s", driver, frameworkID.getValue(), masterInfo.getId()); - initializeNewDriver(driver); - numMesosRegistered.increment(); - connected = true; - } - - @Override - public void reregistered(SchedulerDriver driver, MasterInfo masterInfo) { - logMesosCallbackWarn("Mesos re-registered: %s, masterInfo=%s", driver, masterInfo.getId()); - initializeNewDriver(driver); - numMesosRegistered.increment(); - connected = true; - } - - boolean isConnected() { - return connected; - } - - private synchronized void initializeNewDriver(final SchedulerDriver driver) { - vmLeaseRescindedObserver.onNext(LeaseRescindedEvent.allEvent()); - if (reconcilerFuture != null) { - reconcilerFuture.cancel(true); - } - this.executor = new ScheduledThreadPoolExecutor(1); - reconcilerFuture = executor.scheduleWithFixedDelay(() -> reconcileTasks(driver), 30, config.getMesosTaskReconciliationIntervalSecs(), TimeUnit.SECONDS); - } - - public void reconcileTasks(final SchedulerDriver driver) { - if (!mesosConfiguration.isReconcilerEnabled()) { - logger.info("Task reconciliation is turned-off"); - return; - } - try { - if (reconciliationTrial++ % 2 == 0) { - reconcileTasksKnownToUs(driver); - } else { - reconcileAllMesosTasks(driver); - } - } catch (Exception e) { - // we don't want to throw errors lest periodically scheduled reconciliation be cancelled - logger.error("Unexpected error (continuing): {}", e.getMessage(), e); - } - } - - private void reconcileTasksKnownToUs(SchedulerDriver driver) { - final List tasksToInitialize = new ArrayList<>(); - - for (Task task : v3JobOperations.getTasks()) { - com.netflix.titus.api.jobmanager.model.job.TaskState taskState = task.getStatus().getState(); - TaskState mesosState; - switch (taskState) { - case Started: - mesosState = TaskState.TASK_RUNNING; - break; - case KillInitiated: - mesosState = TaskState.TASK_KILLING; - break; - default: - mesosState = null; - } - if (mesosState != null) { - String taskHost = task.getTaskContext().get(TaskAttributes.TASK_ATTRIBUTES_AGENT_HOST); - if (taskHost != null) { - tasksToInitialize.add(TaskStatus.newBuilder() - .setTaskId(Protos.TaskID.newBuilder().setValue(task.getId()).build()) - .setState(mesosState) - .setSlaveId(SlaveID.newBuilder().setValue(taskHost).build()) - .build() - ); - } - } - } - if (!tasksToInitialize.isEmpty()) { - Protos.Status status = traceMesosRequest( - "Reconciling active tasks: count=" + tasksToInitialize.size(), - () -> driver.reconcileTasks(tasksToInitialize) - ); - numReconcileTasks.increment(); - logger.info("Sent request to reconcile {} tasks, status={}", tasksToInitialize.size(), status); - logger.info("Last offer received {} secs ago", (System.currentTimeMillis() - lastOfferReceivedAt.get()) / 1000); - logger.info("Last valid offer received {} secs ago", (System.currentTimeMillis() - lastValidOfferReceivedAt.get()) / 1000); - switch (status) { - case DRIVER_ABORTED: - case DRIVER_STOPPED: - logger.error("Unexpected to see Mesos driver status of {} from reconcile request. Committing suicide!", status); - SystemExt.forcedProcessExit(2); - } - } - } - - private void reconcileAllMesosTasks(SchedulerDriver driver) { - Protos.Status status = traceMesosRequest( - "Reconciling all active tasks", - () -> driver.reconcileTasks(Collections.emptyList()) - ); - numReconcileTasks.increment(); - logger.info("Sent request to reconcile all tasks known to Mesos"); - logger.info("Last offer received {} secs ago", (System.currentTimeMillis() - lastOfferReceivedAt.get()) / 1000); - logger.info("Last valid offer received {} secs ago", (System.currentTimeMillis() - lastValidOfferReceivedAt.get()) / 1000); - switch (status) { - case DRIVER_ABORTED: - case DRIVER_STOPPED: - logger.error("Unexpected to see Mesos driver status of {} from reconcile request (all tasks). Committing suicide!", status); - SystemExt.forcedProcessExit(2); - } - } - - @Override - public void slaveLost(SchedulerDriver arg0, SlaveID slaveId) { - logMesosCallbackWarn("Lost slave: %s", slaveId.getValue()); - } - - @Override - public void statusUpdate(final SchedulerDriver arg0, TaskStatus taskStatus) { - try { - String taskId = taskStatus.getTaskId().getValue(); - TaskState taskState = taskStatus.getState(); - - TaskStatus effectiveTaskStatus = taskStatusUpdateFitInjection.map(i -> i.afterImmediate("update", taskStatus)).orElse(taskStatus); - - if (isReconcilerUpdateForUnknownTask(effectiveTaskStatus)) { - if (taskStatus.getState() == TaskState.TASK_LOST) { - logger.info("Ignoring reconciler TASK_LOST status update for task: {}", taskId); - return; - } - mesosStateTracker.unknownTaskStatusUpdate(taskStatus); - if (!mesosConfiguration.isAllowReconcilerUpdatesForUnknownTasks()) { - logger.info("Ignoring reconciler triggered task status update: {}", taskId); - return; - } - } else { - mesosStateTracker.knownTaskStatusUpdate(taskStatus); - } - - logMesosCallbackInfo("Task status update: taskId=%s, taskState=%s, message=%s", taskId, taskState, effectiveTaskStatus.getMessage()); - - v3StatusUpdate(effectiveTaskStatus); - } catch (Exception e) { - logger.error("Unexpected error when handling the status update: {}", taskStatus, e); - throw e; - } - } - - private boolean isReconcilerUpdateForUnknownTask(TaskStatus taskStatus) { - if (taskStatus.getReason() != TaskStatus.Reason.REASON_RECONCILIATION) { - return false; - } - - String taskId = taskStatus.getTaskId().getValue(); - return !isKnown(taskId); - } - - private boolean isKnown(String taskId) { - return v3JobOperations.findTaskById(taskId).isPresent(); - } - - private void v3StatusUpdate(TaskStatus taskStatus) { - String taskId = taskStatus.getTaskId().getValue(); - TaskState taskState = taskStatus.getState(); - - TaskState previous = lastStatusUpdate.getIfPresent(taskId); - TaskState effectiveState = getEffectiveState(taskId, taskState, previous); - - com.netflix.titus.api.jobmanager.model.job.TaskState v3TaskState; - String reasonCode; - - /* - * Some of Mesos states could be mapped here directly to Titus system errors. We do not do that, and instead - * we depend on the error message pattern matching to isolate system-level errors. Tasks failed due to system errors - * are always retried, and so we want to have a full control over error conditions when we do that. - */ - switch (effectiveState) { - case TASK_STAGING: - v3TaskState = com.netflix.titus.api.jobmanager.model.job.TaskState.Launched; - reasonCode = com.netflix.titus.api.jobmanager.model.job.TaskStatus.REASON_NORMAL; - break; - case TASK_STARTING: - v3TaskState = com.netflix.titus.api.jobmanager.model.job.TaskState.StartInitiated; - reasonCode = com.netflix.titus.api.jobmanager.model.job.TaskStatus.REASON_NORMAL; - break; - case TASK_RUNNING: - v3TaskState = com.netflix.titus.api.jobmanager.model.job.TaskState.Started; - reasonCode = com.netflix.titus.api.jobmanager.model.job.TaskStatus.REASON_NORMAL; - break; - case TASK_ERROR: // TERMINAL: The task description contains an error. - v3TaskState = com.netflix.titus.api.jobmanager.model.job.TaskState.Finished; - reasonCode = com.netflix.titus.api.jobmanager.model.job.TaskStatus.REASON_INVALID_REQUEST; - break; - case TASK_FAILED: // TERMINAL: The task failed to finish successfully. - v3TaskState = com.netflix.titus.api.jobmanager.model.job.TaskState.Finished; - reasonCode = com.netflix.titus.api.jobmanager.model.job.TaskStatus.REASON_FAILED; - break; - case TASK_LOST: // The task failed but can be rescheduled. - v3TaskState = com.netflix.titus.api.jobmanager.model.job.TaskState.Finished; - reasonCode = com.netflix.titus.api.jobmanager.model.job.TaskStatus.REASON_TASK_LOST; - break; - case TASK_UNKNOWN: // The master has no knowledge of the task. - v3TaskState = com.netflix.titus.api.jobmanager.model.job.TaskState.Finished; - reasonCode = com.netflix.titus.api.jobmanager.model.job.TaskStatus.REASON_TASK_LOST; - break; - case TASK_KILLED: // TERMINAL: The task was killed by the executor. - v3TaskState = com.netflix.titus.api.jobmanager.model.job.TaskState.Finished; - reasonCode = com.netflix.titus.api.jobmanager.model.job.TaskStatus.REASON_TASK_KILLED; - break; - case TASK_KILLING: - // Ignore today. In the future we can split Titus KillInitiated state into two steps: KillRequested and Killing. - return; - case TASK_FINISHED: // The task finished successfully on its own without external interference. - v3TaskState = com.netflix.titus.api.jobmanager.model.job.TaskState.Finished; - reasonCode = com.netflix.titus.api.jobmanager.model.job.TaskStatus.REASON_NORMAL; - break; - case TASK_DROPPED: // The task failed to launch because of a transient error. - v3TaskState = com.netflix.titus.api.jobmanager.model.job.TaskState.Finished; - reasonCode = com.netflix.titus.api.jobmanager.model.job.TaskStatus.REASON_FAILED; - break; - case TASK_UNREACHABLE: // The task was running on an agent that has lost contact with the master - // Ignore. We will handle this state once we add 'Disconnected' state support in Titus. - return; - case TASK_GONE: // The task is no longer running. This can occur if the agent has been terminated along with all of its tasks - v3TaskState = com.netflix.titus.api.jobmanager.model.job.TaskState.Finished; - reasonCode = com.netflix.titus.api.jobmanager.model.job.TaskStatus.REASON_TASK_LOST; - break; - case TASK_GONE_BY_OPERATOR: // The task was running on an agent that the master cannot contact; the operator has asserted that the agent has been shutdown - v3TaskState = com.netflix.titus.api.jobmanager.model.job.TaskState.Finished; - reasonCode = com.netflix.titus.api.jobmanager.model.job.TaskStatus.REASON_TASK_LOST; - break; - default: - logger.warn("Unexpected Mesos task state {}", effectiveState); - return; - } - - if (v3TaskState == com.netflix.titus.api.jobmanager.model.job.TaskState.Finished && !StringExt.isEmpty(taskStatus.getMessage())) { - String message = taskStatus.getMessage(); - if (invalidRequestMessageMatcherFactory.apply(message).matches()) { - reasonCode = com.netflix.titus.api.jobmanager.model.job.TaskStatus.REASON_INVALID_REQUEST; - } else if (crashedMessageMatcherFactory.apply(message).matches()) { - reasonCode = com.netflix.titus.api.jobmanager.model.job.TaskStatus.REASON_CRASHED; - } else if (transientSystemErrorMessageMatcherFactory.apply(message).matches()) { - reasonCode = com.netflix.titus.api.jobmanager.model.job.TaskStatus.REASON_TRANSIENT_SYSTEM_ERROR; - } else if (localSystemErrorMessageMatcherFactory.apply(message).matches()) { - reasonCode = com.netflix.titus.api.jobmanager.model.job.TaskStatus.REASON_LOCAL_SYSTEM_ERROR; - } else if (unknownSystemErrorMessageMatcherFactory.apply(message).matches()) { - reasonCode = com.netflix.titus.api.jobmanager.model.job.TaskStatus.REASON_UNKNOWN_SYSTEM_ERROR; - } - } - - Optional details; - if (taskStatus.getData() != null) { - String data = new String(taskStatus.getData().toByteArray()); - logMesosCallbackDebug("Mesos status object data: %s", data); - details = JobManagerUtil.parseDetails(data); - } else { - details = Optional.empty(); - } - - V3ContainerEvent event = new V3ContainerEvent( - taskId, - v3TaskState, - reasonCode, - taskStatus.getMessage(), - System.currentTimeMillis(), - details - ); - - logger.debug("Publishing task status: {}", event); - vmTaskStatusObserver.onNext(event); - } - - private TaskState getEffectiveState(String taskId, TaskState taskState, TaskState previous) { - TaskState effectiveState; - if (previous != null && isTerminal(previous) && taskState == TaskState.TASK_LOST) { - effectiveState = previous; - // Replace task status only once (as we cannot remove item from cache, we overwrite the value) - lastStatusUpdate.put(taskId, taskState); - } else { - effectiveState = taskState; - lastStatusUpdate.put(taskId, taskState); - } - return effectiveState; - } - - private boolean isTerminal(TaskState taskState) { - return !ACTIVE_MESOS_TASK_STATES.contains(taskState); - } -} diff --git a/titus-server-master/src/main/java/com/netflix/titus/master/mesos/MesosSchedulerDriverFactory.java b/titus-server-master/src/main/java/com/netflix/titus/master/mesos/MesosSchedulerDriverFactory.java deleted file mode 100644 index 2c3cbca94c..0000000000 --- a/titus-server-master/src/main/java/com/netflix/titus/master/mesos/MesosSchedulerDriverFactory.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright 2018 Netflix, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.netflix.titus.master.mesos; - -import org.apache.mesos.Protos; -import org.apache.mesos.Scheduler; -import org.apache.mesos.SchedulerDriver; - -/** - * Factory class for building Mesos drivers. - */ -public interface MesosSchedulerDriverFactory { - - SchedulerDriver createDriver(Protos.FrameworkInfo framework, String mesosMaster, Scheduler scheduler); -} diff --git a/titus-server-master/src/main/java/com/netflix/titus/master/mesos/MesosStateTracker.java b/titus-server-master/src/main/java/com/netflix/titus/master/mesos/MesosStateTracker.java deleted file mode 100644 index 4298eea986..0000000000 --- a/titus-server-master/src/main/java/com/netflix/titus/master/mesos/MesosStateTracker.java +++ /dev/null @@ -1,185 +0,0 @@ -/* - * Copyright 2018 Netflix, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.netflix.titus.master.mesos; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.concurrent.TimeUnit; - -import com.google.common.cache.Cache; -import com.google.common.cache.CacheBuilder; -import com.netflix.spectator.api.Registry; -import com.netflix.spectator.api.patterns.PolledMeter; -import com.netflix.titus.common.runtime.SystemLogEvent; -import com.netflix.titus.common.runtime.TitusRuntime; -import com.netflix.titus.common.util.rx.ObservableExt; -import com.netflix.titus.master.MetricConstants; -import com.netflix.titus.master.config.MasterConfiguration; -import org.apache.mesos.Protos; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import rx.Completable; -import rx.Scheduler; -import rx.Subscription; - -/** - * Tracks all running containers, by observing task status update requests. We depend here on the - * reconciliation task periodically requesting full Mesos state. To avoid stale data in local cache, - * known tasks are kept for two reconciler cycles (as we expect to refresh their state at each cycle), and - * the unknown tasks are kept for four cycles, as every other cycle only requests status of the all known tasks. - */ -class MesosStateTracker { - - private static final Logger logger = LoggerFactory.getLogger(MesosStateTracker.class); - - private static final String TASKS_METRIC_ID = MetricConstants.METRIC_MESOS + "tasks"; - - /** - * Amount of time that must be passed for a task in the unknown state, to be reported as stable. - */ - private static final long INTERVAL_THRESHOLD_MS = 10 * 60_000; - - private static final long REPORTING_INTERVAL_MS = 60_000; - - private final Cache knownTasks; - private final Cache unknownTasks; - private final TitusRuntime titusRuntime; - - private final Subscription reporterSubscription; - - MesosStateTracker(MasterConfiguration configuration, TitusRuntime titusRuntime, Scheduler scheduler) { - - this.knownTasks = CacheBuilder.newBuilder() - .expireAfterWrite(configuration.getMesosTaskReconciliationIntervalSecs() * 2, TimeUnit.SECONDS) - .build(); - this.unknownTasks = CacheBuilder.newBuilder() - .expireAfterWrite(configuration.getMesosTaskReconciliationIntervalSecs() * 4, TimeUnit.SECONDS) - .build(); - this.titusRuntime = titusRuntime; - - Registry registry = titusRuntime.getRegistry(); - PolledMeter.using(registry).withId(registry.createId(TASKS_METRIC_ID, "known", "true")).monitorValue(this, self -> self.knownTasks.size()); - PolledMeter.using(registry).withId(registry.createId(TASKS_METRIC_ID, "known", "false", "onlyStable", "false")).monitorValue(this, self -> self.unknownTasks.size()); - PolledMeter.using(registry).withId(registry.createId(TASKS_METRIC_ID, "known", "false", "onlyStable", "true")).monitorValue(this, self -> countStableUnknown()); - - this.reporterSubscription = ObservableExt.schedule( - "titus.mesos.stateTracker", - registry, - "mesosStateTrackerReporter", - Completable.fromAction(this::doReport), - REPORTING_INTERVAL_MS, - REPORTING_INTERVAL_MS, - TimeUnit.MILLISECONDS, - scheduler - ).subscribe(); - } - - void shutdown() { - ObservableExt.safeUnsubscribe(reporterSubscription); - } - - void knownTaskStatusUpdate(Protos.TaskStatus taskStatus) { - String taskId = taskStatus.getTaskId().getValue(); - knownTasks.put(taskId, taskStatus); - unknownTasks.invalidate(taskId); - - } - - void unknownTaskStatusUpdate(Protos.TaskStatus taskStatus) { - String taskId = taskStatus.getTaskId().getValue(); - knownTasks.invalidate(taskId); - LostTask previous = unknownTasks.getIfPresent(taskId); - if (previous == null) { - unknownTasks.put(taskId, new LostTask(taskId, taskStatus, titusRuntime.getClock().wallTime(), false)); - } else { - unknownTasks.put(taskId, previous.updateState(taskStatus)); - } - } - - private int countStableUnknown() { - List allUnknown = new ArrayList<>(unknownTasks.asMap().values()); - long now = System.currentTimeMillis(); - int count = 0; - for (LostTask lostTask : allUnknown) { - if (lostTask.isStable(now)) { - count++; - } - } - return count; - } - - private void doReport() { - try { - List allUnknown = new ArrayList<>(unknownTasks.asMap().values()); - long now = titusRuntime.getClock().wallTime(); - for (LostTask lostTask : allUnknown) { - if (lostTask.isStable(now) && !lostTask.isReported()) { - titusRuntime.getSystemLogService().submit(lostTask.toEvent()); - unknownTasks.put(lostTask.getTaskId(), lostTask.markAsReportedInSysLog()); - } - } - } catch (Exception e) { - logger.warn("Unexpected error in the reporting loop", e); - } - } - - private class LostTask { - - private final String taskId; - private final Protos.TaskStatus taskStatus; - private final long timestamp; - private final boolean reported; - - private LostTask(String taskId, Protos.TaskStatus taskStatus, long timestamp, boolean reported) { - this.taskId = taskId; - this.taskStatus = taskStatus; - this.timestamp = timestamp; - this.reported = reported; - } - - public String getTaskId() { - return taskId; - } - - private boolean isReported() { - return reported; - } - - private LostTask updateState(Protos.TaskStatus taskStatus) { - return new LostTask(taskId, taskStatus, timestamp, reported); - } - - private LostTask markAsReportedInSysLog() { - return new LostTask(taskId, taskStatus, timestamp, true); - } - - private boolean isStable(long now) { - return timestamp + INTERVAL_THRESHOLD_MS < now; - } - - private SystemLogEvent toEvent() { - return SystemLogEvent.newBuilder() - .withComponent("mesos") - .withCategory(SystemLogEvent.Category.Permanent) - .withPriority(SystemLogEvent.Priority.Info) - .withMessage("Found orphaned task in Mesos: taskId=" + taskId) - .withContext(Collections.singletonMap("taskState", "" + taskStatus.getState())) - .build(); - } - } -} diff --git a/titus-server-master/src/main/java/com/netflix/titus/master/mesos/MesosTracer.java b/titus-server-master/src/main/java/com/netflix/titus/master/mesos/MesosTracer.java deleted file mode 100644 index 8f1615189d..0000000000 --- a/titus-server-master/src/main/java/com/netflix/titus/master/mesos/MesosTracer.java +++ /dev/null @@ -1,146 +0,0 @@ -/* - * Copyright 2018 Netflix, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.netflix.titus.master.mesos; - -import java.util.List; -import java.util.concurrent.TimeUnit; -import java.util.stream.Collectors; - -import com.google.common.base.Stopwatch; -import com.google.common.base.Supplier; -import com.google.protobuf.TextFormat; -import com.netflix.fenzo.VirtualMachineLease; -import io.titanframework.messages.TitanProtos; -import org.apache.mesos.Protos; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -final class MesosTracer { - - private static final Logger logger = LoggerFactory.getLogger("TitusMesosLog"); - - static String toTaskSummary(Protos.TaskInfo taskInfo) { - StringBuilder sb = new StringBuilder(taskInfo.getTaskId().getValue()).append('{'); - - double cpu = 0.0; - double memory = 0.0; - double disk = 0.0; - double network = 0.0; - for (Protos.Resource r : taskInfo.getResourcesList()) { - if (r.getType() == Protos.Value.Type.SCALAR) { - String name = r.getName(); - double value = r.getScalar().getValue(); - if (name.equals("cpus")) { - cpu = value; - } else if (name.equals("mem")) { - memory = value; - } else if (name.equals("disk")) { - disk = value; - } else if (name.equals("network")) { - network = value; - } - } - } - - int gpu; - String containerInfoSummary; - try { - TitanProtos.ContainerInfo containerInfo = TitanProtos.ContainerInfo.parseFrom(taskInfo.getData()); - if (containerInfo.getNetworkConfigInfo() == null) { - containerInfoSummary = "ipNotAssigned"; - } else { - containerInfoSummary = TextFormat.shortDebugString(containerInfo.getNetworkConfigInfo()); - } - gpu = containerInfo.getNumGpus(); - - } catch (Exception e) { - containerInfoSummary = "containerInfo error: " + e.getMessage(); - gpu = 0; - } - - sb.append("cpu=").append(cpu).append(','); - sb.append("gpu=").append(gpu).append(','); - sb.append("memory=").append(memory).append(','); - sb.append("disk=").append(disk).append(','); - sb.append("network=").append(network).append(','); - sb.append("containerInfo=").append(containerInfoSummary).append(','); - - sb.append('}'); - return sb.toString(); - } - - static String toTaskSummary(List taskInfos) { - return taskInfos.stream().map(MesosTracer::toTaskSummary).collect(Collectors.joining(",")); - } - - static String toLeaseIds(List leases) { - return leases.stream() - .map(virtualMachineLease -> virtualMachineLease.hostname() + '/' + virtualMachineLease.getId()) - .collect(Collectors.joining(",")); - } - - static void traceMesosVoidRequest(String message, Runnable runnable) { - traceMesosRequest(message, () -> { - runnable.run(); - return null; - }); - } - - static T traceMesosRequest(String message, Supplier callable) { - Stopwatch stopwatch = Stopwatch.createStarted(); - try { - T result = callable.get(); - logger.debug("[Mesos/Request] OK {} (execution time {}ms)", message, stopwatch.elapsed(TimeUnit.MILLISECONDS)); - return result; - } catch (Exception e) { - logger.error("[Mesos/Request] ERROR {} (execution time {}ms). Failure message: {}", message, stopwatch.elapsed(TimeUnit.MILLISECONDS), e.getMessage()); - throw e; - } - } - - static void logMesosCallbackDebug(String message, Object... args) { - if (args.length == 0) { - logger.debug("[Mesos/Callback] {}", message); - } else { - logger.debug("[Mesos/Callback] {}", String.format(message, args)); - } - } - - static void logMesosCallbackInfo(String message, Object... args) { - if (args.length == 0) { - logger.info("[Mesos/Callback] {}", message); - } else { - logger.info("[Mesos/Callback] {}", String.format(message, args)); - } - } - - static void logMesosCallbackWarn(String message, Object... args) { - if (args.length == 0) { - logger.warn("[Mesos/Callback] {}", message); - } else { - logger.warn("[Mesos/Callback] {}", String.format(message, args)); - } - } - - static void logMesosCallbackError(String message, Object... args) { - if (args.length == 0) { - logger.error("[Mesos/Callback] {}", message); - } else { - logger.error("[Mesos/Callback] {}", String.format(message, args)); - } - } -} diff --git a/titus-server-master/src/main/java/com/netflix/titus/master/mesos/NoOpVirtualMachineMasterService.java b/titus-server-master/src/main/java/com/netflix/titus/master/mesos/NoOpVirtualMachineMasterService.java deleted file mode 100644 index 2a81d82479..0000000000 --- a/titus-server-master/src/main/java/com/netflix/titus/master/mesos/NoOpVirtualMachineMasterService.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright 2021 Netflix, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.netflix.titus.master.mesos; - -import java.util.List; - -import com.netflix.fenzo.VirtualMachineLease; -import com.netflix.fenzo.functions.Action1; -import rx.Observable; - -public class NoOpVirtualMachineMasterService implements VirtualMachineMasterService { - @Override - public void enterActiveMode() { - } - - @Override - public void launchTasks(TaskAssignments taskAssignments) { - } - - @Override - public void rejectLease(VirtualMachineLease lease) { - } - - @Override - public void killTask(String taskId) { - } - - @Override - public void setVMLeaseHandler(Action1> leaseHandler) { - } - - @Override - public void setRescindLeaseHandler(Action1> rescindLeaseHandler) { - } - - @Override - public Observable getLeaseRescindedObservable() { - return Observable.never(); - } - - @Override - public Observable getTaskStatusObservable() { - return Observable.never(); - } -} diff --git a/titus-server-master/src/main/java/com/netflix/titus/master/mesos/StdSchedulerDriverFactory.java b/titus-server-master/src/main/java/com/netflix/titus/master/mesos/StdSchedulerDriverFactory.java deleted file mode 100644 index 7e38ed5ad7..0000000000 --- a/titus-server-master/src/main/java/com/netflix/titus/master/mesos/StdSchedulerDriverFactory.java +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright 2018 Netflix, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.netflix.titus.master.mesos; - -import javax.inject.Singleton; - -import org.apache.mesos.MesosSchedulerDriver; -import org.apache.mesos.Protos; -import org.apache.mesos.Scheduler; -import org.apache.mesos.SchedulerDriver; - -@Singleton -public class StdSchedulerDriverFactory implements MesosSchedulerDriverFactory { - @Override - public SchedulerDriver createDriver(Protos.FrameworkInfo framework, String mesosMaster, Scheduler scheduler) { - return new MesosSchedulerDriver(scheduler, framework, mesosMaster); - } -} diff --git a/titus-server-master/src/main/java/com/netflix/titus/master/mesos/TaskAssignments.java b/titus-server-master/src/main/java/com/netflix/titus/master/mesos/TaskAssignments.java deleted file mode 100644 index 2b61415497..0000000000 --- a/titus-server-master/src/main/java/com/netflix/titus/master/mesos/TaskAssignments.java +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Copyright 2020 Netflix, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.netflix.titus.master.mesos; - -import java.util.Iterator; -import java.util.List; -import java.util.function.BiConsumer; -import java.util.stream.Collectors; -import javax.annotation.Nonnull; - -import com.netflix.fenzo.VirtualMachineLease; -import com.netflix.titus.common.util.tuple.Pair; - -public class TaskAssignments implements Iterable { - - private final List>> assignmentsByMachine; - private final List allTasks; - - public TaskAssignments(List>> assignmentsByMachine) { - this.assignmentsByMachine = assignmentsByMachine; - // the list below may need shuffling to avoid issues with bias on tasks being ordered by machine - this.allTasks = assignmentsByMachine.stream() - .flatMap(pair -> pair.getRight().stream()) - .collect(Collectors.toList()); - } - - public int getCount() { - return allTasks.size(); - } - - public void forEach(BiConsumer> consumer) { - for (Pair> pair : assignmentsByMachine) { - consumer.accept(pair.getLeft(), pair.getRight()); - } - } - - @Override - @Nonnull - public Iterator iterator() { - return allTasks.iterator(); - } - - public static final class Machine { - private final String id; - private final List leases; - - public Machine(String id, List leases) { - this.id = id; - this.leases = leases; - } - - public String getId() { - return id; - } - - public List getLeases() { - return leases; - } - } - -} diff --git a/titus-server-master/src/main/java/com/netflix/titus/master/mesos/TaskInfoRequest.java b/titus-server-master/src/main/java/com/netflix/titus/master/mesos/TaskInfoRequest.java deleted file mode 100644 index a6bcd07340..0000000000 --- a/titus-server-master/src/main/java/com/netflix/titus/master/mesos/TaskInfoRequest.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright 2020 Netflix, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.netflix.titus.master.mesos; - -import java.util.Map; - -import com.netflix.titus.api.jobmanager.model.job.Job; -import com.netflix.titus.api.jobmanager.model.job.Task; -import org.apache.mesos.Protos; - -public class TaskInfoRequest { - - private final Job job; - private final Task task; - private final Protos.TaskInfo taskInfo; - private final Map passthroughAttributes; - - public TaskInfoRequest(Job job, Task task, Protos.TaskInfo taskInfo, Map passthroughAttributes) { - this.job = job; - this.task = task; - this.taskInfo = taskInfo; - this.passthroughAttributes = passthroughAttributes; - } - - public Job getJob() { - return job; - } - - public Task getTask() { - return task; - } - - public Protos.TaskInfo getTaskInfo() { - return taskInfo; - } - - public Map getPassthroughAttributes() { - return passthroughAttributes; - } -} diff --git a/titus-server-master/src/main/java/com/netflix/titus/master/mesos/TaskInfoRequestFactory.java b/titus-server-master/src/main/java/com/netflix/titus/master/mesos/TaskInfoRequestFactory.java deleted file mode 100644 index b46a1c55b9..0000000000 --- a/titus-server-master/src/main/java/com/netflix/titus/master/mesos/TaskInfoRequestFactory.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright 2018 Netflix, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.netflix.titus.master.mesos; - -import java.util.Map; -import java.util.Optional; - -import com.netflix.fenzo.PreferentialNamedConsumableResourceSet; -import com.netflix.titus.api.jobmanager.model.job.Job; -import com.netflix.titus.api.jobmanager.model.job.Task; -import com.netflix.titus.master.model.job.TitusQueuableTask; -import org.apache.mesos.Protos; - -public interface TaskInfoRequestFactory { - TaskInfoRequest newTaskInfo(TitusQueuableTask fenzoTask, - Job job, - Task task, - String hostname, - Map attributesMap, - Protos.SlaveID slaveID, - PreferentialNamedConsumableResourceSet.ConsumeResult consumeResult, - Optional executorUriOverrideOpt, - Map passthroughAttributes); -} diff --git a/titus-server-master/src/main/java/com/netflix/titus/master/mesos/TitusExecutorDetails.java b/titus-server-master/src/main/java/com/netflix/titus/master/mesos/TitusExecutorDetails.java index d8d94da9d5..6275901b1f 100644 --- a/titus-server-master/src/main/java/com/netflix/titus/master/mesos/TitusExecutorDetails.java +++ b/titus-server-master/src/main/java/com/netflix/titus/master/mesos/TitusExecutorDetails.java @@ -25,7 +25,10 @@ /** * Titus executor data model for reporting back resource allocation data. + * + * @deprecated Remove after migrating to V1 pod spec. */ +@Deprecated public class TitusExecutorDetails { private final Map ipAddresses; diff --git a/titus-server-master/src/main/java/com/netflix/titus/master/mesos/V3ContainerEvent.java b/titus-server-master/src/main/java/com/netflix/titus/master/mesos/V3ContainerEvent.java deleted file mode 100644 index dc15d30904..0000000000 --- a/titus-server-master/src/main/java/com/netflix/titus/master/mesos/V3ContainerEvent.java +++ /dev/null @@ -1,104 +0,0 @@ -/* - * Copyright 2018 Netflix, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.netflix.titus.master.mesos; - -import java.util.Objects; -import java.util.Optional; - -import com.netflix.titus.api.jobmanager.model.job.TaskState; - -public class V3ContainerEvent implements ContainerEvent { - - private final String taskId; - private final TaskState taskState; - private final String reasonCode; - private final String reasonMessage; - private final long timestamp; - private final Optional titusExecutorDetails; - - public V3ContainerEvent(String taskId, - TaskState taskState, - String reasonCode, - String reasonMessage, - long timestamp, - Optional titusExecutorDetails) { - this.taskId = taskId; - this.taskState = taskState; - this.reasonCode = reasonCode; - this.reasonMessage = reasonMessage; - this.timestamp = timestamp; - this.titusExecutorDetails = titusExecutorDetails; - } - - public String getTaskId() { - return taskId; - } - - public TaskState getTaskState() { - return taskState; - } - - public String getReasonCode() { - return reasonCode; - } - - public String getReasonMessage() { - return reasonMessage; - } - - public long getTimestamp() { - return timestamp; - } - - public Optional getTitusExecutorDetails() { - return titusExecutorDetails; - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - V3ContainerEvent that = (V3ContainerEvent) o; - return timestamp == that.timestamp && - Objects.equals(taskId, that.taskId) && - taskState == that.taskState && - Objects.equals(reasonCode, that.reasonCode) && - Objects.equals(reasonMessage, that.reasonMessage) && - Objects.equals(titusExecutorDetails, that.titusExecutorDetails); - } - - @Override - public int hashCode() { - return Objects.hash(taskId, taskState, reasonCode, reasonMessage, timestamp, titusExecutorDetails); - } - - @Override - public String toString() { - return "V3ContainerEvent{" + - "taskId='" + taskId + '\'' + - ", taskState=" + taskState + - ", reasonCode='" + reasonCode + '\'' + - ", reasonMessage='" + reasonMessage + '\'' + - ", timestamp=" + timestamp + - ", titusExecutorDetails=" + titusExecutorDetails + - '}'; - } -} diff --git a/titus-server-master/src/main/java/com/netflix/titus/master/mesos/VirtualMachineMasterService.java b/titus-server-master/src/main/java/com/netflix/titus/master/mesos/VirtualMachineMasterService.java deleted file mode 100644 index 5c7489967b..0000000000 --- a/titus-server-master/src/main/java/com/netflix/titus/master/mesos/VirtualMachineMasterService.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright 2019 Netflix, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.netflix.titus.master.mesos; - -import java.util.List; - -import com.netflix.fenzo.VirtualMachineLease; -import com.netflix.fenzo.functions.Action1; -import rx.Observable; - -public interface VirtualMachineMasterService { - - String COMPONENT = "mesos"; - - void enterActiveMode(); - - void launchTasks(TaskAssignments taskAssignments); - - void rejectLease(VirtualMachineLease lease); - - void killTask(String taskId); - - void setVMLeaseHandler(Action1> leaseHandler); - - void setRescindLeaseHandler(Action1> rescindLeaseHandler); - - Observable getLeaseRescindedObservable(); - - Observable getTaskStatusObservable(); -} diff --git a/titus-server-master/src/main/java/com/netflix/titus/master/mesos/VirtualMachineMasterServiceActivator.java b/titus-server-master/src/main/java/com/netflix/titus/master/mesos/VirtualMachineMasterServiceActivator.java deleted file mode 100644 index 9885110130..0000000000 --- a/titus-server-master/src/main/java/com/netflix/titus/master/mesos/VirtualMachineMasterServiceActivator.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright 2018 Netflix, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.netflix.titus.master.mesos; - -import javax.inject.Inject; -import javax.inject.Singleton; - -import com.netflix.titus.common.util.guice.annotation.Activator; - -/** - * Helper class providing an extra indirection step for proper activation order. - */ -@Singleton -public class VirtualMachineMasterServiceActivator { - - private final VirtualMachineMasterService virtualMachineMasterService; - - @Inject - public VirtualMachineMasterServiceActivator(VirtualMachineMasterService virtualMachineMasterService) { - this.virtualMachineMasterService = virtualMachineMasterService; - } - - @Activator - public void enterActiveMode() { - virtualMachineMasterService.enterActiveMode(); - } -} diff --git a/titus-server-master/src/main/java/com/netflix/titus/master/mesos/VirtualMachineMasterServiceMesosImpl.java b/titus-server-master/src/main/java/com/netflix/titus/master/mesos/VirtualMachineMasterServiceMesosImpl.java deleted file mode 100644 index 4a08035f1a..0000000000 --- a/titus-server-master/src/main/java/com/netflix/titus/master/mesos/VirtualMachineMasterServiceMesosImpl.java +++ /dev/null @@ -1,318 +0,0 @@ -/* - * Copyright 2018 Netflix, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.netflix.titus.master.mesos; - -import java.util.LinkedList; -import java.util.List; -import java.util.Optional; -import java.util.concurrent.BlockingQueue; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.concurrent.LinkedBlockingQueue; -import java.util.concurrent.atomic.AtomicBoolean; -import java.util.stream.Collectors; -import javax.annotation.PreDestroy; -import javax.inject.Inject; -import javax.inject.Singleton; - -import com.fasterxml.jackson.databind.DeserializationFeature; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.google.inject.Injector; -import com.netflix.fenzo.VirtualMachineLease; -import com.netflix.fenzo.functions.Action1; -import com.netflix.titus.api.jobmanager.service.V3JobOperations; -import com.netflix.titus.common.framework.fit.FitFramework; -import com.netflix.titus.common.framework.fit.FitInjection; -import com.netflix.titus.common.runtime.TitusRuntime; -import com.netflix.titus.common.util.SystemExt; -import com.netflix.titus.master.config.MasterConfiguration; -import com.netflix.titus.master.scheduler.SchedulerConfiguration; -import org.apache.mesos.Protos; -import org.apache.mesos.Protos.FrameworkInfo; -import org.apache.mesos.Protos.TaskID; -import org.apache.mesos.SchedulerDriver; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import rx.Observable; -import rx.subjects.PublishSubject; -import rx.subjects.Subject; - -import static com.netflix.titus.common.util.LoggingExt.timed; -import static com.netflix.titus.master.mesos.MesosTracer.toLeaseIds; -import static com.netflix.titus.master.mesos.MesosTracer.toTaskSummary; -import static com.netflix.titus.master.mesos.MesosTracer.traceMesosRequest; -import static com.netflix.titus.master.mesos.MesosTracer.traceMesosVoidRequest; - -@Singleton -public class VirtualMachineMasterServiceMesosImpl implements VirtualMachineMasterService { - - private static final Logger logger = LoggerFactory.getLogger(VirtualMachineMasterServiceMesosImpl.class); - - private final MasterConfiguration config; - - private SchedulerDriver mesosDriver; - private MesosSchedulerCallbackHandler mesosCallbackHandler; - private ExecutorService executor; - private final MesosConfiguration mesosConfiguration; - private Subject vmLeaseRescindedObserver; - private Subject vmTaskStatusObserver; - private ObjectMapper mapper = new ObjectMapper(); - private final AtomicBoolean initializationDone = new AtomicBoolean(false); - private double offerSecDelayInterval = 5; - private Action1> leaseHandler = null; - private final MesosSchedulerDriverFactory mesosDriverFactory; - private final Injector injector; - private final TitusRuntime titusRuntime; - private boolean active; - private final BlockingQueue killQueue = new LinkedBlockingQueue<>(); - private final Optional taskStatusUpdateFitInjection; - - @Inject - public VirtualMachineMasterServiceMesosImpl(MasterConfiguration config, - SchedulerConfiguration schedulerConfiguration, - MesosConfiguration mesosConfiguration, - MesosSchedulerDriverFactory mesosDriverFactory, - Injector injector, - TitusRuntime titusRuntime) { - this.config = config; - this.mesosConfiguration = mesosConfiguration; - this.mesosDriverFactory = mesosDriverFactory; - this.injector = injector; - this.titusRuntime = titusRuntime; - this.vmLeaseRescindedObserver = PublishSubject.create(); - this.vmTaskStatusObserver = PublishSubject.create(); - executor = Executors.newSingleThreadExecutor(r -> { - Thread t = new Thread(r, "vm_master_mesos_scheduler_thread"); - t.setDaemon(true); - return t; - }); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - // Set the offer delay to match the scheduling loop interval so that offers are returned at - // the next scheduling interval. - offerSecDelayInterval = schedulerConfiguration.getSchedulerIterationIntervalMs() / (double) 1000; - logger.info("Using offer second delay of {}", offerSecDelayInterval); - - FitFramework fit = titusRuntime.getFitFramework(); - if (fit.isActive()) { - FitInjection fitInjection = fit.newFitInjectionBuilder("taskStatusUpdate") - .withDescription("Mesos callback API") - .build(); - fit.getRootComponent().getChild(COMPONENT).addInjection(fitInjection); - this.taskStatusUpdateFitInjection = Optional.of(fitInjection); - } else { - this.taskStatusUpdateFitInjection = Optional.empty(); - } - } - - /** - * For healthcheck. - */ - Optional isConnectedToMesos() { - if (mesosDriver != null) { - return Optional.of(mesosCallbackHandler.isConnected()); - } - // Not a leader - return Optional.empty(); - } - - @Override - public void launchTasks(TaskAssignments taskAssignments) { - if (!isActivatedAndRunning()) { - logger.error("Not in leader mode, not launching tasks"); - return; - } - taskAssignments.forEach((machine, taskInfoRequests) -> launchTasks(taskInfoRequests, machine)); - } - - // NOTE: all leases are for the same machine - private void launchTasks(List taskInfoRequests, TaskAssignments.Machine machine) { - List leases = machine.getLeases(); - if (taskInfoRequests.isEmpty()) { - for (VirtualMachineLease lease : leases) { - try { - rejectLease(lease); - } catch (RuntimeException e) { - logger.error("Failed rejecting lease for hostname " + lease.hostname(), e); - } - } - logger.info("Rejected offers as no task effectively placed on the agent {}. Offers={}", machine.getId(), leases.size()); - return; - } - - List taskInfos = taskInfoRequests.stream().map(TaskInfoRequest::getTaskInfo).collect(Collectors.toList()); - List offerIds = leases.stream().map(l -> l.getOffer().getId()).collect(Collectors.toList()); - - if (!taskInfoRequests.isEmpty()) { - traceMesosVoidRequest( - "Launching tasks: " + toTaskSummary(taskInfos) + ", with leases: " + toLeaseIds(leases), - () -> mesosDriver.launchTasks(offerIds, taskInfos, (Protos.Filters.getDefaultInstance().toBuilder()).setRefuseSeconds(offerSecDelayInterval).build()) - ); - } else { // reject offers to prevent offer leak, but shouldn't happen - for (VirtualMachineLease l : leases) { - traceMesosVoidRequest( - "Declining offer " + l.getId(), - () -> mesosDriver.declineOffer((l).getOffer().getId()) - ); - } - } - } - - @Override - public void rejectLease(VirtualMachineLease lease) { - if (!isActivatedAndRunning()) { - logger.error("Not in leader mode, not rejecting lease"); - return; - } - if (lease.getOffer() != null) { - traceMesosVoidRequest( - "Declining offer " + lease.getId(), - () -> mesosDriver.declineOffer(lease.getOffer().getId(), (Protos.Filters.getDefaultInstance().toBuilder()).setRefuseSeconds(offerSecDelayInterval).build()) - ); - } else { - logger.warn("Got invalid lease to reject with null offer for host {}", lease.hostname()); - } - } - - @Override - public void killTask(String taskId) { - if (!isActivatedAndRunning()) { - killQueue.offer(taskId); - return; - } - drainKillTaskQueue(); - callMesosToKillTask(taskId); - } - - private void drainKillTaskQueue() { - if (killQueue.peek() != null) { - logger.info("Carrying out pending kill requests"); - List tasksToKill = new LinkedList<>(); - killQueue.drainTo(tasksToKill); - tasksToKill.forEach(this::callMesosToKillTask); - } - } - - private void callMesosToKillTask(String taskId) { - Protos.Status status = traceMesosRequest( - "Calling Mesos to kill task " + taskId, - () -> mesosDriver.killTask(TaskID.newBuilder().setValue(taskId).build()) - ); - switch (status) { - case DRIVER_ABORTED: - case DRIVER_STOPPED: - logger.error("Unexpected to see Mesos driver status of {} from kill task request. Committing suicide!", status); - SystemExt.forcedProcessExit(2); - } - } - - @Override - public void setVMLeaseHandler(Action1> leaseHandler) { - this.leaseHandler = virtualMachineLeases -> { - drainKillTaskQueue(); - leaseHandler.call(virtualMachineLeases); - }; - } - - @Override - public void setRescindLeaseHandler(Action1> rescindLeaseHandler) { - // do nothing - } - - @Override - public Observable getLeaseRescindedObservable() { - return vmLeaseRescindedObserver; - } - - @Override - public Observable getTaskStatusObservable() { - return vmTaskStatusObserver; - } - - /** - * Due to circular dependency with SchedulingService, activate via VirtualMachineMasterServiceActivator - */ - public void enterActiveMode() { - // Due to circular dependency, we need to differ services access until the activation phase. - V3JobOperations v3JobOperations = injector.getInstance(V3JobOperations.class); - - logger.info("Registering Titus Framework with Mesos"); - - if (!initializationDone.compareAndSet(false, true)) { - throw new IllegalStateException("Duplicate start() call"); - } - - mesosCallbackHandler = new MesosSchedulerCallbackHandler(leaseHandler, vmLeaseRescindedObserver, vmTaskStatusObserver, - v3JobOperations, taskStatusUpdateFitInjection, config, mesosConfiguration, titusRuntime); - - FrameworkInfo framework = FrameworkInfo.newBuilder() - .setUser("root") // Fix to root, to enable running master as non-root - .setName(getFrameworkName()) - .setFailoverTimeout(getMesosFailoverTimeoutSecs()) - .setId(Protos.FrameworkID.newBuilder().setValue(getFrameworkName())) - .setCheckpoint(true) - .build(); - - String mesosMaster = "mesos-server"; - - mesosDriver = timed( - "Creating Mesos driver using factory " + mesosDriverFactory.getClass().getSimpleName(), - () -> mesosDriverFactory.createDriver(framework, mesosMaster, mesosCallbackHandler) - ); - - executor.execute(() -> { - try { - mesosDriver.run(); - } catch (Exception e) { - logger.error("Failed to register Titus Framework with Mesos", e); - } - }); - this.active = true; - } - - @PreDestroy - public void shutdown() { - logger.info("Unregistering Titus Framework with Mesos"); - if (mesosDriver != null) { - mesosDriver.stop(true); - mesosDriver = null; - } - if (mesosCallbackHandler != null) { - mesosCallbackHandler.shutdown(); - } - executor.shutdown(); - } - - public String getFrameworkName() { - return config.getMesosFrameworkName(); - } - - protected SchedulerDriver getMesosDriver() { - return mesosDriver; - } - - private double getMesosFailoverTimeoutSecs() { - return config.getMesosFailoverTimeOutSecs(); - } - - /** - * We need this to avoid NPE issues during shutdown, which may trigger System.exit(-3). - * This should be properly resolved by adding de-activation mechanism. - */ - private boolean isActivatedAndRunning() { - return active && mesosDriver != null; - } -} diff --git a/titus-server-master/src/main/java/com/netflix/titus/master/mesos/kubeapiserver/LegacyKubeModule.java b/titus-server-master/src/main/java/com/netflix/titus/master/mesos/kubeapiserver/LegacyKubeModule.java deleted file mode 100644 index 00f4c0cf4f..0000000000 --- a/titus-server-master/src/main/java/com/netflix/titus/master/mesos/kubeapiserver/LegacyKubeModule.java +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright 2020 Netflix, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.netflix.titus.master.mesos.kubeapiserver; - -import com.google.inject.AbstractModule; -import com.google.inject.name.Names; -import com.netflix.titus.master.mesos.NoOpVirtualMachineMasterService; -import com.netflix.titus.master.mesos.VirtualMachineMasterService; - -public class LegacyKubeModule extends AbstractModule { - - public static final String MESOS_KUBE_ADAPTER = "mesosKubeAdapter"; - - @Override - protected void configure() { - bind(VirtualMachineMasterService.class).annotatedWith(Names.named(MESOS_KUBE_ADAPTER)).toInstance(new NoOpVirtualMachineMasterService()); - } -} diff --git a/titus-server-master/src/main/java/com/netflix/titus/master/model/ResourceDimensions.java b/titus-server-master/src/main/java/com/netflix/titus/master/model/ResourceDimensions.java index 625db7197c..365faa6029 100644 --- a/titus-server-master/src/main/java/com/netflix/titus/master/model/ResourceDimensions.java +++ b/titus-server-master/src/main/java/com/netflix/titus/master/model/ResourceDimensions.java @@ -19,8 +19,6 @@ import java.util.Collection; import com.google.common.base.Preconditions; -import com.netflix.fenzo.sla.ResAllocs; -import com.netflix.fenzo.sla.ResAllocsBuilder; import com.netflix.titus.api.model.ResourceDimension; import com.netflix.titus.common.aws.AwsInstanceDescriptor; import com.netflix.titus.common.aws.AwsInstanceType; @@ -239,22 +237,4 @@ public static ResourceDimension fromAwsInstanceType(AwsInstanceType instanceType .withNetworkMbs(descriptor.getNetworkMbs()) .build(); } - - public static ResAllocs toResAllocs(String name, ResourceDimension resourceDimension) { - return new ResAllocsBuilder(name) - .withCores(resourceDimension.getCpu()) - .withMemory(resourceDimension.getMemoryMB()) - .withDisk(resourceDimension.getDiskMB()) - .withNetworkMbps(resourceDimension.getNetworkMbs()) - .build(); - } - - public static ResourceDimension fromResAllocs(ResAllocs resAllocs) { - return ResourceDimension.newBuilder() - .withCpus(resAllocs.getCores()) - .withMemoryMB((long) resAllocs.getMemory()) - .withDiskMB((long) resAllocs.getDisk()) - .withNetworkMbs((long) resAllocs.getNetworkMbps()) - .build(); - } } diff --git a/titus-server-master/src/main/java/com/netflix/titus/master/model/job/TitusQueuableTask.java b/titus-server-master/src/main/java/com/netflix/titus/master/model/job/TitusQueuableTask.java deleted file mode 100644 index 327eb1e35e..0000000000 --- a/titus-server-master/src/main/java/com/netflix/titus/master/model/job/TitusQueuableTask.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright 2018 Netflix, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.netflix.titus.master.model.job; - -import com.netflix.fenzo.queues.QueuableTask; - -/** - * Titus extension of Fenzo's {@link QueuableTask} API. - */ -public interface TitusQueuableTask extends QueuableTask { - - /** - * Titus job instance owning this task. - */ - JOB getJob(); - - /** - * Titus task instance associated with the given Fenzo task. - */ - TASK getTask(); - - /** - * Is opportunistic usage of CPUs enabled for this task? - * - * @return true when opportunistic scheduling of CPUs is enabled for a particular task - */ - boolean isCpuOpportunistic(); - - /** - * The current amount of opportunistic CPUs requested by a task. Note that this may change after a task is notified - * that a scheduling iteration was not able to allocate the requested amount of opportunistic CPUs. - * - * {@link TitusQueuableTask#isCpuOpportunistic()} must be always checked in an scheduling iteration before this - * this value can be used. - * - * @see TitusQueuableTask#opportunisticSchedulingFailed() - */ - int getOpportunisticCpus(); - - /** - * Notify that an iteration loop using opportunistic resources failed. Implementations can use the notification to - * adjust opportunistic resource asks for the next scheduling iteration. - */ - void opportunisticSchedulingFailed(); -} diff --git a/titus-server-master/src/test/java/com/netflix/titus/master/integration/v3/scenario/ScenarioBuilderUtil.java b/titus-server-master/src/test/java/com/netflix/titus/master/integration/v3/scenario/ScenarioBuilderUtil.java index 814fc49e76..22b24d0d70 100644 --- a/titus-server-master/src/test/java/com/netflix/titus/master/integration/v3/scenario/ScenarioBuilderUtil.java +++ b/titus-server-master/src/test/java/com/netflix/titus/master/integration/v3/scenario/ScenarioBuilderUtil.java @@ -16,13 +16,12 @@ package com.netflix.titus.master.integration.v3.scenario; -import com.netflix.titus.grpc.protogen.TaskStatus; -import org.apache.mesos.Protos; import org.junit.Test; import static java.util.Arrays.stream; /** + * */ final class ScenarioBuilderUtil { @@ -41,38 +40,4 @@ static String discoverActiveTest() { .map(StackTraceElement::getMethodName) .orElse("?"); } - - static Protos.TaskState toMesosTaskState(TaskStatus.TaskState taskState) { - switch (taskState) { - case Launched: - return Protos.TaskState.TASK_STAGING; - case StartInitiated: - return Protos.TaskState.TASK_STARTING; - case Started: - return Protos.TaskState.TASK_RUNNING; - case Finished: - return Protos.TaskState.TASK_FINISHED; - } - throw new IllegalArgumentException(taskState + " is not present in Mesos protocol"); - } - - static TaskStatus.TaskState fromMesosTaskState(Protos.TaskState mesosTaskState) { - switch (mesosTaskState) { - case TASK_STAGING: - return TaskStatus.TaskState.Launched; - case TASK_STARTING: - return TaskStatus.TaskState.StartInitiated; - case TASK_RUNNING: - return TaskStatus.TaskState.Started; - case TASK_KILLING: - return TaskStatus.TaskState.KillInitiated; - case TASK_FINISHED: - case TASK_FAILED: - case TASK_ERROR: - case TASK_LOST: - case TASK_KILLED: - return TaskStatus.TaskState.Finished; - } - throw new IllegalArgumentException("Unknown Mesos task state found: " + mesosTaskState); - } } diff --git a/titus-server-master/src/test/java/com/netflix/titus/master/integration/v3/scenario/TaskScenarioBuilder.java b/titus-server-master/src/test/java/com/netflix/titus/master/integration/v3/scenario/TaskScenarioBuilder.java index 75008b96c2..a66471e7de 100644 --- a/titus-server-master/src/test/java/com/netflix/titus/master/integration/v3/scenario/TaskScenarioBuilder.java +++ b/titus-server-master/src/test/java/com/netflix/titus/master/integration/v3/scenario/TaskScenarioBuilder.java @@ -27,8 +27,6 @@ import com.google.common.base.Preconditions; import com.google.common.base.Stopwatch; import com.google.protobuf.Empty; -import com.netflix.fenzo.TaskRequest; -import com.netflix.titus.api.jobmanager.model.job.JobFunctions; import com.netflix.titus.api.jobmanager.model.job.Task; import com.netflix.titus.api.jobmanager.model.job.TaskState; import com.netflix.titus.common.aws.AwsInstanceType; diff --git a/titus-server-master/src/test/java/com/netflix/titus/master/jobmanager/service/KubeNotificationProcessorTest.java b/titus-server-master/src/test/java/com/netflix/titus/master/jobmanager/service/KubeNotificationProcessorTest.java index ed130a8695..dcc4f5a9d8 100644 --- a/titus-server-master/src/test/java/com/netflix/titus/master/jobmanager/service/KubeNotificationProcessorTest.java +++ b/titus-server-master/src/test/java/com/netflix/titus/master/jobmanager/service/KubeNotificationProcessorTest.java @@ -45,7 +45,6 @@ import com.netflix.titus.master.kubernetes.client.model.PodPhase; import com.netflix.titus.master.kubernetes.client.model.PodWrapper; import com.netflix.titus.master.kubernetes.controller.KubeJobManagementReconciler; -import com.netflix.titus.master.mesos.ContainerEvent; import com.netflix.titus.master.mesos.TitusExecutorDetails; import com.netflix.titus.runtime.kubernetes.KubeConstants; import com.netflix.titus.testkit.model.job.JobGenerator; @@ -65,16 +64,16 @@ import reactor.core.scheduler.Schedulers; import rx.Completable; -import static com.netflix.titus.master.mesos.kubeapiserver.NodeDataGenerator.andIpAddress; -import static com.netflix.titus.master.mesos.kubeapiserver.NodeDataGenerator.andNodeAnnotations; -import static com.netflix.titus.master.mesos.kubeapiserver.NodeDataGenerator.newNode; -import static com.netflix.titus.master.mesos.kubeapiserver.PodDataGenerator.andNodeName; -import static com.netflix.titus.master.mesos.kubeapiserver.PodDataGenerator.andPhase; -import static com.netflix.titus.master.mesos.kubeapiserver.PodDataGenerator.andPodAnnotations; -import static com.netflix.titus.master.mesos.kubeapiserver.PodDataGenerator.andPodIp; -import static com.netflix.titus.master.mesos.kubeapiserver.PodDataGenerator.andRunning; -import static com.netflix.titus.master.mesos.kubeapiserver.PodDataGenerator.andWaiting; -import static com.netflix.titus.master.mesos.kubeapiserver.PodDataGenerator.newPod; +import static com.netflix.titus.master.kubernetes.NodeDataGenerator.andIpAddress; +import static com.netflix.titus.master.kubernetes.NodeDataGenerator.andNodeAnnotations; +import static com.netflix.titus.master.kubernetes.NodeDataGenerator.newNode; +import static com.netflix.titus.master.kubernetes.PodDataGenerator.andNodeName; +import static com.netflix.titus.master.kubernetes.PodDataGenerator.andPhase; +import static com.netflix.titus.master.kubernetes.PodDataGenerator.andPodAnnotations; +import static com.netflix.titus.master.kubernetes.PodDataGenerator.andPodIp; +import static com.netflix.titus.master.kubernetes.PodDataGenerator.andRunning; +import static com.netflix.titus.master.kubernetes.PodDataGenerator.andWaiting; +import static com.netflix.titus.master.kubernetes.PodDataGenerator.newPod; import static com.netflix.titus.runtime.kubernetes.KubeConstants.TITUS_NODE_DOMAIN; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.ArgumentMatchers.any; @@ -95,7 +94,6 @@ public class KubeNotificationProcessorTest { private DirectProcessor podEvents; private DirectProcessor reconcilerPodEvents; - private DirectProcessor reconcilerContainerEvents; private KubeNotificationProcessor processor; @Mock @@ -110,7 +108,6 @@ public void setUp() { MockitoAnnotations.initMocks(this); podEvents = DirectProcessor.create(); reconcilerPodEvents = DirectProcessor.create(); - reconcilerContainerEvents = DirectProcessor.create(); processor = new KubeNotificationProcessor(new FakeDirectKube(), new FakeReconciler(), jobOperations, @@ -132,7 +129,6 @@ protected Scheduler initializeNotificationScheduler() { @After public void tearDown() { reconcilerPodEvents.onComplete(); - reconcilerContainerEvents.onComplete(); podEvents.onComplete(); processor.shutdown(); } diff --git a/titus-server-master/src/test/java/com/netflix/titus/master/mesos/kubeapiserver/KubeObjectFormatterTest.java b/titus-server-master/src/test/java/com/netflix/titus/master/kubernetes/KubeObjectFormatterTest.java similarity index 64% rename from titus-server-master/src/test/java/com/netflix/titus/master/mesos/kubeapiserver/KubeObjectFormatterTest.java rename to titus-server-master/src/test/java/com/netflix/titus/master/kubernetes/KubeObjectFormatterTest.java index bc65680f70..fb37a03100 100644 --- a/titus-server-master/src/test/java/com/netflix/titus/master/mesos/kubeapiserver/KubeObjectFormatterTest.java +++ b/titus-server-master/src/test/java/com/netflix/titus/master/kubernetes/KubeObjectFormatterTest.java @@ -14,24 +14,23 @@ * limitations under the License. */ -package com.netflix.titus.master.mesos.kubeapiserver; +package com.netflix.titus.master.kubernetes; -import com.netflix.titus.master.kubernetes.KubeObjectFormatter; import io.kubernetes.client.openapi.models.V1Node; import io.kubernetes.client.openapi.models.V1Pod; import org.junit.Test; -import static com.netflix.titus.master.mesos.kubeapiserver.NodeDataGenerator.andIpAddress; -import static com.netflix.titus.master.mesos.kubeapiserver.NodeDataGenerator.andNodeAllocatableResources; -import static com.netflix.titus.master.mesos.kubeapiserver.NodeDataGenerator.andNodeLabels; -import static com.netflix.titus.master.mesos.kubeapiserver.NodeDataGenerator.andNodePhase; -import static com.netflix.titus.master.mesos.kubeapiserver.NodeDataGenerator.andTaint; -import static com.netflix.titus.master.mesos.kubeapiserver.NodeDataGenerator.newNode; -import static com.netflix.titus.master.mesos.kubeapiserver.PodDataGenerator.andLabel; -import static com.netflix.titus.master.mesos.kubeapiserver.PodDataGenerator.andNodeName; -import static com.netflix.titus.master.mesos.kubeapiserver.PodDataGenerator.andPhase; -import static com.netflix.titus.master.mesos.kubeapiserver.PodDataGenerator.andReason; -import static com.netflix.titus.master.mesos.kubeapiserver.PodDataGenerator.newPod; +import static com.netflix.titus.master.kubernetes.NodeDataGenerator.andIpAddress; +import static com.netflix.titus.master.kubernetes.NodeDataGenerator.andNodeAllocatableResources; +import static com.netflix.titus.master.kubernetes.NodeDataGenerator.andNodeLabels; +import static com.netflix.titus.master.kubernetes.NodeDataGenerator.andNodePhase; +import static com.netflix.titus.master.kubernetes.NodeDataGenerator.andTaint; +import static com.netflix.titus.master.kubernetes.NodeDataGenerator.newNode; +import static com.netflix.titus.master.kubernetes.PodDataGenerator.andLabel; +import static com.netflix.titus.master.kubernetes.PodDataGenerator.andNodeName; +import static com.netflix.titus.master.kubernetes.PodDataGenerator.andPhase; +import static com.netflix.titus.master.kubernetes.PodDataGenerator.andReason; +import static com.netflix.titus.master.kubernetes.PodDataGenerator.newPod; import static org.assertj.core.api.Assertions.assertThat; public class KubeObjectFormatterTest { diff --git a/titus-server-master/src/test/java/com/netflix/titus/master/mesos/kubeapiserver/KubeUtilTest.java b/titus-server-master/src/test/java/com/netflix/titus/master/kubernetes/KubeUtilTest.java similarity index 98% rename from titus-server-master/src/test/java/com/netflix/titus/master/mesos/kubeapiserver/KubeUtilTest.java rename to titus-server-master/src/test/java/com/netflix/titus/master/kubernetes/KubeUtilTest.java index ea521504d4..69edf06237 100644 --- a/titus-server-master/src/test/java/com/netflix/titus/master/mesos/kubeapiserver/KubeUtilTest.java +++ b/titus-server-master/src/test/java/com/netflix/titus/master/kubernetes/KubeUtilTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2020 Netflix, Inc. + * Copyright 2021 Netflix, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.netflix.titus.master.mesos.kubeapiserver; +package com.netflix.titus.master.kubernetes; import java.time.OffsetDateTime; import java.util.ArrayList; @@ -32,7 +32,6 @@ import io.kubernetes.client.openapi.models.V1Pod; import io.kubernetes.client.openapi.models.V1PodStatus; import io.kubernetes.client.openapi.models.V1Taint; -import org.joda.time.DateTime; import org.junit.Test; import static java.util.Arrays.asList; diff --git a/titus-server-master/src/test/java/com/netflix/titus/master/mesos/kubeapiserver/NodeDataGenerator.java b/titus-server-master/src/test/java/com/netflix/titus/master/kubernetes/NodeDataGenerator.java similarity index 98% rename from titus-server-master/src/test/java/com/netflix/titus/master/mesos/kubeapiserver/NodeDataGenerator.java rename to titus-server-master/src/test/java/com/netflix/titus/master/kubernetes/NodeDataGenerator.java index 071520219f..c77abcb7fe 100644 --- a/titus-server-master/src/test/java/com/netflix/titus/master/mesos/kubeapiserver/NodeDataGenerator.java +++ b/titus-server-master/src/test/java/com/netflix/titus/master/kubernetes/NodeDataGenerator.java @@ -1,5 +1,5 @@ /* - * Copyright 2020 Netflix, Inc. + * Copyright 2021 Netflix, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.netflix.titus.master.mesos.kubeapiserver; +package com.netflix.titus.master.kubernetes; import java.util.ArrayList; import java.util.Collections; diff --git a/titus-server-master/src/test/java/com/netflix/titus/master/mesos/kubeapiserver/PodDataGenerator.java b/titus-server-master/src/test/java/com/netflix/titus/master/kubernetes/PodDataGenerator.java similarity index 98% rename from titus-server-master/src/test/java/com/netflix/titus/master/mesos/kubeapiserver/PodDataGenerator.java rename to titus-server-master/src/test/java/com/netflix/titus/master/kubernetes/PodDataGenerator.java index 59d6073788..eec8a0fbca 100644 --- a/titus-server-master/src/test/java/com/netflix/titus/master/mesos/kubeapiserver/PodDataGenerator.java +++ b/titus-server-master/src/test/java/com/netflix/titus/master/kubernetes/PodDataGenerator.java @@ -1,5 +1,5 @@ /* - * Copyright 2020 Netflix, Inc. + * Copyright 2021 Netflix, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.netflix.titus.master.mesos.kubeapiserver; +package com.netflix.titus.master.kubernetes; import java.time.OffsetDateTime; import java.util.Collections; diff --git a/titus-server-master/src/test/java/com/netflix/titus/master/mesos/kubeapiserver/PodToTaskMapperTest.java b/titus-server-master/src/test/java/com/netflix/titus/master/kubernetes/PodToTaskMapperTest.java similarity index 92% rename from titus-server-master/src/test/java/com/netflix/titus/master/mesos/kubeapiserver/PodToTaskMapperTest.java rename to titus-server-master/src/test/java/com/netflix/titus/master/kubernetes/PodToTaskMapperTest.java index bc06105a8f..a9707ab170 100644 --- a/titus-server-master/src/test/java/com/netflix/titus/master/mesos/kubeapiserver/PodToTaskMapperTest.java +++ b/titus-server-master/src/test/java/com/netflix/titus/master/kubernetes/PodToTaskMapperTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2020 Netflix, Inc. + * Copyright 2021 Netflix, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.netflix.titus.master.mesos.kubeapiserver; +package com.netflix.titus.master.kubernetes; import java.util.Optional; @@ -25,7 +25,6 @@ import com.netflix.titus.common.runtime.TitusRuntime; import com.netflix.titus.common.runtime.TitusRuntimes; import com.netflix.titus.common.util.tuple.Either; -import com.netflix.titus.master.kubernetes.ContainerResultCodeResolver; import com.netflix.titus.master.kubernetes.client.model.PodWrapper; import com.netflix.titus.runtime.kubernetes.KubeConstants; import com.netflix.titus.testkit.model.job.JobGenerator; @@ -37,15 +36,15 @@ import static com.netflix.titus.api.jobmanager.model.job.TaskStatus.REASON_LOCAL_SYSTEM_ERROR; import static com.netflix.titus.api.jobmanager.model.job.TaskStatus.REASON_TASK_KILLED; -import static com.netflix.titus.master.mesos.kubeapiserver.PodDataGenerator.andDeletionTimestamp; -import static com.netflix.titus.master.mesos.kubeapiserver.PodDataGenerator.andMessage; -import static com.netflix.titus.master.mesos.kubeapiserver.PodDataGenerator.andPhase; -import static com.netflix.titus.master.mesos.kubeapiserver.PodDataGenerator.andReason; -import static com.netflix.titus.master.mesos.kubeapiserver.PodDataGenerator.andRunning; -import static com.netflix.titus.master.mesos.kubeapiserver.PodDataGenerator.andScheduled; -import static com.netflix.titus.master.mesos.kubeapiserver.PodDataGenerator.andTerminated; -import static com.netflix.titus.master.mesos.kubeapiserver.PodDataGenerator.andWaiting; -import static com.netflix.titus.master.mesos.kubeapiserver.PodDataGenerator.newPod; +import static com.netflix.titus.master.kubernetes.PodDataGenerator.andDeletionTimestamp; +import static com.netflix.titus.master.kubernetes.PodDataGenerator.andMessage; +import static com.netflix.titus.master.kubernetes.PodDataGenerator.andPhase; +import static com.netflix.titus.master.kubernetes.PodDataGenerator.andReason; +import static com.netflix.titus.master.kubernetes.PodDataGenerator.andRunning; +import static com.netflix.titus.master.kubernetes.PodDataGenerator.andScheduled; +import static com.netflix.titus.master.kubernetes.PodDataGenerator.andTerminated; +import static com.netflix.titus.master.kubernetes.PodDataGenerator.andWaiting; +import static com.netflix.titus.master.kubernetes.PodDataGenerator.newPod; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; diff --git a/titus-server-master/src/test/java/com/netflix/titus/master/mesos/kubeapiserver/direct/DefaultPodAffinityFactoryTest.java b/titus-server-master/src/test/java/com/netflix/titus/master/kubernetes/pod/DefaultPodAffinityFactoryTest.java similarity index 99% rename from titus-server-master/src/test/java/com/netflix/titus/master/mesos/kubeapiserver/direct/DefaultPodAffinityFactoryTest.java rename to titus-server-master/src/test/java/com/netflix/titus/master/kubernetes/pod/DefaultPodAffinityFactoryTest.java index 22ff7b62c8..981bb8a194 100644 --- a/titus-server-master/src/test/java/com/netflix/titus/master/mesos/kubeapiserver/direct/DefaultPodAffinityFactoryTest.java +++ b/titus-server-master/src/test/java/com/netflix/titus/master/kubernetes/pod/DefaultPodAffinityFactoryTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2020 Netflix, Inc. + * Copyright 2021 Netflix, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.netflix.titus.master.mesos.kubeapiserver.direct; +package com.netflix.titus.master.kubernetes.pod; import java.util.Collections; import java.util.List; diff --git a/titus-server-master/src/test/java/com/netflix/titus/master/mesos/kubeapiserver/PerformanceToolUtilTest.java b/titus-server-master/src/test/java/com/netflix/titus/master/mesos/kubeapiserver/PerformanceToolUtilTest.java deleted file mode 100644 index 99a6061906..0000000000 --- a/titus-server-master/src/test/java/com/netflix/titus/master/mesos/kubeapiserver/PerformanceToolUtilTest.java +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Copyright 2019 Netflix, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.netflix.titus.master.mesos.kubeapiserver; - -import java.util.Map; - -import com.netflix.titus.api.jobmanager.model.job.Job; -import com.netflix.titus.api.jobmanager.model.job.ext.BatchJobExt; -import com.netflix.titus.testkit.model.job.JobGenerator; -import io.titanframework.messages.TitanProtos; -import org.apache.mesos.Protos; -import org.junit.Test; - -import static com.netflix.titus.api.jobmanager.model.job.JobFunctions.appendJobDescriptorAttribute; -import static org.assertj.core.api.Assertions.assertThat; - -public class PerformanceToolUtilTest { - - @Test - public void testLegacyParser() { - Protos.TaskInfo taskInfo = newTaskInfo( - "TASK_LIFECYCLE_1", - "selector: slots=0.. slotStep=2; launched: delay=2s; startInitiated: delay=3s; started: delay=60s; killInitiated: delay=5s" - ); - Map annotations = PerformanceToolUtil.findPerformanceTestAnnotations(taskInfo); - assertThat(annotations).containsEntry(PerformanceToolUtil.PREPARE_TIME, "3s"); - assertThat(annotations).containsEntry(PerformanceToolUtil.RUN_TIME, "60s"); - assertThat(annotations).containsEntry(PerformanceToolUtil.KILL_TIME, "5s"); - } - - @Test - public void testMockVK() { - Job job = JobGenerator.oneBatchJob(); - job = appendJobDescriptorAttribute(job, PerformanceToolUtil.MOCK_VK_PROPERTY_PREPARE_TIME, "10s"); - job = appendJobDescriptorAttribute(job, PerformanceToolUtil.MOCK_VK_PROPERTY_RUN_TIME, "20s"); - job = appendJobDescriptorAttribute(job, PerformanceToolUtil.MOCK_VK_PROPERTY_KILL_TIME, "30s"); - Map annotations = PerformanceToolUtil.toAnnotations(job); - assertThat(annotations).containsEntry(PerformanceToolUtil.PREPARE_TIME, "10s"); - assertThat(annotations).containsEntry(PerformanceToolUtil.RUN_TIME, "20s"); - assertThat(annotations).containsEntry(PerformanceToolUtil.KILL_TIME, "30s"); - } - - private Protos.TaskInfo newTaskInfo(String key, String value) { - return Protos.TaskInfo.newBuilder() - .setTaskId(Protos.TaskID.newBuilder().setValue("myTask")) - .setName("myTask") - .setSlaveId(Protos.SlaveID.newBuilder().setValue("slave").build()) - .setData(TitanProtos.ContainerInfo.newBuilder() - .putUserProvidedEnv(key, value) - .setNetworkConfigInfo(TitanProtos.ContainerInfo.NetworkConfigInfo.newBuilder() - .setEniLabel("eni0") - .setEniLablel("eni0") - .addSecurityGroups("sg-123456") - ) - .putTitusProvidedEnv("TITUS_JOB_ID", "testJob") - .build() - .toByteString() - ) - .build(); - } -} \ No newline at end of file diff --git a/titus-server-runtime/gradle/dependency-locks/testCompileClasspath.lockfile b/titus-server-runtime/gradle/dependency-locks/testCompileClasspath.lockfile index 3e44fdf336..32b1c5336b 100644 --- a/titus-server-runtime/gradle/dependency-locks/testCompileClasspath.lockfile +++ b/titus-server-runtime/gradle/dependency-locks/testCompileClasspath.lockfile @@ -61,7 +61,6 @@ com.lmax:disruptor:3.0.1 com.netflix.archaius:archaius2-api:2.3.16 com.netflix.archaius:archaius2-core:2.3.16 com.netflix.archaius:archaius2-guice:2.3.16 -com.netflix.fenzo:fenzo-core:1.1.0-rc.9 com.netflix.frigga:frigga:0.25.0 com.netflix.governator:governator-api:1.15.11 com.netflix.governator:governator-core:1.15.11 @@ -209,7 +208,6 @@ org.apache.commons:commons-lang3:3.12.0 org.apache.commons:commons-math3:3.6.1 org.apache.logging.log4j:log4j-api:2.13.3 org.apache.logging.log4j:log4j-to-slf4j:2.13.3 -org.apache.mesos:mesos:1.7.2 org.apache.thrift:libthrift:0.9.2 org.apache.tomcat.embed:tomcat-embed-core:9.0.39 org.apache.tomcat.embed:tomcat-embed-websocket:9.0.39 diff --git a/titus-server-runtime/gradle/dependency-locks/testRuntimeClasspath.lockfile b/titus-server-runtime/gradle/dependency-locks/testRuntimeClasspath.lockfile index b85fb8da97..9f2f820ba3 100644 --- a/titus-server-runtime/gradle/dependency-locks/testRuntimeClasspath.lockfile +++ b/titus-server-runtime/gradle/dependency-locks/testRuntimeClasspath.lockfile @@ -64,7 +64,6 @@ com.lmax:disruptor:3.0.1 com.netflix.archaius:archaius2-api:2.3.16 com.netflix.archaius:archaius2-core:2.3.16 com.netflix.archaius:archaius2-guice:2.3.16 -com.netflix.fenzo:fenzo-core:1.1.0-rc.9 com.netflix.frigga:frigga:0.25.0 com.netflix.governator:governator-api:1.15.11 com.netflix.governator:governator-core:1.15.11 @@ -220,7 +219,6 @@ org.apache.commons:commons-lang3:3.12.0 org.apache.commons:commons-math3:3.6.1 org.apache.logging.log4j:log4j-api:2.13.3 org.apache.logging.log4j:log4j-to-slf4j:2.13.3 -org.apache.mesos:mesos:1.7.2 org.apache.thrift:libthrift:0.9.2 org.apache.tomcat.embed:tomcat-embed-core:9.0.39 org.apache.tomcat.embed:tomcat-embed-websocket:9.0.39 diff --git a/titus-supplementary-component/task-relocation/gradle/dependency-locks/testCompileClasspath.lockfile b/titus-supplementary-component/task-relocation/gradle/dependency-locks/testCompileClasspath.lockfile index 3e44fdf336..32b1c5336b 100644 --- a/titus-supplementary-component/task-relocation/gradle/dependency-locks/testCompileClasspath.lockfile +++ b/titus-supplementary-component/task-relocation/gradle/dependency-locks/testCompileClasspath.lockfile @@ -61,7 +61,6 @@ com.lmax:disruptor:3.0.1 com.netflix.archaius:archaius2-api:2.3.16 com.netflix.archaius:archaius2-core:2.3.16 com.netflix.archaius:archaius2-guice:2.3.16 -com.netflix.fenzo:fenzo-core:1.1.0-rc.9 com.netflix.frigga:frigga:0.25.0 com.netflix.governator:governator-api:1.15.11 com.netflix.governator:governator-core:1.15.11 @@ -209,7 +208,6 @@ org.apache.commons:commons-lang3:3.12.0 org.apache.commons:commons-math3:3.6.1 org.apache.logging.log4j:log4j-api:2.13.3 org.apache.logging.log4j:log4j-to-slf4j:2.13.3 -org.apache.mesos:mesos:1.7.2 org.apache.thrift:libthrift:0.9.2 org.apache.tomcat.embed:tomcat-embed-core:9.0.39 org.apache.tomcat.embed:tomcat-embed-websocket:9.0.39 diff --git a/titus-supplementary-component/task-relocation/gradle/dependency-locks/testRuntimeClasspath.lockfile b/titus-supplementary-component/task-relocation/gradle/dependency-locks/testRuntimeClasspath.lockfile index b85fb8da97..9f2f820ba3 100644 --- a/titus-supplementary-component/task-relocation/gradle/dependency-locks/testRuntimeClasspath.lockfile +++ b/titus-supplementary-component/task-relocation/gradle/dependency-locks/testRuntimeClasspath.lockfile @@ -64,7 +64,6 @@ com.lmax:disruptor:3.0.1 com.netflix.archaius:archaius2-api:2.3.16 com.netflix.archaius:archaius2-core:2.3.16 com.netflix.archaius:archaius2-guice:2.3.16 -com.netflix.fenzo:fenzo-core:1.1.0-rc.9 com.netflix.frigga:frigga:0.25.0 com.netflix.governator:governator-api:1.15.11 com.netflix.governator:governator-core:1.15.11 @@ -220,7 +219,6 @@ org.apache.commons:commons-lang3:3.12.0 org.apache.commons:commons-math3:3.6.1 org.apache.logging.log4j:log4j-api:2.13.3 org.apache.logging.log4j:log4j-to-slf4j:2.13.3 -org.apache.mesos:mesos:1.7.2 org.apache.thrift:libthrift:0.9.2 org.apache.tomcat.embed:tomcat-embed-core:9.0.39 org.apache.tomcat.embed:tomcat-embed-websocket:9.0.39 diff --git a/titus-supplementary-component/tasks-publisher-springboot/gradle/dependency-locks/compileClasspath.lockfile b/titus-supplementary-component/tasks-publisher-springboot/gradle/dependency-locks/compileClasspath.lockfile index fa0c75fca5..dbe2e182f9 100644 --- a/titus-supplementary-component/tasks-publisher-springboot/gradle/dependency-locks/compileClasspath.lockfile +++ b/titus-supplementary-component/tasks-publisher-springboot/gradle/dependency-locks/compileClasspath.lockfile @@ -59,7 +59,6 @@ com.lmax:disruptor:3.0.1 com.netflix.archaius:archaius2-api:2.3.16 com.netflix.archaius:archaius2-core:2.3.16 com.netflix.archaius:archaius2-guice:2.3.16 -com.netflix.fenzo:fenzo-core:1.1.0-rc.9 com.netflix.frigga:frigga:0.25.0 com.netflix.governator:governator-api:1.15.11 com.netflix.governator:governator-core:1.15.11 @@ -202,7 +201,6 @@ org.apache.commons:commons-lang3:3.10 org.apache.commons:commons-math3:3.6.1 org.apache.logging.log4j:log4j-api:2.13.3 org.apache.logging.log4j:log4j-to-slf4j:2.13.3 -org.apache.mesos:mesos:1.7.2 org.apache.thrift:libthrift:0.9.2 org.apache.tomcat.embed:tomcat-embed-core:9.0.39 org.apache.tomcat.embed:tomcat-embed-websocket:9.0.39 diff --git a/titus-supplementary-component/tasks-publisher-springboot/gradle/dependency-locks/productionRuntimeClasspath.lockfile b/titus-supplementary-component/tasks-publisher-springboot/gradle/dependency-locks/productionRuntimeClasspath.lockfile index d423604464..2a254c702c 100644 --- a/titus-supplementary-component/tasks-publisher-springboot/gradle/dependency-locks/productionRuntimeClasspath.lockfile +++ b/titus-supplementary-component/tasks-publisher-springboot/gradle/dependency-locks/productionRuntimeClasspath.lockfile @@ -62,7 +62,6 @@ com.lmax:disruptor:3.0.1 com.netflix.archaius:archaius2-api:2.3.16 com.netflix.archaius:archaius2-core:2.3.16 com.netflix.archaius:archaius2-guice:2.3.16 -com.netflix.fenzo:fenzo-core:1.1.0-rc.9 com.netflix.frigga:frigga:0.25.0 com.netflix.governator:governator-api:1.15.11 com.netflix.governator:governator-core:1.15.11 @@ -207,7 +206,6 @@ org.apache.commons:commons-lang3:3.10 org.apache.commons:commons-math3:3.6.1 org.apache.logging.log4j:log4j-api:2.13.3 org.apache.logging.log4j:log4j-to-slf4j:2.13.3 -org.apache.mesos:mesos:1.7.2 org.apache.thrift:libthrift:0.9.2 org.apache.tomcat.embed:tomcat-embed-core:9.0.39 org.apache.tomcat.embed:tomcat-embed-websocket:9.0.39 diff --git a/titus-supplementary-component/tasks-publisher-springboot/gradle/dependency-locks/runtimeClasspath.lockfile b/titus-supplementary-component/tasks-publisher-springboot/gradle/dependency-locks/runtimeClasspath.lockfile index d423604464..2a254c702c 100644 --- a/titus-supplementary-component/tasks-publisher-springboot/gradle/dependency-locks/runtimeClasspath.lockfile +++ b/titus-supplementary-component/tasks-publisher-springboot/gradle/dependency-locks/runtimeClasspath.lockfile @@ -62,7 +62,6 @@ com.lmax:disruptor:3.0.1 com.netflix.archaius:archaius2-api:2.3.16 com.netflix.archaius:archaius2-core:2.3.16 com.netflix.archaius:archaius2-guice:2.3.16 -com.netflix.fenzo:fenzo-core:1.1.0-rc.9 com.netflix.frigga:frigga:0.25.0 com.netflix.governator:governator-api:1.15.11 com.netflix.governator:governator-core:1.15.11 @@ -207,7 +206,6 @@ org.apache.commons:commons-lang3:3.10 org.apache.commons:commons-math3:3.6.1 org.apache.logging.log4j:log4j-api:2.13.3 org.apache.logging.log4j:log4j-to-slf4j:2.13.3 -org.apache.mesos:mesos:1.7.2 org.apache.thrift:libthrift:0.9.2 org.apache.tomcat.embed:tomcat-embed-core:9.0.39 org.apache.tomcat.embed:tomcat-embed-websocket:9.0.39 diff --git a/titus-supplementary-component/tasks-publisher-springboot/gradle/dependency-locks/testCompileClasspath.lockfile b/titus-supplementary-component/tasks-publisher-springboot/gradle/dependency-locks/testCompileClasspath.lockfile index 20993fbeb8..209781c0a0 100644 --- a/titus-supplementary-component/tasks-publisher-springboot/gradle/dependency-locks/testCompileClasspath.lockfile +++ b/titus-supplementary-component/tasks-publisher-springboot/gradle/dependency-locks/testCompileClasspath.lockfile @@ -61,7 +61,6 @@ com.lmax:disruptor:3.0.1 com.netflix.archaius:archaius2-api:2.3.16 com.netflix.archaius:archaius2-core:2.3.16 com.netflix.archaius:archaius2-guice:2.3.16 -com.netflix.fenzo:fenzo-core:1.1.0-rc.9 com.netflix.frigga:frigga:0.25.0 com.netflix.governator:governator-api:1.15.11 com.netflix.governator:governator-core:1.15.11 @@ -205,7 +204,6 @@ org.apache.commons:commons-lang3:3.10 org.apache.commons:commons-math3:3.6.1 org.apache.logging.log4j:log4j-api:2.13.3 org.apache.logging.log4j:log4j-to-slf4j:2.13.3 -org.apache.mesos:mesos:1.7.2 org.apache.thrift:libthrift:0.9.2 org.apache.tomcat.embed:tomcat-embed-core:9.0.39 org.apache.tomcat.embed:tomcat-embed-websocket:9.0.39 diff --git a/titus-supplementary-component/tasks-publisher-springboot/gradle/dependency-locks/testRuntimeClasspath.lockfile b/titus-supplementary-component/tasks-publisher-springboot/gradle/dependency-locks/testRuntimeClasspath.lockfile index ad8eabb780..e47361a538 100644 --- a/titus-supplementary-component/tasks-publisher-springboot/gradle/dependency-locks/testRuntimeClasspath.lockfile +++ b/titus-supplementary-component/tasks-publisher-springboot/gradle/dependency-locks/testRuntimeClasspath.lockfile @@ -64,7 +64,6 @@ com.lmax:disruptor:3.0.1 com.netflix.archaius:archaius2-api:2.3.16 com.netflix.archaius:archaius2-core:2.3.16 com.netflix.archaius:archaius2-guice:2.3.16 -com.netflix.fenzo:fenzo-core:1.1.0-rc.9 com.netflix.frigga:frigga:0.25.0 com.netflix.governator:governator-api:1.15.11 com.netflix.governator:governator-core:1.15.11 @@ -210,7 +209,6 @@ org.apache.commons:commons-lang3:3.10 org.apache.commons:commons-math3:3.6.1 org.apache.logging.log4j:log4j-api:2.13.3 org.apache.logging.log4j:log4j-to-slf4j:2.13.3 -org.apache.mesos:mesos:1.7.2 org.apache.thrift:libthrift:0.9.2 org.apache.tomcat.embed:tomcat-embed-core:9.0.39 org.apache.tomcat.embed:tomcat-embed-websocket:9.0.39 diff --git a/titus-supplementary-component/tasks-publisher/gradle/dependency-locks/testCompileClasspath.lockfile b/titus-supplementary-component/tasks-publisher/gradle/dependency-locks/testCompileClasspath.lockfile index 3e44fdf336..32b1c5336b 100644 --- a/titus-supplementary-component/tasks-publisher/gradle/dependency-locks/testCompileClasspath.lockfile +++ b/titus-supplementary-component/tasks-publisher/gradle/dependency-locks/testCompileClasspath.lockfile @@ -61,7 +61,6 @@ com.lmax:disruptor:3.0.1 com.netflix.archaius:archaius2-api:2.3.16 com.netflix.archaius:archaius2-core:2.3.16 com.netflix.archaius:archaius2-guice:2.3.16 -com.netflix.fenzo:fenzo-core:1.1.0-rc.9 com.netflix.frigga:frigga:0.25.0 com.netflix.governator:governator-api:1.15.11 com.netflix.governator:governator-core:1.15.11 @@ -209,7 +208,6 @@ org.apache.commons:commons-lang3:3.12.0 org.apache.commons:commons-math3:3.6.1 org.apache.logging.log4j:log4j-api:2.13.3 org.apache.logging.log4j:log4j-to-slf4j:2.13.3 -org.apache.mesos:mesos:1.7.2 org.apache.thrift:libthrift:0.9.2 org.apache.tomcat.embed:tomcat-embed-core:9.0.39 org.apache.tomcat.embed:tomcat-embed-websocket:9.0.39 diff --git a/titus-supplementary-component/tasks-publisher/gradle/dependency-locks/testRuntimeClasspath.lockfile b/titus-supplementary-component/tasks-publisher/gradle/dependency-locks/testRuntimeClasspath.lockfile index b85fb8da97..9f2f820ba3 100644 --- a/titus-supplementary-component/tasks-publisher/gradle/dependency-locks/testRuntimeClasspath.lockfile +++ b/titus-supplementary-component/tasks-publisher/gradle/dependency-locks/testRuntimeClasspath.lockfile @@ -64,7 +64,6 @@ com.lmax:disruptor:3.0.1 com.netflix.archaius:archaius2-api:2.3.16 com.netflix.archaius:archaius2-core:2.3.16 com.netflix.archaius:archaius2-guice:2.3.16 -com.netflix.fenzo:fenzo-core:1.1.0-rc.9 com.netflix.frigga:frigga:0.25.0 com.netflix.governator:governator-api:1.15.11 com.netflix.governator:governator-core:1.15.11 @@ -220,7 +219,6 @@ org.apache.commons:commons-lang3:3.12.0 org.apache.commons:commons-math3:3.6.1 org.apache.logging.log4j:log4j-api:2.13.3 org.apache.logging.log4j:log4j-to-slf4j:2.13.3 -org.apache.mesos:mesos:1.7.2 org.apache.thrift:libthrift:0.9.2 org.apache.tomcat.embed:tomcat-embed-core:9.0.39 org.apache.tomcat.embed:tomcat-embed-websocket:9.0.39 diff --git a/titus-testkit/gradle/dependency-locks/compileClasspath.lockfile b/titus-testkit/gradle/dependency-locks/compileClasspath.lockfile index 4b76a6e41d..697cc15379 100644 --- a/titus-testkit/gradle/dependency-locks/compileClasspath.lockfile +++ b/titus-testkit/gradle/dependency-locks/compileClasspath.lockfile @@ -59,7 +59,6 @@ com.lmax:disruptor:3.0.1 com.netflix.archaius:archaius2-api:2.3.16 com.netflix.archaius:archaius2-core:2.3.16 com.netflix.archaius:archaius2-guice:2.3.16 -com.netflix.fenzo:fenzo-core:1.1.0-rc.9 com.netflix.frigga:frigga:0.25.0 com.netflix.governator:governator-api:1.15.11 com.netflix.governator:governator-core:1.15.11 @@ -206,7 +205,6 @@ org.apache.commons:commons-lang3:3.12.0 org.apache.commons:commons-math3:3.6.1 org.apache.logging.log4j:log4j-api:2.13.3 org.apache.logging.log4j:log4j-to-slf4j:2.13.3 -org.apache.mesos:mesos:1.7.2 org.apache.thrift:libthrift:0.9.2 org.apache.tomcat.embed:tomcat-embed-core:9.0.39 org.apache.tomcat.embed:tomcat-embed-websocket:9.0.39 diff --git a/titus-testkit/gradle/dependency-locks/runtimeClasspath.lockfile b/titus-testkit/gradle/dependency-locks/runtimeClasspath.lockfile index c18b2b1f80..7dbce3751c 100644 --- a/titus-testkit/gradle/dependency-locks/runtimeClasspath.lockfile +++ b/titus-testkit/gradle/dependency-locks/runtimeClasspath.lockfile @@ -62,7 +62,6 @@ com.lmax:disruptor:3.0.1 com.netflix.archaius:archaius2-api:2.3.16 com.netflix.archaius:archaius2-core:2.3.16 com.netflix.archaius:archaius2-guice:2.3.16 -com.netflix.fenzo:fenzo-core:1.1.0-rc.9 com.netflix.frigga:frigga:0.25.0 com.netflix.governator:governator-api:1.15.11 com.netflix.governator:governator-core:1.15.11 @@ -217,7 +216,6 @@ org.apache.commons:commons-lang3:3.12.0 org.apache.commons:commons-math3:3.6.1 org.apache.logging.log4j:log4j-api:2.13.3 org.apache.logging.log4j:log4j-to-slf4j:2.13.3 -org.apache.mesos:mesos:1.7.2 org.apache.thrift:libthrift:0.9.2 org.apache.tomcat.embed:tomcat-embed-core:9.0.39 org.apache.tomcat.embed:tomcat-embed-websocket:9.0.39 diff --git a/titus-testkit/gradle/dependency-locks/testCompileClasspath.lockfile b/titus-testkit/gradle/dependency-locks/testCompileClasspath.lockfile index 3e44fdf336..32b1c5336b 100644 --- a/titus-testkit/gradle/dependency-locks/testCompileClasspath.lockfile +++ b/titus-testkit/gradle/dependency-locks/testCompileClasspath.lockfile @@ -61,7 +61,6 @@ com.lmax:disruptor:3.0.1 com.netflix.archaius:archaius2-api:2.3.16 com.netflix.archaius:archaius2-core:2.3.16 com.netflix.archaius:archaius2-guice:2.3.16 -com.netflix.fenzo:fenzo-core:1.1.0-rc.9 com.netflix.frigga:frigga:0.25.0 com.netflix.governator:governator-api:1.15.11 com.netflix.governator:governator-core:1.15.11 @@ -209,7 +208,6 @@ org.apache.commons:commons-lang3:3.12.0 org.apache.commons:commons-math3:3.6.1 org.apache.logging.log4j:log4j-api:2.13.3 org.apache.logging.log4j:log4j-to-slf4j:2.13.3 -org.apache.mesos:mesos:1.7.2 org.apache.thrift:libthrift:0.9.2 org.apache.tomcat.embed:tomcat-embed-core:9.0.39 org.apache.tomcat.embed:tomcat-embed-websocket:9.0.39 diff --git a/titus-testkit/gradle/dependency-locks/testRuntimeClasspath.lockfile b/titus-testkit/gradle/dependency-locks/testRuntimeClasspath.lockfile index b85fb8da97..9f2f820ba3 100644 --- a/titus-testkit/gradle/dependency-locks/testRuntimeClasspath.lockfile +++ b/titus-testkit/gradle/dependency-locks/testRuntimeClasspath.lockfile @@ -64,7 +64,6 @@ com.lmax:disruptor:3.0.1 com.netflix.archaius:archaius2-api:2.3.16 com.netflix.archaius:archaius2-core:2.3.16 com.netflix.archaius:archaius2-guice:2.3.16 -com.netflix.fenzo:fenzo-core:1.1.0-rc.9 com.netflix.frigga:frigga:0.25.0 com.netflix.governator:governator-api:1.15.11 com.netflix.governator:governator-core:1.15.11 @@ -220,7 +219,6 @@ org.apache.commons:commons-lang3:3.12.0 org.apache.commons:commons-math3:3.6.1 org.apache.logging.log4j:log4j-api:2.13.3 org.apache.logging.log4j:log4j-to-slf4j:2.13.3 -org.apache.mesos:mesos:1.7.2 org.apache.thrift:libthrift:0.9.2 org.apache.tomcat.embed:tomcat-embed-core:9.0.39 org.apache.tomcat.embed:tomcat-embed-websocket:9.0.39 diff --git a/titus-testkit/src/main/java/com/netflix/titus/testkit/embedded/cell/master/EmbeddedTitusMaster.java b/titus-testkit/src/main/java/com/netflix/titus/testkit/embedded/cell/master/EmbeddedTitusMaster.java index f4d52bc091..728b16c529 100644 --- a/titus-testkit/src/main/java/com/netflix/titus/testkit/embedded/cell/master/EmbeddedTitusMaster.java +++ b/titus-testkit/src/main/java/com/netflix/titus/testkit/embedded/cell/master/EmbeddedTitusMaster.java @@ -80,8 +80,6 @@ import com.netflix.titus.master.endpoint.grpc.TitusMasterGrpcServer; import com.netflix.titus.master.eviction.service.quota.system.ArchaiusSystemDisruptionBudgetResolver; import com.netflix.titus.master.eviction.service.quota.system.SystemDisruptionBudgetDescriptor; -import com.netflix.titus.master.mesos.NoOpVirtualMachineMasterService; -import com.netflix.titus.master.mesos.VirtualMachineMasterService; import com.netflix.titus.master.supervisor.service.leader.LocalMasterMonitor; import com.netflix.titus.runtime.endpoint.common.rest.EmbeddedJettyModule; import com.netflix.titus.runtime.store.v3.memory.InMemoryJobStore; @@ -163,7 +161,6 @@ public EmbeddedTitusMaster boot() { Stopwatch timer = Stopwatch.createStarted(); logger.info("Starting Titus Master"); - TitusMasterModule.Mode mode = embeddedKubeCluster != null ? TitusMasterModule.Mode.EMBEDDED_KUBE : TitusMasterModule.Mode.MESOS; Module embeddedKubeModule; if (embeddedKubeCluster == null) { embeddedKubeModule = new AbstractModule() { @@ -184,7 +181,7 @@ protected void configure() { } }), embeddedKubeModule, - Modules.override(new TitusMasterModule(enableREST, mode)) + Modules.override(new TitusMasterModule(enableREST, TitusMasterModule.Mode.EMBEDDED_KUBE)) .with(new AbstractModule() { @Override protected void configure() { @@ -193,8 +190,6 @@ protected void configure() { bind(MasterMonitor.class).to(LocalMasterMonitor.class); bind(AgentStore.class).toInstance(agentStore); - bind(VirtualMachineMasterService.class).toInstance(new NoOpVirtualMachineMasterService()); - bind(AppScalePolicyStore.class).to(InMemoryPolicyStore.class); bind(LoadBalancerStore.class).to(InMemoryLoadBalancerStore.class);