[Revert] Only update services if tags are different

This patch did give some better results, but break watches on
the services of a node.

It is possible to apply the same optimization for nodes than
to services (one index per instance), but it would complicate
further the patch.

Let's do it in another PR.
This commit is contained in:
Pierre Souchay 2018-02-20 23:34:38 +01:00
parent 903e866835
commit b26ea3c230

View file

@ -2,7 +2,6 @@ package state
import ( import (
"fmt" "fmt"
"reflect"
"strings" "strings"
"github.com/hashicorp/consul/agent/structs" "github.com/hashicorp/consul/agent/structs"
@ -619,12 +618,9 @@ func (s *Store) ensureServiceTxn(tx *memdb.Txn, idx uint64, node string, svc *st
// conversion doesn't populate any of the node-specific information. // conversion doesn't populate any of the node-specific information.
// That's always populated when we read from the state store. // That's always populated when we read from the state store.
entry := svc.ToServiceNode(node) entry := svc.ToServiceNode(node)
hasSameTags := false
if existing != nil { if existing != nil {
entry.CreateIndex = existing.(*structs.ServiceNode).CreateIndex entry.CreateIndex = existing.(*structs.ServiceNode).CreateIndex
entry.ModifyIndex = idx entry.ModifyIndex = idx
eSvc := existing.(*structs.ServiceNode)
hasSameTags = reflect.DeepEqual(eSvc.ServiceTags, svc.Tags)
} else { } else {
entry.CreateIndex = idx entry.CreateIndex = idx
entry.ModifyIndex = idx entry.ModifyIndex = idx
@ -643,11 +639,8 @@ func (s *Store) ensureServiceTxn(tx *memdb.Txn, idx uint64, node string, svc *st
if err := tx.Insert("services", entry); err != nil { if err := tx.Insert("services", entry); err != nil {
return fmt.Errorf("failed inserting service: %s", err) return fmt.Errorf("failed inserting service: %s", err)
} }
if !hasSameTags { if err := tx.Insert("index", &IndexEntry{"services", idx}); err != nil {
// We need to update /catalog/services only tags are different return fmt.Errorf("failed updating index: %s", err)
if err := tx.Insert("index", &IndexEntry{"services", idx}); err != nil {
return fmt.Errorf("failed updating index: %s", err)
}
} }
if err := tx.Insert("index", &IndexEntry{serviceIndexName(svc.Service), idx}); err != nil { if err := tx.Insert("index", &IndexEntry{serviceIndexName(svc.Service), idx}); err != nil {
return fmt.Errorf("failed updating index: %s", err) return fmt.Errorf("failed updating index: %s", err)