删除或创建Datomic数据库时(使用Datomic Pro 0.9.4899),我收到以下异常:
Exception in thread "main" java.lang.IllegalArgumentException: :db.error/read-transactor-location-failed Could not read transactor location from storage
at datomic.error$arg.invoke(error.clj:55)
at datomic.coordination$check_peer_version.invoke(coordination.clj:138)
at datomic.coordination$lookup_compatible_transactor_endpoint.invoke(coordination.clj:149)
at datomic.peer$send_admin_request$fn__8594.invoke(peer.clj:713)
at datomic.peer$send_admin_request.invoke(peer.clj:707)
at datomic.peer$delete_database.invoke(peer.clj:745)
at clojure.lang.Var.invoke(Var.java:379)
at datomic.Peer.deleteDatabase(Peer.java:142)
at datomic.api$delete_database.invoke(api.clj:23)
...
这个例外是什么意思?它可能出现的常见原因是什么?
当交易者启动时,他们将他们的位置写入存储.他们实际上用每个心跳消息写出他们的位置.如果在对等方尝试连接时看到此消息,则表示没有写入处理器位置,或者它们无法从存储中读取(并且在尝试执行此操作时首先遇到此错误).
AWS配置的原因 - 比如AWS CloudFormation和DynamoDB作为您的存储 - 将使用未正确配置为写入存储的transactor属性文件启动.当对等方尝试连接到存储时,它们将无法读取交易者的位置.这可能是因为交易者和同行指向不同的存储.您还可能遇到权限问题,例如,transactor没有权限写入您指定的存储(安全组配置等)
无论哪种方式,这种情况的一般原因就是错误消息所说的 - 无法从存储中读取交易者位置.看起来这里缺少的细节是当系统健康且正确配置时如何发生这种情况:对等体从存储中读取交易者位置,并且交易者将其位置写为心跳的一部分(以及故障转移事件,备用交易者)将在接管时写下它的位置).有各种系统配置问题可能会导致这种情况.
| 归档时间: |
|
| 查看次数: |
473 次 |
| 最近记录: |