Skip to content

Commit 9d9a6e1

Browse files
authored
Fix #1184 Add exception handling for socket mode - BlockingIOError: Resource temporarily unavailable (#1185)
1 parent eec08f4 commit 9d9a6e1

File tree

2 files changed

+38
-9
lines changed

2 files changed

+38
-9
lines changed

slack_sdk/socket_mode/builtin/client.py

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -247,10 +247,15 @@ def _on_message(self, message: str):
247247
listener(message)
248248

249249
def _on_error(self, error: Exception):
250-
self.logger.exception(
250+
error_message = (
251251
f"on_error invoked (session id: {self.session_id()}, "
252252
f"error: {type(error).__name__}, message: {error})"
253253
)
254+
if self.trace_enabled:
255+
self.logger.exception(error_message)
256+
else:
257+
self.logger.error(error_message)
258+
254259
for listener in self.on_error_listeners:
255260
listener(error)
256261

@@ -281,10 +286,14 @@ def _run_current_session(self):
281286
f" (session id: {session_id})"
282287
)
283288
except Exception as e:
284-
self.logger.exception(
289+
error_message = (
285290
"Failed to start or stop the current session"
286291
f" (session id: {session_id}, error: {e})"
287292
)
293+
if self.trace_enabled:
294+
self.logger.exception(error_message)
295+
else:
296+
self.logger.error(error_message)
288297

289298
def _monitor_current_session(self):
290299
if self.current_app_monitor_started:

slack_sdk/socket_mode/builtin/connection.py

Lines changed: 27 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -167,9 +167,11 @@ def connect(self) -> None:
167167
if e.args and len(e.args) > 1 and isinstance(e.args[0], int):
168168
code = e.args[0]
169169
if code is not None:
170-
self.logger.exception(
171-
f"Error code: {code} (session id: {self.session_id}, error: {e})"
172-
)
170+
error_message = f"Error code: {code} (session id: {self.session_id}, error: {e})"
171+
if self.trace_enabled:
172+
self.logger.exception(error_message)
173+
else:
174+
self.logger.error(error_message)
173175
raise
174176

175177
except Exception as e:
@@ -300,10 +302,15 @@ def check_state(self) -> None:
300302
)
301303
self.consecutive_check_state_error_count = 0
302304
except Exception as e:
303-
self.logger.exception(
305+
error_message = (
304306
"Failed to check the state of sock "
305307
f"(session id: {self.session_id}, error: {type(e).__name__}, message: {e})"
306308
)
309+
if self.trace_enabled:
310+
self.logger.exception(error_message)
311+
else:
312+
self.logger.error(error_message)
313+
307314
self.consecutive_check_state_error_count += 1
308315
if self.consecutive_check_state_error_count >= 5:
309316
self.disconnect()
@@ -452,28 +459,41 @@ def run_until_completion(self, state: ConnectionState) -> None:
452459
if self.on_error_listener is not None:
453460
self.on_error_listener(e)
454461
else:
455-
self.logger.exception(
462+
error_message = (
456463
"Got an OSError while receiving data"
457464
f" (session id: {self.session_id}, error: {e})"
458465
)
466+
if self.trace_enabled:
467+
self.logger.exception(error_message)
468+
else:
469+
self.logger.error(error_message)
470+
459471
# As this connection no longer works in any way, terminating it
460472
if self.is_active():
461473
try:
462474
self.disconnect()
463475
except Exception as disconnection_error:
464-
self.logger.exception(
476+
error_message = (
465477
"Failed to disconnect"
466478
f" (session id: {self.session_id}, error: {disconnection_error})"
467479
)
480+
if self.trace_enabled:
481+
self.logger.exception(error_message)
482+
else:
483+
self.logger.error(error_message)
468484
state.terminated = True
469485
break
470486
except Exception as e:
471487
if self.on_error_listener is not None:
472488
self.on_error_listener(e)
473489
else:
474-
self.logger.exception(
490+
error_message = (
475491
"Got an exception while receiving data"
476492
f" (session id: {self.session_id}, error: {e})"
477493
)
494+
if self.trace_enabled:
495+
self.logger.exception(error_message)
496+
else:
497+
self.logger.error(error_message)
478498

479499
state.terminated = True

0 commit comments

Comments
 (0)