azkaban-developers

Details

diff --git a/azkaban-common/src/main/java/azkaban/utils/SystemMemoryInfo.java b/azkaban-common/src/main/java/azkaban/utils/SystemMemoryInfo.java
index 144530c..f6382bc 100644
--- a/azkaban-common/src/main/java/azkaban/utils/SystemMemoryInfo.java
+++ b/azkaban-common/src/main/java/azkaban/utils/SystemMemoryInfo.java
@@ -31,7 +31,7 @@ public class SystemMemoryInfo {
 
   private static ScheduledExecutorService scheduledExecutorService;
 
-  public static void init() {
+  public static void init(int memCheckInterval) {
     File f = new File(MEMINFO_FILE);
     memCheckEnabled = f.exists() && !f.isDirectory();
     if (memCheckEnabled) {
@@ -39,9 +39,9 @@ public class SystemMemoryInfo {
       readMemoryInfoFile();
 
       //schedule a thread to read it
-      logger.info("Scheduled thread to read /proc/meminfo every 30 seconds");
+      logger.info(String.format("Scheduled thread to read /proc/meminfo every %d seconds", memCheckInterval));
       scheduledExecutorService = Executors.newSingleThreadScheduledExecutor();
-      scheduledExecutorService.scheduleAtFixedRate(new MemoryInfoReader(), 0, 30, TimeUnit.SECONDS);
+      scheduledExecutorService.scheduleAtFixedRate(new MemoryInfoReader(), 0, memCheckInterval, TimeUnit.SECONDS);
     }
   }
 
diff --git a/azkaban-common/src/test/java/azkaban/utils/MemUtilsTest.java b/azkaban-common/src/test/java/azkaban/utils/MemUtilsTest.java
new file mode 100644
index 0000000..68e7235
--- /dev/null
+++ b/azkaban-common/src/test/java/azkaban/utils/MemUtilsTest.java
@@ -0,0 +1,51 @@
+package azkaban.utils;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+public class MemUtilsTest {
+  @Test
+  public void testConversion() {
+    Assert.assertEquals(Utils.parseMemString("1024"), 1L);
+    Assert.assertEquals(Utils.parseMemString("1K"), 1L);
+    Assert.assertEquals(Utils.parseMemString("1M"), 1024L);
+    Assert.assertEquals(Utils.parseMemString("1G"), 1024L * 1024L);
+
+    Assert.assertEquals(Utils.parseMemString("1k"), 1L);
+    Assert.assertEquals(Utils.parseMemString("1m"), 1024L);
+    Assert.assertEquals(Utils.parseMemString("1g"), 1024L * 1024L);
+
+    Assert.assertEquals(Utils.parseMemString("5000"), 4L);
+    Assert.assertEquals(Utils.parseMemString("1024K"), 1024L);
+    Assert.assertEquals(Utils.parseMemString("512M"), 512 * 1024L);
+    Assert.assertEquals(Utils.parseMemString("2G"), 2L * 1024L * 1024L);
+  }
+
+  @Test
+  public void testBadFormat() {
+    badFormatHelper("1KB");
+    badFormatHelper("1MB");
+    badFormatHelper("1GB");
+    
+    badFormatHelper("1kb");
+    badFormatHelper("1mb");
+    badFormatHelper("1gb");
+
+    badFormatHelper("100.5K");
+    badFormatHelper("512.8M");
+    badFormatHelper("0.5G");
+
+    badFormatHelper("100b");
+    badFormatHelper("100f");
+    badFormatHelper("100abcdc");
+  }
+  
+  private void badFormatHelper(String str) {
+    try {
+      Utils.parseMemString(str);
+      Assert.fail("should get a runtime exception");
+    } catch (Exception e) {
+      Assert.assertEquals(e instanceof NumberFormatException, true);
+    }
+  }
+}
diff --git a/azkaban-execserver/src/main/java/azkaban/execapp/AzkabanExecutorServer.java b/azkaban-execserver/src/main/java/azkaban/execapp/AzkabanExecutorServer.java
index 80d2554..d9a4bc0 100644
--- a/azkaban-execserver/src/main/java/azkaban/execapp/AzkabanExecutorServer.java
+++ b/azkaban-execserver/src/main/java/azkaban/execapp/AzkabanExecutorServer.java
@@ -125,7 +125,7 @@ public class AzkabanExecutorServer {
     configureMBeanServer();
     configureMetricReports();
 
-    SystemMemoryInfo.init();
+    SystemMemoryInfo.init(props.getInt("executor.memCheck.interval", 30));
 
     try {
       server.start();