@@ -182,6 +182,21 @@ func (r *ReservationReconciler) handleReserve(ctx context.Context,
182182 return ctrl.Result {Requeue : true }, nil
183183 }
184184 klog .Errorf ("Error when reserving flavour for Reservation %s: %s" , req .NamespacedName , err )
185+
186+ // Set the peering candidate as available again
187+ peeringCandidate .Spec .Available = true
188+ if err := r .Update (ctx , peeringCandidate ); err != nil {
189+ klog .Errorf ("Error when updating PeeringCandidate %s status before reconcile: %s" , req .NamespacedName , err )
190+ return ctrl.Result {}, err
191+ }
192+ peeringCandidate .Status .LastUpdateTime = tools .GetTimeNow ()
193+
194+ if err := r .Status ().Update (ctx , peeringCandidate ); err != nil {
195+ klog .Errorf ("Error when updating PeeringCandidate %s status before reconcile: %s" , req .NamespacedName , err )
196+ return ctrl.Result {}, err
197+ }
198+
199+ // Set the reservation as failed
185200 reservation .SetReserveStatus (nodecorev1alpha1 .PhaseFailed )
186201 reservation .SetPhase (nodecorev1alpha1 .PhaseFailed , "Reservation failed: error when reserving flavour" )
187202 if err := r .updateReservationStatus (ctx , reservation ); err != nil {
@@ -267,6 +282,35 @@ func (r *ReservationReconciler) handlePurchase(ctx context.Context,
267282 resPurchase , err := r .Gateway .PurchaseFlavour (ctx , transactionID , reservation .Spec .Seller )
268283 if err != nil {
269284 klog .Errorf ("Error when purchasing flavour for Reservation %s: %s" , req .NamespacedName , err )
285+
286+ // Set the PeerCandidate as available again
287+ var peeringCandidate advertisementv1alpha1.PeeringCandidate
288+ if err := r .Get (ctx , client.ObjectKey {
289+ Name : reservation .Spec .PeeringCandidate .Name ,
290+ Namespace : reservation .Spec .PeeringCandidate .Namespace ,
291+ }, & peeringCandidate ); err != nil {
292+ klog .Errorf ("Error when getting PeeringCandidate %s before reconcile: %s" , req .NamespacedName , err )
293+ reservation .SetPhase (nodecorev1alpha1 .PhaseFailed , "Reservation failed: error when getting PeeringCandidate" )
294+ if err := r .updateReservationStatus (ctx , reservation ); err != nil {
295+ klog .Errorf ("Error when updating Reservation %s status before reconcile: %s" , req .NamespacedName , err )
296+ return ctrl.Result {}, err
297+ }
298+ return ctrl.Result {}, err
299+ }
300+
301+ peeringCandidate .Spec .Available = true
302+ if err := r .Update (ctx , & peeringCandidate ); err != nil {
303+ klog .Errorf ("Error when updating PeeringCandidate %s status before reconcile: %s" , req .NamespacedName , err )
304+ return ctrl.Result {}, err
305+ }
306+ peeringCandidate .Status .LastUpdateTime = tools .GetTimeNow ()
307+
308+ if err := r .Status ().Update (ctx , & peeringCandidate ); err != nil {
309+ klog .Errorf ("Error when updating PeeringCandidate %s status before reconcile: %s" , req .NamespacedName , err )
310+ return ctrl.Result {}, err
311+ }
312+
313+ // Set the reservation as failed
270314 reservation .SetPurchaseStatus (nodecorev1alpha1 .PhaseFailed )
271315 reservation .SetPhase (nodecorev1alpha1 .PhaseFailed , "Reservation failed: error when purchasing flavour" )
272316 if err := r .updateReservationStatus (ctx , reservation ); err != nil {
0 commit comments