Skip to content

Commit a99b97c

Browse files
committed
[scd] Factorize volume4D union from rest
1 parent 51e5d77 commit a99b97c

File tree

3 files changed

+26
-27
lines changed

3 files changed

+26
-27
lines changed

pkg/models/scd_conversions.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,24 @@ func Volume4DFromSCDRest(vol4 *restapi.Volume4D, opts Volume4DOpts) (*Volume4D,
5858
}, nil
5959
}
6060

61+
// UnionVolume4DFromSCDRest converts a slice of vol4 SCD v1 REST model to a single bounding Volume4D
62+
func UnionVolume4DFromSCDRest(vol4s []restapi.Volume4D, opts Volume4DOpts) (*Volume4D, error) {
63+
volumes := make([]*Volume4D, len(vol4s))
64+
for idx, vol4 := range vol4s {
65+
volume, err := Volume4DFromSCDRest(&vol4, opts)
66+
if err != nil {
67+
return nil, stacktrace.Propagate(err, "Failed to parse volume %d", idx)
68+
}
69+
volumes[idx] = volume
70+
}
71+
union, err := UnionVolumes4D(volumes...)
72+
if err != nil {
73+
return nil, stacktrace.Propagate(err, "Failed to union volumes")
74+
}
75+
76+
return union, nil
77+
}
78+
6179
type Volume3DOpts struct {
6280
RequireAltitudeBounds bool
6381
}

pkg/scd/constraints_handler.go

Lines changed: 4 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -362,7 +362,6 @@ func (a *Server) PutConstraintReference(ctx context.Context, manager string, ent
362362

363363
type validConstraintParams struct {
364364
id dssmodels.ID
365-
extents []*dssmodels.Volume4D
366365
uExtent *dssmodels.Volume4D
367366
cells s2.CellUnion
368367
ussBaseURL string
@@ -414,20 +413,11 @@ func validateAndReturnConstraintUpsertParams(
414413
}
415414
}
416415

417-
// TODO: factor out logic below into common multi-vol4d parser and reuse with PutOperationReference
418-
valid.extents = make([]*dssmodels.Volume4D, len(params.Extents))
419-
for idx, extent := range params.Extents {
420-
// Start and end times are required for each volume
421-
opts := dssmodels.Volume4DOpts{RequireTimeBounds: true}
422-
cExtent, err := dssmodels.Volume4DFromSCDRest(&extent, opts)
423-
if err != nil {
424-
return nil, stacktrace.Propagate(err, "Failed to parse extent %d", idx)
425-
}
426-
valid.extents[idx] = cExtent
427-
}
428-
valid.uExtent, err = dssmodels.UnionVolumes4D(valid.extents...)
416+
// Start and end times are required for each volume
417+
opts := dssmodels.Volume4DOpts{RequireTimeBounds: true}
418+
valid.uExtent, err = dssmodels.UnionVolume4DFromSCDRest(params.Extents, opts)
429419
if err != nil {
430-
return nil, stacktrace.Propagate(err, "Failed to union extents")
420+
return nil, stacktrace.Propagate(err, "Invalid extents")
431421
}
432422

433423
if now.After(*valid.uExtent.EndTime) {

pkg/scd/operational_intents_handler.go

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -393,7 +393,6 @@ type validOIRParams struct {
393393
ovn scdmodels.OVN
394394
newOVN scdmodels.OVN
395395
state scdmodels.OperationalIntentState
396-
extents []*dssmodels.Volume4D
397396
uExtent *dssmodels.Volume4D
398397
cells s2.CellUnion
399398
subscriptionID dssmodels.ID
@@ -503,20 +502,12 @@ func validateAndReturnOIRUpsertParams(
503502
return nil, stacktrace.NewError("Invalid OperationalIntent state: %s", params.State)
504503
}
505504

506-
valid.extents = make([]*dssmodels.Volume4D, len(params.Extents))
507-
for idx, extent := range params.Extents {
508-
// Start and end times, as well as lower and upper altitudes, are required for each volume
509-
opts := dssmodels.Volume4DOpts{RequireAltitudeBounds: true, RequireTimeBounds: true}
510-
cExtent, err := dssmodels.Volume4DFromSCDRest(&extent, opts)
511-
if err != nil {
512-
return nil, stacktrace.Propagate(err, "Failed to parse extent %d", idx)
513-
}
514-
valid.extents[idx] = cExtent
515-
}
505+
// Start and end times, as well as lower and upper altitudes, are required for each volume
506+
opts := dssmodels.Volume4DOpts{RequireAltitudeBounds: true, RequireTimeBounds: true}
516507

517-
valid.uExtent, err = dssmodels.UnionVolumes4D(valid.extents...)
508+
valid.uExtent, err = dssmodels.UnionVolume4DFromSCDRest(params.Extents, opts)
518509
if err != nil {
519-
return nil, stacktrace.Propagate(err, "Failed to union extents")
510+
return nil, stacktrace.Propagate(err, "Invalid extents")
520511
}
521512

522513
if now.After(*valid.uExtent.EndTime) {

0 commit comments

Comments
 (0)