[GeoNode-devel] GeoNode Project: Timeout updates Layer with new ManyToManyField in ResourceBase

Amedeo Fadini amefad at gmail.com
Tue Oct 22 06:38:59 PDT 2019


Hi Giambattista and welcome in the dev list

Thank-you Alessio for the quick response.

I have a question just to learn something new: is it the same  thing to
define the M2M relation on the new object side or use add_class to resource
base like in this class?

I see in Giambattista log the line

producer.geoserver_upload_layer(payload)

Giambattista: does the update operation imply the creation or replacement
of the layer related to domain_area?

If this is the case have you checked that integrated authentication between
geonode and geoserver is working as expected?

Amedeo Fadini



Il giorno mar 22 ott 2019 alle ore 11:20 Alessio Fabiani <
alessio.fabiani at geo-solutions.it> ha scritto:

> Hi,
> most probably you are hitting the post-save signal on ResourceBase
> indefinitely.
>
> You should intercept the signal method and updating the resource base only
> in the case you are adding the the m2m relationship a new ResourceBase.
>
> Il giorno lun 21 ott 2019 alle ore 18:06 Giambattista Mameli <
> mameli.giambattista at gmail.com> ha scritto:
>
>>
>> Hi guys,
>> I developed a custom GeoNode Project implementing a M:M relationship on
>> the ResourceBase table
>>
>> Here the steps:
>>
>> 1) model creation of the new table
>>
>> class DomainArea(models.Model):
>>
>>     identifier = models.CharField('Domain Area name', max_length=255, unique=True)
>>     description = models.TextField(default='')
>>     gn_description = models.TextField(
>>         'GeoNode description', default='', null=True)
>>     is_choice = models.BooleanField(default=True)
>>
>>     def __unicode__(self):
>>         return u"{0}".format(self.gn_description)
>>
>>     class Meta:
>>         ordering = ("identifier",)
>>         verbose_name_plural = 'Domain Areas'
>>
>> 2) add the relation between the ResourceBase table and the new created
>> table
>>
>>         domainarea = models.ManyToManyField(
>>             DomainArea,
>>             related_name='resourcebase_domainarea',
>>             blank=True)
>>         ResourceBase.add_to_class('domain_area', domainarea)
>>
>> 3) Add the function to handle the new value in the admin panel
>>
>> admin.site.register(DomainArea)
>>
>> All the steps work good, Django creates the new table with all the
>> relationship and I can handle via admin panel both values and associations
>> between domain areas and Layers/Docs/Maps.
>>
>> The problem is when I modify these values.
>>
>> After the first association, all the updates go wrong (timeout, even with
>> a very long timeout set).
>>
>> This is the error message:
>>
>> *******
>> Traceback:
>>
>> File
>> "/usr/local/lib/python2.7/site-packages/django/core/handlers/exception.py"
>> in inner
>>   41.             response = get_response(request)
>>
>> File
>> "/usr/local/lib/python2.7/site-packages/django/core/handlers/base.py" in
>> _legacy_get_response
>>   249.             response = self._get_response(request)
>>
>> File
>> "/usr/local/lib/python2.7/site-packages/django/core/handlers/base.py" in
>> _get_response
>>   187.                 response = self.process_exception_by_middleware(e,
>> request)
>>
>> File
>> "/usr/local/lib/python2.7/site-packages/django/core/handlers/base.py" in
>> _get_response
>>   185.                 response = wrapped_callback(request,
>> callback_args, *callback_kwargs)
>>
>> File
>> "/usr/local/lib/python2.7/site-packages/django/contrib/admin/options.py" in
>> wrapper
>>   552.                 return self.admin_site.admin_view(view)(*args,
>> **kwargs)
>>
>> File "/usr/local/lib/python2.7/site-packages/django/utils/decorators.py"
>> in _wrapped_view
>>   149.                     response = view_func(request, args, *kwargs)
>>
>> File
>> "/usr/local/lib/python2.7/site-packages/django/views/decorators/cache.py"
>> in _wrapped_view_func
>>   57.         response = view_func(request, args, *kwargs)
>>
>> File
>> "/usr/local/lib/python2.7/site-packages/django/contrib/admin/sites.py" in
>> inner
>>   224.             return view(request, args, *kwargs)
>>
>> File
>> "/usr/local/lib/python2.7/site-packages/django/contrib/admin/options.py" in
>> change_view
>>   1512.         return self.changeform_view(request, object_id, form_url,
>> extra_context)
>>
>> File "/usr/local/lib/python2.7/site-packages/django/utils/decorators.py"
>> in _wrapper
>>   67.             return bound_func(*args, **kwargs)
>>
>> File "/usr/local/lib/python2.7/site-packages/django/utils/decorators.py"
>> in _wrapped_view
>>   149.                     response = view_func(request, args, *kwargs)
>>
>> File "/usr/local/lib/python2.7/site-packages/django/utils/decorators.py"
>> in bound_func
>>   63.                 return func.__get__(self, type(self))(*args2,
>> **kwargs2)
>>
>> File
>> "/usr/local/lib/python2.7/site-packages/django/contrib/admin/options.py" in
>> changeform_view
>>   1409.             return self._changeform_view(request, object_id,
>> form_url, extra_context)
>>
>> File
>> "/usr/local/lib/python2.7/site-packages/django/contrib/admin/options.py" in
>> _changeform_view
>>   1449.                 self.save_model(request, new_object, form, not
>> add)
>>
>> File
>> "/usr/local/lib/python2.7/site-packages/django/contrib/admin/options.py" in
>> save_model
>>   980.         obj.save()
>>
>> File "/usr/local/lib/python2.7/site-packages/polymorphic/models.py" in
>> save
>>   83.         return super(PolymorphicModel, self).save(*args, **kwargs)
>>
>> File "/usr/local/lib/python2.7/site-packages/django/db/models/base.py" in
>> save
>>   808.                        force_update=force_update,
>> update_fields=update_fields)
>>
>> File "/usr/local/lib/python2.7/site-packages/django/db/models/base.py" in
>> save_base
>>   848.                 update_fields=update_fields, raw=raw, using=using,
>>
>> File
>> "/usr/local/lib/python2.7/site-packages/django/dispatch/dispatcher.py" in
>> send
>>   193.             for receiver in self._live_receivers(sender)
>>
>> File "/usr/local/lib/python2.7/site-packages/geonode/decorators.py" in
>> wrapper
>>   53.                 return func(*args, **kwargs)
>>
>> File
>> "/usr/local/lib/python2.7/site-packages/geonode/geoserver/signals.py" in
>> geoserver_post_save
>>   85.         producer.geoserver_upload_layer(payload)
>>
>> File
>> "/usr/local/lib/python2.7/site-packages/geonode/messaging/producer.py" in
>> sync_if_local_memory
>>   71.                 worker.run(timeout=broker_socket_timeout)
>>
>> File "/usr/local/lib/python2.7/site-packages/kombu/mixins.py" in run
>>   170.                     for _ in self.consume(limit=None, **kwargs):
>>
>> File "/usr/local/lib/python2.7/site-packages/kombu/mixins.py" in consume
>>   192.                     conn.drain_events(timeout=safety_interval)
>>
>> File "/usr/local/lib/python2.7/site-packages/kombu/connection.py" in
>> drain_events
>>   315.         return self.transport.drain_events(self.connection,
>> **kwargs)
>>
>> File
>> "/usr/local/lib/python2.7/site-packages/kombu/transport/virtual/base.py" in
>> drain_events
>>   966.                     raise socket.timeout()
>> *****
>>
>> Any help will be greatly appreciated
>>
>> Thanks in advance
>>
>> _______________________________________________
>> geonode-devel mailing list
>> geonode-devel at lists.osgeo.org
>> https://lists.osgeo.org/mailman/listinfo/geonode-devel
>>
>
>
> --
>
> ==
>
> GeoServer Professional Services from the experts! Visit
> http://goo.gl/it488V for more information.
> ==
> Ing. Alessio Fabiani
>
> @alfa7691
> Founder/Technical Lead
>
>
> GeoSolutions S.A.S.
> Via di Montramito 3/A - 55054  Massarosa (LU) - Italy
> phone: +39 0584 962313
> fax:     +39 0584 1660272
> mob:   +39 331 6233686
>
>
> http://www.geo-solutions.it
> http://twitter.com/geosolutions_it
> -------------------------------------------------------
>
> Con riferimento alla normativa sul trattamento dei dati personali (Reg. UE
> 2016/679 - Regolamento generale sulla protezione dei dati “GDPR”), si
> precisa che ogni circostanza inerente alla presente email (il suo
> contenuto, gli eventuali allegati, etc.) è un dato la cui conoscenza è
> riservata al/i solo/i destinatario/i indicati dallo scrivente. Se il
> messaggio Le è giunto per errore, è tenuta/o a cancellarlo, ogni altra
> operazione è illecita. Le sarei comunque grato se potesse darmene notizia.
>
>
> This email is intended only for the person or entity to which it is
> addressed and may contain information that is privileged, confidential or
> otherwise protected from disclosure. We remind that - as provided by
> European Regulation 2016/679 “GDPR” - copying, dissemination or use of this
> e-mail or the information herein by anyone other than the intended
> recipient is prohibited. If you have received this email by mistake, please
> notify us immediately by telephone or e-mail.
> _______________________________________________
> geonode-devel mailing list
> geonode-devel at lists.osgeo.org
> https://lists.osgeo.org/mailman/listinfo/geonode-devel
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/geonode-devel/attachments/20191022/d78ca5de/attachment-0001.html>


More information about the geonode-devel mailing list