summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorandrey@lmy004. <>2006-01-10 11:31:45 +0100
committerandrey@lmy004. <>2006-01-10 11:31:45 +0100
commit64d2033f091f0770be55b5ae50c8e30e90a7a150 (patch)
treec9ef0d33d8949cc7e3859f9b8316b820065208de
parent3cd5a23f4951ecb79959bd00dc9ab604de472b91 (diff)
downloadmariadb-git-64d2033f091f0770be55b5ae50c8e30e90a7a150.tar.gz
WL 1034 update
(pre-push cleanups removing debugging code)
-rw-r--r--sql/event.cc38
-rw-r--r--sql/event.h13
-rw-r--r--sql/event_executor.cc25
3 files changed, 53 insertions, 23 deletions
diff --git a/sql/event.cc b/sql/event.cc
index 006afbe949b..26f960e4bae 100644
--- a/sql/event.cc
+++ b/sql/event.cc
@@ -100,13 +100,17 @@ my_time_compare(TIME *a, TIME *b)
}
-inline int
+int
event_timed_compare(event_timed *a, event_timed *b)
{
return my_time_compare(&a->execute_at, &b->execute_at);
}
+/*
+ Callback for the prio queue
+*/
+
int
event_timed_compare_q(void *vptr, byte* a, byte *b)
{
@@ -244,14 +248,11 @@ evex_fill_row(THD *thd, TABLE *table, event_timed *et, my_bool is_update)
store(et->name.str, et->name.length, system_charset_info))
goto trunc_err;
- table->field[EVEX_FIELD_ON_COMPLETION]->set_notnull();
+ // both ON_COMPLETION and STATUS are NOT NULL thus not calling set_notnull()
table->field[EVEX_FIELD_ON_COMPLETION]->store((longlong)et->on_completion);
- table->field[EVEX_FIELD_STATUS]->set_notnull();
table->field[EVEX_FIELD_STATUS]->store((longlong)et->status);
-// et->status_changed= false;
- // ToDo: Andrey. How to use users current charset?
if (et->body.str)
if (table->field[field_num= EVEX_FIELD_BODY]->
store(et->body.str, et->body.length, system_charset_info))
@@ -260,13 +261,15 @@ evex_fill_row(THD *thd, TABLE *table, event_timed *et, my_bool is_update)
if (et->starts.year)
{
table->field[EVEX_FIELD_STARTS]->set_notnull();// set NULL flag to OFF
- table->field[EVEX_FIELD_STARTS]->store_time(&et->starts, MYSQL_TIMESTAMP_DATETIME);
+ table->field[EVEX_FIELD_STARTS]->
+ store_time(&et->starts, MYSQL_TIMESTAMP_DATETIME);
}
if (et->ends.year)
{
table->field[EVEX_FIELD_ENDS]->set_notnull();
- table->field[EVEX_FIELD_ENDS]->store_time(&et->ends, MYSQL_TIMESTAMP_DATETIME);
+ table->field[EVEX_FIELD_ENDS]->
+ store_time(&et->ends, MYSQL_TIMESTAMP_DATETIME);
}
if (et->expression)
@@ -276,10 +279,10 @@ evex_fill_row(THD *thd, TABLE *table, event_timed *et, my_bool is_update)
table->field[EVEX_FIELD_TRANSIENT_INTERVAL]->set_notnull();
/*
- In the enum (C) intervals start from 0 but in mysql enum valid values start
- from 1. Thus +1 offset is needed!
+ In the enum (C) intervals start from 0 but in mysql enum valid values start
+ from 1. Thus +1 offset is needed!
*/
- table->field[EVEX_FIELD_TRANSIENT_INTERVAL]->store((longlong)et->interval + 1);
+ table->field[EVEX_FIELD_TRANSIENT_INTERVAL]->store((longlong)et->interval+1);
}
else if (et->execute_at.year)
{
@@ -288,8 +291,7 @@ evex_fill_row(THD *thd, TABLE *table, event_timed *et, my_bool is_update)
table->field[EVEX_FIELD_EXECUTE_AT]->store_time(&et->execute_at,
MYSQL_TIMESTAMP_DATETIME);
- //this will make it NULL because we don't call set_notnull
- table->field[EVEX_FIELD_TRANSIENT_INTERVAL]->store((longlong) 0);
+ table->field[EVEX_FIELD_TRANSIENT_INTERVAL]->set_null();
}
else
{
@@ -693,8 +695,16 @@ evex_remove_from_cache(LEX_STRING *db, LEX_STRING *name, bool use_lock)
if (!sortcmp_lex_string(*name, et->name, system_charset_info) &&
!sortcmp_lex_string(*db, et->dbname, system_charset_info))
{
- et->free_sp();
- delete et;
+ if (!et->is_running())
+ {
+ et->free_sp();
+ delete et;
+ }
+ else
+ {
+ et->flags|= EVENT_EXEC_NO_MORE;
+ et->dropped= true;
+ }
evex_queue_delete_element(&EVEX_EQ_NAME, i);
// ok, we have cleaned
goto done;
diff --git a/sql/event.h b/sql/event.h
index 975b9953611..2a23534b97f 100644
--- a/sql/event.h
+++ b/sql/event.h
@@ -113,6 +113,7 @@ public:
free_sp();
}
+
void
init();
@@ -164,6 +165,18 @@ public:
int
compile(THD *thd, MEM_ROOT *mem_root= NULL);
+ my_bool
+ is_running()
+ {
+ my_bool ret;
+
+ VOID(pthread_mutex_lock(&this->LOCK_running));
+ ret= running;
+ VOID(pthread_mutex_unlock(&this->LOCK_running));
+
+ return ret;
+ }
+
void free_sp()
{
delete sphead;
diff --git a/sql/event_executor.cc b/sql/event_executor.cc
index c8e7ebcdb5a..07e53d62a5e 100644
--- a/sql/event_executor.cc
+++ b/sql/event_executor.cc
@@ -313,10 +313,8 @@ event_executor_main(void *arg)
{
pthread_t th;
- printf("[%10s] exec at [%llu]\n", et->name.str,TIME_to_ulonglong_datetime(&et->execute_at));
et->mark_last_executed();
et->compute_next_execution_time();
- printf("[%10s] next at [%llu]\n\n\n", et->name.str,TIME_to_ulonglong_datetime(&et->execute_at));
et->update_fields(thd);
DBUG_PRINT("info", (" Spawning a thread %d", ++iter_num));
#ifndef DBUG_FAULTY_THR
@@ -461,11 +459,19 @@ event_executor_worker(void *event_void)
is_schema_db(event->dbname.str)))
{
int ret;
- DBUG_PRINT("info", (" EVEX EXECUTING event for event %s.%s [EXPR:%d]", event->dbname.str, event->name.str,(int) event->expression));
- sql_print_information(" EVEX EXECUTING event for event %s.%s [EXPR:%d]", event->dbname.str, event->name.str,(int) event->expression);
+ DBUG_PRINT("info", (" EVEX EXECUTING event %s.%s [EXPR:%d]",
+ event->dbname.str, event->name.str,(int) event->expression));
+ sql_print_information(" EVEX EXECUTING event %s.%s [EXPR:%d]",
+ event->dbname.str, event->name.str,(int) event->expression);
+
ret= event->execute(thd, &worker_mem_root);
- sql_print_information(" EVEX EXECUTED event for event %s.%s [EXPR:%d]. RetCode=%d", event->dbname.str, event->name.str,(int) event->expression, ret);
- DBUG_PRINT("info", (" EVEX EXECUTED event for event %s.%s [EXPR:%d]. RetCode=%d", event->dbname.str, event->name.str,(int) event->expression, ret));
+
+ sql_print_information(" EVEX EXECUTED event %s.%s [EXPR:%d]. RetCode=%d",
+ event->dbname.str, event->name.str,
+ (int) event->expression, ret);
+ DBUG_PRINT("info", (" EVEX EXECUTED event %s.%s [EXPR:%d]. RetCode=%d",
+ event->dbname.str, event->name.str,
+ (int) event->expression, ret));
}
if ((event->flags & EVENT_EXEC_NO_MORE) || event->status==MYSQL_EVENT_DISABLED)
{
@@ -554,7 +560,7 @@ evex_load_events_from_db(THD *thd)
}
if (et->status != MYSQL_EVENT_ENABLED)
{
- DBUG_PRINT("evex_load_events_from_db",("Event %s is disabled", et->name.str));
+ DBUG_PRINT("evex_load_events_from_db",("%s is disabled",et->name.str));
delete et;
continue;
}
@@ -589,8 +595,9 @@ end:
thd->version--; // Force close to free memory
close_thread_tables(thd);
- sql_print_information("Scheduler loaded %d events", count);
- DBUG_PRINT("info", ("Finishing with status code %d. Loaded %d events", ret, count));
+ sql_print_information("Scheduler loaded %d event%s", count, (count == 1)?"":"s");
+ DBUG_PRINT("info", ("Status code %d. Loaded %d event(s)", ret, count));
+
DBUG_RETURN(ret);
}