Repository: oozie
Updated Branches:
  refs/heads/master 5508ec7a6 -> fca69e955


OOZIE-1671 add an option to limit # of coordinator actions for log retrieval 
(ryota)


Project: http://git-wip-us.apache.org/repos/asf/oozie/repo
Commit: http://git-wip-us.apache.org/repos/asf/oozie/commit/fca69e95
Tree: http://git-wip-us.apache.org/repos/asf/oozie/tree/fca69e95
Diff: http://git-wip-us.apache.org/repos/asf/oozie/diff/fca69e95

Branch: refs/heads/master
Commit: fca69e95571173d93a98d1b910ad2f808fb111a3
Parents: 5508ec7
Author: egashira <[email protected]>
Authored: Fri Feb 21 10:20:30 2014 -0800
Committer: egashira <[email protected]>
Committed: Fri Feb 21 10:20:30 2014 -0800

----------------------------------------------------------------------
 .../java/org/apache/oozie/CoordinatorEngine.java  | 18 ++++++++++++++++--
 .../oozie/TestCoordinatorEngineStreamLog.java     | 18 ++++++++++++++++++
 release-log.txt                                   |  1 +
 webapp/src/main/webapp/oozie-console.js           |  3 ++-
 4 files changed, 37 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/oozie/blob/fca69e95/core/src/main/java/org/apache/oozie/CoordinatorEngine.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/oozie/CoordinatorEngine.java 
b/core/src/main/java/org/apache/oozie/CoordinatorEngine.java
index e7384f1..315a330 100644
--- a/core/src/main/java/org/apache/oozie/CoordinatorEngine.java
+++ b/core/src/main/java/org/apache/oozie/CoordinatorEngine.java
@@ -61,6 +61,9 @@ import com.google.common.annotations.VisibleForTesting;
 
 public class CoordinatorEngine extends BaseEngine {
     private static XLog LOG = XLog.getLog(CoordinatorEngine.class);
+    public final static String COORD_ACTIONS_LOG_MAX_COUNT = 
"oozie.coord.actions.log.max.count";
+    private final static int COORD_ACTIONS_LOG_MAX_COUNT_DEFAULT = 50;
+    private int maxNumActionsForLog;
 
     /**
      * Create a system Coordinator engine, with no user and no group.
@@ -72,6 +75,8 @@ public class CoordinatorEngine extends BaseEngine {
         else {
             LOG.debug("Oozie CoordinatorEngine is using XCommands.");
         }
+        maxNumActionsForLog = Services.get().getConf()
+                .getInt(COORD_ACTIONS_LOG_MAX_COUNT, 
COORD_ACTIONS_LOG_MAX_COUNT_DEFAULT);
     }
 
     /**
@@ -334,6 +339,11 @@ public class CoordinatorEngine extends BaseEngine {
                     }
                 }
 
+                if (actionSet.size() >= maxNumActionsForLog) {
+                    throw new CommandException(ErrorCode.E0302,
+                            "Retrieving log of too many coordinator actions. 
Max count is "
+                                    + maxNumActionsForLog + " actions");
+                }
                 Iterator<String> actionsIterator = actionSet.iterator();
                 StringBuilder orSeparatedActions = new StringBuilder("");
                 boolean orRequired = false;
@@ -379,6 +389,11 @@ public class CoordinatorEngine extends BaseEngine {
                 catch (XException xe) {
                     throw new CommandException(ErrorCode.E0302, "Error in date 
range for coordinator actions", xe);
                 }
+                if(coordActionIdList.size() >= maxNumActionsForLog) {
+                    throw new CommandException(ErrorCode.E0302,
+                            "Retrieving log of too many coordinator actions. 
Max count is "
+                                    + maxNumActionsForLog + " actions");
+                }
                 StringBuilder orSeparatedActions = new StringBuilder("");
                 boolean orRequired = false;
                 for (String coordActionId : coordActionIdList) {
@@ -527,7 +542,6 @@ public class CoordinatorEngine extends BaseEngine {
         }
     }
 
-
     // Parses the filter string (e.g status=RUNNING;status=WAITING) and 
returns a list of status values
     private List<String> parseStatusFilter(String filter) throws 
CoordinatorEngineException {
         List<String> filterList = new ArrayList<String>();
@@ -548,7 +562,7 @@ public class CoordinatorEngine extends BaseEngine {
                             CoordinatorAction.Status.valueOf(statusValue);
                         } catch (IllegalArgumentException ex) {
                             StringBuilder validStatusList = new 
StringBuilder();
-                            for (CoordinatorAction.Status status: 
CoordinatorAction.Status.values()){
+                            for (CoordinatorAction.Status status : 
CoordinatorAction.Status.values()){
                                 validStatusList.append(status.toString()+" ");
                             }
                             // Check for incorrect status value

http://git-wip-us.apache.org/repos/asf/oozie/blob/fca69e95/core/src/test/java/org/apache/oozie/TestCoordinatorEngineStreamLog.java
----------------------------------------------------------------------
diff --git 
a/core/src/test/java/org/apache/oozie/TestCoordinatorEngineStreamLog.java 
b/core/src/test/java/org/apache/oozie/TestCoordinatorEngineStreamLog.java
index dff46ef..5a1cb9b 100644
--- a/core/src/test/java/org/apache/oozie/TestCoordinatorEngineStreamLog.java
+++ b/core/src/test/java/org/apache/oozie/TestCoordinatorEngineStreamLog.java
@@ -212,6 +212,24 @@ public class TestCoordinatorEngineStreamLog extends 
XFsTestCase {
         assertEquals(list.get(1).getCreatedTime().toString(), 
service.startTime.toString());
         assertEquals(list.get(5).getLastModifiedTime().toString(), 
service.endTime.toString());
 
+        // Test 11, testing -scope option with Max Count
+        
Services.get().getConf().setInt(CoordinatorEngine.COORD_ACTIONS_LOG_MAX_COUNT, 
1);
+        ce = createCoordinatorEngine();
+        try {
+            ce.streamLog(jobId, "1-3", RestConstants.JOB_LOG_ACTION, new 
StringWriter(), new HashMap<String, String[]>());
+        } catch (XException e){
+            assertEquals(e.getErrorCode(), ErrorCode.E0302);
+            assertTrue(e.getMessage().indexOf("Retrieving log of too many 
coordinator actions") != -1);
+        }
+
+        // Test 12, testing -date option with Max Count
+        try {
+            ce.streamLog(jobId, DateUtils.formatDateOozieTZ(createdDate) + 
"::" + DateUtils.formatDateOozieTZ(endDate),
+                RestConstants.JOB_LOG_DATE, new StringWriter(),new 
HashMap<String, String[]>());
+        } catch (XException e) {
+            assertEquals(e.getErrorCode(), ErrorCode.E0302);
+            assertTrue(e.getMessage().indexOf("Retrieving log of too many 
coordinator actions") != -1);
+        }
     }
 
     private String runJobsImpl(final CoordinatorEngine ce, int count) throws 
Exception {

http://git-wip-us.apache.org/repos/asf/oozie/blob/fca69e95/release-log.txt
----------------------------------------------------------------------
diff --git a/release-log.txt b/release-log.txt
index 40917d2..3f8b9bb 100644
--- a/release-log.txt
+++ b/release-log.txt
@@ -1,5 +1,6 @@
 -- Oozie 4.1.0 release (trunk - unreleased)
 
+OOZIE-1671 add an option to limit # of coordinator actions for log retrieval 
(ryota)
 OOZIE-1629 EL function in <timeout> is not evaluated properly (ryota)
 OOZIE-1618 dryrun should check variable substitution in workflow.xml 
(bowenzhangusa via rkanter)
 OOZIE-1681 Sqoop sharelib has no hsqldb jar version (Ostap via rkanter)

http://git-wip-us.apache.org/repos/asf/oozie/blob/fca69e95/webapp/src/main/webapp/oozie-console.js
----------------------------------------------------------------------
diff --git a/webapp/src/main/webapp/oozie-console.js 
b/webapp/src/main/webapp/oozie-console.js
index a6c343e..f021ffe 100644
--- a/webapp/src/main/webapp/oozie-console.js
+++ b/webapp/src/main/webapp/oozie-console.js
@@ -70,7 +70,8 @@ function getLogs(url, textArea, shouldParseResponse, 
errorMsg) {
 
                 }
                 if (xhr.status != 200 && xhr.status != 0) {
-                    textArea.getEl().dom.value = "Error :\n" + 
xhr.responseText;
+                    var errorText = 
xhr.getResponseHeader('oozie-error-message');
+                    textArea.getEl().dom.value = "Error :\n" + (errorText ? 
errorText : xhr.responseText);
                 }
             } catch (e) {
             }

Reply via email to