code: private boolean shouldSendNotifications(long clientId) {
      ClientData clientData = core.getClientData(clientId);
      long prevDiffTime, curDiffTime;
      if (clientData == null) {
        return false;
      }
      
      // If it's not marked as failed, we should send right away
      if (clientData.markedAsFailedTime == -1) {
        if (LOG.isDebugEnabled()) {
          LOG.debug("Client " + clientId + " not failed.");
        }
        return true;
      }
      
      prevDiffTime = clientData.lastSentTime - clientData.markedAsFailedTime;
      curDiffTime = System.currentTimeMillis() - clientData.markedAsFailedTime;
      if (curDiffTime > 2 * prevDiffTime) {
        if (LOG.isDebugEnabled()) {
          LOG.debug("Client " + clientData + " failed (returning true)");
        }
        return true;
      }
      
      if (LOG.isDebugEnabled()) {
        LOG.debug("Client " + clientData + " failed (returning false)");
      }
      return false;
    }
docs: Used for a increasing (exponential) retry timer. If a client is marked
  as potentially failed, this function will compute if enough time passed
  since the last time we tried to send the specified client a notification.
  @param clientId the client to which we want to send the notification
  @return true if we should send, false otherwise