Nick, I missed out the core point I was trying to make in my last mail: all my suggestions are around framing the API around the internal state machine that the shard splitting implementation uses.
I think the internal state machine is relatively simple to understand and, importantly, document -- and exposing it directly will hopefully make the API feel more natural. While this is exposing implementation to an extent, I feel that it's unlikely to change massively, and if it did, other APIs would not insulate the user from this. I've a couple of further comments below, but in the main I think that generally considering how to frame API operations in terms of the internal state machine is the thrust of my opinion here. On Wed, 30 Jan 2019, at 16:48, Nick Vatamaniuc wrote: > Ah good call. I like the /_shard_split/state and { "state": > "stopped/started", "reason": "maintenance ticket 1234" } as a way to change > it. > > Previously I had used a PUT to change the state but I see you suggest a > POST. Wonder about the difference. My reasoning was that a PUT modifies the > state as opposed to creating new child state so to speak. I think you are correct that `PUT /_shard_split/state` is appropriate. > There is no way to control the job state individually currently. Shard > splitting as a whole is stopped and it would reflect in the job state when > queried. I can try adding the ability to stop a job individually. Then a > POST (though I am inclined to go with PUT as discussed above) to > ../$jobid/state with a {"state":"running"/"stopped", "reason":"..."} would > work. I think it's necessary to have some way to cancel a shard splitting operation via the HTTP API: people make mistakes when entering commands and being able to safely back-out is important. -- Mike.