From b94aac3a2c494978e046cc25ef6474b88260a281 Mon Sep 17 00:00:00 2001 From: Sean Chittenden Date: Thu, 2 Feb 2017 12:13:58 -0800 Subject: [PATCH] Round the node lookup prefix down to the nearest modulo two size before performing the lookup. Hat tip: @dadgar --- consul/state/catalog.go | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/consul/state/catalog.go b/consul/state/catalog.go index 03745fb9ab..ca5eb61103 100644 --- a/consul/state/catalog.go +++ b/consul/state/catalog.go @@ -16,6 +16,16 @@ const ( minUUIDLookupLen = 2 ) +func resizeNodeLookupKey(s string) string { + l := len(s) + + if l%2 != 0 { + return s[0 : l-1] + } + + return s +} + // Nodes is used to pull the full list of nodes for use during snapshots. func (s *StateSnapshot) Nodes() (memdb.ResultIterator, error) { iter, err := s.tx.Get("nodes", "id") @@ -703,7 +713,7 @@ func (s *StateStore) NodeServices(ws memdb.WatchSet, nodeNameOrID string) (uint6 } // Attempt to lookup the node by its node ID - iter, err := tx.Get("nodes", "uuid_prefix", nodeNameOrID) + iter, err := tx.Get("nodes", "uuid_prefix", resizeNodeLookupKey(nodeNameOrID)) if err != nil { ws.Add(watchCh) // TODO(sean@): We could/should log an error re: the uuid_prefix lookup