@@ -183,7 +183,7 @@ func (c *Controller) onUpdate(oldObj, newObj interface{}) {
183
183
// and end up in an inconsistent state.
184
184
if ! reflect .DeepEqual (oldApp .Spec , newApp .Spec ) {
185
185
// Force-set the application status to Invalidating which handles clean-up and application re-run.
186
- if _ , err := c .updateSparkApplicationStatusWithRetries (newApp , func (status * v1alpha1.SparkApplicationStatus ) {
186
+ if _ , err := c .updateApplicationStatusWithRetries (newApp , func (status * v1alpha1.SparkApplicationStatus ) {
187
187
status .AppState .State = v1alpha1 .InvalidatingState
188
188
}); err != nil {
189
189
c .recorder .Eventf (
@@ -511,7 +511,7 @@ func (c *Controller) syncSparkApplication(key string) error {
511
511
512
512
if appToUpdate != nil {
513
513
glog .V (2 ).Infof ("Trying to update SparkApplication %s/%s, from: [%v] to [%v]" , app .Namespace , app .Name , app .Status , appToUpdate .Status )
514
- err = c .updateAppAndExportMetrics (app , appToUpdate )
514
+ err = c .updateApplicationAndExportMetrics (app , appToUpdate )
515
515
if err != nil {
516
516
glog .Errorf ("failed to update SparkApplication %s/%s: %v" , app .Namespace , app .Name , err )
517
517
return err
@@ -612,7 +612,7 @@ func (c *Controller) submitSparkApplication(app *v1alpha1.SparkApplication) *v1a
612
612
return app
613
613
}
614
614
615
- func (c * Controller ) updateSparkApplicationStatusWithRetries (
615
+ func (c * Controller ) updateApplicationStatusWithRetries (
616
616
original * v1alpha1.SparkApplication ,
617
617
updateFunc func (status * v1alpha1.SparkApplicationStatus )) (* v1alpha1.SparkApplication , error ) {
618
618
toUpdate := original .DeepCopy ()
@@ -649,19 +649,31 @@ func (c *Controller) updateSparkApplicationStatusWithRetries(
649
649
return toUpdate , nil
650
650
}
651
651
652
- func (c * Controller ) updateAppAndExportMetrics (oldApp , newApp * v1alpha1.SparkApplication ) error {
652
+ func (c * Controller ) updateApplicationAndExportMetrics (oldApp , newApp * v1alpha1.SparkApplication ) error {
653
653
// Skip update if nothing changed.
654
654
if reflect .DeepEqual (oldApp , newApp ) {
655
655
return nil
656
656
}
657
657
658
- app , err := c .updateSparkApplicationStatusWithRetries (oldApp , func (status * v1alpha1.SparkApplicationStatus ) {
659
- * status = newApp .Status
660
- })
658
+ updatedApp := newApp
659
+ var err error
660
+ for i := 0 ; i < maximumUpdateRetries ; i ++ {
661
+ updatedApp , err = c .crdClient .SparkoperatorV1alpha1 ().SparkApplications (newApp .Namespace ).Update (updatedApp )
662
+ if err == nil {
663
+ break
664
+ }
665
+ updatedApp , err = c .crdClient .SparkoperatorV1alpha1 ().SparkApplications (newApp .Namespace ).Get (newApp .Name , metav1.GetOptions {})
666
+ if err == nil {
667
+ updatedApp .Finalizers = newApp .Finalizers
668
+ updatedApp .Status = newApp .Status
669
+ }
670
+ }
671
+
661
672
// Export metrics if the update was successful.
662
- if err = = nil && c .metrics != nil {
663
- c .metrics .exportMetrics (oldApp , app )
673
+ if updatedApp ! = nil && c .metrics != nil {
674
+ c .metrics .exportMetrics (oldApp , updatedApp )
664
675
}
676
+
665
677
return err
666
678
}
667
679
0 commit comments