[
https://issues.apache.org/jira/browse/BEAM-13399?focusedWorklogId=695511&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-695511
]
ASF GitHub Bot logged work on BEAM-13399:
-----------------------------------------
Author: ASF GitHub Bot
Created on: 14/Dec/21 05:21
Start Date: 14/Dec/21 05:21
Worklog Time Spent: 10m
Work Description: youngoli commented on a change in pull request #16214:
URL: https://github.com/apache/beam/pull/16214#discussion_r768320322
##########
File path: sdks/go/pkg/beam/core/runtime/xlangx/expansionx/process.go
##########
@@ -0,0 +1,67 @@
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements. See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package expansionx
+
+import (
+ "fmt"
+ "os/exec"
+)
+
+// ExpansionServiceRunner is a type that holds information required to
+// start up a Beam Expansion Service JAR and maintain a handle on the
+// process running the service to enable shutdown as well.
+type ExpansionServiceRunner struct {
+ jarPath string
+ serviceCommand *exec.Cmd
+}
+
+// NewExpansionServiceRunner builds an ExpansionServiceRunner struct for a
given gradle target and
+// Beam version and returns a pointer to it.
+func NewExpansionServiceRunner(jarPath string) *ExpansionServiceRunner {
+ serviceCommand := exec.Command("java", "-jar", jarPath, "8097")
Review comment:
Good future improvement: Auto-selecting an open port somehow and saving
the address. In particular because this can cause errors if something's already
using port 8097 (the Flink runner, for example, uses that for its own expansion
service that it starts up).
##########
File path: sdks/go/pkg/beam/core/runtime/xlangx/expansionx/process_test.go
##########
@@ -0,0 +1,73 @@
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements. See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package expansionx
+
+import (
+ "os"
+ "os/exec"
+ "strings"
+ "testing"
+)
+
+func TestNewExpansionServiceRunner(t *testing.T) {
+ testPath := "path/to/jar"
+ serviceRunner := NewExpansionServiceRunner(testPath)
+ if serviceRunner.jarPath != testPath {
+ t.Errorf("JAR path mismatch: wanted %v, got %v", testPath,
serviceRunner.jarPath)
+ }
+ commandString := strings.Join(serviceRunner.serviceCommand.Args, " ")
+ expCommandString := "java -jar " + testPath + " 8097"
+ if commandString != expCommandString {
+ t.Errorf("command mismatch: wanted %v, got %v",
expCommandString, commandString)
+ }
+}
+
+func TestStartService_badCommand(t *testing.T) {
+ serviceRunner := NewExpansionServiceRunner("")
+ serviceRunner.serviceCommand = exec.Command("jahva", "-jar")
+ err := serviceRunner.StartService()
+ if err == nil {
+ t.Error("StartService succeeded when it should have failed")
+ }
+}
+
+func TestStartService_good(t *testing.T) {
+ testPath := "path/to/jar"
+ serviceRunner := NewExpansionServiceRunner(testPath)
+ serviceRunner.serviceCommand = exec.Command("which", "go")
Review comment:
A suggestion in case you want to test these without using actual
commands: Create an interface that's fulfilled by exec.Cmd containing the
methods you need to use. That way you can create a mock version of that
interface for testing purposes, just to make sure it gets properly started and
stopped.
That seems like a bit too much work for this relatively bare-bones class at
the moment. But if your code starts to get more complex and you need a way to
test it, that's what I would recommend.
##########
File path: sdks/go/pkg/beam/core/runtime/xlangx/expansionx/process_test.go
##########
@@ -0,0 +1,73 @@
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements. See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package expansionx
+
+import (
+ "os"
+ "os/exec"
+ "strings"
+ "testing"
+)
+
+func TestNewExpansionServiceRunner(t *testing.T) {
+ testPath := "path/to/jar"
+ serviceRunner := NewExpansionServiceRunner(testPath)
+ if serviceRunner.jarPath != testPath {
+ t.Errorf("JAR path mismatch: wanted %v, got %v", testPath,
serviceRunner.jarPath)
+ }
+ commandString := strings.Join(serviceRunner.serviceCommand.Args, " ")
+ expCommandString := "java -jar " + testPath + " 8097"
Review comment:
This seems like a bit of a brittle test. It might be better to test that
the command string contains "java" and "-jar testPath", because those seem like
mandatory parts of the command no matter what port you use, or how you modify
the command.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
Issue Time Tracking
-------------------
Worklog Id: (was: 695511)
Time Spent: 7h 10m (was: 7h)
> [Go SDK] Add automated expansion service start up feature
> ---------------------------------------------------------
>
> Key: BEAM-13399
> URL: https://issues.apache.org/jira/browse/BEAM-13399
> Project: Beam
> Issue Type: Improvement
> Components: cross-language, sdk-go
> Reporter: Jack McCluskey
> Assignee: Jack McCluskey
> Priority: P2
> Time Spent: 7h 10m
> Remaining Estimate: 0h
>
> Add Go SDK support for automated expansion service start-up if one is not
> provided, following the example of the Python implementation.
--
This message was sent by Atlassian Jira
(v8.20.1#820001)