Skip to content

Commit 0a10263

Browse files
authored
Fix use of threads for background rate limiter updates when enabled
1 parent 5adb534 commit 0a10263

File tree

2 files changed

+13
-6
lines changed

2 files changed

+13
-6
lines changed

CHANGELOG.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,13 @@ All notable changes to this project will be documented in this file.
77
The format is based on [Keep a Changelog](http://keepachangelog.com/).
88
====================
99

10+
# [Unreleased]
11+
12+
## Fixed
13+
14+
- Cloud only: Fix thread used when rate limiting is enabled. Previously enabling
15+
rate limiting might cause a hang
16+
1017
# 5.4.2 - 2024-05-13
1118

1219
## Added

src/borneo/client.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55
# https://oss.oracle.com/licenses/upl/
66
#
77

8+
from concurrent.futures import ThreadPoolExecutor
89
from logging import DEBUG
9-
from multiprocessing import pool
1010
from platform import python_version
1111
from sys import version_info
1212
from threading import Lock
@@ -105,7 +105,7 @@ def __init__(self, config, logger):
105105
'Starting client with rate limiting enabled')
106106
self._rate_limiter_map = RateLimiterMap()
107107
self._table_limit_update_map = dict()
108-
self._threadpool = pool.ThreadPool(1)
108+
self._threadpool = ThreadPoolExecutor(max_workers=1)
109109
else:
110110
self._logutils.log_debug('Starting client with no rate limiting')
111111
self._rate_limiter_map = None
@@ -126,7 +126,7 @@ def background_update_limiters(self, table_name):
126126
return
127127
self._set_table_needs_refresh(table_name, False)
128128
try:
129-
self._threadpool.map(self._update_table_limiters, ['table_name'])
129+
self._threadpool.submit(self._update_table_limiters, ['table_name'])
130130
except RuntimeError:
131131
self._set_table_needs_refresh(table_name, True)
132132

@@ -142,14 +142,14 @@ def enable_rate_limiting(self, enable, use_percent):
142142
if enable and self._rate_limiter_map is None:
143143
self._rate_limiter_map = RateLimiterMap()
144144
self._table_limit_update_map = dict()
145-
self._threadpool = pool.ThreadPool(1)
145+
self._threadpool = ThreadPoolExecutor(max_workers=1)
146146
elif not enable and self._rate_limiter_map is not None:
147147
self._rate_limiter_map.clear()
148148
self._rate_limiter_map = None
149149
self._table_limit_update_map.clear()
150150
self._table_limit_update_map = None
151151
if self._threadpool is not None:
152-
self._threadpool.close()
152+
self._threadpool.shutdown()
153153
self._threadpool = None
154154

155155
def execute(self, request):
@@ -363,7 +363,7 @@ def shut_down(self):
363363
if self._sess is not None:
364364
self._sess.close()
365365
if self._threadpool is not None:
366-
self._threadpool.close()
366+
self._threadpool.shutdown()
367367
if self._stats_control is not None:
368368
self._stats_control.shutdown()
369369

0 commit comments

Comments
 (0)