Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
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
Prev Previous commit
Next Next commit
server: avoid grpc.(*Server).ServeHTTP
See grpc/grpc-go#586

With local calls disabled:
```
name                          old time/op    new time/op    delta
Select1_Cockroach-4             61.8µs ± 3%    64.2µs ± 3%   +3.90%          (p=0.032 n=5+5)
Select2_Cockroach-4             1.01ms ±14%    1.17ms ± 1%  +16.15%          (p=0.008 n=5+5)
Insert1_Cockroach-4              480µs ± 1%     645µs ± 2%  +34.35%          (p=0.008 n=5+5)
Insert10_Cockroach-4             815µs ± 5%    1031µs ± 3%  +26.57%          (p=0.008 n=5+5)
Insert100_Cockroach-4           3.81ms ± 1%    4.45ms ±14%  +16.74%          (p=0.008 n=5+5)
Insert1000_Cockroach-4          34.3ms ± 1%    36.5ms ± 2%   +6.45%          (p=0.008 n=5+5)
Update1_Cockroach-4              807µs ± 5%    1109µs ± 2%  +37.40%          (p=0.008 n=5+5)
Update10_Cockroach-4            1.47ms ± 6%    1.84ms ± 2%  +25.27%          (p=0.008 n=5+5)
Update100_Cockroach-4           6.93ms ± 1%    7.84ms ± 1%  +13.04%          (p=0.008 n=5+5)
Update1000_Cockroach-4          56.4ms ± 3%    61.3ms ± 2%   +8.61%          (p=0.008 n=5+5)
Delete1_Cockroach-4              725µs ± 4%     975µs ±10%  +34.50%          (p=0.008 n=5+5)
Delete10_Cockroach-4            1.94ms ± 1%    2.27ms ± 2%  +16.88%          (p=0.008 n=5+5)
Delete100_Cockroach-4           14.5ms ± 1%    16.0ms ± 1%  +10.32%          (p=0.008 n=5+5)
Delete1000_Cockroach-4           144ms ± 5%     144ms ± 1%     ~             (p=0.690 n=5+5)
Scan1_Cockroach-4                291µs ± 1%     433µs ± 2%  +48.91%          (p=0.008 n=5+5)
Scan10_Cockroach-4               334µs ± 1%     470µs ± 0%  +40.65%          (p=0.008 n=5+5)
Scan100_Cockroach-4              665µs ± 3%     855µs ± 4%  +28.73%          (p=0.008 n=5+5)
Scan1000_Cockroach-4            3.68ms ± 1%    4.26ms ± 0%  +15.81%          (p=0.008 n=5+5)
Scan10000_Cockroach-4           36.9ms ± 1%    41.9ms ± 2%  +13.54%          (p=0.008 n=5+5)
Scan1000Limit1_Cockroach-4       304µs ± 2%     473µs ±12%  +55.50%          (p=0.008 n=5+5)
Scan1000Limit10_Cockroach-4      347µs ± 1%     496µs ± 3%  +42.81%          (p=0.008 n=5+5)
Scan1000Limit100_Cockroach-4     691µs ± 3%     881µs ± 2%  +27.42%          (p=0.008 n=5+5)

name                          old alloc/op   new alloc/op   delta
Select1_Cockroach-4             3.91kB ± 0%    3.93kB ± 0%   +0.40%          (p=0.008 n=5+5)
Select2_Cockroach-4              101kB ± 0%     123kB ± 0%  +22.09%          (p=0.008 n=5+5)
Insert1_Cockroach-4             27.8kB ± 0%    35.5kB ± 0%  +27.54%          (p=0.008 n=5+5)
Insert10_Cockroach-4            83.2kB ± 0%    93.2kB ± 0%  +11.91%          (p=0.008 n=5+5)
Insert100_Cockroach-4            639kB ± 0%     671kB ± 0%   +4.95%          (p=0.008 n=5+5)
Insert1000_Cockroach-4          5.72MB ± 1%    5.90MB ± 0%   +3.20%          (p=0.008 n=5+5)
Update1_Cockroach-4             43.6kB ± 0%    57.9kB ± 0%  +32.81%          (p=0.008 n=5+5)
Update10_Cockroach-4             132kB ± 0%     153kB ± 0%  +16.13%          (p=0.008 n=5+5)
Update100_Cockroach-4            980kB ± 0%    1053kB ± 0%   +7.49%          (p=0.008 n=5+5)
Update1000_Cockroach-4          8.45MB ± 0%    9.00MB ± 0%   +6.53%          (p=0.008 n=5+5)
Delete1_Cockroach-4             34.8kB ± 0%    42.4kB ± 0%  +21.91%          (p=0.008 n=5+5)
Delete10_Cockroach-4            93.6kB ± 0%   104.7kB ± 0%  +11.87%          (p=0.008 n=5+5)
Delete100_Cockroach-4            689kB ± 0%     727kB ± 0%   +5.56%          (p=0.008 n=5+5)
Delete1000_Cockroach-4          6.15MB ± 0%    6.45MB ± 0%   +4.85%          (p=0.016 n=5+4)
Scan1_Cockroach-4               15.2kB ± 0%    21.7kB ± 0%  +43.30%          (p=0.008 n=5+5)
Scan10_Cockroach-4              21.1kB ± 0%    28.9kB ± 0%  +36.96%          (p=0.008 n=5+5)
Scan100_Cockroach-4             69.1kB ± 0%    88.2kB ± 0%  +27.65%          (p=0.016 n=4+5)
Scan1000_Cockroach-4             522kB ± 0%     643kB ± 0%  +23.26%          (p=0.008 n=5+5)
Scan10000_Cockroach-4           9.48MB ± 0%   10.48MB ± 0%  +10.61%          (p=0.016 n=4+5)
Scan1000Limit1_Cockroach-4      16.1kB ± 0%    22.8kB ± 0%  +41.66%          (p=0.008 n=5+5)
Scan1000Limit10_Cockroach-4     21.8kB ± 0%    29.9kB ± 0%  +36.72%          (p=0.008 n=5+5)
Scan1000Limit100_Cockroach-4    69.8kB ± 0%    88.9kB ± 0%  +27.37%          (p=0.008 n=5+5)

name                          old allocs/op  new allocs/op  delta
Select1_Cockroach-4               97.0 ± 0%      97.0 ± 0%     ~     (all samples are equal)
Select2_Cockroach-4              2.95k ± 0%     3.05k ± 0%   +3.39%          (p=0.008 n=5+5)
Insert1_Cockroach-4                402 ± 0%       504 ± 0%  +25.37%          (p=0.016 n=5+4)
Insert10_Cockroach-4             1.01k ± 0%     1.11k ± 0%  +10.02%          (p=0.008 n=5+5)
Insert100_Cockroach-4            6.73k ± 0%     6.85k ± 0%   +1.78%          (p=0.008 n=5+5)
Insert1000_Cockroach-4           64.3k ± 0%     64.4k ± 0%     ~             (p=0.151 n=5+5)
Update1_Cockroach-4                795 ± 0%       993 ± 0%  +24.93%          (p=0.016 n=4+5)
Update10_Cockroach-4             1.64k ± 0%     1.84k ± 0%  +12.14%          (p=0.008 n=5+5)
Update100_Cockroach-4            9.54k ± 0%     9.73k ± 0%   +2.09%          (p=0.008 n=5+5)
Update1000_Cockroach-4           84.5k ± 0%     85.0k ± 0%   +0.53%          (p=0.016 n=5+5)
Delete1_Cockroach-4                620 ± 0%       720 ± 0%  +16.09%          (p=0.008 n=5+5)
Delete10_Cockroach-4             1.41k ± 0%     1.52k ± 0%   +7.19%          (p=0.016 n=4+5)
Delete100_Cockroach-4            9.04k ± 0%     9.14k ± 0%   +1.11%          (p=0.008 n=5+5)
Delete1000_Cockroach-4           84.7k ± 0%     84.9k ± 0%   +0.17%          (p=0.016 n=5+4)
Scan1_Cockroach-4                  304 ± 0%       402 ± 0%  +32.37%          (p=0.016 n=4+5)
Scan10_Cockroach-4                 405 ± 0%       505 ± 0%  +24.57%          (p=0.016 n=5+4)
Scan100_Cockroach-4              1.31k ± 0%     1.42k ± 0%   +7.60%          (p=0.016 n=4+5)
Scan1000_Cockroach-4             10.3k ± 0%     10.4k ± 0%   +1.16%          (p=0.008 n=5+5)
Scan10000_Cockroach-4             101k ± 0%      101k ± 0%   +0.37%          (p=0.008 n=5+5)
Scan1000Limit1_Cockroach-4         330 ± 0%       428 ± 0%  +29.98%          (p=0.008 n=5+5)
Scan1000Limit10_Cockroach-4        430 ± 0%       529 ± 0%  +23.14%          (p=0.016 n=5+4)
Scan1000Limit100_Cockroach-4     1.34k ± 0%     1.44k ± 0%   +7.47%          (p=0.016 n=4+5)
```

With local calls enabled:
```
name                          old time/op    new time/op    delta
Select1_Cockroach-4             60.1µs ± 0%    63.0µs ± 1%   +4.82%          (p=0.008 n=5+5)
Select2_Cockroach-4              846µs ±18%     847µs ± 2%     ~             (p=0.222 n=5+5)
Insert1_Cockroach-4              383µs ± 2%     376µs ± 3%     ~             (p=0.222 n=5+5)
Insert10_Cockroach-4             689µs ± 9%     703µs ± 4%     ~             (p=0.222 n=5+5)
Insert100_Cockroach-4           3.49ms ± 2%    3.64ms ± 2%   +4.29%          (p=0.008 n=5+5)
Insert1000_Cockroach-4          33.2ms ± 3%    34.1ms ± 1%     ~             (p=0.095 n=5+5)
Update1_Cockroach-4              594µs ± 3%     559µs ± 1%   -6.00%          (p=0.008 n=5+5)
Update10_Cockroach-4            1.15ms ± 4%    1.21ms ± 2%   +5.51%          (p=0.008 n=5+5)
Update100_Cockroach-4           6.17ms ± 2%    6.44ms ± 2%   +4.23%          (p=0.008 n=5+5)
Update1000_Cockroach-4          52.7ms ± 3%    55.5ms ± 3%   +5.45%          (p=0.016 n=5+5)
Delete1_Cockroach-4              625µs ± 1%     611µs ± 2%   -2.34%          (p=0.008 n=5+5)
Delete10_Cockroach-4            1.83ms ± 4%    1.90ms ± 7%     ~             (p=0.151 n=5+5)
Delete100_Cockroach-4           14.8ms ± 2%    16.1ms ± 8%   +8.73%          (p=0.008 n=5+5)
Delete1000_Cockroach-4           140ms ± 5%     141ms ± 1%     ~             (p=0.690 n=5+5)
Scan1_Cockroach-4                207µs ± 2%     172µs ± 5%  -16.86%          (p=0.008 n=5+5)
Scan10_Cockroach-4               242µs ± 4%     230µs ± 8%   -5.18%          (p=0.032 n=5+5)
Scan100_Cockroach-4              500µs ± 2%     540µs ± 2%   +7.92%          (p=0.008 n=5+5)
Scan1000_Cockroach-4            2.98ms ± 1%    3.22ms ± 1%   +8.00%          (p=0.008 n=5+5)
Scan10000_Cockroach-4           30.5ms ± 1%    32.6ms ± 1%   +6.80%          (p=0.008 n=5+5)
Scan1000Limit1_Cockroach-4       218µs ± 1%     204µs ±14%     ~             (p=0.151 n=5+5)
Scan1000Limit10_Cockroach-4      253µs ± 4%     234µs ± 7%     ~             (p=0.056 n=5+5)
Scan1000Limit100_Cockroach-4     524µs ± 4%     568µs ± 5%   +8.47%          (p=0.008 n=5+5)

name                          old alloc/op   new alloc/op   delta
Select1_Cockroach-4             3.91kB ± 0%    3.91kB ± 0%     ~             (p=0.111 n=5+5)
Select2_Cockroach-4             80.7kB ± 0%    81.1kB ± 0%   +0.41%          (p=0.008 n=5+5)
Insert1_Cockroach-4             23.0kB ± 0%    23.4kB ± 0%   +1.59%          (p=0.008 n=5+5)
Insert10_Cockroach-4            67.2kB ± 0%    67.6kB ± 0%   +0.51%          (p=0.008 n=5+5)
Insert100_Cockroach-4            507kB ± 0%     508kB ± 0%   +0.08%          (p=0.032 n=5+5)
Insert1000_Cockroach-4          4.53MB ± 0%    4.58MB ± 1%   +1.06%          (p=0.008 n=5+5)
Update1_Cockroach-4             36.7kB ± 0%    37.5kB ± 0%   +1.97%          (p=0.008 n=5+5)
Update10_Cockroach-4            99.4kB ± 0%   100.1kB ± 0%   +0.76%          (p=0.008 n=5+5)
Update100_Cockroach-4            704kB ± 0%     707kB ± 0%   +0.42%          (p=0.016 n=5+5)
Update1000_Cockroach-4          6.08MB ± 1%    6.10MB ± 1%     ~             (p=0.222 n=5+5)
Delete1_Cockroach-4             29.8kB ± 0%    30.2kB ± 0%   +1.35%          (p=0.008 n=5+5)
Delete10_Cockroach-4            75.7kB ± 0%    76.1kB ± 0%   +0.60%          (p=0.008 n=5+5)
Delete100_Cockroach-4            537kB ± 0%     539kB ± 0%   +0.40%          (p=0.008 n=5+5)
Delete1000_Cockroach-4          4.81MB ± 0%    4.81MB ± 0%     ~             (p=0.190 n=4+5)
Scan1_Cockroach-4               13.3kB ± 0%    13.6kB ± 0%   +2.71%          (p=0.008 n=5+5)
Scan10_Cockroach-4              17.1kB ± 0%    17.5kB ± 0%   +2.23%          (p=0.008 n=5+5)
Scan100_Cockroach-4             49.4kB ± 0%    49.8kB ± 0%   +0.78%          (p=0.008 n=5+5)
Scan1000_Cockroach-4             331kB ± 0%     332kB ± 0%   +0.15%          (p=0.008 n=5+5)
Scan10000_Cockroach-4           5.72MB ± 0%    5.72MB ± 0%   +0.02%          (p=0.008 n=5+5)
Scan1000Limit1_Cockroach-4      14.0kB ± 0%    14.4kB ± 0%   +2.55%          (p=0.008 n=5+5)
Scan1000Limit10_Cockroach-4     17.9kB ± 0%    18.2kB ± 0%   +2.05%          (p=0.008 n=5+5)
Scan1000Limit100_Cockroach-4    50.0kB ± 0%    50.4kB ± 0%   +0.75%          (p=0.008 n=5+5)

name                          old allocs/op  new allocs/op  delta
Select1_Cockroach-4               97.0 ± 0%      97.0 ± 0%     ~     (all samples are equal)
Select2_Cockroach-4              2.70k ± 0%     2.70k ± 0%   +0.16%          (p=0.016 n=5+4)
Insert1_Cockroach-4                357 ± 0%       362 ± 0%   +1.46%          (p=0.008 n=5+5)
Insert10_Cockroach-4               907 ± 0%       912 ± 0%   +0.51%          (p=0.008 n=5+5)
Insert100_Cockroach-4            6.17k ± 0%     6.18k ± 0%   +0.07%          (p=0.016 n=5+5)
Insert1000_Cockroach-4           58.8k ± 0%     59.1k ± 0%   +0.54%          (p=0.008 n=5+5)
Update1_Cockroach-4                719 ± 0%       729 ± 0%   +1.45%          (p=0.016 n=5+4)
Update10_Cockroach-4             1.41k ± 0%     1.42k ± 0%   +0.73%          (p=0.008 n=5+5)
Update100_Cockroach-4            7.93k ± 0%     7.96k ± 0%   +0.42%          (p=0.008 n=5+5)
Update1000_Cockroach-4           70.0k ± 0%     70.1k ± 0%     ~             (p=0.151 n=5+5)
Delete1_Cockroach-4                567 ± 0%       572 ± 0%   +0.88%          (p=0.029 n=4+4)
Delete10_Cockroach-4             1.24k ± 0%     1.24k ± 0%   +0.49%          (p=0.029 n=4+4)
Delete100_Cockroach-4            7.68k ± 0%     7.69k ± 0%   +0.11%          (p=0.008 n=5+5)
Delete1000_Cockroach-4           71.7k ± 0%     71.7k ± 0%     ~             (p=0.317 n=4+5)
Scan1_Cockroach-4                  276 ± 0%       281 ± 0%   +1.81%          (p=0.008 n=5+5)
Scan10_Cockroach-4                 356 ± 0%       361 ± 0%   +1.52%          (p=0.016 n=5+4)
Scan100_Cockroach-4              1.08k ± 0%     1.09k ± 0%   +0.46%          (p=0.016 n=4+5)
Scan1000_Cockroach-4             8.29k ± 0%     8.30k ± 0%   +0.07%          (p=0.008 n=5+5)
Scan10000_Cockroach-4            80.4k ± 0%     80.5k ± 0%   +0.02%          (p=0.008 n=5+5)
Scan1000Limit1_Cockroach-4         298 ± 0%       303 ± 0%   +1.54%          (p=0.016 n=5+4)
Scan1000Limit10_Cockroach-4        378 ± 0%       383 ± 0%   +1.32%          (p=0.029 n=4+4)
Scan1000Limit100_Cockroach-4     1.10k ± 0%     1.11k ± 0%   +0.42%          (p=0.008 n=5+5)
```
  • Loading branch information
tamird committed Mar 9, 2016
commit f3e9549486032762f738e48dde457eb52333c779
1 change: 1 addition & 0 deletions client/client_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -621,6 +621,7 @@ func TestConcurrentIncrements(t *testing.T) {
// TestClientPermissions verifies permission enforcement.
func TestClientPermissions(t *testing.T) {
defer leaktest.AfterTest(t)()
t.Skip("TODO(tamird): grpc is listening on a cmux listener, not a tls.Listener. See https://github.com/golang/go/issues/14221")
s := server.StartTestServer(t)
defer s.Stop()

Expand Down
40 changes: 30 additions & 10 deletions server/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,6 @@ import (
"github.com/cockroachdb/cockroach/ts"
"github.com/cockroachdb/cockroach/ui"
"github.com/cockroachdb/cockroach/util"
"github.com/cockroachdb/cockroach/util/grpcutil"
"github.com/cockroachdb/cockroach/util/hlc"
"github.com/cockroachdb/cockroach/util/log"
"github.com/cockroachdb/cockroach/util/metric"
Expand Down Expand Up @@ -224,12 +223,14 @@ func (s *Server) Start() error {
// non-TLS case:
// net.Listen -> cmux.New -> pgwire.Match -> pgwire.Server.ServeConn
// |
// - -> cmux.HTTP2HeaderField("content-type", "application/grpc") -> grpc.(*Server).Serve
// - -> cmux.HTTP2 -> http2.(*Server).ServeConn
// - -> cmux.Any -> http.(*Server).Serve
//
// TLS case:
// net.Listen -> cmux.New -> pgwire.Match -> pgwire.Server.ServeConn
// |
// - -> cmux.HTTP2HeaderField("content-type", "application/grpc") -> grpc.(*Server).Serve
// - -> cmux.Any -> tls.NewListener -> http.(*Server).Serve
//
// Note that the difference between the TLS and non-TLS cases exists due to
Expand Down Expand Up @@ -258,11 +259,26 @@ func (s *Server) Start() error {
m := cmux.New(ln)
pgL := m.Match(pgwire.Match)

// GRPC connections get special handling because using GRPC's ServeHTTP is
// prohibitively slow. See https://github.com/grpc/grpc-go/issues/586
var grpcL net.Listener
grpcMatcher := cmux.HTTP2HeaderField("content-type", "application/grpc")

var serveConn func(net.Listener, func(net.Conn)) error
if tlsConfig != nil {
anyL := m.Match(cmux.Any())
serveConn = util.ServeHandler(s.stopper, s, tls.NewListener(anyL, tlsConfig), tlsConfig)

tlsM := cmux.New(tls.NewListener(anyL, tlsConfig))
grpcL = tlsM.Match(grpcMatcher)

serveConn = util.ServeHandler(s.stopper, s, tlsM.Match(cmux.Any()), tlsConfig)

go func() {
util.FatalIfUnexpected(tlsM.Serve())
}()
} else {
grpcL = m.Match(grpcMatcher)

h2L := m.Match(cmux.HTTP2())
anyL := m.Match(cmux.Any())

Expand All @@ -276,22 +292,26 @@ func (s *Server) Start() error {

serveConn = util.ServeHandler(s.stopper, s, anyL, tlsConfig)

s.stopper.RunWorker(func() {
go func() {
util.FatalIfUnexpected(serveConn(h2L, serveH2))
})
}()
}

s.stopper.RunWorker(func() {
go func() {
util.FatalIfUnexpected(s.grpc.Serve(grpcL))
}()

go func() {
util.FatalIfUnexpected(serveConn(pgL, func(conn net.Conn) {
if err := s.pgServer.ServeConn(conn); err != nil && !util.IsClosedConnection(err) {
log.Error(err)
}
}))
})
}()

s.stopper.RunWorker(func() {
go func() {
util.FatalIfUnexpected(m.Serve())
})
}()

s.gossip.Start(s.grpc, unresolvedAddr)

Expand Down Expand Up @@ -329,13 +349,13 @@ func (s *Server) Start() error {

// initHTTP registers http prefixes.
func (s *Server) initHTTP() {
s.mux.Handle("/", grpcutil.GRPCHandlerFunc(s.grpc, http.FileServer(
s.mux.Handle("/", http.FileServer(
&assetfs.AssetFS{
Asset: ui.Asset,
AssetDir: ui.AssetDir,
AssetInfo: ui.AssetInfo,
},
)))
))

// The admin server handles both /debug/ and /_admin/
// TODO(marc): when cookie-based authentication exists,
Expand Down
4 changes: 2 additions & 2 deletions util/net.go
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,7 @@ func ServeHandler(stopper *stop.Stopper, handler http.Handler, ln net.Listener,
log.Fatal(err)
}

stopper.RunWorker(func() {
go func() {
FatalIfUnexpected(httpServer.Serve(ln))

<-stopper.ShouldStop()
Expand All @@ -127,7 +127,7 @@ func ServeHandler(stopper *stop.Stopper, handler http.Handler, ln net.Listener,
conn.Close()
}
mu.Unlock()
})
}()

logFn := logger.Printf
return func(l net.Listener, serveConn func(net.Conn)) error {
Expand Down