Skip to content

Commit f069ea0

Browse files
authored
fix(test): use different table name (#5334)
1 parent 9ae4801 commit f069ea0

File tree

1 file changed

+59
-34
lines changed

1 file changed

+59
-34
lines changed

src/meta-srv/src/election/postgres.rs

Lines changed: 59 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -730,10 +730,8 @@ mod tests {
730730

731731
use super::*;
732732
use crate::error::PostgresExecutionSnafu;
733-
const CREATE_TABLE: &str =
734-
"CREATE TABLE IF NOT EXISTS greptime_metakv(k bytea PRIMARY KEY, v bytea);";
735733

736-
async fn create_postgres_client() -> Result<Client> {
734+
async fn create_postgres_client(table_name: Option<&str>) -> Result<Client> {
737735
let endpoint = env::var("GT_POSTGRES_ENDPOINTS").unwrap_or_default();
738736
if endpoint.is_empty() {
739737
return UnexpectedSnafu {
@@ -747,27 +745,40 @@ mod tests {
747745
tokio::spawn(async move {
748746
connection.await.context(PostgresExecutionSnafu).unwrap();
749747
});
750-
client.execute(CREATE_TABLE, &[]).await.unwrap();
748+
if let Some(table_name) = table_name {
749+
let create_table_sql = format!(
750+
"CREATE TABLE IF NOT EXISTS {}(k bytea PRIMARY KEY, v bytea);",
751+
table_name
752+
);
753+
client.execute(&create_table_sql, &[]).await.unwrap();
754+
}
751755
Ok(client)
752756
}
753757

758+
async fn drop_table(client: &Client, table_name: &str) {
759+
let sql = format!("DROP TABLE IF EXISTS {};", table_name);
760+
client.execute(&sql, &[]).await.unwrap();
761+
}
762+
754763
#[tokio::test]
755764
async fn test_postgres_crud() {
756-
let client = create_postgres_client().await.unwrap();
757-
758765
let key = "test_key".to_string();
759766
let value = "test_value".to_string();
760767

768+
let uuid = uuid::Uuid::new_v4().to_string();
769+
let table_name = "test_postgres_crud_greptime_metakv";
770+
let client = create_postgres_client(Some(table_name)).await.unwrap();
771+
761772
let (tx, _) = broadcast::channel(100);
762773
let pg_election = PgElection {
763774
leader_value: "test_leader".to_string(),
764775
client,
765776
is_leader: AtomicBool::new(false),
766777
leader_infancy: AtomicBool::new(true),
767778
leader_watcher: tx,
768-
store_key_prefix: uuid::Uuid::new_v4().to_string(),
779+
store_key_prefix: uuid,
769780
candidate_lease_ttl_secs: 10,
770-
sql_set: ElectionSqlFactory::new(28319, "greptime_metakv").build(),
781+
sql_set: ElectionSqlFactory::new(28319, table_name).build(),
771782
};
772783

773784
let res = pg_election
@@ -823,14 +834,17 @@ mod tests {
823834
.unwrap();
824835
assert!(res.is_empty());
825836
assert!(current == Timestamp::default());
837+
838+
drop_table(&pg_election.client, table_name).await;
826839
}
827840

828841
async fn candidate(
829842
leader_value: String,
830843
candidate_lease_ttl_secs: u64,
831844
store_key_prefix: String,
845+
table_name: String,
832846
) {
833-
let client = create_postgres_client().await.unwrap();
847+
let client = create_postgres_client(None).await.unwrap();
834848

835849
let (tx, _) = broadcast::channel(100);
836850
let pg_election = PgElection {
@@ -841,7 +855,7 @@ mod tests {
841855
leader_watcher: tx,
842856
store_key_prefix,
843857
candidate_lease_ttl_secs,
844-
sql_set: ElectionSqlFactory::new(28319, "greptime_metakv").build(),
858+
sql_set: ElectionSqlFactory::new(28319, &table_name).build(),
845859
};
846860

847861
let node_info = MetasrvNodeInfo {
@@ -857,22 +871,24 @@ mod tests {
857871
async fn test_candidate_registration() {
858872
let leader_value_prefix = "test_leader".to_string();
859873
let candidate_lease_ttl_secs = 5;
860-
let store_key_prefix = uuid::Uuid::new_v4().to_string();
874+
let uuid = uuid::Uuid::new_v4().to_string();
875+
let table_name = "test_candidate_registration_greptime_metakv";
861876
let mut handles = vec![];
877+
let client = create_postgres_client(Some(table_name)).await.unwrap();
878+
862879
for i in 0..10 {
863880
let leader_value = format!("{}{}", leader_value_prefix, i);
864881
let handle = tokio::spawn(candidate(
865882
leader_value,
866883
candidate_lease_ttl_secs,
867-
store_key_prefix.clone(),
884+
uuid.clone(),
885+
table_name.to_string(),
868886
));
869887
handles.push(handle);
870888
}
871889
// Wait for candidates to registrate themselves and renew their leases at least once.
872890
tokio::time::sleep(Duration::from_secs(3)).await;
873891

874-
let client = create_postgres_client().await.unwrap();
875-
876892
let (tx, _) = broadcast::channel(100);
877893
let leader_value = "test_leader".to_string();
878894
let pg_election = PgElection {
@@ -881,9 +897,9 @@ mod tests {
881897
is_leader: AtomicBool::new(false),
882898
leader_infancy: AtomicBool::new(true),
883899
leader_watcher: tx,
884-
store_key_prefix: store_key_prefix.clone(),
900+
store_key_prefix: uuid.clone(),
885901
candidate_lease_ttl_secs,
886-
sql_set: ElectionSqlFactory::new(28319, "greptime_metakv").build(),
902+
sql_set: ElectionSqlFactory::new(28319, table_name).build(),
887903
};
888904

889905
let candidates = pg_election.all_candidates().await.unwrap();
@@ -900,20 +916,21 @@ mod tests {
900916

901917
// Garbage collection
902918
for i in 0..10 {
903-
let key = format!(
904-
"{}{}{}{}",
905-
store_key_prefix, CANDIDATES_ROOT, leader_value_prefix, i
906-
);
919+
let key = format!("{}{}{}{}", uuid, CANDIDATES_ROOT, leader_value_prefix, i);
907920
let res = pg_election.delete_value(&key).await.unwrap();
908921
assert!(res);
909922
}
923+
924+
drop_table(&pg_election.client, table_name).await;
910925
}
911926

912927
#[tokio::test]
913928
async fn test_elected_and_step_down() {
914929
let leader_value = "test_leader".to_string();
915930
let candidate_lease_ttl_secs = 5;
916-
let client = create_postgres_client().await.unwrap();
931+
let uuid = uuid::Uuid::new_v4().to_string();
932+
let table_name = "test_elected_and_step_down_greptime_metakv";
933+
let client = create_postgres_client(Some(table_name)).await.unwrap();
917934

918935
let (tx, mut rx) = broadcast::channel(100);
919936
let leader_pg_election = PgElection {
@@ -922,9 +939,9 @@ mod tests {
922939
is_leader: AtomicBool::new(false),
923940
leader_infancy: AtomicBool::new(true),
924941
leader_watcher: tx,
925-
store_key_prefix: uuid::Uuid::new_v4().to_string(),
942+
store_key_prefix: uuid,
926943
candidate_lease_ttl_secs,
927-
sql_set: ElectionSqlFactory::new(28320, "greptime_metakv").build(),
944+
sql_set: ElectionSqlFactory::new(28320, table_name).build(),
928945
};
929946

930947
leader_pg_election.elected().await.unwrap();
@@ -1015,14 +1032,17 @@ mod tests {
10151032
}
10161033
_ => panic!("Expected LeaderChangeMessage::StepDown"),
10171034
}
1035+
1036+
drop_table(&leader_pg_election.client, table_name).await;
10181037
}
10191038

10201039
#[tokio::test]
10211040
async fn test_leader_action() {
10221041
let leader_value = "test_leader".to_string();
1023-
let store_key_prefix = uuid::Uuid::new_v4().to_string();
1042+
let uuid = uuid::Uuid::new_v4().to_string();
1043+
let table_name = "test_leader_action_greptime_metakv";
10241044
let candidate_lease_ttl_secs = 5;
1025-
let client = create_postgres_client().await.unwrap();
1045+
let client = create_postgres_client(Some(table_name)).await.unwrap();
10261046

10271047
let (tx, mut rx) = broadcast::channel(100);
10281048
let leader_pg_election = PgElection {
@@ -1031,9 +1051,9 @@ mod tests {
10311051
is_leader: AtomicBool::new(false),
10321052
leader_infancy: AtomicBool::new(true),
10331053
leader_watcher: tx,
1034-
store_key_prefix,
1054+
store_key_prefix: uuid,
10351055
candidate_lease_ttl_secs,
1036-
sql_set: ElectionSqlFactory::new(28321, "greptime_metakv").build(),
1056+
sql_set: ElectionSqlFactory::new(28321, table_name).build(),
10371057
};
10381058

10391059
// Step 1: No leader exists, campaign and elected.
@@ -1246,38 +1266,41 @@ mod tests {
12461266
.query(&leader_pg_election.sql_set.step_down, &[])
12471267
.await
12481268
.unwrap();
1269+
1270+
drop_table(&leader_pg_election.client, table_name).await;
12491271
}
12501272

12511273
#[tokio::test]
12521274
async fn test_follower_action() {
12531275
common_telemetry::init_default_ut_logging();
12541276
let candidate_lease_ttl_secs = 5;
1255-
let store_key_prefix = uuid::Uuid::new_v4().to_string();
1277+
let uuid = uuid::Uuid::new_v4().to_string();
1278+
let table_name = "test_follower_action_greptime_metakv";
12561279

1257-
let follower_client = create_postgres_client().await.unwrap();
1280+
let follower_client = create_postgres_client(Some(table_name)).await.unwrap();
12581281
let (tx, mut rx) = broadcast::channel(100);
12591282
let follower_pg_election = PgElection {
12601283
leader_value: "test_follower".to_string(),
12611284
client: follower_client,
12621285
is_leader: AtomicBool::new(false),
12631286
leader_infancy: AtomicBool::new(true),
12641287
leader_watcher: tx,
1265-
store_key_prefix: store_key_prefix.clone(),
1288+
store_key_prefix: uuid.clone(),
12661289
candidate_lease_ttl_secs,
1267-
sql_set: ElectionSqlFactory::new(28322, "greptime_metakv").build(),
1290+
sql_set: ElectionSqlFactory::new(28322, table_name).build(),
12681291
};
12691292

1270-
let leader_client = create_postgres_client().await.unwrap();
1293+
let leader_client = create_postgres_client(Some(table_name)).await.unwrap();
12711294
let (tx, _) = broadcast::channel(100);
12721295
let leader_pg_election = PgElection {
12731296
leader_value: "test_leader".to_string(),
12741297
client: leader_client,
12751298
is_leader: AtomicBool::new(false),
12761299
leader_infancy: AtomicBool::new(true),
12771300
leader_watcher: tx,
1278-
store_key_prefix,
1301+
store_key_prefix: uuid,
12791302
candidate_lease_ttl_secs,
1280-
sql_set: ElectionSqlFactory::new(28322, "greptime_metakv").build(),
1303+
sql_set: ElectionSqlFactory::new(28322, table_name).build(),
12811304
};
12821305

12831306
leader_pg_election
@@ -1326,5 +1349,7 @@ mod tests {
13261349
.query(&leader_pg_election.sql_set.step_down, &[])
13271350
.await
13281351
.unwrap();
1352+
1353+
drop_table(&follower_pg_election.client, table_name).await;
13291354
}
13301355
}

0 commit comments

Comments
 (0)