@@ -35,14 +35,14 @@ const MIN_OVERLAY_PG_VERSION: i32 = 14;
3535pub async fn resolve_postgres_version (
3636 client : & Client ,
3737 replica : & PostgresPhysicalReplica ,
38- ) -> Result < String > {
38+ ) -> Result < i32 > {
3939 let overlay_config = match & replica. spec . overlay_database {
4040 Some ( c) => c,
41- None => return Ok ( DEFAULT_PG_VERSION . to_string ( ) ) ,
41+ None => return Ok ( DEFAULT_PG_VERSION ) ,
4242 } ;
4343
44- let version = if let Some ( ref v) = overlay_config. postgres_version {
45- v. to_string ( )
44+ let version = if let Some ( v) = overlay_config. postgres_version {
45+ v as i32
4646 } else {
4747 let catalog_ref = overlay_config. image_catalog . as_ref ( ) ;
4848 let catalog_name = catalog_ref. map ( |c| c. name . as_str ( ) ) ;
@@ -62,12 +62,10 @@ pub async fn resolve_postgres_version(
6262 None
6363 } ;
6464
65- from_catalog
66- . map ( |v| v. to_string ( ) )
67- . unwrap_or_else ( || DEFAULT_PG_VERSION . to_string ( ) )
65+ from_catalog. unwrap_or ( DEFAULT_PG_VERSION )
6866 } ;
6967
70- validate_overlay_pg_version ( & version) ?;
68+ validate_overlay_pg_version ( version) ?;
7169
7270 Ok ( version)
7371}
@@ -78,12 +76,11 @@ pub async fn resolve_postgres_version(
7876///
7977/// The overlay relies on `pg_read_all_data` and `pg_write_all_data` which
8078/// require PostgreSQL >= 14.
81- pub fn validate_overlay_pg_version ( version : & str ) -> Result < ( ) > {
82- let major: i32 = version. parse ( ) . unwrap_or ( 0 ) ;
83- if major < MIN_OVERLAY_PG_VERSION {
79+ pub fn validate_overlay_pg_version ( version : i32 ) -> Result < ( ) > {
80+ if version < MIN_OVERLAY_PG_VERSION {
8481 return Err ( Error :: InvalidOverlayConfig ( format ! (
8582 "overlay database requires PostgreSQL >= {MIN_OVERLAY_PG_VERSION} \
86- (pg_read_all_data / pg_write_all_data), got \" {version}\" "
83+ (pg_read_all_data / pg_write_all_data), got {version}"
8784 ) ) ) ;
8885 }
8986 Ok ( ( ) )
@@ -117,7 +114,7 @@ pub async fn ensure_cnpg_cluster(
117114 namespace : & str ,
118115 replica : & PostgresPhysicalReplica ,
119116 storage_size : & Quantity ,
120- pg_version : & str ,
117+ pg_version : i32 ,
121118) -> Result < bool > {
122119 let replica_name = replica. name_any ( ) ;
123120 let cluster_name = super :: overlay_cluster_name ( & replica_name) ;
@@ -130,15 +127,13 @@ pub async fn ensure_cnpg_cluster(
130127 let api_resource = cnpg:: api:: cluster_resource ( ) ;
131128 let api: Api < DynamicObject > = Api :: namespaced_with ( client. clone ( ) , namespace, & api_resource) ;
132129
133- let pg_major: i32 = pg_version. parse ( ) . unwrap_or ( 17 ) ;
134-
135130 let image_catalog_ref = overlay_config
136131 . image_catalog
137132 . as_ref ( )
138133 . map ( |cat| CnpgImageCatalogRef {
139134 name : cat. name . clone ( ) ,
140135 kind : cat. kind . clone ( ) . unwrap_or ( "ClusterImageCatalog" . into ( ) ) ,
141- major : pg_major ,
136+ major : pg_version ,
142137 } ) ;
143138
144139 let spec = CnpgClusterSpec {
@@ -302,12 +297,12 @@ mod tests {
302297
303298 #[ test]
304299 fn validate_pg_version_17_ok ( ) {
305- assert ! ( validate_overlay_pg_version( "17" ) . is_ok( ) ) ;
300+ assert ! ( validate_overlay_pg_version( 17 ) . is_ok( ) ) ;
306301 }
307302
308303 #[ test]
309304 fn validate_pg_version_13_rejected ( ) {
310- let err = validate_overlay_pg_version ( "13" ) . unwrap_err ( ) ;
305+ let err = validate_overlay_pg_version ( 13 ) . unwrap_err ( ) ;
311306 let msg = err. to_string ( ) ;
312307 assert ! ( msg. contains( ">= 14" ) , "error should mention >= 14: {msg}" ) ;
313308 assert ! (
0 commit comments