| Bug #42275 | Falcon hangs for any schedule set to " * * * * * " | ||
|---|---|---|---|
| Submitted: | 22 Jan 2009 19:16 | Modified: | 15 May 2009 17:06 |
| Reporter: | Kevin Lewis | Email Updates: | |
| Status: | Closed | Impact on me: | |
| Category: | MySQL Server: Falcon storage engine | Severity: | S3 (Non-critical) |
| Version: | 6.0.9 | OS: | Any |
| Assigned to: | Sergey Vojtovich | CPU Architecture: | Any |
| Tags: | F_HANDLER | ||
[22 Jan 2009 19:21]
Kevin Lewis
Sergey, This code change works in Falcon, but then the serve fails in sql_plugin.cc at line 622;
if (pi->state & (PLUGIN_IS_READY | PLUGIN_IS_UNINITIALIZED))
the variable pi is null
In the following code, I also capitalized "Invalid schedule...
----------------------------
Schedule::Schedule(const char *scheduleString)
{
+ int elementsFound = 0;
string = scheduleString;
memset(elements, 0, sizeof (elements));
const char *p = string;
deleted = false;
useCount = 1;
for (int n = 0; *p && n < SCHEDULE_ELEMENTS; ++n)
{
while (*p == ' ' || *p == '\t' || *p == '"')
++p;
if (!*p)
break;
if (*p == '*')
++p;
else if (ISDIGIT (*p))
{
ASSERT (n >= 0 && n < SCHEDULE_ELEMENTS);
+ elementsFound++;
elements [n] = new ScheduleElement (&p);
int max = maxValues [n];
if (n == WEEKDAY)
max = 7;
for (ScheduleElement *element = elements [n]; element; element = element->next)
if (element->from >= max || element->to >= max)
throw SQLEXCEPTION (RUNTIME_ERROR, "Invalid schedule string \"%s\"", (const char*) string);
}
else
throw SQLEXCEPTION (RUNTIME_ERROR, "Invalid schedule string \"%s\"", (const char*) string);
}
+ if (!elementsFound)
+ throw SQLEXCEPTION (RUNTIME_ERROR, "invalid schedule string \"%s\"", (const char*) string);
getNextEvent();
}
[26 Jan 2009 10:27]
Sergey Vojtovich
Reported another bug for the server issue, since it likely needs to be fixed in 5.1. See BUG#42345.
[2 Apr 2009 17:38]
Bugs System
Pushed into 6.0.11-alpha (revid:hky@sun.com-20090402144811-yc5kp8g0rjnhz7vy) (version source revid:svoj@sun.com-20090306124708-7z0yg7acbqm5xeex) (merge vers: 6.0.11-alpha) (pib:6)
[15 May 2009 17:06]
MC Brown
A note has been added to the 6.0.11 changelog: Using a falcon-scavenge-schedule of * * * * * would cause Falcon to never execute the required threads to operate.

Description: If I set falcon-scavenge-schedule= * * * * * with no values, then Falcon hangs in this loop void Schedule::getNextEvent() { . . . for (int cycles = 0;; ++cycles) { with 'cycles increasing forever. This will happen for any schedule setting with no real values. How to repeat: Start Falcon with falcon-scavenge-schedule= * * * * * Suggested fix: Scheduled background threads MUST run sometime. It makes no sense to say they never run. So assume this is an error. The constructor of a Schedule object validates the schedule supplied and returns "Invalid schedule string "a * * * * *", for example, if you do not use numeric values, like this; falcon-scavenge-schedule= a * * * * * In the same function, return "Invalid schedule string "* * * * *"