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