Giter VIP home page Giter VIP logo

chihaya's Introduction

Chihaya

Build Status Container Image GoDoc License IRC Channel

Chihaya is an open source BitTorrent tracker written in Go.

Differentiating features include:

  • HTTP and UDP protocols
  • IPv4 and IPv6 support
  • Pre/Post middleware hooks
  • YAML configuration
  • Metrics via Prometheus
  • High Availability via Redis
  • Kubernetes deployment via Helm

Note: The master branch may be in an unstable or even broken state during development. Please use releases instead of the master branch in order to get stable binaries.

Why Chihaya?

Chihaya is built for developers looking to integrate BitTorrent into a preexisting production environment. Chihaya's pluggable architecture and middleware framework offers a simple and flexible integration point that abstracts the BitTorrent tracker protocols. The most common use case for Chihaya is enabling peer-to-peer cloud software deployments.

Development

Contributing

Long-term discussion and bug reports are maintained via GitHub Issues. Code review is done via GitHub Pull Requests. Real-time discussion is done via freenode IRC.

For more information read CONTRIBUTING.md.

Getting Started

Building from HEAD

In order to compile the project, the latest stable version of Go and knowledge of a working Go environment are required.

git clone [email protected]:chihaya/chihaya.git
cd chihaya
go build ./cmd/chihaya
./chihaya --help

Docker

Docker containers are available for HEAD and stable releases.

Testing

The following will run all tests and benchmarks. Removing -bench will just run unit tests.

go test -bench $(go list ./...)

The Chihaya executable contains a command to end-to-end test a BitTorrent tracker. See

chihaya --help

Configuration

Configuration of Chihaya is done via one YAML configuration file. The dist/ directory contains an example configuration file. Files and directories under docs/ contain detailed information about configuring middleware, storage implementations, architecture etc.

Related projects

  • BitTorrent.org: a static website containing the BitTorrent spec and all BEPs
  • OpenTracker: a popular BitTorrent tracker written in C
  • Ocelot: a private BitTorrent tracker written in C++

chihaya's People

Contributors

atomicnibble avatar b0unce avatar cedricgc avatar cenkalti avatar cooperlees avatar cpb8010 avatar cpttz avatar daftaupe avatar davidwilemski avatar dependabot-preview[bot] avatar dependabot[bot] avatar dtrackd avatar duyanghao avatar dvrkps avatar elotreum avatar hustcat avatar ilyaglow avatar iyashu avatar jdek avatar jzelinskie avatar mrd0ll4r avatar onestraw avatar psaab avatar pushrax avatar sadbox avatar sheepish-ops avatar shish avatar shyba avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

chihaya's Issues

Graceful Shutdown

In some of the latest language updates, they added some ways to get at net/http.Server's internals to gracefully shutdown without using a mutex. Switching out our mutex-based stoppablelistener for something using this new strategy would give us performance improvements.

Gazelle integration

There are two popular ways to keep the tracker synchronized with a Gazelle app's database:

  • Poll - the tracker polls the database every so often and makes changes accordingly
  • Push - changes from the website use an API exposed by the tracker to inform it of changes

The question is, do we want to implement one of these or both of these?

Dockerfile

It's super easy with the golang:onbuild image

Server Infomation Leakage

Does chihaya relay any data about the server it's running on?

For example, assuming someone had tunneled their trackers traffic over TOR, and the clients were using TOR to connect, would the tracker leak anything like server IP or server OS, etc?

Pub/sub for detecting data modification

Currently, the database is completely reloaded every Intervals.DatabaseReload seconds. This is obviously very inefficient, as well as potentially dangerous, but at the time it was written it needed to be compatible with the existing tracker software that was in use.

The way data changes should be handled is with a publish/subscribe architecture. My plan is to use redis for this. There will need to be a "deleted" channel and a "modified/new" channel.

I'm not sure if it'd be better to pass in just the modified IDs and have the tracker hit the database, or if it'd be better to pass the entire object over redis.

Investigate 32-bit compatibility

Currently it seems that there are some issues with running Chihaya compiled in 32-bit mode (e.g. #54). I don't see a good reason why we should drop support for 32-bit, so fixing these issues would be good.

Use Containers on Travis

We can increase the speed at which our CI goes by enabling our builds to occur in containers on Travis rather than in a VM.

I'm pretty sure this is only one extra line in the .travis.yml

Deltas

This issue is for the discussion of deltas which are applied in batch to the web application's data store.

IPv6 support

Bonus points for IPv6 compact support, which isn't implemented by anybody, but should be.

Stats view IP whitelist

Just an idea.

Implement say a config var for a list of IP address that are allowed to view the stats.

I would assume more tracker admins dont want their users to be able to access these stats.

BadConnectionID errors are returned if the tracker is shutdown

The tracker starts up and generates a random key to use for the generation of connection IDs for UDP packets, but if for some reason the tracker restarts or, if in the future, when clustering is available, traffic gets routed to another tracker, these keys will be different and clients will be served a "BadConnectionID" error.

This can be resolved by adding a key into the config and simply using that.

UDP support

Should be relatively simple to add by implementing a tracker.Writer for UDP.

Improve logging w/ standard levels

The current selection of log levels confused me. When -v=0, our "purging peers" is displayed, but not requests?

I think we need to come up with guidelines for our log lines and start sprinkling them everywhere.

remove wiki

I don't think we should needlessly depend on this GH feature when it could just as easily be in a normal markdown file in the repository visible to all who clone it.

Any opinions?

Rewrite paths with godep

When we vendored our dependencies with godep, we didn't use godep save -r which will rewrite imports in all of the source files to very specifically only use the libraries in the godep workspace.

Local communication without database?

It would be beneficial for there to be a method of authenticated communications with chihaya over a network port, for statistics and command/control, standard operations could remain operating via the database.

For example, it would be good if we could connect to chihaya, authenticate, then ask it for up to date stats about various info-hashes, the current load, ask it to gracefully stop/start

Milestones / Information for new contributors

The Chihaya project has been recently mentioned on /r/trackers, yet it remains relatively unknown, with Ocelot reigning supreme.

Since competition drives innovation and improvement, perhaps a list of milestones or 'low-hanging-fruit' could be written to help potential new contributors see where the project currently stands and where contributions would be most welcome.

Potential Memory Leak

Working from develop brach on a debain 8 64bit system
go version go1.4.2 linux/amd64

config:

{
  "create_on_announce": true,
  "private_enabled": false,
  "freeleech_enabled": false,
  "purge_inactive_torrents": false,
  "announce": "30m",
  "min_announce": "15m",
  "default_num_want": 50,
  "torrent_map_shards": 1,
  "allow_ip_spoofing": true,
  "dual_stacked_peers": true,
  "real_ip_header": "",
  "respect_af": false,
  "client_whitelist_enabled": false,
  "client_whitelist": ["OP1011"],
  "udp_listen_addr": ":80",
  "http_listen_addr": ":8080",
  "http_request_timeout": "4s",
  "http_read_timeout": "4s",
  "http_write_timeout": "4s",
  "http_listen_limit": 0,
  "driver": "noop",
  "stats_buffer_size": 0,
  "include_mem_stats": true,
  "verbose_mem_stats": false,
  "mem_stats_interval": "5s"
}

Running the tracker seems to make the memeroy usage continue to grow at a pretty constant rate of ~3MB every 5 seconds or so under real world traffic.

the server has 1GB of memory and no other daemons running, its only used for chihaya.
So in reality we are able to play with ~850MB of memory.

Here you can also see the growth in ram over periods of time (4156 is the PID of the tracker)

root@box:~/chihaya/bin# date; cat /proc/4156/status | grep VmSize
Fri Jun 19 01:30:43 CEST 2015
VmSize:   668200 kB

(~8mins later...)

root@box:~/chihaya/bin# date; cat /proc/4156/status | grep VmSize
Fri Jun 19 01:38:32 CEST 2015
VmSize:   708752 kB

(~4mins mins after that... )

root@box:~/chihaya/bin# date; cat /proc/4156/status | grep VmSize
Fri Jun 19 01:42:40 CEST 2015
VmSize:   737320 kB

At the point of when the tracker was using 737320 kB of memory the stats showed as follows:

Started: "2015-06-19T01:09:20.30660432+02:00",
Connections.Open: 1,
Connections.Accepted: 66,
BytesTransmitted: 0,
Runtime.GoRoutines: 17,
Requests.Handled: 1,
Requests.Errored: 0,
Requests.Bad: 2625430,
ResponseTime: {
P50: 0.236624,
P90: 0.236624,
P95: 0.236624
},
Tracker.Announces: 471471,
Tracker.Scrapes: 355241,
Torrents.Size: 63044,
Torrents.Added: 63044,
Torrents.Removed: 0,
Torrents.Reaped: 0,
Peers.IPv4: {
Peers: {
Current: 246036,
Joined: 298737,
Left: 52701,
Reaped: 0
},
Seeds: {
Current: 178876,
Joined: 217853,
Left: 42606,
Reaped: 0
},
Completed: 3629
},
Peers.IPv6: {
Peers: {
Current: 0,
Joined: 0,
Left: 0,
Reaped: 0
},
Seeds: {
Current: 0,
Joined: 0,
Left: 0,
Reaped: 0
},
Completed: 0
},
Memory: {
Alloc: 383058872,
TotalAlloc: 18189594344,
Sys: 440996432,
Lookups: 142,
Mallocs: 322075692,
Frees: 319396919,
HeapAlloc: 383058872,
HeapSys: 408485888,
HeapIdle: 10510336,
HeapInuse: 397975552,
HeapReleased: 0,
HeapObjects: 2678773,
PauseTotalNs: 21756544417
}
}

After it runs out of memory obviously give the following errors (which is expected):


root@box:~/chihaya/bin# ./chihaya -v=0 -logtostderr=true -config=config.json
I0619 00:08:25.996675    4144 http.go:125] Starting HTTP on :8080
I0619 00:08:25.996831    4144 udp.go:93] Starting UDP on :80
I0619 00:38:25.996926    4144 tracker.go:99] Purging peers with no announces since 2015-06-18 23:38:25.996921616 +0200 CEST
fatal error: runtime: out of memory

runtime stack:
runtime.SysMap(0xc23a9d0000, 0x100000, 0x428900, 0x8ea9f8)
/usr/local/go/src/runtime/mem_linux.c:149 +0x98
runtime.MHeap_SysAlloc(0x8f00e0, 0x100000, 0x430792)
/usr/local/go/src/runtime/malloc.c:284 +0x124
runtime.MHeap_Alloc(0x8f00e0, 0x26, 0x10100000000, 0x8)
/usr/local/go/src/runtime/mheap.c:240 +0x66

goroutine 6927789 [running]:
runtime.switchtoM()
/usr/local/go/src/runtime/asm_amd64.s:198 fp=0xc237de56e0 sp=0xc237de56d8
runtime.mallocgc(0x4bfc0, 0x718c60, 0x0, 0xc23a95c000)
/usr/local/go/src/runtime/malloc.go:199 +0x9f3 fp=0xc237de5790 sp=0xc237de56e0
runtime.newarray(0x718c60, 0xcaa, 0x30000)
/usr/local/go/src/runtime/malloc.go:365 +0xc1 fp=0xc237de57c8 sp=0xc237de5790
runtime.growslice(0x662b40, 0xc23a95c000, 0xa00, 0xa00, 0x1, 0x0, 0x0, 0x0)
/usr/local/go/src/runtime/slice.go:87 +0x2bb fp=0xc237de5828 sp=0xc237de57c8
github.com/chihaya/chihaya/tracker/models.AppendPeer(0xc209463180, 0xc209463220, 0xc237aa8c40, 0xc219b5faa0, 0x0)
/root/chihaya/src/github.com/chihaya/chihaya/tracker/models/peermap.go:195 +0x407 fp=0xc237de5900 sp=0xc237de5828
github.com/chihaya/chihaya/tracker/models.(*PeerMap).AppendPeers(0xc208038870, 0xc23a95c000, 0x8ea, 0xa00, 0x8e8e58, 0x0, 0x0, 0xc237aa8c40, 0xfffff715, 0x0, ...)
/root/chihaya/src/github.com/chihaya/chihaya/tracker/models/peermap.go:162 +0x707 fp=0xc237de5b40 sp=0xc237de5900
github.com/chihaya/chihaya/tracker.getPeers(0xc237aa8c40, 0xc23a95c000, 0x8ea, 0xa00, 0x8e8e58, 0x0, 0x0)
/root/chihaya/src/github.com/chihaya/chihaya/tracker/announce.go:298 +0x2e6 fp=0xc237de5bf0 sp=0xc237de5b40
github.com/chihaya/chihaya/tracker.newAnnounceResponse(0xc237aa8c40, 0xc237aa8c40)
/root/chihaya/src/github.com/chihaya/chihaya/tracker/announce.go:276 +0x1d5 fp=0xc237de5c90 sp=0xc237de5bf0
github.com/chihaya/chihaya/tracker.(*Tracker).HandleAnnounce(0xc20801d260, 0xc237aa8c40, 0x7f84d79b6548, 0xc20b511fc0, 0x0, 0x0)
/root/chihaya/src/github.com/chihaya/chihaya/tracker/announce.go:74 +0x76b fp=0xc237de5d78 sp=0xc237de5c90
github.com/chihaya/chihaya/udp.(*Server).handlePacket(0xc20803ae40, 0xc208267000, 0x6d, 0x800, 0xc20990b530, 0x0, 0x0, 0x0, 0x7592d0, 0x8)
/root/chihaya/src/github.com/chihaya/chihaya/udp/protocol.go:102 +0x630 fp=0xc237de5ea8 sp=0xc237de5d78
github.com/chihaya/chihaya/udp.funcยท002()
/root/chihaya/src/github.com/chihaya/chihaya/udp/udp.go:74 +0xab fp=0xc237de5fe0 sp=0xc237de5ea8
runtime.goexit()
/usr/local/go/src/runtime/asm_amd64.s:2232 +0x1 fp=0xc237de5fe8 sp=0xc237de5fe0
created by github.com/chihaya/chihaya/udp.(*Server).serve
/root/chihaya/src/github.com/chihaya/chihaya/udp/udp.go:85 +0x895

goroutine 1 [chan receive, 42 minutes]:
github.com/chihaya/chihaya.Boot()
/root/chihaya/src/github.com/chihaya/chihaya/chihaya.go:118 +0x1090
main.main()
/root/chihaya/src/github.com/chihaya/chihaya/cmd/chihaya/main.go:10 +0x1b

goroutine 5 [chan receive]:
github.com/golang/glog.(*loggingT).flushDaemon(0x8e06a0)
/root/chihaya/src/github.com/chihaya/chihaya/Godeps/_workspace/src/github.com/golang/glog/glog.go:879 +0x78
created by github.com/golang/glog.initยท1
/root/chihaya/src/github.com/chihaya/chihaya/Godeps/_workspace/src/github.com/golang/glog/glog.go:410 +0x2a7

goroutine 17 [syscall, 42 minutes, locked to thread]:
runtime.goexit()
/usr/local/go/src/runtime/asm_amd64.s:2232 +0x1

goroutine 6 [syscall, 42 minutes]:
os/signal.loop()
/usr/local/go/src/os/signal/signal_unix.go:21 +0x1f
created by os/signal.initยท1
/usr/local/go/src/os/signal/signal_unix.go:27 +0x35

goroutine 8 [runnable]:
github.com/chihaya/chihaya/stats.(*Stats).handleEvents(0xc208082160)
/root/chihaya/src/github.com/chihaya/chihaya/stats/stats.go:168 +0x2de
created by github.com/chihaya/chihaya/stats.New
/root/chihaya/src/github.com/chihaya/chihaya/stats/stats.go:129 +0x721

goroutine 9 [chan receive, 12 minutes]:
github.com/chihaya/chihaya/tracker.(*Tracker).purgeInactivePeers(0xc20801d260, 0xc208050200, 0x34630b8a000, 0x1a3185c5000)
/root/chihaya/src/github.com/chihaya/chihaya/tracker/tracker.go:97 +0x8a
created by github.com/chihaya/chihaya/tracker.New
/root/chihaya/src/github.com/chihaya/chihaya/tracker/tracker.go:54 +0x183

goroutine 10 [IO wait, 10 minutes]:
net.(*pollDesc).Wait(0xc20800e290, 0x72, 0x0, 0x0)
/usr/local/go/src/net/fd_poll_runtime.go:84 +0x47
net.(*pollDesc).WaitRead(0xc20800e290, 0x0, 0x0)
/usr/local/go/src/net/fd_poll_runtime.go:89 +0x43
net.(*netFD).accept(0xc20800e230, 0x0, 0x7f84d79b4b60, 0xc217d86550)
/usr/local/go/src/net/fd_unix.go:419 +0x40b
net.(*TCPListener).AcceptTCP(0xc2080360c0, 0xc208057c08, 0x0, 0x0)
/usr/local/go/src/net/tcpsock_posix.go:234 +0x4e
net.(*TCPListener).Accept(0xc2080360c0, 0x0, 0x0, 0x0, 0x0)
/usr/local/go/src/net/tcpsock_posix.go:244 +0x4c
net/http.(*Server).Serve(0xc2080505a0, 0x7f84d79b53b0, 0xc2080360c0, 0x0, 0x0)
/usr/local/go/src/net/http/server.go:1728 +0x92
github.com/tylerb/graceful.(*Server).Serve(0xc208050540, 0x7f84d79b53b0, 0xc2080360c0, 0x0, 0x0)
/root/chihaya/src/github.com/chihaya/chihaya/Godeps/_workspace/src/github.com/tylerb/graceful/graceful.go:197 +0x446
github.com/tylerb/graceful.(*Server).ListenAndServe(0xc208050540, 0x0, 0x0)
/root/chihaya/src/github.com/chihaya/chihaya/Godeps/_workspace/src/github.com/tylerb/graceful/graceful.go:110 +0x211
github.com/chihaya/chihaya/http.(*Server).Serve(0xc20801d2a0, 0xc208028d03, 0x5)
/root/chihaya/src/github.com/chihaya/chihaya/http/http.go:149 +0x612
github.com/chihaya/chihaya.funcยท002()
/root/chihaya/src/github.com/chihaya/chihaya/chihaya.go:94 +0x79
created by github.com/chihaya/chihaya.Boot
/root/chihaya/src/github.com/chihaya/chihaya/chihaya.go:95 +0xbac

goroutine 11 [IO wait]:
net.(*pollDesc).Wait(0xc20800e300, 0x72, 0x0, 0x0)
/usr/local/go/src/net/fd_poll_runtime.go:84 +0x47
net.(*pollDesc).WaitRead(0xc20800e300, 0x0, 0x0)
/usr/local/go/src/net/fd_poll_runtime.go:89 +0x43
net.(*netFD).readFrom(0xc20800e2a0, 0xc20844c800, 0x800, 0x800, 0x0, 0x0, 0x0, 0x7f84d79b4b60, 0xc23910a310)
/usr/local/go/src/net/fd_unix.go:269 +0x4a1
net.(*UDPConn).ReadFromUDP(0xc2080360f8, 0xc20844c800, 0x800, 0x800, 0x0, 0x0, 0x0, 0x0)
/usr/local/go/src/net/udpsock_posix.go:67 +0x124
github.com/chihaya/chihaya/udp.(*Server).serve(0xc20803ae40, 0xc208028d00, 0x3, 0x0, 0x0)
/root/chihaya/src/github.com/chihaya/chihaya/udp/udp.go:61 +0x5d7
github.com/chihaya/chihaya/udp.(*Server).Serve(0xc20803ae40, 0xc208028d00, 0x3)
/root/chihaya/src/github.com/chihaya/chihaya/udp/udp.go:102 +0x229
github.com/chihaya/chihaya.funcยท003()
/root/chihaya/src/github.com/chihaya/chihaya/chihaya.go:105 +0x79
created by github.com/chihaya/chihaya.Boot
/root/chihaya/src/github.com/chihaya/chihaya/chihaya.go:106 +0xe21

goroutine 12 [semacquire, 42 minutes]:
sync.(*WaitGroup).Wait(0xc20801d280)
/usr/local/go/src/sync/waitgroup.go:132 +0x169
github.com/chihaya/chihaya.funcยท004()
/root/chihaya/src/github.com/chihaya/chihaya/chihaya.go:113 +0x30
created by github.com/chihaya/chihaya.Boot
/root/chihaya/src/github.com/chihaya/chihaya/chihaya.go:116 +0x1065

goroutine 13 [select, 10 minutes]:
github.com/tylerb/graceful.(*Server).manageConnections(0xc208050540, 0xc208050600, 0xc208050660, 0xc2080506c0, 0xc208050720)
/root/chihaya/src/github.com/chihaya/chihaya/Godeps/_workspace/src/github.com/tylerb/graceful/graceful.go:234 +0x3da
created by github.com/tylerb/graceful.(*Server).Serve
/root/chihaya/src/github.com/chihaya/chihaya/Godeps/_workspace/src/github.com/tylerb/graceful/graceful.go:184 +0x244

goroutine 14 [chan receive, 42 minutes]:
github.com/tylerb/graceful.(*Server).handleInterrupt(0xc208050540, 0xc208050780, 0x7f84d79b53b0, 0xc2080360c0)
/root/chihaya/src/github.com/chihaya/chihaya/Godeps/_workspace/src/github.com/tylerb/graceful/graceful.go:269 +0x3d
created by github.com/tylerb/graceful.(*Server).Serve
/root/chihaya/src/github.com/chihaya/chihaya/Godeps/_workspace/src/github.com/tylerb/graceful/graceful.go:193 +0x416

goroutine 15 [chan receive, 42 minutes]:
github.com/chihaya/chihaya/udp.funcยท003()
/root/chihaya/src/github.com/chihaya/chihaya/udp/udp.go:97 +0x7e
created by github.com/chihaya/chihaya/udp.(*Server).Serve
/root/chihaya/src/github.com/chihaya/chihaya/udp/udp.go:100 +0x1fc

race condition

Thanks to @aaronblohowiak who pointed out on reddit that we have a race condition in our server. waitgroup.Add(1) is called after the goroutine has already been launched, which might not get the chance to run before waitgroup.Wait() is called. We still need to gracefully shutdown the server, so it's time to brainstorm for alternatives.

I really wish this was behavior available in the standard library.

Better default configuration

The relative path for the required config.json file causes problems when running test programs that reside inside different directories or with automated test frameworks that require additional database setup to test.
By making the config.json an optional command line argument for the main program, the default values can be loaded for test environments and the deployment configuration can continue to be stored in a config.json alongside the working directory of the main program.

From: Discussion here

RESTful HTTP API

A backend application can alter the torrent's database through an HTTP API. This should be adjusted to be RESTful.

redis driver

this is meant for the tracking of progress on the redis driver's completion

Private Tracker Support

We need to figure out and document what we have and what is left for this to be 100% supported.

Add config to listen on specific address/protcols

I feel it will be good to thing to be able to allow in the config to set the listening addresses and protocol

so something like:

"listen_addr" :  {"1.1.1.1",  "[1::2:eeee]", },
"tracker_proto" : "tcp_udp",

For example on the listen_addr you can have if nothing is set just listing to every address and can also specify say 0.0.0.0 being all IPv4 or [::] being all ipv6

For the tracker_proto you can have say tcp, udp and tcp_udp which will be both.

Update to Go 1.4

This basically just entitles someone updating the travis.yml and making sure everything works.
The README needs to be upgrading to say 1.4 as well.

Tracker Clustering ability

I would love to see the ability to have clustering ability, this will add the ability to scale if needed and also adds redundancy.

Also gives ability for multiple trakcers to (for example) share peer/seed information

Blacklist Hashes for Public trackers

Add option to blacklist hex or hashes that operators doesn't want to track.

Eg..

  1. Someone sends a DMCA regarding a hash to be blocked.
  2. Someone uploads a fake material and you want to block that hash.

This will be great to have as most trackers go down just because of a single or two or more hashes they are unable to block.

Panic error when accessing stats

Trying this tracker out for the first time to possible replace ocelot.
Sadly, when I access stats, I get a immediate panic error.
IP address in the bottom log is censored.
Here is the full error log:

2015/02/18 12:42:15 http: panic serving x.x.x.x:58379: runtime error: invalid memory address or nil pointer dereference
goroutine 16 [running]:
net/http.funcยท011()
/usr/local/go/src/net/http/server.go:1130 +0xa8
encoding/json.funcยท002()
/usr/local/go/src/encoding/json/encode.go:262 +0x7a
sync/atomic.LoadUint64(0x18632024, 0xf757f338, 0x18632000)
/usr/local/go/src/sync/atomic/asm_386.s:165 +0xb
github.com/pushrax/faststats.(_Percentile).Value(0x18632000, 0x80522ce, 0x18642950)
/usr/local/gosrc/src/github.com/pushrax/faststats/percentile.go:47 +0x3a
github.com/pushrax/faststats.(_Percentile).MarshalJSON(0x18632000, 0x0, 0x0, 0x0, 0x0, 0x0)
/usr/local/gosrc/src/github.com/pushrax/faststats/json.go:10 +0x50
encoding/json.marshalerEncoder(0x1867a820, 0x829ab00, 0x1863c184, 0xd6, 0x0)
/usr/local/go/src/encoding/json/encode.go:416 +0xea
encoding/json.(_structEncoder).encode(0x1872e600, 0x1867a820, 0x8291140, 0x1863c184, 0xd9, 0x0)
/usr/local/go/src/encoding/json/encode.go:584 +0x211
encoding/json._structEncoder.(encoding/json.encode)ยทfm(0x1867a820, 0x8291140, 0x1863c184, 0xd9, 0x0)
/usr/local/go/src/encoding/json/encode.go:598 +0x50
encoding/json.(_structEncoder).encode(0x1872e4c0, 0x1867a820, 0x82ae940, 0x1863c140, 0xd9, 0x18636100)
/usr/local/go/src/encoding/json/encode.go:584 +0x211
encoding/json._structEncoder.(encoding/json.encode)ยทfm(0x1867a820, 0x82ae940, 0x1863c140, 0xd9, 0x1863c100)
/usr/local/go/src/encoding/json/encode.go:598 +0x50
encoding/json.(_ptrEncoder).encode(0x18730150, 0x1867a820, 0x82a88a0, 0x1863c140, 0x16, 0x0)
/usr/local/go/src/encoding/json/encode.go:706 +0xc7
encoding/json._ptrEncoder.(encoding/json.encode)ยทfm(0x1867a820, 0x82a88a0, 0x1863c140, 0x16, 0x1863c100)
/usr/local/go/src/encoding/json/encode.go:711 +0x50
encoding/json.(_encodeState).reflectValue(0x1867a820, 0x82a88a0, 0x1863c140, 0x16)
/usr/local/go/src/encoding/json/encode.go:299 +0x64
encoding/json.(_encodeState).marshal(0x1867a820, 0x82a88a0, 0x1863c140, 0x0, 0x0)
/usr/local/go/src/encoding/json/encode.go:270 +0xb1
encoding/json.(_Encoder).Encode(0x18630940, 0x82a88a0, 0x1863c140, 0x0, 0x0)
/usr/local/go/src/encoding/json/stream.go:160 +0x6c
github.com/chihaya/chihaya/http.(_Server).stats(0x1861c348, 0xf757f298, 0x18634a80, 0x18634a10, 0x0, 0x0, 0x0, 0x54e47a97, 0x0, 0x0)
/usr/local/gosrc/src/github.com/chihaya/chihaya/http/routes.go:70 +0x2c0
github.com/chihaya/chihaya/http._Server.(github.com/chihaya/chihaya/http.stats)ยทfm(0xf757f298, 0x18634a80, 0x18634a10, 0x0, 0x0, 0x0, 0x840ec20, 0x0, 0x0)
/usr/local/gosrc/src/github.com/chihaya/chihaya/http/http.go:95 +0x67
github.com/chihaya/chihaya/http.funcยท001(0xf757f298, 0x18634a80, 0x18634a10, 0x0, 0x0, 0x0)
/usr/local/gosrc/src/github.com/chihaya/chihaya/http/http.go:38 +0xb5
github.com/julienschmidt/httprouter.(_Router).ServeHTTP(0x1860a640, 0xf757f298, 0x18634a80, 0x18634a10)
/usr/local/gosrc/src/github.com/julienschmidt/httprouter/router.go:298 +0x141
net/http.serverHandler.ServeHTTP(0x186b2080, 0xf757f298, 0x18634a80, 0x18634a10)
/usr/local/go/src/net/http/server.go:1703 +0x145
net/http.(_conn).serve(0x186483c0)
/usr/local/go/src/net/http/server.go:1204 +0x9d8
created by net/http.(_Server).Serve
/usr/local/go/src/net/http/server.go:1751 +0x2ce

config option to toggle creation of new torrents

On this line we check to see if the torrent doesn't exist and the tracker is public before creating the new torrent, but there is totally a use case where you don't want other people using your public tracker for torrents other than what you have personally added.

Example: Ubuntu runs a tracker for their distro releases, but they don't want the Pirate Bay adding their tracker to all their torrents.

Config documentation

Love the project.

I feel it would be much better and easier if you could include either in the READEME or in the github wiki a small paragraph on the each config variable for the tracker.

Explaining its use case and what it means, could save the devs lots of time trying to explain on an individual case by case to new users :)

Edit: would be also good to document the elements in the stats page

babou driver

Hope you guys don't mind me opening a tracking issue for the driver I'm writing.

I've picked up work on babou again and I've started doing major work with my event bridge.

As such: I've started writing a storage driver impl. for chihaya over on my fork: drbawb/chihaya@e3402ba

I've got two questions, if this babou primer seems tl;dr you can skip to my questions re: what's permissible in storage drivers at the end.

Basically my storage driver will:

  • Read events from the babou frontend(s) and maintain my own in-driver cache. This cache will, in turn, be read whenever chihaya requests information.
  • Defer to database reads only if the in-driver cache is cold or has a cache-miss.
  • Push events on RecordAnnounce() to any babou web-frontends on the bridge.
  • Log stats to database.

This requires some driver-specific configuration, however:

  • I will need a socket to listen on. (Unix socket path, or IP to listen + port)
  • As well as a list of babou frontends to dial periodically.
    • (Currently my bridge spawns shortlived goroutines to handle this. I have some work incoming to make sure these are guaranteed to timeout in a reasonable timeframe. Right now they just timeout eventually when net.Dial() fails.)
    • (tl;dr: Event writes on the bridge are [supposed to be] non-blocking.)
  • Right now my own format is json: {"transport":"socketAddress", "port": integerPort,"transport":"tcp" | "unix" | "lo"}
    • I need one of those objects for the listen-side of the bridge, and an array of those objects for each babou frontend.
    • Currently I have no way to spin up web-workers on demand, but in the future I may need to trap a SIGUSR1 or something to reload the relevant part of the config and add/remove peers from the bridge dynamically.

In summary, my two current questions are:

  • What are your thoughts on a long-lived socket [listener] and short-lived socket writes from within a storage driver?
  • What are your thoughts on the additional configuration params I require? Should I write my own driver-specific config, or should I patch it into your existing config?

Look forward to working with you guys!

-- drbawb

Public tracker testing

Just wanted to let you know that rarbg is now testing chihaya as a replacement for its current public tracker code running ~18mln peers.
I will post whatever we find as an issue here. If you find it useful - great , if you dont - great.
:)

Remove fmt.Fprintf()

These are slow and and and it's also cleaner to allocate a map[string]interface{} for a whole response and running bencoder.Encode() on it directly.

Elegantly handle storage failure

When there is a failure communicating to storage right now, we simply panic. Ideally, we would like to stop handling requests and attempt to reconnect.

/health endpoint

Should we include a /health endpoint that attempts to ping the backend?

More stats

If possible I would love to see a little more stats information, similar to what the opentracker by erdgeist offers.

Some ideas:

  • Top 10/100 Seeded/Leeched torrent hashes
  • udp specific stats
  • tcp specific stats

Maybe some other stats?

Batch Storage Updates

Need to figure out the most performant way to do batch data updates with Postgres, and implement it.

UDP Issue: runtime error: slice bounds out of range

Start once again trying out the UDP (develop branch) in heavy real world load.

after running the track for ~30mins it crashed with the following info below:

Also, side note. setting -v=0 didnt seem to force any sort of informational output?

root@box:~/chihaya/bin# ./chihaya -v=0 -logtostderr=true -config=config.json
I0618 12:20:44.182742    3931 http.go:125] Starting HTTP on :80
I0618 12:20:44.182941    3931 udp.go:93] Starting UDP on :80
I0618 12:50:44.182955    3931 tracker.go:99] Purging peers with no announces since 2015-06-18 11:50:44.182950058 +0200 CEST
E0618 12:55:12.616409    3931 http.go:61] [500 -    1.87ยตs] /scrape 62.149.27.7:57626 (invalid URL escape "%5")
2015/06/18 12:56:55 http: panic serving 190.234.106.108:12163: runtime error: slice bounds out of range
goroutine 8592845 [running]:
net/http.funcยท011()
        /usr/local/go/src/net/http/server.go:1130 +0xbb
github.com/chihaya/chihaya/http/query.New(0xc2235e99ee, 0xf3, 0x0, 0x0, 0x0)
        /root/chihaya/src/github.com/chihaya/chihaya/http/query/query.go:57 +0x73a
github.com/chihaya/chihaya/http.(*Server).newAnnounce(0xc20801d2a0, 0xc2276755f0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)
        /root/chihaya/src/github.com/chihaya/chihaya/http/tracker.go:22 +0x64
github.com/chihaya/chihaya/http.(*Server).serveAnnounce(0xc20801d2a0, 0x7f755e3aa6f0, 0xc21f5c59a0, 0xc2276755f0, 0x0, 0x0, 0x0, 0x4b1f09, 0x0, 0x0)
        /root/chihaya/src/github.com/chihaya/chihaya/http/routes.go:90 +0xd1
github.com/chihaya/chihaya/http.*Server.(github.com/chihaya/chihaya/http.serveAnnounce)ยทfm(0x7f755e3aa6f0, 0xc21f5c59a0, 0xc2276755f0, 0x0, 0x0, 0x0, 0xc22e6                                                                                                                                                                aa2a0, 0x0, 0x0)
        /root/chihaya/src/github.com/chihaya/chihaya/http/http.go:77 +0x7e
github.com/chihaya/chihaya/http.funcยท001(0x7f755e3aa6f0, 0xc21f5c59a0, 0xc2276755f0, 0x0, 0x0, 0x0)
        /root/chihaya/src/github.com/chihaya/chihaya/http/http.go:40 +0xc9
github.com/julienschmidt/httprouter.(*Router).ServeHTTP(0xc20803aea0, 0x7f755e3aa6f0, 0xc21f5c59a0, 0xc2276755f0)
        /root/chihaya/src/github.com/chihaya/chihaya/Godeps/_workspace/src/github.com/julienschmidt/httprouter/router.go:299 +0x18e
net/http.serverHandler.ServeHTTP(0xc2080505a0, 0x7f755e3aa6f0, 0xc21f5c59a0, 0xc2276755f0)
        /usr/local/go/src/net/http/server.go:1703 +0x19a
net/http.(*conn).serve(0xc21f5c5720)
        /usr/local/go/src/net/http/server.go:1204 +0xb57
created by net/http.(*Server).Serve
        /usr/local/go/src/net/http/server.go:1751 +0x35e
2015/06/18 12:56:59 http: panic serving 190.234.106.108:13625: runtime error: slice bounds out of range
goroutine 8605920 [running]:
net/http.funcยท011()
        /usr/local/go/src/net/http/server.go:1130 +0xbb
github.com/chihaya/chihaya/http/query.New(0xc2155cefce, 0xf3, 0x0, 0x0, 0x0)
        /root/chihaya/src/github.com/chihaya/chihaya/http/query/query.go:57 +0x73a
github.com/chihaya/chihaya/http.(*Server).newAnnounce(0xc20801d2a0, 0xc2323f5d40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)
        /root/chihaya/src/github.com/chihaya/chihaya/http/tracker.go:22 +0x64
github.com/chihaya/chihaya/http.(*Server).serveAnnounce(0xc20801d2a0, 0x7f755e3aa6f0, 0xc225915220, 0xc2323f5d40, 0x0, 0x0, 0x0, 0x4b1f09, 0x0, 0x0)
        /root/chihaya/src/github.com/chihaya/chihaya/http/routes.go:90 +0xd1
github.com/chihaya/chihaya/http.*Server.(github.com/chihaya/chihaya/http.serveAnnounce)ยทfm(0x7f755e3aa6f0, 0xc225915220, 0xc2323f5d40, 0x0, 0x0, 0x0, 0xc21b7                                                                                                                                                                0e310, 0x0, 0x0)
        /root/chihaya/src/github.com/chihaya/chihaya/http/http.go:77 +0x7e
github.com/chihaya/chihaya/http.funcยท001(0x7f755e3aa6f0, 0xc225915220, 0xc2323f5d40, 0x0, 0x0, 0x0)
        /root/chihaya/src/github.com/chihaya/chihaya/http/http.go:40 +0xc9
github.com/julienschmidt/httprouter.(*Router).ServeHTTP(0xc20803aea0, 0x7f755e3aa6f0, 0xc225915220, 0xc2323f5d40)
        /root/chihaya/src/github.com/chihaya/chihaya/Godeps/_workspace/src/github.com/julienschmidt/httprouter/router.go:299 +0x18e
net/http.serverHandler.ServeHTTP(0xc2080505a0, 0x7f755e3aa6f0, 0xc225915220, 0xc2323f5d40)
        /usr/local/go/src/net/http/server.go:1703 +0x19a
net/http.(*conn).serve(0xc225914f00)
        /usr/local/go/src/net/http/server.go:1204 +0xb57
created by net/http.(*Server).Serve
        /usr/local/go/src/net/http/server.go:1751 +0x35e
2015/06/18 12:58:12 http: panic serving 190.234.106.108:9053: runtime error: slice bounds out of range
goroutine 8835385 [running]:
net/http.funcยท011()
        /usr/local/go/src/net/http/server.go:1130 +0xbb
github.com/chihaya/chihaya/http/query.New(0xc2300d70ee, 0xf3, 0x0, 0x0, 0x0)
        /root/chihaya/src/github.com/chihaya/chihaya/http/query/query.go:57 +0x73a
github.com/chihaya/chihaya/http.(*Server).newAnnounce(0xc20801d2a0, 0xc236a4f380, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)
        /root/chihaya/src/github.com/chihaya/chihaya/http/tracker.go:22 +0x64
github.com/chihaya/chihaya/http.(*Server).serveAnnounce(0xc20801d2a0, 0x7f755e3aa6f0, 0xc2126e7ae0, 0xc236a4f380, 0x0, 0x0, 0x0, 0x4b1f09, 0x0, 0x0)
        /root/chihaya/src/github.com/chihaya/chihaya/http/routes.go:90 +0xd1
github.com/chihaya/chihaya/http.*Server.(github.com/chihaya/chihaya/http.serveAnnounce)ยทfm(0x7f755e3aa6f0, 0xc2126e7ae0, 0xc236a4f380, 0x0, 0x0, 0x0, 0xc22fa                                                                                                                                                                644d0, 0x0, 0x0)
        /root/chihaya/src/github.com/chihaya/chihaya/http/http.go:77 +0x7e
github.com/chihaya/chihaya/http.funcยท001(0x7f755e3aa6f0, 0xc2126e7ae0, 0xc236a4f380, 0x0, 0x0, 0x0)
        /root/chihaya/src/github.com/chihaya/chihaya/http/http.go:40 +0xc9
github.com/julienschmidt/httprouter.(*Router).ServeHTTP(0xc20803aea0, 0x7f755e3aa6f0, 0xc2126e7ae0, 0xc236a4f380)
        /root/chihaya/src/github.com/chihaya/chihaya/Godeps/_workspace/src/github.com/julienschmidt/httprouter/router.go:299 +0x18e
net/http.serverHandler.ServeHTTP(0xc2080505a0, 0x7f755e3aa6f0, 0xc2126e7ae0, 0xc236a4f380)
        /usr/local/go/src/net/http/server.go:1703 +0x19a
net/http.(*conn).serve(0xc2126e7a40)
        /usr/local/go/src/net/http/server.go:1204 +0xb57
created by net/http.(*Server).Serve
        /usr/local/go/src/net/http/server.go:1751 +0x35e
2015/06/18 12:58:16 http: panic serving 190.234.106.108:12269: runtime error: slice bounds out of range
goroutine 8847616 [running]:
net/http.funcยท011()
        /usr/local/go/src/net/http/server.go:1130 +0xbb
github.com/chihaya/chihaya/http/query.New(0xc219596c6e, 0xf3, 0x0, 0x0, 0x0)
        /root/chihaya/src/github.com/chihaya/chihaya/http/query/query.go:57 +0x73a
github.com/chihaya/chihaya/http.(*Server).newAnnounce(0xc20801d2a0, 0xc233b4e820, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)
        /root/chihaya/src/github.com/chihaya/chihaya/http/tracker.go:22 +0x64
github.com/chihaya/chihaya/http.(*Server).serveAnnounce(0xc20801d2a0, 0x7f755e3aa6f0, 0xc21eb25220, 0xc233b4e820, 0x0, 0x0, 0x0, 0x4b1f09, 0x0, 0x0)
        /root/chihaya/src/github.com/chihaya/chihaya/http/routes.go:90 +0xd1
github.com/chihaya/chihaya/http.*Server.(github.com/chihaya/chihaya/http.serveAnnounce)ยทfm(0x7f755e3aa6f0, 0xc21eb25220, 0xc233b4e820, 0x0, 0x0, 0x0, 0xc2259                                                                                                                                                                6c150, 0x0, 0x0)
        /root/chihaya/src/github.com/chihaya/chihaya/http/http.go:77 +0x7e
github.com/chihaya/chihaya/http.funcยท001(0x7f755e3aa6f0, 0xc21eb25220, 0xc233b4e820, 0x0, 0x0, 0x0)
        /root/chihaya/src/github.com/chihaya/chihaya/http/http.go:40 +0xc9
github.com/julienschmidt/httprouter.(*Router).ServeHTTP(0xc20803aea0, 0x7f755e3aa6f0, 0xc21eb25220, 0xc233b4e820)
        /root/chihaya/src/github.com/chihaya/chihaya/Godeps/_workspace/src/github.com/julienschmidt/httprouter/router.go:299 +0x18e
net/http.serverHandler.ServeHTTP(0xc2080505a0, 0x7f755e3aa6f0, 0xc21eb25220, 0xc233b4e820)
        /usr/local/go/src/net/http/server.go:1703 +0x19a
net/http.(*conn).serve(0xc21eb24c80)
        /usr/local/go/src/net/http/server.go:1204 +0xb57
created by net/http.(*Server).Serve
        /usr/local/go/src/net/http/server.go:1751 +0x35e
fatal error: runtime: out of memory

runtime stack:
runtime.SysMap(0xc23a2f0000, 0x100000, 0xc20808c400, 0x8ea9f8)
        /usr/local/go/src/runtime/mem_linux.c:149 +0x98
runtime.MHeap_SysAlloc(0x8f00e0, 0x100000, 0x430792)
        /usr/local/go/src/runtime/malloc.c:284 +0x124
runtime.MHeap_Alloc(0x8f00e0, 0x6, 0x10100000000, 0xc23a246800)
        /usr/local/go/src/runtime/mheap.c:240 +0x66

goroutine 9439314 [running]:
runtime.switchtoM()
        /usr/local/go/src/runtime/asm_amd64.s:198 fp=0xc2394fa6e0 sp=0xc2394fa6d8
runtime.mallocgc(0xc000, 0x718c60, 0x0, 0xc23a2e8000)
        /usr/local/go/src/runtime/malloc.go:199 +0x9f3 fp=0xc2394fa790 sp=0xc2394fa6e0
runtime.newarray(0x718c60, 0x200, 0x3000)
        /usr/local/go/src/runtime/malloc.go:365 +0xc1 fp=0xc2394fa7c8 sp=0xc2394fa790
runtime.growslice(0x662b40, 0xc23a2e8000, 0x100, 0x100, 0x1, 0x0, 0x0, 0x0)
        /usr/local/go/src/runtime/slice.go:87 +0x2bb fp=0xc2394fa828 sp=0xc2394fa7c8
github.com/chihaya/chihaya/tracker/models.AppendPeer(0xc23a2e6380, 0xc23a2e63a0, 0xc209d7d260, 0xc23a2d7380, 0x0)
        /root/chihaya/src/github.com/chihaya/chihaya/tracker/models/peermap.go:195 +0x407 fp=0xc2394fa900 sp=0xc2394fa828
github.com/chihaya/chihaya/tracker/models.(*PeerMap).AppendPeers(0xc208148aa0, 0x8e8e58, 0x0, 0x0, 0x8e8e58, 0x0, 0x0, 0xc209d7d260, 0xffffffff, 0x0, ...)
        /root/chihaya/src/github.com/chihaya/chihaya/tracker/models/peermap.go:162 +0x707 fp=0xc2394fab40 sp=0xc2394fa900
github.com/chihaya/chihaya/tracker.getPeers(0xc209d7d260, 0x8e8e58, 0x0, 0x0, 0x8e8e58, 0x0, 0x0)
        /root/chihaya/src/github.com/chihaya/chihaya/tracker/announce.go:293 +0x17e fp=0xc2394fabf0 sp=0xc2394fab40
github.com/chihaya/chihaya/tracker.newAnnounceResponse(0xc209d7d260, 0xc209d7d260)
        /root/chihaya/src/github.com/chihaya/chihaya/tracker/announce.go:276 +0x1d5 fp=0xc2394fac90 sp=0xc2394fabf0
github.com/chihaya/chihaya/tracker.(*Tracker).HandleAnnounce(0xc20801d260, 0xc209d7d260, 0x7f755e3aa900, 0xc20ab13540, 0x0, 0x0)
        /root/chihaya/src/github.com/chihaya/chihaya/tracker/announce.go:74 +0x76b fp=0xc2394fad78 sp=0xc2394fac90
github.com/chihaya/chihaya/udp.(*Server).handlePacket(0xc20803ae40, 0xc20aa66000, 0x6d, 0x800, 0xc23a2e49f0, 0x0, 0x0, 0x0, 0x7592d0, 0x8)
        /root/chihaya/src/github.com/chihaya/chihaya/udp/protocol.go:102 +0x630 fp=0xc2394faea8 sp=0xc2394fad78
github.com/chihaya/chihaya/udp.funcยท002()
        /root/chihaya/src/github.com/chihaya/chihaya/udp/udp.go:74 +0xab fp=0xc2394fafe0 sp=0xc2394faea8
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:2232 +0x1 fp=0xc2394fafe8 sp=0xc2394fafe0
created by github.com/chihaya/chihaya/udp.(*Server).serve
        /root/chihaya/src/github.com/chihaya/chihaya/udp/udp.go:85 +0x895

goroutine 1 [chan receive, 40 minutes]:
github.com/chihaya/chihaya.Boot()
        /root/chihaya/src/github.com/chihaya/chihaya/chihaya.go:118 +0x1090
main.main()
        /root/chihaya/src/github.com/chihaya/chihaya/cmd/chihaya/main.go:10 +0x1b

goroutine 5 [chan receive]:
github.com/golang/glog.(*loggingT).flushDaemon(0x8e06a0)
        /root/chihaya/src/github.com/chihaya/chihaya/Godeps/_workspace/src/github.com/golang/glog/glog.go:879 +0x78
created by github.com/golang/glog.initยท1
        /root/chihaya/src/github.com/chihaya/chihaya/Godeps/_workspace/src/github.com/golang/glog/glog.go:410 +0x2a7

goroutine 17 [syscall, 40 minutes, locked to thread]:
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:2232 +0x1

goroutine 6 [syscall, 40 minutes]:
os/signal.loop()
        /usr/local/go/src/os/signal/signal_unix.go:21 +0x1f
created by os/signal.initยท1
        /usr/local/go/src/os/signal/signal_unix.go:27 +0x35

goroutine 8 [select]:
github.com/chihaya/chihaya/stats.(*Stats).handleEvents(0xc208082160)
        /root/chihaya/src/github.com/chihaya/chihaya/stats/stats.go:168 +0x2de
created by github.com/chihaya/chihaya/stats.New
        /root/chihaya/src/github.com/chihaya/chihaya/stats/stats.go:129 +0x721

goroutine 9 [chan receive, 10 minutes]:
github.com/chihaya/chihaya/tracker.(*Tracker).purgeInactivePeers(0xc20801d260, 0xc208050200, 0x34630b8a000, 0x1a3185c5000)
        /root/chihaya/src/github.com/chihaya/chihaya/tracker/tracker.go:97 +0x8a
created by github.com/chihaya/chihaya/tracker.New
        /root/chihaya/src/github.com/chihaya/chihaya/tracker/tracker.go:54 +0x183

goroutine 10 [IO wait]:
net.(*pollDesc).Wait(0xc20800e290, 0x72, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:84 +0x47
net.(*pollDesc).WaitRead(0xc20800e290, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:89 +0x43
net.(*netFD).accept(0xc20800e230, 0x0, 0x7f755e3a8b60, 0xc20c76a700)
        /usr/local/go/src/net/fd_unix.go:419 +0x40b
net.(*TCPListener).AcceptTCP(0xc2080360c0, 0xc208057c08, 0x0, 0x0)
        /usr/local/go/src/net/tcpsock_posix.go:234 +0x4e
net.(*TCPListener).Accept(0xc2080360c0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/tcpsock_posix.go:244 +0x4c
net/http.(*Server).Serve(0xc2080505a0, 0x7f755e3a93b0, 0xc2080360c0, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:1728 +0x92
github.com/tylerb/graceful.(*Server).Serve(0xc208050540, 0x7f755e3a93b0, 0xc2080360c0, 0x0, 0x0)
        /root/chihaya/src/github.com/chihaya/chihaya/Godeps/_workspace/src/github.com/tylerb/graceful/graceful.go:197 +0x446
github.com/tylerb/graceful.(*Server).ListenAndServe(0xc208050540, 0x0, 0x0)
        /root/chihaya/src/github.com/chihaya/chihaya/Godeps/_workspace/src/github.com/tylerb/graceful/graceful.go:110 +0x211
github.com/chihaya/chihaya/http.(*Server).Serve(0xc20801d2a0, 0xc208028d03, 0x3)
        /root/chihaya/src/github.com/chihaya/chihaya/http/http.go:149 +0x612
github.com/chihaya/chihaya.funcยท002()
        /root/chihaya/src/github.com/chihaya/chihaya/chihaya.go:94 +0x79
created by github.com/chihaya/chihaya.Boot
        /root/chihaya/src/github.com/chihaya/chihaya/chihaya.go:95 +0xbac

goroutine 11 [IO wait]:
net.(*pollDesc).Wait(0xc20800e300, 0x72, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:84 +0x47
net.(*pollDesc).WaitRead(0xc20800e300, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:89 +0x43
net.(*netFD).readFrom(0xc20800e2a0, 0xc208ad9000, 0x800, 0x800, 0x0, 0x0, 0x0, 0x7f755e3a8b60, 0xc20c701800)
        /usr/local/go/src/net/fd_unix.go:269 +0x4a1
net.(*UDPConn).ReadFromUDP(0xc2080360f8, 0xc208ad9000, 0x800, 0x800, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/udpsock_posix.go:67 +0x124
github.com/chihaya/chihaya/udp.(*Server).serve(0xc20803ae40, 0xc208028d00, 0x3, 0x0, 0x0)
        /root/chihaya/src/github.com/chihaya/chihaya/udp/udp.go:61 +0x5d7
github.com/chihaya/chihaya/udp.(*Server).Serve(0xc20803ae40, 0xc208028d00, 0x3)
        /root/chihaya/src/github.com/chihaya/chihaya/udp/udp.go:102 +0x229
github.com/chihaya/chihaya.funcยท003()
        /root/chihaya/src/github.com/chihaya/chihaya/chihaya.go:105 +0x79
created by github.com/chihaya/chihaya.Boot
        /root/chihaya/src/github.com/chihaya/chihaya/chihaya.go:106 +0xe21

goroutine 12 [semacquire, 40 minutes]:
sync.(*WaitGroup).Wait(0xc20801d280)
        /usr/local/go/src/sync/waitgroup.go:132 +0x169
github.com/chihaya/chihaya.funcยท004()
        /root/chihaya/src/github.com/chihaya/chihaya/chihaya.go:113 +0x30
created by github.com/chihaya/chihaya.Boot
        /root/chihaya/src/github.com/chihaya/chihaya/chihaya.go:116 +0x1065

goroutine 13 [select]:
github.com/tylerb/graceful.(*Server).manageConnections(0xc208050540, 0xc208050600, 0xc208050660, 0xc2080506c0, 0xc208050720)
        /root/chihaya/src/github.com/chihaya/chihaya/Godeps/_workspace/src/github.com/tylerb/graceful/graceful.go:234 +0x3da
created by github.com/tylerb/graceful.(*Server).Serve
        /root/chihaya/src/github.com/chihaya/chihaya/Godeps/_workspace/src/github.com/tylerb/graceful/graceful.go:184 +0x244

goroutine 14 [chan receive, 40 minutes]:
github.com/tylerb/graceful.(*Server).handleInterrupt(0xc208050540, 0xc208050780, 0x7f755e3a93b0, 0xc2080360c0)
        /root/chihaya/src/github.com/chihaya/chihaya/Godeps/_workspace/src/github.com/tylerb/graceful/graceful.go:269 +0x3d
created by github.com/tylerb/graceful.(*Server).Serve
        /root/chihaya/src/github.com/chihaya/chihaya/Godeps/_workspace/src/github.com/tylerb/graceful/graceful.go:193 +0x416

goroutine 15 [chan receive, 40 minutes]:
github.com/chihaya/chihaya/udp.funcยท003()
        /root/chihaya/src/github.com/chihaya/chihaya/udp/udp.go:97 +0x7e
created by github.com/chihaya/chihaya/udp.(*Server).Serve
        /root/chihaya/src/github.com/chihaya/chihaya/udp/udp.go:100 +0x1fc

goroutine 9428545 [IO wait]:
net.(*pollDesc).Wait(0xc216496680, 0x72, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:84 +0x47
net.(*pollDesc).WaitRead(0xc216496680, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:89 +0x43
net.(*netFD).Read(0xc216496620, 0xc233929000, 0x1000, 0x1000, 0x0, 0x7f755e3a8b60, 0xc21079d658)
        /usr/local/go/src/net/fd_unix.go:242 +0x40f
net.(*conn).Read(0xc227fb1248, 0xc233929000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/net.go:121 +0xdc
net/http.(*liveSwitchReader).Read(0xc216498228, 0xc233929000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:214 +0xab
io.(*LimitedReader).Read(0xc20ea71240, 0xc233929000, 0x1000, 0x1000, 0x4c1b7e, 0x0, 0x0)
        /usr/local/go/src/io/io.go:408 +0xce
bufio.(*Reader).fill(0xc239f920c0)
        /usr/local/go/src/bufio/bufio.go:97 +0x1ce
bufio.(*Reader).ReadSlice(0xc239f920c0, 0xc21e593a0a, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:295 +0x257
bufio.(*Reader).ReadLine(0xc239f920c0, 0x0, 0x0, 0x0, 0xc2351cbb00, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:324 +0x62
net/textproto.(*Reader).readLineSlice(0xc2252a9140, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:55 +0x9e
net/textproto.(*Reader).ReadLine(0xc2252a9140, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:36 +0x4f
net/http.ReadRequest(0xc239f920c0, 0xc21dd884e0, 0x0, 0x0)
        /usr/local/go/src/net/http/request.go:598 +0xcb
net/http.(*conn).readRequest(0xc2164981e0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:586 +0x26f
net/http.(*conn).serve(0xc2164981e0)
        /usr/local/go/src/net/http/server.go:1162 +0x69e
created by net/http.(*Server).Serve
        /usr/local/go/src/net/http/server.go:1751 +0x35e

goroutine 9425323 [IO wait]:
net.(*pollDesc).Wait(0xc22b6c1720, 0x72, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:84 +0x47
net.(*pollDesc).WaitRead(0xc22b6c1720, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:89 +0x43
net.(*netFD).Read(0xc22b6c16c0, 0xc20bb29000, 0x1000, 0x1000, 0x0, 0x7f755e3a8b60, 0xc2119135a8)
        /usr/local/go/src/net/fd_unix.go:242 +0x40f
net.(*conn).Read(0xc2371aa038, 0xc20bb29000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/net.go:121 +0xdc
net/http.(*liveSwitchReader).Read(0xc216730408, 0xc20bb29000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:214 +0xab
io.(*LimitedReader).Read(0xc2117fa140, 0xc20bb29000, 0x1000, 0x1000, 0x4c1b7e, 0x0, 0x0)
        /usr/local/go/src/io/io.go:408 +0xce
bufio.(*Reader).fill(0xc20da70fc0)
        /usr/local/go/src/bufio/bufio.go:97 +0x1ce
bufio.(*Reader).ReadSlice(0xc20da70fc0, 0xa, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:295 +0x257
bufio.(*Reader).ReadLine(0xc20da70fc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:324 +0x62
net/textproto.(*Reader).readLineSlice(0xc21b2e2d80, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:55 +0x9e
net/textproto.(*Reader).ReadLine(0xc21b2e2d80, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:36 +0x4f
net/http.ReadRequest(0xc20da70fc0, 0xc2103d61a0, 0x0, 0x0)
        /usr/local/go/src/net/http/request.go:598 +0xcb
net/http.(*conn).readRequest(0xc2167303c0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:586 +0x26f
net/http.(*conn).serve(0xc2167303c0)
        /usr/local/go/src/net/http/server.go:1162 +0x69e
created by net/http.(*Server).Serve
        /usr/local/go/src/net/http/server.go:1751 +0x35e

goroutine 9428456 [IO wait]:
net.(*pollDesc).Wait(0xc21d6b7b10, 0x72, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:84 +0x47
net.(*pollDesc).WaitRead(0xc21d6b7b10, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:89 +0x43
net.(*netFD).Read(0xc21d6b7ab0, 0xc231c3c000, 0x1000, 0x1000, 0x0, 0x7f755e3a8b60, 0xc21081b2a0)
        /usr/local/go/src/net/fd_unix.go:242 +0x40f
net.(*conn).Read(0xc227fb0f28, 0xc231c3c000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/net.go:121 +0xdc
net/http.(*liveSwitchReader).Read(0xc235a2be48, 0xc231c3c000, 0x1000, 0x1000, 0xc237f18670, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:214 +0xab
io.(*LimitedReader).Read(0xc20ed1c0c0, 0xc231c3c000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
        /usr/local/go/src/io/io.go:408 +0xce
bufio.(*Reader).fill(0xc234ce6f00)
        /usr/local/go/src/bufio/bufio.go:97 +0x1ce
bufio.(*Reader).ReadSlice(0xc234ce6f00, 0xc210829e0a, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:295 +0x257
bufio.(*Reader).ReadLine(0xc234ce6f00, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:324 +0x62
net/textproto.(*Reader).readLineSlice(0xc216df7b30, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:55 +0x9e
net/textproto.(*Reader).ReadLine(0xc216df7b30, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:36 +0x4f
net/http.ReadRequest(0xc234ce6f00, 0xc21ee3bee0, 0x0, 0x0)
        /usr/local/go/src/net/http/request.go:598 +0xcb
net/http.(*conn).readRequest(0xc235a2be00, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:586 +0x26f
net/http.(*conn).serve(0xc235a2be00)
        /usr/local/go/src/net/http/server.go:1162 +0x69e
created by net/http.(*Server).Serve
        /usr/local/go/src/net/http/server.go:1751 +0x35e

goroutine 9428956 [IO wait]:
net.(*pollDesc).Wait(0xc2342bebc0, 0x72, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:84 +0x47
net.(*pollDesc).WaitRead(0xc2342bebc0, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:89 +0x43
net.(*netFD).Read(0xc2342beb60, 0xc21809b000, 0x1000, 0x1000, 0x0, 0x7f755e3a8b60, 0xc21064e108)
        /usr/local/go/src/net/fd_unix.go:242 +0x40f
net.(*conn).Read(0xc237c5a0d8, 0xc21809b000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/net.go:121 +0xdc
net/http.(*liveSwitchReader).Read(0xc216499588, 0xc21809b000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:214 +0xab
io.(*LimitedReader).Read(0xc20e4a76e0, 0xc21809b000, 0x1000, 0x1000, 0x4c1b7e, 0x0, 0x0)
        /usr/local/go/src/io/io.go:408 +0xce
bufio.(*Reader).fill(0xc239899da0)
        /usr/local/go/src/bufio/bufio.go:97 +0x1ce
bufio.(*Reader).ReadSlice(0xc239899da0, 0xa, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:295 +0x257
bufio.(*Reader).ReadLine(0xc239899da0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:324 +0x62
net/textproto.(*Reader).readLineSlice(0xc22ec37e60, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:55 +0x9e
net/textproto.(*Reader).ReadLine(0xc22ec37e60, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:36 +0x4f
net/http.ReadRequest(0xc239899da0, 0xc21dd89860, 0x0, 0x0)
        /usr/local/go/src/net/http/request.go:598 +0xcb
net/http.(*conn).readRequest(0xc216499540, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:586 +0x26f
net/http.(*conn).serve(0xc216499540)
        /usr/local/go/src/net/http/server.go:1162 +0x69e
created by net/http.(*Server).Serve
        /usr/local/go/src/net/http/server.go:1751 +0x35e

goroutine 9432988 [IO wait]:
net.(*pollDesc).Wait(0xc2339d4680, 0x72, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:84 +0x47
net.(*pollDesc).WaitRead(0xc2339d4680, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:89 +0x43
net.(*netFD).Read(0xc2339d4620, 0xc226d21000, 0x1000, 0x1000, 0x0, 0x7f755e3a8b60, 0xc20ed975f0)
        /usr/local/go/src/net/fd_unix.go:242 +0x40f
net.(*conn).Read(0xc239498e40, 0xc226d21000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/net.go:121 +0xdc
net/http.(*liveSwitchReader).Read(0xc230580e08, 0xc226d21000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:214 +0xab
io.(*LimitedReader).Read(0xc20b353840, 0xc226d21000, 0x1000, 0x1000, 0x4c1b7e, 0x0, 0x0)
        /usr/local/go/src/io/io.go:408 +0xce
bufio.(*Reader).fill(0xc239898c00)
        /usr/local/go/src/bufio/bufio.go:97 +0x1ce
bufio.(*Reader).ReadSlice(0xc239898c00, 0xa, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:295 +0x257
bufio.(*Reader).ReadLine(0xc239898c00, 0x0, 0x0, 0x0, 0xc216499600, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:324 +0x62
net/textproto.(*Reader).readLineSlice(0xc230d48600, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:55 +0x9e
net/textproto.(*Reader).ReadLine(0xc230d48600, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:36 +0x4f
net/http.ReadRequest(0xc239898c00, 0xc239d81450, 0x0, 0x0)
        /usr/local/go/src/net/http/request.go:598 +0xcb
net/http.(*conn).readRequest(0xc230580dc0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:586 +0x26f
net/http.(*conn).serve(0xc230580dc0)
        /usr/local/go/src/net/http/server.go:1162 +0x69e
created by net/http.(*Server).Serve
        /usr/local/go/src/net/http/server.go:1751 +0x35e

goroutine 9428033 [IO wait]:
net.(*pollDesc).Wait(0xc231e718e0, 0x72, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:84 +0x47
net.(*pollDesc).WaitRead(0xc231e718e0, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:89 +0x43
net.(*netFD).Read(0xc231e71880, 0xc21b8fe000, 0x1000, 0x1000, 0x0, 0x7f755e3a8b60, 0xc210a249a0)
        /usr/local/go/src/net/fd_unix.go:242 +0x40f
net.(*conn).Read(0xc220595ff0, 0xc21b8fe000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/net.go:121 +0xdc
net/http.(*liveSwitchReader).Read(0xc235a2afe8, 0xc21b8fe000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:214 +0xab
io.(*LimitedReader).Read(0xc20f2e42a0, 0xc21b8fe000, 0x1000, 0x1000, 0x4c1b7e, 0x0, 0x0)
        /usr/local/go/src/io/io.go:408 +0xce
bufio.(*Reader).fill(0xc2386ce420)
        /usr/local/go/src/bufio/bufio.go:97 +0x1ce
bufio.(*Reader).ReadSlice(0xc2386ce420, 0xa, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:295 +0x257
bufio.(*Reader).ReadLine(0xc2386ce420, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:324 +0x62
net/textproto.(*Reader).readLineSlice(0xc224e01fb0, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:55 +0x9e
net/textproto.(*Reader).ReadLine(0xc224e01fb0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:36 +0x4f
net/http.ReadRequest(0xc2386ce420, 0xc21ee3aea0, 0x0, 0x0)
        /usr/local/go/src/net/http/request.go:598 +0xcb
net/http.(*conn).readRequest(0xc235a2afa0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:586 +0x26f
net/http.(*conn).serve(0xc235a2afa0)
        /usr/local/go/src/net/http/server.go:1162 +0x69e
created by net/http.(*Server).Serve
        /usr/local/go/src/net/http/server.go:1751 +0x35e

goroutine 9434478 [IO wait]:
net.(*pollDesc).Wait(0xc22cf02140, 0x72, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:84 +0x47
net.(*pollDesc).WaitRead(0xc22cf02140, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:89 +0x43
net.(*netFD).Read(0xc22cf020e0, 0xc230b24000, 0x1000, 0x1000, 0x0, 0x7f755e3a8b60, 0xc20e5ef6a0)
        /usr/local/go/src/net/fd_unix.go:242 +0x40f
net.(*conn).Read(0xc21fc2e2c8, 0xc230b24000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/net.go:121 +0xdc
net/http.(*liveSwitchReader).Read(0xc2319c4c28, 0xc230b24000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:214 +0xab
io.(*LimitedReader).Read(0xc20a2c53c0, 0xc230b24000, 0x1000, 0x1000, 0x4c1b7e, 0x0, 0x0)
        /usr/local/go/src/io/io.go:408 +0xce
bufio.(*Reader).fill(0xc2345b99e0)
        /usr/local/go/src/bufio/bufio.go:97 +0x1ce
bufio.(*Reader).ReadSlice(0xc2345b99e0, 0x7f755e3aa70a, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:295 +0x257
bufio.(*Reader).ReadLine(0xc2345b99e0, 0x0, 0x0, 0x0, 0x415500, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:324 +0x62
net/textproto.(*Reader).readLineSlice(0xc21f35a090, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:55 +0x9e
net/textproto.(*Reader).ReadLine(0xc21f35a090, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:36 +0x4f
net/http.ReadRequest(0xc2345b99e0, 0xc21f3e3520, 0x0, 0x0)
        /usr/local/go/src/net/http/request.go:598 +0xcb
net/http.(*conn).readRequest(0xc2319c4be0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:586 +0x26f
net/http.(*conn).serve(0xc2319c4be0)
        /usr/local/go/src/net/http/server.go:1162 +0x69e
created by net/http.(*Server).Serve
        /usr/local/go/src/net/http/server.go:1751 +0x35e

goroutine 9428135 [IO wait]:
net.(*pollDesc).Wait(0xc2150386f0, 0x72, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:84 +0x47
net.(*pollDesc).WaitRead(0xc2150386f0, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:89 +0x43
net.(*netFD).Read(0xc215038690, 0xc22d322000, 0x1000, 0x1000, 0x0, 0x7f755e3a8b60, 0xc20fec1af0)
        /usr/local/go/src/net/fd_unix.go:242 +0x40f
net.(*conn).Read(0xc227fb0388, 0xc22d322000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/net.go:121 +0xdc
net/http.(*liveSwitchReader).Read(0xc235a2b1c8, 0xc22d322000, 0x1000, 0x1000, 0xc2089e4820, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:214 +0xab
io.(*LimitedReader).Read(0xc20efa3540, 0xc22d322000, 0x1000, 0x1000, 0xc208010000, 0x0, 0x0)
        /usr/local/go/src/io/io.go:408 +0xce
bufio.(*Reader).fill(0xc234ce6f60)
        /usr/local/go/src/bufio/bufio.go:97 +0x1ce
bufio.(*Reader).ReadSlice(0xc234ce6f60, 0xa, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:295 +0x257
bufio.(*Reader).ReadLine(0xc234ce6f60, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:324 +0x62
net/textproto.(*Reader).readLineSlice(0xc22763f500, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:55 +0x9e
net/textproto.(*Reader).ReadLine(0xc22763f500, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:36 +0x4f
net/http.ReadRequest(0xc234ce6f60, 0xc21ee3b040, 0x0, 0x0)
        /usr/local/go/src/net/http/request.go:598 +0xcb
net/http.(*conn).readRequest(0xc235a2b180, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:586 +0x26f
net/http.(*conn).serve(0xc235a2b180)
        /usr/local/go/src/net/http/server.go:1162 +0x69e
created by net/http.(*Server).Serve
        /usr/local/go/src/net/http/server.go:1751 +0x35e

goroutine 9429856 [IO wait]:
net.(*pollDesc).Wait(0xc214445870, 0x72, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:84 +0x47
net.(*pollDesc).WaitRead(0xc214445870, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:89 +0x43
net.(*netFD).Read(0xc214445810, 0xc21649c000, 0x1000, 0x1000, 0x0, 0x7f755e3a8b60, 0xc216a42e20)
        /usr/local/go/src/net/fd_unix.go:242 +0x40f
net.(*conn).Read(0xc212382060, 0xc21649c000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/net.go:121 +0xdc
net/http.(*liveSwitchReader).Read(0xc22433e2c8, 0xc21649c000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:214 +0xab
io.(*LimitedReader).Read(0xc20d7b1d20, 0xc21649c000, 0x1000, 0x1000, 0x4c1b7e, 0x0, 0x0)
        /usr/local/go/src/io/io.go:408 +0xce
bufio.(*Reader).fill(0xc21d45f020)
        /usr/local/go/src/bufio/bufio.go:97 +0x1ce
bufio.(*Reader).ReadSlice(0xc21d45f020, 0xa, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:295 +0x257
bufio.(*Reader).ReadLine(0xc21d45f020, 0x0, 0x0, 0x0, 0xc206925d00, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:324 +0x62
net/textproto.(*Reader).readLineSlice(0xc21eda2720, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:55 +0x9e
net/textproto.(*Reader).ReadLine(0xc21eda2720, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:36 +0x4f
net/http.ReadRequest(0xc21d45f020, 0xc2365b88f0, 0x0, 0x0)
        /usr/local/go/src/net/http/request.go:598 +0xcb
net/http.(*conn).readRequest(0xc22433e280, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:586 +0x26f
net/http.(*conn).serve(0xc22433e280)
        /usr/local/go/src/net/http/server.go:1162 +0x69e
created by net/http.(*Server).Serve
        /usr/local/go/src/net/http/server.go:1751 +0x35e

goroutine 9434653 [IO wait]:
net.(*pollDesc).Wait(0xc21ea51020, 0x72, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:84 +0x47
net.(*pollDesc).WaitRead(0xc21ea51020, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:89 +0x43
net.(*netFD).Read(0xc21ea50fc0, 0xc2112ba000, 0x1000, 0x1000, 0x0, 0x7f755e3a8b60, 0xc20e4a2168)
        /usr/local/go/src/net/fd_unix.go:242 +0x40f
net.(*conn).Read(0xc21fc2e8c0, 0xc2112ba000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/net.go:121 +0xdc
net/http.(*liveSwitchReader).Read(0xc2319c4fe8, 0xc2112ba000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:214 +0xab
io.(*LimitedReader).Read(0xc20a084ea0, 0xc2112ba000, 0x1000, 0x1000, 0x4c1b7e, 0x0, 0x0)
        /usr/local/go/src/io/io.go:408 +0xce
bufio.(*Reader).fill(0xc21d9a8480)
        /usr/local/go/src/bufio/bufio.go:97 +0x1ce
bufio.(*Reader).ReadSlice(0xc21d9a8480, 0xa, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:295 +0x257
bufio.(*Reader).ReadLine(0xc21d9a8480, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:324 +0x62
net/textproto.(*Reader).readLineSlice(0xc230fffbc0, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:55 +0x9e
net/textproto.(*Reader).ReadLine(0xc230fffbc0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:36 +0x4f
net/http.ReadRequest(0xc21d9a8480, 0xc21f3e3ba0, 0x0, 0x0)
        /usr/local/go/src/net/http/request.go:598 +0xcb
net/http.(*conn).readRequest(0xc2319c4fa0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:586 +0x26f
net/http.(*conn).serve(0xc2319c4fa0)
        /usr/local/go/src/net/http/server.go:1162 +0x69e
created by net/http.(*Server).Serve
        /usr/local/go/src/net/http/server.go:1751 +0x35e

goroutine 9427860 [IO wait]:
net.(*pollDesc).Wait(0xc237db27d0, 0x72, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:84 +0x47
net.(*pollDesc).WaitRead(0xc237db27d0, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:89 +0x43
net.(*netFD).Read(0xc237db2770, 0xc21b441000, 0x1000, 0x1000, 0x0, 0x7f755e3a8b60, 0xc210af6068)
        /usr/local/go/src/net/fd_unix.go:242 +0x40f
net.(*conn).Read(0xc220595a20, 0xc21b441000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/net.go:121 +0xdc
net/http.(*liveSwitchReader).Read(0xc235a2aae8, 0xc21b441000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:214 +0xab
io.(*LimitedReader).Read(0xc20f479e80, 0xc21b441000, 0x1000, 0x1000, 0x4c1b7e, 0x0, 0x0)
        /usr/local/go/src/io/io.go:408 +0xce
bufio.(*Reader).fill(0xc230976180)
        /usr/local/go/src/bufio/bufio.go:97 +0x1ce
bufio.(*Reader).ReadSlice(0xc230976180, 0xc21e592a0a, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:295 +0x257
bufio.(*Reader).ReadLine(0xc230976180, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:324 +0x62
net/textproto.(*Reader).readLineSlice(0xc22763e060, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:55 +0x9e
net/textproto.(*Reader).ReadLine(0xc22763e060, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:36 +0x4f
net/http.ReadRequest(0xc230976180, 0xc21ee3ab60, 0x0, 0x0)
        /usr/local/go/src/net/http/request.go:598 +0xcb
net/http.(*conn).readRequest(0xc235a2aaa0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:586 +0x26f
net/http.(*conn).serve(0xc235a2aaa0)
        /usr/local/go/src/net/http/server.go:1162 +0x69e
created by net/http.(*Server).Serve
        /usr/local/go/src/net/http/server.go:1751 +0x35e

goroutine 9437210 [IO wait]:
net.(*pollDesc).Wait(0xc232f6a7d0, 0x72, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:84 +0x47
net.(*pollDesc).WaitRead(0xc232f6a7d0, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:89 +0x43
net.(*netFD).Read(0xc232f6a770, 0xc2158bc000, 0x1000, 0x1000, 0x0, 0x7f755e3a8b60, 0xc20d730c90)
        /usr/local/go/src/net/fd_unix.go:242 +0x40f
net.(*conn).Read(0xc239602478, 0xc2158bc000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/net.go:121 +0xdc
net/http.(*liveSwitchReader).Read(0xc237f900e8, 0xc2158bc000, 0x1000, 0x1000, 0xc20bd6f6c0, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:214 +0xab
io.(*LimitedReader).Read(0xc2088edbe0, 0xc2158bc000, 0x1000, 0x1000, 0xc208010000, 0x0, 0x0)
        /usr/local/go/src/io/io.go:408 +0xce
bufio.(*Reader).fill(0xc22a0f5320)
        /usr/local/go/src/bufio/bufio.go:97 +0x1ce
bufio.(*Reader).ReadSlice(0xc22a0f5320, 0xc20d730b0a, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:295 +0x257
bufio.(*Reader).ReadLine(0xc22a0f5320, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:324 +0x62
net/textproto.(*Reader).readLineSlice(0xc213bcab70, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:55 +0x9e
net/textproto.(*Reader).ReadLine(0xc213bcab70, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:36 +0x4f
net/http.ReadRequest(0xc22a0f5320, 0xc2362cb110, 0x0, 0x0)
        /usr/local/go/src/net/http/request.go:598 +0xcb
net/http.(*conn).readRequest(0xc237f900a0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:586 +0x26f
net/http.(*conn).serve(0xc237f900a0)
        /usr/local/go/src/net/http/server.go:1162 +0x69e
created by net/http.(*Server).Serve
        /usr/local/go/src/net/http/server.go:1751 +0x35e

goroutine 9429834 [IO wait]:
net.(*pollDesc).Wait(0xc214444ed0, 0x72, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:84 +0x47
net.(*pollDesc).WaitRead(0xc214444ed0, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:89 +0x43
net.(*netFD).Read(0xc214444e70, 0xc22689a000, 0x1000, 0x1000, 0x0, 0x7f755e3a8b60, 0xc2197efa50)
        /usr/local/go/src/net/fd_unix.go:242 +0x40f
net.(*conn).Read(0xc237c5bfa8, 0xc22689a000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/net.go:121 +0xdc
net/http.(*liveSwitchReader).Read(0xc22433e0e8, 0xc22689a000, 0x1000, 0x1000, 0xc2117309c0, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:214 +0xab
io.(*LimitedReader).Read(0xc20d7c06c0, 0xc22689a000, 0x1000, 0x1000, 0xc208010000, 0x0, 0x0)
        /usr/local/go/src/io/io.go:408 +0xce
bufio.(*Reader).fill(0xc21d45ec00)
        /usr/local/go/src/bufio/bufio.go:97 +0x1ce
bufio.(*Reader).ReadSlice(0xc21d45ec00, 0xc2197ef90a, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:295 +0x257
bufio.(*Reader).ReadLine(0xc21d45ec00, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:324 +0x62
net/textproto.(*Reader).readLineSlice(0xc21d103080, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:55 +0x9e
net/textproto.(*Reader).ReadLine(0xc21d103080, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:36 +0x4f
net/http.ReadRequest(0xc21d45ec00, 0xc2365b84e0, 0x0, 0x0)
        /usr/local/go/src/net/http/request.go:598 +0xcb
net/http.(*conn).readRequest(0xc22433e0a0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:586 +0x26f
net/http.(*conn).serve(0xc22433e0a0)
        /usr/local/go/src/net/http/server.go:1162 +0x69e
created by net/http.(*Server).Serve
        /usr/local/go/src/net/http/server.go:1751 +0x35e

goroutine 9434471 [IO wait]:
net.(*pollDesc).Wait(0xc225fe5cd0, 0x72, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:84 +0x47
net.(*pollDesc).WaitRead(0xc225fe5cd0, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:89 +0x43
net.(*netFD).Read(0xc225fe5c70, 0xc217b30000, 0x1000, 0x1000, 0x0, 0x7f755e3a8b60, 0xc20e5ef070)
        /usr/local/go/src/net/fd_unix.go:242 +0x40f
net.(*conn).Read(0xc21fc2e290, 0xc217b30000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/net.go:121 +0xdc
net/http.(*liveSwitchReader).Read(0xc2319c4ae8, 0xc217b30000, 0x1000, 0x1000, 0xc21f3e3380, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:214 +0xab
io.(*LimitedReader).Read(0xc20a2c4020, 0xc217b30000, 0x1000, 0x1000, 0xc208010000, 0x0, 0x0)
        /usr/local/go/src/io/io.go:408 +0xce
bufio.(*Reader).fill(0xc21539a780)
        /usr/local/go/src/bufio/bufio.go:97 +0x1ce
bufio.(*Reader).ReadSlice(0xc21539a780, 0xc20e5eef0a, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:295 +0x257
bufio.(*Reader).ReadLine(0xc21539a780, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:324 +0x62
net/textproto.(*Reader).readLineSlice(0xc210286ed0, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:55 +0x9e
net/textproto.(*Reader).ReadLine(0xc210286ed0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:36 +0x4f
net/http.ReadRequest(0xc21539a780, 0xc21f3e3450, 0x0, 0x0)
        /usr/local/go/src/net/http/request.go:598 +0xcb
net/http.(*conn).readRequest(0xc2319c4aa0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:586 +0x26f
net/http.(*conn).serve(0xc2319c4aa0)
        /usr/local/go/src/net/http/server.go:1162 +0x69e
created by net/http.(*Server).Serve
        /usr/local/go/src/net/http/server.go:1751 +0x35e

goroutine 9437449 [IO wait]:
net.(*pollDesc).Wait(0xc235783a30, 0x72, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:84 +0x47
net.(*pollDesc).WaitRead(0xc235783a30, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:89 +0x43
net.(*netFD).Read(0xc2357839d0, 0xc2362ed000, 0x1000, 0x1000, 0x0, 0x7f755e3a8b60, 0xc20d620310)
        /usr/local/go/src/net/fd_unix.go:242 +0x40f
net.(*conn).Read(0xc239602d10, 0xc2362ed000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/net.go:121 +0xdc
net/http.(*liveSwitchReader).Read(0xc237f91088, 0xc2362ed000, 0x1000, 0x1000, 0xc20d620080, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:214 +0xab
io.(*LimitedReader).Read(0xc2087d8b80, 0xc2362ed000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
        /usr/local/go/src/io/io.go:408 +0xce
bufio.(*Reader).fill(0xc2362325a0)
        /usr/local/go/src/bufio/bufio.go:97 +0x1ce
bufio.(*Reader).ReadSlice(0xc2362325a0, 0x7f755e3aa70a, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:295 +0x257
bufio.(*Reader).ReadLine(0xc2362325a0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:324 +0x62
net/textproto.(*Reader).readLineSlice(0xc235102f00, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:55 +0x9e
net/textproto.(*Reader).ReadLine(0xc235102f00, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:36 +0x4f
net/http.ReadRequest(0xc2362325a0, 0xc2362cbee0, 0x0, 0x0)
        /usr/local/go/src/net/http/request.go:598 +0xcb
net/http.(*conn).readRequest(0xc237f91040, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:586 +0x26f
net/http.(*conn).serve(0xc237f91040)
        /usr/local/go/src/net/http/server.go:1162 +0x69e
created by net/http.(*Server).Serve
        /usr/local/go/src/net/http/server.go:1751 +0x35e

goroutine 9436366 [IO wait]:
net.(*pollDesc).Wait(0xc2380af4f0, 0x72, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:84 +0x47
net.(*pollDesc).WaitRead(0xc2380af4f0, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:89 +0x43
net.(*netFD).Read(0xc2380af490, 0xc238fb3000, 0x1000, 0x1000, 0x0, 0x7f755e3a8b60, 0xc20dd5feb0)
        /usr/local/go/src/net/fd_unix.go:242 +0x40f
net.(*conn).Read(0xc232e9c628, 0xc238fb3000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/net.go:121 +0xdc
net/http.(*liveSwitchReader).Read(0xc2393e94e8, 0xc238fb3000, 0x1000, 0x1000, 0xc232e9c610, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:214 +0xab
io.(*LimitedReader).Read(0xc2090ba940, 0xc238fb3000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
        /usr/local/go/src/io/io.go:408 +0xce
bufio.(*Reader).fill(0xc22fb0fe60)
        /usr/local/go/src/bufio/bufio.go:97 +0x1ce
bufio.(*Reader).ReadSlice(0xc22fb0fe60, 0xa, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:295 +0x257
bufio.(*Reader).ReadLine(0xc22fb0fe60, 0x0, 0x0, 0x0, 0xc216499600, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:324 +0x62
net/textproto.(*Reader).readLineSlice(0xc22a9f8e40, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:55 +0x9e
net/textproto.(*Reader).ReadLine(0xc22a9f8e40, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:36 +0x4f
net/http.ReadRequest(0xc22fb0fe60, 0xc22b758410, 0x0, 0x0)
        /usr/local/go/src/net/http/request.go:598 +0xcb
net/http.(*conn).readRequest(0xc2393e94a0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:586 +0x26f
net/http.(*conn).serve(0xc2393e94a0)
        /usr/local/go/src/net/http/server.go:1162 +0x69e
created by net/http.(*Server).Serve
        /usr/local/go/src/net/http/server.go:1751 +0x35e

goroutine 9430808 [IO wait]:
net.(*pollDesc).Wait(0xc234f4a3e0, 0x72, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:84 +0x47
net.(*pollDesc).WaitRead(0xc234f4a3e0, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:89 +0x43
net.(*netFD).Read(0xc234f4a380, 0xc235785000, 0x1000, 0x1000, 0x0, 0x7f755e3a8b60, 0xc2130e9af0)
        /usr/local/go/src/net/fd_unix.go:242 +0x40f
net.(*conn).Read(0xc2324c8260, 0xc235785000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/net.go:121 +0xdc
net/http.(*liveSwitchReader).Read(0xc22433f588, 0xc235785000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:214 +0xab
io.(*LimitedReader).Read(0xc20cd2ce60, 0xc235785000, 0x1000, 0x1000, 0x4c1b7e, 0x0, 0x0)
        /usr/local/go/src/io/io.go:408 +0xce
bufio.(*Reader).fill(0xc2396335c0)
        /usr/local/go/src/bufio/bufio.go:97 +0x1ce
bufio.(*Reader).ReadSlice(0xc2396335c0, 0xa, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:295 +0x257
bufio.(*Reader).ReadLine(0xc2396335c0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:324 +0x62
net/textproto.(*Reader).readLineSlice(0xc235982150, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:55 +0x9e
net/textproto.(*Reader).ReadLine(0xc235982150, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:36 +0x4f
net/http.ReadRequest(0xc2396335c0, 0xc229e988f0, 0x0, 0x0)
        /usr/local/go/src/net/http/request.go:598 +0xcb
net/http.(*conn).readRequest(0xc22433f540, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:586 +0x26f
net/http.(*conn).serve(0xc22433f540)
        /usr/local/go/src/net/http/server.go:1162 +0x69e
created by net/http.(*Server).Serve
        /usr/local/go/src/net/http/server.go:1751 +0x35e

goroutine 9433964 [IO wait]:
net.(*pollDesc).Wait(0xc21eb2ea70, 0x72, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:84 +0x47
net.(*pollDesc).WaitRead(0xc21eb2ea70, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:89 +0x43
net.(*netFD).Read(0xc21eb2ea10, 0xc22fec2000, 0x1000, 0x1000, 0x0, 0x7f755e3a8b60, 0xc20e73a210)
        /usr/local/go/src/net/fd_unix.go:242 +0x40f
net.(*conn).Read(0xc22b1510b8, 0xc22fec2000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/net.go:121 +0xdc
net/http.(*liveSwitchReader).Read(0xc238a0b3a8, 0xc22fec2000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:214 +0xab
io.(*LimitedReader).Read(0xc20a7cb2e0, 0xc22fec2000, 0x1000, 0x1000, 0x4c1b7e, 0x0, 0x0)
        /usr/local/go/src/io/io.go:408 +0xce
bufio.(*Reader).fill(0xc214e39b60)
        /usr/local/go/src/bufio/bufio.go:97 +0x1ce
bufio.(*Reader).ReadSlice(0xc214e39b60, 0xa, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:295 +0x257
bufio.(*Reader).ReadLine(0xc214e39b60, 0x0, 0x0, 0x0, 0xc217bdcb00, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:324 +0x62
net/textproto.(*Reader).readLineSlice(0xc210b373b0, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:55 +0x9e
net/textproto.(*Reader).ReadLine(0xc210b373b0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:36 +0x4f
net/http.ReadRequest(0xc214e39b60, 0xc22f159d40, 0x0, 0x0)
        /usr/local/go/src/net/http/request.go:598 +0xcb
net/http.(*conn).readRequest(0xc238a0b360, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:586 +0x26f
net/http.(*conn).serve(0xc238a0b360)
        /usr/local/go/src/net/http/server.go:1162 +0x69e
created by net/http.(*Server).Serve
        /usr/local/go/src/net/http/server.go:1751 +0x35e

goroutine 9434834 [IO wait]:
net.(*pollDesc).Wait(0xc21ff36680, 0x72, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:84 +0x47
net.(*pollDesc).WaitRead(0xc21ff36680, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:89 +0x43
net.(*netFD).Read(0xc21ff36620, 0xc22b886000, 0x1000, 0x1000, 0x0, 0x7f755e3a8b60, 0xc20e3cd3f8)
        /usr/local/go/src/net/fd_unix.go:242 +0x40f
net.(*conn).Read(0xc21fc2ef20, 0xc22b886000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/net.go:121 +0xdc
net/http.(*liveSwitchReader).Read(0xc2319c5a88, 0xc22b886000, 0x1000, 0x1000, 0xc208cb4b60, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:214 +0xab
io.(*LimitedReader).Read(0xc209f2d180, 0xc22b886000, 0x1000, 0x1000, 0xc208010000, 0x0, 0x0)
        /usr/local/go/src/io/io.go:408 +0xce
bufio.(*Reader).fill(0xc228e229c0)
        /usr/local/go/src/bufio/bufio.go:97 +0x1ce
bufio.(*Reader).ReadSlice(0xc228e229c0, 0xc20e3cd30a, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:295 +0x257
bufio.(*Reader).ReadLine(0xc228e229c0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:324 +0x62
net/textproto.(*Reader).readLineSlice(0xc20f341e90, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:55 +0x9e
net/textproto.(*Reader).ReadLine(0xc20f341e90, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:36 +0x4f
net/http.ReadRequest(0xc228e229c0, 0xc23599c820, 0x0, 0x0)
        /usr/local/go/src/net/http/request.go:598 +0xcb
net/http.(*conn).readRequest(0xc2319c5a40, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:586 +0x26f
net/http.(*conn).serve(0xc2319c5a40)
        /usr/local/go/src/net/http/server.go:1162 +0x69e
created by net/http.(*Server).Serve
        /usr/local/go/src/net/http/server.go:1751 +0x35e

goroutine 9429221 [IO wait]:
net.(*pollDesc).Wait(0xc2327907d0, 0x72, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:84 +0x47
net.(*pollDesc).WaitRead(0xc2327907d0, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:89 +0x43
net.(*netFD).Read(0xc232790770, 0xc238050000, 0x1000, 0x1000, 0x0, 0x7f755e3a8b60, 0xc2104b3cb0)
        /usr/local/go/src/net/fd_unix.go:242 +0x40f
net.(*conn).Read(0xc237c5a9f0, 0xc238050000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/net.go:121 +0xdc
net/http.(*liveSwitchReader).Read(0xc216499ee8, 0xc238050000, 0x1000, 0x1000, 0xc232790734, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:214 +0xab
io.(*LimitedReader).Read(0xc20e251860, 0xc238050000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
        /usr/local/go/src/io/io.go:408 +0xce
bufio.(*Reader).fill(0xc239a342a0)
        /usr/local/go/src/bufio/bufio.go:97 +0x1ce
bufio.(*Reader).ReadSlice(0xc239a342a0, 0xa, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:295 +0x257
bufio.(*Reader).ReadLine(0xc239a342a0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:324 +0x62
net/textproto.(*Reader).readLineSlice(0xc232f0f2c0, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:55 +0x9e
net/textproto.(*Reader).ReadLine(0xc232f0f2c0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:36 +0x4f
net/http.ReadRequest(0xc239a342a0, 0xc235532410, 0x0, 0x0)
        /usr/local/go/src/net/http/request.go:598 +0xcb
net/http.(*conn).readRequest(0xc216499ea0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:586 +0x26f
net/http.(*conn).serve(0xc216499ea0)
        /usr/local/go/src/net/http/server.go:1162 +0x69e
created by net/http.(*Server).Serve
        /usr/local/go/src/net/http/server.go:1751 +0x35e

goroutine 9439234 [runnable]:
net.(*pollDesc).Wait(0xc23a2be680, 0x72, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:84 +0x47
net.(*pollDesc).WaitRead(0xc23a2be680, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:89 +0x43
net.(*netFD).Read(0xc23a2be620, 0xc2196a7000, 0x1000, 0x1000, 0x0, 0x7f755e3a8b60, 0xc20c76a730)
        /usr/local/go/src/net/fd_unix.go:242 +0x40f
net.(*conn).Read(0xc23602cdb8, 0xc2196a7000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/net.go:121 +0xdc
net/http.(*liveSwitchReader).Read(0xc23a2ae7c8, 0xc2196a7000, 0x1000, 0x1000, 0xc20c76a4c0, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:214 +0xab
io.(*LimitedReader).Read(0xc23a2b9a00, 0xc2196a7000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
        /usr/local/go/src/io/io.go:408 +0xce
bufio.(*Reader).fill(0xc22b804960)
        /usr/local/go/src/bufio/bufio.go:97 +0x1ce
bufio.(*Reader).ReadSlice(0xc22b804960, 0x7f755e3aa70a, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:295 +0x257
bufio.(*Reader).ReadLine(0xc22b804960, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:324 +0x62
net/textproto.(*Reader).readLineSlice(0xc235d66d20, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:55 +0x9e
net/textproto.(*Reader).ReadLine(0xc235d66d20, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:36 +0x4f
net/http.ReadRequest(0xc22b804960, 0xc23a2a25b0, 0x0, 0x0)
        /usr/local/go/src/net/http/request.go:598 +0xcb
net/http.(*conn).readRequest(0xc23a2ae780, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:586 +0x26f
net/http.(*conn).serve(0xc23a2ae780)
        /usr/local/go/src/net/http/server.go:1162 +0x69e
created by net/http.(*Server).Serve
        /usr/local/go/src/net/http/server.go:1751 +0x35e

goroutine 9438994 [IO wait]:
net.(*pollDesc).Wait(0xc23a12d6b0, 0x72, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:84 +0x47
net.(*pollDesc).WaitRead(0xc23a12d6b0, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:89 +0x43
net.(*netFD).Read(0xc23a12d650, 0xc228925000, 0x1000, 0x1000, 0x0, 0x7f755e3a8b60, 0xc21680ff70)
        /usr/local/go/src/net/fd_unix.go:242 +0x40f
net.(*conn).Read(0xc23602c4e8, 0xc228925000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/net.go:121 +0xdc
net/http.(*liveSwitchReader).Read(0xc2389cf9e8, 0xc228925000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:214 +0xab
io.(*LimitedReader).Read(0xc23a1378e0, 0xc228925000, 0x1000, 0x1000, 0x4c1b7e, 0x0, 0x0)
        /usr/local/go/src/io/io.go:408 +0xce
bufio.(*Reader).fill(0xc226eb79e0)
        /usr/local/go/src/bufio/bufio.go:97 +0x1ce
bufio.(*Reader).ReadSlice(0xc226eb79e0, 0xa, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:295 +0x257
bufio.(*Reader).ReadLine(0xc226eb79e0, 0x0, 0x0, 0x0, 0xc208010000, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:324 +0x62
net/textproto.(*Reader).readLineSlice(0xc218bdd5f0, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:55 +0x9e
net/textproto.(*Reader).ReadLine(0xc218bdd5f0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:36 +0x4f
net/http.ReadRequest(0xc226eb79e0, 0xc2392e96c0, 0x0, 0x0)
        /usr/local/go/src/net/http/request.go:598 +0xcb
net/http.(*conn).readRequest(0xc2389cf9a0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:586 +0x26f
net/http.(*conn).serve(0xc2389cf9a0)
        /usr/local/go/src/net/http/server.go:1162 +0x69e
created by net/http.(*Server).Serve
        /usr/local/go/src/net/http/server.go:1751 +0x35e

goroutine 9430709 [IO wait]:
net.(*pollDesc).Wait(0xc230299870, 0x72, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:84 +0x47
net.(*pollDesc).WaitRead(0xc230299870, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:89 +0x43
net.(*netFD).Read(0xc230299810, 0xc214461000, 0x1000, 0x1000, 0x0, 0x7f755e3a8b60, 0xc20f857238)
        /usr/local/go/src/net/fd_unix.go:242 +0x40f
net.(*conn).Read(0xc212383ed8, 0xc214461000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/net.go:121 +0xdc
net/http.(*liveSwitchReader).Read(0xc22433f4e8, 0xc214461000, 0x1000, 0x1000, 0xc2088de270, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:214 +0xab
io.(*LimitedReader).Read(0xc20cfe8080, 0xc214461000, 0x1000, 0x1000, 0xc208010000, 0x0, 0x0)
        /usr/local/go/src/io/io.go:408 +0xce
bufio.(*Reader).fill(0xc21d9a9b00)
        /usr/local/go/src/bufio/bufio.go:97 +0x1ce
bufio.(*Reader).ReadSlice(0xc21d9a9b00, 0xa, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:295 +0x257
bufio.(*Reader).ReadLine(0xc21d9a9b00, 0x0, 0x0, 0x0, 0xc21abbc500, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:324 +0x62
net/textproto.(*Reader).readLineSlice(0xc21438c270, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:55 +0x9e
net/textproto.(*Reader).ReadLine(0xc21438c270, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:36 +0x4f
net/http.ReadRequest(0xc21d9a9b00, 0xc229e98820, 0x0, 0x0)
        /usr/local/go/src/net/http/request.go:598 +0xcb
net/http.(*conn).readRequest(0xc22433f4a0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:586 +0x26f
net/http.(*conn).serve(0xc22433f4a0)
        /usr/local/go/src/net/http/server.go:1162 +0x69e
created by net/http.(*Server).Serve
        /usr/local/go/src/net/http/server.go:1751 +0x35e

goroutine 9438542 [IO wait]:
net.(*pollDesc).Wait(0xc2389e20d0, 0x72, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:84 +0x47
net.(*pollDesc).WaitRead(0xc2389e20d0, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:89 +0x43
net.(*netFD).Read(0xc2389e2070, 0xc221c8e000, 0x1000, 0x1000, 0x0, 0x7f755e3a8b60, 0xc20d15a818)
        /usr/local/go/src/net/fd_unix.go:242 +0x40f
net.(*conn).Read(0xc237977498, 0xc221c8e000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/net.go:121 +0xdc
net/http.(*liveSwitchReader).Read(0xc2389ce228, 0xc221c8e000, 0x1000, 0x1000, 0xc2080f3930, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:214 +0xab
io.(*LimitedReader).Read(0xc2389cba40, 0xc221c8e000, 0x1000, 0x1000, 0xc208010000, 0x0, 0x0)
        /usr/local/go/src/io/io.go:408 +0xce
bufio.(*Reader).fill(0xc234ce7560)
        /usr/local/go/src/bufio/bufio.go:97 +0x1ce
bufio.(*Reader).ReadSlice(0xc234ce7560, 0xa, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:295 +0x257
bufio.(*Reader).ReadLine(0xc234ce7560, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:324 +0x62
net/textproto.(*Reader).readLineSlice(0xc210ab2b10, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:55 +0x9e
net/textproto.(*Reader).ReadLine(0xc210ab2b10, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:36 +0x4f
net/http.ReadRequest(0xc234ce7560, 0xc2392e8340, 0x0, 0x0)
        /usr/local/go/src/net/http/request.go:598 +0xcb
net/http.(*conn).readRequest(0xc2389ce1e0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:586 +0x26f
net/http.(*conn).serve(0xc2389ce1e0)
        /usr/local/go/src/net/http/server.go:1162 +0x69e
created by net/http.(*Server).Serve
        /usr/local/go/src/net/http/server.go:1751 +0x35e

goroutine 9431518 [IO wait]:
net.(*pollDesc).Wait(0xc223b915d0, 0x72, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:84 +0x47
net.(*pollDesc).WaitRead(0xc223b915d0, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:89 +0x43
net.(*netFD).Read(0xc223b91570, 0xc21b124000, 0x1000, 0x1000, 0x0, 0x7f755e3a8b60, 0xc20f614a98)
        /usr/local/go/src/net/fd_unix.go:242 +0x40f
net.(*conn).Read(0xc2324c9b10, 0xc21b124000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/net.go:121 +0xdc
net/http.(*liveSwitchReader).Read(0xc20fe6fa88, 0xc21b124000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:214 +0xab
io.(*LimitedReader).Read(0xc20c6344e0, 0xc21b124000, 0x1000, 0x1000, 0x4c1b7e, 0x0, 0x0)
        /usr/local/go/src/io/io.go:408 +0xce
bufio.(*Reader).fill(0xc21d1086c0)
        /usr/local/go/src/bufio/bufio.go:97 +0x1ce
bufio.(*Reader).ReadSlice(0xc21d1086c0, 0xc20f61490a, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:295 +0x257
bufio.(*Reader).ReadLine(0xc21d1086c0, 0x0, 0x0, 0x0, 0x415500, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:324 +0x62
net/textproto.(*Reader).readLineSlice(0xc225ad22d0, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:55 +0x9e
net/textproto.(*Reader).ReadLine(0xc225ad22d0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:36 +0x4f
net/http.ReadRequest(0xc21d1086c0, 0xc227179930, 0x0, 0x0)
        /usr/local/go/src/net/http/request.go:598 +0xcb
net/http.(*conn).readRequest(0xc20fe6fa40, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:586 +0x26f
net/http.(*conn).serve(0xc20fe6fa40)
        /usr/local/go/src/net/http/server.go:1162 +0x69e
created by net/http.(*Server).Serve
        /usr/local/go/src/net/http/server.go:1751 +0x35e

goroutine 9426542 [IO wait]:
net.(*pollDesc).Wait(0xc21696f9c0, 0x72, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:84 +0x47
net.(*pollDesc).WaitRead(0xc21696f9c0, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:89 +0x43
net.(*netFD).Read(0xc21696f960, 0xc22921a000, 0x1000, 0x1000, 0x0, 0x7f755e3a8b60, 0xc21b477c58)
        /usr/local/go/src/net/fd_unix.go:242 +0x40f
net.(*conn).Read(0xc217c1cb60, 0xc22921a000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/net.go:121 +0xdc
net/http.(*liveSwitchReader).Read(0xc234617808, 0xc22921a000, 0x1000, 0x1000, 0xc21696f844, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:214 +0xab
io.(*LimitedReader).Read(0xc21090b680, 0xc22921a000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
        /usr/local/go/src/io/io.go:408 +0xce
bufio.(*Reader).fill(0xc231659560)
        /usr/local/go/src/bufio/bufio.go:97 +0x1ce
bufio.(*Reader).ReadSlice(0xc231659560, 0xa, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:295 +0x257
bufio.(*Reader).ReadLine(0xc231659560, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:324 +0x62
net/textproto.(*Reader).readLineSlice(0xc21d48f290, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:55 +0x9e
net/textproto.(*Reader).ReadLine(0xc21d48f290, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:36 +0x4f
net/http.ReadRequest(0xc231659560, 0xc236902d00, 0x0, 0x0)
        /usr/local/go/src/net/http/request.go:598 +0xcb
net/http.(*conn).readRequest(0xc2346177c0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:586 +0x26f
net/http.(*conn).serve(0xc2346177c0)
        /usr/local/go/src/net/http/server.go:1162 +0x69e
created by net/http.(*Server).Serve
        /usr/local/go/src/net/http/server.go:1751 +0x35e

goroutine 9427344 [IO wait]:
net.(*pollDesc).Wait(0xc2300dd5d0, 0x72, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:84 +0x47
net.(*pollDesc).WaitRead(0xc2300dd5d0, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:89 +0x43
net.(*netFD).Read(0xc2300dd570, 0xc239914000, 0x1000, 0x1000, 0x0, 0x7f755e3a8b60, 0xc210ccf510)
        /usr/local/go/src/net/fd_unix.go:242 +0x40f
net.(*conn).Read(0xc2205947a8, 0xc239914000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/net.go:121 +0xdc
net/http.(*liveSwitchReader).Read(0xc231b736c8, 0xc239914000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:214 +0xab
io.(*LimitedReader).Read(0xc20fa6eb40, 0xc239914000, 0x1000, 0x1000, 0x4c1b7e, 0x0, 0x0)
        /usr/local/go/src/io/io.go:408 +0xce
bufio.(*Reader).fill(0xc222e58600)
        /usr/local/go/src/bufio/bufio.go:97 +0x1ce
bufio.(*Reader).ReadSlice(0xc222e58600, 0x7f755e3aa70a, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:295 +0x257
bufio.(*Reader).ReadLine(0xc222e58600, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:324 +0x62
net/textproto.(*Reader).readLineSlice(0xc218a7a3f0, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:55 +0x9e
net/textproto.(*Reader).ReadLine(0xc218a7a3f0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:36 +0x4f
net/http.ReadRequest(0xc222e58600, 0xc213c1b450, 0x0, 0x0)
        /usr/local/go/src/net/http/request.go:598 +0xcb
net/http.(*conn).readRequest(0xc231b73680, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:586 +0x26f
net/http.(*conn).serve(0xc231b73680)
        /usr/local/go/src/net/http/server.go:1162 +0x69e
created by net/http.(*Server).Serve
        /usr/local/go/src/net/http/server.go:1751 +0x35e

goroutine 9431482 [IO wait]:
net.(*pollDesc).Wait(0xc223b904c0, 0x72, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:84 +0x47
net.(*pollDesc).WaitRead(0xc223b904c0, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:89 +0x43
net.(*netFD).Read(0xc223b90460, 0xc213e6f000, 0x1000, 0x1000, 0x0, 0x7f755e3a8b60, 0xc20f64cd60)
        /usr/local/go/src/net/fd_unix.go:242 +0x40f
net.(*conn).Read(0xc2324c99d8, 0xc213e6f000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/net.go:121 +0xdc
net/http.(*liveSwitchReader).Read(0xc20fe6f948, 0xc213e6f000, 0x1000, 0x1000, 0xc2324c99d0, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:214 +0xab
io.(*LimitedReader).Read(0xc20c664a40, 0xc213e6f000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
        /usr/local/go/src/io/io.go:408 +0xce
bufio.(*Reader).fill(0xc238eb6de0)
        /usr/local/go/src/bufio/bufio.go:97 +0x1ce
bufio.(*Reader).ReadSlice(0xc238eb6de0, 0x7f755e3aa70a, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:295 +0x257
bufio.(*Reader).ReadLine(0xc238eb6de0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:324 +0x62
net/textproto.(*Reader).readLineSlice(0xc221283e00, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:55 +0x9e
net/textproto.(*Reader).ReadLine(0xc221283e00, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:36 +0x4f
net/http.ReadRequest(0xc238eb6de0, 0xc2271796c0, 0x0, 0x0)
        /usr/local/go/src/net/http/request.go:598 +0xcb
net/http.(*conn).readRequest(0xc20fe6f900, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:586 +0x26f
net/http.(*conn).serve(0xc20fe6f900)
        /usr/local/go/src/net/http/server.go:1162 +0x69e
created by net/http.(*Server).Serve
        /usr/local/go/src/net/http/server.go:1751 +0x35e

goroutine 9437656 [IO wait]:
net.(*pollDesc).Wait(0xc238851cd0, 0x72, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:84 +0x47
net.(*pollDesc).WaitRead(0xc238851cd0, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:89 +0x43
net.(*netFD).Read(0xc238851c70, 0xc22a94b000, 0x1000, 0x1000, 0x0, 0x7f755e3a8b60, 0xc20d544f60)
        /usr/local/go/src/net/fd_unix.go:242 +0x40f
net.(*conn).Read(0xc239603468, 0xc22a94b000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/net.go:121 +0xdc
net/http.(*liveSwitchReader).Read(0xc237f91da8, 0xc22a94b000, 0x1000, 0x1000, 0xc238851bc4, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:214 +0xab
io.(*LimitedReader).Read(0xc20866bf60, 0xc22a94b000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
        /usr/local/go/src/io/io.go:408 +0xce
bufio.(*Reader).fill(0xc2398988a0)
        /usr/local/go/src/bufio/bufio.go:97 +0x1ce
bufio.(*Reader).ReadSlice(0xc2398988a0, 0xa, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:295 +0x257
bufio.(*Reader).ReadLine(0xc2398988a0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:324 +0x62
net/textproto.(*Reader).readLineSlice(0xc22763f4d0, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:55 +0x9e
net/textproto.(*Reader).ReadLine(0xc22763f4d0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:36 +0x4f
net/http.ReadRequest(0xc2398988a0, 0xc22d4568f0, 0x0, 0x0)
        /usr/local/go/src/net/http/request.go:598 +0xcb
net/http.(*conn).readRequest(0xc237f91d60, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:586 +0x26f
net/http.(*conn).serve(0xc237f91d60)
        /usr/local/go/src/net/http/server.go:1162 +0x69e
created by net/http.(*Server).Serve
        /usr/local/go/src/net/http/server.go:1751 +0x35e

goroutine 9430017 [IO wait]:
net.(*pollDesc).Wait(0xc238815f70, 0x72, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:84 +0x47
net.(*pollDesc).WaitRead(0xc238815f70, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:89 +0x43
net.(*netFD).Read(0xc238815f10, 0xc20bb28000, 0x1000, 0x1000, 0x0, 0x7f755e3a8b60, 0xc20fb8e9e8)
        /usr/local/go/src/net/fd_unix.go:242 +0x40f
net.(*conn).Read(0xc212382628, 0xc20bb28000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/net.go:121 +0xdc
net/http.(*liveSwitchReader).Read(0xc22433e408, 0xc20bb28000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:214 +0xab
io.(*LimitedReader).Read(0xc20d683200, 0xc20bb28000, 0x1000, 0x1000, 0x4c1b7e, 0x0, 0x0)
        /usr/local/go/src/io/io.go:408 +0xce
bufio.(*Reader).fill(0xc22eb14060)
        /usr/local/go/src/bufio/bufio.go:97 +0x1ce
bufio.(*Reader).ReadSlice(0xc22eb14060, 0xa, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:295 +0x257
bufio.(*Reader).ReadLine(0xc22eb14060, 0x0, 0x0, 0x0, 0xc217acf000, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:324 +0x62
net/textproto.(*Reader).readLineSlice(0xc214ef3b00, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:55 +0x9e
net/textproto.(*Reader).ReadLine(0xc214ef3b00, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:36 +0x4f
net/http.ReadRequest(0xc22eb14060, 0xc2365b89c0, 0x0, 0x0)
        /usr/local/go/src/net/http/request.go:598 +0xcb
net/http.(*conn).readRequest(0xc22433e3c0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:586 +0x26f
net/http.(*conn).serve(0xc22433e3c0)
        /usr/local/go/src/net/http/server.go:1162 +0x69e
created by net/http.(*Server).Serve
        /usr/local/go/src/net/http/server.go:1751 +0x35e

goroutine 9431449 [IO wait]:
net.(*pollDesc).Wait(0xc2269eb480, 0x72, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:84 +0x47
net.(*pollDesc).WaitRead(0xc2269eb480, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:89 +0x43
net.(*netFD).Read(0xc2269eb420, 0xc210b68000, 0x1000, 0x1000, 0x0, 0x7f755e3a8b60, 0xc20f65d010)
        /usr/local/go/src/net/fd_unix.go:242 +0x40f
net.(*conn).Read(0xc2324c98b0, 0xc210b68000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/net.go:121 +0xdc
net/http.(*liveSwitchReader).Read(0xc20fe6f588, 0xc210b68000, 0x1000, 0x1000, 0xc20f65cdd0, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:214 +0xab
io.(*LimitedReader).Read(0xc20c697f40, 0xc210b68000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
        /usr/local/go/src/io/io.go:408 +0xce
bufio.(*Reader).fill(0xc22a0f5380)
        /usr/local/go/src/bufio/bufio.go:97 +0x1ce
bufio.(*Reader).ReadSlice(0xc22a0f5380, 0xa, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:295 +0x257
bufio.(*Reader).ReadLine(0xc22a0f5380, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:324 +0x62
net/textproto.(*Reader).readLineSlice(0xc2315a9440, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:55 +0x9e
net/textproto.(*Reader).ReadLine(0xc2315a9440, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:36 +0x4f
net/http.ReadRequest(0xc22a0f5380, 0xc2271791e0, 0x0, 0x0)
        /usr/local/go/src/net/http/request.go:598 +0xcb
net/http.(*conn).readRequest(0xc20fe6f540, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:586 +0x26f
net/http.(*conn).serve(0xc20fe6f540)
        /usr/local/go/src/net/http/server.go:1162 +0x69e
created by net/http.(*Server).Serve
        /usr/local/go/src/net/http/server.go:1751 +0x35e

goroutine 9433342 [IO wait]:
net.(*pollDesc).Wait(0xc233206d10, 0x72, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:84 +0x47
net.(*pollDesc).WaitRead(0xc233206d10, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:89 +0x43
net.(*netFD).Read(0xc233206cb0, 0xc209e35000, 0x1000, 0x1000, 0x0, 0x7f755e3a8b60, 0xc20e9f8548)
        /usr/local/go/src/net/fd_unix.go:242 +0x40f
net.(*conn).Read(0xc239499ab0, 0xc209e35000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/net.go:121 +0xdc
net/http.(*liveSwitchReader).Read(0xc230581f88, 0xc209e35000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:214 +0xab
io.(*LimitedReader).Read(0xc20aeb18c0, 0xc209e35000, 0x1000, 0x1000, 0x4c1b7e, 0x0, 0x0)
        /usr/local/go/src/io/io.go:408 +0xce
bufio.(*Reader).fill(0xc2134a0ea0)
        /usr/local/go/src/bufio/bufio.go:97 +0x1ce
bufio.(*Reader).ReadSlice(0xc2134a0ea0, 0xa, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:295 +0x257
bufio.(*Reader).ReadLine(0xc2134a0ea0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:324 +0x62
net/textproto.(*Reader).readLineSlice(0xc21bd0e9f0, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:55 +0x9e
net/textproto.(*Reader).ReadLine(0xc21bd0e9f0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:36 +0x4f
net/http.ReadRequest(0xc2134a0ea0, 0xc22f1585b0, 0x0, 0x0)
        /usr/local/go/src/net/http/request.go:598 +0xcb
net/http.(*conn).readRequest(0xc230581f40, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:586 +0x26f
net/http.(*conn).serve(0xc230581f40)
        /usr/local/go/src/net/http/server.go:1162 +0x69e
created by net/http.(*Server).Serve
        /usr/local/go/src/net/http/server.go:1751 +0x35e

goroutine 9430255 [IO wait]:
net.(*pollDesc).Wait(0xc239d00920, 0x72, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:84 +0x47
net.(*pollDesc).WaitRead(0xc239d00920, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:89 +0x43
net.(*netFD).Read(0xc239d008c0, 0xc2264ec000, 0x1000, 0x1000, 0x0, 0x7f755e3a8b60, 0xc20fa4d2e8)
        /usr/local/go/src/net/fd_unix.go:242 +0x40f
net.(*conn).Read(0xc212382e98, 0xc2264ec000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/net.go:121 +0xdc
net/http.(*liveSwitchReader).Read(0xc22433e908, 0xc2264ec000, 0x1000, 0x1000, 0xc208768000, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:214 +0xab
io.(*LimitedReader).Read(0xc20d4705c0, 0xc2264ec000, 0x1000, 0x1000, 0xc208010000, 0x0, 0x0)
        /usr/local/go/src/io/io.go:408 +0xce
bufio.(*Reader).fill(0xc230c83980)
        /usr/local/go/src/bufio/bufio.go:97 +0x1ce
bufio.(*Reader).ReadSlice(0xc230c83980, 0xa, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:295 +0x257
bufio.(*Reader).ReadLine(0xc230c83980, 0x0, 0x0, 0x0, 0xc2065db400, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:324 +0x62
net/textproto.(*Reader).readLineSlice(0xc22224b9e0, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:55 +0x9e
net/textproto.(*Reader).ReadLine(0xc22224b9e0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:36 +0x4f
net/http.ReadRequest(0xc230c83980, 0xc2365b92b0, 0x0, 0x0)
        /usr/local/go/src/net/http/request.go:598 +0xcb
net/http.(*conn).readRequest(0xc22433e8c0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:586 +0x26f
net/http.(*conn).serve(0xc22433e8c0)
        /usr/local/go/src/net/http/server.go:1162 +0x69e
created by net/http.(*Server).Serve
        /usr/local/go/src/net/http/server.go:1751 +0x35e

goroutine 9439193 [IO wait]:
net.(*pollDesc).Wait(0xc23a2b1170, 0x72, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:84 +0x47
net.(*pollDesc).WaitRead(0xc23a2b1170, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:89 +0x43
net.(*netFD).Read(0xc23a2b1110, 0xc228e68000, 0x1000, 0x1000, 0x0, 0x7f755e3a8b60, 0xc20c7ae790)
        /usr/local/go/src/net/fd_unix.go:242 +0x40f
net.(*conn).Read(0xc23602cc50, 0xc228e68000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/net.go:121 +0xdc
net/http.(*liveSwitchReader).Read(0xc23a2ae368, 0xc228e68000, 0x1000, 0x1000, 0xc23a2b0ff4, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:214 +0xab
io.(*LimitedReader).Read(0xc23a2b3ea0, 0xc228e68000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
        /usr/local/go/src/io/io.go:408 +0xce
bufio.(*Reader).fill(0xc21e850480)
        /usr/local/go/src/bufio/bufio.go:97 +0x1ce
bufio.(*Reader).ReadSlice(0xc21e850480, 0xa, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:295 +0x257
bufio.(*Reader).ReadLine(0xc21e850480, 0x0, 0x0, 0x0, 0xc208010000, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:324 +0x62
net/textproto.(*Reader).readLineSlice(0xc225ad2ba0, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:55 +0x9e
net/textproto.(*Reader).ReadLine(0xc225ad2ba0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:36 +0x4f
net/http.ReadRequest(0xc21e850480, 0xc23a2a2340, 0x0, 0x0)
        /usr/local/go/src/net/http/request.go:598 +0xcb
net/http.(*conn).readRequest(0xc23a2ae320, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:586 +0x26f
net/http.(*conn).serve(0xc23a2ae320)
        /usr/local/go/src/net/http/server.go:1162 +0x69e
created by net/http.(*Server).Serve
        /usr/local/go/src/net/http/server.go:1751 +0x35e

goroutine 9433464 [IO wait]:
net.(*pollDesc).Wait(0xc22b14e5a0, 0x72, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:84 +0x47
net.(*pollDesc).WaitRead(0xc22b14e5a0, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:89 +0x43
net.(*netFD).Read(0xc22b14e540, 0xc216e96000, 0x1000, 0x1000, 0x0, 0x7f755e3a8b60, 0xc20e99f700)
        /usr/local/go/src/net/fd_unix.go:242 +0x40f
net.(*conn).Read(0xc239499ee0, 0xc216e96000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/net.go:121 +0xdc
net/http.(*liveSwitchReader).Read(0xc238a0a4a8, 0xc216e96000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:214 +0xab
io.(*LimitedReader).Read(0xc20acb4f20, 0xc216e96000, 0x1000, 0x1000, 0x4c1b7e, 0x0, 0x0)
        /usr/local/go/src/io/io.go:408 +0xce
bufio.(*Reader).fill(0xc239899c20)
        /usr/local/go/src/bufio/bufio.go:97 +0x1ce
bufio.(*Reader).ReadSlice(0xc239899c20, 0xa, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:295 +0x257
bufio.(*Reader).ReadLine(0xc239899c20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:324 +0x62
net/textproto.(*Reader).readLineSlice(0xc218b956e0, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:55 +0x9e
net/textproto.(*Reader).ReadLine(0xc218b956e0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:36 +0x4f
net/http.ReadRequest(0xc239899c20, 0xc22f158d00, 0x0, 0x0)
        /usr/local/go/src/net/http/request.go:598 +0xcb
net/http.(*conn).readRequest(0xc238a0a460, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:586 +0x26f
net/http.(*conn).serve(0xc238a0a460)
        /usr/local/go/src/net/http/server.go:1162 +0x69e
created by net/http.(*Server).Serve
        /usr/local/go/src/net/http/server.go:1751 +0x35e

goroutine 9429423 [IO wait]:
net.(*pollDesc).Wait(0xc238c76610, 0x72, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:84 +0x47
net.(*pollDesc).WaitRead(0xc238c76610, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:89 +0x43
net.(*netFD).Read(0xc238c765b0, 0xc230592000, 0x1000, 0x1000, 0x0, 0x7f755e3a8b60, 0xc2100d8190)
        /usr/local/go/src/net/fd_unix.go:242 +0x40f
net.(*conn).Read(0xc237c5b110, 0xc230592000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/net.go:121 +0xdc
net/http.(*liveSwitchReader).Read(0xc22b6f6868, 0xc230592000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:214 +0xab
io.(*LimitedReader).Read(0xc20de74200, 0xc230592000, 0x1000, 0x1000, 0x4c1b7e, 0x0, 0x0)
        /usr/local/go/src/io/io.go:408 +0xce
bufio.(*Reader).fill(0xc234ce73e0)
        /usr/local/go/src/bufio/bufio.go:97 +0x1ce
bufio.(*Reader).ReadSlice(0xc234ce73e0, 0xa, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:295 +0x257
bufio.(*Reader).ReadLine(0xc234ce73e0, 0x0, 0x0, 0x0, 0xc206ac7600, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:324 +0x62
net/textproto.(*Reader).readLineSlice(0xc21d389b00, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:55 +0x9e
net/textproto.(*Reader).ReadLine(0xc21d389b00, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:36 +0x4f
net/http.ReadRequest(0xc234ce73e0, 0xc235532b60, 0x0, 0x0)
        /usr/local/go/src/net/http/request.go:598 +0xcb
net/http.(*conn).readRequest(0xc22b6f6820, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:586 +0x26f
net/http.(*conn).serve(0xc22b6f6820)
        /usr/local/go/src/net/http/server.go:1162 +0x69e
created by net/http.(*Server).Serve
        /usr/local/go/src/net/http/server.go:1751 +0x35e

goroutine 9426173 [IO wait]:
net.(*pollDesc).Wait(0xc22aaaad10, 0x72, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:84 +0x47
net.(*pollDesc).WaitRead(0xc22aaaad10, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:89 +0x43
net.(*netFD).Read(0xc22aaaacb0, 0xc219bce000, 0x1000, 0x1000, 0x0, 0x7f755e3a8b60, 0xc2114ce388)
        /usr/local/go/src/net/fd_unix.go:242 +0x40f
net.(*conn).Read(0xc2371abe60, 0xc219bce000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/net.go:121 +0xdc
net/http.(*liveSwitchReader).Read(0xc2346167c8, 0xc219bce000, 0x1000, 0x1000, 0xc2087dfd40, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:214 +0xab
io.(*LimitedReader).Read(0xc210ce3400, 0xc219bce000, 0x1000, 0x1000, 0xc208010000, 0x0, 0x0)
        /usr/local/go/src/io/io.go:408 +0xce
bufio.(*Reader).fill(0xc22a587200)
        /usr/local/go/src/bufio/bufio.go:97 +0x1ce
bufio.(*Reader).ReadSlice(0xc22a587200, 0xa, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:295 +0x257
bufio.(*Reader).ReadLine(0xc22a587200, 0x0, 0x0, 0x0, 0x350000, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:324 +0x62
net/textproto.(*Reader).readLineSlice(0xc22c6a0330, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:55 +0x9e
net/textproto.(*Reader).ReadLine(0xc22c6a0330, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:36 +0x4f
net/http.ReadRequest(0xc22a587200, 0xc20f95b6c0, 0x0, 0x0)
        /usr/local/go/src/net/http/request.go:598 +0xcb
net/http.(*conn).readRequest(0xc234616780, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:586 +0x26f
net/http.(*conn).serve(0xc234616780)
        /usr/local/go/src/net/http/server.go:1162 +0x69e
created by net/http.(*Server).Serve
        /usr/local/go/src/net/http/server.go:1751 +0x35e

goroutine 9433078 [IO wait]:
net.(*pollDesc).Wait(0xc235f50ed0, 0x72, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:84 +0x47
net.(*pollDesc).WaitRead(0xc235f50ed0, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:89 +0x43
net.(*netFD).Read(0xc235f50e70, 0xc213bda000, 0x1000, 0x1000, 0x0, 0x7f755e3a8b60, 0xc20ed40230)
        /usr/local/go/src/net/fd_unix.go:242 +0x40f
net.(*conn).Read(0xc239499170, 0xc213bda000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/net.go:121 +0xdc
net/http.(*liveSwitchReader).Read(0xc2305811c8, 0xc213bda000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:214 +0xab
io.(*LimitedReader).Read(0xc20b0c9420, 0xc213bda000, 0x1000, 0x1000, 0x4c1b7e, 0x0, 0x0)
        /usr/local/go/src/io/io.go:408 +0xce
bufio.(*Reader).fill(0xc21d45fb00)
        /usr/local/go/src/bufio/bufio.go:97 +0x1ce
bufio.(*Reader).ReadSlice(0xc21d45fb00, 0xa, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:295 +0x257
bufio.(*Reader).ReadLine(0xc21d45fb00, 0x0, 0x0, 0x0, 0xc208010000, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:324 +0x62
net/textproto.(*Reader).readLineSlice(0xc21cc32480, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:55 +0x9e
net/textproto.(*Reader).ReadLine(0xc21cc32480, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:36 +0x4f
net/http.ReadRequest(0xc21d45fb00, 0xc239d81930, 0x0, 0x0)
        /usr/local/go/src/net/http/request.go:598 +0xcb
net/http.(*conn).readRequest(0xc230581180, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:586 +0x26f
net/http.(*conn).serve(0xc230581180)
        /usr/local/go/src/net/http/server.go:1162 +0x69e
created by net/http.(*Server).Serve
        /usr/local/go/src/net/http/server.go:1751 +0x35e

goroutine 9434557 [IO wait]:
net.(*pollDesc).Wait(0xc2374ac3e0, 0x72, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:84 +0x47
net.(*pollDesc).WaitRead(0xc2374ac3e0, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:89 +0x43
net.(*netFD).Read(0xc2374ac380, 0xc20cdac000, 0x1000, 0x1000, 0x0, 0x7f755e3a8b60, 0xc20e525788)
        /usr/local/go/src/net/fd_unix.go:242 +0x40f
net.(*conn).Read(0xc21fc2e570, 0xc20cdac000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/net.go:121 +0xdc
net/http.(*liveSwitchReader).Read(0xc2319c4d68, 0xc20cdac000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:214 +0xab
io.(*LimitedReader).Read(0xc20a11c600, 0xc20cdac000, 0x1000, 0x1000, 0x4c1b7e, 0x0, 0x0)
        /usr/local/go/src/io/io.go:408 +0xce
bufio.(*Reader).fill(0xc22ec39f80)
        /usr/local/go/src/bufio/bufio.go:97 +0x1ce
bufio.(*Reader).ReadSlice(0xc22ec39f80, 0xa, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:295 +0x257
bufio.(*Reader).ReadLine(0xc22ec39f80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:324 +0x62
net/textproto.(*Reader).readLineSlice(0xc220544e40, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:55 +0x9e
net/textproto.(*Reader).ReadLine(0xc220544e40, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:36 +0x4f
net/http.ReadRequest(0xc22ec39f80, 0xc21f3e36c0, 0x0, 0x0)
        /usr/local/go/src/net/http/request.go:598 +0xcb
net/http.(*conn).readRequest(0xc2319c4d20, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:586 +0x26f
net/http.(*conn).serve(0xc2319c4d20)
        /usr/local/go/src/net/http/server.go:1162 +0x69e
created by net/http.(*Server).Serve
        /usr/local/go/src/net/http/server.go:1751 +0x35e

goroutine 9436434 [IO wait]:
net.(*pollDesc).Wait(0xc2398f52c0, 0x72, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:84 +0x47
net.(*pollDesc).WaitRead(0xc2398f52c0, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:89 +0x43
net.(*netFD).Read(0xc2398f5260, 0xc224b24000, 0x1000, 0x1000, 0x0, 0x7f755e3a8b60, 0xc21261a408)
        /usr/local/go/src/net/fd_unix.go:242 +0x40f
net.(*conn).Read(0xc232e9c8a0, 0xc224b24000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/net.go:121 +0xdc
net/http.(*liveSwitchReader).Read(0xc2393e9588, 0xc224b24000, 0x1000, 0x1000, 0xc20c413520, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:214 +0xab
io.(*LimitedReader).Read(0xc209065c20, 0xc224b24000, 0x1000, 0x1000, 0xc208010000, 0x0, 0x0)
        /usr/local/go/src/io/io.go:408 +0xce
bufio.(*Reader).fill(0xc2384e6fc0)
        /usr/local/go/src/bufio/bufio.go:97 +0x1ce
bufio.(*Reader).ReadSlice(0xc2384e6fc0, 0xa, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:295 +0x257
bufio.(*Reader).ReadLine(0xc2384e6fc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:324 +0x62
net/textproto.(*Reader).readLineSlice(0xc2162021b0, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:55 +0x9e
net/textproto.(*Reader).ReadLine(0xc2162021b0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:36 +0x4f
net/http.ReadRequest(0xc2384e6fc0, 0xc22b758680, 0x0, 0x0)
        /usr/local/go/src/net/http/request.go:598 +0xcb
net/http.(*conn).readRequest(0xc2393e9540, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:586 +0x26f
net/http.(*conn).serve(0xc2393e9540)
        /usr/local/go/src/net/http/server.go:1162 +0x69e
created by net/http.(*Server).Serve
        /usr/local/go/src/net/http/server.go:1751 +0x35e

goroutine 9432378 [IO wait]:
net.(*pollDesc).Wait(0xc2374ea610, 0x72, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:84 +0x47
net.(*pollDesc).WaitRead(0xc2374ea610, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:89 +0x43
net.(*netFD).Read(0xc2374ea5b0, 0xc219443000, 0x1000, 0x1000, 0x0, 0x7f755e3a8b60, 0xc20f2dfc68)
        /usr/local/go/src/net/fd_unix.go:242 +0x40f
net.(*conn).Read(0xc217a37918, 0xc219443000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/net.go:121 +0xdc
net/http.(*liveSwitchReader).Read(0xc225fa5808, 0xc219443000, 0x1000, 0x1000, 0xc2131cc9c0, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:214 +0xab
io.(*LimitedReader).Read(0xc20b9c5840, 0xc219443000, 0x1000, 0x1000, 0xc208010000, 0x0, 0x0)
        /usr/local/go/src/io/io.go:408 +0xce
bufio.(*Reader).fill(0xc2398986c0)
        /usr/local/go/src/bufio/bufio.go:97 +0x1ce
bufio.(*Reader).ReadSlice(0xc2398986c0, 0xa, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:295 +0x257
bufio.(*Reader).ReadLine(0xc2398986c0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:324 +0x62
net/textproto.(*Reader).readLineSlice(0xc2133be360, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:55 +0x9e
net/textproto.(*Reader).ReadLine(0xc2133be360, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:36 +0x4f
net/http.ReadRequest(0xc2398986c0, 0xc238079930, 0x0, 0x0)
        /usr/local/go/src/net/http/request.go:598 +0xcb
net/http.(*conn).readRequest(0xc225fa57c0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:586 +0x26f
net/http.(*conn).serve(0xc225fa57c0)
        /usr/local/go/src/net/http/server.go:1162 +0x69e
created by net/http.(*Server).Serve
        /usr/local/go/src/net/http/server.go:1751 +0x35e

goroutine 9425882 [IO wait]:
net.(*pollDesc).Wait(0xc232998370, 0x72, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:84 +0x47
net.(*pollDesc).WaitRead(0xc232998370, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:89 +0x43
net.(*netFD).Read(0xc232998310, 0xc226365000, 0x1000, 0x1000, 0x0, 0x7f755e3a8b60, 0xc210fbd740)
        /usr/local/go/src/net/fd_unix.go:242 +0x40f
net.(*conn).Read(0xc2371ab448, 0xc226365000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/net.go:121 +0xdc
net/http.(*liveSwitchReader).Read(0xc2167318a8, 0xc226365000, 0x1000, 0x1000, 0x40ce28, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:214 +0xab
io.(*LimitedReader).Read(0xc218651100, 0xc226365000, 0x1000, 0x1000, 0xc210fbd450, 0x0, 0x0)
        /usr/local/go/src/io/io.go:408 +0xce
bufio.(*Reader).fill(0xc218ef9d40)
        /usr/local/go/src/bufio/bufio.go:97 +0x1ce
bufio.(*Reader).ReadSlice(0xc218ef9d40, 0xa, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:295 +0x257
bufio.(*Reader).ReadLine(0xc218ef9d40, 0x0, 0x0, 0x0, 0x350000, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:324 +0x62
net/textproto.(*Reader).readLineSlice(0xc22cb711a0, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:55 +0x9e
net/textproto.(*Reader).ReadLine(0xc22cb711a0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:36 +0x4f
net/http.ReadRequest(0xc218ef9d40, 0xc20f95a4e0, 0x0, 0x0)
        /usr/local/go/src/net/http/request.go:598 +0xcb
net/http.(*conn).readRequest(0xc216731860, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:586 +0x26f
net/http.(*conn).serve(0xc216731860)
        /usr/local/go/src/net/http/server.go:1162 +0x69e
created by net/http.(*Server).Serve
        /usr/local/go/src/net/http/server.go:1751 +0x35e

goroutine 9425974 [IO wait]:
net.(*pollDesc).Wait(0xc22ffe6d80, 0x72, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:84 +0x47
net.(*pollDesc).WaitRead(0xc22ffe6d80, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:89 +0x43
net.(*netFD).Read(0xc22ffe6d20, 0xc211741000, 0x1000, 0x1000, 0x0, 0x7f755e3a8b60, 0xc21347a400)
        /usr/local/go/src/net/fd_unix.go:242 +0x40f
net.(*conn).Read(0xc2371ab7a0, 0xc211741000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/net.go:121 +0xdc
net/http.(*liveSwitchReader).Read(0xc216731d08, 0xc211741000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:214 +0xab
io.(*LimitedReader).Read(0xc210ed0ac0, 0xc211741000, 0x1000, 0x1000, 0x4c1b7e, 0x0, 0x0)
        /usr/local/go/src/io/io.go:408 +0xce
bufio.(*Reader).fill(0xc2384e7b60)
        /usr/local/go/src/bufio/bufio.go:97 +0x1ce
bufio.(*Reader).ReadSlice(0xc2384e7b60, 0xa, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:295 +0x257
bufio.(*Reader).ReadLine(0xc2384e7b60, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:324 +0x62
net/textproto.(*Reader).readLineSlice(0xc233480f60, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:55 +0x9e
net/textproto.(*Reader).ReadLine(0xc233480f60, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:36 +0x4f
net/http.ReadRequest(0xc2384e7b60, 0xc20f95ab60, 0x0, 0x0)
        /usr/local/go/src/net/http/request.go:598 +0xcb
net/http.(*conn).readRequest(0xc216731cc0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:586 +0x26f
net/http.(*conn).serve(0xc216731cc0)
        /usr/local/go/src/net/http/server.go:1162 +0x69e
created by net/http.(*Server).Serve
        /usr/local/go/src/net/http/server.go:1751 +0x35e

goroutine 9428262 [IO wait]:
net.(*pollDesc).Wait(0xc235e32370, 0x72, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:84 +0x47
net.(*pollDesc).WaitRead(0xc235e32370, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:89 +0x43
net.(*netFD).Read(0xc235e32310, 0xc20f968000, 0x1000, 0x1000, 0x0, 0x7f755e3a8b60, 0xc21097b270)
        /usr/local/go/src/net/fd_unix.go:242 +0x40f
net.(*conn).Read(0xc227fb0810, 0xc20f968000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/net.go:121 +0xdc
net/http.(*liveSwitchReader).Read(0xc235a2b6c8, 0xc20f968000, 0x1000, 0x1000, 0xc21097b000, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:214 +0xab
io.(*LimitedReader).Read(0xc20ee72cc0, 0xc20f968000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
        /usr/local/go/src/io/io.go:408 +0xce
bufio.(*Reader).fill(0xc21b2adec0)
        /usr/local/go/src/bufio/bufio.go:97 +0x1ce
bufio.(*Reader).ReadSlice(0xc21b2adec0, 0x7f755e3aa70a, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:295 +0x257
bufio.(*Reader).ReadLine(0xc21b2adec0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:324 +0x62
net/textproto.(*Reader).readLineSlice(0xc22e82f080, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:55 +0x9e
net/textproto.(*Reader).ReadLine(0xc22e82f080, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:36 +0x4f
net/http.ReadRequest(0xc21b2adec0, 0xc21ee3b520, 0x0, 0x0)
        /usr/local/go/src/net/http/request.go:598 +0xcb
net/http.(*conn).readRequest(0xc235a2b680, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:586 +0x26f
net/http.(*conn).serve(0xc235a2b680)
        /usr/local/go/src/net/http/server.go:1162 +0x69e
created by net/http.(*Server).Serve
        /usr/local/go/src/net/http/server.go:1751 +0x35e

goroutine 9427976 [IO wait]:
net.(*pollDesc).Wait(0xc236783e90, 0x72, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:84 +0x47
net.(*pollDesc).WaitRead(0xc236783e90, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:89 +0x43
net.(*netFD).Read(0xc236783e30, 0xc2082e0000, 0x1000, 0x1000, 0x0, 0x7f755e3a8b60, 0xc210a6a1f0)
        /usr/local/go/src/net/fd_unix.go:242 +0x40f
net.(*conn).Read(0xc220595df8, 0xc2082e0000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/net.go:121 +0xdc
net/http.(*liveSwitchReader).Read(0xc235a2ae08, 0xc2082e0000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:214 +0xab
io.(*LimitedReader).Read(0xc20f352ca0, 0xc2082e0000, 0x1000, 0x1000, 0x4c1b7e, 0x0, 0x0)
        /usr/local/go/src/io/io.go:408 +0xce
bufio.(*Reader).fill(0xc22eb15020)
        /usr/local/go/src/bufio/bufio.go:97 +0x1ce
bufio.(*Reader).ReadSlice(0xc22eb15020, 0xa, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:295 +0x257
bufio.(*Reader).ReadLine(0xc22eb15020, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:324 +0x62
net/textproto.(*Reader).readLineSlice(0xc2351b9140, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:55 +0x9e
net/textproto.(*Reader).ReadLine(0xc2351b9140, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:36 +0x4f
net/http.ReadRequest(0xc22eb15020, 0xc21ee3ad00, 0x0, 0x0)
        /usr/local/go/src/net/http/request.go:598 +0xcb
net/http.(*conn).readRequest(0xc235a2adc0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:586 +0x26f
net/http.(*conn).serve(0xc235a2adc0)
        /usr/local/go/src/net/http/server.go:1162 +0x69e
created by net/http.(*Server).Serve
        /usr/local/go/src/net/http/server.go:1751 +0x35e

goroutine 9431429 [IO wait]:
net.(*pollDesc).Wait(0xc2269ea760, 0x72, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:84 +0x47
net.(*pollDesc).WaitRead(0xc2269ea760, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:89 +0x43
net.(*netFD).Read(0xc2269ea700, 0xc239915000, 0x1000, 0x1000, 0x0, 0x7f755e3a8b60, 0xc20f66de40)
        /usr/local/go/src/net/fd_unix.go:242 +0x40f
net.(*conn).Read(0xc2324c9800, 0xc239915000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/net.go:121 +0xdc
net/http.(*liveSwitchReader).Read(0xc20fe6f1c8, 0xc239915000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:214 +0xab
io.(*LimitedReader).Read(0xc20c6b9740, 0xc239915000, 0x1000, 0x1000, 0x4c1b7e, 0x0, 0x0)
        /usr/local/go/src/io/io.go:408 +0xce
bufio.(*Reader).fill(0xc23923db60)
        /usr/local/go/src/bufio/bufio.go:97 +0x1ce
bufio.(*Reader).ReadSlice(0xc23923db60, 0xa, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:295 +0x257
bufio.(*Reader).ReadLine(0xc23923db60, 0x0, 0x0, 0x0, 0x415500, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:324 +0x62
net/textproto.(*Reader).readLineSlice(0xc213cc1110, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:55 +0x9e
net/textproto.(*Reader).ReadLine(0xc213cc1110, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:36 +0x4f
net/http.ReadRequest(0xc23923db60, 0xc227178f70, 0x0, 0x0)
        /usr/local/go/src/net/http/request.go:598 +0xcb
net/http.(*conn).readRequest(0xc20fe6f180, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:586 +0x26f
net/http.(*conn).serve(0xc20fe6f180)
        /usr/local/go/src/net/http/server.go:1162 +0x69e
created by net/http.(*Server).Serve
        /usr/local/go/src/net/http/server.go:1751 +0x35e

goroutine 9434745 [IO wait]:
net.(*pollDesc).Wait(0xc23597bcd0, 0x72, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:84 +0x47
net.(*pollDesc).WaitRead(0xc23597bcd0, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:89 +0x43
net.(*netFD).Read(0xc23597bc70, 0xc2398d9000, 0x1000, 0x1000, 0x0, 0x7f755e3a8b60, 0xc213796720)
        /usr/local/go/src/net/fd_unix.go:242 +0x40f
net.(*conn).Read(0xc21fc2ec18, 0xc2398d9000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/net.go:121 +0xdc
net/http.(*liveSwitchReader).Read(0xc2319c5628, 0xc2398d9000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:214 +0xab
io.(*LimitedReader).Read(0xc209faa180, 0xc2398d9000, 0x1000, 0x1000, 0x4c1b7e, 0x0, 0x0)
        /usr/local/go/src/io/io.go:408 +0xce
bufio.(*Reader).fill(0xc238eb6d80)
        /usr/local/go/src/bufio/bufio.go:97 +0x1ce
bufio.(*Reader).ReadSlice(0xc238eb6d80, 0xa, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:295 +0x257
bufio.(*Reader).ReadLine(0xc238eb6d80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:324 +0x62
net/textproto.(*Reader).readLineSlice(0xc2375b5d10, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:55 +0x9e
net/textproto.(*Reader).ReadLine(0xc2375b5d10, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:36 +0x4f
net/http.ReadRequest(0xc238eb6d80, 0xc23599c270, 0x0, 0x0)
        /usr/local/go/src/net/http/request.go:598 +0xcb
net/http.(*conn).readRequest(0xc2319c55e0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:586 +0x26f
net/http.(*conn).serve(0xc2319c55e0)
        /usr/local/go/src/net/http/server.go:1162 +0x69e
created by net/http.(*Server).Serve
        /usr/local/go/src/net/http/server.go:1751 +0x35e

goroutine 9436765 [IO wait]:
net.(*pollDesc).Wait(0xc238db6e60, 0x72, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:84 +0x47
net.(*pollDesc).WaitRead(0xc238db6e60, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:89 +0x43
net.(*netFD).Read(0xc238db6e00, 0xc220939000, 0x1000, 0x1000, 0x0, 0x7f755e3a8b60, 0xc20dc3ae18)
        /usr/local/go/src/net/fd_unix.go:242 +0x40f
net.(*conn).Read(0xc232e9d480, 0xc220939000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/net.go:121 +0xdc
net/http.(*liveSwitchReader).Read(0xc238b4a908, 0xc220939000, 0x1000, 0x1000, 0xc208135380, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:214 +0xab
io.(*LimitedReader).Read(0xc208e42b40, 0xc220939000, 0x1000, 0x1000, 0xc208010000, 0x0, 0x0)
        /usr/local/go/src/io/io.go:408 +0xce
bufio.(*Reader).fill(0xc230bb19e0)
        /usr/local/go/src/bufio/bufio.go:97 +0x1ce
bufio.(*Reader).ReadSlice(0xc230bb19e0, 0xa, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:295 +0x257
bufio.(*Reader).ReadLine(0xc230bb19e0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:324 +0x62
net/textproto.(*Reader).readLineSlice(0xc22ead7f50, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:55 +0x9e
net/textproto.(*Reader).ReadLine(0xc22ead7f50, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:36 +0x4f
net/http.ReadRequest(0xc230bb19e0, 0xc22b7596c0, 0x0, 0x0)
        /usr/local/go/src/net/http/request.go:598 +0xcb
net/http.(*conn).readRequest(0xc238b4a8c0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:586 +0x26f
net/http.(*conn).serve(0xc238b4a8c0)
        /usr/local/go/src/net/http/server.go:1162 +0x69e
created by net/http.(*Server).Serve
        /usr/local/go/src/net/http/server.go:1751 +0x35e

goroutine 9433385 [IO wait]:
net.(*pollDesc).Wait(0xc22ae2e140, 0x72, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:84 +0x47
net.(*pollDesc).WaitRead(0xc22ae2e140, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:89 +0x43
net.(*netFD).Read(0xc22ae2e0e0, 0xc226333000, 0x1000, 0x1000, 0x0, 0x7f755e3a8b60, 0xc20e9ae960)
        /usr/local/go/src/net/fd_unix.go:242 +0x40f
net.(*conn).Read(0xc239499c20, 0xc226333000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/net.go:121 +0xdc
net/http.(*liveSwitchReader).Read(0xc238a0a228, 0xc226333000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:214 +0xab
io.(*LimitedReader).Read(0xc20ae7b8a0, 0xc226333000, 0x1000, 0x1000, 0x4c1b7e, 0x0, 0x0)
        /usr/local/go/src/io/io.go:408 +0xce
bufio.(*Reader).fill(0xc2351a1980)
        /usr/local/go/src/bufio/bufio.go:97 +0x1ce
bufio.(*Reader).ReadSlice(0xc2351a1980, 0xc21e595a0a, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:295 +0x257
bufio.(*Reader).ReadLine(0xc2351a1980, 0x0, 0x0, 0x0, 0xc22f959600, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:324 +0x62
net/textproto.(*Reader).readLineSlice(0xc214f36a80, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:55 +0x9e
net/textproto.(*Reader).ReadLine(0xc214f36a80, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:36 +0x4f
net/http.ReadRequest(0xc2351a1980, 0xc22f158820, 0x0, 0x0)
        /usr/local/go/src/net/http/request.go:598 +0xcb
net/http.(*conn).readRequest(0xc238a0a1e0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:586 +0x26f
net/http.(*conn).serve(0xc238a0a1e0)
        /usr/local/go/src/net/http/server.go:1162 +0x69e
created by net/http.(*Server).Serve
        /usr/local/go/src/net/http/server.go:1751 +0x35e

goroutine 9435431 [IO wait]:
net.(*pollDesc).Wait(0xc23511bdb0, 0x72, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:84 +0x47
net.(*pollDesc).WaitRead(0xc23511bdb0, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:89 +0x43
net.(*netFD).Read(0xc23511bd50, 0xc225041000, 0x1000, 0x1000, 0x0, 0x7f755e3a8b60, 0xc20e1b5f10)
        /usr/local/go/src/net/fd_unix.go:242 +0x40f
net.(*conn).Read(0xc2377ea478, 0xc225041000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/net.go:121 +0xdc
net/http.(*liveSwitchReader).Read(0xc21ae03268, 0xc225041000, 0x1000, 0x1000, 0xc208b45790, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:214 +0xab
io.(*LimitedReader).Read(0xc209914f20, 0xc225041000, 0x1000, 0x1000, 0xc208010000, 0x0, 0x0)
        /usr/local/go/src/io/io.go:408 +0xce
bufio.(*Reader).fill(0xc22b362120)
        /usr/local/go/src/bufio/bufio.go:97 +0x1ce
bufio.(*Reader).ReadSlice(0xc22b362120, 0xc20e1b5e0a, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:295 +0x257
bufio.(*Reader).ReadLine(0xc22b362120, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:324 +0x62
net/textproto.(*Reader).readLineSlice(0xc21f3136b0, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:55 +0x9e
net/textproto.(*Reader).ReadLine(0xc21f3136b0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:36 +0x4f
net/http.ReadRequest(0xc22b362120, 0xc23599dee0, 0x0, 0x0)
        /usr/local/go/src/net/http/request.go:598 +0xcb
net/http.(*conn).readRequest(0xc21ae03220, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:586 +0x26f
net/http.(*conn).serve(0xc21ae03220)
        /usr/local/go/src/net/http/server.go:1162 +0x69e
created by net/http.(*Server).Serve
        /usr/local/go/src/net/http/server.go:1751 +0x35e

goroutine 9429224 [IO wait]:
net.(*pollDesc).Wait(0xc232790920, 0x72, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:84 +0x47
net.(*pollDesc).WaitRead(0xc232790920, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:89 +0x43
net.(*netFD).Read(0xc2327908c0, 0xc232b07000, 0x1000, 0x1000, 0x0, 0x7f755e3a8b60, 0xc2104b3e18)
        /usr/local/go/src/net/fd_unix.go:242 +0x40f
net.(*conn).Read(0xc237c5aa08, 0xc232b07000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/net.go:121 +0xdc
net/http.(*liveSwitchReader).Read(0xc216499f88, 0xc232b07000, 0x1000, 0x1000, 0x4, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:214 +0xab
io.(*LimitedReader).Read(0xc20e251b20, 0xc232b07000, 0x1000, 0x1000, 0xc232790874, 0x0, 0x0)
        /usr/local/go/src/io/io.go:408 +0xce
bufio.(*Reader).fill(0xc23801f620)
        /usr/local/go/src/bufio/bufio.go:97 +0x1ce
bufio.(*Reader).ReadSlice(0xc23801f620, 0xa, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:295 +0x257
bufio.(*Reader).ReadLine(0xc23801f620, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:324 +0x62
net/textproto.(*Reader).readLineSlice(0xc21851d590, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:55 +0x9e
net/textproto.(*Reader).ReadLine(0xc21851d590, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:36 +0x4f
net/http.ReadRequest(0xc23801f620, 0xc2355324e0, 0x0, 0x0)
        /usr/local/go/src/net/http/request.go:598 +0xcb
net/http.(*conn).readRequest(0xc216499f40, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:586 +0x26f
net/http.(*conn).serve(0xc216499f40)
        /usr/local/go/src/net/http/server.go:1162 +0x69e
created by net/http.(*Server).Serve
        /usr/local/go/src/net/http/server.go:1751 +0x35e

goroutine 9429558 [IO wait]:
net.(*pollDesc).Wait(0xc2312f8ae0, 0x72, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:84 +0x47
net.(*pollDesc).WaitRead(0xc2312f8ae0, 0x0, 0x0)
        /usr/local/go/src/net/fd_poll_runtime.go:89 +0x43
net.(*netFD).Read(0xc2312f8a80, 0xc226c90000, 0x1000, 0x1000, 0x0, 0x7f755e3a8b60, 0xc21008c780)
        /usr/local/go/src/net/fd_unix.go:242 +0x40f
net.(*conn).Read(0xc237c5b5d0, 0xc226c90000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/net.go:121 +0xdc
net/http.(*liveSwitchReader).Read(0xc22b6f71c8, 0xc226c90000, 0x1000, 0x1000, 0xc21008c500, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:214 +0xab
io.(*LimitedReader).Read(0xc20dd7ccc0, 0xc226c90000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
        /usr/local/go/src/io/io.go:408 +0xce
bufio.(*Reader).fill(0xc238eb7560)
        /usr/local/go/src/bufio/bufio.go:97 +0x1ce
bufio.(*Reader).ReadSlice(0xc238eb7560, 0x7f755e3aa70a, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:295 +0x257
bufio.(*Reader).ReadLine(0xc238eb7560, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/bufio/bufio.go:324 +0x62
net/textproto.(*Reader).readLineSlice(0xc2152d0e40, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:55 +0x9e
net/textproto.(*Reader).ReadLine(0xc2152d0e40, 0x0, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/textproto/reader.go:36 +0x4f
net/http.ReadRequest(0xc238eb7560, 0xc235533520, 0x0, 0x0)
        /usr/local/go/src/net/http/request.go:598 +0xcb
net/http.(*conn).readRequest(0xc22b6f7180, 0x0, 0x0, 0x0)
        /usr/local/go/src/net/http/server.go:586 +0x26f
net/http.(*conn).serve(0xc22b6f7180)
        /usr/local/go/src/net/http/server.go:1162 +0x69e
created by net/http.(*Server).Serve
        /usr/local/go/src/net/http/server.go:1751 +0x35e

Lint ALL the things

There should be no file that doesn't fully pass golint.

This mostly just means adding lots of doc comments.
Once this is done, we should be able to add a line to our .travis.yml that enforces this for all future PRs.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.