【问题标题】:Datomic deletes databasesDatomic 删除数据库
【发布时间】:2017-09-18 00:03:14
【问题描述】:

我将我的 Clojure 应用程序部署到 AWS,当我的用户开始使用我的应用程序时,我还拥有带有 DynamoDBDatomic Transactor(EC2)一段时间后发生了一些事情,Datomic Transactor 重新启动(出于某种原因),我的应用程序变得无响应,所以我重新启动了我的应用程序服务器(以重新建立事务处理程序连接)然后没有用户数据,根本没有数据!?

我使用的是相同的 URI("datomic:ddb://us-east-1/my-table/my-db"),我也没有不要调用 delete-db 或类似的函数。

我只调用 d/create-database 和 d/connect 来连接 Datomic。

这发生在我的开发过程中,但我不在乎那个时候,因为我认为我做错了什么或类似的事情。

如何恢复旧数据?

P.S:我还可以看到 DynamoDB 表有一些存储大小,比如 900KB 我假设我的数据在那里?虽然只有几个用户。

我的 Datomic 版本:"0.9.5561"

这是我的代码

(defn establish-conn
  []
  (try 
      ;conf/get returns DB URI like: "datomic:ddb://us-east-1/my-table/my-db"
      (d/create-database (conf/get :db-uri))
      (reset! conn (d/connect (conf/get :db-uri)))
    (catch Throwable t
      (log/error "Could not establish db conn." t))))

我还有这段代码用于从 Transactor 故障/不可用等中恢复连接。

(defn fix-if-conn-ex
  ;;getting exception's error message
  [err-msg]
  (when (any? (str/includes? err-msg %) [":db.error/connection-released"
                                         ":db.error/transactor-unavailable"])
    (db/establish-conn)))

【问题讨论】:

  • 您的连接代码可能有问题,可以给我们看看吗?
  • @ValentinWaeselynck 我用我的代码编辑了问题。
  • 我看不出有什么问题,所以我会质疑 conf/get 的作用,以及您如何观察到数据库为空。最后,我会确保代码的其他部分不会干扰conn 原子。
  • @ValentinWaeselynck conf/get 只返回 DB URI,即“datomic:ddb://us-east-1/my-table/my-db”。如果交易者失败/重新启动/成为不可用我检查那些异常,例如(:db.error/connection-released,:db.error/transactor-unavailable)并重新运行此建立连接以恢复连接问题。我认为Datomic中可能存在错误?并且丢失数据非常严重是不可接受的。
  • @ValentinWaeselynck 在我重新启动我的网络应用程序后,我看不到任何数据(用户)我也从我的 repl 连接到交易者(可以肯定)并列出我拥有的所有数据根本没有数据一些它是如何被删除的,并且发生了两次。另外我已经更新了上面的代码。

标签: clojure datomic


【解决方案1】:

我无法在我的暂存环境中使用最新的 Datomic 版本 "0.9.5561.56" 重现该问题,我认为该问题已解决。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-02
    相关资源
    最近更新 更多