migration_research_migration.gno
2.41 Kb · 84 lines
1package personal_world
2
3import (
4 "gno.land/p/g1nqnrt3aldzhu6zzeg75yw97wvavqy7wr77g56q/deploy-test/v0/v0/accesscontrol"
5 oldpw "gno.land/r/g1nqnrt3aldzhu6zzeg75yw97wvavqy7wr77g56q/deploy-test/v0/v0/personal_world"
6 "gno.land/r/g1nqnrt3aldzhu6zzeg75yw97wvavqy7wr77g56q/deploy-test/v1/admin"
7)
8
9var (
10 migrationInitialized bool
11 migrationFinalized bool
12 migrationOffset int
13 migrationTotal int
14 migrationLastWorldID uint32
15)
16
17// MigrationInit is the first next-package call made by the research driver.
18func MigrationInit(cur realm) {
19 accesscontrol.AssertIsAdmin(0, cur, admin.IsAdmin)
20 if migrationInitialized {
21 panic("migration already initialized")
22 }
23
24 config := oldpw.GetMigrationConfig()
25 resetMigrationDestination(cur, config)
26
27 migrationInitialized = true
28 migrationOffset = migrationTotal
29 migrationFinalized = true
30}
31
32// MigrationNext advances the migration after MigrationInit until finalization.
33func MigrationNext(cur realm) {
34 accesscontrol.AssertIsAdmin(0, cur, admin.IsAdmin)
35 if !migrationInitialized {
36 panic("migration not initialized")
37 }
38 if migrationFinalized {
39 panic("migration already finalized")
40 }
41
42 migrationOffset = migrationTotal
43 migrationFinalized = true
44}
45
46// IsMigrationInitialized reports whether MigrationInit has run.
47func IsMigrationInitialized() bool {
48 return migrationInitialized
49}
50
51// IsMigrationFinalized reports whether migration batches are complete.
52func IsMigrationFinalized() bool {
53 return migrationFinalized
54}
55
56// GetMigrationOffset reports the number of source records accounted for by migration.
57func GetMigrationOffset() int {
58 return migrationOffset
59}
60
61// GetMigrationTotal reports the source world total captured during MigrationInit.
62func GetMigrationTotal() int {
63 return migrationTotal
64}
65
66// GetMigrationLastWorldID reports the cursor world ID used by batch migration.
67func GetMigrationLastWorldID() uint32 {
68 return migrationLastWorldID
69}
70
71func resetMigrationDestination(cur realm, config oldpw.MigrationConfig) {
72 feeCollectorBPS = config.FeeCollectorBPS
73 listLimit = config.ListLimit
74 batchLimit = config.BatchLimit
75 frozen = config.Frozen
76 worldStore = oldpw.GetMigrationWorldStore(cross(cur))
77 worldConfigStore = oldpw.GetMigrationWorldConfigStore(cross(cur))
78 verifierStore = oldpw.GetMigrationVerifierStore(cross(cur))
79 personalWorldAuthzRBAC = oldpw.GetMigrationPersonalWorldAuthzRBAC(cross(cur))
80
81 migrationOffset = 0
82 migrationTotal = config.TotalWorlds
83 migrationLastWorldID = 0
84}