Browse Source

Add prefork test for silverlining and Bump silverlining Version to v1.1.1 (#7232)

* Bump Version github.com/go-www/silverlining v1.0.0

* Bump Golang Version golang:1.18

* GOAMD64=v3

* Add silverlining-prefork

* Bump silverlining from v1.0.0 to v1.1.0

* Bump silverlining from v1.1.0 to v1.1.1

* upgrade golang.org/x/sys
lemon-mint 3 years ago
parent
commit
b0a58b2ca0

+ 21 - 0
frameworks/Go/silverlining/benchmark_config.json

@@ -21,6 +21,27 @@
         "notes": "",
         "versus": "go"
       }
+    },
+    {
+      "prefork": {
+        "json_url": "/json",
+        "plaintext_url": "/plaintext",
+        "port": 8080,
+        "approach": "Realistic",
+        "classification": "Platform",
+        "database": "None",
+        "framework": "None",
+        "language": "Go",
+        "flavor": "None",
+        "orm": "Raw",
+        "platform": "None",
+        "webserver": "None",
+        "os": "Linux",
+        "database_os": "Linux",
+        "display_name": "silverlining",
+        "notes": "",
+        "versus": "go"
+      }
     }
   ]
 }

+ 13 - 0
frameworks/Go/silverlining/config.toml

@@ -13,3 +13,16 @@ orm = "Raw"
 platform = "None"
 webserver = "None"
 versus = "go"
+
+[prefork]
+urls.plaintext = "/plaintext"
+urls.json = "/json"
+approach = "Realistic"
+classification = "Platform"
+database = "None"
+database_os = "Linux"
+os = "Linux"
+orm = "Raw"
+platform = "None"
+webserver = "None"
+versus = "go"

+ 11 - 0
frameworks/Go/silverlining/silverlining-prefork.dockerfile

@@ -0,0 +1,11 @@
+FROM golang:1.18
+
+WORKDIR /silverlining
+
+COPY ./src /silverlining
+
+RUN GOAMD64=v3 go build -ldflags="-s -w" -o app .
+
+EXPOSE 8080
+
+CMD ./app -prefork

+ 2 - 2
frameworks/Go/silverlining/silverlining.dockerfile

@@ -1,10 +1,10 @@
-FROM golang:1.17
+FROM golang:1.18
 
 WORKDIR /silverlining
 
 COPY ./src /silverlining
 
-RUN go build -ldflags="-s -w" -o app .
+RUN GOAMD64=v3 go build -ldflags="-s -w" -o app .
 
 EXPOSE 8080
 

+ 5 - 6
frameworks/Go/silverlining/src/go.mod

@@ -1,15 +1,14 @@
 module silverlining/src
 
-go 1.17
+go 1.18
 
-require github.com/go-www/silverlining v0.0.0-20220304111112-885f34de2350
+require github.com/go-www/silverlining v1.1.1
 
 require (
-	github.com/go-www/h1 v0.0.0-20220301151111-bd1d18e71e25 // indirect
 	github.com/gobwas/httphead v0.1.0 // indirect
 	github.com/gobwas/pool v0.2.1 // indirect
 	github.com/gobwas/ws v1.1.0 // indirect
-	github.com/json-iterator/go v1.1.12 // indirect
-	github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
-	github.com/modern-go/reflect2 v1.0.2 // indirect
+	github.com/goccy/go-json v0.9.6 // indirect
+	github.com/libp2p/go-reuseport v0.1.0 // indirect
+	golang.org/x/sys v0.0.0-20220325203850-36772127a21f // indirect
 )

+ 14 - 18
frameworks/Go/silverlining/src/go.sum

@@ -1,30 +1,26 @@
 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
-github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/go-www/h1 v0.0.0-20220301132724-fb526c8bf224/go.mod h1:pFiXMva/K5c/blSpJXy+p37srAPG8YjbHObQ8oMZzms=
-github.com/go-www/h1 v0.0.0-20220301151111-bd1d18e71e25 h1:Twrwyh1h+gvgAMZpgrWU5jKLlsr1Ry3qUvNR5TnxAVQ=
-github.com/go-www/h1 v0.0.0-20220301151111-bd1d18e71e25/go.mod h1:pFiXMva/K5c/blSpJXy+p37srAPG8YjbHObQ8oMZzms=
-github.com/go-www/silverlining v0.0.0-20220304111112-885f34de2350 h1:QYBd6x1eDiDBVoOH6TR5NZ/KpIU8yfyAXtWNn2awLt0=
-github.com/go-www/silverlining v0.0.0-20220304111112-885f34de2350/go.mod h1:HkvBw1pdYuutXGehi2OgApGPWx0khfn4TxmNr6dIgJg=
+github.com/go-www/silverlining v1.1.1 h1:PI+ggLQ7CLzG9NfqPRScnqwLwn5JmXcYkGtin1uYyD8=
+github.com/go-www/silverlining v1.1.1/go.mod h1:FqUQC31dCT7m21Q8nA0b7n0rfLEkUGAzjXmY7AZBoqU=
 github.com/gobwas/httphead v0.1.0 h1:exrUm0f4YX0L7EBwZHuCF4GDp8aJfVeBrlLQrs6NqWU=
 github.com/gobwas/httphead v0.1.0/go.mod h1:O/RXo79gxV8G+RqlR/otEwx4Q36zl9rqC5u12GKvMCM=
 github.com/gobwas/pool v0.2.1 h1:xfeeEhW7pwmX8nuLVlqbzVc7udMDrwetjEv+TZIz1og=
 github.com/gobwas/pool v0.2.1/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw=
 github.com/gobwas/ws v1.1.0 h1:7RFti/xnNkMJnrK7D1yQ/iCIB5OrrY/54/H930kIbHA=
 github.com/gobwas/ws v1.1.0/go.mod h1:nzvNcVha5eUziGrbxFCo6qFIojQHjJV5cLYIbezhfL0=
-github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
-github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
-github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
-github.com/lemon-mint/envaddr v0.0.0-20220115112619-b1acf77f317e/go.mod h1:kzf0S/z9swcXpeo2+e1fY63g5/ZfIop37MgBmXLmDL0=
-github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
-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.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
-github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
+github.com/goccy/go-json v0.9.6 h1:5/4CtRQdtsX0sal8fdVhTaiMN01Ri8BExZZ8iRmHQ6E=
+github.com/goccy/go-json v0.9.6/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
+github.com/libp2p/go-reuseport v0.1.0 h1:0ooKOx2iwyIkf339WCZ2HN3ujTDbkK0PjC7JVoP1AiM=
+github.com/libp2p/go-reuseport v0.1.0/go.mod h1:bQVn9hmfcTaoo0c9v5pBhOarsU1eNOBZdaAd2hzXRKU=
 github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
 github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
 github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
-github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q=
-github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
+github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
+github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
+golang.org/x/sys v0.0.0-20190228124157-a34e9553db1e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20201207223542-d4d67f95c62d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20220224120231-95c6836cb0e7/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20220325203850-36772127a21f h1:TrmogKRsSOxRMJbLYGrB4SBbW+LJcEllYBLME5Zk5pU=
+golang.org/x/sys v0.0.0-20220325203850-36772127a21f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=
+gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=

+ 21 - 14
frameworks/Go/silverlining/src/main.go

@@ -3,32 +3,23 @@ package main
 import (
 	"flag"
 	"log"
-	"net"
 
 	"github.com/go-www/silverlining"
 )
 
 var BindAddr string
+var prefork *bool
 
 func init() {
 	flag.StringVar(&BindAddr, "bind", ":8080", "set bind host")
+	prefork = flag.Bool("prefork", false, "use prefork")
 	flag.Parse()
 }
 
 func main() {
-	ln, err := net.Listen("tcp", BindAddr)
-	if err != nil {
-		log.Fatal(err)
-	}
 	log.Printf("Listening on http://localhost%s", BindAddr)
 
-	defer ln.Close()
-
-	srv := silverlining.Server{
-		//ReadTimeout: time.Minute,
-	}
-
-	srv.Handler = func(r *silverlining.Context) {
+	Handler := func(r *silverlining.Context) {
 		switch string(r.Path()) {
 		case "/plaintext":
 			r.ResponseHeaders().Set("Content-Type", "text/plain")
@@ -44,8 +35,24 @@ func main() {
 		}
 	}
 
-	err = srv.Serve(ln)
+	var err error
+	if *prefork {
+		var id int
+		id, err = silverlining.PreforkChildID()
+		if err != nil {
+			log.Fatalln(err)
+		}
+
+		if id == 0 {
+			log.Println("Starting prefork leader process")
+		} else {
+			log.Printf("Starting prefork replica process %d", id)
+		}
+		err = silverlining.ListenAndServePrefork(BindAddr, Handler)
+	} else {
+		err = silverlining.ListenAndServe(BindAddr, Handler)
+	}
 	if err != nil {
-		log.Fatal(err)
+		log.Fatalln(err)
 	}
 }