public TSStatus setConfiguration(TSetConfigurationReq req) {
    TSStatus tsStatus = new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
    Map<String, String> newConfigItems = req.getConfigs();
    if (newConfigItems.isEmpty()) {
      return tsStatus;
    }
    TrimProperties newConfigProperties = new TrimProperties();
    newConfigProperties.putAll(newConfigItems);

    URL configFileUrl = IoTDBDescriptor.getPropsUrl(CommonConfig.SYSTEM_CONFIG_NAME);
    if (configFileUrl == null || !(new File(configFileUrl.getFile()).exists())) {
      // configuration file not exist, update in mem
      String msg =
          "Unable to find the configuration file. Some modifications are made only in memory.";
      tsStatus = RpcUtils.getStatus(TSStatusCode.EXECUTE_STATEMENT_ERROR, msg);
      LOGGER.warn(msg);
      try {
        IoTDBDescriptor.getInstance().loadHotModifiedProps(newConfigProperties);
        IoTDBDescriptor.getInstance().reloadMetricProperties(newConfigProperties);
      } catch (Exception e) {
        return RpcUtils.getStatus(TSStatusCode.EXECUTE_STATEMENT_ERROR, e.getMessage());
      }
      return tsStatus;
    }

    try {
      ConfigurationFileUtils.updateConfiguration(
          new File(configFileUrl.getFile()),
          newConfigProperties,
          mergedProperties -> {
            try {
              IoTDBDescriptor.getInstance().loadHotModifiedProps(mergedProperties);
            } catch (Exception e) {
              throw new IllegalArgumentException(e);
            }
          });
    } catch (Exception e) {
      if (e instanceof InterruptedException) {
        Thread.currentThread().interrupt();
      }
      return RpcUtils.getStatus(TSStatusCode.EXECUTE_STATEMENT_ERROR, e.getMessage());
    }
    return tsStatus;
  }
recover the progress of unfinished repair schedule task
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/StorageEngine.java