{"record":{"id":"606d8eb6a4d0abf3","repo":"apache/skywalking","slug":"lal-rule-rulename-layerdefinitions-entry-rejecte","errorCode":null,"errorMessage":"LAL rule {ruleName} layerDefinitions entry rejected: {def}","messagePattern":"LAL rule (.+?) layerDefinitions entry rejected: (.+?)","errorType":"exception","errorClass":"UnexpectedException","httpStatus":null,"severity":"critical","filePath":"oap-server/analyzer/log-analyzer/src/main/java/org/apache/skywalking/oap/log/analyzer/v2/provider/LALConfigs.java","lineNumber":214,"sourceCode":"        }\n    }\n\n    /**\n     * Funnel any inline {@code layerDefinitions:} entries through {@code Layer.register}.\n     * Conflict checks (reserved-range, name uniqueness, ordinal uniqueness, sealed-state) live\n     * in {@code Layer.register}; failures here surface with the offending rule name in\n     * the stack trace.\n     */\n    private static void registerInlineLayers(final String ruleName, final LALConfigs configs) {\n        final List<LayerDefinition> defs = configs.getLayerDefinitions();\n        if (defs == null || defs.isEmpty()) {\n            return;\n        }\n        for (final LayerDefinition def : defs) {\n            try {\n                def.register();\n            } catch (RuntimeException e) {\n                throw new UnexpectedException(\n                    \"LAL rule \" + ruleName + \" layerDefinitions entry rejected: \" + def, e);\n            }\n        }\n    }\n}\n","sourceCodeStart":196,"sourceCodeEnd":220,"githubUrl":"https://github.com/apache/skywalking/blob/102af09b4a56064e22050dded10e2c52e490d040/oap-server/analyzer/log-analyzer/src/main/java/org/apache/skywalking/oap/log/analyzer/v2/provider/LALConfigs.java#L196-L220","documentation":"Thrown when an inline layerDefinitions: entry in a LAL rule fails Layer.register() — the central registry that enforces reserved ordinal ranges, name uniqueness, ordinal uniqueness and sealed-state for Layer definitions. The rule name and the offending LayerDefinition toString are embedded. It is an UnexpectedException, so it fails the module/provider boot that loaded the rule.","triggerScenarios":"A layerDefinitions entry whose name or ordinal collides with an already-registered Layer (built-in or from an earlier rule); an ordinal inside a reserved range owned by the project; registering onto a sealed Layer registry state.","commonSituations":"Two custom rules defining the same layer name with different ordinals; picking an ordinal inside the range reserved for SkyWalking built-in layers; re-declaring a layer that a satellite/receiver plugin already registered via SPI.","solutions":["Check the Layer.register cause in the stack trace — it names the exact violation (reserved range, duplicate name, duplicate ordinal, sealed)","Give each custom layer a unique name and a unique ordinal outside reserved ranges","Remove the layerDefinitions entry if the layer is already registered by a plugin or another rule","Keep all definitions of one layer in a single rule file to avoid ordering-dependent duplicates"],"exampleFix":"# before (two rules both declare)\nlayerDefinitions:\n  - name: MY_LAYER\n    ordinal: 3\n\n# after (declare once, unique ordinal outside reserved range)\nlayerDefinitions:\n  - name: MY_LAYER\n    ordinal: 9001","handlingStrategy":"try-catch","validationCode":"// Before loading rules with inline layers, pre-validate uniqueness/ranges:\n// Set<String> names = new HashSet<>(); Set<Integer> ordinals = new HashSet<>();\n// for (LayerDefinition d : defs) {\n//     if (!names.add(d.name()) || !ordinals.add(d.ordinal())) throw new IllegalStateException(\"duplicate layer def\");\n// }","typeGuard":null,"tryCatchPattern":"try {\n    def.register();\n} catch (RuntimeException e) {\n    // rule name is embedded; fix the layerDefinitions entry (name/ordinal conflict)\n    // and restart — there is no runtime recovery, registration is boot-time\n}","preventionTips":["Centralize layerDefinitions in one rule file","Choose ordinals well outside built-in ranges and document them","Grep all rule files for duplicate layer names before merging changes"],"tags":["lal","log-analyzer","layer","config","startup"],"backgroundTag":null,"analyzedSha":"102af09b4a56064e22050dded10e2c52e490d040","analyzedAt":"2026-08-14T10:47:52.647Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}