On Tue, Jun 2, 2015 at 10:37 AM, Julian Atkinson <j.f.c.atkinson@anonymised.com
wrote:
Hi All,
We are attempting to integrate a WPS service into Geoserver 2.7.0 and have
some issues around resource management.
Briefly, our WPS Process involves,
- Implementing a GeoServerProcess that uses the execute() method to
return a class deriving from RawData.
- Implementing the RawData.getInputStream() method to return an
InputStream object. This object holds refs to a Geotools transaction object
and a jdbc connection taken from a Geotools jdbcdatastore. These resources
are used to consume and transform data - which is returned via calls on the
InputStream's read() methods.
We found that,
- During synchronous WPS calls, if the remote client prematurely
terminates the connection, there is no corresponding call back on the
InputStream's close() method. Without this notification we are unable to
properly cleanup the geotools transaction and jdbc connection resources.
Sounds like a bug. Please open a ticket, and if you can, follow with a pull
request to solve the issue.
- As soon as the InputStream is returned to the WPS executor, the job is
marked as complete, even though it may take many hours to process and
stream all the data. Additionally, any new WPS jobs are run immediately
without respecting queue limits.
The queue is just for the "execute" phase. If you can change the code so
that it also does also the encoding in the execute thread, that would be
appreciated.
With the above issues in mind, we modified our approach to use a
FileOutputStream created via resourceManager.getOutputResource(). The
prevents the WPS job from being prematurely marked as complete until all
data is written to the file. However it's not our preferred choice for
web-browsers since there's no indication of any connection/download
activity.
Marked as complete... where? In the WPS protocol, or in the status store?
We also used the ProgressListener to monitor job state, by testing the
progressListener.isCanceled() while processing. However we noticed,
- That if the remote client disconnects we still don't get notification of
completion via the ProgressListener.
Same as above, ticket and pull request welcomed. Mind though, a client
disconnection cannot be determined as it happens,
the servlets only tell us about the disconnection via an exception thrown
as we try to write the output on the response output stream.
A couple of other minor issues,
- timeouts begin from the time the job is queued, not the time the job
run is started.
Yes, I can see that... does not seem like it's easy to change that though,
we have nothing marking the
actual execution beginning... well, unless we wrapped the process with
something that notifies the MaxExecutionTimeListener
and then cascades the execute call. It's probably the less painful way.
Maybe this wrapper could also be a way to push the encoding in the
execution thread pool.
- It's not possible to set the max synchronous jobs to zero via the GUI
as an indirect way to disable synchronous WPS jobs
This is indeed not possible, and not formally correct either: as far as I
know, there is no way to communicate the client that a process
cannot be executed in synchronous mode, so denying it would probably be a
protocol violation.
I can see how it's desirable though, some processes are just running for
too much time to be usable in synch mode, but having a simple
blanket statement that no process should be run in synch mode is too
restrictive.
I'd try to add a per process setting instead.
Any advice would be greatly appreciated,
Cheers,
Julian
University of Tasmania Electronic Communications Policy (December, 2014).
This email is confidential, and is for the intended recipient only.
Access, disclosure, copying, distribution, or reliance on any of it by
anyone outside the intended recipient organisation is prohibited and may be
a criminal offence. Please delete if obtained in error and email
confirmation to the sender. The views expressed in this email are not
necessarily the views of the University of Tasmania, unless clearly
intended otherwise.
------------------------------------------------------------------------------
_______________________________________________
Geoserver-devel mailing list
Geoserver-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/geoserver-devel
--
GeoServer Professional Services from the experts! Visit
http://goo.gl/it488V for more information.
Ing. Andrea Aime
@geowolf
Technical Lead
GeoSolutions S.A.S.
Via Poggio alle Viti 1187
55054 Massarosa (LU)
Italy
phone: +39 0584 962313
fax: +39 0584 1660272
mob: +39 339 8844549
http://www.geo-solutions.it
http://twitter.com/geosolutions_it
*AVVERTENZE AI SENSI DEL D.Lgs. 196/2003*
Le informazioni contenute in questo messaggio di posta elettronica e/o
nel/i file/s allegato/i sono da considerarsi strettamente riservate. Il
loro utilizzo è consentito esclusivamente al destinatario del messaggio,
per le finalità indicate nel messaggio stesso. Qualora riceviate questo
messaggio senza esserne il destinatario, Vi preghiamo cortesemente di
darcene notizia via e-mail e di procedere alla distruzione del messaggio
stesso, cancellandolo dal Vostro sistema. Conservare il messaggio stesso,
divulgarlo anche in parte, distribuirlo ad altri soggetti, copiarlo, od
utilizzarlo per finalità diverse, costituisce comportamento contrario ai
principi dettati dal D.Lgs. 196/2003.
The information in this message and/or attachments, is intended solely for
the attention and use of the named addressee(s) and may be confidential or
proprietary in nature or covered by the provisions of privacy act
(Legislative Decree June, 30 2003, no.196 - Italy's New Data Protection
Code).Any use not in accord with its purpose, any disclosure, reproduction,
copying, distribution, or either dissemination, either whole or partial, is
strictly forbidden except previous formal approval of the named
addressee(s). If you are not the intended recipient, please contact
immediately the sender by telephone, fax or e-mail and delete the
information in this message that has been received in error. The sender
does not give any warranty or accept liability as the content, accuracy or
completeness of sent messages and accepts no responsibility for changes
made after they were sent or for other risks which arise as a result of
e-mail transmission, viruses, etc.
-------------------------------------------------------