consul-api
consul-api copied to clipboard
Implement CAS support for delete method
Consul (at least of version 0.6) returns boolean value for delete operation that marks it's success (normal deletion) or failure (e.g. cas
parameter set to invalid value). It would be quite cool to add same support (ability to pass cas
parameter and return boolean value) for client implementation.
For what it's worth, I was able to find a workaround by using RawConsulClient
directly.
public void deleteKey(final String key, final long checkAndSetIndex) {
consulRawClient.makeDeleteRequest(
"/v1/kv/" + key,
(UrlParameters) () -> Collections.singletonList("cas=" + checkAndSetIndex)
);
}
Take a look at ConsulRawClient.java
to see how to construct one.
The problem is that all the different overloaded methods of deleteKVValue()
return Response<Void>
. In order to indicate whether the delete succeeded or not, we would need to return Response<Boolean>
. I see a few ways forward:
- The most minimal change is to just add the support for the
cas
parameter, but don't return the boolean. If callers want to know whether their delete succeeded, they'll have to do a KV get. - A partial change would be to add more
deleteKVValue()
methods that support thecas
parameter and returnResponse<Boolean>
, but leave the others as-is. SodeleteKVValue()
would return a mix ofResponse<Void>
andResponse<Boolean>
depending on use case. - A more gradual change is to add new methods, probably with a different name, that return
Response<Boolean>
. Leave the old ones in place and@Deprecate
them. - The most major change would be to just change all the existing methods to
Response<Boolean>
, probably after a major version number change.
@vgv Do you have a preference for the fix?