Hi all, quick mail to discuss a new extension point for the WPS module, a process lifecycle listener.
In the current WPS, between the asynch support, chaining and some extra requirements the full lifecycle is not exactly simple: - a process is submitted and scheduled for execution either in the immediate or asych queues - inputs are parsed from their serialized/xml/remote form into java objects - each process can be served by a separate execution manager (this has been setup to ease integration with Grid systems and external executors in general, systems that act as a wps, can track progress and the like without using the GeoTools infrastructure) - chained processes, which are actually processes declared in the input seciton of another process, get a different treatment to avoid them creating deadlock conditions in the main thread pools e.g., imagine a thread pool serving immediate requests that has 3 threads, and a chain of processes that has 4 chained processes, if we submit it to the same thread pool we get a deadlock (the last process would not find any executor to run into), so the code has a different code path for chained processes that makes them run directly in the same thread as the "parent" process Long story short, the process lifecycle listener could look like this: ProcessLifecycleListener - processSubmitted(ExecuteType request, String executionId, boolean asynchronous, Map<String, Object> inputs, ProcessManager manager) - processCancelled(executionId) - processComplete(executionId, Map<String, Object> outputs) - processFailed(executionId, Exception ex) - chainedProcessSubmitted(ExecuteType request, Map<String, Object> input) - chainedProcessComplete(ExecuteType request, Map<String, Object> output) - chainedProcessFailed(ExecuteType request, Exception ex) For the normal processes the executionId is what links all the requests, but for chained processes instead it's the ExecuteType, the chained portion of request that defines that process, since we have got no execution id... which is ugly. Alternatively I guess we could go for this: ProcessLifecycleListener - processSubmitted(ExecuteType request, String executionId, boolean aysnchronous, boolean chained, Map<String, Object> inputs, ProcessManager manager) - processCancelled(executionId) - processComplete(executionId, Map<String, Object> outputs) - processFailed(executionId, Exception ex) That is, we make it so that the chained processes get a fake execution id, have a flag to inform the listener that the call is actually a chained one, and be done with it. Or one could do the opposite and hide the execution id, and use always the ExecuteType... but that would not be as good imho, executionid is something we expose to the clients so the listener should be aware of it, and it would also make it hard/confusing to tell apart two concurrent requests that actually have the same inputs (unlikely but not impossible). Another thing that one might want for the listener is a progress report, yet that is not there because we do not assume the Geotools process model is the only one possible, and progress is following the same reporting model as WPS, so polling instead of event. All right. So, open to feedback if you have any, otherwise I'll be moving on with the second proposed interface above starting some time tomorrow (as usual I'll let the planet spin once to give everybody an occasion to provide feedback if they wish to). Cheers Andrea -- Ing. Andrea Aime GeoSolutions S.A.S. Tech lead Via Poggio alle Viti 1187 55054 Massarosa (LU) Italy phone: +39 0584 962313 fax: +39 0584 962313 mob: +39 339 8844549 http://www.geo-solutions.it http://geo-solutions.blogspot.com/ http://www.youtube.com/user/GeoSolutionsIT http://www.linkedin.com/in/andreaaime http://twitter.com/geowolf -- Ing. Andrea Aime GeoSolutions S.A.S. Tech lead Via Poggio alle Viti 1187 55054 Massarosa (LU) Italy phone: +39 0584 962313 fax: +39 0584 962313 mob: +39 339 8844549 http://www.geo-solutions.it http://geo-solutions.blogspot.com/ http://www.youtube.com/user/GeoSolutionsIT http://www.linkedin.com/in/andreaaime http://twitter.com/geowolf ------------------------------------------------------------------------------ Live Security Virtual Conference Exclusive live event will cover all the ways today's security and threat landscape has changed and how IT managers can respond. Discussions will include endpoint security, mobile security and the latest in malware threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/ _______________________________________________ Geoserver-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/geoserver-devel
