Slow storing of data for shefParser
还没有人认领这个 Issue。
评估
- 难度
- 4/5
- 预计耗时
- 3-5 天
- 新手友好度
- 25/100
- Issue 类型
- 缺陷
- 描述清晰度
- 需要澄清
- 活跃度
- 停滞
- 技术栈
- python
- 领域
- backend, performance
调研方向
使用附带的 shefit 文件复现 shefParser -i $FILE --loader cda[$CDA_API_ROOT][$CDA_API_KEY] --processed 命令,然后结合报告中的请求和 connection-pool traceback 检查 shef/loaders/cda_loader.py。如果有 Catalina 日志,请使用它们来确定存储缓慢和 500 响应的来源;当文件能够成功存储,并且相较于报告的运行时间有可测量的改进时,即视为完成。
由索引模型根据 Issue 内容生成。
描述
@jbkolze @krowvin
We are utilizing shefParser to store data for a couple of our data acquisition processes as we prepare for cloud migration. Those processes either store shefit files to the database with cda, or store shef.e files to the database with cda. It seems to be significantly slower than processShefit was or our old direct-store methods.
For example, utilizing our MRRPPCS data stream, which uses a diode to send main stem data once an hour. For this process, shefParser ingests shefit files and stores them.
Each hour the 6 main stem projects send 14 values (for a total of approximately 84 values). The shefParser program takes on average 8 minutes to store these values.
An example shefit file is attached. Our bash script cycles through 6 shefit files (one for each project) and stores the data. It does this twice since the diode can send data to one of two folders depending on which machine is sending the data. Total runtime is generally 8 minutes to store these 12 files.
Argument used in the bash script:
shefParser -i $FILE --loader cda[$CDA_API_ROOT][$CDA_API_KEY] --processed
Error we see from the bash script log (specifically it seems worrisome to see the "too many 500 responses" and connection pool lines):
Traceback (most recent call last):
File "/<python path>/python3.9/site-packages/requests/adapters.py", line 486, in send
resp = conn.urlopen(
File "/<python path>/python3.9/site-packages/urllib3/connectionpool.py", line 876, in urlopen
return self.urlopen(
File "/<python path>/python3.9/site-packages/urllib3/connectionpool.py", line 876, in urlopen
return self.urlopen(
File "/<python path>/python3.9/site-packages/urllib3/connectionpool.py", line 876, in urlopen
return self.urlopen(
[Previous line repeated 3 more times]
File "/<python path>/python3.9/site-packages/urllib3/connectionpool.py", line 866, in urlopen
retries = retries.increment(method, url, response=response, _pool=self)
File "/<python path>/python3.9/site-packages/urllib3/util/retry.py", line 592, in increment
raise MaxRetryError(_pool, url, error or ResponseError(cause))
urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='<T7 CDA>', port=<port>): Max retries exceeded with url: /nwdm-data/timeseries?create-as-lrts=False&store-rule=REPLACE+WITH+NON+MISSIN
G&override-protection=False (Caused by ResponseError('too many 500 error responses'))
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/<python path>/python3.9/site-packages/shef/loaders/cda_loader.py", line 291, in limited_task
return await asyncio.to_thread(
File "/<python path>/python3.9/asyncio/threads.py", line 25, in to_thread
return await loop.run_in_executor(None, func_call)
File "/<python path>/python3.9/concurrent/futures/thread.py", line 58, in run
result = self.fn(*self.args, **self.kwargs)
File "/<python path>/python3.9/site-packages/cwms/timeseries/timeseries.py", line 354, in store_timeseries
return api.post(endpoint, data, params)
File "/<python path>/python3.9/site-packages/cwms/api.py", line 335, in post
with SESSION.post(endpoint, params=params, headers=headers, data=data) as response:
File "/<python path>/python3.9/site-packages/requests/sessions.py", line 637, in post
return self.request("POST", url, data=data, json=json, **kwargs)
File "/<python path>/python3.9/site-packages/requests_toolbelt/sessions.py", line 76, in request
return super(BaseUrlSession, self).request(
File "/<python path>/python3.9/site-packages/requests/sessions.py", line 589, in request
resp = self.send(prep, **send_kwargs)
File "/<python path>/python3.9/site-packages/requests/sessions.py", line 703, in send
r = adapter.send(request, **kwargs)
File "/<python path>/python3.9/site-packages/requests/adapters.py", line 510, in send
raise RetryError(e, request=request)
requests.exceptions.RetryError: HTTPSConnectionPool(host='<T7 CDA>', port=<port>): Max retries exceeded with url: /nwdm-data/timeseries?create-as-lrts=False&store-rule=REPLACE+WITH+NON+MISSING&
override-protection=False (Caused by ResponseError('too many 500 error responses'))
We can try to get some additional information from the catalina logs if that's necessary.
When we have had missing data, the slowness of shefParser makes it unusable. We have had to revert back to processShefit when we had to backfill more than a few hours.
- 主要语言
- Python
- 星标
- 4
- 派生
- 2
- PR 合并指标
- 30 天内没有已合并 PR
环境准备
这个项目没有提供开发容器、Dockerfile 或贡献指南,环境需要你自己搭建:先看它的 README,通用步骤见我们的新手贡献指南。
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
HydrologicEngineeringCenter/SHEF_processing 的其他 Issue
-
难度 3/5 1-2 天 新手友好度 55/100
HydrologicEngineeringCenter/SHEF_processing#82 · 1 条评论 ·
-
难度 3/5 1-2 天 新手友好度 55/100
-
难度 3/5 1-2 天 新手友好度 45/100
查看 HydrologicEngineeringCenter/SHEF_processing 的全部 Issue
相似的 Issue
-
[Bug]: graphify query loads every language extractor just for _file_stem (about 34 ms per call)可能已有人在做 @rohit-jsfreaky 今天认领。 未关闭
难度 2/5 1-3 小时 新手友好度 78/100
Graphify-Labs/graphify#5160 · 1 条评论 ·
维护者通常 2 天内回复
-
Variable declared without a value suppresses ${VAR:-default} expansion可能已有人在做 @Omarinho12345 今天认领。 未关闭
难度 2/5 1-3 小时 新手友好度 85/100
theskumar/python-dotenv#750 ·
维护者通常 12 天内回复
-
bug
难度 2/5 1-3 小时 新手友好度 68/100
-
Operations on a list[T] | None var throw when the value is None可能已有人在做 @masenf 今天认领。 未关闭
难度 2/5 1-3 小时 新手友好度 72/100
reflex-dev/reflex#7826 · 1 条评论 ·
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 78/100
UKGovernmentBEIS/control-arena#947 ·
维护者通常 1 天内回复