{"record":{"id":"8dfad427831bbefd","repo":"apache/beam","slug":"pubsub-object-name-is-shorter-than-3-characters-name","errorCode":null,"errorMessage":"Pubsub object name is shorter than 3 characters: {name}","messagePattern":"Pubsub object name is shorter than 3 characters: (.+?)","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/pubsub/PubsubIO.java","lineNumber":240,"sourceCode":"\n  private static final String SUBSCRIPTION_RANDOM_TEST_PREFIX = \"_random/\";\n  private static final String SUBSCRIPTION_STARTING_SIGNAL = \"_starting_signal/\";\n  private static final String TOPIC_DEV_NULL_TEST_NAME = \"/topics/dev/null\";\n\n  public static final String ENABLE_CUSTOM_PUBSUB_SINK = \"enable_custom_pubsub_sink\";\n  public static final String ENABLE_CUSTOM_PUBSUB_SOURCE = \"enable_custom_pubsub_source\";\n\n  private static void validateProjectName(String project) {\n    Matcher match = PROJECT_ID_REGEXP.matcher(project);\n    if (!match.matches()) {\n      throw new IllegalArgumentException(\n          \"Illegal project name specified in Pubsub subscription: \" + project);\n    }\n  }\n\n  private static void validatePubsubName(String name) {\n    if (name.length() < PUBSUB_NAME_MIN_LENGTH) {\n      throw new IllegalArgumentException(\n          \"Pubsub object name is shorter than 3 characters: \" + name);\n    }\n    if (name.length() > PUBSUB_NAME_MAX_LENGTH) {\n      throw new IllegalArgumentException(\n          \"Pubsub object name is longer than 255 characters: \" + name);\n    }\n\n    if (name.startsWith(\"goog\")) {\n      throw new IllegalArgumentException(\"Pubsub object name cannot start with goog: \" + name);\n    }\n\n    Matcher match = PUBSUB_NAME_REGEXP.matcher(name);\n    if (!match.matches()) {\n      throw new IllegalArgumentException(\n          \"Illegal Pubsub object name specified: \"\n              + name\n              + \" Please see Javadoc for naming rules.\");\n    }","sourceCodeStart":222,"sourceCodeEnd":258,"githubUrl":"https://github.com/apache/beam/blob/12126d8942aaf848030c478b4c6a28c6af861c66/sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/pubsub/PubsubIO.java#L222-L258","documentation":"Pub/Sub topic and subscription names must be at least 3 characters (PUBSUB_NAME_MIN_LENGTH). validatePubsubName throws IllegalArgumentException when the configured name is shorter, preventing a doomed API call to create or reference the resource.","triggerScenarios":"Creating/validating a PubsubIO topic or subscription whose name string has fewer than 3 characters, e.g. topic \"ab\" or an empty name after path parsing.","commonSituations":"Unsubstituted template variables resulting in very short strings; truncated config values; accidentally passing a prefix or delimiter instead of the full name.","solutions":["Use a topic/subscription name of at least 3 characters (letters, digits, hyphens, underscores, periods)","Fix config resolution so placeholders expand to the real resource name","Log/inspect the parsed name before building the pipeline to catch truncation","Validate name length in application config validation before launching the job"],"exampleFix":"// before\nString topic = conf.getOrDefault(\"topic\", \"ab\");\n// after\nString topic = conf.getOrDefault(\"topic\", \"my-events-topic\"); // >= 3 chars","handlingStrategy":"validation","validationCode":"if (name == null || name.length() < 3) {\n  throw new IllegalArgumentException(\"Pub/Sub name must be at least 3 characters: \" + name);\n}","typeGuard":null,"tryCatchPattern":"try { PubsubIO.readStrings().fromSubscription(sub); } catch (IllegalArgumentException e) { log.error(\"Invalid Pub/Sub name: {}\", e.getMessage()); }","preventionTips":["Use descriptive resource names of 3+ characters","Fail fast on unresolved config placeholders","Validate names in config checks before job submission","Avoid passing delimiters/prefixes as names"],"tags":["java","pubsub","naming","validation","length"],"backgroundTag":"value-out-of-range","analyzedSha":"12126d8942aaf848030c478b4c6a28c6af861c66","analyzedAt":"2026-09-13T01:50:10.254Z","contentChangedAt":"2026-09-13T01:50:10.254Z","schemaVersion":2},"datasetVersion":"2026-09-15T02:17:10.978Z"}