code: Observable<LifecycleState> addNode(final Node node) {
          LOGGER.debug("Got instructed to add Node {}", node.hostname());
  
          if (nodes.contains(node)) {
              LOGGER.debug("Node {} already registered, skipping.", node.hostname());
              return Observable.just(node.state());
          }
  
          LOGGER.debug("Connecting Node " + node.hostname());
          return node.connect().map(new Func1<LifecycleState, LifecycleState>() {
              @Override
              public LifecycleState call(LifecycleState lifecycleState) {
                  LOGGER.debug("Connect finished, registering for use.");
                  nodes.addIfAbsent(node);
                  return lifecycleState;
              }
          });
      }
docs: Adds a {@link Node} to the cluster.
  
  The code first initiates a asynchronous connect and then eventually adds it to the node list once it has been
  connected successfully.