@cryptotaxi247 / kubo / commits / 450f21a54

fix(gcr/s) de-duplicate routing records

Brian Tiger Chow committed Feb 2, 2015 at 02:44 UTC 450f21a545fdb5ac3cfcc570cc644502cf4d9491
1 file changed +13 -4
routing/grandcentral/server.go
+13 -4
@@ -131,16 +131,25 @@ func putRoutingRecord(ds datastore.Datastore, k util.Key, value *dhtpb.Record) e
131 return nil
132 }
133
134 -func putRoutingProviders(ds datastore.Datastore, k util.Key, providers []*dhtpb.Message_Peer) error {
134 +func putRoutingProviders(ds datastore.Datastore, k util.Key, newRecords []*dhtpb.Message_Peer) error {
135 log.Event(context.Background(), "putRoutingProviders", &k)
136 pkey := datastore.KeyWithNamespaces([]string{"routing", "providers", k.String()})
137 - old, err := getRoutingProviders(ds, k)
137 + oldRecords, err := getRoutingProviders(ds, k)
138 if err != nil {
139 return err
140 }
141 - providers = append(providers, old...)
141 + mergedRecords := make(map[string]*dhtpb.Message_Peer)
142 + for _, provider := range oldRecords {
143 + mergedRecords[provider.GetId()] = provider // add original records
144 + }
145 + for _, provider := range newRecords {
146 + mergedRecords[provider.GetId()] = provider // overwrite old record if new exists
147 + }
148 var protomsg dhtpb.Message
143 - protomsg.ProviderPeers = providers
149 + protomsg.ProviderPeers = make([]*dhtpb.Message_Peer, 0, len(mergedRecords))
150 + for _, provider := range mergedRecords {
151 + protomsg.ProviderPeers = append(protomsg.ProviderPeers, provider)
152 + }
153 data, err := proto.Marshal(&protomsg)
154 if err != nil {
155 return err