{"record":{"id":"675e093888799a5c","repo":"apache/pulsar","slug":"no-entry-filter-is-found-for-name-filtername","errorCode":null,"errorMessage":"No entry filter is found for name `${filterName}`. Available entry filters are : ${definitions}","messagePattern":"No entry filter is found for name `(.+?)`\\. Available entry filters are : (.+?)","errorType":"exception","errorClass":"java.lang.RuntimeException","httpStatus":null,"severity":"error","filePath":"pulsar-broker/src/main/java/org/apache/pulsar/broker/service/plugin/EntryFilterProvider.java","lineNumber":109,"sourceCode":"    }\n\n    public List<EntryFilter> loadEntryFiltersForPolicy(EntryFilters policy)\n            throws IOException {\n        final String names = policy.getEntryFilterNames();\n        if (StringUtils.isBlank(names)) {\n            return Collections.emptyList();\n        }\n        final List<String> entryFilterList = readEntryFiltersString(names);\n        return loadEntryFilters(entryFilterList);\n    }\n\n    private List<EntryFilter> loadEntryFilters(Collection<String> entryFilterNames)\n            throws IOException {\n        ImmutableMap.Builder<String, EntryFilter> builder = ImmutableMap.builder();\n        for (String filterName : entryFilterNames) {\n            EntryFilterMetaData metaData = definitions.get(filterName);\n            if (null == metaData) {\n                throw new RuntimeException(\"No entry filter is found for name `\" + filterName\n                        + \"`. Available entry filters are : \" + definitions.keySet());\n            }\n            final EntryFilter entryFilter = load(metaData);\n            builder.put(filterName, entryFilter);\n            log.info().attr(\"filterName\", filterName).log(\"Successfully loaded entry filter\");\n        }\n        return builder.build().values().asList();\n    }\n\n    public List<EntryFilter> getBrokerEntryFilters() {\n        return brokerEntryFilters;\n    }\n\n    private void initialize() throws IOException {\n        final String entryFiltersDirectory = serviceConfiguration.getEntryFiltersDirectory();\n        Path path = Paths.get(entryFiltersDirectory).toAbsolutePath().normalize();\n        log.info().attr(\"path\", path).log(\"Searching for entry filters\");\n","sourceCodeStart":91,"sourceCodeEnd":127,"githubUrl":"https://github.com/apache/pulsar/blob/820761864ed8e2a7d2e52dd9763ad2ae117c1395/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/plugin/EntryFilterProvider.java#L91-L127","documentation":"loadEntryFilters resolves each requested filter name to its EntryFilterMetaData before instantiating it. If the name is absent from the definitions map it throws a RuntimeException listing available filter names, meaning the broker cannot construct the filter set requested by a policy.","triggerScenarios":"initializeBrokerEntryFilters or loadEntryFiltersForPolicy encounters a filter name in the configured/policy list that has no registered metadata (NAR missing, name mismatch).","commonSituations":"Same as policy validation but at load time: filter NAR directory misconfigured (wrong broker.conf entryFilter directory), NAR failed to register, policy referencing a filter present on one broker but not another in a heterogeneous cluster.","solutions":["Compare the requested name against the 'Available entry filters' list in the exception message and fix the spelling","Ensure the filter NAR exists in the entryFiltersDirectory on ALL brokers and restart","Update the topic/namespace policy to only reference deployed filters"],"exampleFix":"// before\nRuntimeException: No entry filter is found for name `Redact`. Available: [audit-filter]\n// after\nset entryFilterNames=audit-filter  // match an available filter name exactly","handlingStrategy":"validation","validationCode":"Map<String, EntryFilterMetaData> defs = provider.getDefinitions();\nif (!defs.containsKey(filterName)) {\n    throw new IllegalArgumentException(filterName + \" not deployed; available: \" + defs.keySet());\n}","typeGuard":"boolean filterDeployed(String name, Map<String, EntryFilterMetaData> defs) { return defs.get(name) != null; }","tryCatchPattern":"try {\n    filters = provider.loadEntryFilters(names);\n} catch (RuntimeException e) {\n    log.error(\"Entry filter load failed: {}\", e.getMessage()); // message lists available filters\n}","preventionTips":["Match the name exactly against the 'Available entry filters' list in the error","Automate NAR deployment to the entryFiltersDirectory on every broker","Test filter loading at broker startup, before policies reference it"],"tags":["pulsar","entry-filter","configuration","nar-loading"],"backgroundTag":"unknown-plugin-name","analyzedSha":"820761864ed8e2a7d2e52dd9763ad2ae117c1395","analyzedAt":"2026-09-06T00:14:20.138Z","contentChangedAt":"2026-09-06T00:14:20.138Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}