Open JuliusLADP opened 2 months ago
Ar yra galimybė gauti traceback
logus, kad būtų galima pamatyti, kurioje kodo vietoje ši klaida atsirado ?
Informacija iš serverio žurnalų:
Traceback (most recent call last):
File "spinta/api/__init__.py", line 272, in homepage
return await create_http_response(context, params, request)
File "spinta/utils/response.py", line 147, in create_http_response
return await commands.getone(
File "spinta/commands/read.py", line 384, in getone
resp = await commands.getone(
File "spinta/commands/read.py", line 425, in getone
commands.authorize(context, action, model)
File "multipledispatch/dispatcher.py", line 278, in __call__
return func(*args, **kwargs)
File "spinta/types/model.py", line 491, in authorize
authorized(context, model, action, throw=True)
File "spinta/auth.py", line 478, in authorized
unauthorized = token.get_client_id() == get_client_id_from_name(get_clients_path(config), config.default_auth_client)
File "spinta/auth.py", line 790, in get_client_id_from_name
if client_name in keymap.keys():
AttributeError: 'NoneType' object has no attribute 'keys'
Galimai susijusi užduotis:
Dar vienas traceback:
Traceback (most recent call last):
File "/opt/spintatest/env/lib/python3.9/site-packages/gunicorn/arbiter.py", line 589, in spawn_worker
worker.init_process()
File "/opt/spintatest/env/lib/python3.9/site-packages/uvicorn/workers.py", line 66, in init_process
super(UvicornWorker, self).init_process()
File "/opt/spintatest/env/lib/python3.9/site-packages/gunicorn/workers/base.py", line 134, in init_process
self.load_wsgi()
File "/opt/spintatest/env/lib/python3.9/site-packages/gunicorn/workers/base.py", line 146, in load_wsgi
self.wsgi = self.app.wsgi()
File "/opt/spintatest/env/lib/python3.9/site-packages/gunicorn/app/base.py", line 67, in wsgi
self.callable = self.load()
File "/opt/spintatest/env/lib/python3.9/site-packages/gunicorn/app/wsgiapp.py", line 58, in load
return self.load_wsgiapp()
File "/opt/spintatest/env/lib/python3.9/site-packages/gunicorn/app/wsgiapp.py", line 48, in load_wsgiapp
return util.import_app(self.app_uri)
File "/opt/spintatest/env/lib/python3.9/site-packages/gunicorn/util.py", line 359, in import_app
mod = importlib.import_module(module)
File "/opt/pyenv/versions/3.9.2/lib/python3.9/importlib/__init__.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 1030, in _gcd_import
File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 680, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 790, in exec_module
File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed
File "/opt/spintatest/env/lib/python3.9/site-packages/spinta/asgi.py", line 18, in <module>
commands.check(context, config)
File "/opt/spintatest/env/lib/python3.9/site-packages/multipledispatch/dispatcher.py", line 278, in __call__
return func(*args, **kwargs)
File "/opt/spintatest/env/lib/python3.9/site-packages/spinta/types/config.py", line 114, in check
if config.default_auth_client and not client_name_exists(path, config.default_auth_client):
File "/opt/spintatest/env/lib/python3.9/site-packages/spinta/auth.py", line 586, in client_name_exists
if client in keymap.keys():
AttributeError: 'NoneType' object has no attribute 'keys'
Lokaliai nepavyksta atkartoti bugo (Windows 10 sistema).
Yra galimi keli sprendimai:
Aptikus None
reikšmę, atlikti retry
kelis kartus, jei toliau vis gaunam None
, mesti klaidą.
Pliusai:
Trūkumai:
Užkrauti Keymap
vieną kartą į atmintį (pradžioje) ir visada jį naudoti.
Pliusai:
Trūkumai:
keymap
, reikia perkrauti serverį.Dėl laiko stokos kol kas bandom išsisukti su 1 variantu.
@sirex pasiūlymas:
Problema, su runtime migracijomis, kad web serveryje, vienu metu startuoja keliolika procesų ir jie visi vienu metu bando leisti migracijas, ko pasekoje, atsiranda raise condition. Todėl ir siūlau, migracijas iškelti į atskirą komandą kur užtikrintai rašymo operacijos bus daromos tik vieną kartą. O runtime, tiesiog read operacijų pagalba patikrinti ar reikia migruoti ir jei reikia, tada mesti klaidą, nurodant, kokią komandą reikia paleisti.
Tai yra, vietoj to, kad bandytume atlikti migracijas paleidimo metu, geriau būtų mesti klaidą, kad reikalinga migracija, naudojant spinta client migrate
komanda. Ko pasekoje turėtų sumažėti ar iš vis nelikti klaidų paleidimo metu.
Ar @JuliusLADP tiktų toks veikimo principo pakeitimas ?
Aš specialistams negaliu patarti, kuris sprendimas yra geresnis. Kaip suprantu Mantas aprašo alternatyvą pačio 2 variantui? Tuomet judviejų, kaip suprantančių detalių specifiką, reikalas pasirinkti tinkamiausią variantą.
@sirex pasiūlymas:
Problema, su runtime migracijomis, kad web serveryje, vienu metu startuoja keliolika procesų ir jie visi vienu metu bando leisti migracijas, ko pasekoje, atsiranda raise condition. Todėl ir siūlau, migracijas iškelti į atskirą komandą kur užtikrintai rašymo operacijos bus daromos tik vieną kartą. O runtime, tiesiog read operacijų pagalba patikrinti ar reikia migruoti ir jei reikia, tada mesti klaidą, nurodant, kokią komandą reikia paleisti.
Tai yra, vietoj to, kad bandytume atlikti migracijas paleidimo metu, geriau būtų mesti klaidą, kad reikalinga migracija, naudojant
spinta client migrate
komanda. Ko pasekoje turėtų sumažėti ar iš vis nelikti klaidų paleidimo metu.Ar @JuliusLADP tiktų toks veikimo principo pakeitimas ?
Ši dalis bus įgyvendinta #764 užduotyje
Tinka
Ši klaida vis dar kartojasi kasdien, tiek įkeliant naujus rinkinius, tiek atliekant seniau įkeltų rinkinių atnaujinimus. Duomenys įsikelia pilnai, tačiau reikia papildomai imtis veiksmų - paleisti duomenų įkėlimą iš naujo.
response={"errors":[{"code":"AttributeError","message":"'NoneType' object has no attribute 'keys'"
Keliami duomenys į prod
ar test
serverį ?
Nes šitas fix atsirado 0.1.71
versijoje, o prod
yra 0.1.70
Skirtingiems rinkiniams kartojasi klaidos žinutė: ServiceException: INTERNAL (MagritteRestSource:InternalServerError): {responseCode=500, validCodes=[200, 201, 204], response={"errors":[{"code":"AttributeError","message":"'NoneType' object has no attribute 'keys'"}]}, filename=datasets_gov_lsd_cl_ja_asmenys_JuridinisAsmuo?#2024-07-31T08_39_56.019021096Z}
Nemažai atvejų ši klaida susitvarko pakartotinai pabandžius eksportuoti, nieko nepakeitus. Visgi kai kuriais atvejais klaida kartojasi, nepavyksta eksportuoti visų atnaujinimų.
Iš error message nevisai aišku kas čia tikrinama, gal turite minčių kodėl galėtų atsirasti ši klaida?
Ši klaida kyla duomenų įkėlimo/atnaujinimo metu siunčiant užklausas (insert arba patch) į put.data.gov.lt.
Pvz. rinkinys, kuriam buvo kilusi ši klaida, tačiau pakartotinai paleidus, sėkmingai įsikėlė atsinaujinimai – https://put.data.gov.lt/datasets/gov/lsd/statistika/namu_ukiu_tersalai/S1R058_M8010705/:changes/-10
Šiam rinkiniui klaida kartojasi, nevisos patch užklausos įkeltos, tik dalis – https://put.data.gov.lt/datasets/gov/lsd/cl/ja_asmenys/JuridinisAsmuo/:changes/-10
Log‘ai nežinau ar Jums bus infomatyvūs, pasiteiravau Palantir komandos detalesnio paaiškinimo, laukiame.