simplify CR status updates for ceph and edgefs

The status messages on the CRs had much duplicated code
for logging an error if the status update failed.
Now any failures around the status update are logged
consistently within the updateClusterStatus method
so there is no need to return an error and duplicate
the error handling everywhere.

Signed-off-by: travisn <tnielsen@redhat.com>
This commit is contained in:
travisn committed 2019-07-24 12:52:30 -06:00
1 parent 35e2943ec8
commit 3142c3e5cb
2 files changed
+25 -74

No files matched your search

+12 -38
View File
@@ -233,11 +233,7 @@ func (c *ClusterController) onAdd(obj interface{}) {
logger.Infof("starting cluster in namespace %s", cluster.Namespace)
if c.devicesInUse && cluster.Spec.Storage.AnyUseAllDevices() {
message := "using all devices in more than one namespace not supported"
logger.Error(message)
if err := c.updateClusterStatus(clusterObj.Namespace, clusterObj.Name, cephv1.ClusterStateError, message); err != nil {
logger.Errorf("failed to update cluster status in namespace %s: %+v", cluster.Namespace, err)
}
c.updateClusterStatus(clusterObj.Namespace, clusterObj.Name, cephv1.ClusterStateError, "using all devices in more than one namespace is not supported")
return
}
@@ -326,11 +322,7 @@ func (c *ClusterController) onAdd(obj interface{}) {
}
}
err = c.updateClusterStatus(clusterObj.Namespace, clusterObj.Name, cephv1.ClusterStateCreating, "")
if err != nil {
logger.Errorf("failed to update cluster status in namespace %s: %+v", cluster.Namespace, err)
return false, nil
}
c.updateClusterStatus(clusterObj.Namespace, clusterObj.Name, cephv1.ClusterStateCreating, "")
err = cluster.createInstance(c.rookImage, *cephVersion)
if err != nil {
@@ -339,11 +331,7 @@ func (c *ClusterController) onAdd(obj interface{}) {
}
// cluster is created, update the cluster CRD status now
err = c.updateClusterStatus(clusterObj.Namespace, clusterObj.Name, cephv1.ClusterStateCreated, "")
if err != nil {
logger.Errorf("failed to update cluster status in namespace %s: %+v", cluster.Namespace, err)
return false, nil
}
c.updateClusterStatus(clusterObj.Namespace, clusterObj.Name, cephv1.ClusterStateCreated, "")
return true, nil
})
@@ -353,10 +341,7 @@ func (c *ClusterController) onAdd(obj interface{}) {
if !validOrchestration {
message = fmt.Sprintf("giving up creating cluster in namespace %s", cluster.Namespace)
}
logger.Error(message)
if err := c.updateClusterStatus(clusterObj.Namespace, clusterObj.Name, cephv1.ClusterStateError, message); err != nil {
logger.Errorf("failed to update cluster status in namespace %s: %+v", cluster.Namespace, err)
}
c.updateClusterStatus(clusterObj.Namespace, clusterObj.Name, cephv1.ClusterStateError, message)
return
}
@@ -582,11 +567,8 @@ func (c *ClusterController) onUpdate(oldObj, newObj interface{}) {
return c.handleUpdate(newClust.Name, cluster)
})
if err != nil {
message := fmt.Sprintf("giving up trying to update cluster in namespace %s after %s", cluster.Namespace, updateClusterTimeout)
logger.Error(message)
if err := c.updateClusterStatus(newClust.Namespace, newClust.Name, cephv1.ClusterStateError, message); err != nil {
logger.Errorf("failed to update cluster status in namespace %s: %+v", newClust.Namespace, err)
}
c.updateClusterStatus(newClust.Namespace, newClust.Name, cephv1.ClusterStateError,
fmt.Sprintf("giving up trying to update cluster in namespace %s after %s", cluster.Namespace, updateClusterTimeout))
return
}
@@ -597,20 +579,14 @@ func (c *ClusterController) onUpdate(oldObj, newObj interface{}) {
}
func (c *ClusterController) handleUpdate(crdName string, cluster *cluster) (bool, error) {
if err := c.updateClusterStatus(cluster.Namespace, crdName, cephv1.ClusterStateUpdating, ""); err != nil {
logger.Errorf("failed to update cluster status in namespace %s: %+v", cluster.Namespace, err)
return false, nil
}
c.updateClusterStatus(cluster.Namespace, crdName, cephv1.ClusterStateUpdating, "")
if err := cluster.createInstance(c.rookImage, cluster.Info.CephVersion); err != nil {
logger.Errorf("failed to update cluster in namespace %s. %+v", cluster.Namespace, err)
return false, nil
}
if err := c.updateClusterStatus(cluster.Namespace, crdName, cephv1.ClusterStateCreated, ""); err != nil {
logger.Errorf("failed to update cluster status in namespace %s: %+v", cluster.Namespace, err)
return false, nil
}
c.updateClusterStatus(cluster.Namespace, crdName, cephv1.ClusterStateCreated, "")
logger.Infof("succeeded updating cluster in namespace %s", cluster.Namespace)
return true, nil
@@ -820,13 +796,13 @@ func (c *ClusterController) removeFinalizer(obj interface{}) {
}
// updateClusterStatus updates the status of the cluster custom resource, whether it is being updated or is completed
func (c *ClusterController) updateClusterStatus(namespace, name string, state cephv1.ClusterState, message string) error {
logger.Infof("CephCluster %s status: %s", namespace, state)
func (c *ClusterController) updateClusterStatus(namespace, name string, state cephv1.ClusterState, message string) {
logger.Infof("CephCluster %s status: %s. %s", namespace, state, message)
// get the most recent cluster CRD object
cluster, err := c.context.RookClientset.CephV1().CephClusters(namespace).Get(name, metav1.GetOptions{})
if err != nil {
return fmt.Errorf("failed to get cluster from namespace %s prior to updating its status: %+v", namespace, err)
logger.Errorf("failed to get cluster from namespace %s prior to updating its status: %+v", namespace, err)
}
// update the status on the retrieved cluster object
@@ -834,10 +810,8 @@ func (c *ClusterController) updateClusterStatus(namespace, name string, state ce
cluster.Status.State = state
cluster.Status.Message = message
if _, err := c.context.RookClientset.CephV1().CephClusters(namespace).Update(cluster); err != nil {
return fmt.Errorf("failed to update cluster %s status: %+v", namespace, err)
logger.Errorf("failed to update cluster %s status: %+v", namespace, err)
}
return nil
}
func ClusterOwnerRef(namespace, clusterID string) metav1.OwnerReference {
+13 -36
View File
@@ -133,11 +133,7 @@ func (c *ClusterController) onAdd(obj interface{}) {
logger.Infof("starting cluster in namespace %s", cluster.Namespace)
if c.devicesInUse && cluster.Spec.Storage.AnyUseAllDevices() {
message := "using all devices in more than one namespace not supported"
logger.Error(message)
if err := c.updateClusterStatus(clusterObj.Namespace, clusterObj.Name, edgefsv1beta1.ClusterStateError, message); err != nil {
logger.Errorf("failed to update cluster status in namespace %s: %+v", cluster.Namespace, err)
}
c.updateClusterStatus(clusterObj.Namespace, clusterObj.Name, edgefsv1beta1.ClusterStateError, "using all devices in more than one namespace is not supported")
return
}
@@ -147,10 +143,7 @@ func (c *ClusterController) onAdd(obj interface{}) {
// Start the Rook cluster components. Retry several times in case of failure.
err := wait.Poll(clusterCreateInterval, clusterCreateTimeout, func() (bool, error) {
if err := c.updateClusterStatus(clusterObj.Namespace, clusterObj.Name, edgefsv1beta1.ClusterStateCreating, ""); err != nil {
logger.Errorf("failed to update cluster status in namespace %s: %+v", cluster.Namespace, err)
return false, nil
}
c.updateClusterStatus(clusterObj.Namespace, clusterObj.Name, edgefsv1beta1.ClusterStateCreating, "")
err := cluster.createInstance(c.containerImage, false)
if err != nil {
@@ -159,19 +152,13 @@ func (c *ClusterController) onAdd(obj interface{}) {
}
// cluster is created, update the cluster CRD status now
if err := c.updateClusterStatus(clusterObj.Namespace, clusterObj.Name, edgefsv1beta1.ClusterStateCreated, ""); err != nil {
logger.Errorf("failed to update cluster status in namespace %s: %+v", cluster.Namespace, err)
return false, nil
}
c.updateClusterStatus(clusterObj.Namespace, clusterObj.Name, edgefsv1beta1.ClusterStateCreated, "")
return true, nil
})
if err != nil {
message := fmt.Sprintf("giving up creating cluster in namespace %s after %s", cluster.Namespace, clusterCreateTimeout)
logger.Error(message)
if err := c.updateClusterStatus(clusterObj.Namespace, clusterObj.Name, edgefsv1beta1.ClusterStateError, message); err != nil {
logger.Errorf("failed to update cluster status in namespace %s: %+v", cluster.Namespace, err)
}
c.updateClusterStatus(clusterObj.Namespace, clusterObj.Name, edgefsv1beta1.ClusterStateError,
fmt.Sprintf("giving up creating cluster in namespace %s after %s", cluster.Namespace, clusterCreateTimeout))
return
}
@@ -307,21 +294,15 @@ func (c *ClusterController) onUpdate(oldObj, newObj interface{}) {
return c.handleUpdate(newCluster, cluster)
})
if err != nil {
message := fmt.Sprintf("giving up trying to update cluster in namespace %s after %s", cluster.Namespace, updateClusterTimeout)
logger.Error(message)
if err := c.updateClusterStatus(newCluster.Namespace, newCluster.Name, edgefsv1beta1.ClusterStateError, message); err != nil {
logger.Errorf("failed to update cluster status in namespace %s: %+v", newCluster.Namespace, err)
}
c.updateClusterStatus(newCluster.Namespace, newCluster.Name, edgefsv1beta1.ClusterStateError,
fmt.Sprintf("giving up trying to update cluster in namespace %s after %s", cluster.Namespace, updateClusterTimeout))
return
}
logger.Infof("cluster %s updated in namespace %s", newCluster.Name, newCluster.Namespace)
}
func (c *ClusterController) handleUpdate(newClust *edgefsv1beta1.Cluster, cluster *cluster) (bool, error) {
if err := c.updateClusterStatus(newClust.Namespace, newClust.Name, edgefsv1beta1.ClusterStateUpdating, ""); err != nil {
logger.Errorf("failed to update cluster status in namespace %s: %+v", newClust.Namespace, err)
return false, nil
}
c.updateClusterStatus(newClust.Namespace, newClust.Name, edgefsv1beta1.ClusterStateUpdating, "")
if newClust.Spec.EdgefsImageName != "" {
c.containerImage = newClust.Spec.EdgefsImageName
@@ -332,10 +313,7 @@ func (c *ClusterController) handleUpdate(newClust *edgefsv1beta1.Cluster, cluste
return false, nil
}
if err := c.updateClusterStatus(newClust.Namespace, newClust.Name, edgefsv1beta1.ClusterStateCreated, ""); err != nil {
logger.Errorf("failed to update cluster status in namespace %s: %+v", newClust.Namespace, err)
return false, nil
}
c.updateClusterStatus(newClust.Namespace, newClust.Name, edgefsv1beta1.ClusterStateCreated, "")
logger.Infof("succeeded updating cluster in namespace %s", newClust.Namespace)
return true, nil
@@ -382,20 +360,19 @@ func (c *ClusterController) handleDelete(clust *edgefsv1beta1.Cluster, retryInte
return nil
}
func (c *ClusterController) updateClusterStatus(namespace, name string, state edgefsv1beta1.ClusterState, message string) error {
func (c *ClusterController) updateClusterStatus(namespace, name string, state edgefsv1beta1.ClusterState, message string) {
// get the most recent cluster CRD object
cluster, err := c.context.RookClientset.EdgefsV1beta1().Clusters(namespace).Get(name, metav1.GetOptions{})
if err != nil {
return fmt.Errorf("failed to get cluster from namespace %s prior to updating its status: %+v", namespace, err)
logger.Errorf("failed to get cluster from namespace %s prior to updating its status: %+v", namespace, err)
return
}
// update the status on the retrieved cluster object
cluster.Status = edgefsv1beta1.ClusterStatus{State: state, Message: message}
if _, err := c.context.RookClientset.EdgefsV1beta1().Clusters(cluster.Namespace).Update(cluster); err != nil {
return fmt.Errorf("failed to update cluster %s status: %+v", cluster.Namespace, err)
logger.Errorf("failed to update cluster %s status: %+v", cluster.Namespace, err)
}
return nil
}
func isHostNetworkDefined(hostNetworkSpec edgefsv1beta1.NetworkSpec) bool {