Skip to content

Commit 40fae5b

Browse files
authored
#10024 Wrong default style when creating layer (#10025)
1 parent c4bd604 commit 40fae5b

File tree

2 files changed

+65
-27
lines changed

2 files changed

+65
-27
lines changed

geonode/geoserver/helpers.py

+30-22
Original file line numberDiff line numberDiff line change
@@ -1132,7 +1132,7 @@ def set_attributes_from_geoserver(layer, overwrite=False):
11321132
)
11331133

11341134

1135-
def get_dataset(layer, gs_catalog):
1135+
def get_dataset(layer, gs_catalog: Catalog):
11361136
gs_catalog.reset()
11371137
gs_dataset = None
11381138
try:
@@ -1151,24 +1151,27 @@ def get_dataset(layer, gs_catalog):
11511151
return gs_dataset
11521152

11531153

1154-
def clean_styles(layer, gs_catalog):
1154+
def clean_styles(layer, gs_catalog: Catalog):
11551155
try:
11561156
# Cleanup Styles without a Workspace
11571157
gs_catalog.reset()
11581158
gs_dataset = get_dataset(layer, gs_catalog)
1159-
gs_catalog.delete(
1160-
gs_catalog.get_style(
1161-
name=gs_dataset.default_style.name,
1162-
workspace=None,
1163-
recursive=True),
1164-
purge=True,
1165-
recurse=False)
1166-
except Exception:
1167-
tb = traceback.format_exc()
1168-
logger.debug(tb)
1159+
logger.debug(f'clean_styles: Retrieving style "{gs_dataset.default_style.name}" for cleanup')
1160+
style = gs_catalog.get_style(
1161+
name=gs_dataset.default_style.name,
1162+
workspace=None,
1163+
recursive=True)
1164+
if style:
1165+
gs_catalog.delete(style, purge=True, recurse=False)
1166+
logger.debug(f'clean_styles: Style removed: {gs_dataset.default_style.name}')
1167+
else:
1168+
logger.debug(f'clean_styles: Style does not exist: {gs_dataset.default_style.name}')
1169+
except Exception as e:
1170+
logger.warning(f'Could not clean style for layer {layer.name}', exc_info=e)
1171+
logger.debug(f'Could not clean style for layer {layer.name} - STACK INFO', stack_info=True)
11691172

11701173

1171-
def set_styles(layer, gs_catalog):
1174+
def set_styles(layer, gs_catalog: Catalog):
11721175
style_set = []
11731176
gs_dataset = get_dataset(layer, gs_catalog)
11741177
if gs_dataset:
@@ -1178,18 +1181,21 @@ def set_styles(layer, gs_catalog):
11781181
layer.default_style, _gs_default_style = save_style(default_style, layer)
11791182
try:
11801183
if default_style.name != _gs_default_style.name or default_style.workspace != _gs_default_style.workspace:
1184+
logger.debug(f'set_style: Setting default style "{_gs_default_style.name}" for layer "{layer.name}')
1185+
11811186
gs_dataset.default_style = _gs_default_style
11821187
gs_catalog.save(gs_dataset)
11831188
if default_style.name not in DEFAULT_STYLE_NAME:
1184-
gs_catalog.delete(
1185-
gs_catalog.get_style(
1186-
name=default_style.name,
1187-
workspace=None,
1188-
recursive=True),
1189-
purge=True,
1190-
recurse=False)
1189+
logger.debug(f'set_style: Retrieving no-workspace default style "{default_style.name}" for deletion')
1190+
style_to_delete = gs_catalog.get_style(name=default_style.name, workspace=None, recursive=True)
1191+
if style_to_delete:
1192+
gs_catalog.delete(style_to_delete, purge=True, recurse=False)
1193+
logger.debug(f'set_style: No-ws default style deleted: {default_style.name}')
1194+
else:
1195+
logger.debug(f'set_style: No-ws default style does not exist: {default_style.name}')
11911196
except Exception as e:
1192-
logger.exception(e)
1197+
logger.error(f'Error setting default style "{_gs_default_style.name}" for layer "{layer.name}', exc_info=e)
1198+
11931199
style_set.append(layer.default_style)
11941200

11951201
try:
@@ -1218,7 +1224,7 @@ def set_styles(layer, gs_catalog):
12181224
layer.refresh_from_db()
12191225

12201226
# Legend links
1221-
logger.debug(" -- Resource Links[Legend link]...")
1227+
logger.debug(f" -- Resource Links[Legend link] for layer {layer.name}...")
12221228
try:
12231229
from geonode.base.models import Link
12241230
dataset_legends = Link.objects.filter(resource=layer.resourcebase_ptr, name='Legend')
@@ -1257,11 +1263,13 @@ def save_style(gs_style, layer):
12571263
sld_body = copy.copy(gs_style.sld_body)
12581264
_gs_style = None
12591265
if not gs_style.workspace:
1266+
logger.debug(f'save_style: Copying style "{sld_name}" to "{layer.workspace}:{layer.name}')
12601267
_gs_style = gs_catalog.create_style(
12611268
layer.name, sld_body,
12621269
raw=True, overwrite=True,
12631270
workspace=layer.workspace)
12641271
else:
1272+
logger.debug(f'save_style: Retrieving style "{layer.workspace}:{sld_name}" for layer "{layer.workspace}:{layer.name}')
12651273
_gs_style = gs_catalog.get_style(
12661274
name=sld_name,
12671275
workspace=layer.workspace

geonode/geoserver/tasks.py

+35-5
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
# along with this program. If not, see <http://www.gnu.org/licenses/>.
1717
#
1818
#########################################################################
19+
import logging
1920
import os
2021

2122
from django.conf import settings
@@ -46,6 +47,8 @@
4647

4748
logger = get_task_logger(__name__)
4849

50+
log_lock = logging.getLogger("geonode_lock_handler")
51+
4952

5053
@app.task(
5154
bind=True,
@@ -65,12 +68,16 @@ def geoserver_update_datasets(self, *args, **kwargs):
6568
Runs update layers.
6669
"""
6770
lock_id = f'{self.request.id}'
71+
log_lock.debug(f"geoserver_update_datasets: Creating lock {lock_id}")
6872
with AcquireLock(lock_id) as lock:
73+
log_lock.debug(f"geoserver_update_datasets: Acquiring lock {lock_id}")
6974
if lock.acquire() is True:
75+
log_lock.debug(f"geoserver_update_datasets: Acquired lock {lock_id}")
7076
try:
7177
return gs_slurp(*args, **kwargs)
7278
finally:
7379
lock.release()
80+
log_lock.debug(f"geoserver_update_datasets: Released lock {lock_id}")
7481

7582

7683
@app.task(
@@ -100,9 +107,12 @@ def geoserver_set_style(
100107
logger.debug(f"Dataset id {instance_id} does not exist yet!")
101108
raise
102109

103-
lock_id = f'{self.request.id}'
110+
lock_id = f'{self.request.id}' if self.request.id else instance.name
111+
log_lock.debug(f"geoserver_set_style: Creating lock {lock_id} for {instance.name}")
104112
with AcquireLock(lock_id) as lock:
113+
log_lock.debug(f"geoserver_set_style: Acquiring lock {lock_id} for {instance.name}")
105114
if lock.acquire() is True:
115+
log_lock.debug(f"geoserver_set_style: Acquired lock {lock_id} for {instance.name}")
106116
try:
107117
sld = open(base_file, "rb").read()
108118
set_dataset_style(
@@ -114,6 +124,7 @@ def geoserver_set_style(
114124
logger.exception(e)
115125
finally:
116126
lock.release()
127+
log_lock.debug(f"geoserver_set_style: Released lock {lock_id} for {instance.name}")
117128

118129

119130
@app.task(
@@ -146,9 +157,12 @@ def geoserver_create_style(
146157
logger.debug(f"Dataset id {instance_id} does not exist yet!")
147158
raise
148159

149-
lock_id = f'{self.request.id}'
160+
lock_id = f'{self.request.id}' if self.request.id else instance.name
161+
log_lock.debug(f"geoserver_create_style: Creating lock {lock_id} for {instance.name}")
150162
with AcquireLock(lock_id) as lock:
151-
if lock.acquire() is True and instance:
163+
log_lock.debug(f"geoserver_create_style: Acquiring lock {lock_id} for {instance.name}")
164+
if lock.acquire() is True:
165+
log_lock.debug(f"geoserver_create_style: Acquired lock {lock_id} for {instance.name}")
152166
try:
153167
f = None
154168
if sld_file and os.path.exists(sld_file) and os.access(sld_file, os.R_OK):
@@ -194,6 +208,7 @@ def geoserver_create_style(
194208
geoserver_automatic_default_style_set.send_robust(sender=instance, instance=instance)
195209
finally:
196210
lock.release()
211+
log_lock.debug(f"geoserver_create_style: Released lock {lock_id} for {instance.name}")
197212

198213

199214
@app.task(
@@ -216,9 +231,19 @@ def geoserver_post_save_datasets(
216231
"""
217232
Runs update layers.
218233
"""
219-
lock_id = f'{self.request.id}'
234+
instance = None
235+
try:
236+
instance = Dataset.objects.get(id=instance_id)
237+
except Dataset.DoesNotExist:
238+
logger.debug(f"Dataset id {instance_id} does not exist yet!")
239+
raise
240+
241+
lock_id = f'{self.request.id}' if self.request.id else instance.name
242+
log_lock.debug(f"geoserver_post_save_datasets: Creating lock {lock_id} for {instance_id}")
220243
with AcquireLock(lock_id) as lock:
244+
log_lock.debug(f"geoserver_post_save_datasets: Acquiring lock {lock_id} for {instance_id}")
221245
if lock.acquire() is True:
246+
log_lock.debug(f"geoserver_post_save_datasets: Acquired lock {lock_id} for {instance_id}")
222247
try:
223248
sync_instance_with_geoserver(instance_id, *args, **kwargs)
224249

@@ -227,6 +252,7 @@ def geoserver_post_save_datasets(
227252
call_command('update_index')
228253
finally:
229254
lock.release()
255+
log_lock.debug(f"geoserver_post_save_datasets: Releasing lock {lock_id} for {instance_id}")
230256

231257

232258
@app.task(
@@ -253,9 +279,12 @@ def geoserver_create_thumbnail(self, instance_id, overwrite=True, check_bbox=Tru
253279
logger.error(f"Resource id {instance_id} does not exist yet!")
254280
raise
255281

256-
lock_id = f'{self.request.id}'
282+
lock_id = f'{self.request.id}' if self.request.id else instance.name
283+
log_lock.debug(f"geoserver_create_thumbnail: Creating lock {lock_id} for {instance.name}")
257284
with AcquireLock(lock_id) as lock:
285+
log_lock.debug(f"geoserver_create_thumbnail: Acquiring lock {lock_id} for {instance.name}")
258286
if lock.acquire() is True:
287+
log_lock.debug(f"geoserver_create_thumbnail: Acquired lock {lock_id} for {instance.name}")
259288
try:
260289
instance.set_processing_state(enumerations.STATE_RUNNING)
261290
try:
@@ -268,6 +297,7 @@ def geoserver_create_thumbnail(self, instance_id, overwrite=True, check_bbox=Tru
268297
instance.set_processing_state(enumerations.STATE_PROCESSED)
269298
finally:
270299
lock.release()
300+
log_lock.debug(f"geoserver_create_thumbnail: Released lock {lock_id} for {instance.name}")
271301

272302

273303
@app.task(

0 commit comments

Comments
 (0)