docs: @Override
      public void notificationCreated(RuntimeUpdateManager updateManager, RuntimeUpdateNotification notification) {
  
          // CONFIG_UPDATES_DELIVERED notification actually indicates that a config update is starting. The update
          // won't be complete until the future we get from the notification is complete.
          if (RuntimeUpdateNotification.CONFIG_UPDATES_DELIVERED.equals(notification.getName())) {
  
              configFuture = notification.getFuture();
              _futureMonitor.onCompletion(notification.getFuture(), new CompletionListener<Boolean>() {
                  @Override
                  public void successfulCompletion(Future<Boolean> future, Boolean result) {
                      // We're done with the update. Set the configFuture to null, and submit a dummy task
                      // so that performAction knows it can kick off the executor.
                      configFuture = null;
                      submit();
                  }
  
                  @Override
                  public void failedCompletion(Future<Boolean> future, Throwable t) {
                      // The update failed, but we still want to process any queued actions. Set the
                      // configFuture to null, and submit a dummy task so that performAction knows
                      // it can kick off the executor.
                      configFuture = null;
                      submit();
                  }
  
                  // Submit a dummy job so that performAction() will kick off the executor for the actions queue
                  private void submit() {
                      synchronized (actionQueue) {
                          performAction(new Runnable() {
  
                              @Override
                              public void run() {
                                  return;
                              }
                          });
                      }
                  }
              });
          }
  
      }