{"record":{"id":"9706f2511571ec41","repo":"pentaho/pentaho-kettle","slug":"unknown-storage-type-specified","errorCode":null,"errorMessage":" : Unknown storage type  specified.","messagePattern":" : Unknown storage type  specified\\.","errorType":"exception","errorClass":"KettleValueException","httpStatus":null,"severity":"error","filePath":"core/src/main/java/org/pentaho/di/core/row/value/ValueMetaInternetAddress.java","lineNumber":86,"sourceCode":"    super( name, ValueMetaInterface.TYPE_INET );\n  }\n\n  public InetAddress getInternetAddress( Object object ) throws KettleValueException {\n    if ( object == null ) {\n      return null;\n    }\n\n    switch ( type ) {\n      case TYPE_INET:\n        switch ( storageType ) {\n          case STORAGE_TYPE_NORMAL:\n            return (InetAddress) object;\n          case STORAGE_TYPE_BINARY_STRING:\n            return (InetAddress) convertBinaryStringToNativeType( (byte[]) object );\n          case STORAGE_TYPE_INDEXED:\n            return (InetAddress) index[( (Integer) object )];\n          default:\n            throw new KettleValueException( toString() + \" : Unknown storage type \" + storageType + \" specified.\" );\n        }\n      case TYPE_STRING:\n        switch ( storageType ) {\n          case STORAGE_TYPE_NORMAL:\n            return convertStringToInternetAddress( (String) object );\n          case STORAGE_TYPE_BINARY_STRING:\n            return convertStringToInternetAddress( (String) convertBinaryStringToNativeType( (byte[]) object ) );\n          case STORAGE_TYPE_INDEXED:\n            return convertStringToInternetAddress( (String) index[( (Integer) object ).intValue()] );\n          default:\n            throw new KettleValueException( toString() + \" : Unknown storage type \" + storageType + \" specified.\" );\n        }\n      case TYPE_NUMBER:\n        switch ( storageType ) {\n          case STORAGE_TYPE_NORMAL:\n            return convertNumberToInternetAddress( (Double) object );\n          case STORAGE_TYPE_BINARY_STRING:\n            return convertNumberToInternetAddress( (Double) convertBinaryStringToNativeType( (byte[]) object ) );","sourceCodeStart":68,"sourceCodeEnd":104,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/core/src/main/java/org/pentaho/di/core/row/value/ValueMetaInternetAddress.java#L68-L104","documentation":"getInternetAddress() converts a stored value object into a java.net.InetAddress based on the value meta's type and storage type. When the storageType field holds a value that is not STORAGE_TYPE_NORMAL, STORAGE_TYPE_BINARY_STRING, or STORAGE_TYPE_INDEXED, the inner switch falls through to default and throws this KettleValueException. It indicates the value metadata has been corrupted or built with an out-of-range storage type code.","triggerScenarios":"Calling getInternetAddress(object) (directly or via getString/inetAddress/getNativeDataType on this ValueMetaInternetAddress) while storageType is set to an integer other than 0/1/2, e.g. after deserializing row metadata from a stream/file with a newer or corrupted storage type code.","commonSituations":"Row metadata deserialized from an old Kettle repository or exported XML where storage type codes changed; a plugin or custom code calling setStorageType() with an unvalidated constant; byte-level corruption when cloning row metadata between nodes in a cluster.","solutions":["Inspect the ValueMeta's storageType value (getStorageType()) before the call; fix whatever set it to an invalid code","Reset storage to STORAGE_TYPE_NORMAL (valueMeta.setStorageType(ValueMetaInterface.STORAGE_TYPE_NORMAL)) if indexed/binary-string storage is not actually needed","Rebuild the row metadata via ValueMetaFactory instead of deserializing legacy metadata","Upgrade/align Pentaho Kettle (PDI) versions on all nodes so storage type constants match"],"exampleFix":"// before\nInetAddress addr = valueMetaInternetAddress.getInternetAddress(object); // storageType garbage\n// after\nif (valueMetaInternetAddress.getStorageType() < ValueMetaInterface.STORAGE_TYPE_NORMAL\n    || valueMetaInternetAddress.getStorageType() > ValueMetaInterface.STORAGE_TYPE_INDEXED) {\n  valueMetaInternetAddress.setStorageType(ValueMetaInterface.STORAGE_TYPE_NORMAL);\n}\nInetAddress addr = valueMetaInternetAddress.getInternetAddress(object);","handlingStrategy":"type-guard","validationCode":"// Java\npublic static boolean hasValidStorageType(ValueMetaInterface meta) {\n  int st = meta.getStorageType();\n  return st == ValueMetaInterface.STORAGE_TYPE_NORMAL\n      || st == ValueMetaInterface.STORAGE_TYPE_BINARY_STRING\n      || st == ValueMetaInterface.STORAGE_TYPE_INDEXED;\n}","typeGuard":"if (!hasValidStorageType(meta)) { meta.setStorageType(ValueMetaInterface.STORAGE_TYPE_NORMAL); }","tryCatchPattern":"try {\n  InetAddress addr = meta.getInternetAddress(object);\n} catch (KettleValueException e) {\n  if (e.getMessage().contains(\"Unknown storage type\")) {\n    meta.setStorageType(ValueMetaInterface.STORAGE_TYPE_NORMAL);\n    // retry conversion\n  } else { throw e; }\n}","preventionTips":["Always use ValueMetaInterface.STORAGE_TYPE_* constants, never raw ints","Validate storageType (0..2) right after deserializing row metadata","Use ValueMetaFactory/clone() instead of hand-building metadata","Keep PDI versions aligned across cluster nodes"],"tags":["kettle","pdi","value-meta","storage-type"],"backgroundTag":"unsupported-enum-value","analyzedSha":"f3058517a153da500bf4551f46d79b91bf8ec552","analyzedAt":"2026-09-13T14:04:16.340Z","contentChangedAt":"2026-09-13T14:04:16.340Z","schemaVersion":2},"datasetVersion":"2026-09-20T23:17:15.980Z"}