Updating trigger creation/deletion process (#958)

diff --git a/deployers/servicedeployer.go b/deployers/servicedeployer.go
index 970629a..2e266c0 100644
--- a/deployers/servicedeployer.go
+++ b/deployers/servicedeployer.go
@@ -910,38 +910,32 @@
 
 	var err error
 	var response *http.Response
+	if err = deployer.createTrigger(t); err != nil {
+		return err
+	}
+	qName, err := utils.ParseQualifiedName(feedName, deployer.ClientConfig.Namespace)
+	if err != nil {
+		return err
+	}
+
+	namespace := deployer.Client.Namespace
+	deployer.Client.Namespace = qName.Namespace
 	err = retry(DEFAULT_ATTEMPTS, DEFAULT_INTERVAL, func() error {
-		_, response, err = deployer.Client.Triggers.Insert(t, true)
+		_, response, err = deployer.Client.Actions.Invoke(qName.EntityName, params, true, false)
 		return err
 	})
+	deployer.Client.Namespace = namespace
+
 	if err != nil {
-		return createWhiskClientError(err.(*whisk.WskError), response, wski18n.TRIGGER_FEED, true)
-	} else {
+		// Remove the created trigger
+		deployer.Client.Triggers.Delete(trigger.Name)
 
-		qName, err := utils.ParseQualifiedName(feedName, deployer.ClientConfig.Namespace)
-		if err != nil {
-			return err
-		}
-
-		namespace := deployer.Client.Namespace
-		deployer.Client.Namespace = qName.Namespace
-		err = retry(DEFAULT_ATTEMPTS, DEFAULT_INTERVAL, func() error {
-			_, response, err = deployer.Client.Actions.Invoke(qName.EntityName, params, true, false)
+		retry(DEFAULT_ATTEMPTS, DEFAULT_INTERVAL, func() error {
+			_, _, err := deployer.Client.Triggers.Delete(trigger.Name)
 			return err
 		})
-		deployer.Client.Namespace = namespace
 
-		if err != nil {
-			// Remove the created trigger
-			deployer.Client.Triggers.Delete(trigger.Name)
-
-			retry(DEFAULT_ATTEMPTS, DEFAULT_INTERVAL, func() error {
-				_, _, err := deployer.Client.Triggers.Delete(trigger.Name)
-				return err
-			})
-
-			return createWhiskClientError(err.(*whisk.WskError), response, wski18n.TRIGGER_FEED, false)
-		}
+		return createWhiskClientError(err.(*whisk.WskError), response, wski18n.TRIGGER_FEED, false)
 	}
 
 	displayPostprocessingInfo(wski18n.TRIGGER_FEED, trigger.Name, true)
@@ -1203,11 +1197,10 @@
 			if err != nil {
 				return err
 			}
-		} else {
-			err := deployer.deleteTrigger(trigger)
-			if err != nil {
-				return err
-			}
+		}
+		err := deployer.deleteTrigger(trigger)
+		if err != nil {
+			return err
 		}
 	}
 
@@ -1262,15 +1255,17 @@
 
 	displayPreprocessingInfo(parsers.YAML_KEY_TRIGGER, trigger.Name, false)
 
-	var err error
-	var response *http.Response
-	err = retry(DEFAULT_ATTEMPTS, DEFAULT_INTERVAL, func() error {
-		_, response, err = deployer.Client.Triggers.Delete(trigger.Name)
-		return err
-	})
+	if _, _, ok := deployer.Client.Triggers.Get(trigger.Name); ok == nil {
+		var err error
+		var response *http.Response
+		err = retry(DEFAULT_ATTEMPTS, DEFAULT_INTERVAL, func() error {
+			_, response, err = deployer.Client.Triggers.Delete(trigger.Name)
+			return err
+		})
 
-	if err != nil {
-		return createWhiskClientError(err.(*whisk.WskError), response, parsers.YAML_KEY_TRIGGER, false)
+		if err != nil {
+			return createWhiskClientError(err.(*whisk.WskError), response, parsers.YAML_KEY_TRIGGER, false)
+		}
 	}
 
 	displayPostprocessingInfo(parsers.YAML_KEY_TRIGGER, trigger.Name, false)
@@ -1279,6 +1274,8 @@
 
 func (deployer *ServiceDeployer) deleteFeedAction(trigger *whisk.Trigger, feedName string) error {
 
+	displayPreprocessingInfo(parsers.YAML_KEY_FEED, trigger.Name, false)
+
 	params := make(whisk.KeyValueArr, 0)
 	// TODO() define keys and operations as const
 	params = append(params, whisk.KeyValue{Key: "authKey", Value: deployer.ClientConfig.AuthToken})
@@ -1295,6 +1292,11 @@
 		return err
 	}
 
+	if _, _, ok := deployer.Client.Triggers.Get(trigger.Name); ok != nil {
+		displayPostprocessingInfo(parsers.YAML_KEY_FEED, trigger.Name, false)
+		return nil
+	}
+
 	namespace := deployer.Client.Namespace
 	deployer.Client.Namespace = qName.Namespace
 	var response *http.Response
@@ -1312,19 +1314,8 @@
 		whisk.Debug(whisk.DbgError, errString)
 		return wskderrors.NewWhiskClientError(wskErr.Error(), wskErr.ExitCode, response)
 
-	} else {
-		trigger.Parameters = nil
-		var err error
-		err = retry(DEFAULT_ATTEMPTS, DEFAULT_INTERVAL, func() error {
-			_, response, err = deployer.Client.Triggers.Delete(trigger.Name)
-			return err
-		})
-
-		if err != nil {
-			return createWhiskClientError(err.(*whisk.WskError), response, parsers.YAML_KEY_TRIGGER, false)
-		}
 	}
-
+	displayPostprocessingInfo(parsers.YAML_KEY_FEED, trigger.Name, false)
 	return nil
 }
 
@@ -1332,15 +1323,17 @@
 
 	displayPreprocessingInfo(parsers.YAML_KEY_RULE, rule.Name, false)
 
-	var err error
-	var response *http.Response
-	err = retry(DEFAULT_ATTEMPTS, DEFAULT_INTERVAL, func() error {
-		response, err = deployer.Client.Rules.Delete(rule.Name)
-		return err
-	})
+	if _, _, ok := deployer.Client.Rules.Get(rule.Name); ok == nil {
+		var err error
+		var response *http.Response
+		err = retry(DEFAULT_ATTEMPTS, DEFAULT_INTERVAL, func() error {
+			response, err = deployer.Client.Rules.Delete(rule.Name)
+			return err
+		})
 
-	if err != nil {
-		return createWhiskClientError(err.(*whisk.WskError), response, parsers.YAML_KEY_RULE, false)
+		if err != nil {
+			return createWhiskClientError(err.(*whisk.WskError), response, parsers.YAML_KEY_RULE, false)
+		}
 	}
 	displayPostprocessingInfo(parsers.YAML_KEY_RULE, rule.Name, false)
 	return nil
diff --git a/utils/misc.go b/utils/misc.go
index 177fe10..81ea403 100644
--- a/utils/misc.go
+++ b/utils/misc.go
@@ -34,7 +34,7 @@
 )
 
 const (
-	DEFAULT_HTTP_TIMEOUT = 30
+	DEFAULT_HTTP_TIMEOUT = 60
 	DEFAULT_PROJECT_PATH = "."
 	HTTP_FILE_EXTENSION  = "http"
 	// name of manifest and deployment files