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();
}