Bolt + Flask + Kubernetes inevitably starts throwing WebSocketConnectionClosedException
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức phù hợp với người mới
- 22/100
- Loại issue
- Lỗi
- Độ rõ ràng
- Cần làm rõ
- Mức độ hoạt động
- Đình trệ
- Lĩnh vực
- backend, devops, networking
Hướng nghiên cứu
Bắt đầu với app.py và slack_app/slack_service.py, sau đó kiểm tra SocketModeHandler và lệnh Gunicorn được nêu trong báo cáo. Tái hiện hoặc so sánh hành vi trong container Kubernetes bằng các phiên bản slack-bolt, slack-sdk, websocket-client và Python được liệt kê, tập trung vào các log WebSocketConnectionClosedException lặp lại. Công việc được xem là hoàn tất khi xác định được lỗi xuất phát từ môi trường triển khai hay từ việc xử lý kết nối lại, đồng thời ghi lại cấu hình hoặc thay đổi mã cần thiết.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
Running a bolt app using socket mode inside Flask inside kubernetes works initially but eventually always loses the connection and falls back to a WebSocketConnectionClosedException error.
Given that auto_reconnect_enabled defaults to True, I would expect any failures to just result in the app reconnecting.
I'm opening this as a question as I'm highly doubtful its an actual bug, and instead just something I need to do differently/better in my own app code.
Reproducible in:
The slack_bolt version
slack-bolt = "1.6.0"
slack-sdk = "3.8.0"
websocket-client = "1.1.0"
Python runtime version
python3.7
OS info
Problem is seen running in a container.
Steps to reproduce:
I've tried to emulate the pattern in #255 for running bolt + slack, so a simplified version of my app looks like this:
# ./app.py
from flask import Flask
from slack_app.slack_service import slack
slack.connect()
app = Flask(__name__)
# ./slack_app/slack_service.py
from slack_bolt import App
from slack_bolt.error import BoltUnhandledRequestError
from slack_bolt.adapter.socket_mode.websocket_client import SocketModeHandler
SLACK_APP_TOKEN, SLACK_BOT_TOKEN = get_slack_tokens_from_env()
app = App(
token=SLACK_BOT_TOKEN,
raise_error_for_unhandled_request=True,
)
slack = SocketModeHandler(app, SLACK_APP_TOKEN)
@app.error
def handle_errors(error):
if isinstance(error, BoltUnhandledRequestError):
pass
else:
logger.error(error)
I doubt the BoltUnhandledRequestError is causing this but included it in my example code just in case.
Maybe of note is that i'm using websocket_client based on the suggestion in https://github.com/slackapi/python-slack-sdk/issues/1024. We were seeing the same BlockingIOError logs.
Also maybe of note is that in #255 you suggest using two threads for gunicorn and we are just currently running with:
gunicorn app:app --workers=1 --bind=0.0.0.0:8080 --timeout=3600
Lastly of note is that I am unable to repro this problem locally, and I'm just seeing it inside of our kubernetes cluster. Unfortunately I'm not savvy enough to know how to debug whether the k8s infra is causing my problem (although I am simultaneous to filing this issue working with the people who maintain that infra to investigate from that side).
Expected result:
My slack connection doesn't die.
Actual result:
My app connects fine initially, but after some period of time disconnects from slack and the logs quickly degenerate into the following error every 5 seconds:
on_error invoked (error: WebSocketConnectionClosedException, message: Connection to remote host was lost.)
- Ngôn ngữ chính
- Python
- Star
- 1.3k
- Fork
- 288
- Merge trung bình
- 1 ngày 8 giờ
- Pull request đã merge (30 ngày)
- 10
Hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của slackapi/bolt-python
-
docs enhancement server-side
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 88/100
slackapi/bolt-python#1576 · 1 bình luận ·
-
auto-triage-skip bug security semver:major
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
slackapi/bolt-python#1447 · 9 bình luận ·
-
Độ khó 3/5 1-2 ngày Mức phù hợp với người mới 65/100
slackapi/bolt-python#1577 ·
-
area:async auto-triage-skip dependencies
Độ khó 3/5 1-2 ngày Mức phù hợp với người mới 65/100
slackapi/bolt-python#1472 · 1 bình luận · 1 reaction ·
-
auto-triage-skip enhancement
slackapi/bolt-python#1346 · 2 bình luận · 1 người được giao ·
Tất cả issue của slackapi/bolt-python
Issue tương tự
-
fix: inaccuracy ⚠️
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
uabrc/uabrc.github.io#1255 · 1 bình luận ·
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 84/100
ethereum-optimism/factory#64 ·
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 90/100
duckdb/duckdb-python#627 ·
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
-
Add link for tutorial Đang mởdocumentation
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 78/100
Qiskit/qiskit-addon-sqd#376 ·