Author: michiel
Date: 2009-06-05 18:40:29 +0200 (Fri, 05 Jun 2009)
New Revision: 35794
Added:
speeltuin/mihxil/streams/src/main/webapp/mmbase/components/streams/test_upload.jspx
Modified:
speeltuin/mihxil/streams/src/main/java/org/mmbase/streams/CreateCachesProcessor.java
speeltuin/mihxil/streams/src/main/java/org/mmbase/streams/transcoders/InfiniteTranscoder.java
speeltuin/mihxil/streams/src/main/resources/org/mmbase/config/builders/streams/streamsources.fields.xml
speeltuin/mihxil/streams/src/main/resources/org/mmbase/config/builders/streams/streamsources.xml
speeltuin/mihxil/streams/src/main/resources/org/mmbase/config/components/streams.xml
speeltuin/mihxil/streams/src/main/resources/org/mmbase/config/functions/streams.xml
speeltuin/mihxil/streams/src/main/webapp/mmbase/components/streams/alljobs.jspx
speeltuin/mihxil/streams/src/main/webapp/mmbase/components/streams/myjobs.jspx
speeltuin/mihxil/streams/src/main/webapp/mmbase/components/streams/upload.jspx
Log:
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 15:22:47 UTC (rev 35793)
+++
speeltuin/mihxil/streams/src/main/java/org/mmbase/streams/CreateCachesProcessor.java
2009-06-05 16:40:29 UTC (rev 35794)
@@ -168,6 +168,8 @@
NodeQuery q = caches.createQuery();
Queries.addConstraint(q, Queries.createConstraint(q, "id",
FieldCompareConstraint.EQUAL, node));
Queries.addConstraint(q, Queries.createConstraint(q, "key",
FieldCompareConstraint.EQUAL, t.getKey()));
+
+ LOG.service("Executing " + q.toSql());
NodeList nodes = caches.getList(q);
Node resultNode;
if (nodes.size() > 0) {
@@ -195,13 +197,13 @@
- private static final Set<Job> runningJobs =
Collections.synchronizedSet(new HashSet<Job>());
+ private static final Map<Integer, Job> runningJobs =
Collections.synchronizedMap(new LinkedHashMap<Integer, Job>());
public static Set<Job> myJobs(UserContext u) {
- Set<Job> myjobs = new HashSet<Job>();
+ Set<Job> myjobs = new LinkedHashSet<Job>();
synchronized(runningJobs) {
- for (Job j : runningJobs) {
+ for (Job j : runningJobs.values()) {
if (j.user.equals(u.getIdentifier())) {
myjobs.add(j);
}
@@ -209,14 +211,38 @@
}
return myjobs;
}
- public static Set<Job> runningJobs() {
- return Collections.unmodifiableSet(runningJobs);
+ public static Collection<Job> runningJobs() {
+ return Collections.unmodifiableCollection(runningJobs.values());
}
+ 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)) {
+ String message = "Canceled " + job.future;
+ job.logger.info(message);
+ runningJobs.remove(node.getNumber());
+ return message;
+ } else {
+ return "Could not cancel " + job;
+ }
+ }
+ }
+
+
private Job createJob(final Node node, final Node mediaprovider, final
Node mediafragment, final ChainedLogger logger) {
- final Job thisJob = new Job(node.getCloud().getUser(), logger,
list.size());
- runningJobs.add(thisJob);
+
+ Job job = runningJobs.get(node.getNumber());
+ if (job != null) {
+ // already running
+ return null;
+ }
+ final Job thisJob = new Job(node, logger, list.size());
+
+ runningJobs.put(node.getNumber(), thisJob);
thisJob.setFuture(transcoderExecutor.submit(new Callable<Integer>() {
public Integer call() {
int result = 0;
@@ -302,7 +328,7 @@
}
} finally {
logger.info("READY " + result);
- runningJobs.remove(thisJob);
+ runningJobs.remove(thisJob.getNodeNumber());
}
return result;
@@ -322,26 +348,24 @@
ThreadPools.scheduler.schedule(new Runnable() {
public void run() {
if (ntCloud.hasNode(node.getNumber())) {
- final ChainedLogger logger = new
ChainedLogger(LOG);
- node.getStringValue("title"); // This
triggers RelatedField$Creator to create a
- // mediafragment if it does not yet exist
- Node mediafragment =
node.getNodeValue("mediafragment");
- Node mediaprovider =
node.getNodeValue("mediaprovider");
- if (mediaprovider == null) {
- mediaprovider =
Casting.toNode(node.getNodeManager().getField("mediaprovider").getDataType().getDefaultValue(),
node.getCloud());
- }
+ 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 + " was
changed. Triggering caches for " + list + " Mediaframent " + mediafragment);
+ LOG.info("Field '" + field.getName() + " was
changed. Triggering caches for " + list + " Mediaframent " + mediafragment);
- final Job thisJob =
createJob(ntCloud.getNode(node.getNumber()),
-
ntCloud.getNode(mediaprovider.getNumber()),
-
ntCloud.getNode(mediafragment.getNumber()), logger);
+ 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() ==
node.getNumber() && event.getType() == Event.TYPE_DELETE) {
+ 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());
}
@@ -351,6 +375,7 @@
return "Job canceler for " +
node.getNumber();
}
});
+ }
} else {
LOG.warn("Node " + node.getNumber() + " is not
real.");
}
@@ -383,19 +408,24 @@
}
}
+
+ private static long lastJobNumber = 0;
public class Job {
private final String user;
+ private final int nodeNumber;
private final BufferedLogger logger;
private final int size;
+ private final long number = lastJobNumber++;
- private int busy = 0;;
+ private int busy = 0;
private Future<Integer> future;
private Transcoder transcoder;
- public Job(UserContext u, ChainedLogger chain, int s) {
- user = u.getIdentifier();
+ public Job(Node node, ChainedLogger chain, int s) {
+ user = node.getCloud().getUser().getIdentifier();
+ nodeNumber = node.getNumber();
logger = new BufferedLogger();
logger.setLevel(Level.DEBUG);
logger.setMaxSize(100);
@@ -422,10 +452,20 @@
public String getUser() {
return user;
}
+ public long getNumber() {
+ return number;
+ }
+ public int getNodeNumber() {
+ return nodeNumber;
+ }
@Override
public String toString() {
- return user + ":" + transcoder + ":" + getProgress();
+ if (transcoder == null) {
+ return number + ":" + user + ":SCHEDULED:" + list;
+ } else {
+ return number + ": " + user + ":" + transcoder + ":" +
getProgress();
+ }
}
}
Modified:
speeltuin/mihxil/streams/src/main/java/org/mmbase/streams/transcoders/InfiniteTranscoder.java
===================================================================
---
speeltuin/mihxil/streams/src/main/java/org/mmbase/streams/transcoders/InfiniteTranscoder.java
2009-06-05 15:22:47 UTC (rev 35793)
+++
speeltuin/mihxil/streams/src/main/java/org/mmbase/streams/transcoders/InfiniteTranscoder.java
2009-06-05 16:40:29 UTC (rev 35794)
@@ -40,7 +40,7 @@
}
LOG.debug("Logging to " + log);
- log.service("" + (seq++) + " " + in + " -> " + out);
+ log.debug("" + (seq++) + " " + in + " -> " + out);
}
}
Modified:
speeltuin/mihxil/streams/src/main/resources/org/mmbase/config/builders/streams/streamsources.fields.xml
===================================================================
---
speeltuin/mihxil/streams/src/main/resources/org/mmbase/config/builders/streams/streamsources.fields.xml
2009-06-05 15:22:47 UTC (rev 35793)
+++
speeltuin/mihxil/streams/src/main/resources/org/mmbase/config/builders/streams/streamsources.fields.xml
2009-06-05 16:40:29 UTC (rev 35794)
@@ -41,7 +41,6 @@
</datatype>
</field>
-
<xi:include href="mediaprovider.field.xml" />
</fieldlist>
Modified:
speeltuin/mihxil/streams/src/main/resources/org/mmbase/config/builders/streams/streamsources.xml
===================================================================
---
speeltuin/mihxil/streams/src/main/resources/org/mmbase/config/builders/streams/streamsources.xml
2009-06-05 15:22:47 UTC (rev 35793)
+++
speeltuin/mihxil/streams/src/main/resources/org/mmbase/config/builders/streams/streamsources.xml
2009-06-05 16:40:29 UTC (rev 35794)
@@ -16,6 +16,7 @@
<xi:include
href="http://www.mmbase.org/builders/media/mediasources.virtual.fields.xml" />
<xi:include
href="http://www.mmbase.org/builders/media/mediasources.main.virtual.fields.xml"
/>
+
<xi:include href="streamsources.fields.xml" />
<xi:include href="streamsources.functions.xml" />
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 15:22:47 UTC (rev 35793)
+++
speeltuin/mihxil/streams/src/main/resources/org/mmbase/config/components/streams.xml
2009-06-05 16:40:29 UTC (rev 35794)
@@ -14,6 +14,10 @@
<dependency component="media" version="1" />
+ <action name="cancel_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">
@@ -51,7 +55,9 @@
<block name="alljobs"
classification="mmbase.streams"
mimetype="text/html">
- <body jsp="alljobs.jspx" />
+ <body jsp="alljobs.jspx">
+ <param name="cancel" />
+ </body>
</block>
<block name="upload"
@@ -61,4 +67,10 @@
<body jsp="upload.jspx" />
</block>
+ <block name="test_upload"
+ classification="mmbase.streams"
+ mimetype="text/html">
+ <body jsp="test_upload.jspx" />
+ </block>
+
</component>
Modified:
speeltuin/mihxil/streams/src/main/resources/org/mmbase/config/functions/streams.xml
===================================================================
---
speeltuin/mihxil/streams/src/main/resources/org/mmbase/config/functions/streams.xml
2009-06-05 15:22:47 UTC (rev 35793)
+++
speeltuin/mihxil/streams/src/main/resources/org/mmbase/config/functions/streams.xml
2009-06-05 16:40:29 UTC (rev 35794)
@@ -17,4 +17,11 @@
<method>runningJobs</method>
</function>
+ <function name="cancelJob">
+ <type>class</type>
+ <class>org.mmbase.streams.CreateCachesProcessor</class>
+ <method>cancelJob</method>
+ <param name="node" type="org.mmbase.bridge.Node" />
+ </function>
+
</functionset>
Modified:
speeltuin/mihxil/streams/src/main/webapp/mmbase/components/streams/alljobs.jspx
===================================================================
---
speeltuin/mihxil/streams/src/main/webapp/mmbase/components/streams/alljobs.jspx
2009-06-05 15:22:47 UTC (rev 35793)
+++
speeltuin/mihxil/streams/src/main/webapp/mmbase/components/streams/alljobs.jspx
2009-06-05 16:40:29 UTC (rev 35794)
@@ -8,11 +8,24 @@
xmlns:mm="http://www.mmbase.org/mmbase-taglib-2.0">
<jsp:output omit-xml-declaration="true" />
+ <mm:import externid="cancel" />
+ <c:if test="${! empty cancel}">
+ <mm:function set="streams" name="cancelJob" referids="can...@node">
+ <p>${_}</p>
+ </mm:function>
+ </c:if>
+
<ul>
- <mm:listfunction set="streams" name="runningJobs">
+ <mm:listfunction set="streams" name="runningJobs" id="job">
<li>
- <span>${_.transcoder} (${_.progress})</span>
+ <span>${_} (${_.progress}). Node ${_.nodeNumber}.</span>
+ <mm:may action="cancel_jobs">
+ <mm:link>
+ <mm:param name="cancel">${job.nodeNumber}</mm:param>
+ <a href="${_}">Cancel this job</a>
+ </mm:link>
+ </mm:may>
<p>
<span class="in">${_.transcoder.in}</span>
<jsp:text> -&gt; </jsp:text>
Modified:
speeltuin/mihxil/streams/src/main/webapp/mmbase/components/streams/myjobs.jspx
===================================================================
---
speeltuin/mihxil/streams/src/main/webapp/mmbase/components/streams/myjobs.jspx
2009-06-05 15:22:47 UTC (rev 35793)
+++
speeltuin/mihxil/streams/src/main/webapp/mmbase/components/streams/myjobs.jspx
2009-06-05 16:40:29 UTC (rev 35794)
@@ -12,7 +12,7 @@
<ul>
<mm:listfunction set="streams" name="myJobs">
<li>
- <span>${_.transcoder} (${_.progress})</span>
+ <span>${_} ${_.transcoder} (${_.progress})</span>
<p>
<span class="in">${_.transcoder.in}</span>
<jsp:text> -&gt; </jsp:text>
Added:
speeltuin/mihxil/streams/src/main/webapp/mmbase/components/streams/test_upload.jspx
===================================================================
---
speeltuin/mihxil/streams/src/main/webapp/mmbase/components/streams/test_upload.jspx
(rev 0)
+++
speeltuin/mihxil/streams/src/main/webapp/mmbase/components/streams/test_upload.jspx
2009-06-05 16:40:29 UTC (rev 35794)
@@ -0,0 +1,37 @@
+<div
+ class="mm_c c_streams b_upload ${requestScope.componentClassName}"
+ id="${requestScope.componentId}"
+ xmlns:c="http://java.sun.com/jsp/jstl/core"
+ xmlns:mm-res="urn:jsptagdir:/WEB-INF/tags/mm/resources"
+ xmlns:fn="http://java.sun.com/jsp/jstl/functions"
+ xmlns:jsp="http://java.sun.com/JSP/Page"
+ xmlns:fmt="http://java.sun.com/jsp/jstl/fmt"
+ xmlns:mm="http://www.mmbase.org/mmbase-taglib-2.0">
+
+ <jsp:output omit-xml-declaration="true" />
+ <mm:cloud method="asis" id="cloud">
+ <mm:form commitonclose="false">
+ <mm:createnode id="newsource" type="blob_on_disk" commitonclose="false">
+ <mm:fieldlist fields="url" id="field">
+ <mm:fieldinfo type="input" />
+ <mm:fieldinfo type="errors" />
+ </mm:fieldlist>
+ </mm:createnode>
+ <input type="submit" name="submit" />
+ <mm:import externid="submit" />
+ <mm:present referid="submit">
+ <mm:valid>
+ <mm:commit />
+ <mm:import id="committed" />
+ <mm:node number="${newsource}" cloud="cloud">
+ <p>Submitted ${_node} ${_node.url}</p>
+ </mm:node>
+ </mm:valid>
+ </mm:present>
+ <mm:notpresent referid="committed">
+ <mm:cancel />
+ </mm:notpresent>
+ </mm:form>
+ </mm:cloud>
+
+</div>
Modified:
speeltuin/mihxil/streams/src/main/webapp/mmbase/components/streams/upload.jspx
===================================================================
---
speeltuin/mihxil/streams/src/main/webapp/mmbase/components/streams/upload.jspx
2009-06-05 15:22:47 UTC (rev 35793)
+++
speeltuin/mihxil/streams/src/main/webapp/mmbase/components/streams/upload.jspx
2009-06-05 16:40:29 UTC (rev 35794)
@@ -10,16 +10,17 @@
<jsp:output omit-xml-declaration="true" />
<mm:import externid="fields">title,subtitle,intro</mm:import>
- <mm:cloud method="asis">
+ <mm:cloud method="asis" id="cloud">
<mm:maycreate type="streamsources">
<script type="text/javascript">
- <jsp:text>Widgets.prototype.labelsToInputs(".c_streams.b_upload
label", { emptyisuntouched: true });</jsp:text>
+ <jsp:text>//Widgets.prototype.labelsToInputs(".c_streams.b_upload
label", { emptyisuntouched: true });</jsp:text>
</script>
<mm:form>
<mm:createnode id="newsource" type="streamsources"
commitonclose="false">
<mm:fieldlist fields="url" id="urlfield">
<mm:fieldinfo type="input" />
+ <mm:fieldinfo type="errors" />
</mm:fieldlist>
<mm:fieldlist fields="${fields}" id="field">
<mm:fieldinfo type="forid">
@@ -40,12 +41,21 @@
<mm:present referid="submit">
<mm:valid>
<mm:commit />
- <p>Submitted ${newsource} ${newsource.url}</p>
+ <mm:import id="committed" />
+ <mm:node number="${newsource}" cloud="cloud">
+ <p>Submitted ${_node} URL: ${_node.url} FS: ${_node.filesize}</p>
+ </mm:node>
+
</mm:valid>
</mm:present>
+ <mm:notpresent referid="committed">
+ <mm:cancel />
+ </mm:notpresent>
</mm:form>
+ <!--
<h2>Jobs</h2>
<mm:component name="streams" block="myjobs" />
+ -->
</mm:maycreate>
<mm:maycreate type="streamsources" inverse="true">
<fmt:message key="maynot" />
_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs