azkaban-aplcache

move dependency plugin interface code to a separate module

2/7/2018 9:32:36 PM

Changes

settings.gradle 1(+1 -0)

Details

diff --git a/az-flow-trigger-dependency-plugin/build.gradle b/az-flow-trigger-dependency-plugin/build.gradle
new file mode 100644
index 0000000..e56d83e
--- /dev/null
+++ b/az-flow-trigger-dependency-plugin/build.gradle
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2018 LinkedIn Corp.
+ *
+ * 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.
+ *
+ */
+
+dependencies {
+}
+
diff --git a/az-flow-trigger-dependency-plugin/README.md b/az-flow-trigger-dependency-plugin/README.md
new file mode 100644
index 0000000..38c4a14
--- /dev/null
+++ b/az-flow-trigger-dependency-plugin/README.md
@@ -0,0 +1 @@
+This module is the contract between azkaban and dependency plugin. It mainly contains minimal set of the interfaces needed by flow trigger dependency plugin development. 
diff --git a/azkaban-web-server/build.gradle b/azkaban-web-server/build.gradle
index 6a7417a..0ee407d 100644
--- a/azkaban-web-server/build.gradle
+++ b/azkaban-web-server/build.gradle
@@ -1,42 +1,42 @@
 buildscript {
-  repositories {
-    mavenCentral()
-    maven {
-      url 'https://plugins.gradle.org/m2/'
+    repositories {
+        mavenCentral()
+        maven {
+            url 'https://plugins.gradle.org/m2/'
+        }
+    }
+    dependencies {
+        classpath 'com.linkedin:gradle-dustjs-plugin:1.0.0'
+        classpath 'de.obqo.gradle:gradle-lesscss-plugin:1.0-1.3.3'
     }
-  }
-  dependencies {
-    classpath 'com.linkedin:gradle-dustjs-plugin:1.0.0'
-    classpath 'de.obqo.gradle:gradle-lesscss-plugin:1.0-1.3.3'
-  }
 }
 
 // This node plugin enables users to run any NodeJS script.  The plugin will download and
 // manage NodeJS distributions, use them from there.
 // ***npm install*** installs all dependencies in package.json. It will only run when changes are made to package.json
 plugins {
-  id "com.moowork.node" version "0.13"
+    id "com.moowork.node" version "0.13"
 }
 
 node {
-  // Version of node to use.
-  version = '6.2.1'
+    // Version of node to use.
+    version = '6.2.1'
 
-  // Version of npm to use.
-  npmVersion = '3.9.3'
+    // Version of npm to use.
+    npmVersion = '3.9.3'
 
-  // Base URL for fetching node distributions (change if you have a mirror).
-  distBaseUrl = 'https://nodejs.org/dist'
+    // Base URL for fetching node distributions (change if you have a mirror).
+    distBaseUrl = 'https://nodejs.org/dist'
 
-  // If true, it will download node using above parameters.
-  // If false, it will try to use globally installed node.
-  download = true
+    // If true, it will download node using above parameters.
+    // If false, it will try to use globally installed node.
+    download = true
 
-  // Set the work directory for unpacking node
-  workDir = file("${project.buildDir}/nodejs")
+    // Set the work directory for unpacking node
+    workDir = file("${project.buildDir}/nodejs")
 
-  // Set the work directory where node_modules should be located
-  nodeModulesDir = file("${project.projectDir}")
+    // Set the work directory where node_modules should be located
+    nodeModulesDir = file("${project.projectDir}")
 }
 
 apply plugin: 'lesscss'
@@ -44,148 +44,150 @@ apply plugin: 'dustjs'
 apply plugin: 'distribution'
 
 configurations {
-  generateRestli
+    generateRestli
 }
 
 dependencies {
-  compile project(':az-core')
-  compile(project(':azkaban-common'))
+    compile project(':az-core')
+    compile(project(':azkaban-common'))
+    compile(project(':az-flow-trigger-dependency-plugin'))
 
-  compile deps.restliServer
-  compile deps.velocityTools
+    compile deps.restliServer
+    compile deps.velocityTools
 
-  testCompile(project(path: ':azkaban-common', configuration: 'testCompile'))
-  testCompile deps.collections
+    testCompile(project(path: ':azkaban-common', configuration: 'testCompile'))
+    testCompile deps.collections
 
-  //AZ web module tests need to access classes defined in azkaban-common test module
-  testCompile project(':azkaban-common').sourceSets.test.output
+    //AZ web module tests need to access classes defined in azkaban-common test module
+    testCompile project(':azkaban-common').sourceSets.test.output
 
-  generateRestli deps.restliGenerator
-  generateRestli deps.restliTools
+    generateRestli deps.restliGenerator
+    generateRestli deps.restliTools
 
-  testCompile project(':test')
-  testCompile project(path: ':azkaban-db', configuration: 'testOutput')
-  testRuntime deps.h2
+    testCompile(project(path: ':az-flow-trigger-dependency-plugin', configuration: 'testCompile'))
+    testCompile project(':test')
+    testCompile project(path: ':azkaban-db', configuration: 'testOutput')
+    testRuntime deps.h2
 }
 
 sourceSets {
-  main {
-    java {
-      srcDirs 'src/main/java', 'src/restli/generatedJava', 'src/restli/java'
+    main {
+        java {
+            srcDirs 'src/main/java', 'src/restli/generatedJava', 'src/restli/java'
+        }
     }
-  }
 }
 
 task movingJsTojsToPackage(dependsOn: ['npm_install']) {
 
-  doLast {
-    copy {
-      from "node_modules/later/later.min.js"
-      into "${buildDir}/jsToPackage"
-    }
-    copy {
-      from "node_modules/moment/min/moment.min.js"
-      into "${buildDir}/jsToPackage"
-    }
-    copy {
-      from "node_modules/eonasdan-bootstrap-datetimepicker/build/js/bootstrap-datetimepicker.min.js"
-      into "${buildDir}/jsToPackage"
-    }
-    copy {
-      from "node_modules/moment-timezone/builds/moment-timezone-with-data.min.js"
-      into "${buildDir}/jsToPackage"
+    doLast {
+        copy {
+            from "node_modules/later/later.min.js"
+            into "${buildDir}/jsToPackage"
+        }
+        copy {
+            from "node_modules/moment/min/moment.min.js"
+            into "${buildDir}/jsToPackage"
+        }
+        copy {
+            from "node_modules/eonasdan-bootstrap-datetimepicker/build/js/bootstrap-datetimepicker.min.js"
+            into "${buildDir}/jsToPackage"
+        }
+        copy {
+            from "node_modules/moment-timezone/builds/moment-timezone-with-data.min.js"
+            into "${buildDir}/jsToPackage"
+        }
     }
-  }
 }
 
 task cleanAll {
-  delete 'jsToPackage'
-  delete 'node_modules'
-  delete 'velocity.log'
+    delete 'jsToPackage'
+    delete 'node_modules'
+    delete 'velocity.log'
 }
 clean.dependsOn cleanAll
 
 task jsTest(dependsOn: ['npm_install'], type: NodeTask) {
 
-  // refer to mocha js script file.
-  script = file('node_modules/mocha/bin/mocha')
+    // refer to mocha js script file.
+    script = file('node_modules/mocha/bin/mocha')
 
-  // args keep the test files' location
-  args = ['src/web/js/azkaban/test/']
+    // args keep the test files' location
+    args = ['src/web/js/azkaban/test/']
 }
 test.dependsOn jsTest
 
 task restliTemplateGenerator(type: JavaExec) {
-  mkdir 'src/restli/generatedJava'
+    mkdir 'src/restli/generatedJava'
 
-  main = 'com.linkedin.pegasus.generator.PegasusDataTemplateGenerator'
-  args = ['src/restli/generatedJava','src/restli/schemas']
-  classpath = configurations.generateRestli
+    main = 'com.linkedin.pegasus.generator.PegasusDataTemplateGenerator'
+    args = ['src/restli/generatedJava', 'src/restli/schemas']
+    classpath = configurations.generateRestli
 }
 
 task restliRestSpecGenerator(dependsOn: [restliTemplateGenerator], type: JavaExec) {
-  doLast {
-    mkdir 'src/restli/generatedRestSpec'
+    doLast {
+        mkdir 'src/restli/generatedRestSpec'
 
-    main = 'com.linkedin.restli.tools.idlgen.RestLiResourceModelExporterCmdLineApp'
-    args = ['-outdir', 'src/restli/generatedRestSpec', '-sourcepath', 'src/restli/java']
-    classpath = configurations.generateRestli
-  }
+        main = 'com.linkedin.restli.tools.idlgen.RestLiResourceModelExporterCmdLineApp'
+        args = ['-outdir', 'src/restli/generatedRestSpec', '-sourcepath', 'src/restli/java']
+        classpath = configurations.generateRestli
+    }
 }
 
 task restli(dependsOn: restliTemplateGenerator) {
-  doLast {}
+    doLast {}
 }
 
 compileJava.dependsOn.add('restli')
 
 lesscss {
-  source = fileTree('src/main/less') {
-    include 'azkaban.less'
-    include 'azkaban-graph.less'
-  }
-  dest = 'build/less'
+    source = fileTree('src/main/less') {
+        include 'azkaban.less'
+        include 'azkaban-graph.less'
+    }
+    dest = 'build/less'
 }
 
 dustjs {
-  source = fileTree('src/main/tl')
-  dest = 'build/dust'
+    source = fileTree('src/main/tl')
+    dest = 'build/dust'
 }
 
 installDist.dependsOn 'lesscss'
 
 distributions {
-  main {
-    contents {
-      from('src/main/bash') {
-        into 'bin'
-        fileMode = 0755
-      }
-      from('../azkaban-common/src/main/bash') {
-        into 'bin'
-        fileMode = 0755
-      }
-      from(configurations.runtime) {
-        into 'lib'
-      }
-      from(jar) {
-        into 'lib'
-      }
-      from ('src/web') {
-        into 'web'
-      }
-      from (lesscss.dest) {
-        into 'web/css'
-      }
-      from (dustjs) {
-        into 'web/js'
-      }
-      from ("${buildDir}/jsToPackage") {
-        into 'web/js'
-      }
-      from (movingJsTojsToPackage) {
-        into 'web/js'
-      }
+    main {
+        contents {
+            from('src/main/bash') {
+                into 'bin'
+                fileMode = 0755
+            }
+            from('../azkaban-common/src/main/bash') {
+                into 'bin'
+                fileMode = 0755
+            }
+            from(configurations.runtime) {
+                into 'lib'
+            }
+            from(jar) {
+                into 'lib'
+            }
+            from('src/web') {
+                into 'web'
+            }
+            from(lesscss.dest) {
+                into 'web/css'
+            }
+            from(dustjs) {
+                into 'web/js'
+            }
+            from("${buildDir}/jsToPackage") {
+                into 'web/js'
+            }
+            from(movingJsTojsToPackage) {
+                into 'web/js'
+            }
+        }
     }
-  }
 }
diff --git a/azkaban-web-server/src/test/java/azkaban/flowtrigger/testplugin/FakeDependencyCheck1.java b/azkaban-web-server/src/test/java/azkaban/flowtrigger/testplugin/FakeDependencyCheck1.java
new file mode 100644
index 0000000..bc3106c
--- /dev/null
+++ b/azkaban-web-server/src/test/java/azkaban/flowtrigger/testplugin/FakeDependencyCheck1.java
@@ -0,0 +1,62 @@
+/*
+ * Copyright 2017 LinkedIn Corp.
+ *
+ * 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 azkaban.flowtrigger.testplugin;
+
+import azkaban.flowtrigger.DependencyCheck;
+import azkaban.flowtrigger.DependencyInstanceCallback;
+import azkaban.flowtrigger.DependencyInstanceConfig;
+import azkaban.flowtrigger.DependencyInstanceContext;
+import azkaban.flowtrigger.DependencyInstanceRuntimeProps;
+import azkaban.flowtrigger.DependencyPluginConfig;
+
+/**
+ * todo chengren311:
+ * az-flow-trigger-dependency-plugin.jar in resource folder is generated from
+ *
+ * @see azkaban.flowtrigger.testplugin.FakeDependencyCheck1
+ * @see azkaban.flowtrigger.testplugin.FakeDependencyCheck2
+ * @see azkaban.flowtrigger.testplugin.FakeDependencyInstanceContext1
+ * @see azkaban.flowtrigger.testplugin.FakeDependencyInstanceContext2
+ *
+ * But we need to find out a way to auto generate this jar while building.
+ */
+public class FakeDependencyCheck1 implements DependencyCheck {
+
+  private DependencyPluginConfig config;
+
+  @Override
+  public DependencyInstanceContext run(final DependencyInstanceConfig config,
+      final DependencyInstanceRuntimeProps runtimeProps,
+      final DependencyInstanceCallback callback) {
+    return new FakeDependencyInstanceContext1(config, runtimeProps, callback);
+  }
+
+  @Override
+  public void shutdown() {
+  }
+
+  @Override
+  public String toString() {
+    return this.config.toString();
+  }
+
+  @Override
+  public void init(final DependencyPluginConfig config) {
+    this.config = config;
+  }
+}
+
diff --git a/azkaban-web-server/src/test/java/azkaban/flowtrigger/testplugin/FakeDependencyCheck2.java b/azkaban-web-server/src/test/java/azkaban/flowtrigger/testplugin/FakeDependencyCheck2.java
new file mode 100644
index 0000000..c5b4eeb
--- /dev/null
+++ b/azkaban-web-server/src/test/java/azkaban/flowtrigger/testplugin/FakeDependencyCheck2.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright 2017 LinkedIn Corp.
+ *
+ * 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 azkaban.flowtrigger.testplugin;
+
+import azkaban.flowtrigger.DependencyCheck;
+import azkaban.flowtrigger.DependencyInstanceCallback;
+import azkaban.flowtrigger.DependencyInstanceConfig;
+import azkaban.flowtrigger.DependencyInstanceContext;
+import azkaban.flowtrigger.DependencyInstanceRuntimeProps;
+import azkaban.flowtrigger.DependencyPluginConfig;
+
+public class FakeDependencyCheck2 implements DependencyCheck {
+
+  private DependencyPluginConfig config;
+
+  @Override
+  public DependencyInstanceContext run(final DependencyInstanceConfig config,
+      final DependencyInstanceRuntimeProps runtimeProps,
+      final DependencyInstanceCallback callback) {
+    return new FakeDependencyInstanceContext2(config, runtimeProps, callback);
+  }
+
+  @Override
+  public void shutdown() {
+  }
+
+  @Override
+  public String toString() {
+    return this.config.toString();
+  }
+
+  @Override
+  public void init(final DependencyPluginConfig config) {
+    this.config = config;
+  }
+}
+
diff --git a/azkaban-web-server/src/test/java/azkaban/flowtrigger/testplugin/FakeDependencyInstanceContext1.java b/azkaban-web-server/src/test/java/azkaban/flowtrigger/testplugin/FakeDependencyInstanceContext1.java
new file mode 100644
index 0000000..67893ca
--- /dev/null
+++ b/azkaban-web-server/src/test/java/azkaban/flowtrigger/testplugin/FakeDependencyInstanceContext1.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright 2017 LinkedIn Corp.
+ *
+ * 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 azkaban.flowtrigger.testplugin;
+
+import azkaban.flowtrigger.DependencyInstanceCallback;
+import azkaban.flowtrigger.DependencyInstanceConfig;
+import azkaban.flowtrigger.DependencyInstanceContext;
+import azkaban.flowtrigger.DependencyInstanceRuntimeProps;
+
+@SuppressWarnings("FutureReturnValueIgnored")
+public class FakeDependencyInstanceContext1 implements DependencyInstanceContext {
+
+  public FakeDependencyInstanceContext1(final DependencyInstanceConfig config,
+      final DependencyInstanceRuntimeProps runtimeProps,
+      final DependencyInstanceCallback callback) {
+  }
+
+  @Override
+  public void cancel() {
+  }
+}
diff --git a/azkaban-web-server/src/test/java/azkaban/flowtrigger/testplugin/FakeDependencyInstanceContext2.java b/azkaban-web-server/src/test/java/azkaban/flowtrigger/testplugin/FakeDependencyInstanceContext2.java
new file mode 100644
index 0000000..a6842ef
--- /dev/null
+++ b/azkaban-web-server/src/test/java/azkaban/flowtrigger/testplugin/FakeDependencyInstanceContext2.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright 2017 LinkedIn Corp.
+ *
+ * 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 azkaban.flowtrigger.testplugin;
+
+import azkaban.flowtrigger.DependencyInstanceCallback;
+import azkaban.flowtrigger.DependencyInstanceConfig;
+import azkaban.flowtrigger.DependencyInstanceContext;
+import azkaban.flowtrigger.DependencyInstanceRuntimeProps;
+
+@SuppressWarnings("FutureReturnValueIgnored")
+public class FakeDependencyInstanceContext2 implements DependencyInstanceContext {
+
+  public FakeDependencyInstanceContext2(final DependencyInstanceConfig config,
+      final DependencyInstanceRuntimeProps runtimeProps,
+      final DependencyInstanceCallback callback) {
+  }
+
+  @Override
+  public void cancel() {
+  }
+}
diff --git a/azkaban-web-server/src/test/resources/az-flow-trigger-dependency-plugin.jar b/azkaban-web-server/src/test/resources/az-flow-trigger-dependency-plugin.jar
index 7198f75..7204be4 100644
Binary files a/azkaban-web-server/src/test/resources/az-flow-trigger-dependency-plugin.jar and b/azkaban-web-server/src/test/resources/az-flow-trigger-dependency-plugin.jar differ
diff --git a/azkaban-web-server/src/test/resources/dependencyplugin/test/dependency.properties b/azkaban-web-server/src/test/resources/dependencyplugin/test/dependency.properties
index c83e29a..25cd94e 100644
--- a/azkaban-web-server/src/test/resources/dependencyplugin/test/dependency.properties
+++ b/azkaban-web-server/src/test/resources/dependencyplugin/test/dependency.properties
@@ -1,5 +1,5 @@
 kafka.url=123
 kafka.port=1234
 #required
-dependency.class=azkaban.testplugin.TestDependencyCheck
+dependency.class=azkaban.flowtrigger.testplugin.FakeDependencyCheck1
 dependency.classpath=src/test/resources/az-flow-trigger-dependency-plugin.jar
\ No newline at end of file
diff --git a/azkaban-web-server/src/test/resources/dependencyplugin/test2/dependency.properties b/azkaban-web-server/src/test/resources/dependencyplugin/test2/dependency.properties
index a32a45d..0b6dc47 100644
--- a/azkaban-web-server/src/test/resources/dependencyplugin/test2/dependency.properties
+++ b/azkaban-web-server/src/test/resources/dependencyplugin/test2/dependency.properties
@@ -1,4 +1,4 @@
 hdfsnamenode=123
 hdfsurl=1234
-dependency.class=azkaban.testplugin2.TestDependencyCheck2
+dependency.class=azkaban.flowtrigger.testplugin.FakeDependencyCheck2
 dependency.classpath=src/test/resources/az-flow-trigger-dependency-plugin.jar

settings.gradle 1(+1 -0)

diff --git a/settings.gradle b/settings.gradle
index 1b44194..dae347c 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -25,4 +25,5 @@ include 'azkaban-exec-server'
 include 'azkaban-hadoop-security-plugin'
 include 'azkaban-solo-server'
 include 'azkaban-web-server'
+include 'az-flow-trigger-dependency-plugin'
 include 'test'