@@ -34,6 +34,7 @@ use databend_common_expression::DataField;
3434use databend_common_expression:: DataSchema ;
3535use databend_common_metrics:: external_server:: record_connect_external_duration;
3636use databend_common_metrics:: external_server:: record_error_external;
37+ use databend_common_metrics:: external_server:: record_request_external_block_rows;
3738use databend_common_metrics:: external_server:: record_request_external_duration;
3839use databend_common_metrics:: external_server:: record_retry_external;
3940use databend_common_metrics:: external_server:: record_running_requests_external_finish;
@@ -60,15 +61,20 @@ pub struct TransformUdfServer {
6061}
6162
6263impl TransformUdfServer {
63- pub fn new ( ctx : Arc < QueryContext > , funcs : Vec < UdfFunctionDesc > ) -> Result < Self > {
64+ pub fn init_semaphore ( ctx : Arc < QueryContext > ) -> Result < Arc < Semaphore > > {
6465 let settings = ctx. get_settings ( ) ;
65- let connect_timeout = settings. get_external_server_connect_timeout_secs ( ) ?;
66- let request_timeout = settings. get_external_server_request_timeout_secs ( ) ?;
67- let request_batch_rows = settings. get_external_server_request_batch_rows ( ) ? as usize ;
6866 let request_max_threads = settings. get_external_server_request_max_threads ( ) ? as usize ;
69- let retry_times = settings. get_external_server_request_retry_times ( ) ? as usize ;
7067 let semaphore = Arc :: new ( Semaphore :: new ( request_max_threads) ) ;
68+ Ok ( semaphore)
69+ }
7170
71+ pub fn init_endpoints (
72+ ctx : Arc < QueryContext > ,
73+ funcs : & [ UdfFunctionDesc ] ,
74+ ) -> Result < BTreeMap < String , Arc < Endpoint > > > {
75+ let settings = ctx. get_settings ( ) ;
76+ let connect_timeout = settings. get_external_server_connect_timeout_secs ( ) ?;
77+ let request_timeout = settings. get_external_server_request_timeout_secs ( ) ?;
7278 let mut endpoints: BTreeMap < String , Arc < Endpoint > > = BTreeMap :: new ( ) ;
7379 for func in funcs. iter ( ) {
7480 let server_addr = func. udf_type . as_server ( ) . unwrap ( ) ;
@@ -79,6 +85,19 @@ impl TransformUdfServer {
7985 UDFFlightClient :: build_endpoint ( server_addr, connect_timeout, request_timeout) ?;
8086 endpoints. insert ( server_addr. clone ( ) , endpoint) ;
8187 }
88+ Ok ( endpoints)
89+ }
90+
91+ pub fn new (
92+ ctx : Arc < QueryContext > ,
93+ funcs : Vec < UdfFunctionDesc > ,
94+ semaphore : Arc < Semaphore > ,
95+ endpoints : BTreeMap < String , Arc < Endpoint > > ,
96+ ) -> Result < Self > {
97+ let settings = ctx. get_settings ( ) ;
98+ let connect_timeout = settings. get_external_server_connect_timeout_secs ( ) ?;
99+ let request_batch_rows = settings. get_external_server_request_batch_rows ( ) ? as usize ;
100+ let retry_times = settings. get_external_server_request_retry_times ( ) ? as usize ;
82101
83102 Ok ( Self {
84103 ctx,
@@ -222,6 +241,7 @@ impl AsyncTransform for TransformUdfServer {
222241 . map ( |start| data_block. slice ( start..start + batch_rows. min ( rows - start) ) )
223242 . collect ( ) ;
224243 for func in self . funcs . iter ( ) {
244+ record_request_external_block_rows ( func. func_name . clone ( ) , rows) ;
225245 let server_addr = func. udf_type . as_server ( ) . unwrap ( ) ;
226246 let endpoint = self . endpoints . get ( server_addr) . unwrap ( ) ;
227247 let tasks: Vec < _ > = batch_blocks
0 commit comments