pentaho/pentaho-kettle · error · KettleException

AccessInputMeta.Exception.ErrorSavingToRepository

AccessInputMeta.Exception.ErrorSavingToRepository

Error message

AccessInputMeta.Exception.ErrorSavingToRepository

What it means

AccessInputMeta.saveRep wraps any failure while persisting the Access Input step's field-name attributes (filename, table, row-limit, output field names like uriNameFieldName, sizeFieldName, etc.) into a KettleException. It is thrown because one of the rep.saveStepAttribute calls failed, with the original cause attached.

Solutions

  1. Check the repository database is reachable and the connection is alive
  2. Verify the repository user has write (INSERT/UPDATE) privileges on step attribute tables
  3. Retry the save after reconnecting to the repository
  4. Inspect the wrapped cause (KettleException) for the actual JDBC error
  5. Run the repository repair/check tools if the schema is inconsistent

Example fix

// before
try {
  transMeta.save(rep, metaDescription, null);
} catch (Exception e) { log.error("save failed", e); }
// after
try {
  transMeta.save(rep, metaDescription, null);
} catch (KettleException e) {
  if (e.getCause() != null) log.error("repository save failed", e.getCause());
  // reconnect or re-login to the repository, then retry
  repo.disconnect(); repo.connect(username, password);
  transMeta.save(rep, metaDescription, null);
}
Defensive patterns

Strategy: try-catch

Validate before calling

// before save
if (!repo.isConnected()) throw new IllegalStateException("Repository not connected");
transMeta.steps().forEach(s -> { if (s.getID() == null) log.warn("step not persisted yet: " + s.getName()); });

Try / catch

try {
  transMeta.save(rep, comment, null);
} catch (KettleException e) {
  Throwable cause = e.getCause();
  log.error("Step save failed for id_step; cause=" + (cause != null ? cause.getMessage() : "?"), e);
  // reconnect and retry
}

Prevention

When it happens

Trigger: Calling saveRep on a repository where the underlying JDBC write fails: broken DB connection, read-only repository, missing repository permissions, or corrupted r_step_attribute table while saving step id_step.

Common situations: Saving a transformation to a repository that went down mid-session; repository schema upgrade mismatch; user lacks write rights to the repository; network drop during save.

Related errors


AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13). Data as JSON: /api/errors/082810c58fb775fb. Report an issue: GitHub.

Appendix: source

Thrown at plugins/ms-access/impl/src/main/java/org/pentaho/di/trans/steps/accessinput/AccessInputMeta.java:1092

        rep.saveStepAttribute( id_transformation, id_step, i, "field_decimal", field.getDecimalSymbol() );
        rep.saveStepAttribute( id_transformation, id_step, i, "field_group", field.getGroupSymbol() );
        rep.saveStepAttribute( id_transformation, id_step, i, "field_length", field.getLength() );
        rep.saveStepAttribute( id_transformation, id_step, i, "field_precision", field.getPrecision() );
        rep.saveStepAttribute( id_transformation, id_step, i, "field_trim_type", field.getTrimTypeCode() );
        rep.saveStepAttribute( id_transformation, id_step, i, "field_repeat", field.isRepeated() );

      }
      rep.saveStepAttribute( id_transformation, id_step, "shortFileFieldName", shortFileFieldName );
      rep.saveStepAttribute( id_transformation, id_step, "pathFieldName", pathFieldName );
      rep.saveStepAttribute( id_transformation, id_step, "hiddenFieldName", hiddenFieldName );
      rep.saveStepAttribute(
        id_transformation, id_step, "lastModificationTimeFieldName", lastModificationTimeFieldName );
      rep.saveStepAttribute( id_transformation, id_step, "uriNameFieldName", uriNameFieldName );
      rep.saveStepAttribute( id_transformation, id_step, "rootUriNameFieldName", rootUriNameFieldName );
      rep.saveStepAttribute( id_transformation, id_step, "extensionFieldName", extensionFieldName );
      rep.saveStepAttribute( id_transformation, id_step, "sizeFieldName", sizeFieldName );
    } catch ( Exception e ) {
      throw new KettleException( BaseMessages.getString(
        PKG, "AccessInputMeta.Exception.ErrorSavingToRepository", "" + id_step ), e );
    }
  }

  public FileInputList getFiles( Bowl bowl, VariableSpace space ) {
    return FileInputList.createFileList(
      bowl, space, fileName, fileMask, excludeFileMask, fileRequired, includeSubFolderBoolean() );
  }

  private boolean[] includeSubFolderBoolean() {
    int len = fileName.length;
    boolean[] includeSubFolderBoolean = new boolean[len];
    for ( int i = 0; i < len; i++ ) {
      includeSubFolderBoolean[i] = YES.equalsIgnoreCase( includeSubFolders[i] );
    }
    return includeSubFolderBoolean;
  }

View on GitHub (pinned to f3058517a1)