azkaban-developers
Changes
.gitignore 3(+2 -1)
Details
.gitignore 3(+2 -1)
diff --git a/.gitignore b/.gitignore
index 2f68112..ec34c0c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -13,7 +13,8 @@ Gemfile.lock
vendor/
**/velocity.log
-# temp directory is ignored so that it can be used to store temporary files such as local testing configurations.
+# local & temp directories are ignored so that they can be used to store temporary files such as local testing configurations.
+local/
temp/
# Intellij files
diff --git a/azkaban-common/src/main/java/azkaban/Constants.java b/azkaban-common/src/main/java/azkaban/Constants.java
index a1d2d3a..3ecaf78 100644
--- a/azkaban-common/src/main/java/azkaban/Constants.java
+++ b/azkaban-common/src/main/java/azkaban/Constants.java
@@ -37,6 +37,7 @@ public class Constants {
public static final String AZKABAN_PRIVATE_PROPERTIES_FILE = "azkaban.private.properties";
public static final String DEFAULT_CONF_PATH = "conf";
public static final String AZKABAN_EXECUTOR_PORT_FILENAME = "executor.port";
+ public static final String AZKABAN_EXECUTOR_PORT_FILE = "executor.portfile";
public static final String AZKABAN_SERVLET_CONTEXT_KEY = "azkaban_app";
diff --git a/azkaban-exec-server/src/main/java/azkaban/execapp/AzkabanExecutorServer.java b/azkaban-exec-server/src/main/java/azkaban/execapp/AzkabanExecutorServer.java
index 18e1a4d..49fa145 100644
--- a/azkaban-exec-server/src/main/java/azkaban/execapp/AzkabanExecutorServer.java
+++ b/azkaban-exec-server/src/main/java/azkaban/execapp/AzkabanExecutorServer.java
@@ -273,8 +273,10 @@ public class AzkabanExecutorServer {
private void dumpPortToFile() throws IOException {
// By default this should write to the working directory
+ final String portFile = this.props
+ .getString(Constants.AZKABAN_EXECUTOR_PORT_FILE, AZKABAN_EXECUTOR_PORT_FILENAME);
try (BufferedWriter writer = Files
- .newBufferedWriter(Paths.get(AZKABAN_EXECUTOR_PORT_FILENAME), StandardCharsets.UTF_8)) {
+ .newBufferedWriter(Paths.get(portFile), StandardCharsets.UTF_8)) {
writer.write(String.valueOf(getPort()));
writer.write("\n");
} catch (final IOException e) {
diff --git a/azkaban-solo-server/src/main/java/azkaban/soloserver/AzkabanSingleServer.java b/azkaban-solo-server/src/main/java/azkaban/soloserver/AzkabanSingleServer.java
index 60f65f4..f920705 100644
--- a/azkaban-solo-server/src/main/java/azkaban/soloserver/AzkabanSingleServer.java
+++ b/azkaban-solo-server/src/main/java/azkaban/soloserver/AzkabanSingleServer.java
@@ -30,6 +30,9 @@ import azkaban.webapp.AzkabanWebServerModule;
import com.google.inject.Guice;
import javax.inject.Inject;
import com.google.inject.Injector;
+import java.io.File;
+import java.io.IOException;
+import org.apache.commons.io.FileUtils;
import org.apache.log4j.Logger;
@@ -47,9 +50,13 @@ public class AzkabanSingleServer {
this.executor = executor;
}
- public static void main(final String[] args) throws Exception {
+ public static void main(String[] args) throws Exception {
log.info("Starting Azkaban Server");
+ if (args.length == 0) {
+ args = prepareDefaultConf();
+ }
+
final Props props = AzkabanServer.loadProps(args);
if (props == null) {
log.error("Properties not found. Need it to connect to the db.");
@@ -76,6 +83,20 @@ public class AzkabanSingleServer {
injector.getInstance(AzkabanSingleServer.class).launch();
}
+ /**
+ * To enable "run out of the box for testing".
+ */
+ private static String[] prepareDefaultConf() throws IOException {
+ final File templateFolder = new File("test/local-conf-templates");
+ final File localConfFolder = new File("local/conf");
+ if (!localConfFolder.exists()) {
+ FileUtils.copyDirectory(templateFolder, localConfFolder.getParentFile());
+ log.info("Copied local conf templates from " + templateFolder.getAbsolutePath());
+ }
+ log.info("Using conf at " + localConfFolder.getAbsolutePath());
+ return new String[]{"-conf", "local/conf"};
+ }
+
private void launch() throws Exception {
AzkabanWebServer.launch(this.webServer);
log.info("Azkaban Web Server started...");
diff --git a/azkaban-solo-server/src/main/resources/log4j.properties b/azkaban-solo-server/src/main/resources/log4j.properties
index 2db62b2..6a04829 100644
--- a/azkaban-solo-server/src/main/resources/log4j.properties
+++ b/azkaban-solo-server/src/main/resources/log4j.properties
@@ -2,7 +2,7 @@ log4j.rootLogger=INFO, Console
log4j.logger.azkaban=INFO, server
log4j.appender.server=org.apache.log4j.RollingFileAppender
log4j.appender.server.layout=org.apache.log4j.PatternLayout
-log4j.appender.server.File=azkaban-webserver.log
+log4j.appender.server.File=local/azkaban-webserver.log
log4j.appender.server.layout.ConversionPattern=%d{yyyy/MM/dd HH:mm:ss.SSS Z} %p [%c{1}] [Azkaban] %m%n
log4j.appender.server.MaxFileSize=102400MB
log4j.appender.server.MaxBackupIndex=2
diff --git a/test/local-conf-templates/conf/azkaban.properties b/test/local-conf-templates/conf/azkaban.properties
new file mode 100644
index 0000000..5a7e7ee
--- /dev/null
+++ b/test/local-conf-templates/conf/azkaban.properties
@@ -0,0 +1,56 @@
+# Azkaban Personalization Settings
+azkaban.name=Local
+azkaban.label=My Local Azkaban
+azkaban.color=#FF3601
+web.resource.dir=azkaban-web-server/build/install/azkaban-web-server/web
+default.timezone.id=America/Los_Angeles
+# Azkaban UserManager class
+user.manager.class=azkaban.user.XmlUserManager
+user.manager.xml.file=azkaban-solo-server/src/main/resources/conf/azkaban-users.xml
+# Loader for projects
+executor.global.properties=azkaban-solo-server/src/main/resources/conf/global.properties
+azkaban.project.dir=local/projects
+azkaban.execution.dir=local/executions
+executor.portfile=local/executor.port
+# DB
+database.sql.scripts.dir=azkaban-db/src/main/sql
+database.check.version=true
+database.auto.update.tables=true
+#mysql
+#database.type=mysql
+#mysql.port=3306
+#mysql.host=localhost
+#mysql.database=test
+#mysql.numconnections=100
+#mysql.user=
+#mysql.password=
+# h2 db
+database.type=h2
+h2.path=local/h2
+h2.create.tables=true
+# load the commonprivate.properties
+azkaban.jobtype.plugin.dir=azkaban-solo-server/src/main/resources
+# Velocity dev mode
+#velocity.dev.mode=false
+velocity.dev.mode=true
+# Azkaban Jetty server properties. Ignored in tomcat
+jetty.use.ssl=false
+jetty.ssl.port=8043
+jetty.maxThreads=25
+jetty.port=8081
+# Azkaban Executor settings
+executor.port=12321
+executor.maxThreads=50
+executor.flow.threads=30
+# mail settings
+mail.sender=
+mail.host=
+job.failure.email=
+job.success.email=
+lockdown.create.projects=false
+# JMX stats
+jetty.connector.stats=true
+executor.connector.stats=true
+# uncomment to enable inmemory stats for azkaban
+executor.metric.reports=true
+executor.metric.milisecinterval.default=60000