code: public final void sendMessage(ByteBuffer bb, byte msg_priority) {
      UDP_TCP_SendThread sendThread = _sendThread;
      if (sendThread == null) {
        // Sending threads are created lazily.
        // This is because we will intern all client nodes including the ones that have nothing to do with the cluster.
        // By delaying the initialization to the point when we actually want to send a message, we initialize the sending
        // thread just for the nodes that are really part of the cluster.
        // The other reason is client disconnect - when removing client we kill the reference to the sending thread, if we
        // still do need to communicate with the client later - we just recreate the thread.
        if (_removed_from_cloud) {
          Log.warn("Node " + this + " is not active in the cloud anymore but we want to communicate with it." +
                  "Re-opening the communication channel.");
        }
        sendThread = startSendThread();
      }
      assert sendThread != null;
      sendThread.sendMessage(bb, msg_priority);
    }
docs: null if Node was removed from cloud or we didn't need to communicate with it yet