(
context: &Context,
long_id: Uuid,
action: Action,
name: &str,
kube_name: String,
version: VersionsNumber,
created_at: DateTime<Utc>,
f
| 189 | |
| 190 | impl<C: CloudProvider, M: DatabaseMode, T: DatabaseType<C, M>> Database<C, M, T> { |
| 191 | pub fn new( |
| 192 | context: &Context, |
| 193 | long_id: Uuid, |
| 194 | action: Action, |
| 195 | name: &str, |
| 196 | kube_name: String, |
| 197 | version: VersionsNumber, |
| 198 | created_at: DateTime<Utc>, |
| 199 | fqdn: &str, |
| 200 | fqdn_id: &str, |
| 201 | cpu_request: KubernetesCpuResourceUnit, |
| 202 | cpu_limit: KubernetesCpuResourceUnit, |
| 203 | ram_request: KubernetesMemoryResourceUnit, |
| 204 | ram_limit: KubernetesMemoryResourceUnit, |
| 205 | total_disk_size_in_gb: u32, // TODO(benjaminch): introduce a Kubernetes Volume Size resource unit |
| 206 | database_instance_type: Option<Box<dyn DatabaseInstanceType>>, |
| 207 | publicly_accessible: bool, |
| 208 | private_port: u16, |
| 209 | options: T::DatabaseOptions, |
| 210 | mk_event_details: impl Fn(Transmitter) -> EventDetails, |
| 211 | annotations_groups: Vec<AnnotationsGroup>, |
| 212 | additionnal_annotations: Vec<Annotation>, |
| 213 | labels_groups: Vec<LabelsGroup>, |
| 214 | ) -> Result<Self, DatabaseError> { |
| 215 | // TODO: Implement domain constraint logic |
| 216 | |
| 217 | // check instance type is matching database cloud provider |
| 218 | database_instance_type |
| 219 | .as_ref() |
| 220 | .map_or(Ok(()), |i| Self::check_instance_type_validity(i.as_ref(), C::cloud_provider()))?; |
| 221 | |
| 222 | let workspace_directory = crate::fs::workspace_directory( |
| 223 | context.workspace_root_dir(), |
| 224 | context.execution_id(), |
| 225 | format!("databases/{long_id}"), |
| 226 | ) |
| 227 | .map_err(|_| DatabaseError::InvalidConfig("Can't create workspace directory".to_string()))?; |
| 228 | |
| 229 | // Check memory settings only for container databases, as managed db are using an instance type |
| 230 | if M::is_container() { |
| 231 | if cpu_request.to_millicpu() > cpu_limit.to_millicpu() { |
| 232 | return Err(DatabaseError::InvalidConfig( |
| 233 | "cpu_request_in_milli must be less or equal to cpu_limit_in_milli".to_string(), |
| 234 | )); |
| 235 | } |
| 236 | |
| 237 | if cpu_request.to_millicpu() == 0 { |
| 238 | return Err(DatabaseError::InvalidConfig( |
| 239 | "cpu_request_in_milli must be greater than 0".to_string(), |
| 240 | )); |
| 241 | } |
| 242 | |
| 243 | if ram_request.to_mebibyte() > ram_limit.to_mebibyte() { |
| 244 | return Err(DatabaseError::InvalidConfig( |
| 245 | "ram_request_in_mib must be less or equal to ram_limit_in_mib".to_string(), |
| 246 | )); |
| 247 | } |
| 248 |
nothing calls this directly
no test coverage detected