Merge branch 'develop'

This commit is contained in:
Jimmy Zelinskie 2015-02-08 17:19:53 -05:00
commit 8c25e1ade3
6 changed files with 31 additions and 16 deletions

View file

@ -20,7 +20,7 @@ changes in.
The average contribution flow is as follows:
- Create a topic branch from where you want to base your work. This is usually master.
- Create a topic branch from where you want to base your work. This is usually `develop`.
- Make commits of logical units.
- Make sure your commit messages are in the [proper format]
- Push your changes to a topic branch in your fork of the repository.

View file

@ -4,7 +4,7 @@
// Package netutil provides network utility functions, complementing the more
// common ones in the net package.
package netutil // import "golang.org/x/net/netutil"
package netutil
import (
"net"

View file

@ -53,6 +53,10 @@ type Conn interface {
// down the driver
Close() error
// Ping just checks to see if the database is still alive. This is typically
// used for health checks.
Ping() error
// RecordAnnounce is called once per announce, and is passed the delta in
// statistics for the client peer since its last announce.
RecordAnnounce(delta *models.AnnounceDelta) error

View file

@ -14,6 +14,8 @@ import (
type driver struct{}
// NoOp is a backend driver for Chihaya that does nothing. This is used by
// public trackers.
type NoOp struct{}
// New returns a new Chihaya backend driver that does nothing.
@ -26,6 +28,11 @@ func (n *NoOp) Close() error {
return nil
}
// Ping returns nil.
func (n *NoOp) Ping() error {
return nil
}
// RecordAnnounce returns nil.
func (n *NoOp) RecordAnnounce(delta *models.AnnounceDelta) error {
return nil

View file

@ -33,6 +33,10 @@ func handleError(err error) (int, error) {
}
func (s *Server) check(w http.ResponseWriter, r *http.Request, p httprouter.Params) (int, error) {
// Ping the backend if private tracker is enabled.
if err := s.tracker.Backend.Ping(); s.config.PrivateEnabled && err != nil {
return handleError(err)
}
_, err := w.Write([]byte("STILL-ALIVE"))
return handleError(err)
}

View file

@ -48,14 +48,14 @@ func (s *Storage) Len() int {
return int(atomic.LoadInt32(&s.size))
}
func (s *Storage) GetShardIndex(infohash string) uint32 {
func (s *Storage) getShardIndex(infohash string) uint32 {
idx := fnv.New32()
idx.Write([]byte(infohash))
return idx.Sum32() % uint32(len(s.shards))
}
func (s *Storage) GetTorrentShard(infohash string, readonly bool) *Torrents {
shardindex := s.GetShardIndex(infohash)
func (s *Storage) getTorrentShard(infohash string, readonly bool) *Torrents {
shardindex := s.getShardIndex(infohash)
if readonly {
s.shards[shardindex].RLock()
} else {
@ -65,7 +65,7 @@ func (s *Storage) GetTorrentShard(infohash string, readonly bool) *Torrents {
}
func (s *Storage) TouchTorrent(infohash string) error {
shard := s.GetTorrentShard(infohash, false)
shard := s.getTorrentShard(infohash, false)
defer shard.Unlock()
torrent, exists := shard.torrents[infohash]
@ -79,7 +79,7 @@ func (s *Storage) TouchTorrent(infohash string) error {
}
func (s *Storage) FindTorrent(infohash string) (*models.Torrent, error) {
shard := s.GetTorrentShard(infohash, true)
shard := s.getTorrentShard(infohash, true)
defer shard.RUnlock()
torrent, exists := shard.torrents[infohash]
@ -91,7 +91,7 @@ func (s *Storage) FindTorrent(infohash string) (*models.Torrent, error) {
}
func (s *Storage) PutTorrent(torrent *models.Torrent) {
shard := s.GetTorrentShard(torrent.Infohash, false)
shard := s.getTorrentShard(torrent.Infohash, false)
defer shard.Unlock()
_, exists := shard.torrents[torrent.Infohash]
@ -102,7 +102,7 @@ func (s *Storage) PutTorrent(torrent *models.Torrent) {
}
func (s *Storage) DeleteTorrent(infohash string) {
shard := s.GetTorrentShard(infohash, false)
shard := s.getTorrentShard(infohash, false)
defer shard.Unlock()
if _, exists := shard.torrents[infohash]; exists {
@ -112,7 +112,7 @@ func (s *Storage) DeleteTorrent(infohash string) {
}
func (s *Storage) IncrementTorrentSnatches(infohash string) error {
shard := s.GetTorrentShard(infohash, false)
shard := s.getTorrentShard(infohash, false)
defer shard.Unlock()
torrent, exists := shard.torrents[infohash]
@ -126,7 +126,7 @@ func (s *Storage) IncrementTorrentSnatches(infohash string) error {
}
func (s *Storage) PutLeecher(infohash string, p *models.Peer) error {
shard := s.GetTorrentShard(infohash, false)
shard := s.getTorrentShard(infohash, false)
defer shard.Unlock()
torrent, exists := shard.torrents[infohash]
@ -140,7 +140,7 @@ func (s *Storage) PutLeecher(infohash string, p *models.Peer) error {
}
func (s *Storage) DeleteLeecher(infohash string, p *models.Peer) error {
shard := s.GetTorrentShard(infohash, false)
shard := s.getTorrentShard(infohash, false)
defer shard.Unlock()
torrent, exists := shard.torrents[infohash]
@ -154,7 +154,7 @@ func (s *Storage) DeleteLeecher(infohash string, p *models.Peer) error {
}
func (s *Storage) PutSeeder(infohash string, p *models.Peer) error {
shard := s.GetTorrentShard(infohash, false)
shard := s.getTorrentShard(infohash, false)
defer shard.Unlock()
torrent, exists := shard.torrents[infohash]
@ -168,7 +168,7 @@ func (s *Storage) PutSeeder(infohash string, p *models.Peer) error {
}
func (s *Storage) DeleteSeeder(infohash string, p *models.Peer) error {
shard := s.GetTorrentShard(infohash, false)
shard := s.getTorrentShard(infohash, false)
defer shard.Unlock()
torrent, exists := shard.torrents[infohash]
@ -182,7 +182,7 @@ func (s *Storage) DeleteSeeder(infohash string, p *models.Peer) error {
}
func (s *Storage) PurgeInactiveTorrent(infohash string) error {
shard := s.GetTorrentShard(infohash, false)
shard := s.getTorrentShard(infohash, false)
defer shard.Unlock()
torrent, exists := shard.torrents[infohash]
@ -223,7 +223,7 @@ func (s *Storage) PurgeInactivePeers(purgeEmptyTorrents bool, before time.Time)
// Process the keys while allowing other goroutines to run.
for _, infohash := range keys {
runtime.Gosched()
shard := s.GetTorrentShard(infohash, false)
shard := s.getTorrentShard(infohash, false)
torrent := shard.torrents[infohash]
if torrent == nil {