@@ -36,7 +36,6 @@ use tracing::debug;
36
36
use tracing:: info;
37
37
38
38
use crate :: sessions:: session:: Session ;
39
- use crate :: sessions:: session_ref:: SessionRef ;
40
39
use crate :: sessions:: ProcessInfo ;
41
40
use crate :: sessions:: SessionContext ;
42
41
use crate :: sessions:: SessionManagerStatus ;
@@ -87,7 +86,7 @@ impl SessionManager {
87
86
self . conf . clone ( )
88
87
}
89
88
90
- pub async fn create_session ( self : & Arc < Self > , typ : SessionType ) -> Result < SessionRef > {
89
+ pub async fn create_session ( self : & Arc < Self > , typ : SessionType ) -> Result < Arc < Session > > {
91
90
// TODO: maybe deadlock
92
91
let config = self . get_conf ( ) ;
93
92
{
@@ -125,7 +124,7 @@ impl SessionManager {
125
124
let user_api = UserApiProvider :: instance ( ) ;
126
125
let session_settings = Settings :: try_create ( & config, user_api, tenant) . await ?;
127
126
let session_ctx = SessionContext :: try_create ( config. clone ( ) , session_settings) ?;
128
- let session = Session :: try_create ( id, typ, session_ctx, mysql_conn_id) ?;
127
+ let session = Session :: try_create ( id, typ. clone ( ) , session_ctx, mysql_conn_id) ?;
129
128
130
129
let mut sessions = self . active_sessions . write ( ) ;
131
130
if sessions. len ( ) < self . max_sessions {
@@ -135,63 +134,25 @@ impl SessionManager {
135
134
& config. query . cluster_id ,
136
135
) ;
137
136
138
- sessions. insert ( session. get_id ( ) , session. clone ( ) ) ;
137
+ match typ {
138
+ SessionType :: FlightRPC => { }
139
+ _ => {
140
+ sessions. insert ( session. get_id ( ) , session. clone ( ) ) ;
141
+ }
142
+ }
139
143
140
- Ok ( SessionRef :: create ( session) )
144
+ Ok ( session)
141
145
} else {
142
146
Err ( ErrorCode :: TooManyUserConnections (
143
147
"The current accept connection has exceeded max_active_sessions config" ,
144
148
) )
145
149
}
146
150
}
147
151
148
- pub async fn create_rpc_session (
149
- self : & Arc < Self > ,
150
- id : String ,
151
- aborted : bool ,
152
- ) -> Result < SessionRef > {
153
- // TODO: maybe deadlock?
154
- let config = self . get_conf ( ) ;
155
- {
156
- let sessions = self . active_sessions . read ( ) ;
157
- let v = sessions. get ( & id) ;
158
- if v. is_some ( ) {
159
- return Ok ( SessionRef :: create ( v. unwrap ( ) . clone ( ) ) ) ;
160
- }
161
- }
162
-
163
- let tenant = config. query . tenant_id . clone ( ) ;
164
- let user_api = UserApiProvider :: instance ( ) ;
165
- let session_settings = Settings :: try_create ( & config, user_api, tenant) . await ?;
166
- let session_ctx = SessionContext :: try_create ( config. clone ( ) , session_settings) ?;
167
- let session = Session :: try_create ( id. clone ( ) , SessionType :: FlightRPC , session_ctx, None ) ?;
168
-
169
- let mut sessions = self . active_sessions . write ( ) ;
170
- let v = sessions. get ( & id) ;
171
- if v. is_none ( ) {
172
- if aborted {
173
- return Err ( ErrorCode :: AbortedSession ( "Aborting server." ) ) ;
174
- }
175
-
176
- label_counter (
177
- super :: metrics:: METRIC_SESSION_CONNECT_NUMBERS ,
178
- & config. query . tenant_id ,
179
- & config. query . cluster_id ,
180
- ) ;
181
-
182
- sessions. insert ( id, session. clone ( ) ) ;
183
- Ok ( SessionRef :: create ( session) )
184
- } else {
185
- Ok ( SessionRef :: create ( v. unwrap ( ) . clone ( ) ) )
186
- }
187
- }
188
-
189
152
#[ allow( clippy:: ptr_arg) ]
190
- pub async fn get_session_by_id ( self : & Arc < Self > , id : & str ) -> Option < SessionRef > {
153
+ pub async fn get_session_by_id ( self : & Arc < Self > , id : & str ) -> Option < Arc < Session > > {
191
154
let sessions = self . active_sessions . read ( ) ;
192
- sessions
193
- . get ( id)
194
- . map ( |session| SessionRef :: create ( session. clone ( ) ) )
155
+ sessions. get ( id) . cloned ( )
195
156
}
196
157
197
158
#[ allow( clippy:: ptr_arg) ]
0 commit comments