Bug #26386 ndbd wont start after changing schema

    backported error code from 5.1
    split error check when reading schema file
parent e53efba0
...@@ -80,6 +80,7 @@ typedef ndbd_exit_classification_enum ndbd_exit_classification; ...@@ -80,6 +80,7 @@ typedef ndbd_exit_classification_enum ndbd_exit_classification;
#define NDBD_EXIT_SR_UNDOLOG 2313 #define NDBD_EXIT_SR_UNDOLOG 2313
#define NDBD_EXIT_SINGLE_USER_MODE 2314 #define NDBD_EXIT_SINGLE_USER_MODE 2314
#define NDBD_EXIT_NODE_DECLARED_DEAD 2315 #define NDBD_EXIT_NODE_DECLARED_DEAD 2315
#define NDBD_EXIT_SR_SCHEMAFILE 2316
#define NDBD_EXIT_MEMALLOC 2327 #define NDBD_EXIT_MEMALLOC 2327
#define NDBD_EXIT_BLOCK_JBUFCONGESTION 2334 #define NDBD_EXIT_BLOCK_JBUFCONGESTION 2334
#define NDBD_EXIT_TIME_QUEUE_SHORT 2335 #define NDBD_EXIT_TIME_QUEUE_SHORT 2335
......
...@@ -1069,14 +1069,24 @@ void Dbdict::readSchemaConf(Signal* signal, ...@@ -1069,14 +1069,24 @@ void Dbdict::readSchemaConf(Signal* signal,
for (Uint32 n = 0; n < xsf->noOfPages; n++) { for (Uint32 n = 0; n < xsf->noOfPages; n++) {
SchemaFile * sf = &xsf->schemaPage[n]; SchemaFile * sf = &xsf->schemaPage[n];
bool ok = bool ok = false;
memcmp(sf->Magic, NDB_SF_MAGIC, sizeof(sf->Magic)) == 0 && if (memcmp(sf->Magic, NDB_SF_MAGIC, sizeof(sf->Magic)) != 0)
sf->FileSize != 0 && { jam(); }
sf->FileSize % NDB_SF_PAGE_SIZE == 0 && else if (sf->FileSize == 0)
sf->FileSize == sf0->FileSize && { jam(); }
sf->PageNumber == n && else if (sf->FileSize % NDB_SF_PAGE_SIZE != 0)
computeChecksum((Uint32*)sf, NDB_SF_PAGE_SIZE_IN_WORDS) == 0; { jam(); }
ndbrequire(ok || !crashInd); else if (sf->FileSize != sf0->FileSize)
{ jam(); }
else if (sf->PageNumber != n)
{ jam(); }
else if (computeChecksum((Uint32*)sf, NDB_SF_PAGE_SIZE_IN_WORDS) != 0)
{ jam(); }
else if (crashInd)
{ jam(); }
else
ok = true;
ndbrequireErr(ok, NDBD_EXIT_SR_SCHEMAFILE);
if (! ok) { if (! ok) {
jam(); jam();
ndbrequire(fsPtr.p->fsState == FsConnectRecord::READ_SCHEMA1); ndbrequire(fsPtr.p->fsState == FsConnectRecord::READ_SCHEMA1);
......
...@@ -65,6 +65,7 @@ static const ErrStruct errArray[] = ...@@ -65,6 +65,7 @@ static const ErrStruct errArray[] =
{NDBD_EXIT_NODE_NOT_DEAD, XRE, "Internal node state conflict, " {NDBD_EXIT_NODE_NOT_DEAD, XRE, "Internal node state conflict, "
"most probably resolved by restarting node again"}, "most probably resolved by restarting node again"},
{NDBD_EXIT_SR_REDOLOG, XFI, "Error while reading the REDO log"}, {NDBD_EXIT_SR_REDOLOG, XFI, "Error while reading the REDO log"},
{NDBD_EXIT_SR_SCHEMAFILE, XFI, "Error while reading the schema file"},
/* Currently unused? */ /* Currently unused? */
{2311, XIE, "Conflict when selecting restart type"}, {2311, XIE, "Conflict when selecting restart type"},
{NDBD_EXIT_NO_MORE_UNDOLOG, XCR, {NDBD_EXIT_NO_MORE_UNDOLOG, XCR,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment