You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openwhisk.apache.org by mr...@apache.org on 2018/02/16 15:50:26 UTC

[incubator-openwhisk-wskdeploy] branch master updated: fixing seg violation error (#744)

This is an automated email from the ASF dual-hosted git repository.

mrutkowski pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-openwhisk-wskdeploy.git


The following commit(s) were added to refs/heads/master by this push:
     new 2514c48  fixing seg violation error (#744)
2514c48 is described below

commit 2514c4870c160fbbf7af34bb513cbfbc3cf7cf7f
Author: Priti Desai <pd...@us.ibm.com>
AuthorDate: Fri Feb 16 07:50:24 2018 -0800

    fixing seg violation error (#744)
    
    * fixing seg violation error
    
    removing concept of RootPackageName as its not valid after
    introducing packages v/s package, which package out of many do we
    designate as root package and why? there is no answer to it.
    
    * go fmt
    
    * fixing undeployment
    
    * go fmt
---
 deployers/manifestreader.go      |  6 ++---
 deployers/manifestreader_test.go |  6 ++---
 deployers/servicedeployer.go     | 57 ++++++++++++++++++++++++----------------
 3 files changed, 41 insertions(+), 28 deletions(-)

diff --git a/deployers/manifestreader.go b/deployers/manifestreader.go
index 6c433fb..a7d1c69 100644
--- a/deployers/manifestreader.go
+++ b/deployers/manifestreader.go
@@ -52,12 +52,12 @@ func (deployer *ManifestReader) ParseManifest() (*parsers.YAML, *parsers.YAMLPar
 	return manifest, manifestParser, nil
 }
 
-func (reader *ManifestReader) InitRootPackage(manifestParser *parsers.YAMLParser, manifest *parsers.YAML, ma whisk.KeyValue) error {
+func (reader *ManifestReader) InitPackages(manifestParser *parsers.YAMLParser, manifest *parsers.YAML, ma whisk.KeyValue) error {
 	packages, err := manifestParser.ComposeAllPackages(manifest, reader.serviceDeployer.ManifestPath, ma)
 	if err != nil {
 		return err
 	}
-	reader.SetPackage(packages)
+	reader.SetPackages(packages)
 
 	return nil
 }
@@ -161,7 +161,7 @@ func (reader *ManifestReader) SetDependencies(deps map[string]utils.DependencyRe
 	return nil
 }
 
-func (reader *ManifestReader) SetPackage(packages map[string]*whisk.Package) error {
+func (reader *ManifestReader) SetPackages(packages map[string]*whisk.Package) error {
 
 	dep := reader.serviceDeployer
 
diff --git a/deployers/manifestreader_test.go b/deployers/manifestreader_test.go
index b4cc672..05d51ba 100644
--- a/deployers/manifestreader_test.go
+++ b/deployers/manifestreader_test.go
@@ -46,15 +46,15 @@ func TestManifestReader_ParseManifest(t *testing.T) {
 }
 
 // Test could Init root package successfully.
-func TestManifestReader_InitRootPackage(t *testing.T) {
-	err := mr.InitRootPackage(ps, ms, whisk.KeyValue{})
+func TestManifestReader_InitPackages(t *testing.T) {
+	err := mr.InitPackages(ps, ms, whisk.KeyValue{})
 	assert.Equal(t, err, nil, "Init Root Package failed")
 }
 
 // Test Parameters
 func TestManifestReader_param(t *testing.T) {
 	ms, _ := ps.ParseManifest("../tests/dat/manifest6.yaml")
-	err := mr.InitRootPackage(ps, ms, whisk.KeyValue{})
+	err := mr.InitPackages(ps, ms, whisk.KeyValue{})
 	assert.Equal(t, err, nil, "Init Root Package failed")
 
 	// TODO(#695) Is there more to do here?  Original author left a TODO here in comments
diff --git a/deployers/servicedeployer.go b/deployers/servicedeployer.go
index 1bb2f5e..69f0bae 100644
--- a/deployers/servicedeployer.go
+++ b/deployers/servicedeployer.go
@@ -81,16 +81,15 @@ func NewDeploymentPackage() *DeploymentPackage {
 //   3. Collect information about the source code files in the working directory
 //   4. Create a deployment plan to create OpenWhisk service
 type ServiceDeployer struct {
-	ProjectName     string
-	Deployment      *DeploymentProject
-	Client          *whisk.Client
-	mt              sync.RWMutex
-	RootPackageName string
-	IsInteractive   bool
-	IsDefault       bool
-	ManifestPath    string
-	ProjectPath     string
-	DeploymentPath  string
+	ProjectName    string
+	Deployment     *DeploymentProject
+	Client         *whisk.Client
+	mt             sync.RWMutex
+	IsInteractive  bool
+	IsDefault      bool
+	ManifestPath   string
+	ProjectPath    string
+	DeploymentPath string
 	// whether to deploy the action under the package
 	DeployActionInPackage bool
 	InteractiveChoice     bool
@@ -132,7 +131,6 @@ func (deployer *ServiceDeployer) ConstructDeploymentPlan() error {
 		return err
 	}
 
-	deployer.RootPackageName = manifest.Package.Packagename
 	deployer.ProjectName = manifest.GetProject().Name
 
 	// Generate Managed Annotations if its marked as a Managed Deployment
@@ -155,7 +153,7 @@ func (deployer *ServiceDeployer) ConstructDeploymentPlan() error {
 		}
 	}
 
-	manifestReader.InitRootPackage(manifestParser, manifest, deployer.ManagedAnnotation)
+	manifestReader.InitPackages(manifestParser, manifest, deployer.ManagedAnnotation)
 
 	if deployer.IsDefault == true {
 		fileReader := NewFileSystemReader(deployer)
@@ -236,8 +234,7 @@ func (deployer *ServiceDeployer) ConstructUnDeploymentPlan() (*DeploymentProject
 		return deployer.Deployment, err
 	}
 
-	deployer.RootPackageName = manifest.Package.Packagename
-	manifestReader.InitRootPackage(manifestParser, manifest, whisk.KeyValue{})
+	manifestReader.InitPackages(manifestParser, manifest, whisk.KeyValue{})
 
 	// process file system
 	if deployer.IsDefault == true {
@@ -453,6 +450,19 @@ func (deployer *ServiceDeployer) DeployDependencies() error {
 					return err
 				}
 
+				dependentPackages := []string{}
+				for k := range depServiceDeployer.Deployment.Packages {
+					dependentPackages = append(dependentPackages, k)
+				}
+
+				if len(dependentPackages) > 1 {
+					errMessage := "GitHub dependency " + depName + " has multiple packages in manifest file: " +
+						strings.Join(dependentPackages, ", ") + ". " +
+						"One GitHub dependency can only be associated with single package in manifest file." +
+						"There is no way to reference actions from multiple packages of any GitHub dependencies."
+					return wskderrors.NewYAMLFileFormatError(deployer.ManifestPath, errMessage)
+				}
+
 				if err := depServiceDeployer.deployAssets(); err != nil {
 					errString := wski18n.T(wski18n.ID_MSG_DEPENDENCY_DEPLOYMENT_FAILURE_X_name_X,
 						map[string]interface{}{wski18n.KEY_NAME: depName})
@@ -460,16 +470,17 @@ func (deployer *ServiceDeployer) DeployDependencies() error {
 					return err
 				}
 
-				// if the RootPackageName is different from depName
-				// create a binding to the origin package
-				if depServiceDeployer.RootPackageName != depName {
+				// if the dependency name in the original package
+				// is different from the package name in the manifest
+				// file of dependent github repo, create a binding to the origin package
+				if ok := depServiceDeployer.Deployment.Packages[depName]; ok == nil {
 					bindingPackage := new(whisk.BindingPackage)
 					bindingPackage.Namespace = pack.Package.Namespace
 					bindingPackage.Name = depName
 					pub := false
 					bindingPackage.Publish = &pub
 
-					qName, err := utils.ParseQualifiedName(depServiceDeployer.RootPackageName, depServiceDeployer.Deployment.Packages[depServiceDeployer.RootPackageName].Package.Namespace)
+					qName, err := utils.ParseQualifiedName(dependentPackages[0], depServiceDeployer.Deployment.Packages[dependentPackages[0]].Package.Namespace)
 					if err != nil {
 						return err
 					}
@@ -914,9 +925,6 @@ func (deployer *ServiceDeployer) createRule(rule *whisk.Rule) error {
 	// if it contains a slash, then the action is qualified by a package name
 	if strings.Contains(rule.Action.(string), "/") {
 		rule.Action = deployer.getQualifiedName(rule.Action.(string), deployer.ClientConfig.Namespace)
-	} else {
-		// if not, we assume the action is inside the root package
-		rule.Action = deployer.getQualifiedName(strings.Join([]string{deployer.RootPackageName, rule.Action.(string)}, "/"), deployer.ClientConfig.Namespace)
 	}
 
 	var err error
@@ -1090,8 +1098,13 @@ func (deployer *ServiceDeployer) UnDeployDependencies() error {
 					return err
 				}
 
+				dependentPackages := []string{}
+				for k := range depServiceDeployer.Deployment.Packages {
+					dependentPackages = append(dependentPackages, k)
+				}
+
 				// delete binding pkg if the origin package name is different
-				if depServiceDeployer.RootPackageName != depName {
+				if ok := depServiceDeployer.Deployment.Packages[depName]; ok == nil {
 					if _, _, ok := deployer.Client.Packages.Get(depName); ok == nil {
 						var err error
 						var response *http.Response

-- 
To stop receiving notification emails like this one, please contact
mrutkowski@apache.org.