Exemple #1
0
int fs_child_dependency(lsm_plugin_ptr c, lsm_fs *fs, lsm_string_list *files,
                        uint8_t *yes)
{
    int rc = LSM_ERR_OK;
    sqlite3 *db = NULL;
    char err_msg[_LSM_ERR_MSG_LEN];
    lsm_hash *sim_fs = NULL;
    uint64_t sim_fs_id = 0;
    char sql_cmd[_BUFF_SIZE];
    struct _vector *vec = NULL;

    _lsm_err_msg_clear(err_msg);

    _good(_check_null_ptr(err_msg, 2 /* argument count */, fs, yes), rc, out);

    _good(_get_db_from_plugin_ptr(err_msg, c, &db), rc, out);

    _good(_db_sql_trans_begin(err_msg, db), rc, out);

    sim_fs_id = _db_lsm_id_to_sim_id(lsm_fs_id_get(fs));

    _good(_db_sim_fs_of_sim_id(err_msg, db, sim_fs_id, &sim_fs), rc, out);

    /* Check fs snapshot status */
    _snprintf_buff(err_msg, rc, out, sql_cmd,
                   "SELECT * FROM " _DB_TABLE_FS_SNAPS_VIEW " WHERE fs_id=%"
                   PRIu64 ";", sim_fs_id);

    _good(_db_sql_exec(err_msg, db, sql_cmd, &vec), rc, out);
    if (_vector_size(vec) != 0) {
        *yes = 1;
        goto out;
    }
    _db_sql_exec_vec_free(vec);
    vec = NULL;
    /* Check fs clone(clone here means read and writeable snapshot) */
    _snprintf_buff(err_msg, rc, out, sql_cmd,
                   "SELECT * FROM " _DB_TABLE_FS_CLONES " WHERE src_fs_id = %"
                   PRIu64 ";", sim_fs_id);

    _good(_db_sql_exec(err_msg, db, sql_cmd, &vec), rc, out);
    if (_vector_size(vec) != 0)
        *yes = 1;

 out:
    _db_sql_exec_vec_free(vec);
    if (sim_fs != NULL)
        lsm_hash_free(sim_fs);
    _db_sql_trans_rollback(db);
    if (rc != LSM_ERR_OK) {
        if (yes != NULL)
            *yes = 0;
        lsm_log_error_basic(c, rc, err_msg);
    }
    return rc;
}
Exemple #2
0
/**
 * psl_suffix_exception_count:
 * @psl: PSL context pointer
 *
 * This function returns number of public suffix exceptions maintained by @psl.
 *
 * If the generation of built-in data has been disabled during compilation, 0 will be returned.
 *
 * Returns: Number of public suffix exceptions in PSL context.
 *
 * Since: 0.1
 */
int psl_suffix_exception_count(const psl_ctx_t *psl)
{
	if (psl == &_builtin_psl)
		return countof(suffix_exceptions);
	else if (psl)
		return _vector_size(psl->suffix_exceptions);
	else
		return 0;
}
Exemple #3
0
int fs_snapshot_list(lsm_plugin_ptr c, lsm_fs *fs, lsm_fs_ss **ss[],
                     uint32_t *ss_count, lsm_flag flags)
{
    int rc = LSM_ERR_OK;
    struct _vector *vec = NULL;
    sqlite3 *db = NULL;
    char err_msg[_LSM_ERR_MSG_LEN];
    char sql_cmd[_BUFF_SIZE];
    lsm_hash *sim_fs = NULL;
    uint64_t sim_fs_id = 0;

    _lsm_err_msg_clear(err_msg);
    _good(_check_null_ptr(err_msg, 2 /* argument count */, ss, ss_count),
          rc, out);

    _good(_get_db_from_plugin_ptr(err_msg, c, &db), rc, out);
    _good(_db_sql_trans_begin(err_msg, db), rc, out);
    /* Check fs existence */
    sim_fs_id = _db_lsm_id_to_sim_id(lsm_fs_id_get(fs));
    _good(_db_sim_fs_of_sim_id(err_msg, db, sim_fs_id, &sim_fs), rc, out);

    _snprintf_buff(err_msg, rc, out, sql_cmd,
                   "SELECT * from " _DB_TABLE_FS_SNAPS_VIEW
                   " WHERE fs_id=%" PRIu64 ";", sim_fs_id);

    _good(_db_sql_exec(err_msg, db, sql_cmd, &vec), rc, out);
    if (_vector_size(vec) == 0) {
        *ss = NULL;
        *ss_count = 0;
        goto out;
    }
    _vec_to_lsm_xxx_array(err_msg, vec, lsm_fs_ss, _sim_fs_snap_to_lsm, ss,
                          ss_count, rc, out);
 out:
    _db_sql_trans_rollback(db);
    _db_sql_exec_vec_free(vec);

    if (sim_fs != NULL)
        lsm_hash_free(sim_fs);

    if (rc != LSM_ERR_OK) {
        if ((ss != NULL) && (ss_count != NULL)) {
            if (*ss != NULL)
                lsm_fs_ss_record_array_free(*ss , *ss_count);
        }
        if (ss != NULL)
            *ss = NULL;
        if (ss_count != NULL)
            *ss_count = 0;
        lsm_log_error_basic(c, rc, err_msg);
    }
    return rc;
}
void @TYPE@_vector_append_vector(@TYPE@_vector_type * vector , const @TYPE@_vector_type * other) {
  @TYPE@_vector_append_many( vector , @TYPE@_vector_get_const_ptr( other ), @TYPE@_vector_size( other ));
}
void @TYPE@_vector_append_many(@TYPE@_vector_type * vector , const @TYPE@ * data , int length) {
  @TYPE@_vector_set_many( vector , @TYPE@_vector_size( vector ) , data , length);
}
Exemple #6
0
int fs_delete(lsm_plugin_ptr c, lsm_fs *fs, char **job, lsm_flag flags)
{
    int rc = LSM_ERR_OK;
    sqlite3 *db = NULL;
    char err_msg[_LSM_ERR_MSG_LEN];
    lsm_hash *sim_fs = NULL;
    uint64_t sim_fs_id = 0;
    char sql_cmd[_BUFF_SIZE];
    struct _vector *vec = NULL;

    _lsm_err_msg_clear(err_msg);
    _good(_check_null_ptr(err_msg, 2 /* argument count */, fs, job), rc, out);
    _good(_get_db_from_plugin_ptr(err_msg, c, &db), rc, out);

    _good(_db_sql_trans_begin(err_msg, db), rc, out);
    sim_fs_id = _db_lsm_id_to_sim_id(lsm_fs_id_get(fs));
    /* Check fs existence */
    _good(_db_sim_fs_of_sim_id(err_msg, db, sim_fs_id, &sim_fs), rc, out);
    /* Check fs snapshot status */
    _snprintf_buff(err_msg, rc, out, sql_cmd,
                   "SELECT * FROM " _DB_TABLE_FS_SNAPS_VIEW " WHERE fs_id=%"
                   PRIu64 ";", sim_fs_id);

    _good(_db_sql_exec(err_msg, db, sql_cmd, &vec), rc, out);
    if (_vector_size(vec) != 0) {
        rc = LSM_ERR_PLUGIN_BUG;
        /* TODO(Gris Ge): API does not have dedicate error for this scenario.*/
        _lsm_err_msg_set(err_msg, "Specified filesystem has snapshot");
        goto out;
    }
    _db_sql_exec_vec_free(vec);
    vec = NULL;
    /* Check fs clone(clone here means read and writeable snapshot) */
    _snprintf_buff(err_msg, rc, out, sql_cmd,
                   "SELECT * FROM " _DB_TABLE_FS_CLONES " WHERE src_fs_id = %"
                   PRIu64 ";", sim_fs_id);

    _good(_db_sql_exec(err_msg, db, sql_cmd, &vec), rc, out);
    if (_vector_size(vec) != 0) {
        rc = LSM_ERR_PLUGIN_BUG;
        /* We don't have error number for this yet */
        _lsm_err_msg_set(err_msg, "Specified fs is a clone source");
        goto out;
    }

    _good(_db_data_delete(err_msg, db, _DB_TABLE_FSS, sim_fs_id), rc, out);
    _good(_job_create(err_msg, db, LSM_DATA_TYPE_NONE, _DB_SIM_ID_NONE, job),
          rc, out);
    _good(_db_sql_trans_commit(err_msg, db), rc, out);

 out:
    _db_sql_exec_vec_free(vec);
    if (sim_fs != NULL)
        lsm_hash_free(sim_fs);

    if (rc != LSM_ERR_OK) {
        _db_sql_trans_rollback(db);
        lsm_log_error_basic(c, rc, err_msg);
        if (job != NULL)
            *job = NULL;
    } else {
        rc = LSM_ERR_JOB_STARTED;
    }
    return rc;
}