/**
  * Modifies index using the provided connection.
  *
  * @param ctx the connection to be used to update the index configuration.
  * @throws OpenDsException if there is an error updating the server.
  */
 private void modifyIndexOnline(final InitialLdapContext ctx) throws OpenDsException {
   final ManagementContext mCtx =
       LDAPManagementContext.createFromContext(JNDIDirContextAdaptor.adapt(ctx));
   final BackendCfgClient backend = mCtx.getRootConfiguration().getBackend(backendName);
   if (backend instanceof LocalDBBackendCfgClient) {
     modifyLocalDBIndexOnline((LocalDBBackendCfgClient) backend);
     return;
   }
   modifyBackendIndexOnline((PluggableBackendCfgClient) backend);
 }
  /**
   * Creates the Administration Suffix.
   *
   * @param ctx the DirContext to be used.
   * @param backendName the name of the backend where the administration suffix is stored.
   * @throws ADSContextException if the administration suffix could not be created.
   */
  void createAdministrationSuffix(InitialLdapContext ctx, String backendName)
      throws ADSContextException {
    try {
      ManagementContext mCtx =
          LDAPManagementContext.createFromContext(JNDIDirContextAdaptor.adapt(ctx));
      RootCfgClient root = mCtx.getRootConfiguration();
      LDIFBackendCfgClient backend = null;
      try {
        backend = (LDIFBackendCfgClient) root.getBackend(backendName);
      } catch (ManagedObjectNotFoundException e) {
      } catch (ClassCastException cce) {
        throw new ADSContextException(ErrorType.UNEXPECTED_ADS_BACKEND_TYPE, cce);
      }

      if (backend == null) {
        LDIFBackendCfgDefn provider = LDIFBackendCfgDefn.getInstance();
        backend = root.createBackend(provider, backendName, null);
        backend.setEnabled(true);
        backend.setLDIFFile(ADSContext.getAdminLDIFFile());
        backend.setBackendId(backendName);
        backend.setWritabilityMode(BackendCfgDefn.WritabilityMode.ENABLED);
        backend.setIsPrivateBackend(true);
      }
      SortedSet<DN> suffixes = backend.getBaseDN();
      if (suffixes == null) {
        suffixes = new TreeSet<>();
      }
      DN newDN = DN.valueOf(ADSContext.getAdministrationSuffixDN());
      if (suffixes.add(newDN)) {
        backend.setBaseDN(suffixes);
        backend.commit();
      }
    } catch (Throwable t) {
      throw new ADSContextException(ErrorType.ERROR_UNEXPECTED, t);
    }
  }