Skip to content
Extraits de code Groupes Projets
Vérifiée Valider 2704e311 rédigé par Kubat's avatar Kubat
Parcourir les fichiers

CACHE: Retrieve all kara ids in the caching thread

parent 38494099
Aucune branche associée trouvée
Aucune étiquette associée trouvée
1 requête de fusion!157Caching for karas & refactor & others
......@@ -65,6 +65,8 @@ bool database_get_kara_mtime_path (volatile sqlite3 *db, char filepath[PATH_MA
bool database_get_kara_duration_path(volatile sqlite3 *db, char filepath[PATH_MAX], uint64_t *duration);
void database_cache_kara (volatile sqlite3 *db, int id);
void database_get_all_kara(volatile sqlite3 *db, int **ret_ids, size_t *ret_ids_len);
/* Update the database. */
bool database_update (volatile sqlite3 *db, const char *kara_dir, int check_timestamp);
bool database_update_add (volatile sqlite3 *db, const char *kara_path, struct kara_metadata *mdt, uint64_t id, bool avail);
......
......@@ -171,6 +171,26 @@ end:
return 0;
}
static pthread_t ___thread_wlaker;
PRIVATE_FUNCTION void *
___caching_walker(void *args)
{
volatile sqlite3 *db = (volatile sqlite3 *)args;
size_t ids_count = 0;
int *ids = NULL;
database_get_all_kara(db, &ids, &ids_count);
if (ids == NULL || ids_count == 0) {
LOG_ERROR("CACHING", "No kara present in the database, exit caching thread");
return NULL;
}
free(ids);
return NULL;
}
int
launch_caching(va_list *args)
{
......@@ -181,7 +201,9 @@ launch_caching(va_list *args)
if (database_get_version(db) == LKT_DATABASE_VERSION_MK_7_1) {
ret_code = 0;
LOG_ERROR("CACHING", "Caching on correct db version mk-7.1, but is not implemented");
LOG_INFO("CACHING", "Caching on correct db version mk-7.1");
assert(!pthread_create(&___thread_wlaker, NULL, ___caching_walker, (void *)db));
assert(!pthread_detach(___thread_wlaker));
}
else {
......
......@@ -397,3 +397,43 @@ error:
sqlite3_finalize(stmt);
return ret;
}
void
database_get_all_kara(volatile sqlite3 *db, int **ret_ids, size_t *ret_ids_len)
{
static const char *SQL_DATA = "SELECT id FROM kara;";
static const char *SQL_COUNT = "SELECT count(id) FROM kara;";
sqlite3_stmt *stmt = NULL;
size_t index = 0;
/* Get storage for all IDs */
SQLITE_PREPARE(db, stmt, SQL_COUNT, error);
SQLITE_STEP_ROW(db, stmt, error);
*ret_ids_len = sqlite3_column_int64(stmt, 0);
sqlite3_finalize(stmt);
stmt = NULL;
*ret_ids = (int *)safe_malloc((*ret_ids_len) * sizeof(int));
/* Get all the IDs */
SQLITE_PREPARE(db, stmt, SQL_DATA, error);
FOR_EVER {
SQLITE_STEP_ROW(db, stmt, done);
(*ret_ids)[index] = sqlite3_column_int(stmt, 0);
index++;
}
done:
LOG_INFO("DB", "Done retrieving all the kara IDs, %ld kara retrieved", *ret_ids_len);
sqlite3_finalize(stmt);
return;
error:
LOG_ERROR("DB", "An error occured during sql queries... oupsy");
if (stmt != NULL)
sqlite3_finalize(stmt);
if ((*ret_ids) != NULL)
free(*ret_ids);
*ret_ids = NULL;
*ret_ids_len = 0;
return;
}
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Veuillez vous inscrire ou vous pour commenter