Example #1
0
int ol_unjar(ol_database *db, const char *key, size_t klen, unsigned char **data, size_t *dsize) {
    if (db->is_enabled(OL_F_DISABLE_TX, &db->feature_set) ||
        db->state == OL_S_COMMITTING || db->state == OL_S_STARTUP) {
        /* Fake a transaction: */
        ol_transaction stack_tx = {
            .tx_id = 0,
            .parent_db = NULL,
            .transaction_db = db
        };
        return olt_unjar(&stack_tx, key, klen, data, dsize);
    }

    ol_transaction *tx = olt_begin(db);
    int unjar_ret = OL_SUCCESS;
    check(tx != NULL, "Could not begin transaction.");

    unjar_ret = olt_unjar(tx, key, klen, data, dsize);
    check(unjar_ret == OL_SUCCESS, "Could not unjar.");

    check(olt_commit(tx) == OL_SUCCESS, "Could not commit transaction.");

    return OL_SUCCESS;

error:
    if (tx != NULL && unjar_ret != OL_SUCCESS)
        olt_abort(tx);

    return OL_FAILURE;
}
Example #2
0
vector *ol_bulk_unjar(ol_database *db, const ol_key_array keys, const size_t num_keys) {
    ol_transaction *tx = NULL;
    vector *to_return = NULL;
    check(db != NULL, "Cannot unjar on NULL database.");
    check((tx = olt_begin(db)) != NULL, "Could not begin transaction.");

    to_return = vector_new(sizeof(unsigned char *), 256);

    unsigned int i;
    for (i = 0; i < num_keys; i++) {
        const char *key = keys[i];
        unsigned char *item = NULL;
        size_t item_size = 0;
        olt_unjar(tx, key, strnlen(key, KEY_SIZE), &item, &item_size);

        if (item != NULL) {
            vector_append_ptr(to_return, item);
        } else {
            vector_append_ptr(to_return, NULL);
        }
    }

    check(olt_commit(tx) == 0, "Could not commit unjar transaction.");

    return to_return;

error:
    return NULL;
}
Example #3
0
int olt_exists(ol_transaction *tx, const char *key, size_t klen) {
    return olt_unjar(tx, key, klen, NULL, NULL);
}