【问题标题】:Unable to use Apache Ignite persistence in OpenDaylight无法在 OpenDaylight 中使用 Apache Ignite 持久性
【发布时间】:2018-07-04 06:51:04
【问题描述】:

我正在尝试用 Apache Ignite 替换 OpenDaylight 中的默认 LevelDB,在更改 akka.conf 文件并部署我在此处找到的 akka-persistence-ignite jar 后,我无法做到这一点。 https://github.com/Romeh/akka-persistance-ignite

我正在浏览 ODL 源代码,并将一些 Log.debug/print 语句放在 sal-distributed-datastore 模块的某些类中。

下面显示的是我将打印语句放入位于 org/opendaylight/controller/config/yang/config/actor_system_provider/impl 的类 ActorSystemProviderImpl 的构造函数中后得到的部分结果。我通过 config.entrySet() 打印了配置对象的内容。

akka.persistence.snapshot.ignite.class=Quoted("akka.persistence.
ignite.snapshot.IgniteSnapshotStore"),

akka.persistence.snapshot -   store.local.class=Quoted("org.opendaylight.controller.cluster.persistence.Loca
lSnapshotStore"),  

akka.persistence.journal.ignite.cache-prefix=Quoted("akka-

journal"), ignite.peerClassLoadingEnabled=ConfigBoolean(false),  

akka.akka.persistence.snapshot-

store.plugin=Quoted("akka.persistence.snapshot.ignite"), 

akka.persistence.journal.ignite.cache-backups=ConfigInt(1), 

akka.persistence.snapshot.ignite.cache-prefix=Quoted("akka-snapshot"),                                    

akka.persistence.journal.ignite.plugin-dispatcher=Quoted("ignite-dispatcher"),
akka.persistence.journal.ignite.class=Quoted("akka.persistence.ignite.journal.IgniteWriteJournal")

我想知道为什么在任何地方都没有调用 akka.persistence.ignite.journal.IgniteWriteJournal 类。日志和快照对象是在 ODL 源代码的哪一部分创建的? LevelDB 期刊究竟选在哪里?有没有什么关系
类 ActorSystemProviderImpl 中使用的 ActorSystem.create() 方法?

【问题讨论】:

  • 正如我从提供的 akka-persistance-ignite 源中看到的,它应该在 IgniteFactoryByConfig#apply() 内启动 Apache Ignite 实例,您能否检查您是否指定了 IGNITE_HOME 系统属性并正确指向 Ignite 安装ODL启动后,您在IGNITE_HOME/work目录下创建了目录?

标签: akka ignite opendaylight akka-persistence


【解决方案1】:

ODL 不会创建日志和快照实例 - 这是由 akka 在 actor 系统启动期间根据 akka.conf 中的配置在内部的某个时间点完成的。事实上,ODL 甚至不知道持久性后端——akka 通过 API 抽象隐藏了这一点。

我假设 ODL Shards 成功启动,在这种情况下必须配置和实例化一些持久性后端。如果使用默认的 LevelDB,那么将在 karaf 根目录下创建“journal”和“snapshots”目录。因此,如果您在 ODL 成功启动后没有看到这些目录创建,则说明它没有使用 LevelDB。如果是这样,那么假设它正在使用 ignite - 至于为什么它没有在构造函数中记录您的打印语句 - 也许您没有正确部署重新构建的库并进行更改?我根本不熟悉 ignite,但不应该有一些外部工件表明 ODL 正在使用 ignite,例如文件、数据库表吗?

【讨论】:

  • 是的。创建的“journal”和“snapshot”目录意味着使用默认的LevelDB。但是,如果没有使用自定义类“IgniteJournal”,为什么 sal-distributed-datastore 没有失败呢?你能说出在 sal-distributed-datastore 模块的源代码的哪一部分中使用了默认的 LevelDB 吗?
  • 正如我提到的 ODL 不直接与 LevelDB 或任何持久性后端交互 - 它与 akka 的 API 抽象接口 - akka 在内部处理持久性后端的实例化。
猜你喜欢
  • 2022-01-15
  • 2018-07-04
  • 2018-05-19
  • 2023-01-05
  • 2023-03-19
  • 2019-03-20
  • 2020-02-05
  • 2023-01-05
  • 2021-04-28
相关资源
最近更新 更多