@@ -10,14 +10,16 @@ use mas_data_model::SiteConfig;
10
10
use mas_email:: Mailer ;
11
11
use mas_matrix:: HomeserverConnection ;
12
12
use mas_router:: UrlBuilder ;
13
- use mas_storage:: { BoxRepository , Clock , RepositoryError , RepositoryFactory , SystemClock } ;
13
+ use mas_storage:: { BoxRepository , Clock , RepositoryError , RepositoryFactory } ;
14
14
use mas_storage_pg:: PgRepositoryFactory ;
15
15
use new_queue:: QueueRunnerError ;
16
16
use opentelemetry:: metrics:: Meter ;
17
17
use rand:: SeedableRng ;
18
18
use sqlx:: { Pool , Postgres } ;
19
19
use tokio_util:: { sync:: CancellationToken , task:: TaskTracker } ;
20
20
21
+ pub use crate :: new_queue:: QueueWorker ;
22
+
21
23
mod database;
22
24
mod email;
23
25
mod matrix;
@@ -99,29 +101,31 @@ impl State {
99
101
}
100
102
}
101
103
102
- /// Initialise the workers.
104
+ /// Initialise the worker, without running it.
105
+ ///
106
+ /// This is mostly useful for tests.
103
107
///
104
108
/// # Errors
105
109
///
106
110
/// This function can fail if the database connection fails.
107
111
pub async fn init (
108
112
repository_factory : PgRepositoryFactory ,
113
+ clock : impl Clock + ' static ,
109
114
mailer : & Mailer ,
110
115
homeserver : impl HomeserverConnection + ' static ,
111
116
url_builder : UrlBuilder ,
112
117
site_config : & SiteConfig ,
113
118
cancellation_token : CancellationToken ,
114
- task_tracker : & TaskTracker ,
115
- ) -> Result < ( ) , QueueRunnerError > {
119
+ ) -> Result < QueueWorker , QueueRunnerError > {
116
120
let state = State :: new (
117
121
repository_factory,
118
- SystemClock :: default ( ) ,
122
+ clock ,
119
123
mailer. clone ( ) ,
120
124
homeserver,
121
125
url_builder,
122
126
site_config. clone ( ) ,
123
127
) ;
124
- let mut worker = self :: new_queue :: QueueWorker :: new ( state, cancellation_token) . await ?;
128
+ let mut worker = QueueWorker :: new ( state, cancellation_token) . await ?;
125
129
126
130
worker
127
131
. register_handler :: < mas_storage:: queue:: CleanupExpiredTokensJob > ( )
@@ -157,6 +161,35 @@ pub async fn init(
157
161
mas_storage:: queue:: PruneStalePolicyDataJob ,
158
162
) ;
159
163
164
+ Ok ( worker)
165
+ }
166
+
167
+ /// Initialise the worker and run it.
168
+ ///
169
+ /// # Errors
170
+ ///
171
+ /// This function can fail if the database connection fails.
172
+ pub async fn init_and_run (
173
+ repository_factory : PgRepositoryFactory ,
174
+ clock : impl Clock + ' static ,
175
+ mailer : & Mailer ,
176
+ homeserver : impl HomeserverConnection + ' static ,
177
+ url_builder : UrlBuilder ,
178
+ site_config : & SiteConfig ,
179
+ cancellation_token : CancellationToken ,
180
+ task_tracker : & TaskTracker ,
181
+ ) -> Result < ( ) , QueueRunnerError > {
182
+ let worker = init (
183
+ repository_factory,
184
+ clock,
185
+ mailer,
186
+ homeserver,
187
+ url_builder,
188
+ site_config,
189
+ cancellation_token,
190
+ )
191
+ . await ?;
192
+
160
193
task_tracker. spawn ( worker. run ( ) ) ;
161
194
162
195
Ok ( ( ) )
0 commit comments