apache/skywalking · critical · IllegalArgumentException

{slot} expects a plain integer literal, got '{numText}' (suf

Error message

{slot} expects a plain integer literal, got '{numText}' (suffixes / decimals / exponents are not accepted here)

What it means

Wrapped-into-UnexpectedException failure in the MeterSystem constructor: ClassPath.from(MeterSystem.class.getClassLoader()) threw IOException while building the classpath scanner used to discover @MeterFunction-annotated classes under org.apache.skywalking. This is an environment/classloader failure at OAP boot, before any meter processing starts.

Source

Thrown at oap-server/analyzer/log-analyzer/src/main/java/org/apache/skywalking/oap/log/analyzer/v2/compiler/LALScriptParser.java:886

        }
        return mul.valueAccessTerm(0);
    }

    /**
     * Parse a NUMBER literal that must represent a plain integer (no
     * decimal, no exponent, no Java-style suffix). Used by integer-only
     * grammar slots — {@code rateLimit { rpm N }} and {@code list[N]} —
     * which share the lexer NUMBER token with arithmetic expressions but
     * cannot accept the suffixes/forms supported there. Throws a clear
     * compile-time error for shape violations and for values that exceed
     * Java's {@code long} range (rather than letting
     * {@link NumberFormatException} leak from {@code Long.parseLong}).
     */
    private static long parseStrictInteger(final String numText, final String slot) {
        for (int i = 0; i < numText.length(); i++) {
            final char c = numText.charAt(i);
            if (c < '0' || c > '9') {
                throw new IllegalArgumentException(
                    slot + " expects a plain integer literal, got '" + numText
                        + "' (suffixes / decimals / exponents are not accepted here)");
            }
        }
        try {
            return Long.parseLong(numText);
        } catch (NumberFormatException e) {
            throw new IllegalArgumentException(
                slot + " value '" + numText + "' exceeds the supported range "
                    + "(must fit in a Java long)");
        }
    }

    /**
     * Like {@link #parseStrictInteger} but additionally requires the value
     * to fit in a Java {@code int}. Used by the {@code [index]} grammar
     * slot, where silent narrowing of an oversized literal would wrap to a
     * negative index instead of producing a clear error.

View on GitHub (pinned to 102af09b4a)

Solutions

  1. Verify the OAP install: re-download the distribution / re-pull the docker image and check jar integrity (unzip -t on oap-libs jars)
  2. Check filesystem permissions and disk space on the OAP directory and its classpath jars
  3. If embedding OAP in a custom classloader, ensure ClassPath.from can enumerate the URLs — prefer plain URLClassLoader jars over exotic loaders
Defensive patterns

Strategy: retry

Prevention

When it happens

Trigger: OAP startup with a broken deployment: unreadable jar files in the classpath (truncated download, corrupted docker layer), an exotic classloader that ClassPath (Guava's ClassPath) cannot enumerate, or filesystem permission errors on the install directory.

Common situations: Corrupted distribution tarball or docker image; NFS-mounted OAP libs with intermittent I/O errors; running in a fat classloader (some application servers, shaded runners) that Guava cannot walk; disk-full during image pull.

Related errors


AI-assisted analysis of apache/skywalking@102af09b4a (2026-08-14). Data as JSON: /api/errors/ee4f1af757aafc1a. Report an issue: GitHub.