perf: 注册开通复用进程内管理员会话
实测(真网关):单次开通链路约 0.29s,其中管理员登录 111ms、 建号 80ms、用户登录 79ms、查组 5ms、发 key 10ms、授余额 9ms。 外部 OAuth 两步为必需串行调用;查组/授余额仅个位数毫秒, 不值得为其加缓存复杂度,故本批只做一项:同一进程内第二 次起的开通复用管理员 token 元组(实例不跨线程,401 时走 刷新->重登录自愈,密码轮换后自动用新密码),免一次登录。 真网关对照:冷开通 0.294s,热开通 0.179s(约 -39%), 对照组每次新登录两次均为 0.255s 左右。 测试:新增共享会话复用/过期重取 2 个;全量 cloud 794 (4 跳过)、host 69、deploy 19 全绿。
This commit is contained in:
1 parent
cc0c707ccd
commit
a9ff7cb498
2 files changed
+110
-3
No files matched your search
@@ -216,6 +216,57 @@ class TestEnsureGatewayKey(unittest.TestCase):
|
||||
" WHERE user_id = ?", ("user-race2",)).fetchone()
|
||||
self.assertEqual(row[0], 0)
|
||||
|
||||
def _admin_env(self):
|
||||
old = {k: os.environ.get(k) for k in
|
||||
("SUB2API_ADMIN_EMAIL", "SUB2API_ADMIN_PASSWORD")}
|
||||
os.environ["SUB2API_ADMIN_EMAIL"] = "adm@x"
|
||||
os.environ["SUB2API_ADMIN_PASSWORD"] = "pw"
|
||||
sub2api._SHARED_ADMIN.clear()
|
||||
return old
|
||||
|
||||
def _restore_admin_env(self, old):
|
||||
for k, v in old.items():
|
||||
if v is None:
|
||||
os.environ.pop(k, None)
|
||||
else:
|
||||
os.environ[k] = v
|
||||
sub2api._SHARED_ADMIN.clear()
|
||||
|
||||
def _admin_login_count(self):
|
||||
return len([
|
||||
c for c in self.api.calls
|
||||
if c[0] == "POST" and c[1] == "/api/v1/auth/login"
|
||||
and (c[2] or {}).get("email") == "adm@x"])
|
||||
|
||||
def test_shared_admin_session_reuses_login(self):
|
||||
old = self._admin_env()
|
||||
try:
|
||||
conn1 = _conn()
|
||||
key1 = ensure_user_gateway_key(conn1, "user-s1",
|
||||
request=self.api)
|
||||
self.assertTrue(key1.startswith("sk-probe-"))
|
||||
conn2 = _conn()
|
||||
key2 = ensure_user_gateway_key(conn2, "user-s2",
|
||||
request=self.api)
|
||||
self.assertTrue(key2.startswith("sk-probe-"))
|
||||
# 同一进程内第二次开通不再管理员登录(只剩首次那一次)。
|
||||
self.assertEqual(self._admin_login_count(), 1)
|
||||
finally:
|
||||
self._restore_admin_env(old)
|
||||
|
||||
def test_shared_admin_session_expired_refetches(self):
|
||||
old = self._admin_env()
|
||||
sub2api._SHARED_ADMIN[("http://x:28084", "adm@x")] = (
|
||||
"old-tok", "old-ref", 0)
|
||||
try:
|
||||
conn = _conn()
|
||||
key = ensure_user_gateway_key(conn, "user-s3",
|
||||
request=self.api)
|
||||
self.assertTrue(key.startswith("sk-probe-"))
|
||||
self.assertEqual(self._admin_login_count(), 1)
|
||||
finally:
|
||||
self._restore_admin_env(old)
|
||||
|
||||
|
||||
class TestProviderCommand(unittest.TestCase):
|
||||
def test_server_command_sub2api(self):
|
||||
|
||||
Reference in new issue
Block a user