Skip to content

Commit 8501373

Browse files
committed
pipeline-manager: deployment resources status details
Adds a new field `deployment_resources_status_details` with information about the status of the (Kubernetes) resources backing the pipeline. The `deployment_runtime_status_details` are now also regularly updated while the pipeline is provisioned. Signed-off-by: Simon Kassing <simon.kassing@feldera.com>
1 parent 85ed955 commit 8501373

File tree

19 files changed

+1149
-415
lines changed

19 files changed

+1149
-415
lines changed
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
ALTER TABLE pipeline
2+
ADD COLUMN deployment_resources_status_details VARCHAR NULL;
3+
4+
UPDATE pipeline SET deployment_resources_status_details = '{}'
5+
WHERE deployment_resources_status = 'provisioned';

crates/pipeline-manager/src/api/endpoints/pipeline_management.rs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,10 +115,12 @@ pub struct PipelineInfo {
115115
pub deployment_desired_status: CombinedDesiredStatus,
116116
pub deployment_desired_status_since: DateTime<Utc>,
117117
pub deployment_resources_status: ResourcesStatus,
118+
pub deployment_resources_status_details: Option<serde_json::Value>,
118119
pub deployment_resources_status_since: DateTime<Utc>,
119120
pub deployment_resources_desired_status: ResourcesDesiredStatus,
120121
pub deployment_resources_desired_status_since: DateTime<Utc>,
121122
pub deployment_runtime_status: Option<RuntimeStatus>,
123+
pub deployment_runtime_status_details: Option<serde_json::Value>,
122124
pub deployment_runtime_status_since: Option<DateTime<Utc>>,
123125
pub deployment_runtime_desired_status: Option<RuntimeDesiredStatus>,
124126
pub deployment_runtime_desired_status_since: Option<DateTime<Utc>>,
@@ -161,10 +163,12 @@ pub struct PipelineInfoInternal {
161163
pub deployment_desired_status: CombinedDesiredStatus,
162164
pub deployment_desired_status_since: DateTime<Utc>,
163165
pub deployment_resources_status: ResourcesStatus,
166+
pub deployment_resources_status_details: Option<serde_json::Value>,
164167
pub deployment_resources_status_since: DateTime<Utc>,
165168
pub deployment_resources_desired_status: ResourcesDesiredStatus,
166169
pub deployment_resources_desired_status_since: DateTime<Utc>,
167170
pub deployment_runtime_status: Option<RuntimeStatus>,
171+
pub deployment_runtime_status_details: Option<serde_json::Value>,
168172
pub deployment_runtime_status_since: Option<DateTime<Utc>>,
169173
pub deployment_runtime_desired_status: Option<RuntimeDesiredStatus>,
170174
pub deployment_runtime_desired_status_since: Option<DateTime<Utc>>,
@@ -212,12 +216,15 @@ impl PipelineInfoInternal {
212216
extended_pipeline.deployment_runtime_desired_status_since,
213217
),
214218
deployment_resources_status: extended_pipeline.deployment_resources_status,
219+
deployment_resources_status_details: extended_pipeline
220+
.deployment_resources_status_details,
215221
deployment_resources_status_since: extended_pipeline.deployment_resources_status_since,
216222
deployment_resources_desired_status: extended_pipeline
217223
.deployment_resources_desired_status,
218224
deployment_resources_desired_status_since: extended_pipeline
219225
.deployment_resources_desired_status_since,
220226
deployment_runtime_status: extended_pipeline.deployment_runtime_status,
227+
deployment_runtime_status_details: extended_pipeline.deployment_runtime_status_details,
221228
deployment_runtime_status_since: extended_pipeline.deployment_runtime_status_since,
222229
deployment_runtime_desired_status: extended_pipeline.deployment_runtime_desired_status,
223230
deployment_runtime_desired_status_since: extended_pipeline
@@ -264,6 +271,8 @@ pub struct PipelineSelectedInfo {
264271
pub deployment_desired_status: CombinedDesiredStatus,
265272
pub deployment_desired_status_since: DateTime<Utc>,
266273
pub deployment_resources_status: ResourcesStatus,
274+
#[serde(skip_serializing_if = "Option::is_none")]
275+
pub deployment_resources_status_details: Option<Option<serde_json::Value>>,
267276
pub deployment_resources_status_since: DateTime<Utc>,
268277
pub deployment_resources_desired_status: ResourcesDesiredStatus,
269278
pub deployment_resources_desired_status_since: DateTime<Utc>,
@@ -318,6 +327,8 @@ pub struct PipelineSelectedInfoInternal {
318327
pub deployment_desired_status: CombinedDesiredStatus,
319328
pub deployment_desired_status_since: DateTime<Utc>,
320329
pub deployment_resources_status: ResourcesStatus,
330+
#[serde(skip_serializing_if = "Option::is_none")]
331+
pub deployment_resources_status_details: Option<Option<serde_json::Value>>,
321332
pub deployment_resources_status_since: DateTime<Utc>,
322333
pub deployment_resources_desired_status: ResourcesDesiredStatus,
323334
pub deployment_resources_desired_status_since: DateTime<Utc>,
@@ -375,6 +386,9 @@ impl PipelineSelectedInfoInternal {
375386
extended_pipeline.deployment_runtime_desired_status_since,
376387
),
377388
deployment_resources_status: extended_pipeline.deployment_resources_status,
389+
deployment_resources_status_details: Some(
390+
extended_pipeline.deployment_resources_status_details,
391+
),
378392
deployment_resources_status_since: extended_pipeline.deployment_resources_status_since,
379393
deployment_resources_desired_status: extended_pipeline
380394
.deployment_resources_desired_status,
@@ -432,6 +446,7 @@ impl PipelineSelectedInfoInternal {
432446
extended_pipeline.deployment_runtime_desired_status_since,
433447
),
434448
deployment_resources_status: extended_pipeline.deployment_resources_status,
449+
deployment_resources_status_details: None,
435450
deployment_resources_status_since: extended_pipeline.deployment_resources_status_since,
436451
deployment_resources_desired_status: extended_pipeline
437452
.deployment_resources_desired_status,

crates/pipeline-manager/src/api/examples.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ fn extended_pipeline_1() -> ExtendedPipelineDescr {
7272
deployment_initial: None,
7373
bootstrap_policy: None,
7474
deployment_resources_status: ResourcesStatus::Stopped,
75+
deployment_resources_status_details: None,
7576
deployment_resources_status_since: Default::default(),
7677
deployment_resources_desired_status: ResourcesDesiredStatus::Stopped,
7778
deployment_resources_desired_status_since: Default::default(),
@@ -155,6 +156,7 @@ fn extended_pipeline_2() -> ExtendedPipelineDescr {
155156
deployment_initial: None,
156157
bootstrap_policy: None,
157158
deployment_resources_status: ResourcesStatus::Stopped,
159+
deployment_resources_status_details: None,
158160
deployment_resources_status_since: Default::default(),
159161
deployment_resources_desired_status: ResourcesDesiredStatus::Stopped,
160162
deployment_resources_desired_status_since: Default::default(),
@@ -208,11 +210,13 @@ fn pipeline_info_internal_to_external(pipeline: PipelineInfoInternal) -> Pipelin
208210
deployment_desired_status: pipeline.deployment_desired_status,
209211
deployment_desired_status_since: pipeline.deployment_desired_status_since,
210212
deployment_resources_status: pipeline.deployment_resources_status,
213+
deployment_resources_status_details: pipeline.deployment_resources_status_details,
211214
deployment_resources_status_since: pipeline.deployment_resources_status_since,
212215
deployment_resources_desired_status: pipeline.deployment_resources_desired_status,
213216
deployment_resources_desired_status_since: pipeline
214217
.deployment_resources_desired_status_since,
215218
deployment_runtime_status: pipeline.deployment_runtime_status,
219+
deployment_runtime_status_details: pipeline.deployment_runtime_status_details,
216220
deployment_runtime_status_since: pipeline.deployment_runtime_status_since,
217221
deployment_runtime_desired_status: pipeline.deployment_runtime_desired_status,
218222
deployment_runtime_desired_status_since: pipeline.deployment_runtime_desired_status_since,
@@ -267,6 +271,7 @@ fn pipeline_selected_info_internal_to_external(
267271
deployment_desired_status: pipeline.deployment_desired_status,
268272
deployment_desired_status_since: pipeline.deployment_desired_status_since,
269273
deployment_resources_status: pipeline.deployment_resources_status,
274+
deployment_resources_status_details: pipeline.deployment_resources_status_details,
270275
deployment_resources_status_since: pipeline.deployment_resources_status_since,
271276
deployment_resources_desired_status: pipeline.deployment_resources_desired_status,
272277
deployment_resources_desired_status_since: pipeline

crates/pipeline-manager/src/api/support_data_collector.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1486,6 +1486,7 @@ mod tests {
14861486
pipeline_id,
14871487
Version(1),
14881488
"test-location",
1489+
json!({}),
14891490
ExtendedRuntimeStatus {
14901491
runtime_status: RuntimeStatus::Initializing,
14911492
runtime_status_details: json!(""),
@@ -1501,6 +1502,7 @@ mod tests {
15011502
pipeline_id,
15021503
Version(1),
15031504
"test-location",
1505+
json!({}),
15041506
ExtendedRuntimeStatus {
15051507
runtime_status: RuntimeStatus::Running,
15061508
runtime_status_details: json!(""),
@@ -1684,6 +1686,7 @@ mod tests {
16841686
pipeline_id,
16851687
Version(1),
16861688
"test-location",
1689+
json!({}),
16871690
ExtendedRuntimeStatus {
16881691
runtime_status: RuntimeStatus::Initializing,
16891692
runtime_status_details: json!(""),
@@ -1699,6 +1702,7 @@ mod tests {
16991702
pipeline_id,
17001703
Version(1),
17011704
"test-location",
1705+
json!({}),
17021706
ExtendedRuntimeStatus {
17031707
runtime_status: RuntimeStatus::Running,
17041708
runtime_status_details: json!(""),
@@ -1873,6 +1877,7 @@ mod tests {
18731877
pipeline_id,
18741878
Version(1),
18751879
"test-location",
1880+
json!({}),
18761881
ExtendedRuntimeStatus {
18771882
runtime_status: RuntimeStatus::Initializing,
18781883
runtime_status_details: json!(""),
@@ -1893,6 +1898,7 @@ mod tests {
18931898
pipeline_id,
18941899
Version(1),
18951900
"test-location",
1901+
json!({}),
18961902
ExtendedRuntimeStatus {
18971903
runtime_status: RuntimeStatus::Running,
18981904
runtime_status_details: json!(""),
@@ -1972,6 +1978,7 @@ mod tests {
19721978
pipeline_id,
19731979
Version(1),
19741980
"test-location",
1981+
json!({}),
19751982
ExtendedRuntimeStatus {
19761983
runtime_status: RuntimeStatus::Initializing,
19771984
runtime_status_details: json!(""),
@@ -1987,6 +1994,7 @@ mod tests {
19871994
pipeline_id,
19881995
Version(1),
19891996
"test-location",
1997+
json!({}),
19901998
ExtendedRuntimeStatus {
19911999
runtime_status: RuntimeStatus::Running,
19922000
runtime_status_details: json!(""),

crates/pipeline-manager/src/db/error.rs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,10 @@ pub enum DBError {
165165
current_status: ResourcesStatus,
166166
new_status: ResourcesStatus,
167167
},
168+
InvalidResourcesStatusRemain {
169+
current_status: ResourcesStatus,
170+
new_status: ResourcesStatus,
171+
},
168172
InvalidStorageStatusTransition {
169173
current_status: StorageStatus,
170174
new_status: StorageStatus,
@@ -561,6 +565,15 @@ impl Display for DBError {
561565
"Cannot transition from deployment resources status '{current_status}' (storage status: '{storage_status}') to '{new_status}'"
562566
)
563567
}
568+
DBError::InvalidResourcesStatusRemain {
569+
current_status,
570+
new_status,
571+
} => {
572+
write!(
573+
f,
574+
"Invalid remain as current status '{current_status}' is not equal to '{new_status}'"
575+
)
576+
}
564577
DBError::InvalidStorageStatusTransition {
565578
current_status,
566579
new_status,
@@ -732,6 +745,7 @@ impl DetailedError for DBError {
732745
Self::InvalidResourcesStatusTransition { .. } => {
733746
Cow::from("InvalidResourcesStatusTransition")
734747
}
748+
Self::InvalidResourcesStatusRemain { .. } => Cow::from("InvalidResourcesStatusRemain"),
735749
Self::InvalidStorageStatusTransition { .. } => {
736750
Cow::from("InvalidStorageStatusTransition")
737751
}
@@ -805,6 +819,7 @@ impl ResponseError for DBError {
805819
Self::TransitionRequiresCompiledProgram { .. } => StatusCode::INTERNAL_SERVER_ERROR, // Runner error
806820
Self::InvalidProgramStatusTransition { .. } => StatusCode::INTERNAL_SERVER_ERROR, // Compiler error
807821
Self::InvalidResourcesStatusTransition { .. } => StatusCode::INTERNAL_SERVER_ERROR, // Runner error
822+
Self::InvalidResourcesStatusRemain { .. } => StatusCode::INTERNAL_SERVER_ERROR,
808823
Self::StorageStatusImmutableUnlessStopped { .. } => StatusCode::BAD_REQUEST,
809824
Self::IllegalPipelineAction { .. } => StatusCode::BAD_REQUEST, // User trying to set a deployment desired status which cannot be performed currently
810825
Self::TlsConnection { .. } => StatusCode::INTERNAL_SERVER_ERROR,
@@ -831,3 +846,9 @@ impl ResponseError for DBError {
831846
HttpResponseBuilder::new(self.status_code()).json(ErrorResponse::from_error(self))
832847
}
833848
}
849+
850+
impl From<DBError> for ErrorResponse {
851+
fn from(val: DBError) -> Self {
852+
ErrorResponse::from_error_nolog(&val)
853+
}
854+
}

0 commit comments

Comments
 (0)