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

feat: split the coordinator cron to single process #995

Merged
merged 19 commits into from
Oct 26, 2023
Merged
Show file tree
Hide file tree
Changes from 4 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
3 changes: 2 additions & 1 deletion common/utils/simulation.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,8 @@ var (
DBCliApp MockAppName = "db_cli-test"

// CoordinatorApp the name of mock coordinator app.
CoordinatorApp MockAppName = "coordinator-test"
CoordinatorApp MockAppName = "coordinator-test"
georgehao marked this conversation as resolved.
Show resolved Hide resolved
CoordinatorCronApp MockAppName = "coordinator-cron-test"
georgehao marked this conversation as resolved.
Show resolved Hide resolved

// ChunkProverApp the name of mock chunk prover app.
ChunkProverApp MockAppName = "chunkProver-test"
Expand Down
14 changes: 4 additions & 10 deletions coordinator/cmd/app/app.go → coordinator/cmd/api/app/app.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@ import (

"scroll-tech/coordinator/internal/config"
"scroll-tech/coordinator/internal/controller/api"
"scroll-tech/coordinator/internal/controller/cron"
"scroll-tech/coordinator/internal/route"
)

Expand Down Expand Up @@ -51,28 +50,23 @@ func action(ctx *cli.Context) error {
log.Crit("failed to load config file", "config file", cfgFile, "error", err)
}

subCtx, cancel := context.WithCancel(ctx.Context)
db, err := database.InitDB(cfg.DB)
if err != nil {
log.Crit("failed to init db connection", "err", err)
}

registry := prometheus.DefaultRegisterer
observability.Server(ctx, db)

proofCollector := cron.NewCollector(subCtx, db, cfg, registry)
defer func() {
proofCollector.Stop()
cancel()
if err = database.CloseDB(db); err != nil {
log.Error("can not close db connection", "error", err)
}
}()

registry := prometheus.DefaultRegisterer
observability.Server(ctx, db)

apiSrv := apiServer(ctx, cfg, db, registry)

log.Info(
"coordinator start successfully",
"Start coordinator successfully.",
georgehao marked this conversation as resolved.
Show resolved Hide resolved
"version", version.Version,
)

Expand Down
File renamed without changes.
File renamed without changes.
File renamed without changes.
7 changes: 7 additions & 0 deletions coordinator/cmd/api/main.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package main

import "scroll-tech/coordinator/cmd/api/app"

func main() {
app.Run()
}
88 changes: 88 additions & 0 deletions coordinator/cmd/cron/app/app.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
package app

import (
"context"
"fmt"
"os"
"os/signal"

"github.com/prometheus/client_golang/prometheus"
"github.com/scroll-tech/go-ethereum/log"
"github.com/urfave/cli/v2"

"scroll-tech/common/database"
"scroll-tech/common/observability"
"scroll-tech/common/utils"
"scroll-tech/common/version"

"scroll-tech/coordinator/internal/config"
"scroll-tech/coordinator/internal/controller/cron"
)

var app *cli.App

func init() {
// Set up coordinator app info.
app = cli.NewApp()
app.Action = action
app.Name = "coordinator cron"
app.Usage = "The Scroll L2 Coordinator cron"
app.Version = version.Version
app.Flags = append(app.Flags, utils.CommonFlags...)
app.Flags = append(app.Flags, apiFlags...)
app.Before = func(ctx *cli.Context) error {
return utils.LogSetup(ctx)
}
// Register `coordinator-cron-test` app for integration-cron-test.
utils.RegisterSimulation(app, utils.CoordinatorCronApp)
}

func action(ctx *cli.Context) error {
cfgFile := ctx.String(utils.ConfigFileFlag.Name)
cfg, err := config.NewConfig(cfgFile)
if err != nil {
log.Crit("failed to load config file", "config file", cfgFile, "error", err)
}

subCtx, cancel := context.WithCancel(ctx.Context)
db, err := database.InitDB(cfg.DB)
if err != nil {
log.Crit("failed to init db connection", "err", err)
}

registry := prometheus.DefaultRegisterer
observability.Server(ctx, db)

proofCollector := cron.NewCollector(subCtx, db, cfg, registry)
defer func() {
proofCollector.Stop()
cancel()
if err = database.CloseDB(db); err != nil {
log.Error("can not close db connection", "error", err)
}
}()

log.Info(
"coordinator cron start successfully",
"version", version.Version,
)

// Catch CTRL-C to ensure a graceful shutdown.
interrupt := make(chan os.Signal, 1)
signal.Notify(interrupt, os.Interrupt)

// Wait until the interrupt signal is received from an OS signal.
<-interrupt

log.Info("coordinator cron exiting success")
return nil
}

// Run coordinator.
func Run() {
// RunApp the coordinator.
if err := app.Run(os.Args); err != nil {
_, _ = fmt.Fprintln(os.Stderr, err)
os.Exit(1)
}
}
19 changes: 19 additions & 0 deletions coordinator/cmd/cron/app/app_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package app

import (
"fmt"
"testing"
"time"

"scroll-tech/common/cmd"
"scroll-tech/common/version"
)

func TestRunCoordinatorCron(t *testing.T) {
coordinator := cmd.NewCmd("coordinator-cron-test", "--version")
georgehao marked this conversation as resolved.
Show resolved Hide resolved
defer coordinator.WaitExit()

// wait result
coordinator.ExpectWithTimeout(t, true, time.Second*3, fmt.Sprintf("coordinator version %s", version.Version))
coordinator.RunApp(nil)
}
49 changes: 49 additions & 0 deletions coordinator/cmd/cron/app/flags.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package app

import "github.com/urfave/cli/v2"

var (
apiFlags = []cli.Flag{
georgehao marked this conversation as resolved.
Show resolved Hide resolved
// http flags
&httpEnabledFlag,
&httpListenAddrFlag,
&httpPortFlag,
// ws flags
&wsEnabledFlag,
&wsListenAddrFlag,
&wsPortFlag,
}
// httpEnabledFlag enable rpc server.
httpEnabledFlag = cli.BoolFlag{
Name: "http",
Usage: "Enable the HTTP-RPC server",
Value: false,
}
// httpListenAddrFlag set the http address.
httpListenAddrFlag = cli.StringFlag{
Name: "http.addr",
Usage: "HTTP-RPC server listening interface",
Value: "localhost",
}
// httpPortFlag set http.port.
httpPortFlag = cli.IntFlag{
Name: "http.port",
Usage: "HTTP-RPC server listening port",
Value: 8390,
}
wsEnabledFlag = cli.BoolFlag{
Name: "ws",
Usage: "Enable the WS-RPC server",
}
wsListenAddrFlag = cli.StringFlag{
Name: "ws.addr",
Usage: "WS-RPC server listening interface",
Value: "localhost",
}
// websocket port
wsPortFlag = cli.IntFlag{
Name: "ws.port",
Usage: "WS-RPC server listening port",
Value: 8391,
}
)
7 changes: 7 additions & 0 deletions coordinator/cmd/cron/main.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package main

import "scroll-tech/coordinator/cmd/cron/app"

func main() {
app.Run()
}
7 changes: 0 additions & 7 deletions coordinator/cmd/main.go

This file was deleted.

2 changes: 1 addition & 1 deletion coordinator/internal/controller/cron/collect_proof.go
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ func NewCollector(ctx context.Context, db *gorm.DB, cfg *config.Config, reg prom
go c.checkBatchAllChunkReady()
go c.cleanupChallenge()

log.Info("Start coordinator successfully.")
log.Info("Start coordinator cron successfully.")

return c
}
Expand Down
2 changes: 1 addition & 1 deletion tests/integration-test/integration_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ import (

"scroll-tech/database/migrate"

capp "scroll-tech/coordinator/cmd/app"
capp "scroll-tech/coordinator/cmd/api/app"

"scroll-tech/common/database"
"scroll-tech/common/docker"
Expand Down
Loading