10000 Merge pull request #422 from qiniu/fix/query-host · qiniu/python-sdk@9b881bb · GitHub
[go: up one dir, main page]

Skip to content

Commit 9b881bb

Browse files
authored
Merge pull request #422 from qiniu/fix/query-host
fix not query host
2 parents 92f44e8 + 939ed7f commit 9b881bb

File tree

2 files changed

+65
-26
lines changed

2 files changed

+65
-26
lines changed

qiniu/region.py

Lines changed: 45 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,16 @@ def __init__(
2121
io_host=None,
2222
host_cache={},
2323
home_dir=None,
24-
scheme="http"):
24+
scheme="http",
25+
rs_host=None,
26+
rsf_host=None):
2527
"""初始化Zone类"""
26-
self.up_host, self.up_host_backup, self.io_host, self.home_dir = up_host, up_host_backup, io_host, home_dir
28+
self.up_host = up_host
29+
self.up_host_backup = up_host_backup
30+
self.io_host = io_host
31+
self.rs_host = rs_host
32+
self.rsf_host = rsf_host
33+
self.home_dir = home_dir
2734
self.host_cache = host_cache
2835
self.scheme = scheme
2936

@@ -39,23 +46,49 @@ def get_up_host_backup_by_token(self, up_token, home_dir):
3946
if home_dir is None:
4047
home_dir = os.getcwd()
4148
up_hosts = self.get_up_host(ak, bucket, home_dir)
42-
if (len(up_hosts) <= 1):
49+
if len(up_hosts) <= 1:
4350
up_host = up_hosts[0]
4451
else:
4552
up_host = up_hosts[1]
4653
return up_host
4754

48-
def get_io_host(self, ak, bucket, home_dir):
55+
def get_io_host(self, ak, bucket, home_dir=None):
4956
if self.io_host:
5057
return self.io_host
5158
if home_dir is None:
5259
home_dir = os.getcwd()
5360
bucket_hosts = self.get_bucket_hosts(ak, bucket, home_dir)
61+
if 'ioHosts' not in bucket_hosts:
62+
bucket_hosts = self.get_bucket_hosts(ak, bucket, home_dir, force=True)
5463
io_hosts = bucket_hosts['ioHosts']
5564
return io_hosts[0]
5665

66+
def get_rs_host(self, ak, bucket, home_dir=None):
67+
if self.rs_host:
68+
D7AE return self.rs_host
69+
if home_dir is None:
70+
home_dir = os.getcwd()
71+
bucket_hosts = self.get_bucket_hosts(ak, bucket, home_dir)
72+
if 'rsHosts' not in bucket_hosts:
73+
bucket_hosts = self.get_bucket_hosts(ak, bucket, home_dir, force=True)
74+
rs_hosts = bucket_hosts['rsHosts']
75+
return rs_hosts[0]
76+
77+
def get_rsf_host(self, ak, bucket, home_dir=None):
78+
if self.rsf_host:
79+
return self.rsf_host
80+
if home_dir is None:
81+
home_dir = os.getcwd()
82+
bucket_hosts = self.get_bucket_hosts(ak, bucket, home_dir)
83+
if 'rsfHosts' not in bucket_hosts:
84+
bucket_hosts = self.get_bucket_hosts(ak, bucket, home_dir, force=True)
85+
rsf_hosts = bucket_hosts['rsfHosts']
86+
return rsf_hosts[0]
87+
5788
def get_up_host(self, ak, bucket, home_dir):
5889
bucket_hosts = self.get_bucket_hosts(ak, bucket, home_dir)
90+
if 'upHosts' not in bucket_hosts:
91+
bucket_hosts = self.get_bucket_hosts(ak, bucket, home_dir, force=True)
5992
up_hosts = bucket_hosts['upHosts']
6093
return up_hosts
6194

@@ -77,11 +110,11 @@ def unmarshal_up_token(self, up_token):
77110

78111
return ak, bucket
79112

80-
def get_bucket_hosts(self, ak, bucket, home_dir):
113+
def get_bucket_hosts(self, ak, bucket, home_dir, force=False):
81114
key = self.scheme + ":" + ak + ":" + bucket
82115

83116
bucket_hosts = self.get_bucket_hosts_to_cache(key, home_dir)
84-
if (len(bucket_hosts) > 0):
117+
if not force and len(bucket_hosts) > 0:
85118
return bucket_hosts
86119

87120
hosts = {}
@@ -114,24 +147,26 @@ def get_bucket_hosts(self, ak, bucket, home_dir):
114147
bucket_hosts = {
115148
'upHosts': scheme_hosts['up'],
116149
'ioHosts': scheme_hosts['io'],
150+
'rsHosts': scheme_hosts['rs'],
151+
'rsfHosts': scheme_hosts['rsf'],
117152
'deadline': int(time.time()) + hosts['ttl']
118153
}
119154
home_dir = ""
120155
self.set_bucket_hosts_to_cache(key, bucket_hosts, home_dir)
121156
return bucket_hosts
122157

123158
def get_bucket_hosts_to_cache(self, key, home_dir):
124-
ret = []
125-
if (len(self.host_cache) == 0):
159+
ret = {}
160+
if len(self.host_cache) == 0:
126161
self.host_cache_from_file(home_dir)
127162

128163
if self.host_cache == {}:
129164
return ret
130165

131-
if (not (key in self.host_cache)):
166+
if key not in self.host_cache:
132167
return ret
133168

134-
if (self.host_cache[key]['deadline'] > time.time()):
169+
if self.host_cache[key]['deadline'] > time.time():
135170
ret = self.host_cache[key]
136171

137172
return ret

qiniu/services/storage/bucket.py

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,9 @@ def list(self, bucket, prefix=None, marker=None, limit=None, delimiter=None):
5959
if delimiter is not None:
6060
options['delimiter'] = delimiter
6161

62-
url = '{0}/list'.format(config.get_default('default_rsf_host'))
62+
ak = self.auth.get_access_key()
63+
rs_host = self.zone.get_rsf_host(ak, bucket)
64+
url = '{0}/list'.format(rs_host)
6365
ret, info = self.__get(url, options)
6466

6567
eof = False
@@ -90,7 +92,7 @@ def stat(self, bucket, key):
9092
一个ResponseInfo对象
9193
"""
9294
resource = entry(bucket, key)
93-
return self.__rs_do('stat', resource)
95+
return self.__rs_do(bucket, 'stat', resource)
9496

9597
def delete(self, bucket, key):
9698
"""删除文件:
@@ -107,7 +109,7 @@ def delete(self, bucket, key):
107109
一个ResponseInfo对象
108110
"""
109111
resource = entry(bucket, key)
110-
return self.__rs_do('delete', resource)
112+
return self.__rs_do(bucket, 'delete', resource)
111113

112114
def rename(self, bucket, key, key_to, force='false'):
113115
"""重命名文件:
@@ -143,7 +145,7 @@ def move(self, bucket, key, bucket_to, key_to, force='false'):
143145
"""
144146
resource = entry(bucket, key)
145147
to = entry(bucket_to, key_to)
146-
return self.__rs_do('move', resource, to, 'force/{0}'.format(force))
148+
return self.__rs_do(bucket, 'move', resource, to, 'force/{0}'.format(force))
147149

148150
def copy(self, bucket, key, bucket_to, key_to, force='false'):
149151
"""复制文件:
@@ -163,7 +165,7 @@ def copy(self, bucket, key, bucket_to, key_to, force='false'):
163165
"""
164166
resource = entry(bucket, key)
165167
to = entry(bucket_to, key_to)
166-
return self.__rs_do('copy', resource, to, 'force/{0}'.format(force))
168+
return self.__rs_do(bucket, 'copy', resource, to, 'force/{0}'.format(force))
167169

168170
def fetch(self, url, bucket, key=None, hostscache_dir=None):
169171
"""抓取文件:
@@ -217,7 +219,7 @@ def change_mime(self, bucket, key, mime):
217219
"""
218220
resource = entry(bucket, key)
219221
encode_mime = urlsafe_base64_encode(mime)
220-
return self.__rs_do('chgm', resource, 'mime/{0}'.format(encode_mime))
222+
return self.__rs_do(bucket, 'chgm', resource, 'mime/{0}'.format(encode_mime))
221223

222224
def change_type(self, bucket, key, storage_type):
223225
"""修改文件的存储类型
@@ -231,7 +233,7 @@ def change_type(self, bucket, key, storage_type):
231233
storage_type: 待操作资源存储类型,0为普通存储,1为低频存储,2 为归档存储,3 为深度归档
232234
"""
233235
resource = entry(bucket, key)
234-
return self.__rs_do('chtype', resource, 'type/{0}'.format(storage_type))
236+
return self.__rs_do(bucket, 'chtype', resource, 'type/{0}'.format(storage_type))
235237

236238
def restoreAr(self, bucket, key, freezeAfter_days):
237239
"""解冻归档存储、深度归档存储文件
@@ -245,7 +247,7 @@ def restoreAr(self, bucket, key, freezeAfter_days):
245247
freezeAfter_days: 解冻有效时长,取值范围 1~7
246248
"""
247249
resource = entry(bucket, key)
248-
return self.__rs_do('restoreAr', resource, 'freezeAfterDays/{0}'.format(freezeAfter_days))
250+
return self.__rs_do(bucket, 'restoreAr', resource, 'freezeAfterDays/{0}'.format(freezeAfter_days))
249251

250252
def change_status(self, bucket, key, status, cond):
251253
"""修改文件的状态
@@ -263,8 +265,8 @@ def change_status(self, bucket, key, status, cond):
263265
for k, v in cond.items():
264266
condstr += "{0}={1}&".format(k, v)
265267
condstr = urlsafe_base64_encode(condstr[:-1])
266-
return self.__rs_do('chstatus', resource, 'status/{0}'.format(status), 'cond', condstr)
267-
return self.__rs_do('chstatus', resource, 'status/{0}'.format(status))
268+
return self.__rs_do(bucket, 'chstatus', resource, 'status/{0}'.format(status), 'cond', condstr)
269+
return self.__rs_do(bucket, 'chstatus', resource, 'status/{0}'.format(status))
268270

269271
def set_object_lifecycle(
270272
self,
@@ -303,7 +305,7 @@ def set_object_lifecycle(
303305
cond_str = '&'.join(["{0}={1}".format(k, v) for k, v in cond.items()])
304306
options += ['cond', urlsafe_base64_encode(cond_str)]
305307
resource = entry(bucket, key)
306-
return self.__rs_do('lifecycle', resource, *options)
308+
return self.__rs_do(bucket, 'lifecycle', resource, *options)
307309

308310
def batch(self, operations):
309311
"""批量操作:
@@ -339,7 +341,7 @@ def buckets(self):
339341
[ <Bucket1>, <Bucket2>, ... ]
340342
一个ResponseInfo对象
341343
"""
342-
return self.__rs_do('buckets')
344+
return self.__uc_do('buckets')
343345

344346
def delete_after_days(self, bucket, key, days):
345347
"""更新文件生命周期
@@ -361,7 +363,7 @@ def delete_after_days(self, bucket, key, days):
361363
days: 指定天数
362364
"""
363365
resource = entry(bucket, key)
364-
return self.__rs_do('deleteAfterDays', resource, days)
366+
return self.__rs_do(bucket, 'deleteAfterDays', resource, days)
365367

366368
def mkbucketv3(self, bucket_name, region):
367369
"""
@@ -371,7 +373,7 @@ def mkbucketv3(self, bucket_name, region):
371373
bucket_name: 存储空间名
372374
region: 存储区域
373375
"""
374-
return self.__rs_do('mkbucketv3', bucket_name, 'region', region)
376+
return self.__uc_do('mkbucketv3', bucket_name, 'region', region)
375377

376378
def list_bucket(self, region):
377379
"""
@@ -416,8 +418,10 @@ def change_bucket_permission(self, bucket_name, private):
416418
def __uc_do(self, operation, *args):
417419
return self.__server_do(config.get_default('default_uc_host'), operation, *args)
418420

419-
def __rs_do(self, operation, *args):
420-
return self.__server_do(config.get_default('default_rs_host'), operation, *args)
421+
def __rs_do(self, bucket, operation, *args):
422+
ak = self.auth.get_access_key()
423+
rs_host = self.zone.get_rs_host(ak, bucket)
424+
return self.__server_do(rs_host, operation, *args)
421425

422426
def __io_do(self, bucket, operation, home_dir, *args):
423427
ak = self.auth.get_access_key()

0 commit comments

Comments
 (0)
0