alibaba / alibaba/acm-sdk-python

重复创建_refresh_server_list线程任务

Open
#22 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
Python
Stars
59
Forks
26
PR merge metrics
No merged PRs in 30d

Description

## bug描述
每次调用`ACMClient().get()`方法都创建`_refresh_server_list`线程任务
## 解决建议
`ACMClient`类中添加一个属性用于标识是否创建过`_refresh_server_list`线程任务,判断`self._is_server_list_task_created`决定是否创建`_refresh_server_list`线程任务,首次创建后将`self._is_server_list_task_created`修改为`True`。
```
from threading import Thread

import acm
from acm.client import logger
from acm.server import get_server_list

class ACMClient(acm.ACMClient):

def __init__(self, endpoint, namespace=None, ak=None, sk=None, ram_role_name=None, unit_name=None):
super().__init__(endpoint, namespace=None, ak=None, sk=None, ram_role_name=None, unit_name=None)
self._is_server_list_task_created = False

def get_server(self):
if self.server_list is None:
with self.server_list_lock:
logger.info("[get-server] server list is null, try to initialize")
server_list = get_server_list(self.endpoint, 443 if self.tls_enabled else 8080, self.cai_enabled,
self.unit_name)
if not server_list:
logger.error("[get-server] empty server_list get from %s" % self.endpoint)
return None
self.server_list = server_list
self.current_server = self.server_list[self.server_offset]
logger.info("[get-server] server_num:%s server_list:%s" % (len(self.server_list), self.server_list))

if self.cai_enabled and not self._is_server_list_task_created:
self._is_server_list_task_created = True
t = Thread(target=self._refresh_server_list)
t.setDaemon(True)
t.start()

logger.info("[get-server] use server:%s" % str(self.current_server))
return self.current_server

if __name__ == '__main__':
client = ACMClient(endpoint='')
config = client.get(data_id='', group='')

```

Contributor guide

No contributing guide indexed for this repository

Research direction

Start at ACMClient.get() and the get_server() entry point shown in the issue, then trace where _refresh_server_list is started. Done means repeated calls do not create more than one refresh thread for the client; no test file is named, so add or run the relevant client behavior checks if available.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
backend
Issue type
Bug
Difficulty
2/5
Estimated time
1-3 hours
Activity status
Stale
Clarity
Clearly specified
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.