Skip to content

Commit 4f7e97b

Browse files
committed
fix query domains and update buckets, domains host
- add default domains - add ttl for query domains - fix query domains hard code second-level domain - fix lost json decorators
1 parent 196f650 commit 4f7e97b

File tree

4 files changed

+121
-48
lines changed

4 files changed

+121
-48
lines changed

src/Qiniu/Storage/BucketManager.cs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -84,13 +84,13 @@ public BucketsResult Buckets(bool shared)
8484
try
8585
{
8686
string scheme = this.config.UseHttps ? "https://" : "http://";
87-
string rsHost = string.Format("{0}{1}", scheme, Config.DefaultRsHost);
87+
string ucHost = string.Format("{0}{1}", scheme, Config.DefaultUcHost);
8888
string sharedStr = "false";
8989
if (shared)
9090
{
9191
sharedStr = "true";
9292
}
93-
string bucketsUrl = string.Format("{0}/buckets?shared={1}", rsHost, sharedStr);
93+
string bucketsUrl = string.Format("{0}/buckets?shared={1}", ucHost, sharedStr);
9494

9595
HttpResult hr = httpManager.Get(bucketsUrl, null, auth);
9696
result.Shadow(hr);
@@ -518,9 +518,8 @@ public DomainsResult Domains(string bucket)
518518

519519
try
520520
{
521-
string scheme = this.config.UseHttps ? "https://" : "http://";
522-
string rsHost = string.Format("{0}{1}", scheme, Config.DefaultApiHost);
523-
string domainsUrl = string.Format("{0}{1}", rsHost, "/v6/domain/list");
521+
string apiHost = config.ApiHost(this.mac.AccessKey, bucket);
522+
string domainsUrl = string.Format("{0}{1}", apiHost, "/v6/domain/list");
524523
string body = string.Format("tbl={0}", bucket);
525524

526525
HttpResult hr = httpManager.PostForm(domainsUrl, null, body, auth);

src/Qiniu/Storage/Config.cs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@ namespace Qiniu.Storage
99
/// </summary>
1010
public class Config
1111
{
12+
/// <summary>
13+
/// 默认空间管理域名
14+
/// </summary>
15+
public static string DefaultUcHost = "uc.qbox.me";
1216
/// <summary>
1317
/// 默认高级资源管理域名
1418
/// </summary>
@@ -18,6 +22,14 @@ public class Config
1822
/// </summary>
1923
public static string DefaultApiHost = "api.qiniuapi.com";
2024
/// <summary>
25+
/// 默认数据处理域名
26+
/// </summary>
27+
public static string DefaultIoHost = "iovip.qiniuio.com";
28+
/// <summary>
29+
/// 默认数据处理域名
30+
/// </summary>
31+
public static string DefaultRsfHost = "rsf.qiniu.com";
32+
/// <summary>
2133
/// 空间所在的区域(Zone)
2234
/// </summary>
2335
public Zone Zone = null;

src/Qiniu/Storage/ZoneHelper.cs

Lines changed: 48 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,18 @@
66

77
namespace Qiniu.Storage
88
{
9+
internal class ZoneCacheValue
10+
{
11+
public DateTime Deadline { get; set; }
12+
public Zone Zone { get; set; }
13+
}
14+
915
/// <summary>
1016
/// Zone辅助类,查询及配置Zone
1117
/// </summary>
1218
public class ZoneHelper
1319
{
14-
private static Dictionary<string, Zone> zoneCache = new Dictionary<string, Zone>();
20+
private static Dictionary<string, ZoneCacheValue> zoneCache = new Dictionary<string, ZoneCacheValue>();
1521
private static object rwLock = new object();
1622

1723
/// <summary>
@@ -21,86 +27,91 @@ public class ZoneHelper
2127
/// <param name="bucket">空间名称</param>
2228
public static Zone QueryZone(string accessKey, string bucket)
2329
{
24-
Zone zone = null;
25-
30+
ZoneCacheValue zoneCacheValue = null;
2631
string cacheKey = string.Format("{0}:{1}", accessKey, bucket);
2732

2833
//check from cache
2934
lock (rwLock)
3035
{
3136
if (zoneCache.ContainsKey(cacheKey))
3237
{
33-
zone = zoneCache[cacheKey];
38+
zoneCacheValue = zoneCache[cacheKey];
3439
}
3540
}
3641

37-
if (zone != null)
42+
if (
43+
zoneCacheValue != null &&
44+
DateTime.Now < zoneCacheValue.Deadline &&
45+
zoneCacheValue.Zone != null
46+
)
3847
{
39-
return zone;
48+
return zoneCacheValue.Zone;
4049
}
4150

4251
//query from uc api
52+
Zone zone;
4353
HttpResult hr = null;
4454
try
4555
{
46-
string queryUrl = string.Format("https://uc.qbox.me/v2/query?ak={0}&bucket={1}", accessKey, bucket);
56+
string queryUrl = string.Format("https://{0}/v2/query?ak={1}&bucket={2}",
57+
Config.DefaultUcHost,
58+
accessKey,
59+
bucket
60+
);
4761
HttpManager httpManager = new HttpManager();
4862
hr = httpManager.Get(queryUrl, null);
49-
if (hr.Code == (int)HttpCode.OK)
63+
if (hr.Code == (int)HttpCode.OK && !string.IsNullOrEmpty(hr.Text))
5064
{
5165
ZoneInfo zInfo = JsonConvert.DeserializeObject<ZoneInfo>(hr.Text);
5266
if (zInfo != null)
5367
{
5468
zone = new Zone();
5569
zone.SrcUpHosts = zInfo.Up.Src.Main;
5670
zone.CdnUpHosts = zInfo.Up.Acc.Main;
57-
zone.IovipHost = zInfo.Io.Src.Main[0];
58-
if (zone.IovipHost.Contains("z1"))
71+
72+
if (!string.IsNullOrEmpty(zInfo.Io.Src.Main[0]))
73+
{
74+
zone.IovipHost = zInfo.Io.Src.Main[0];
75+
}
76+
else
5977
{
60-
zone.ApiHost = "api-z1.qiniuapi.com";
61-
zone.RsHost = "rs-z1.qiniu.com";
62-
zone.RsfHost = "rsf-z1.qiniu.com";
78+
zone.IovipHost = Config.DefaultIoHost;
6379
}
64-
else if (zone.IovipHost.Contains("z2"))
80+
81+
if (!string.IsNullOrEmpty(zInfo.Api.Acc.Main[0]))
6582
{
66-
zone.ApiHost = "api-z2.qiniuapi.com";
67-
zone.RsHost = "rs-z2.qiniu.com";
68-
zone.RsfHost = "rsf-z2.qiniu.com";
83+
zone.ApiHost = zInfo.Api.Acc.Main[0];
6984
}
70-
else if (zone.IovipHost.Contains("na0"))
85+
else
7186
{
72-
zone.ApiHost = "api-na0.qiniuapi.com";
73-
zone.RsHost = "rs-na0.qiniu.com";
74-
zone.RsfHost = "rsf-na0.qiniu.com";
87+
zone.ApiHost = Config.DefaultApiHost;
7588
}
76-
else if (zone.IovipHost.Contains("as0"))
89+
90+
if (!string.IsNullOrEmpty(zInfo.Rs.Acc.Main[0]))
7791
{
78-
zone.ApiHost = "api-as0.qiniuapi.com";
79-
zone.RsHost = "rs-as0.qiniu.com";
80-
zone.RsfHost = "rsf-as0.qiniu.com";
92+
zone.RsHost = zInfo.Rs.Acc.Main[0];
8193
}
82-
else if (zone.IovipHost.Contains("cn-east-2"))
94+
else
8395
{
84-
zone.ApiHost = "api-cn-east-2.qiniuapi.com";
85-
zone.RsHost = "rs-cn-east-2.qiniuapi.com";
86-
zone.RsfHost = "rsf-cn-east-2.qiniuapi.com";
96+
zone.RsHost = Config.DefaultRsHost;
8797
}
88-
else if (zone.IovipHost.Contains("ap-northeast-1"))
98+
99+
if (!string.IsNullOrEmpty(zInfo.Rsf.Acc.Main[0]))
89100
{
90-
zone.ApiHost = "api-ap-northeast-1.qiniuapi.com";
91-
zone.RsHost = "rs-ap-northeast-1.qiniuapi.com";
92-
zone.RsfHost = "rsf-ap-northeast-1.qiniuapi.com";
101+
zone.RsfHost = zInfo.Rsf.Acc.Main[0];
93102
}
94103
else
95104
{
96-
zone.ApiHost = "api.qiniuapi.com";
97-
zone.RsHost = "rs.qiniu.com";
98-
zone.RsfHost = "rsf.qiniu.com";
105+
zone.RsfHost = Config.DefaultRsfHost;
99106
}
100107

101108
lock (rwLock)
102109
{
103-
zoneCache[cacheKey] = zone;
110+
zoneCacheValue = new ZoneCacheValue();
111+
TimeSpan ttl = TimeSpan.FromSeconds(zInfo.Ttl);
112+
zoneCacheValue.Deadline = DateTime.Now.Add(ttl);
113+
zoneCacheValue.Zone = zone;
114+
zoneCache[cacheKey] = zoneCacheValue;
104115
}
105116
}
106117
else

src/Qiniu/Storage/ZoneInfo.cs

Lines changed: 57 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,87 @@
1-
namespace Qiniu.Storage
1+
using Newtonsoft.Json;
2+
3+
namespace Qiniu.Storage
24
{
35
/// <summary>
46
/// 从uc.qbox.me返回的消息
57
/// </summary>
68
internal class ZoneInfo
79
{
10+
/// <summary>
11+
/// 过期时间,单位:秒
12+
/// </summary>
13+
[JsonProperty("ttl")]
814
public int Ttl { get; set; }
15+
16+
[JsonProperty("io")]
917
public Io Io { set; get; }
18+
19+
[JsonProperty("up")]
1020
public Up Up { set; get; }
21+
22+
[JsonProperty("api")]
23+
public Api Api { set; get; }
24+
25+
[JsonProperty("rs")]
26+
public Rs Rs { set; get; }
27+
28+
[JsonProperty("rsf")]
29+
public Rsf Rsf { set; get; }
1130
}
1231

1332
internal class Io
1433
{
34+
[JsonProperty("src")]
1535
public Src Src { set; get; }
1636
}
1737

1838
internal class Src
1939
{
40+
[JsonProperty("main")]
2041
public string[] Main { set; get; }
2142
}
2243

2344
internal class Up
2445
{
25-
public UpDomain Acc { set; get; }
26-
public UpDomain OldAcc { set; get; }
27-
public UpDomain Src { set; get; }
28-
public UpDomain OldSrc { set; get; }
46+
[JsonProperty("acc")]
47+
public DomainInfo Acc { set; get; }
48+
49+
[JsonProperty("old_acc")]
50+
public DomainInfo OldAcc { set; get; }
51+
52+
[JsonProperty("src")]
53+
public DomainInfo Src { set; get; }
54+
55+
[JsonProperty("old_src")]
56+
public DomainInfo OldSrc { set; get; }
2957
}
30-
internal class UpDomain
58+
internal class DomainInfo
3159
{
60+
[JsonProperty("main")]
3261
public string[] Main { set; get; }
62+
63+
[JsonProperty("backup", NullValueHandling = NullValueHandling.Ignore)]
3364
public string[] Backup { set; get; }
65+
66+
[JsonProperty("info", NullValueHandling = NullValueHandling.Ignore)]
3467
public string Info { set; get; }
3568
}
69+
70+
internal class Api
71+
{
72+
[JsonProperty("acc")]
73+
public DomainInfo Acc { set; get; }
74+
}
75+
76+
internal class Rs
77+
{
78+
[JsonProperty("acc")]
79+
public DomainInfo Acc { set; get; }
80+
}
81+
82+
internal class Rsf
83+
{
84+
[JsonProperty("acc")]
85+
public DomainInfo Acc { set; get; }
86+
}
3687
}

0 commit comments

Comments
 (0)