Compare commits

..

3 Commits

Author SHA1 Message Date
9698ea0c37 Fix #419 2023-09-26 19:51:17 -04:00
f345fc1a9a version bump, 2023-09-26 17:58:43 -04:00
660fbf75d8 Potential tpool_wait fix for #416, #397, #399 2023-09-26 17:58:07 -04:00
4 changed files with 34 additions and 36 deletions

View File

@ -516,32 +516,31 @@ database_iterator_t *database_create_document_iterator(database_t *db) {
CRASH_IF_NOT_SQLITE_OK( CRASH_IF_NOT_SQLITE_OK(
sqlite3_prepare_v2( sqlite3_prepare_v2(
db->db, db->db,
"WITH doc (j) AS (SELECT CASE" "WITH doc (id, j) AS ("
" WHEN emb.embedding IS NULL THEN" "SELECT"
" json_set(document.json_data, " " document.id,"
" '$._id', document.id, " " json_set(document.json_data,"
" '$.size', document.size, " " '$._id', document.id,"
" '$.mtime', document.mtime, " " '$.index', (SELECT id FROM descriptor),"
" '$.mime', mim.name," " '$.size', document.size,"
" '$.thumbnail', document.thumbnail_count, " " '$.mtime', document.mtime,"
" '$.tag', json_group_array((SELECT tag FROM tag WHERE document.id = tag.id)))" " '$.mime', mim.name,"
" ELSE" " '$.thumbnail', document.thumbnail_count,"
" json_set(document.json_data," " '$.tag', json_group_array(t.tag))"
" '$._id', document.id,"
" '$.size', document.size,"
" '$.mtime', document.mtime,"
" '$.mime', mim.name,"
" '$.thumbnail', document.thumbnail_count, "
" '$.tag', json_group_array((SELECT tag FROM tag WHERE document.id = tag.id)),"
" '$.emb', json_group_object(m.path, json(emb_to_json(emb.embedding))),"
" '$.embedding', 1)"
" END"
" FROM document" " FROM document"
" LEFT JOIN embedding emb ON document.id = emb.id" " LEFT JOIN mime mim ON mim.id = document.mime"
" LEFT JOIN model m ON emb.model_id = m.id" " LEFT JOIN tag t ON t.id = document.id"
" LEFT JOIN mime mim ON mim.id = document.mime"
" GROUP BY document.id)" " GROUP BY document.id)"
" SELECT json_set(j, '$.index', (SELECT id FROM descriptor)) FROM doc", "SELECT CASE"
" WHEN emb.embedding IS NULL THEN j"
" ELSE json_set(j,"
" '$.emb', json_group_object(m.path, json(emb_to_json(emb.embedding))),"
" '$.embedding', 1"
" ) END"
" FROM doc"
" LEFT JOIN embedding emb ON doc.id = emb.id"
" LEFT JOIN model m ON emb.model_id = m.id"
" GROUP BY doc.id",
-1, &stmt, NULL)); -1, &stmt, NULL));
database_iterator_t *iter = malloc(sizeof(database_iterator_t)); database_iterator_t *iter = malloc(sizeof(database_iterator_t));

View File

@ -105,7 +105,6 @@ typedef struct database {
sqlite3_stmt *fts_write_tag_stmt; sqlite3_stmt *fts_write_tag_stmt;
sqlite3_stmt *fts_model_size; sqlite3_stmt *fts_model_size;
char **tag_array; char **tag_array;
database_ipc_ctx_t *ipc_ctx; database_ipc_ctx_t *ipc_ctx;

View File

@ -51,11 +51,11 @@
#include <ctype.h> #include <ctype.h>
#include "git_hash.h" #include "git_hash.h"
#define VERSION "3.3.0" #define VERSION "3.3.2"
static const char *const Version = VERSION; static const char *const Version = VERSION;
static const int VersionMajor = 3; static const int VersionMajor = 3;
static const int VersionMinor = 3; static const int VersionMinor = 3;
static const int VersionPatch = 1; static const int VersionPatch = 2;
#ifndef SIST_PLATFORM #ifndef SIST_PLATFORM
#define SIST_PLATFORM unknown #define SIST_PLATFORM unknown

View File

@ -77,14 +77,14 @@ static void worker_thread_loop(tpool_t *pool) {
job_t *job = database_get_work(ProcData.ipc_db, pool->shm->job_type); job_t *job = database_get_work(ProcData.ipc_db, pool->shm->job_type);
if (job != NULL) { if (job != NULL) {
pthread_mutex_lock(&(pool->shm->data_mutex));
pool->shm->busy_count += 1;
pthread_mutex_unlock(&(pool->shm->data_mutex));
if (pool->shm->stop) { if (pool->shm->stop) {
break; break;
} }
pthread_mutex_lock(&(pool->shm->data_mutex));
pool->shm->busy_count += 1;
pthread_mutex_unlock(&(pool->shm->data_mutex));
if (job->type == JOB_PARSE_JOB) { if (job->type == JOB_PARSE_JOB) {
parse(job->parse_job); parse(job->parse_job);
} else if (job->type == JOB_BULK_LINE) { } else if (job->type == JOB_BULK_LINE) {
@ -200,11 +200,11 @@ static void *tpool_worker(void *arg) {
pool->shm->ipc_ctx.completed_job_count += 1; pool->shm->ipc_ctx.completed_job_count += 1;
pthread_mutex_unlock(&(pool->shm->ipc_ctx.mutex)); pthread_mutex_unlock(&(pool->shm->ipc_ctx.mutex));
pthread_mutex_lock(&(pool->shm->data_mutex));
pool->shm->busy_count -= 1;
pthread_mutex_unlock(&(pool->shm->data_mutex));
if (WIFSIGNALED(status)) { if (WIFSIGNALED(status)) {
pthread_mutex_lock(&(pool->shm->data_mutex));
pool->shm->busy_count -= 1;
pthread_mutex_unlock(&(pool->shm->data_mutex));
int crashed_thread_id = -1; int crashed_thread_id = -1;
for (int i = 0; i < MAX_THREADS; i++) { for (int i = 0; i < MAX_THREADS; i++) {
if (pool->shm->thread_id_to_pid_mapping[i] == pid) { if (pool->shm->thread_id_to_pid_mapping[i] == pid) {
@ -265,7 +265,7 @@ void tpool_wait(tpool_t *pool) {
if (pool->shm->ipc_ctx.job_count > 0) { if (pool->shm->ipc_ctx.job_count > 0) {
pthread_cond_wait(&(pool->shm->done_working_cond), &pool->shm->mutex); pthread_cond_wait(&(pool->shm->done_working_cond), &pool->shm->mutex);
} else { } else {
if (pool->shm->ipc_ctx.job_count == 0 && pool->shm->busy_count == 0) { if (pool->shm->ipc_ctx.job_count == 0 && pool->shm->busy_count <= 0) {
pool->shm->stop = TRUE; pool->shm->stop = TRUE;
break; break;
} }