@@ -16,7 +16,7 @@ type CacheRepository interface {
1616type HTTPClient interface {
1717 Set (node , key , value string ) (models.CacheItem , error )
1818 Get (node string , keys []string ) ([]models.CacheItem , error )
19- Gossip (node string , nodes [] string , tokensChecksum string ) (oldNodes [] string , err error )
19+ Gossip (node string , newNodes models. NodesMap , tokensChecksum string ) (oldNodes models. NodesMap , err error )
2020 Tokens (node string ) (models.TokenMappings , error )
2121}
2222
@@ -55,7 +55,7 @@ func (svc CacheSvc) Get(keys []string) []models.CacheItem {
5555
5656 cacheItems := make ([]models.CacheItem , 0 )
5757 for node , sums := range nodeToSums {
58- if node == svc .tokens .Nodes .CurrentNode {
58+ if node == svc .tokens .Nodes .Current () {
5959 items := svc .cacheRepo .Get (sums )
6060 for _ , item := range items {
6161 item .Node = node
@@ -81,7 +81,7 @@ func (svc CacheSvc) Get(keys []string) []models.CacheItem {
8181
8282func (svc CacheSvc ) Set (key , value string ) (models.CacheItem , error ) {
8383 node := svc .tokens .GetNode (key )
84- if node == svc .tokens .Nodes .CurrentNode {
84+ if node == svc .tokens .Nodes .Current () {
8585 item := svc .cacheRepo .Set (key , value )
8686 item .Node = node
8787 return item , nil
@@ -91,33 +91,37 @@ func (svc CacheSvc) Set(key, value string) (models.CacheItem, error) {
9191}
9292
9393func (svc CacheSvc ) Gossip () {
94- nodes := svc .tokens .Nodes .List (2 )
95- log .Println ("gossiping to:" , strings .Join (nodes , "," ))
94+ nodes := svc .tokens .Nodes .ListActive (2 )
95+ if len (nodes ) == 0 {
96+ return
97+ }
9698
97- allNodes := append ([]string {}, svc .tokens .Nodes .List (len (svc .tokens .Nodes .Map ))... )
98- allNodes = append (allNodes , svc .tokens .Nodes .CurrentNode )
99+ log .Println ("gossiping to:" , strings .Join (nodes , "," ))
99100 for _ , node := range nodes {
100- oldNodes , err := svc .httpClient .Gossip (node , allNodes , svc .tokens .Checksum ())
101+ oldNodes , err := svc .httpClient .Gossip (node , svc . tokens . Nodes . Map () , svc .tokens .Checksum ())
101102 if err != nil {
102103 log .Printf ("could not make http call for gossip: %v" , err )
104+ svc .tokens .Nodes .Fail (node )
103105 continue
104106 }
105107
106- svc .tokens .Nodes .Add (oldNodes ... )
108+ svc .tokens .Nodes .Set (oldNodes )
107109 }
108110}
109111
110- func (svc CacheSvc ) UpdateTokens (node string , newNodes []string , tokensChecksum string ) ([]string , error ) {
111- oldNodes := svc .tokens .Nodes .List (len (svc .tokens .Nodes .Map ))
112+ func (svc CacheSvc ) UpdateTokens (node string , newNodes models.NodesMap , tokensChecksum string ) (models.NodesMap , error ) {
113+ svc .tokens .Nodes .Gossip (node )
114+ svc .tokens .Nodes .Set (newNodes )
115+
112116 if svc .tokens .Checksum () != tokensChecksum {
113- svc .tokens .Nodes .Add (newNodes ... )
114117 tokens , err := svc .httpClient .Tokens (node )
115118 if err != nil {
116- return [] string {}, err
119+ return models. NodesMap {}, err
117120 }
118121 svc .tokens .Merge (tokens )
119122 }
120- return oldNodes , nil
123+
124+ return svc .tokens .Nodes .Map (), nil
121125}
122126
123127func (svc CacheSvc ) GetTokens () map [int ]string {
0 commit comments