Skip to content

Commit 1b6f992

Browse files
add migration from v3 to v4 (#806)
Several older releases had changes in the parseable.json files which was done using the `update_v3` function. This PR fixes that issue and instead does a clean migration to `v4`. Also rename the `ingester` to `ingestor`.
1 parent bdf7677 commit 1b6f992

File tree

2 files changed

+38
-10
lines changed

2 files changed

+38
-10
lines changed

server/src/migration.rs

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -54,16 +54,18 @@ pub async fn run_metadata_migration(config: &Config) -> anyhow::Result<()> {
5454
if let Some(storage_metadata) = storage_metadata {
5555
match get_version(&storage_metadata) {
5656
Some("v1") => {
57-
let metadata = metadata_migration::v1_v3(storage_metadata);
57+
let mut metadata = metadata_migration::v1_v3(storage_metadata);
58+
metadata = metadata_migration::v3_v4(metadata);
5859
put_remote_metadata(&*object_store, &metadata).await?;
5960
}
6061
Some("v2") => {
61-
let metadata = metadata_migration::v2_v3(storage_metadata);
62+
let mut metadata = metadata_migration::v2_v3(storage_metadata);
63+
metadata = metadata_migration::v3_v4(metadata);
6264
put_remote_metadata(&*object_store, &metadata).await?;
6365
}
6466
Some("v3") => {
65-
let mdata = metadata_migration::update_v3(storage_metadata);
66-
put_remote_metadata(&*object_store, &mdata).await?;
67+
let metadata = metadata_migration::v3_v4(storage_metadata);
68+
put_remote_metadata(&*object_store, &metadata).await?;
6769
}
6870
_ => (),
6971
}
@@ -73,16 +75,18 @@ pub async fn run_metadata_migration(config: &Config) -> anyhow::Result<()> {
7375
if let Some(staging_metadata) = staging_metadata {
7476
match get_version(&staging_metadata) {
7577
Some("v1") => {
76-
let metadata = metadata_migration::v1_v3(staging_metadata);
78+
let mut metadata = metadata_migration::v1_v3(staging_metadata);
79+
metadata = metadata_migration::v3_v4(metadata);
7780
put_staging_metadata(config, &metadata)?;
7881
}
7982
Some("v2") => {
80-
let metadata = metadata_migration::v2_v3(staging_metadata);
83+
let mut metadata = metadata_migration::v2_v3(staging_metadata);
84+
metadata = metadata_migration::v3_v4(metadata);
8185
put_staging_metadata(config, &metadata)?;
8286
}
8387
Some("v3") => {
84-
let mdata = metadata_migration::update_v3(staging_metadata);
85-
put_staging_metadata(config, &mdata)?;
88+
let metadata = metadata_migration::v3_v4(staging_metadata);
89+
put_staging_metadata(config, &metadata)?;
8690
}
8791
_ => (),
8892
}

server/src/migration/metadata_migration.rs

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,13 +83,22 @@ pub fn v2_v3(mut storage_metadata: JsonValue) -> JsonValue {
8383
// user is an object
8484
let user = user.as_object_mut().unwrap();
8585
// take out privileges
86-
let JsonValue::Array(privileges) = user.remove("role").expect("role exists for v2") else {
86+
let JsonValue::Array(mut privileges) = user.remove("role").expect("role exists for v2")
87+
else {
8788
panic!("privileges is an arrray")
8889
};
8990

9091
let mut roles = Vec::new();
9192

9293
if !privileges.is_empty() {
94+
for privilege in privileges.iter_mut() {
95+
let privilege_value = privilege.get_mut("privilege");
96+
if let Some(value) = privilege_value {
97+
if value.as_str().unwrap() == "ingester" {
98+
*value = JsonValue::String("ingestor".to_string());
99+
}
100+
}
101+
}
93102
let role_name =
94103
rand::distributions::Alphanumeric.sample_string(&mut rand::thread_rng(), 8);
95104
privileges_map.push((role_name.clone(), JsonValue::Array(privileges)));
@@ -110,8 +119,9 @@ pub fn v2_v3(mut storage_metadata: JsonValue) -> JsonValue {
110119
}
111120

112121
// maybe rename
113-
pub fn update_v3(mut storage_metadata: JsonValue) -> JsonValue {
122+
pub fn v3_v4(mut storage_metadata: JsonValue) -> JsonValue {
114123
let metadata = storage_metadata.as_object_mut().unwrap();
124+
*metadata.get_mut("version").unwrap() = JsonValue::String("v4".to_string());
115125
let sm = metadata.get("server_mode");
116126

117127
if sm.is_none() || sm.unwrap().as_str().unwrap() == "All" {
@@ -121,6 +131,20 @@ pub fn update_v3(mut storage_metadata: JsonValue) -> JsonValue {
121131
);
122132
}
123133

134+
let roles = metadata.get_mut("roles").unwrap().as_object_mut().unwrap();
135+
for (_, privileges) in roles.iter_mut() {
136+
let JsonValue::Array(privileges) = privileges else {
137+
panic!("privileges is an array")
138+
};
139+
for privilege in privileges.iter_mut() {
140+
let privilege_value = privilege.get_mut("privilege");
141+
if let Some(value) = privilege_value {
142+
if value.as_str().unwrap() == "ingester" {
143+
*value = JsonValue::String("ingestor".to_string());
144+
}
145+
}
146+
}
147+
}
124148
storage_metadata
125149
}
126150

0 commit comments

Comments
 (0)