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; }
/** * 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; }
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); }
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; }