diff options
author | Dileep Ranganathan <dileep.ranganathan@intel.com> | 2019-09-05 21:46:59 -0700 |
---|---|---|
committer | Marco Platania <platania@research.att.com> | 2019-09-06 12:45:28 +0000 |
commit | b2651f39b6dbe79e05d42f8a3bfbbc11c42c5d4c (patch) | |
tree | de00fc8fac262ffcfa8b3f8f50dba70a1cfd3264 /vnfs/DAaaS/microservices/collectd-operator/pkg/controller/collectdglobal | |
parent | fb00a06a25dda69958891705c7c18ddddfea25f9 (diff) |
Fix issue with concurrent CR creation
The collectd operator is going into deadlock when concurrent update
operations happen within the same controller trying to update the
resource. Fixed this by adding Mutex.
Deleted the old build_image.sh which is replaced by new script which
builds and pushes from inside a builder docker container. This helps in
tackling the dependency issues for image build.
Updated the README for build image script usage.
Issue-ID: ONAPARC-461
Signed-off-by: Dileep Ranganathan <dileep.ranganathan@intel.com>
Change-Id: Ib3c2d1edd266e70bb713885de7ad046ebf5ad086
Diffstat (limited to 'vnfs/DAaaS/microservices/collectd-operator/pkg/controller/collectdglobal')
-rw-r--r-- | vnfs/DAaaS/microservices/collectd-operator/pkg/controller/collectdglobal/collectdglobal_controller.go | 46 |
1 files changed, 20 insertions, 26 deletions
diff --git a/vnfs/DAaaS/microservices/collectd-operator/pkg/controller/collectdglobal/collectdglobal_controller.go b/vnfs/DAaaS/microservices/collectd-operator/pkg/controller/collectdglobal/collectdglobal_controller.go index 0c4064e7..a43afdc5 100644 --- a/vnfs/DAaaS/microservices/collectd-operator/pkg/controller/collectdglobal/collectdglobal_controller.go +++ b/vnfs/DAaaS/microservices/collectd-operator/pkg/controller/collectdglobal/collectdglobal_controller.go @@ -149,38 +149,32 @@ func (r *ReconcileCollectdGlobal) Reconcile(request reconcile.Request) (reconcil // handleCollectdGlobal regenerates the collectd conf on CR Create, Update, Delete events func (r *ReconcileCollectdGlobal) handleCollectdGlobal(reqLogger logr.Logger, cr *onapv1alpha1.CollectdGlobal, isDelete bool) error { + var collectdConf string - rmap, err := collectdutils.FindResourceMapForCR(r.client, reqLogger, cr.Namespace) - if err != nil { - reqLogger.Info(":::: Skip current reconcile:::: Resources not found. Cache might be stale. Requeue") - return err - } + retryErr := retry.RetryOnConflict(retry.DefaultRetry, func() error { + cm, err := collectdutils.GetConfigMap(r.client, reqLogger, cr.Namespace) + if err != nil { + reqLogger.Info(":::: Skip current reconcile:::: ConfigMap not found. Cache might be stale. Requeue") + return err + } - cm := rmap.ConfigMap - reqLogger.V(1).Info("Found ResourceMap") - reqLogger.V(1).Info(":::: ConfigMap Info ::::", "ConfigMap.Namespace", cm.Namespace, "ConfigMap.Name", cm.Name) + reqLogger.V(1).Info(":::: ConfigMap Info ::::", "ConfigMap.Namespace", cm.Namespace, "ConfigMap.Name", cm.Name) - collectdConf, err := collectdutils.RebuildCollectdConf(r.client, cr.Namespace, isDelete, "") - if err != nil { - reqLogger.Error(err, "Skip reconcile: Rebuild conf failed") - return err - } + collectdConf, err := collectdutils.RebuildCollectdConf(r.client, cr.Namespace, isDelete, "") + if err != nil { + reqLogger.Error(err, "Skip reconcile: Rebuild conf failed") + return err + } - cm.SetAnnotations(map[string]string{ - "daaas-random": collectdutils.ComputeSHA256([]byte(collectdConf)), - }) + cm.SetAnnotations(map[string]string{ + "daaas-random": collectdutils.ComputeSHA256([]byte(collectdConf)), + }) - cm.Data["collectd.conf"] = collectdConf - retryErr := retry.RetryOnConflict(retry.DefaultRetry, func() error { + cm.Data["collectd.conf"] = collectdConf // Update the ConfigMap with new Spec and reload DaemonSets reqLogger.Info("Updating the ConfigMap", "ConfigMap.Namespace", cm.Namespace, "ConfigMap.Name", cm.Name) - log.V(1).Info("ConfigMap Data", "Map: ", cm.Data) - err = r.client.Update(context.TODO(), cm) - if err != nil { - reqLogger.Error(err, "Update the ConfigMap failed", "ConfigMap.Namespace", cm.Namespace, "ConfigMap.Name", cm.Name) - return err - } - return nil + updateErr := r.client.Update(context.TODO(), cm) + return updateErr }) if retryErr != nil { panic(fmt.Errorf("Update failed: %v", retryErr)) @@ -221,7 +215,7 @@ func (r *ReconcileCollectdGlobal) handleCollectdGlobal(reqLogger logr.Logger, cr panic(fmt.Errorf("Update failed: %v", retryErr)) } - err = r.updateStatus(cr) + err := r.updateStatus(cr) if err != nil { reqLogger.Error(err, "Unable to update status") return err |