diff --git a/website/source/docs/agent/http.html.markdown b/website/source/docs/agent/http.html.markdown index ec616ea7a..8d4079422 100644 --- a/website/source/docs/agent/http.html.markdown +++ b/website/source/docs/agent/http.html.markdown @@ -42,6 +42,40 @@ note is that when the query returns there is **no guarantee** of a change. It is possible that the timeout was reached, or that there was an idempotent write that does not affect the result. +## Consistency Modes + +Most of the read query endpoints support multiple levels of consistency. +These are to provide a tuning knob that clients can be used to find a happy +medium that best matches their needs. + +The three read modes are: + +* default - If not specified, this mode is used. It is strongly consistent + in almost all cases. However, there is a small window in which an new + leader may be elected, and the old leader may service stale values. The + trade off is fast reads, but potentially stale values. This condition is + hard to trigger, and most clients should not need to worry about the stale read. + This only applies to reads, and a split-brain is not possible on writes. + +* consistent - This mode is strongly consistent without caveats. It requires + that a leader verify with a quorum of peers that it is still leader. This + introduces an additional round-trip to all server nodes. The trade off is + always consistent reads, but increased latency due to an extra round trip. + Most clients should not use this unless they cannot tolerate a stale read. + +* stale - This mode allows any server to service the read, regardless of if + it is the leader. This means reads can be arbitrarily stale, but are generally + within 50 milliseconds of the leader. The trade off is very fast and scalable + reads but values will be stale. This mode allows reads without a leader, meaning + a cluster that is unavailable will still be able to respond. + +To switch these modes, either the "?stale" or "?consistent" query parameters +are provided. It is an error to provide both. + +To support bounding how stale data is, there is an "X-Consul-LastContact" +which is the last time a server was contacted by the leader node in +milliseconds. The "X-Consul-KnownLeader" also indicates if there is a known +leader. These can be used to gauage if a stale read should be used. ## KV @@ -81,7 +115,8 @@ that modified this key. This index corresponds to the `X-Consul-Index` header value that is returned. A blocking query can be used to wait for a value to change. If "?recurse" is used, the `X-Consul-Index` corresponds to the latest `ModifyIndex` and so a blocking query waits until any of the -listed keys are updated. +listed keys are updated. The multiple consistency modes can be used for +`GET` requests as well. The `Key` is simply the full path of the entry. `Flags` are an opaque unsigned integer that can be attached to each entry. The use of this is @@ -347,7 +382,8 @@ The following endpoints are supported: * /v1/catalog/service/\ : Lists the nodes in a given service * /v1/catalog/node/\ : Lists the services provided by a node -The last 4 endpoints of the catalog support blocking queries. +The last 4 endpoints of the catalog support blocking queries and +consistency modes. ### /v1/catalog/register @@ -473,7 +509,7 @@ It returns a JSON body like this: } ] -This endpoint supports blocking queries. +This endpoint supports blocking queries and all consistency modes. ### /v1/catalog/services @@ -492,7 +528,7 @@ It returns a JSON body like this: The main object keys are the service names, while the array provides all the known tags for a given service. -This endpoint supports blocking queries. +This endpoint supports blocking queries and all consistency modes. ### /v1/catalog/service/\ @@ -517,7 +553,7 @@ It returns a JSON body like this: } ] -This endpoint supports blocking queries. +This endpoint supports blocking queries and all consistency modes. ### /v1/catalog/node/\ @@ -549,7 +585,7 @@ It returns a JSON body like this: } } -This endpoint supports blocking queries. +This endpoint supports blocking queries and all consistency modes. ## Health @@ -564,7 +600,7 @@ The following endpoints are supported: * /v1/health/service/\: Returns the nodes and health info of a service * /v1/health/state/\: Returns the checks in a given state -All of the health endpoints supports blocking queries. +All of the health endpoints supports blocking queries and all consistency modes. ### /v1/health/node/\ @@ -603,7 +639,7 @@ joins the Consul cluster, it is part of a distributed failure detection provided by Serf. If a node fails, it is detected and the status is automatically changed to "critical". -This endpoint supports blocking queries. +This endpoint supports blocking queries and all consistency modes. ### /v1/health/checks/\ @@ -627,7 +663,7 @@ It returns a JSON body like this: } ] -This endpoint supports blocking queries. +This endpoint supports blocking queries and all consistency modes. ### /v1/health/service/\ @@ -684,7 +720,7 @@ It returns a JSON body like this: } ] -This endpoint supports blocking queries. +This endpoint supports blocking queries and all consistency modes. ### /v1/health/state/\ @@ -718,7 +754,7 @@ It returns a JSON body like this: } ] -This endpoint supports blocking queries. +This endpoint supports blocking queries and all consistency modes. ## Status