Thank you for your answer Mitchell,
My question about the road map is not really about one specific feature request, but more on where do you plan to go, when and how
(and where do you know you will not go)
That being said, the specific feature request I have, would be to expose in some way the event handler and query interface available in serf
I know about the blocking queries already available, but as far as I have seen, they work pretty well for kv, but are not so friendly for catalog and health :
"X-Consul-Index" just keep incrementing every second or so, even when no node or service has been "changed"
Those idempotent writes make the use of blocking queries not so useful to detect changes
An other concern is about the distinction that surfaces between KV on the one hand and "nodes + services" on the other hand
Both are really useful, but I still don't see how they will be "glued" together
If they are not, i feel that we could land with one great product (consul), but two distinct functionalities and workflows (KV vs n+s)
Do you plan to allow services and nodes to be bound to a subset ok keys ?
This could allow to discover services, including the nodes:port they are deployed on and associated states, but that would allow to discover their conf as well
Ex:
cat ${data_dir}/myService.json
"service": {
"name": "myService",
"kv": "/services/common/conf", // KV could be generic for the service
"tags": [ // or they could be specific to a tag, overriding the generic
{
"name": "A",
"kv": [ "/services/common/A/conf/", "/services/myService/A/conf/" ]
}
],
...
GET /v1/catalog/service/myService?tag=A
[
{
"Node": "node1",
"Address": "10.0.0.1",
"ServiceID": "myService",
"ServiceName": "myService",
"ServiceTags": [
"A"
],
"ServicePort": 80,
"keys": [
"user=appUser", // This kv comes from "/services/common/conf"
"apiVersion=xxxx", // This one comes from "/services/common/A/conf"
"timeOut=3ms", // This one comes from "/services/myService/A/conf"
]
},
...
I do not pretend this example is the good way to do it, I am just wondering out loud how KV and n+s could be tightly integrated
Lets pretend that we are in a perfect world, what I would love to have :
Any change triggers an event, with change being any of the following :
- Service is registered or de registered
- Service tags have changed
- The pool of underlying nodes that expose this service and/or tag.service has changed (new nodes, less nodes, failing checks, etc ...)
- Some of the KV associated with this service or tag.service have changed (CUD)
1 more question: Do you plan to implement KV store replication between datacenters ?
Anyway, congrats for the great job you have already done with all the awesome HashiProducts
Regards,
Xavier