Merge pull request #165 from mrd0ll4r/add-peer

middleware: added peer store updates middleware (swarm)
This commit is contained in:
Jimmy Zelinskie
2016-05-17 03:31:13 -04:00
15 changed files with 197 additions and 33 deletions
+18 -9
View File
@@ -57,14 +57,14 @@ func key(ip net.IP) [16]byte {
}
func (s *ipStore) AddNetwork(network string) error {
s.Lock()
defer s.Unlock()
key, length, err := netmatch.ParseNetwork(network)
if err != nil {
return err
}
s.Lock()
defer s.Unlock()
return s.networks.Add(key, length)
}
@@ -78,9 +78,9 @@ func (s *ipStore) AddIP(ip net.IP) error {
}
func (s *ipStore) HasIP(ip net.IP) (bool, error) {
key := key(ip)
s.RLock()
defer s.RUnlock()
key := key(ip)
_, ok := s.ips[key]
if ok {
@@ -138,22 +138,31 @@ func (s *ipStore) HasAllIPs(ips []net.IP) (bool, error) {
}
func (s *ipStore) RemoveIP(ip net.IP) error {
key := key(ip)
s.Lock()
defer s.Unlock()
delete(s.ips, key(ip))
if _, ok := s.ips[key]; !ok {
return store.ErrResourceDoesNotExist
}
delete(s.ips, key)
return nil
}
func (s *ipStore) RemoveNetwork(network string) error {
s.Lock()
defer s.Unlock()
key, length, err := netmatch.ParseNetwork(network)
if err != nil {
return err
}
return s.networks.Remove(key, length)
s.Lock()
defer s.Unlock()
err = s.networks.Remove(key, length)
if err != nil && err == netmatch.ErrNotContained {
return store.ErrResourceDoesNotExist
}
return err
}
+2 -1
View File
@@ -9,6 +9,7 @@ import (
"testing"
"github.com/chihaya/chihaya/server/store"
"github.com/stretchr/testify/assert"
)
@@ -64,7 +65,7 @@ func TestIPStore(t *testing.T) {
// check removes
err = s.RemoveIP(v6)
assert.Nil(t, err)
assert.NotNil(t, err)
err = s.RemoveIP(v4s)
assert.Nil(t, err)
+16 -4
View File
@@ -119,10 +119,16 @@ func (s *peerStore) DeleteSeeder(infoHash chihaya.InfoHash, p chihaya.Peer) erro
defer shard.Unlock()
if shard.peers[key] == nil {
return nil
return store.ErrResourceDoesNotExist
}
delete(shard.peers[key], peerKey(p))
pk := peerKey(p)
if _, ok := shard.peers[key][pk]; !ok {
return store.ErrResourceDoesNotExist
}
delete(shard.peers[key], pk)
if len(shard.peers[key]) == 0 {
delete(shard.peers, key)
@@ -156,10 +162,16 @@ func (s *peerStore) DeleteLeecher(infoHash chihaya.InfoHash, p chihaya.Peer) err
defer shard.Unlock()
if shard.peers[key] == nil {
return nil
return store.ErrResourceDoesNotExist
}
delete(shard.peers[key], peerKey(p))
pk := peerKey(p)
if _, ok := shard.peers[key][pk]; !ok {
return store.ErrResourceDoesNotExist
}
delete(shard.peers[key], pk)
if len(shard.peers[key]) == 0 {
delete(shard.peers, key)
+4
View File
@@ -51,6 +51,10 @@ func (ss *stringStore) RemoveString(s string) error {
ss.Lock()
defer ss.Unlock()
if _, ok := ss.strings[s]; !ok {
return store.ErrResourceDoesNotExist
}
delete(ss.strings, s)
return nil
+5 -3
View File
@@ -5,9 +5,11 @@
package memory
import (
"github.com/chihaya/chihaya/server/store"
"github.com/stretchr/testify/assert"
"testing"
"github.com/stretchr/testify/assert"
"github.com/chihaya/chihaya/server/store"
)
var (
@@ -30,7 +32,7 @@ func TestStringStore(t *testing.T) {
assert.False(t, has)
err = ss.RemoveString(s1)
assert.Nil(t, err)
assert.NotNil(t, err)
err = ss.PutString(s1)
assert.Nil(t, err)