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.