@@ -126,8 +126,8 @@ struct MigrationState {
126
126
/// - Invalid data in the Synapse database.
127
127
#[ allow( clippy:: implicit_hasher) ]
128
128
pub async fn migrate (
129
- synapse : & mut SynapseReader < ' _ > ,
130
- mas : & mut MasWriter ,
129
+ mut synapse : SynapseReader < ' _ > ,
130
+ mas : MasWriter ,
131
131
server_name : String ,
132
132
clock : & dyn Clock ,
133
133
rng : & mut impl RngCore ,
@@ -142,23 +142,34 @@ pub async fn migrate(
142
142
provider_id_mapping,
143
143
} ;
144
144
145
- let state = migrate_users ( synapse, mas, state, rng) . await ?;
146
- let state = migrate_threepids ( synapse, mas, rng, state) . await ?;
147
- let state = migrate_external_ids ( synapse, mas, rng, state) . await ?;
148
- let state = migrate_unrefreshable_access_tokens ( synapse, mas, clock, rng, state) . await ?;
149
- let state = migrate_refreshable_token_pairs ( synapse, mas, clock, rng, state) . await ?;
150
- let _state = migrate_devices ( synapse, mas, rng, state) . await ?;
145
+ let ( mas, state) = migrate_users ( & mut synapse, mas, state, rng) . await ?;
146
+ let ( mas, state) = migrate_threepids ( & mut synapse, mas, rng, state) . await ?;
147
+ let ( mas, state) = migrate_external_ids ( & mut synapse, mas, rng, state) . await ?;
148
+ let ( mas, state) =
149
+ migrate_unrefreshable_access_tokens ( & mut synapse, mas, clock, rng, state) . await ?;
150
+ let ( mas, state) =
151
+ migrate_refreshable_token_pairs ( & mut synapse, mas, clock, rng, state) . await ?;
152
+ let ( mas, _state) = migrate_devices ( & mut synapse, mas, rng, state) . await ?;
153
+
154
+ synapse
155
+ . finish ( )
156
+ . await
157
+ . into_synapse ( "failed to close Synapse reader" ) ?;
158
+
159
+ mas. finish ( )
160
+ . await
161
+ . into_mas ( "failed to finalise MAS database" ) ?;
151
162
152
163
Ok ( ( ) )
153
164
}
154
165
155
166
#[ tracing:: instrument( skip_all, level = Level :: INFO ) ]
156
167
async fn migrate_users (
157
168
synapse : & mut SynapseReader < ' _ > ,
158
- mas : & mut MasWriter ,
169
+ mut mas : MasWriter ,
159
170
mut state : MigrationState ,
160
171
rng : & mut impl RngCore ,
161
- ) -> Result < MigrationState , Error > {
172
+ ) -> Result < ( MasWriter , MigrationState ) , Error > {
162
173
let mut user_buffer = MasWriteBuffer :: new ( MasWriter :: write_users) ;
163
174
let mut password_buffer = MasWriteBuffer :: new ( MasWriter :: write_passwords) ;
164
175
let mut users_stream = pin ! ( synapse. read_users( ) ) ;
@@ -187,34 +198,37 @@ async fn migrate_users(
187
198
) ;
188
199
189
200
user_buffer
190
- . write ( mas, mas_user)
201
+ . write ( & mut mas, mas_user)
191
202
. await
192
203
. into_mas ( "writing user" ) ?;
193
204
194
205
if let Some ( mas_password) = mas_password_opt {
195
206
password_buffer
196
- . write ( mas, mas_password)
207
+ . write ( & mut mas, mas_password)
197
208
. await
198
209
. into_mas ( "writing password" ) ?;
199
210
}
200
211
}
201
212
202
- user_buffer. finish ( mas) . await . into_mas ( "writing users" ) ?;
213
+ user_buffer
214
+ . finish ( & mut mas)
215
+ . await
216
+ . into_mas ( "writing users" ) ?;
203
217
password_buffer
204
- . finish ( mas)
218
+ . finish ( & mut mas)
205
219
. await
206
220
. into_mas ( "writing passwords" ) ?;
207
221
208
- Ok ( state)
222
+ Ok ( ( mas , state) )
209
223
}
210
224
211
225
#[ tracing:: instrument( skip_all, level = Level :: INFO ) ]
212
226
async fn migrate_threepids (
213
227
synapse : & mut SynapseReader < ' _ > ,
214
- mas : & mut MasWriter ,
228
+ mut mas : MasWriter ,
215
229
rng : & mut impl RngCore ,
216
230
state : MigrationState ,
217
- ) -> Result < MigrationState , Error > {
231
+ ) -> Result < ( MasWriter , MigrationState ) , Error > {
218
232
let mut email_buffer = MasWriteBuffer :: new ( MasWriter :: write_email_threepids) ;
219
233
let mut unsupported_buffer = MasWriteBuffer :: new ( MasWriter :: write_unsupported_threepids) ;
220
234
let mut users_stream = pin ! ( synapse. read_threepids( ) ) ;
@@ -245,7 +259,7 @@ async fn migrate_threepids(
245
259
if medium == "email" {
246
260
email_buffer
247
261
. write (
248
- mas,
262
+ & mut mas,
249
263
MasNewEmailThreepid {
250
264
user_id : user_infos. mas_user_id ,
251
265
user_email_id : Uuid :: from ( Ulid :: from_datetime_with_source (
@@ -261,7 +275,7 @@ async fn migrate_threepids(
261
275
} else {
262
276
unsupported_buffer
263
277
. write (
264
- mas,
278
+ & mut mas,
265
279
MasNewUnsupportedThreepid {
266
280
user_id : user_infos. mas_user_id ,
267
281
medium,
@@ -275,15 +289,15 @@ async fn migrate_threepids(
275
289
}
276
290
277
291
email_buffer
278
- . finish ( mas)
292
+ . finish ( & mut mas)
279
293
. await
280
294
. into_mas ( "writing email threepids" ) ?;
281
295
unsupported_buffer
282
- . finish ( mas)
296
+ . finish ( & mut mas)
283
297
. await
284
298
. into_mas ( "writing unsupported threepids" ) ?;
285
299
286
- Ok ( state)
300
+ Ok ( ( mas , state) )
287
301
}
288
302
289
303
/// # Parameters
@@ -293,10 +307,10 @@ async fn migrate_threepids(
293
307
#[ tracing:: instrument( skip_all, level = Level :: INFO ) ]
294
308
async fn migrate_external_ids (
295
309
synapse : & mut SynapseReader < ' _ > ,
296
- mas : & mut MasWriter ,
310
+ mut mas : MasWriter ,
297
311
rng : & mut impl RngCore ,
298
312
state : MigrationState ,
299
- ) -> Result < MigrationState , Error > {
313
+ ) -> Result < ( MasWriter , MigrationState ) , Error > {
300
314
let mut write_buffer = MasWriteBuffer :: new ( MasWriter :: write_upstream_oauth_links) ;
301
315
let mut extids_stream = pin ! ( synapse. read_user_external_ids( ) ) ;
302
316
@@ -335,7 +349,7 @@ async fn migrate_external_ids(
335
349
336
350
write_buffer
337
351
. write (
338
- mas,
352
+ & mut mas,
339
353
MasNewUpstreamOauthLink {
340
354
link_id,
341
355
user_id : user_infos. mas_user_id ,
@@ -349,11 +363,11 @@ async fn migrate_external_ids(
349
363
}
350
364
351
365
write_buffer
352
- . finish ( mas)
366
+ . finish ( & mut mas)
353
367
. await
354
368
. into_mas ( "writing threepids" ) ?;
355
369
356
- Ok ( state)
370
+ Ok ( ( mas , state) )
357
371
}
358
372
359
373
/// Migrate devices from Synapse to MAS (as compat sessions).
@@ -367,10 +381,10 @@ async fn migrate_external_ids(
367
381
#[ tracing:: instrument( skip_all, level = Level :: INFO ) ]
368
382
async fn migrate_devices (
369
383
synapse : & mut SynapseReader < ' _ > ,
370
- mas : & mut MasWriter ,
384
+ mut mas : MasWriter ,
371
385
rng : & mut impl RngCore ,
372
386
mut state : MigrationState ,
373
- ) -> Result < MigrationState , Error > {
387
+ ) -> Result < ( MasWriter , MigrationState ) , Error > {
374
388
let mut devices_stream = pin ! ( synapse. read_devices( ) ) ;
375
389
let mut write_buffer = MasWriteBuffer :: new ( MasWriter :: write_compat_sessions) ;
376
390
@@ -430,7 +444,7 @@ async fn migrate_devices(
430
444
431
445
write_buffer
432
446
. write (
433
- mas,
447
+ & mut mas,
434
448
MasNewCompatSession {
435
449
session_id,
436
450
user_id : user_infos. mas_user_id ,
@@ -448,23 +462,23 @@ async fn migrate_devices(
448
462
}
449
463
450
464
write_buffer
451
- . finish ( mas)
465
+ . finish ( & mut mas)
452
466
. await
453
467
. into_mas ( "writing compat sessions" ) ?;
454
468
455
- Ok ( state)
469
+ Ok ( ( mas , state) )
456
470
}
457
471
458
472
/// Migrates unrefreshable access tokens (those without an associated refresh
459
473
/// token). Some of these may be deviceless.
460
474
#[ tracing:: instrument( skip_all, level = Level :: INFO ) ]
461
475
async fn migrate_unrefreshable_access_tokens (
462
476
synapse : & mut SynapseReader < ' _ > ,
463
- mas : & mut MasWriter ,
477
+ mut mas : MasWriter ,
464
478
clock : & dyn Clock ,
465
479
rng : & mut impl RngCore ,
466
480
mut state : MigrationState ,
467
- ) -> Result < MigrationState , Error > {
481
+ ) -> Result < ( MasWriter , MigrationState ) , Error > {
468
482
let mut token_stream = pin ! ( synapse. read_unrefreshable_access_tokens( ) ) ;
469
483
let mut write_buffer = MasWriteBuffer :: new ( MasWriter :: write_compat_access_tokens) ;
470
484
let mut deviceless_session_write_buffer = MasWriteBuffer :: new ( MasWriter :: write_compat_sessions) ;
@@ -517,7 +531,7 @@ async fn migrate_unrefreshable_access_tokens(
517
531
518
532
deviceless_session_write_buffer
519
533
. write (
520
- mas,
534
+ & mut mas,
521
535
MasNewCompatSession {
522
536
session_id : deviceless_session_id,
523
537
user_id : user_infos. mas_user_id ,
@@ -540,7 +554,7 @@ async fn migrate_unrefreshable_access_tokens(
540
554
541
555
write_buffer
542
556
. write (
543
- mas,
557
+ & mut mas,
544
558
MasNewCompatAccessToken {
545
559
token_id,
546
560
session_id,
@@ -554,27 +568,27 @@ async fn migrate_unrefreshable_access_tokens(
554
568
}
555
569
556
570
write_buffer
557
- . finish ( mas)
571
+ . finish ( & mut mas)
558
572
. await
559
573
. into_mas ( "writing compat access tokens" ) ?;
560
574
deviceless_session_write_buffer
561
- . finish ( mas)
575
+ . finish ( & mut mas)
562
576
. await
563
577
. into_mas ( "writing deviceless compat sessions" ) ?;
564
578
565
- Ok ( state)
579
+ Ok ( ( mas , state) )
566
580
}
567
581
568
582
/// Migrates (access token, refresh token) pairs.
569
583
/// Does not migrate non-refreshable access tokens.
570
584
#[ tracing:: instrument( skip_all, level = Level :: INFO ) ]
571
585
async fn migrate_refreshable_token_pairs (
572
586
synapse : & mut SynapseReader < ' _ > ,
573
- mas : & mut MasWriter ,
587
+ mut mas : MasWriter ,
574
588
clock : & dyn Clock ,
575
589
rng : & mut impl RngCore ,
576
590
mut state : MigrationState ,
577
- ) -> Result < MigrationState , Error > {
591
+ ) -> Result < ( MasWriter , MigrationState ) , Error > {
578
592
let mut token_stream = pin ! ( synapse. read_refreshable_token_pairs( ) ) ;
579
593
let mut access_token_write_buffer = MasWriteBuffer :: new ( MasWriter :: write_compat_access_tokens) ;
580
594
let mut refresh_token_write_buffer =
@@ -624,7 +638,7 @@ async fn migrate_refreshable_token_pairs(
624
638
625
639
access_token_write_buffer
626
640
. write (
627
- mas,
641
+ & mut mas,
628
642
MasNewCompatAccessToken {
629
643
token_id : access_token_id,
630
644
session_id,
@@ -637,7 +651,7 @@ async fn migrate_refreshable_token_pairs(
637
651
. into_mas ( "writing compat access tokens" ) ?;
638
652
refresh_token_write_buffer
639
653
. write (
640
- mas,
654
+ & mut mas,
641
655
MasNewCompatRefreshToken {
642
656
refresh_token_id,
643
657
session_id,
@@ -651,16 +665,16 @@ async fn migrate_refreshable_token_pairs(
651
665
}
652
666
653
667
access_token_write_buffer
654
- . finish ( mas)
668
+ . finish ( & mut mas)
655
669
. await
656
670
. into_mas ( "writing compat access tokens" ) ?;
657
671
658
672
refresh_token_write_buffer
659
- . finish ( mas)
673
+ . finish ( & mut mas)
660
674
. await
661
675
. into_mas ( "writing compat refresh tokens" ) ?;
662
676
663
- Ok ( state)
677
+ Ok ( ( mas , state) )
664
678
}
665
679
666
680
fn transform_user (
0 commit comments