{"record":{"id":"bc5f59426da11893","repo":"alibaba/canal","slug":"null-metamanager","errorCode":null,"errorMessage":"null metaManager","messagePattern":"null metaManager","errorType":"validation","errorClass":"NullPointerException","httpStatus":null,"severity":"error","filePath":"parse/src/main/java/com/alibaba/otter/canal/parse/index/MetaLogPositionManager.java","lineNumber":26,"sourceCode":"\nimport com.alibaba.otter.canal.meta.CanalMetaManager;\nimport com.alibaba.otter.canal.parse.exception.CanalParseException;\nimport com.alibaba.otter.canal.protocol.ClientIdentity;\nimport com.alibaba.otter.canal.protocol.position.LogPosition;\nimport com.alibaba.otter.canal.store.helper.CanalEventUtils;\n\n/**\n * Created by yinxiu on 17/3/18. Email: marklin.hz@gmail.com\n */\npublic class MetaLogPositionManager extends AbstractLogPositionManager {\n\n    private final static Logger    logger = LoggerFactory.getLogger(MetaLogPositionManager.class);\n\n    private final CanalMetaManager metaManager;\n\n    public MetaLogPositionManager(CanalMetaManager metaManager){\n        if (metaManager == null) {\n            throw new NullPointerException(\"null metaManager\");\n        }\n\n        this.metaManager = metaManager;\n    }\n\n    @Override\n    public void stop() {\n        super.stop();\n\n        if (metaManager.isStart()) {\n            metaManager.stop();\n        }\n    }\n\n    @Override\n    public void start() {\n        super.start();\n","sourceCodeStart":8,"sourceCodeEnd":44,"githubUrl":"https://github.com/alibaba/canal/blob/87be50e87686a3e8af08c368d0e1ffd1f59eb04a/parse/src/main/java/com/alibaba/otter/canal/parse/index/MetaLogPositionManager.java#L8-L44","documentation":"MetaLogPositionManager stores binlog positions through a CanalMetaManager (the metadata backend: memory, zookeeper, or file). The delegate is mandatory, so the constructor throws NullPointerException when metaManager is null. Without a meta backend there is nowhere to read or write positions.","triggerScenarios":"Constructing `new MetaLogPositionManager(metaManager)` with metaManager == null. Happens when the metadata manager bean (memory/zk/file) was not created or its factory returned null.","commonSituations":"Instance config selects the meta-type position manager but the underlying CanalMetaManager bean (e.g. ZooKeeperCanalMetaManager needing a zkClient) failed to build; Spring property omitted; classpath missing the meta module.","solutions":["Confirm the CanalMetaManager bean is created and non-null before constructing MetaLogPositionManager.","Ensure the meta manager's own dependencies (zkClient, data dir) are satisfied so its factory does not return null.","Verify the meta module (com.alibaba.otter.canal.meta) is on the classpath."],"exampleFix":"// before\nnew MetaLogPositionManager(null);\n\n// after\nCanalMetaManager meta = new MemoryCanalMetaManager(); // or ZooKeeper/file variant\nnew MetaLogPositionManager(Objects.requireNonNull(meta));","handlingStrategy":"validation","validationCode":"CanalMetaManager meta = Objects.requireNonNull(metaManager, \"metaManager\");\nnew MetaLogPositionManager(meta);","typeGuard":"boolean hasMetaManager(CanalMetaManager m) { return m != null; }","tryCatchPattern":null,"preventionTips":["Build the CanalMetaManager bean first and assert non-null before constructing the position manager.","Ensure the meta module is on the classpath so the manager factory resolves."],"tags":["canal","log-position-manager","null-check","configuration","constructor"],"backgroundTag":null,"analyzedSha":"87be50e87686a3e8af08c368d0e1ffd1f59eb04a","analyzedAt":"2026-08-14T04:30:11.918Z","schemaVersion":2},"datasetVersion":"2026-08-14T05:17:29.042Z"}