Commit ebb18881 authored by Jérome Perrin's avatar Jérome Perrin

OOoDocument: explicitly close connections to cloudooo

parent 19375692
...@@ -27,6 +27,7 @@ ...@@ -27,6 +27,7 @@
# #
############################################################################## ##############################################################################
import contextlib
import re, zipfile import re, zipfile
from io import BytesIO from io import BytesIO
import six import six
...@@ -179,7 +180,8 @@ class OOoDocument(OOoDocumentExtensibleTraversableMixin, BaseConvertableFileMixi ...@@ -179,7 +180,8 @@ class OOoDocument(OOoDocumentExtensibleTraversableMixin, BaseConvertableFileMixi
warn('Your oood version is too old, using old method ' warn('Your oood version is too old, using old method '
'getAllowedTargets instead of getAllowedTargetList', 'getAllowedTargets instead of getAllowedTargetList',
DeprecationWarning) DeprecationWarning)
finally:
server_proxy.close()
# tuple order is reversed to be compatible with ERP5 Form # tuple order is reversed to be compatible with ERP5 Form
return [(y, x) for x, y in allowed] return [(y, x) for x, y in allowed]
...@@ -209,8 +211,8 @@ class OOoDocument(OOoDocumentExtensibleTraversableMixin, BaseConvertableFileMixi ...@@ -209,8 +211,8 @@ class OOoDocument(OOoDocumentExtensibleTraversableMixin, BaseConvertableFileMixi
cs.close() cs.close()
z.close() z.close()
return 'text/plain', s return 'text/plain', s
server_proxy = DocumentConversionServerProxy(self)
orig_format = self.getBaseContentType() orig_format = self.getBaseContentType()
with contextlib.closing(DocumentConversionServerProxy(self)) as server_proxy:
generate_result = server_proxy.run_generate(self.getId(), generate_result = server_proxy.run_generate(self.getId(),
bytes2str(enc(bytes(self.getBaseData()))), bytes2str(enc(bytes(self.getBaseData()))),
None, None,
...@@ -390,7 +392,7 @@ class OOoDocument(OOoDocumentExtensibleTraversableMixin, BaseConvertableFileMixi ...@@ -390,7 +392,7 @@ class OOoDocument(OOoDocumentExtensibleTraversableMixin, BaseConvertableFileMixi
by invoking the conversion server. Store the result by invoking the conversion server. Store the result
on the object. Update metadata information. on the object. Update metadata information.
""" """
server_proxy = DocumentConversionServerProxy(self) with contextlib.closing(DocumentConversionServerProxy(self)) as server_proxy:
response_code, response_dict, response_message = server_proxy.run_convert( response_code, response_dict, response_message = server_proxy.run_convert(
self.getFilename() or self.getId(), self.getFilename() or self.getId(),
bytes2str(enc(bytes(self.getData()))), bytes2str(enc(bytes(self.getData()))),
...@@ -429,7 +431,7 @@ class OOoDocument(OOoDocumentExtensibleTraversableMixin, BaseConvertableFileMixi ...@@ -429,7 +431,7 @@ class OOoDocument(OOoDocumentExtensibleTraversableMixin, BaseConvertableFileMixi
# XXX please pass a meaningful description of error as argument # XXX please pass a meaningful description of error as argument
raise NotConvertedError() raise NotConvertedError()
server_proxy = DocumentConversionServerProxy(self) with contextlib.closing(DocumentConversionServerProxy(self)) as server_proxy:
response_code, response_dict, response_message = \ response_code, response_dict, response_message = \
server_proxy.run_setmetadata(self.getId(), server_proxy.run_setmetadata(self.getId(),
bytes2str(enc(bytes(self.getBaseData()))), bytes2str(enc(bytes(self.getBaseData()))),
......
...@@ -27,8 +27,9 @@ ...@@ -27,8 +27,9 @@
# #
############################################################################## ##############################################################################
import logging
import re import re
from zLOG import LOG, WARNING from zLOG import LOG
from AccessControl import ClassSecurityInfo from AccessControl import ClassSecurityInfo
from Acquisition import aq_base from Acquisition import aq_base
from Products.ERP5Type.Accessor.Constant import PropertyGetter as ConstantGetter from Products.ERP5Type.Accessor.Constant import PropertyGetter as ConstantGetter
...@@ -108,6 +109,7 @@ class DocumentConversionServerProxy(): ...@@ -108,6 +109,7 @@ class DocumentConversionServerProxy():
""" """
def __init__(self, context): def __init__(self, context):
self._serverproxy_list = [] self._serverproxy_list = []
self._logger = logging.getLogger(__name__)
preference_tool = getToolByName(context, 'portal_preferences') preference_tool = getToolByName(context, 'portal_preferences')
self._ooo_server_retry = ( self._ooo_server_retry = (
preference_tool.getPreferredDocumentConversionServerRetry() or preference_tool.getPreferredDocumentConversionServerRetry() or
...@@ -119,9 +121,9 @@ class DocumentConversionServerProxy(): ...@@ -119,9 +121,9 @@ class DocumentConversionServerProxy():
if not (address and port): if not (address and port):
raise ConversionError('OOoDocument: cannot proceed with conversion:' raise ConversionError('OOoDocument: cannot proceed with conversion:'
' conversion server url is not defined in preferences') ' conversion server url is not defined in preferences')
self._logger.warning(
LOG('Document', WARNING, 'PreferredOoodocServer{Address,PortNumber}' + \ 'PreferredOoodocServer{Address,PortNumber} are DEPRECATED '
' are DEPRECATED please use PreferredDocumentServerUrl instead', error=True) 'please use PreferredDocumentServerUrl instead')
uri_list = ['%s://%s:%s' % ('http', address, port)] uri_list = ['%s://%s:%s' % ('http', address, port)]
...@@ -215,6 +217,18 @@ class DocumentConversionServerProxy(): ...@@ -215,6 +217,18 @@ class DocumentConversionServerProxy():
def __getattr__(self, attr): def __getattr__(self, attr):
return partial(self._proxy_function, attr) return partial(self._proxy_function, attr)
def close(self):
error_list = []
for server_addr, proxy in self._serverproxy_list:
try:
proxy.__call__('close')()
except Exception as e:
self._logger.exception('Error closing %s', server_addr)
error_list.append(e)
for e in error_list:
raise e
from erp5.component.mixin.DocumentExtensibleTraversableMixin import DocumentExtensibleTraversableMixin from erp5.component.mixin.DocumentExtensibleTraversableMixin import DocumentExtensibleTraversableMixin
from erp5.component.interface.IConvertable import IConvertable from erp5.component.interface.IConvertable import IConvertable
from erp5.component.interface.ITextConvertable import ITextConvertable from erp5.component.interface.ITextConvertable import ITextConvertable
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment