Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(lambda): make lambda active only after successful start (#8036) #8044

Merged
merged 1 commit into from
Sep 21, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 12 additions & 5 deletions dgraph/cmd/alpha/run.go
Original file line number Diff line number Diff line change
Expand Up @@ -238,9 +238,9 @@ they form a Raft group and provide synchronous replication.
Flag("url",
"The URL of a lambda server that implements custom GraphQL Javascript resolvers."+
" This should be used only when using custom lambda server."+
" Use cnt subflag to launch official lambda server."+
" Use num subflag to launch official lambda server."+
" This flag if set, overrides the other lambda flags.").
Flag("cnt",
Flag("num",
"Number of JS lambda servers to be launched by alpha.").
Flag("port",
"The starting port at which the lambda server listens.").
Expand Down Expand Up @@ -517,23 +517,30 @@ func setupLambdaServer(closer *z.Closer) {
case <-closer.HasBeenClosed():
return
default:
time.Sleep(2 * time.Second)
cmd := exec.CommandContext(closer.Ctx(), "node", filename)
cmd.SysProcAttr = childProcessConfig()
cmd.Env = append(cmd.Env, fmt.Sprintf("PORT=%d", lambdas[i].port))
cmd.Env = append(cmd.Env, fmt.Sprintf("DGRAPH_URL="+dgraphUrl))
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr

lambdas[i].Lock()
lambdas[i].cmd = cmd
lambdas[i].lastActive = time.Now().UnixNano()
glog.Infof("Running node command: %+v", cmd)
if err := cmd.Start(); err != nil {
glog.Errorf("Failed to start lambda server at port: %d. Got err: %+v",
lambdas[i].port, err)
lambdas[i].Unlock()
continue
}
lambdas[i].active = true
lambdas[i].Unlock()
glog.Infof("Running node command: %+v\n", cmd)
if err := cmd.Run(); err != nil {
if err := cmd.Wait(); err != nil {
glog.Errorf("Lambda server at port: %d stopped with error: %v",
lambdas[i].port, err)
}
time.Sleep(2 * time.Second)
}
}
}(i)
Expand Down
2 changes: 1 addition & 1 deletion worker/server_state.go
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ const (
CDCDefaults = `file=; kafka=; sasl_user=; sasl_password=; ca_cert=; client_cert=; ` +
`client_key=; sasl-mechanism=PLAIN;`
GraphQLDefaults = `introspection=true; debug=false; extensions=true; poll-interval=1s; `
LambdaDefaults = `url=; num=1; port=20000; restart-after=10s; `
LambdaDefaults = `url=; num=1; port=20000; restart-after=30s; `
LimitDefaults = `mutations=allow; query-edge=1000000; normalize-node=10000; ` +
`mutations-nquad=1000000; disallow-drop=false; query-timeout=0ms; txn-abort-after=5m;` +
`max-pending-queries=64; max-retries=-1; shared-instance=false;`
Expand Down