X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=citadel%2Fmodules%2Ffulltext%2Fserv_fulltext.c;h=131c5225622c173ed0d749adfd80bd630bf531f2;hb=a2fda4eafb51bbf58c04471522aa2d0f116c797e;hp=5ba8b5a37c74d21fee67fa7b2885b54ede4ff208;hpb=1e656d277fe91b7c4f5d73eab4a0dd0b7a173145;p=citadel.git diff --git a/citadel/modules/fulltext/serv_fulltext.c b/citadel/modules/fulltext/serv_fulltext.c index 5ba8b5a37..131c52256 100644 --- a/citadel/modules/fulltext/serv_fulltext.c +++ b/citadel/modules/fulltext/serv_fulltext.c @@ -42,7 +42,7 @@ #include "room_ops.h" #include "serv_fulltext.h" #include "ft_wordbreaker.h" - +#include "threads.h" #include "ctdl_module.h" @@ -81,7 +81,7 @@ void ft_flush_cache(void) { for (i=0; i<65536; ++i) { if ((time(NULL) - last_update) >= 10) { - lprintf(CTDL_INFO, + CtdlLogPrintf(CTDL_INFO, "Flushing index cache to disk (%d%% complete)\n", (i * 100 / 65536) ); @@ -95,7 +95,7 @@ void ft_flush_cache(void) { ftc_msgs[i] = NULL; } } - lprintf(CTDL_INFO, "Flushed index cache to disk (100%% complete)\n"); + CtdlLogPrintf(CTDL_INFO, "Flushed index cache to disk (100%% complete)\n"); } @@ -110,7 +110,7 @@ void ft_index_message(long msgnum, int op) { char *msgtext; int tok; - lprintf(CTDL_DEBUG, "ft_index_message() %s msg %ld\n", + CtdlLogPrintf(CTDL_DEBUG, "ft_index_message() %s msg %ld\n", (op ? "adding" : "removing") , msgnum ); @@ -125,11 +125,11 @@ void ft_index_message(long msgnum, int op) { CC->redirect_buffer = NULL; CC->redirect_len = 0; CC->redirect_alloc = 0; - lprintf(CTDL_DEBUG, "Wordbreaking message %ld...\n", msgnum); + CtdlLogPrintf(CTDL_DEBUG, "Wordbreaking message %ld...\n", msgnum); wordbreaker(msgtext, &num_tokens, &tokens); free(msgtext); - lprintf(CTDL_DEBUG, "Indexing message %ld [%d tokens]\n", msgnum, num_tokens); + CtdlLogPrintf(CTDL_DEBUG, "Indexing message %ld [%d tokens]\n", msgnum, num_tokens); if (num_tokens > 0) { for (i=0; iroom, qrbuf->QRname); CtdlForEachMessage(MSGS_ALL, 0L, NULL, NULL, NULL, ft_index_msg, NULL); } @@ -233,9 +236,13 @@ void do_fulltext_indexing(void) { * Make sure we don't run the indexer too frequently. * FIXME move the setting into config */ +/* + * The thread sleeps for 300 seconds so we don't need this here any more + if ( (time(NULL) - last_index) < 300L) { return; } +*/ /* * Check to see whether the fulltext index is up to date; if there @@ -246,7 +253,7 @@ void do_fulltext_indexing(void) { } run_time = time(NULL); - lprintf(CTDL_DEBUG, "do_fulltext_indexing() started (%ld)\n", run_time); + CtdlLogPrintf(CTDL_DEBUG, "do_fulltext_indexing() started (%ld)\n", run_time); /* * If we've switched wordbreaker modules, burn the index and start @@ -254,9 +261,9 @@ void do_fulltext_indexing(void) { */ begin_critical_section(S_CONTROL); if (CitControl.fulltext_wordbreaker != FT_WORDBREAKER_ID) { - lprintf(CTDL_DEBUG, "wb ver on disk = %d, code ver = %d\n", + CtdlLogPrintf(CTDL_DEBUG, "wb ver on disk = %d, code ver = %d\n", CitControl.fulltext_wordbreaker, FT_WORDBREAKER_ID); - lprintf(CTDL_INFO, "(re)initializing full text index\n"); + CtdlLogPrintf(CTDL_INFO, "(re)initializing full text index\n"); cdb_trunc(CDB_FULLTEXT); CitControl.MMfulltext = 0L; put_control(); @@ -283,7 +290,7 @@ void do_fulltext_indexing(void) { /* Here it is ... do each message! */ for (i=0; i= FT_MAX_CACHE) { - lprintf(CTDL_DEBUG, "Time to flush.\n"); + CtdlLogPrintf(CTDL_DEBUG, "Time to flush.\n"); ft_newhighest = ft_newmsgs[i]; break; } @@ -314,8 +321,12 @@ void do_fulltext_indexing(void) { ft_newmsgs = NULL; } end_time = time(NULL); - lprintf(CTDL_DEBUG, "do_fulltext_indexing() duration (%ld)\n", end_time - run_time); + if (CtdlThreadCheckStop()) + return; + + CtdlLogPrintf(CTDL_DEBUG, "do_fulltext_indexing() duration (%ld)\n", end_time - run_time); + /* Save our place so we don't have to do this again */ ft_flush_cache(); begin_critical_section(S_CONTROL); @@ -325,7 +336,7 @@ void do_fulltext_indexing(void) { end_critical_section(S_CONTROL); last_index = time(NULL); - lprintf(CTDL_DEBUG, "do_fulltext_indexing() finished\n"); + CtdlLogPrintf(CTDL_DEBUG, "do_fulltext_indexing() finished\n"); return; } @@ -335,22 +346,20 @@ void do_fulltext_indexing(void) { void *indexer_thread(void *arg) { struct CitContext indexerCC; - lprintf(CTDL_DEBUG, "indexer_thread() initializing\n"); + CtdlLogPrintf(CTDL_DEBUG, "indexer_thread() initializing\n"); memset(&indexerCC, 0, sizeof(struct CitContext)); indexerCC.internal_pgm = 1; indexerCC.cs_pid = 0; pthread_setspecific(MyConKey, (void *)&indexerCC ); - cdb_allocate_tsd(); - - while (!time_to_die) { + while (!CtdlThreadCheckStop()) { do_fulltext_indexing(); - sleep(1); + CtdlThreadSleep(300); } - lprintf(CTDL_DEBUG, "indexer_thread() exiting\n"); - pthread_exit(NULL); + CtdlLogPrintf(CTDL_DEBUG, "indexer_thread() exiting\n"); + return NULL; } @@ -486,12 +495,17 @@ void ft_delete_remove(char *room, long msgnum) CTDL_MODULE_INIT(fulltext) { - initialize_ft_cache(); - CtdlRegisterProtoHook(cmd_srch, "SRCH", "Full text search"); - CtdlRegisterDeleteHook(ft_delete_remove); - CtdlRegisterSearchFuncHook(ft_search, "fulltext"); - CtdlRegisterMaintenanceThread ("indexer", indexer_thread); - + if (!threading) + { + initialize_ft_cache(); + CtdlRegisterProtoHook(cmd_srch, "SRCH", "Full text search"); + CtdlRegisterDeleteHook(ft_delete_remove); + CtdlRegisterSearchFuncHook(ft_search, "fulltext"); + } + else + { + CtdlThreadCreate("Indexer", CTDLTHREAD_BIGSTACK, indexer_thread, NULL); + } /* return our Subversion id for the Log */ return "$Id$"; }