Commit 004d728a authored by unknown's avatar unknown
Browse files

Merge ahristov@bk-internal.mysql.com:/home/bk/mysql-5.1-new

into lmy004.:/work/mysql-5.1-bug16548


mysql-test/t/disabled.def:
  Auto merged
parents ef55f642 1204456b
Loading
Loading
Loading
Loading
+20 −65
Original line number Diff line number Diff line
@@ -6,9 +6,29 @@ Note 1305 Event event1 does not exist
create event event1 on schedule every 15 minute starts now() ends date_add(now(), interval 5 hour) DO begin end;
alter event event1 rename to event2;
alter event event2 disabled;
alter event event2 on completion not preserve;
alter event event2 on schedule every 1 year on completion preserve rename to event3 comment "new comment" do begin select 1; end__
alter event event3 rename to event2;
drop event event2;
create event event2 on schedule every 2 second starts now() ends date_add(now(), interval 5 hour) comment "some" DO begin end;
drop event event2;
create event e_43 on schedule every 1 second do set @a = 5;
set global event_scheduler = 1;
select sleep(2);
sleep(2)
0
alter event e_43 do alter event e_43 do set @a = 4;
select sleep(3);
sleep(3)
0
select db, name, body, status, interval_field, interval_value from mysql.event;
db	name	body	status	interval_field	interval_value
events_test	e_43	 set @a = 4	ENABLED	SECOND	1
drop event e_43;
select sleep(1);
sleep(1)
0
set global event_scheduler = 0;
create table t_event3 (a int, b float);
drop event if exists event3;
Warnings:
@@ -27,69 +47,4 @@ set event_scheduler=0;
ERROR HY000: Variable 'event_scheduler' is a GLOBAL variable and should be set with SET GLOBAL
set global event_scheduler=2;
ERROR 42000: Variable 'event_scheduler' can't be set to the value of '2'
set global event_scheduler=0;
select count(*) from mysql.event;
count(*)
0
select get_lock("test_lock1", 20);
get_lock("test_lock1", 20)
1
create event закачка on schedule every 10 hour do select get_lock("test_lock1", 20);
select count(*) from mysql.event;
count(*)
1
select release_lock("test_lock1");
release_lock("test_lock1")
1
drop event закачка;
select count(*) from mysql.event;
count(*)
0
set global event_scheduler=1;
select get_lock("test_lock2", 20);
get_lock("test_lock2", 20)
1
create event закачка on schedule every 10 hour do select get_lock("test_lock2", 20);
select sleep(2);
sleep(2)
0
select release_lock("test_lock2");
release_lock("test_lock2")
1
drop event закачка;
set global event_scheduler=1;
select get_lock("test_lock2_1", 20);
get_lock("test_lock2_1", 20)
1
create event закачка21 on schedule every 10 hour do select get_lock("test_lock2_1", 20);
select sleep(2);
sleep(2)
0
set global event_scheduler=0;
select sleep(2);
sleep(2)
0
select release_lock("test_lock2_1");
release_lock("test_lock2_1")
1
select sleep(2);
sleep(2)
0
drop event закачка21;
set global event_scheduler=1;
select get_lock("test_lock3", 20);
get_lock("test_lock3", 20)
1
create event закачка on schedule every 10 hour do select get_lock("test_lock3", 20);
select sleep(2);
sleep(2)
0
drop event закачка;
select release_lock("test_lock3");
release_lock("test_lock3")
1
set global event_scheduler=0;
select sleep(2);
sleep(2)
0
drop database events_test;
+1 −1
Original line number Diff line number Diff line
@@ -12,6 +12,7 @@

sp-goto         : GOTO is currently is disabled - will be fixed in the future
rpl_bit_npk     : Bug #13418
events          : Test case instability - infinite locking. To be fixed.
func_group      : Bug #15448
func_math       : Bug #15448
group_min_max   : Bug #15448 
@@ -20,7 +21,6 @@ subselect : Bug#15706
ps_7ndb         : dbug assert in RBR mode when executing test suite
rpl_ddl         : Bug#15963 SBR does not show "Definer" correctly
partition_03ndb : Bug#16385
events          : Affects flush test case. A table lock not released somewhere
ndb_binlog_basic   : Results are not deterministic, Tomas will fix
rpl_ndb_basic   : Bug#16228
rpl_sp          : Bug #16456
+68 −53
Original line number Diff line number Diff line
@@ -4,11 +4,26 @@ drop event if exists event1;
create event event1 on schedule every 15 minute starts now() ends date_add(now(), interval 5 hour) DO begin end;
alter event event1 rename to event2;
alter event event2 disabled;
alter event event2 on completion not preserve;
delimiter __;
alter event event2 on schedule every 1 year on completion preserve rename to event3 comment "new comment" do begin select 1; end__
delimiter ;__
alter event event3 rename to event2;

drop event event2;
create event event2 on schedule every 2 second starts now() ends date_add(now(), interval 5 hour) comment "some" DO begin end;
drop event event2;

create event e_43 on schedule every 1 second do set @a = 5;
set global event_scheduler = 1;
select sleep(2);
alter event e_43 do alter event e_43 do set @a = 4;
select sleep(3);
select db, name, body, status, interval_field, interval_value from mysql.event;
drop event e_43;
select sleep(1);
set global event_scheduler = 0;

create table t_event3 (a int, b float);
drop event if exists event3;
create event event3 on schedule every 50 + 10 minute starts date_add("20010101", interval 5 minute) ends date_add("20151010", interval 5 day) comment "portokala_comment" DO insert into t_event3 values (unix_timestamp(), rand());
@@ -28,67 +43,67 @@ set event_scheduler=0;
--error 1231
set global event_scheduler=2;

set global event_scheduler=0;
select count(*) from mysql.event;
select get_lock("test_lock1", 20);
create event закачка on schedule every 10 hour do select get_lock("test_lock1", 20);
select count(*) from mysql.event;
#show processlist;
select release_lock("test_lock1");
drop event закачка;
select count(*) from mysql.event;

set global event_scheduler=1;
select get_lock("test_lock2", 20);
create event закачка on schedule every 10 hour do select get_lock("test_lock2", 20);
select sleep(2);
#show processlist;
select release_lock("test_lock2");
drop event закачка;

#set global event_scheduler=0;
#select count(*) from mysql.event;
#select get_lock("test_lock1", 20);
#create event закачка on schedule every 10 hour do select get_lock("test_lock1", 20);
#select count(*) from mysql.event;
##show processlist;
#select release_lock("test_lock1");
#drop event закачка;
#select count(*) from mysql.event;
#
# 1. get a lock
# 2. create an event
# 3. sleep so it has time to start
# 4. should appear in processlist
# 5. kill the scheduler, it will wait for the child to stop
# 6. both processes should be there on show processlist
# 7. release the lock and sleep, both scheduler and child should end
set global event_scheduler=1;
select get_lock("test_lock2_1", 20);
create event закачка21 on schedule every 10 hour do select get_lock("test_lock2_1", 20);
select sleep(2);
#show processlist;
set global event_scheduler=0;
select sleep(2);
#set global event_scheduler=1;
#select get_lock("test_lock2", 20);
#create event закачка on schedule every 10 hour do select get_lock("test_lock2", 20);
#select sleep(2);
#show processlist;
select release_lock("test_lock2_1");
select sleep(2);
#show processlist;
drop event закачка21;
#select release_lock("test_lock2");
#drop event закачка;

set global event_scheduler=1;
select get_lock("test_lock3", 20);
create event закачка on schedule every 10 hour do select get_lock("test_lock3", 20);
select sleep(2);
##
## 1. get a lock
## 2. create an event
## 3. sleep so it has time to start
## 4. should appear in processlist
## 5. kill the scheduler, it will wait for the child to stop
## 6. both processes should be there on show processlist
## 7. release the lock and sleep, both scheduler and child should end
#set global event_scheduler=1;
#select get_lock("test_lock2_1", 20);
#create event закачка21 on schedule every 10 hour do select get_lock("test_lock2_1", 20);
#select sleep(2);
##show processlist;
#set global event_scheduler=0;
#select sleep(2);
##show processlist;
#select release_lock("test_lock2_1");
#select sleep(2);
##show processlist;
#drop event закачка21;

#set global event_scheduler=1;
#select get_lock("test_lock3", 20);
#create event закачка on schedule every 10 hour do select get_lock("test_lock3", 20);
#select sleep(2);
#show processlist;
drop event закачка;
select release_lock("test_lock3");
#drop event закачка;
#select release_lock("test_lock3");

#
# test with very often occuring event
# (disabled for now, locks)
#select get_lock("test_lock4", 20);
#create event закачка4 on schedule every 1 second do select get_lock("test_lock4", 20);
#select sleep(3);
#show processlist;
#drop event закачка4;
#select release_lock("test_lock4");
##select get_lock("test_lock4", 20);
##create event закачка4 on schedule every 1 second do select get_lock("test_lock4", 20);
##select sleep(3);
##show processlist;
##drop event закачка4;
##select release_lock("test_lock4");

set global event_scheduler=0;
select sleep(2);
#show processlist;
#the following locks for some reason and is a bug, commented for now
#select count(*) from mysql.event;
#set global event_scheduler=0;
#select sleep(2);
##show processlist;
##the following locks for some reason and is a bug, commented for now
##select count(*) from mysql.event;

drop database events_test;
+12 −6
Original line number Diff line number Diff line
@@ -237,8 +237,9 @@ evex_fill_row(THD *thd, TABLE *table, event_timed *et, my_bool is_update)
    DBUG_RETURN(EVEX_GET_FIELD_FAILED);
  }
  
  DBUG_PRINT("info", ("dbname.len=%d",et->dbname.length));  
  DBUG_PRINT("info", ("name.len=%d",et->name.length));  
  DBUG_PRINT("info", ("dbname.len=[%s]",et->dbname.str));  
  DBUG_PRINT("info", ("name.len=[%s]",et->name.str));  
  DBUG_PRINT("info", ("body=[%s]",et->body.str));  

  if (table->field[field_num= EVEX_FIELD_DB]->
                  store(et->dbname.str, et->dbname.length, system_charset_info))
@@ -674,7 +675,8 @@ evex_load_and_compile_event(THD * thd, sp_name *spn, bool use_lock)


static int
evex_remove_from_cache(LEX_STRING *db, LEX_STRING *name, bool use_lock)
evex_remove_from_cache(LEX_STRING *db, LEX_STRING *name, bool use_lock,
                       bool is_drop)
{
  uint i;

@@ -697,14 +699,18 @@ evex_remove_from_cache(LEX_STRING *db, LEX_STRING *name, bool use_lock)
    {
      if (!et->is_running())
      {
        DBUG_PRINT("evex_remove_from_cache", ("not running - free and delete"));
        et->free_sp();
        delete et;
      }
      else
      {
        DBUG_PRINT("evex_remove_from_cache",
               ("running.defer mem free. is_drop=%d", is_drop));
        et->flags|= EVENT_EXEC_NO_MORE;
        et->dropped= true;
        et->dropped= is_drop;
      }
      DBUG_PRINT("evex_remove_from_cache", ("delete from queue"));
      evex_queue_delete_element(&EVEX_EQ_NAME, i);
      // ok, we have cleaned
      goto done;
@@ -805,7 +811,7 @@ evex_update_event(THD *thd, event_timed *et, sp_name *new_name,
    UNLOCK_MUTEX_AND_BAIL_OUT(LOCK_evex_running, done);

  VOID(pthread_mutex_lock(&LOCK_event_arrays));
  evex_remove_from_cache(&et->dbname, &et->name, false);
  evex_remove_from_cache(&et->dbname, &et->name, false, false);
  if (et->status == MYSQL_EVENT_ENABLED)
  {
    if (new_name)
@@ -874,7 +880,7 @@ evex_drop_event(THD *thd, event_timed *et, bool drop_if_exists,

  VOID(pthread_mutex_lock(&LOCK_evex_running));
  if (evex_is_running)
    ret= evex_remove_from_cache(&et->dbname, &et->name, true);
    ret= evex_remove_from_cache(&et->dbname, &et->name, true, true);
  VOID(pthread_mutex_unlock(&LOCK_evex_running));

done:
+6 −0
Original line number Diff line number Diff line
@@ -492,12 +492,18 @@ event_executor_worker(void *event_void)
    sql_print_information("    EVEX EXECUTED event %s.%s  [EXPR:%d]. RetCode=%d",
                          event->dbname.str, event->name.str,
                          (int) event->expression, ret);
    if (ret == EVEX_COMPILE_ERROR)
      sql_print_information("    EVEX COMPILE ERROR for event %s.%s",
                             event->dbname.str, event->name.str);
    
    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)
  {
    DBUG_PRINT("event_executor_worker",
               ("%s exec no more. to drop=%d",event->name.str, event->dropped));
    if (event->dropped)
      event->drop(thd);
    delete event;
Loading