Author: michiel
Date: 2009-06-05 19:18:35 +0200 (Fri, 05 Jun 2009)
New Revision: 35797
Modified:
speeltuin/mihxil/streams/src/main/java/org/mmbase/streams/CreateCachesFunction.java
speeltuin/mihxil/streams/src/main/java/org/mmbase/streams/CreateCachesProcessor.java
speeltuin/mihxil/streams/src/main/resources/org/mmbase/config/components/streams.xml
Log:
Made it possible to retrigger trancodings
Modified:
speeltuin/mihxil/streams/src/main/java/org/mmbase/streams/CreateCachesFunction.java
===================================================================
---
speeltuin/mihxil/streams/src/main/java/org/mmbase/streams/CreateCachesFunction.java
2009-06-05 17:17:32 UTC (rev 35796)
+++
speeltuin/mihxil/streams/src/main/java/org/mmbase/streams/CreateCachesFunction.java
2009-06-05 17:18:35 UTC (rev 35797)
@@ -11,7 +11,9 @@
import org.mmbase.util.functions.*;
import org.mmbase.bridge.*;
-import org.mmbase.datatypes.processors.CommitProcessor;
+import org.mmbase.security.ActionRepository;
+import org.mmbase.datatypes.processors.*;
+import org.mmbase.util.logging.*;
/**
* Retriggers creation of the caches.
@@ -22,20 +24,58 @@
public class CreateCachesFunction extends NodeFunction<Boolean> {
+ private static final Logger LOG =
Logging.getLoggerInstance(CreateCachesFunction.class);
public CreateCachesFunction() {
super("createcaches");
}
+
+ CreateCachesProcessor getCacheCreator(final Field url) {
+ CommitProcessor commitProcessor =
url.getDataType().getCommitProcessor();
+ if (commitProcessor instanceof ChainedCommitProcessor) {
+ ChainedCommitProcessor chain = (ChainedCommitProcessor)
commitProcessor;
+ LOG.info("Lookin in " + chain.getProcessors());
+ for (CommitProcessor cp : chain.getProcessors()) {
+ if (cp instanceof CreateCachesProcessor) {
+ return (CreateCachesProcessor) cp;
+ }
+ }
+ return null;
+ } else {
+ if (commitProcessor instanceof CreateCachesProcessor) {
+ return (CreateCachesProcessor) commitProcessor;
+ } else {
+ return null;
+ }
+ }
+ }
+
@Override
- protected Boolean getFunctionValue(Node node, Parameters parameters) {
- Field url = node.getNodeManager().getField("url");
+ protected Boolean getFunctionValue(final Node node, final Parameters
parameters) {
+ if (node.getCloud().may(ActionRepository.getInstance().get("streams",
"retrigger_jobs"), null)) {
+ LOG.info("Recreating caches for " + node.getNumber());
+ final Field url = node.getNodeManager().getField("url");
- CommitProcessor deleteCaches = url.getDataType().getDeleteProcessor();
- deleteCaches.commit(node, url);
+ {
+ final CommitProcessor deleteCaches =
url.getDataType().getDeleteProcessor();
+ LOG.info("Calling " + deleteCaches);
+ deleteCaches.commit(node, url);
+ }
- CommitProcessor createCaches = url.getDataType().getCommitProcessor();
- createCaches.commit(node, url);
- return true;
+ {
+ final CreateCachesProcessor cc = getCacheCreator(url);
+ if (cc != null) {
+ LOG.info("Calling " + cc);
+
cc.createCaches(node.getCloud().getNonTransactionalCloud(), node);
+ return true;
+ } else {
+ LOG.error("No CreateCachesProcessor in " + url);
+ return false;
+ }
+ }
+ } else {
+ return false;
+ }
}
}
Modified:
speeltuin/mihxil/streams/src/main/java/org/mmbase/streams/CreateCachesProcessor.java
===================================================================
---
speeltuin/mihxil/streams/src/main/java/org/mmbase/streams/CreateCachesProcessor.java
2009-06-05 17:17:32 UTC (rev 35796)
+++
speeltuin/mihxil/streams/src/main/java/org/mmbase/streams/CreateCachesProcessor.java
2009-06-05 17:18:35 UTC (rev 35797)
@@ -15,6 +15,7 @@
import org.mmbase.bridge.NodeList;
import org.mmbase.storage.search.*;
import org.mmbase.security.UserContext;
+import org.mmbase.security.ActionRepository;
import org.mmbase.bridge.util.Queries;
import org.mmbase.util.*;
import org.mmbase.util.xml.*;
@@ -216,19 +217,23 @@
}
public static String cancelJob(Node node) {
- Job job = runningJobs.get(node.getNumber());
- if (job == null) {
- return "No such job";
- } else {
- if (job.future.cancel(true)) {
+ if (node.getCloud().may(ActionRepository.getInstance().get("streams",
"cancel_jobs"), null)) {
+ Job job = runningJobs.get(node.getNumber());
+ if (job == null) {
+ return "No such job";
+ } else {
+ if (job.future.cancel(true)) {
String message = "Canceled " + job.future;
job.logger.info(message);
runningJobs.remove(node.getNumber());
return message;
- } else {
- return "Could not cancel " + job;
+ } else {
+ return "Could not cancel " + job;
+ }
+
}
-
+ } else {
+ return "You may not cancel jobs";
}
}
@@ -340,6 +345,42 @@
}
+ void createCaches(final Cloud ntCloud, final Node node) {
+ if (ntCloud.hasNode(node.getNumber())) {
+ final ChainedLogger logger = new ChainedLogger(LOG);
+ final Node ntNode = ntCloud.getNode(node.getNumber());
+ ntNode.getStringValue("title"); // This triggers
RelatedField$Creator to create a
+ // mediafragment if it does not yet exist
+ final Node mediafragment =
ntCloud.getNode(ntNode.getNodeValue("mediafragment").getNumber());
+ final Node mediaprovider =
ntCloud.getNode(ntNode.getNodeValue("mediaprovider").getNumber());
+
+ LOG.info("Triggering caches for " + list + " Mediaframent " +
mediafragment);
+
+ final Job thisJob = createJob(ntNode,
+ mediaprovider,
+ mediafragment, logger);
+ if (thisJob != null) {
+
+ // If the node happens to be deleted before the future with
cache creations is ready, cancel the future
+ EventManager.getInstance().addEventListener(new
WeakNodeEventListener() {
+ public void notify(NodeEvent event) {
+ if (event.getNodeNumber() == ntNode.getNumber() &&
event.getType() == Event.TYPE_DELETE) {
+ if (thisJob.future.cancel(true)) {
+ logger.info("Canceled " + thisJob.future +
" for " + event.getBuilderName() + " " + event.getNodeNumber());
+ }
+ }
+ }
+ public String toString() {
+ return "Job canceler for " + node.getNumber();
+ }
+ });
+ }
+ } else {
+ LOG.warn("Node " + node.getNumber() + " is not real.");
+ }
+ }
+
+
public void commit(final Node node, final Field field) {
if (node.getNumber() > 0) {
if (node.isChanged(field.getName())) {
@@ -347,38 +388,7 @@
final Cloud ntCloud =
node.getCloud().getNonTransactionalCloud();
ThreadPools.scheduler.schedule(new Runnable() {
public void run() {
- if (ntCloud.hasNode(node.getNumber())) {
- final ChainedLogger logger = new
ChainedLogger(LOG);
- final Node ntNode =
ntCloud.getNode(node.getNumber());
- ntNode.getStringValue("title"); // This
triggers RelatedField$Creator to create a
- // mediafragment if it does not yet exist
- final Node mediafragment =
ntCloud.getNode(ntNode.getNodeValue("mediafragment").getNumber());
- final Node mediaprovider =
ntCloud.getNode(ntNode.getNodeValue("mediaprovider").getNumber());
-
- LOG.info("Field '" + field.getName() + " was
changed. Triggering caches for " + list + " Mediaframent " + mediafragment);
-
- final Job thisJob = createJob(ntNode,
- mediaprovider,
- mediafragment, logger);
- if (thisJob != null) {
-
- // If the node happens to be deleted
before the future with cache creations is ready, cancel the future
-
EventManager.getInstance().addEventListener(new WeakNodeEventListener() {
- public void notify(NodeEvent
event) {
- if (event.getNodeNumber() ==
ntNode.getNumber() && event.getType() == Event.TYPE_DELETE) {
- if
(thisJob.future.cancel(true)) {
- logger.info("Canceled
" + thisJob.future + " for " + event.getBuilderName() + " " +
event.getNodeNumber());
- }
- }
- }
- public String toString() {
- return "Job canceler for " +
node.getNumber();
- }
- });
- }
- } else {
- LOG.warn("Node " + node.getNumber() + " is not
real.");
- }
+ createCaches(ntCloud, node);
}
}, 2, TimeUnit.SECONDS);
} else {
Modified:
speeltuin/mihxil/streams/src/main/resources/org/mmbase/config/components/streams.xml
===================================================================
---
speeltuin/mihxil/streams/src/main/resources/org/mmbase/config/components/streams.xml
2009-06-05 17:17:32 UTC (rev 35796)
+++
speeltuin/mihxil/streams/src/main/resources/org/mmbase/config/components/streams.xml
2009-06-05 17:18:35 UTC (rev 35797)
@@ -18,6 +18,10 @@
<description xml:lang="en">Whether you may cancel jobs</description>
</action>
+ <action name="retrigger_jobs" rank="administrator">
+ <description xml:lang="en">Whether you may cancel jobs</description>
+ </action>
+
<block name="recent"
classification="mmbase.examples:90 mmbase.streams"
mimetype="text/html">
_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs