Browse Source

Upgrade atreugo to v8.2.1 and small code refactor (#5014)

* Upgrade atreugo to v8.2.1 and small code refactor

* Upograde dependencies
Sergio Andrés Virviescas Santana 6 years ago
parent
commit
2cc602442d

+ 5 - 5
frameworks/Go/atreugo/src/go.mod

@@ -6,18 +6,18 @@ require (
 	github.com/francoispqt/gojay v0.0.0-20190317155732-64fc2cdddab0
 	github.com/go-stack/stack v1.8.0 // indirect
 	github.com/golang/snappy v0.0.1 // indirect
-	github.com/jackc/pgx v3.3.0+incompatible
+	github.com/jackc/pgx v3.5.0+incompatible
 	github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e
 	github.com/pkg/errors v0.8.1 // indirect
-	github.com/savsgio/atreugo/v8 v8.1.1
+	github.com/savsgio/atreugo/v8 v8.2.1
 	github.com/tidwall/gjson v1.3.2 // indirect
 	github.com/tidwall/sjson v1.0.4
 	github.com/valyala/quicktemplate v1.1.1
 	github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c // indirect
 	github.com/xdg/stringprep v1.0.0 // indirect
-	go.mongodb.org/mongo-driver v1.0.0
-	golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4 // indirect
+	go.mongodb.org/mongo-driver v1.1.0
+	golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586 // indirect
 	golang.org/x/sync v0.0.0-20190423024810-112230192c58 // indirect
 	golang.org/x/text v0.3.2 // indirect
-	gopkg.in/mgo.v2 v2.0.0-20180705113604-9856a29383ce
+	gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22
 )

+ 24 - 18
frameworks/Go/atreugo/src/go.sum

@@ -1,16 +1,19 @@
-github.com/fasthttp/router v0.4.1 h1:FtChotx7KqrjOvrdQO8St+A8Mf+0ijjlDp0qsacSrro=
-github.com/fasthttp/router v0.4.1/go.mod h1:lEEZAHnTxjTcHUy3HKrC0ZxVteWfkEMNfy5J49xG8/k=
+github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/fasthttp/router v0.5.0 h1:7JZSyaQZkVVLmY35EgXV8zKdqqs280tDye5zG9FFiYc=
+github.com/fasthttp/router v0.5.0/go.mod h1:lEEZAHnTxjTcHUy3HKrC0ZxVteWfkEMNfy5J49xG8/k=
 github.com/francoispqt/gojay v0.0.0-20190317155732-64fc2cdddab0 h1:RkFZ/6Hc9fBqO3eSAmlLdBfQc4sEHSOg4P/zQRhJQcE=
 github.com/francoispqt/gojay v0.0.0-20190317155732-64fc2cdddab0/go.mod h1:H8Wgri1Asi1VevY3ySdpIK5+KCpqzToVswNq8g2xZj4=
 github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk=
 github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
 github.com/golang/snappy v0.0.1 h1:Qgr9rKW7uDUkrbSmQeiDsGa8SjGyCOGtuasMWwvp2P4=
 github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
+github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
 github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
-github.com/jackc/pgx v3.3.0+incompatible h1:Wa90/+qsITBAPkAZjiByeIGHFcj3Ztu+VzrrIpHjL90=
-github.com/jackc/pgx v3.3.0+incompatible/go.mod h1:0ZGrqGqkRlliWnWB4zKnWtjbSWbGkVEFm4TeybAXq+I=
-github.com/json-iterator/go v1.1.6 h1:MrUvLMLTMxbqFJ9kzlvat/rYZqZnW3u4wkLzWTaFwKs=
-github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
+github.com/jackc/pgx v3.5.0+incompatible h1:BRJ4G3UPtvml5R1ey0biqqGuYUGayMYekm3woO75orY=
+github.com/jackc/pgx v3.5.0+incompatible/go.mod h1:0ZGrqGqkRlliWnWB4zKnWtjbSWbGkVEFm4TeybAXq+I=
+github.com/json-iterator/go v1.1.7 h1:KfgG9LzI+pYjr4xvmz/5H4FXjokeP+rlHLhv3iH62Fo=
+github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
 github.com/klauspost/compress v1.4.0/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A=
 github.com/klauspost/compress v1.4.1 h1:8VMb5+0wMgdBykOV96DwNwKFQ+WTI4pzYURP99CcB9E=
 github.com/klauspost/compress v1.4.1/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A=
@@ -19,18 +22,21 @@ github.com/klauspost/cpuid v1.2.0 h1:NMpwD2G9JSFOE1/TJjGSo5zG7Yb2bTe7eq1jH+irmeE
 github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek=
 github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e h1:hB2xlXdHp/pmPZq0y3QnmWAArdw9PqbmotexnWx/FU8=
 github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
-github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
-github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
-github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI=
-github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
+github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 h1:ZqeYNhU3OHLH3mGKHDcjJRFFRrJa6eAM5H+CtDdOsPc=
+github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
+github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742 h1:Esafd1046DLDQ0W1YjYsBW+p8U2u7vzgW2SQVmlNazg=
+github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
 github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I=
 github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
-github.com/savsgio/atreugo/v8 v8.1.1 h1:dT0u99EhnZaaDEzkmP1Efposn9NeBEB6flwdXw3piSA=
-github.com/savsgio/atreugo/v8 v8.1.1/go.mod h1:fdVj52U2KiY3twnLac/FAcEbjQMWhtj/3hYU4ZGcM14=
+github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/savsgio/atreugo/v8 v8.2.1 h1:V593hIUzPSQ0j8tki7ub5UbXwNg1TOmL4yEHcOuMBEo=
+github.com/savsgio/atreugo/v8 v8.2.1/go.mod h1:ZPcbJP0KNEmDI2o7xb5x5mzDfoEtWx1E9WPSRLQLn1M=
 github.com/savsgio/go-logger v1.0.0 h1:jiaRvohRr8RwtcK/WDcA/Yp4eaPaarAko3JNPzt1xoQ=
 github.com/savsgio/go-logger v1.0.0/go.mod h1:/ZzTTmB3JJqjZQcLlxTGbwy3fIsLUoYyldsSEL5rU2g=
 github.com/savsgio/gotils v0.0.0-20190714152828-365999d0a274 h1:F52t1X2ziOrMcQMVHo8ZxwOrDTMAq6MrlKtL1Atu2wU=
 github.com/savsgio/gotils v0.0.0-20190714152828-365999d0a274/go.mod h1:w803/Fg1m0hrp1ZT9KNfQe4E4+WOMMFLcgzPvOcye10=
+github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
 github.com/tidwall/gjson v1.3.2 h1:+7p3qQFaH3fOMXAJSrdZwGKcOO/lYdGS0HqGhPqDdTI=
 github.com/tidwall/gjson v1.3.2/go.mod h1:P256ACg0Mn+j1RXIDXoss50DeIABTYK1PULOJHhxOls=
 github.com/tidwall/match v1.0.1 h1:PnKP62LPNxHKTwvHHZZzdOAOCtsJTjo6dZLCwpKm5xc=
@@ -52,11 +58,11 @@ github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c h1:u40Z8hqBAAQyv+vATcGgV
 github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c/go.mod h1:lB8K/P019DLNhemzwFU4jHLhdvlE6uDZjXFejJXr49I=
 github.com/xdg/stringprep v1.0.0 h1:d9X0esnoa3dFsV0FG35rAT0RIhYFlPq7MiP+DW89La0=
 github.com/xdg/stringprep v1.0.0/go.mod h1:Jhud4/sHMO4oL310DaZAKk9ZaJ08SJfe+sJh0HrGL1Y=
-go.mongodb.org/mongo-driver v1.0.0 h1:KxPRDyfB2xXnDE2My8acoOWBQkfv3tz0SaWTRZjJR0c=
-go.mongodb.org/mongo-driver v1.0.0/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM=
+go.mongodb.org/mongo-driver v1.1.0 h1:aeOqSrhl9eDRAap/3T5pCfMBEBxZ0vuXBP+RMtp2KX8=
+go.mongodb.org/mongo-driver v1.1.0/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM=
 golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
-golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4 h1:HuIa8hRrWRSrqYzx1qI49NNxhdi2PrY7gxVSq1JjLDc=
-golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
+golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586 h1:7KByu05hhLed2MO29w7p1XfZvZ13m8mub3shuVftRs0=
+golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 golang.org/x/net v0.0.0-20180911220305-26e67e76b6c3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
 golang.org/x/sync v0.0.0-20190423024810-112230192c58 h1:8gQV6CLnAEikrhgkHFbMAEhagSSnXWGV915qUMm9mrU=
@@ -67,5 +73,5 @@ golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs=
 golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
 golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-gopkg.in/mgo.v2 v2.0.0-20180705113604-9856a29383ce h1:xcEWjVhvbDy+nHP67nPDDpbYrY+ILlfndk4bRioVHaU=
-gopkg.in/mgo.v2 v2.0.0-20180705113604-9856a29383ce/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA=
+gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22 h1:VpOs+IwYnYBaFnrNAeB8UUWtL3vEUnzSCL1nVjPhqrw=
+gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA=

+ 38 - 21
frameworks/Go/atreugo/src/main.go

@@ -3,6 +3,8 @@ package main
 import (
 	"flag"
 	"log"
+	"net"
+	"os"
 	"runtime"
 	"strconv"
 	"strings"
@@ -13,25 +15,31 @@ import (
 	"github.com/savsgio/atreugo/v8"
 )
 
-func main() {
+var bindHost, jsonEncoder, dbDriver, dbConnectionString string
+var prefork, child bool
+
+func init() {
 	// init flags
-	bindHost := flag.String("bind", ":8080", "set bind host")
-	prefork := flag.Bool("prefork", false, "use prefork")
-	child := flag.Bool("child", false, "is child proc")
-	jsonEncoder := flag.String("json_encoder", "none", "json encoder: none or easyjson or gojay or sjson")
-	dbDriver := flag.String("db", "none", "db connection driver [values: none or pgx or mongo]")
-	dbConnectionString := flag.String("db_connection_string",
+	flag.StringVar(&bindHost, "bind", "0.0.0.0:8080", "set bind host")
+	flag.BoolVar(&prefork, "prefork", false, "use prefork")
+	flag.BoolVar(&child, "child", false, "is child proc")
+	flag.StringVar(&jsonEncoder, "json_encoder", "none", "json encoder: none or easyjson or gojay or sjson")
+	flag.StringVar(&dbDriver, "db", "none", "db connection driver [values: none or pgx or mongo]")
+	flag.StringVar(&dbConnectionString, "db_connection_string",
 		"host=tfb-database user=benchmarkdbuser password=benchmarkdbpass dbname=hello_world sslmode=disable",
 		"db connection string")
+
 	flag.Parse()
+}
 
+func main() {
 	// init database with appropriate driver
 	dbMaxConnectionCount := runtime.NumCPU() * 4
-	if *child {
+	if child {
 		dbMaxConnectionCount = runtime.NumCPU()
 	}
 
-	db, err := storage.InitDB(*dbDriver, *dbConnectionString, dbMaxConnectionCount)
+	db, err := storage.InitDB(dbDriver, dbConnectionString, dbMaxConnectionCount)
 	if err != nil {
 		log.Fatal(err)
 	}
@@ -42,7 +50,7 @@ func main() {
 	var queriesHandler atreugo.View
 	var updateHandler atreugo.View
 
-	switch *jsonEncoder {
+	switch jsonEncoder {
 	case "easyjson":
 		jsonHandler = handlers.JSONHandlerEasyJSON
 		dbHandler = handlers.DBHandlerEasyJSON(db)
@@ -65,15 +73,14 @@ func main() {
 		updateHandler = handlers.UpdateHandler(db)
 	}
 
-	addr := strings.Split(*bindHost, ":")
+	addr := strings.Split(bindHost, ":")
 	host := addr[0]
 	port, _ := strconv.Atoi(addr[1])
 
 	// init atreugo server
 	server := atreugo.New(&atreugo.Config{
-		Host:     host,
-		Port:     port,
-		Compress: false,
+		Host: host,
+		Port: port,
 	})
 
 	// init handlers
@@ -88,15 +95,25 @@ func main() {
 		server.Path("GET", "/update", updateHandler)
 	}
 
-	// check for prefork
-	if *prefork {
-		ln, err := doPrefork(*child, *bindHost)
+	if child {
+		runtime.GOMAXPROCS(1)
+
+		ln, err := net.FileListener(os.NewFile(3, ""))
 		if err != nil {
-			log.Fatal(err)
+			panic(err)
 		}
-		log.Fatal(server.Serve(ln))
+		if err := server.Serve(ln); err != nil {
+			panic(err)
+		}
+
+	} else if prefork {
+		if err := doPrefork(bindHost); err != nil {
+			panic(err)
+		}
+
 	} else {
-		runtime.GOMAXPROCS(runtime.NumCPU())
-		log.Fatal(server.ListenAndServe())
+		if err := server.ListenAndServe(); err != nil {
+			panic(err)
+		}
 	}
 }

+ 28 - 38
frameworks/Go/atreugo/src/prefork.go

@@ -1,51 +1,41 @@
 package main
 
 import (
-	"log"
 	"net"
 	"os"
 	"os/exec"
 	"runtime"
 )
 
-func doPrefork(child bool, toBind string) (net.Listener, error) {
-	var listener net.Listener
-	if !child {
-		addr, err := net.ResolveTCPAddr("tcp", toBind)
-		if err != nil {
-			return nil, err
-		}
-		tcplistener, err := net.ListenTCP("tcp", addr)
-		if err != nil {
-			return nil, err
-		}
-		fl, err := tcplistener.File()
-		if err != nil {
-			return nil, err
-		}
-		children := make([]*exec.Cmd, runtime.NumCPU())
-		for i := range children {
-			children[i] = exec.Command(os.Args[0], append(os.Args[1:], "-child")...)
-			children[i].Stdout = os.Stdout
-			children[i].Stderr = os.Stderr
-			children[i].ExtraFiles = []*os.File{fl}
-			if err := children[i].Start(); err != nil {
-				return nil, err
-			}
-		}
-		for _, ch := range children {
-			if err := ch.Wait(); err != nil {
-				log.Print(err)
-			}
+func doPrefork(toBind string) error {
+	addr, err := net.ResolveTCPAddr("tcp", toBind)
+	if err != nil {
+		return err
+	}
+	tcplistener, err := net.ListenTCP("tcp", addr)
+	if err != nil {
+		return err
+	}
+	fl, err := tcplistener.File()
+	if err != nil {
+		return err
+	}
+
+	children := make([]*exec.Cmd, runtime.NumCPU())
+	for i := range children {
+		children[i] = exec.Command(os.Args[0], append(os.Args[1:], "-child")...)
+		children[i].Stdout = os.Stdout
+		children[i].Stderr = os.Stderr
+		children[i].ExtraFiles = []*os.File{fl}
+		if err := children[i].Start(); err != nil {
+			return err
 		}
-		os.Exit(0)
-	} else {
-		var err error
-		listener, err = net.FileListener(os.NewFile(3, ""))
-		if err != nil {
-			return nil, err
+	}
+	for _, ch := range children {
+		if err := ch.Wait(); err != nil {
+			return err
 		}
-		runtime.GOMAXPROCS(1)
 	}
-	return listener, nil
+
+	return nil
 }