Skip to content

Commit 407c912

Browse files
authored
refactor: change default http_session_timeout_secs to 4 hour. (#18270)
and some small refactors.
1 parent 4a069ae commit 407c912

File tree

7 files changed

+32
-21
lines changed

7 files changed

+32
-21
lines changed

src/query/config/src/config.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1674,7 +1674,7 @@ pub struct QueryConfig {
16741674
#[clap(long, value_name = "VALUE", default_value = "60")]
16751675
pub http_handler_result_timeout_secs: u64,
16761676

1677-
#[clap(long, value_name = "VALUE", default_value = "3600")]
1677+
#[clap(long, value_name = "VALUE", default_value = "14400")]
16781678
pub http_session_timeout_secs: u64,
16791679

16801680
#[clap(long, value_name = "VALUE", default_value = "127.0.0.1")]

src/query/config/src/inner.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -281,7 +281,7 @@ impl Default for QueryConfig {
281281
http_handler_host: "127.0.0.1".to_string(),
282282
http_handler_port: 8000,
283283
http_handler_result_timeout_secs: 60,
284-
http_session_timeout_secs: 3600,
284+
http_session_timeout_secs: 14400,
285285
flight_api_address: "127.0.0.1:9090".to_string(),
286286
flight_sql_handler_host: "127.0.0.1".to_string(),
287287
flight_sql_handler_port: 8900,

src/query/service/src/servers/http/v1/session/client_session_manager.rs

Lines changed: 27 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,6 @@ use sha2::Digest;
4141
use sha2::Sha256;
4242
use tokio::time::Instant;
4343

44-
use crate::servers::http::v1::session::consts::REFRESH_TOKEN_TTL;
4544
use crate::servers::http::v1::session::consts::TOMBSTONE_TTL;
4645
use crate::servers::http::v1::session::consts::TTL_GRACE_PERIOD_META;
4746
use crate::servers::http::v1::session::consts::TTL_GRACE_PERIOD_QUERY;
@@ -89,7 +88,7 @@ pub struct ClientSessionManager {
8988
/// refresh:
9089
/// - auth (with min interval)
9190
session_state: Mutex<BTreeMap<String, SessionState>>,
92-
pub session_token_ttl: Duration,
91+
pub max_idle_time: Duration,
9392
pub min_refresh_interval: Duration,
9493
}
9594

@@ -102,12 +101,20 @@ impl ClientSessionManager {
102101
format!("{user_name}/{client_session_id}")
103102
}
104103

104+
fn refresh_token_ttl(&self) -> Duration {
105+
self.max_idle_time
106+
}
107+
108+
fn session_token_ttl(&self) -> Duration {
109+
self.max_idle_time / 4
110+
}
111+
105112
#[async_backtrace::framed]
106113
pub async fn init(cfg: &InnerConfig) -> Result<()> {
107114
let mgr = Arc::new(Self {
108115
session_tokens: RwLock::new(LruCache::with_items_capacity(1024)),
109116
refresh_tokens: RwLock::new(LruCache::with_items_capacity(1024)),
110-
session_token_ttl: Duration::from_secs(cfg.query.http_session_timeout_secs),
117+
max_idle_time: Duration::from_secs(cfg.query.http_session_timeout_secs),
111118
min_refresh_interval: Duration::from_secs(
112119
(cfg.query.http_session_timeout_secs / 10).min(300),
113120
),
@@ -127,7 +134,9 @@ impl ClientSessionManager {
127134
{
128135
let guard = self.session_state.lock();
129136
for (key, session_state) in &*guard {
130-
if (now - session_state.last_access) > self.session_token_ttl {
137+
if (now - session_state.last_access)
138+
> self.max_idle_time + self.min_refresh_interval
139+
{
131140
expired.push((key.clone(), session_state.temp_tbl_mgr.clone()));
132141
} else {
133142
remained.push(key.clone());
@@ -140,18 +149,23 @@ impl ClientSessionManager {
140149
guard.remove(id);
141150
}
142151
}
152+
let num_expired = expired.len();
143153
for (key, mgr) in expired {
144154
drop_all_temp_tables_with_logging(&key, mgr, "idle").await;
145155
}
156+
let elapsed = now.duration_since(Instant::now());
146157

147-
if !(remained.is_empty()) {
158+
if !(remained.is_empty() && num_expired == 0) {
148159
info!(
149-
"[TEMP TABLE] sessions after cleanup, {} remained: {:?}",
160+
"[TEMP TABLE] cleanup {num_expired} sessions in {} secs, {} remained: {:?}",
161+
elapsed.as_secs(),
150162
remained.len(),
151163
remained
152164
);
153165
}
154-
tokio::time::sleep(self.session_token_ttl / 4).await;
166+
if elapsed < self.max_idle_time / 4 {
167+
tokio::time::sleep(self.max_idle_time / 4 - elapsed).await;
168+
}
155169
}
156170
}
157171

@@ -166,7 +180,7 @@ impl ClientSessionManager {
166180
.upsert_client_session_id(
167181
client_session_id,
168182
&user_name,
169-
REFRESH_TOKEN_TTL + TTL_GRACE_PERIOD_META + self.min_refresh_interval,
183+
self.max_idle_time + self.min_refresh_interval + TTL_GRACE_PERIOD_META,
170184
)
171185
.await?;
172186
Ok(())
@@ -196,7 +210,7 @@ impl ClientSessionManager {
196210
&tenant_name,
197211
&user,
198212
&auth_role,
199-
REFRESH_TOKEN_TTL + TTL_GRACE_PERIOD_META,
213+
self.refresh_token_ttl() + TTL_GRACE_PERIOD_META,
200214
);
201215
let refresh_token = claim.encode(TokenType::Refresh);
202216
let refresh_token_hash = hash_token(refresh_token.as_bytes());
@@ -208,7 +222,7 @@ impl ClientSessionManager {
208222
.upsert_token(
209223
&refresh_token_hash,
210224
token_info.clone(),
211-
REFRESH_TOKEN_TTL + TTL_GRACE_PERIOD_META,
225+
self.refresh_token_ttl() + TTL_GRACE_PERIOD_META,
212226
false,
213227
)
214228
.await?;
@@ -222,7 +236,7 @@ impl ClientSessionManager {
222236
.insert(refresh_token_hash.clone(), None);
223237

224238
// session token
225-
claim.expire_at_in_secs = (now + self.session_token_ttl)
239+
claim.expire_at_in_secs = (now + self.session_token_ttl())
226240
.duration_since(SystemTime::UNIX_EPOCH)
227241
.unwrap()
228242
.as_secs();
@@ -238,7 +252,7 @@ impl ClientSessionManager {
238252
.upsert_token(
239253
&session_token_hash,
240254
token_info.clone(),
241-
REFRESH_TOKEN_TTL + TTL_GRACE_PERIOD_META,
255+
self.session_token_ttl() + TTL_GRACE_PERIOD_META,
242256
false,
243257
)
244258
.await?;
@@ -256,7 +270,7 @@ impl ClientSessionManager {
256270
.upsert_client_session_id(
257271
&client_session_id,
258272
&claim.user,
259-
REFRESH_TOKEN_TTL + TTL_GRACE_PERIOD_META,
273+
self.max_idle_time + self.min_refresh_interval + TTL_GRACE_PERIOD_META,
260274
)
261275
.await?;
262276

src/query/service/src/servers/http/v1/session/consts.rs

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,6 @@
1414

1515
use std::time::Duration;
1616

17-
/// used for both client session id and refresh token TTL
18-
pub const REFRESH_TOKEN_TTL: Duration = Duration::from_hours(4);
19-
2017
/// client start timing for TTL later then meta
2118
pub const TTL_GRACE_PERIOD_META: Duration = Duration::from_secs(300);
2219

src/query/service/src/servers/http/v1/session/login_handler.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ pub async fn login_handler(
124124
session_id,
125125
tokens: Some(TokensInfo {
126126
session_token_ttl_in_secs: ClientSessionManager::instance()
127-
.session_token_ttl
127+
.max_idle_time
128128
.as_secs(),
129129
session_token: token_pair.session.clone(),
130130
refresh_token: token_pair.refresh.clone(),

src/query/service/src/servers/http/v1/session/refresh_handler.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ pub async fn refresh_handler(
6161
Ok(Json(RefreshResponse {
6262
tokens: TokensInfo {
6363
session_token_ttl_in_secs: ClientSessionManager::instance()
64-
.session_token_ttl
64+
.max_idle_time
6565
.as_secs(),
6666
session_token: token_pair.session.clone(),
6767
refresh_token: token_pair.refresh.clone(),

src/query/service/tests/it/storages/testdata/configs_table_basic.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ DB.Table: 'system'.'configs', Table: configs-table_id:1, ver:0, Engine: SystemCo
117117
| 'query' | 'http_handler_tls_server_cert' | '' | '' |
118118
| 'query' | 'http_handler_tls_server_key' | '' | '' |
119119
| 'query' | 'http_handler_tls_server_root_ca_cert' | '' | '' |
120-
| 'query' | 'http_session_timeout_secs' | '3600' | '' |
120+
| 'query' | 'http_session_timeout_secs' | '14400' | '' |
121121
| 'query' | 'internal_enable_sandbox_tenant' | 'false' | '' |
122122
| 'query' | 'internal_merge_on_read_mutation' | 'false' | '' |
123123
| 'query' | 'jwks_refresh_interval' | '600' | '' |

0 commit comments

Comments
 (0)