* @throws InterruptedException if the command execution has been interrupted.
*/
@Override
public <R extends Result, C extends Command<R>> Map<Node, R> execute(C command) throws StoreNotFoundException, ProducerNotFoundException, InterruptedException {
if (command == null) {
throw new StoreNotFoundException("Command store not found");
} else {
commandStore.getPending().put(command.getId(), command);
TimeoutTask timeoutTask = new TimeoutTask(command, commandStore);
timeoutScheduler.schedule(timeoutTask, command.getTimeout(), TimeUnit.MILLISECONDS);
}