MerginMaps / MerginMaps/qgis-plugin

When server get's into maintenance mode during synchronization, the plugin crash

Open
#585 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

bug
Dominant language
Python
Stars
44
Forks
20
Avg merge
3d 12h
Merged PRs (30d)
5

Description

When the server gets into maintenance mode during synchronization, the plugin crash

Scenario
1) have a big project that will synchronize for a while.
2) Hit the synchronize button
3) During synchronization, turn on maintenance mode -> the plugin crash

```
An error has occurred while executing Python code:

Mergin.mergin.common.ClientError: HTTP Error: 503 Service Unavailable URL: https://app.dev.merginmaps.com/v1/project/push/cancel/be6cdecf-a324-4b85-b381-971c7212a8a3 Method: POST Detail: { "status" : "503", "title" : "Service unavailable", "detail" : "The site is undergoing scheduled maintenance." }
Traceback (most recent call last):
File "/home/jozef/.local/share/QGIS/QGIS3/profiles/ws/python/plugins/Mergin/mergin/client.py", line 206, in _do_request
return self.opener.open(request)
File "/usr/lib/python3.10/urllib/request.py", line 525, in open
response = meth(req, response)
File "/usr/lib/python3.10/urllib/request.py", line 634, in http_response
response = self.parent.error(
File "/usr/lib/python3.10/urllib/request.py", line 563, in error
return self._call_chain(*args)
File "/usr/lib/python3.10/urllib/request.py", line 496, in _call_chain
result = func(*args)
File "/usr/lib/python3.10/urllib/request.py", line 643, in http_error_default
raise HTTPError(req.full_url, code, msg, hdrs, fp)
urllib.error.HTTPError: HTTP Error 503: Service Unavailable

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/home/jozef/.local/share/QGIS/QGIS3/profiles/ws/python/plugins/Mergin/sync_dialog.py", line 205, in push_timer_tick
is_running = push_project_is_running(self.job)
File "/home/jozef/.local/share/QGIS/QGIS3/profiles/ws/python/plugins/Mergin/mergin/client_push.py", line 220, in push_project_is_running
raise future.exception()
File "/usr/lib/python3.10/concurrent/futures/thread.py", line 58, in run
result = self.fn(*self.args, **self.kwargs)
File "/home/jozef/.local/share/QGIS/QGIS3/profiles/ws/python/plugins/Mergin/mergin/client_push.py", line 315, in _do_upload
item.upload_blocking(job.mc, job.mp)
File "/home/jozef/.local/share/QGIS/QGIS3/profiles/ws/python/plugins/Mergin/mergin/client_push.py", line 69, in upload_blocking
resp = mc.post("/v1/project/push/chunk/{}/{}".format(self.transaction_id, self.chunk_id), data, headers)
File "/home/jozef/.local/share/QGIS/QGIS3/profiles/ws/python/plugins/Mergin/mergin/client.py", line 237, in post
return self._do_request(request)
File "/home/jozef/.local/share/QGIS/QGIS3/profiles/ws/python/plugins/Mergin/mergin/client.py", line 195, in wrapper
return f(self, *args)
File "/home/jozef/.local/share/QGIS/QGIS3/profiles/ws/python/plugins/Mergin/mergin/client.py", line 220, in _do_request
raise ClientError(error_msg)
Mergin.mergin.common.ClientError: HTTP Error: 503 Service Unavailable
URL: https://app.dev.merginmaps.com/v1/project/push/chunk/be6cdecf-a324-4b85-b381-971c7212a8a3/218a39ff-136b-4fdb-aca0-14c4e924104e
Method: POST
Detail: { "status" : "503", "title" : "Service unavailable", "detail" : "The site is undergoing scheduled maintenance." }

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/home/jozef/.local/share/QGIS/QGIS3/profiles/ws/python/plugins/Mergin/mergin/client.py", line 206, in _do_request
return self.opener.open(request)
File "/usr/lib/python3.10/urllib/request.py", line 525, in open
response = meth(req, response)
File "/usr/lib/python3.10/urllib/request.py", line 634, in http_response
response = self.parent.error(
File "/usr/lib/python3.10/urllib/request.py", line 563, in error
return self._call_chain(*args)
File "/usr/lib/python3.10/urllib/request.py", line 496, in _call_chain
result = func(*args)
File "/usr/lib/python3.10/urllib/request.py", line 643, in http_error_default
raise HTTPError(req.full_url, code, msg, hdrs, fp)
urllib.error.HTTPError: HTTP Error 503: Service Unavailable

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/home/jozef/.local/share/QGIS/QGIS3/profiles/ws/python/plugins/Mergin/sync_dialog.py", line 63, in timer_timeout
self.push_timer_tick()
File "/home/jozef/.local/share/QGIS/QGIS3/profiles/ws/python/plugins/Mergin/sync_dialog.py", line 210, in push_timer_tick
push_project_cancel(self.job)
File "/home/jozef/.local/share/QGIS/QGIS3/profiles/ws/python/plugins/Mergin/mergin/client_push.py", line 306, in push_project_cancel
raise err
File "/home/jozef/.local/share/QGIS/QGIS3/profiles/ws/python/plugins/Mergin/mergin/client_push.py", line 302, in push_project_cancel
resp_cancel = job.mc.post("/v1/project/push/cancel/%s" % job.transaction_id)
File "/home/jozef/.local/share/QGIS/QGIS3/profiles/ws/python/plugins/Mergin/mergin/client.py", line 237, in post
return self._do_request(request)
File "/home/jozef/.local/share/QGIS/QGIS3/profiles/ws/python/plugins/Mergin/mergin/client.py", line 195, in wrapper
return f(self, *args)
File "/home/jozef/.local/share/QGIS/QGIS3/profiles/ws/python/plugins/Mergin/mergin/client.py", line 220, in _do_request
raise ClientError(error_msg)
Mergin.mergin.common.ClientError: HTTP Error: 503 Service Unavailable
URL: https://app.dev.merginmaps.com/v1/project/push/cancel/be6cdecf-a324-4b85-b381-971c7212a8a3
Method: POST
Detail: { "status" : "503", "title" : "Service unavailable", "detail" : "The site is undergoing scheduled maintenance." }

Python version: 3.10.12 (main, Nov 20 2023, 15:14:05) [GCC 11.4.0]
QGIS version: 3.34.7-Prizren Prizren, 6f7d735cae3

Python Path:
/usr/share/qgis/python
/home/jozef/.local/share/QGIS/QGIS3/profiles/ws/python
/home/jozef/.local/share/QGIS/QGIS3/profiles/ws/python/plugins
/usr/share/qgis/python/plugins
/usr/lib/python310.zip
/usr/lib/python3.10
/usr/lib/python3.10/lib-dynload
/home/jozef/.local/lib/python3.10/site-packages
/usr/local/lib/python3.10/dist-packages
/usr/lib/python3/dist-packages
/home/jozef/.local/share/QGIS/QGIS3/profiles/ws/python
.
/home/jozef/Lutra/projects/a/a6
```

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with sync_dialog.py:205-210 and trace the upload and cancellation paths in mergin/client_push.py, especially upload_blocking and push_project_cancel. Reproduce the maintenance-mode scenario and verify that HTTP 503 responses during synchronization do not produce an uncaught plugin exception or crash.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
desktop
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.