You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by cz...@apache.org on 2010/10/18 10:47:12 UTC

svn commit: r1023689 - in /sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event: impl/jobs/ impl/jobs/console/ impl/jobs/jcr/ impl/jobs/queues/ jobs/

Author: cziegeler
Date: Mon Oct 18 08:47:12 2010
New Revision: 1023689

URL: http://svn.apache.org/viewvc?rev=1023689&view=rev
Log:
Improve webconsole layout and add restart method

Modified:
    sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/DefaultJobManager.java
    sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/JobEvent.java
    sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/console/WebConsolePlugin.java
    sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/jcr/JCRJobEvent.java
    sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/jcr/PersistenceHandler.java
    sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/queues/AbstractJobQueue.java
    sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/jobs/JobManager.java

Modified: sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/DefaultJobManager.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/DefaultJobManager.java?rev=1023689&r1=1023688&r2=1023689&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/DefaultJobManager.java (original)
+++ sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/DefaultJobManager.java Mon Oct 18 08:47:12 2010
@@ -674,4 +674,39 @@ public class DefaultJobManager
             }
         }
     }
+
+    /**
+     * @see org.apache.sling.event.jobs.JobManager#restart()
+     */
+    public void restart() {
+        // let's rename/close all queues first
+        synchronized ( this ) {
+            final List<AbstractJobQueue> queues = new ArrayList<AbstractJobQueue>(this.queues.values());
+            for(final AbstractJobQueue queue : queues ) {
+                // remove the queue with the old name
+                this.queues.remove(queue.getName());
+                // check if we can close or have to rename
+                queue.markForCleanUp();
+                if ( queue.isMarkedForCleanUp() ) {
+                    // close
+                    queue.close();
+                } else {
+                    // notify queue
+                    queue.rename(queue.getName() + "<outdated>");
+                    // readd with new name
+                    this.queues.put(queue.getName(), queue);
+                }
+            }
+        }
+        // reset statistics
+        this.reset();
+        // restart all jobs - we first copy all of them
+        final List<JobEvent> jobs;
+        synchronized ( this.allEvents ) {
+            jobs = new ArrayList<JobEvent>(this.allEvents.values());
+        }
+        for(final JobEvent job : jobs) {
+            job.restart();
+        }
+    }
 }

Modified: sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/JobEvent.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/JobEvent.java?rev=1023689&r1=1023688&r2=1023689&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/JobEvent.java (original)
+++ sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/JobEvent.java Mon Oct 18 08:47:12 2010
@@ -43,6 +43,7 @@ public abstract class JobEvent {
     public abstract void finished();
     public abstract boolean reschedule();
     public abstract boolean remove();
+    public abstract void restart();
 
     @Override
     public int hashCode() {

Modified: sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/console/WebConsolePlugin.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/console/WebConsolePlugin.java?rev=1023689&r1=1023688&r2=1023689&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/console/WebConsolePlugin.java (original)
+++ sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/console/WebConsolePlugin.java Mon Oct 18 08:47:12 2010
@@ -133,6 +133,8 @@ public class WebConsolePlugin extends Ht
                     msg = this.getQueueErrorMessage(req, "reset");
                 }
             }
+        } else if ( "restart".equals(cmd) ) {
+            this.jobManager.restart();
         } else if ( "dropall".equals(cmd) ) {
             final Queue q = this.getQueue(req);
             if ( q != null ) {
@@ -159,9 +161,24 @@ public class WebConsolePlugin extends Ht
         final String msg = req.getParameter("message");
         final PrintWriter pw = res.getWriter();
 
+        pw.println("<form method='POST' name='eventingcmd'>" +
+        		     "<input type='hidden' name='action' value=''/>"+
+                     "<input type='hidden' name='queue' value=''/>" +
+                   "</form>");
+        pw.println("<script type='text/javascript'>");
+        pw.println("function eventingsubmit(action, queue) {" +
+                   " if ( action == 'restart' ) {" +
+                   "   if ( !confirm('Do you really want to restart the eventing?') ) { return; }" +
+                   " }" +
+                   " document.forms['eventingcmd'].action.value = action;" +
+                   " document.forms['eventingcmd'].queue.value = queue;" +
+                   " document.forms['eventingcmd'].submit();" +
+                   "} </script>");
+
         pw.printf("<p class='statline ui-state-highlight'>Apache Sling Eventing%s%n</p>", msg != null ? " : " + msg : "");
         pw.println("<div class='ui-widget-header ui-corner-top buttonGroup'>");
         pw.println("<span style='float: left; margin-left: 1em'>Apache Sling Eventing: Overall Statistics</span>");
+        this.printForm(pw, null, "Restart!", "restart");
         this.printForm(pw, null, "Reset Stats", "reset");
         pw.println("</div>");
 
@@ -343,11 +360,9 @@ public class WebConsolePlugin extends Ht
     private void printForm(final PrintWriter pw,
             final Queue q,
             final String buttonLabel,
-            final String hiddenValue) {
-        pw.printf("<form method='POST' name='%s'><input type='hidden' name='action' value='%s'/>"+
-                "<input type='hidden' name='queue' value='%s'/>" +
-                "<button class='ui-state-default ui-corner-all' onclick='javascript:document.forms[\"%s\"].submit();'>" +
-                "%s</button></form>", hiddenValue, hiddenValue, (q != null ? q.getName() : ""), hiddenValue, buttonLabel);
+            final String cmd) {
+        pw.printf("<button class='ui-state-default ui-corner-all' onclick='javascript:eventingsubmit(\"%s\", \"%s\");'>" +
+                "%s</button>", cmd, (q != null ? q.getName() : ""), buttonLabel);
     }
 
     /** Configuration printer for the web console. */

Modified: sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/jcr/JCRJobEvent.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/jcr/JCRJobEvent.java?rev=1023689&r1=1023688&r2=1023689&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/jcr/JCRJobEvent.java (original)
+++ sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/jcr/JCRJobEvent.java Mon Oct 18 08:47:12 2010
@@ -58,4 +58,9 @@ public class JCRJobEvent extends JobEven
     public boolean remove() {
         return this.handler.remove(this.uniqueId);
     }
+
+    @Override
+    public void restart() {
+        this.handler.restart(this);
+    }
 }
\ No newline at end of file

Modified: sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/jcr/PersistenceHandler.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/jcr/PersistenceHandler.java?rev=1023689&r1=1023688&r2=1023689&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/jcr/PersistenceHandler.java (original)
+++ sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/jcr/PersistenceHandler.java Mon Oct 18 08:47:12 2010
@@ -918,6 +918,23 @@ public class PersistenceHandler implemen
     }
 
     /**
+     * Try to restart the job
+     */
+    public void restart(final JobEvent info) {
+        final String path = this.getNodePath(info.uniqueId);
+        synchronized ( this.backgroundLock ) {
+            if ( this.running ) {
+                try {
+                    final Node eventNode = (Node) this.backgroundSession.getItem(path);
+                    this.tryToLoadJob(eventNode, this.unloadedJobs);
+                } catch (RepositoryException re) {
+                    this.ignoreException(re);
+                }
+            }
+        }
+    }
+
+    /**
      * Unlock the node for the event
      */
     public void unlock(final JobEvent info) {

Modified: sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/queues/AbstractJobQueue.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/queues/AbstractJobQueue.java?rev=1023689&r1=1023688&r2=1023689&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/queues/AbstractJobQueue.java (original)
+++ sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/queues/AbstractJobQueue.java Mon Oct 18 08:47:12 2010
@@ -165,6 +165,9 @@ public abstract class AbstractJobQueue
             public void finished() {
                 // dummy impl
             }
+            public void restart() {
+                // dummy impl
+            }
             public boolean remove() { return true; }
             public boolean reschedule() { return false; }
             });

Modified: sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/jobs/JobManager.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/jobs/JobManager.java?rev=1023689&r1=1023688&r2=1023689&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/jobs/JobManager.java (original)
+++ sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/jobs/JobManager.java Mon Oct 18 08:47:12 2010
@@ -103,4 +103,11 @@ public interface JobManager {
      * @param jobId The unique identifer as found in the property {@link JobUtil#JOB_ID}.
      */
     void forceRemoveJob(String jobId);
+
+    /**
+     * Restart the job manager.
+     * This method restarts the job manager and all queues - currently processed jobs will be finished.
+     * The job manager should only be restarted if really necessary!
+     */
+    void restart();
 }