-
Notifications
You must be signed in to change notification settings - Fork 1.2k
Description
Please use the following questions as a guideline to help me answer
your issue/question without further inquiry. Thank you.
Which version of Elastic are you using?
[x] elastic.v6 (for Elasticsearch 6.x)
Please describe the expected behavior
Hello 👋 We're trying to use this library with an AWS cluster of 3 nodes and specifying the endpoint hostname from AWS as a single entry in the hosts
key in the library config file. The ideal situation would be where the client would be able to detect when the IP address changes, re-resolve the hostname and send a retry request, such that during re-provisioning phase no requests are dropped.
Please describe the actual behavior
Requests will fail during the provisioning phase and then, in our case after about 15 minutes, the client will heal itself and requests stop failing.
Because of AWS not exposing the node IPs on the /_nodes
endpoint these are my thoughts so far:
With sniffing disabled we see that the single node connection won't be MarkAsDead
, due to
Lines 1204 to 1209 in 60d62e5
if !c.snifferEnabled { | |
c.errorf("elastic: all %d nodes marked as dead; resurrecting them to prevent deadlock", len(c.conns)) | |
for _, conn := range c.conns { | |
conn.MarkAsAlive() | |
} | |
} |
With sniffing enabled it's not going to work because sniffing can't be done due to AWS only exposing the load balancer IP. The client won't be able to detect any other nodes:
Lines 964 to 978 in 60d62e5
if err := json.NewDecoder(res.Body).Decode(&info); err == nil { | |
if len(info.Nodes) > 0 { | |
for nodeID, node := range info.Nodes { | |
if c.snifferCallback(node) { | |
if node.HTTP != nil && len(node.HTTP.PublishAddress) > 0 { | |
url := c.extractHostname(c.scheme, node.HTTP.PublishAddress) | |
if url != "" { | |
nodes = append(nodes, newConn(nodeID, url)) | |
} | |
} | |
} | |
} | |
} | |
} | |
return nodes |
Any steps to reproduce the behavior?
- instantiate a new client, setting the AWS endpoint as a single host entry in the config
- Trigger cluster re-provisioning in AWS, described here: https://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/es-managedomains.html#es-managedomains-configuration-changes