You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@openwhisk.apache.org by GitBox <gi...@apache.org> on 2018/02/16 15:50:28 UTC

[GitHub] mrutkows closed pull request #744: fixing seg violation error

mrutkows closed pull request #744: fixing seg violation error
URL: https://github.com/apache/incubator-openwhisk-wskdeploy/pull/744
 
 
   

This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:

As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):

diff --git a/deployers/manifestreader.go b/deployers/manifestreader.go
index 6c433fb3..a7d1c69a 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 b4cc6725..05d51ba9 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 1bb2f5e4..69f0baed 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


 

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services