@@ -12,20 +12,31 @@ use crate::discovery::ModelManager;
1212use crate :: request_template:: RequestTemplate ;
1313use anyhow:: Result ;
1414use derive_builder:: Builder ;
15+ use dynamo_runtime:: transports:: etcd;
1516use tokio:: task:: JoinHandle ;
1617use tokio_util:: sync:: CancellationToken ;
1718
1819/// HTTP service shared state
1920pub struct State {
2021 metrics : Arc < Metrics > ,
2122 manager : Arc < ModelManager > ,
23+ etcd_client : Option < etcd:: Client > ,
2224}
2325
2426impl State {
2527 pub fn new ( manager : Arc < ModelManager > ) -> Self {
2628 Self {
2729 manager,
2830 metrics : Arc :: new ( Metrics :: default ( ) ) ,
31+ etcd_client : None ,
32+ }
33+ }
34+
35+ pub fn new_with_etcd ( manager : Arc < ModelManager > , etcd_client : Option < etcd:: Client > ) -> Self {
36+ Self {
37+ manager,
38+ metrics : Arc :: new ( Metrics :: default ( ) ) ,
39+ etcd_client,
2940 }
3041 }
3142
@@ -42,6 +53,10 @@ impl State {
4253 self . manager . clone ( )
4354 }
4455
56+ pub fn etcd_client ( & self ) -> Option < & etcd:: Client > {
57+ self . etcd_client . as_ref ( )
58+ }
59+
4560 // TODO
4661 pub fn sse_keep_alive ( & self ) -> Option < Duration > {
4762 None
@@ -84,6 +99,9 @@ pub struct HttpServiceConfig {
8499
85100 #[ builder( default = "None" ) ]
86101 request_template : Option < RequestTemplate > ,
102+
103+ #[ builder( default = "None" ) ]
104+ etcd_client : Option < etcd:: Client > ,
87105}
88106
89107impl HttpService {
@@ -155,7 +173,7 @@ impl HttpServiceConfigBuilder {
155173 let config: HttpServiceConfig = self . build_internal ( ) ?;
156174
157175 let model_manager = Arc :: new ( ModelManager :: new ( ) ) ;
158- let state = Arc :: new ( State :: new ( model_manager) ) ;
176+ let state = Arc :: new ( State :: new_with_etcd ( model_manager, config . etcd_client ) ) ;
159177
160178 // enable prometheus metrics
161179 let registry = metrics:: Registry :: new ( ) ;
@@ -225,4 +243,9 @@ impl HttpServiceConfigBuilder {
225243 self . request_template = Some ( request_template) ;
226244 self
227245 }
246+
247+ pub fn with_etcd_client ( mut self , etcd_client : Option < etcd:: Client > ) -> Self {
248+ self . etcd_client = Some ( etcd_client) ;
249+ self
250+ }
228251}
0 commit comments