c - 如何使用 MongoDB C 驱动程序和 FoundationDB 文档层进行事务处理?

标签 c objective-c transactions mongo-c-driver foundationdb

交易的 mongoc 文档使用 session 。因此,我尝试在与 session 关联的事务中插入文档。但我收到了错误

[ 3666]:    ERROR:       mongoc: Failed to start session: Server does not support sessions

如何使用 MongoDB C 驱动程序和 FoundationDB 文档层进行事务处理?

我当前的代码是:

- (int)insertUser:(User *)user {
    mongoc_client_session_t *session;
    mongoc_session_opt_t *session_opts;
    mongoc_transaction_opt_t *default_txn_opts;
    mongoc_transaction_opt_t *txn_opts;
    mongoc_read_concern_t *read_concern;
    mongoc_write_concern_t *write_concern;
    bson_t *doc;
    bson_t *insert_opts;
    bson_error_t err;
    default_txn_opts = mongoc_transaction_opts_new();
    read_concern = mongoc_read_concern_new();
    mongoc_read_concern_set_level(read_concern, "snapshot");
    mongoc_transaction_opts_set_read_concern(default_txn_opts, read_concern);
    session_opts = mongoc_session_opts_new();
    mongoc_session_opts_set_default_transaction_opts(session_opts, default_txn_opts);
    session = mongoc_client_start_session(client, session_opts, &err);
    if (!session) {
        MONGOC_ERROR("Failed to start session: %s", err.message);
        return EXIT_FAILURE;
    }
    txn_opts = mongoc_transaction_opts_new();
    write_concern = mongoc_write_concern_new();
    mongoc_write_concern_set_wmajority(write_concern, 1000);  // write timeout
    mongoc_transaction_opts_set_write_concern(txn_opts, write_concern);
}
int insertUserTransaction(id param, mongoc_client_session_t *session, mongoc_transaction_opt_t *txn_opts, User *user, bson_error_t *err) {
    bool ret = mongoc_client_session_start_transaction(session, txn_opts, err);
    if (!ret) {
        MONGOC_ERROR("Failed to start transaction: %s", err->message);
        return EXIT_FAILURE;
    }
    // ...
}

最佳答案

文档层尚不支持事务。它用于通过一些与 MongoDB 构造不同的构造来公开 FoundationDB 事务。但它们会被禁用一段时间。

关于c - 如何使用 MongoDB C 驱动程序和 FoundationDB 文档层进行事务处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57278097/

相关文章:

c - 在C中迭代结束时打印出迭代数组

c - 使用 pthread 我的应用程序内存使用量正在增长

objective-c - 是否可以将 NSDictionary 转换为具有匹配属性的对象?

ios - 在 SWIFT 倒计时中使用的访问字典

mysql - 多个查询上的数据库事务

sql - SQL Server 和 Oracle 的 EF 和 TransactionScope 无需升级/跨越到 DTC?

c - massif 的内存计数和 memcheck 的内存计数有什么区别?

c - srand() 触发访问不在映射区域内

iphone - MPMediaItem 到 AVAsset 到 .MP3

php - mysql事务中的更新——隔离