Skip to content
This repository was archived by the owner on Dec 11, 2023. It is now read-only.

Commit 19c7f2a

Browse files
committed
Run parallel go runtimes with different RPC ports
1 parent 5f6bbdc commit 19c7f2a

File tree

1 file changed

+20
-4
lines changed

1 file changed

+20
-4
lines changed

go-1.x/bootstrap.go

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,20 +33,23 @@ import (
3333
const (
3434
initErrPath = "/2018-06-01/runtime/init/error"
3535
invokePath = "/2018-06-01/runtime/invocation"
36-
lambdaPort = "5432"
3736
)
3837

38+
var lambdaPort = 5432
39+
3940
func main() {
4041
apiURL := "http://" + os.Getenv("AWS_LAMBDA_RUNTIME_API")
4142
handler := os.Getenv("_HANDLER")
4243
os.Setenv("PATH", os.Getenv("PATH")+":/opt")
4344

45+
lambdaPort = rpcPortFromEnv()
46+
4447
cmd := exec.Command(handler)
45-
cmd.Stdout = os.Stderr
48+
cmd.Stdout = os.Stdout
4649
cmd.Stderr = os.Stderr
4750
cmd.SysProcAttr = &syscall.SysProcAttr{Setpgid: true}
4851
cmd.Env = append(os.Environ(),
49-
"_LAMBDA_SERVER_PORT="+lambdaPort,
52+
fmt.Sprintf("_LAMBDA_SERVER_PORT=%d", lambdaPort),
5053
)
5154

5255
fmt.Println("Starting handler")
@@ -59,7 +62,7 @@ func main() {
5962
var conn net.Conn
6063
var err error
6164
for {
62-
if conn, err = net.Dial("tcp", ":"+lambdaPort); err == nil {
65+
if conn, err = net.Dial("tcp", fmt.Sprintf(":%d", lambdaPort)); err == nil {
6366
break
6467
}
6568
if oerr, ok := err.(*net.OpError); ok {
@@ -142,3 +145,16 @@ func sendResponse(url, message string) {
142145
os.Exit(1)
143146
}
144147
}
148+
149+
func rpcPortFromEnv() int {
150+
index, ok := os.LookupEnv("BOOTSTRAP_INDEX")
151+
if !ok {
152+
return lambdaPort
153+
}
154+
i, err := strconv.Atoi(index)
155+
if err != nil {
156+
fmt.Printf("Can't convert \"BOOTSTRAP_INDEX\" env variable to integer: %s\n", err)
157+
return lambdaPort
158+
}
159+
return lambdaPort + i
160+
}

0 commit comments

Comments
 (0)