Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
MariaDB
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
nexedi
MariaDB
Commits
a22a7fda
Commit
a22a7fda
authored
May 27, 2004
by
unknown
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
removed version 2 backwards compatability from ndb restore
parent
3c94c06b
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
21 additions
and
352 deletions
+21
-352
ndb/src/kernel/blocks/backup/restore/Restore.cpp
ndb/src/kernel/blocks/backup/restore/Restore.cpp
+9
-169
ndb/src/kernel/blocks/backup/restore/Restore.hpp
ndb/src/kernel/blocks/backup/restore/Restore.hpp
+3
-13
ndb/src/kernel/blocks/backup/restore/main.cpp
ndb/src/kernel/blocks/backup/restore/main.cpp
+9
-170
No files found.
ndb/src/kernel/blocks/backup/restore/Restore.cpp
View file @
a22a7fda
...
...
@@ -101,42 +101,13 @@ RestoreMetaData::getStopGCP() const {
}
int
RestoreMetaData
::
loadContent
(
const
char
*
catalog
,
const
char
*
schema
)
RestoreMetaData
::
loadContent
()
{
#if NDB_VERSION_MAJOR >= VERSION_3X
if
(
getMajor
(
m_fileHeader
.
NdbVersion
)
<
VERSION_3X
)
{
if
(
catalog
==
NULL
)
return
-
1
;
if
(
schema
==
NULL
)
return
-
1
;
}
/**
* if backup is of version 3 or higher, then
* return -2 to indicate for the user that he
* cannot restore tables to a certain catalog/schema
*/
if
(
getMajor
(
m_fileHeader
.
NdbVersion
)
>=
VERSION_3X
&&
(
catalog
!=
NULL
||
schema
!=
NULL
))
{
return
-
2
;
}
#endif
#if NDB_VERSION_MAJOR < VERSION_3X
if
(
getMajor
(
m_fileHeader
.
NdbVersion
)
>=
VERSION_3X
)
{
return
-
2
;
}
#endif
Uint32
noOfTables
=
readMetaTableList
();
if
(
noOfTables
==
0
)
return
-
3
;
for
(
Uint32
i
=
0
;
i
<
noOfTables
;
i
++
){
if
(
!
readMetaTableDesc
(
catalog
,
schema
)){
if
(
!
readMetaTableDesc
()){
return
0
;
}
}
...
...
@@ -170,8 +141,7 @@ RestoreMetaData::readMetaTableList() {
}
bool
RestoreMetaData
::
readMetaTableDesc
(
const
char
*
catalog
,
const
char
*
schema
)
{
RestoreMetaData
::
readMetaTableDesc
()
{
Uint32
sectionInfo
[
2
];
...
...
@@ -198,10 +168,7 @@ RestoreMetaData::readMetaTableDesc(const char * catalog,
return
false
;
}
// if
return
parseTableDescriptor
(
m_buffer
,
len
,
catalog
,
schema
);
return
parseTableDescriptor
(
m_buffer
,
len
);
}
bool
...
...
@@ -287,72 +254,11 @@ static const Uint32
AttrMapSize
=
sizeof
(
RestoreAttrMap
)
/
sizeof
(
SimpleProperties
::
SP2StructMapping
);
struct
v2xKernel_to_v3xAPIMapping
{
Int32
kernelConstant
;
Int32
apiConstant
;
};
enum
v2xKernelTypes
{
ExtUndefined
=
0
,
// Undefined
ExtInt
,
// 32 bit
ExtUnsigned
,
// 32 bit
ExtBigint
,
// 64 bit
ExtBigunsigned
,
// 64 Bit
ExtFloat
,
// 32-bit float
ExtDouble
,
// 64-bit float
ExtDecimal
,
// Precision, Scale
ExtChar
,
// Len
ExtVarchar
,
// Max len
ExtBinary
,
// Len
ExtVarbinary
,
// Max len
ExtDatetime
,
// Precision down to 1 sec (sizeof(Datetime) == 8 bytes )
ExtTimespec
// Precision down to 1 nsec (sizeof(Datetime) == 12 bytes )
};
const
v2xKernel_to_v3xAPIMapping
columnTypeMapping
[]
=
{
{
ExtInt
,
NdbDictionary
::
Column
::
Int
},
{
ExtUnsigned
,
NdbDictionary
::
Column
::
Unsigned
},
{
ExtBigint
,
NdbDictionary
::
Column
::
Bigint
},
{
ExtBigunsigned
,
NdbDictionary
::
Column
::
Bigunsigned
},
{
ExtFloat
,
NdbDictionary
::
Column
::
Float
},
{
ExtDouble
,
NdbDictionary
::
Column
::
Double
},
{
ExtDecimal
,
NdbDictionary
::
Column
::
Decimal
},
{
ExtChar
,
NdbDictionary
::
Column
::
Char
},
{
ExtVarchar
,
NdbDictionary
::
Column
::
Varchar
},
{
ExtBinary
,
NdbDictionary
::
Column
::
Binary
},
{
ExtVarbinary
,
NdbDictionary
::
Column
::
Varbinary
},
{
ExtDatetime
,
NdbDictionary
::
Column
::
Datetime
},
{
ExtTimespec
,
NdbDictionary
::
Column
::
Timespec
},
{
-
1
,
-
1
}
};
static
NdbDictionary
::
Column
::
Type
convertToV3x
(
Int32
kernelConstant
,
const
v2xKernel_to_v3xAPIMapping
map
[],
Int32
def
)
{
int
i
=
0
;
while
(
map
[
i
].
kernelConstant
!=
kernelConstant
){
if
(
map
[
i
].
kernelConstant
==
-
1
&&
map
[
i
].
apiConstant
==
-
1
){
return
(
NdbDictionary
::
Column
::
Type
)
def
;
}
i
++
;
}
return
(
NdbDictionary
::
Column
::
Type
)
map
[
i
].
apiConstant
;
}
// Parse dictTabInfo buffer and pushback to to vector storage
// Using SimpleProperties (here we don't need ntohl, ref:ejonore)
bool
RestoreMetaData
::
parseTableDescriptor
(
const
Uint32
*
data
,
Uint32
len
,
const
char
*
catalog
,
const
char
*
schema
)
{
RestoreMetaData
::
parseTableDescriptor
(
const
Uint32
*
data
,
Uint32
len
)
{
SimplePropertiesLinearReader
it
(
data
,
len
);
SimpleProperties
::
UnpackStatus
spStatus
;
...
...
@@ -362,49 +268,9 @@ RestoreMetaData::parseTableDescriptor(const Uint32 * data,
return
false
;
}
// if
/**
* if backup was taken in v21x then there is no info about catalog,
* and schema. This infomration is concatenated to the tableName.
*
*/
char
tableName
[
MAX_TAB_NAME_SIZE
*
2
];
// * 2 for db and schema.-.
it
.
getString
(
tableName
);
char
tmpTableName
[
MAX_TAB_NAME_SIZE
];
it
.
getString
(
tmpTableName
);
#if NDB_VERSION_MAJOR >= VERSION_3X
/**
* only mess with name in version 3.
*/
/* switch(getMajor(m_fileHeader.NdbVersion)) {
*/
if
(
getMajor
(
m_fileHeader
.
NdbVersion
)
<
VERSION_3X
)
{
if
(
strcmp
(
tmpTableName
,
"SYSTAB_0"
)
==
0
||
strcmp
(
tmpTableName
,
"NDB$EVENTS_0"
)
==
0
)
{
sprintf
(
tableName
,
"sys/def/%s"
,
tmpTableName
);
}
else
{
if
(
catalog
==
NULL
&&
schema
==
NULL
)
{
sprintf
(
tableName
,
"%s"
,
tmpTableName
);
}
else
{
sprintf
(
tableName
,
"%s/%s/%s"
,
catalog
,
schema
,
tmpTableName
);
}
}
}
else
sprintf
(
tableName
,
"%s"
,
tmpTableName
);
#elif NDB_VERSION_MAJOR < VERSION_3X
/**
* this is version two!
*/
sprintf
(
tableName
,
"%s"
,
tmpTableName
);
#endif
if
(
strlen
(
tableName
)
==
0
)
{
err
<<
"readMetaTableDesc getString table name error"
<<
endl
;
return
false
;
...
...
@@ -505,35 +371,9 @@ RestoreMetaData::parseTableDescriptor(const Uint32 * data,
debug
<<
" with "
<<
table
->
getNoOfAttributes
()
<<
" attributes"
<<
endl
;
allTables
.
push_back
(
table
);
#ifndef restore_old_types
NdbTableImpl
*
tableImpl
=
0
;
int
ret
=
NdbDictInterface
::
parseTableInfo
(
&
tableImpl
,
data
,
len
);
#if NDB_VERSION_MAJOR >= VERSION_3X
NdbDictionary
::
Column
::
Type
type
;
if
(
getMajor
(
m_fileHeader
.
NdbVersion
)
<
VERSION_3X
)
{
tableImpl
->
setName
(
tableName
);
Uint32
noOfColumns
=
tableImpl
->
getNoOfColumns
();
for
(
Uint32
i
=
0
;
i
<
noOfColumns
;
i
++
)
{
type
=
convertToV3x
(
tableImpl
->
getColumn
(
i
)
->
m_extType
,
columnTypeMapping
,
-
1
);
if
(
type
==
-
1
)
{
ndbout_c
(
"Restore: Was not able to map external type %d (in v2x) "
" to a proper type in v3x"
,
tableImpl
->
getColumn
(
i
)
->
m_extType
);
return
false
;
}
else
{
tableImpl
->
getColumn
(
i
)
->
m_type
=
type
;
}
int
ret
=
NdbDictInterface
::
parseTableInfo
(
&
tableImpl
,
data
,
len
,
false
);
}
}
#endif
if
(
ret
!=
0
)
{
err
<<
"parseTableInfo "
<<
tableName
<<
" failed"
<<
endl
;
return
false
;
...
...
@@ -542,7 +382,7 @@ RestoreMetaData::parseTableDescriptor(const Uint32 * data,
return
false
;
debug
<<
"parseTableInfo "
<<
tableName
<<
" done"
<<
endl
;
table
->
m_dictTable
=
tableImpl
;
#endif
return
true
;
}
...
...
ndb/src/kernel/blocks/backup/restore/Restore.hpp
View file @
a22a7fda
...
...
@@ -28,9 +28,6 @@
#include <ndb_version.h>
#include <version.h>
#define VERSION_3X 3
const
int
FileNameLenC
=
256
;
const
int
TableNameLenC
=
256
;
const
int
AttrNameLenC
=
256
;
...
...
@@ -150,11 +147,8 @@ class TableS {
const
bool
nullable
,
const
KeyType
key
);
#ifndef restore_old_types
public:
class
NdbDictionary
::
Table
*
m_dictTable
;
#endif
public:
TableS
(
const
char
*
name
){
snprintf
(
tableName
,
sizeof
(
tableName
),
name
);
m_noOfNullable
=
m_nullBitmaskSize
=
0
;
...
...
@@ -244,8 +238,7 @@ class RestoreMetaData : public BackupFile {
myVector
<
TableS
*>
allTables
;
bool
readMetaFileHeader
();
bool
readMetaTableDesc
(
const
char
*
catalog
,
const
char
*
schema
);
bool
readMetaTableDesc
();
bool
readGCPEntry
();
Uint32
readMetaTableList
();
...
...
@@ -253,17 +246,14 @@ class RestoreMetaData : public BackupFile {
Uint32
m_startGCP
;
Uint32
m_stopGCP
;
bool
parseTableDescriptor
(
const
Uint32
*
data
,
Uint32
len
,
const
char
*
catalog
,
const
char
*
schema
);
bool
parseTableDescriptor
(
const
Uint32
*
data
,
Uint32
len
);
public:
RestoreMetaData
(
const
char
*
path
,
Uint32
nodeId
,
Uint32
bNo
);
~
RestoreMetaData
();
int
loadContent
(
const
char
*
catalog
,
const
char
*
schema
);
int
loadContent
();
...
...
ndb/src/kernel/blocks/backup/restore/main.cpp
View file @
a22a7fda
...
...
@@ -69,10 +69,6 @@ typedef struct {
}
restore_callback_t
;
static
const
char
*
ga_connect_NDB
=
NULL
;
static
const
char
*
ga_schema
=
NULL
;
static
const
char
*
ga_catalog
=
NULL
;
/**
* print and restore flags
...
...
@@ -206,18 +202,6 @@ readArguments(const int argc, const char** argv)
"No of parallel transactions during restore of data."
"(parallelism can be 1 to 1024)"
,
"Parallelism"
},
#if NDB_VERSION_MAJOR >= VERSION_3X
{
"catalog"
,
'd'
,
arg_string
,
&
ga_catalog
,
"Specifies the catalog/database where the data should be restored to. "
"Restores only to backups taken with v.2.x and restored on >v.3.x "
"systems. Note: system tables (if restored) defaults to sys/def/ "
,
"catalog"
},
{
"schema"
,
's'
,
arg_string
,
&
ga_schema
,
"Specifies the schema where the data should be restored to."
"Restores only to backups taken with v.2.x and restored on >v.3.x "
"systems. Note: system tables (if restored) defaults to sys/def/ "
,
"schema"
},
#endif
#ifdef USE_MYSQL
{
"use_mysql"
,
'\0'
,
arg_flag
,
&
use_mysql
,
"Restore meta data via mysql. Systab will be ignored. Data is restored "
...
...
@@ -353,10 +337,6 @@ main(int argc, const char** argv)
{
return
-
1
;
}
// Turn off table name completion
#if NDB_VERSION_MAJOR >= VERSION_3X
Ndb
::
useFullyQualifiedNames
(
false
);
#endif
/**
* we must always load meta data, even if we will only print it to stdout
...
...
@@ -368,41 +348,19 @@ main(int argc, const char** argv)
return
-
1
;
}
/**
* check wheater we can restore the backup (right version, and if that
* version needs catalog and schema specified.
* check wheater we can restore the backup (right version).
*/
int
res
=
metaData
.
loadContent
(
ga_catalog
,
ga_schema
);
int
res
=
metaData
.
loadContent
();
if
(
res
==
0
)
if
(
res
==
0
)
{
ndbout_c
(
"Restore: Failed to load content"
);
return
-
1
;
}
if
(
res
==
-
1
)
{
ndbout_c
(
"Restore: The backup is from a NDB Cluster v.2.x version. "
"To restore this backup on a > 3.x version you must specify "
"catalog and schema."
);
return
-
1
;
}
if
(
res
==
-
2
)
{
#ifdef NDB_VERSION
ndbout_c
(
"Restore: The backup is from a NDB Cluster v.3.x version "
"Catalog and schema are invalid parameters since they "
"already exist implicitly."
);
#endif
#ifdef NDB_KERNEL_VERSION
ndbout_c
(
"Restore: The backup is from a NDB Cluster v.3.x version "
"It is not possible to restore a 3.x backup on v.2.x. "
);
#endif
return
-
1
;
}
if
(
res
==
-
3
)
{
ndbout_c
(
"Restore: The backup contains no tables "
"Catalog and schema are invalid parameters. "
);
ndbout_c
(
"Restore: The backup contains no tables "
);
return
-
1
;
}
...
...
@@ -879,10 +837,14 @@ BackupRestore::init()
Ndb
::
setConnectString
(
ga_connect_NDB
);
}
m_ndb
=
new
Ndb
(
"TEST_DB"
);
m_ndb
=
new
Ndb
();
if
(
m_ndb
==
NULL
)
return
false
;
// Turn off table name completion
m_ndb
->
useFullyQualifiedNames
(
false
);
m_ndb
->
init
(
1024
);
if
(
m_ndb
->
waitUntilReady
(
30
)
!=
0
)
{
...
...
@@ -1106,7 +1068,6 @@ BackupRestore::table(const TableS & table){
{
return
true
;
}
#ifndef restore_old_types
NdbDictionary
::
Dictionary
*
dict
=
m_ndb
->
getDictionary
();
if
(
dict
->
createTable
(
*
table
.
m_dictTable
)
==
-
1
)
{
...
...
@@ -1116,81 +1077,6 @@ BackupRestore::table(const TableS & table){
}
info
<<
"Successfully restored table "
<<
table
.
getTableName
()
<<
endl
;
return
true
;
#else
NdbSchemaCon
*
tableTransaction
=
0
;
NdbSchemaOp
*
tableOp
=
0
;
tableTransaction
=
m_ndb
->
startSchemaTransaction
();
if
(
tableTransaction
==
NULL
)
{
err
<<
table
.
getTableName
()
<<
" - BackupRestore::table cannot startSchemaTransaction: "
<<
tableTransaction
->
getNdbError
()
<<
endl
;
return
false
;
}
// if
tableOp
=
tableTransaction
->
getNdbSchemaOp
();
if
(
tableOp
==
NULL
)
{
err
<<
table
.
getTableName
()
<<
" - BackupRestore::table cannot getNdbSchemaOp: "
<<
tableTransaction
->
getNdbError
()
<<
endl
;
m_ndb
->
closeSchemaTransaction
(
tableTransaction
);
return
false
;
}
// if
// TODO: check for errors in table attributes. set aTupleKey
int
check
=
0
;
check
=
tableOp
->
createTable
(
table
.
getTableName
());
// aTableSize = 8, Not used?
// aTupleKey = TupleKey, go through attributes and check if there is a PK
// and so on....
if
(
check
==
-
1
)
{
err
<<
table
.
getTableName
()
<<
" - BackupRestore::table cannot createTable: "
<<
tableTransaction
->
getNdbError
()
<<
endl
;
m_ndb
->
closeSchemaTransaction
(
tableTransaction
);
return
false
;
}
// if
// Create attributes from meta data
for
(
int
i
=
0
;
i
<
table
.
getNoOfAttributes
();
i
++
)
{
const
AttributeDesc
*
desc
=
table
[
i
];
check
=
tableOp
->
createAttribute
(
desc
->
name
,
// Attr name
desc
->
key
,
// Key type
desc
->
size
,
// bits
desc
->
arraySize
,
desc
->
type
,
MMBased
,
// only supported
desc
->
nullable
// Rest is don't care for the moment
);
if
(
check
==
-
1
)
{
err
<<
table
.
getTableName
()
<<
" - RestoreDataIterator::createTable cannot createAttribute: "
<<
tableTransaction
->
getNdbError
()
<<
endl
;
m_ndb
->
closeSchemaTransaction
(
tableTransaction
);
return
false
;
}
// if
}
// for
if
(
tableTransaction
->
execute
()
==
-
1
)
{
err
<<
table
.
getTableName
()
<<
" - RestoreDataIterator::createTable cannot execute transaction: "
<<
tableTransaction
->
getNdbError
()
<<
endl
;
m_ndb
->
closeSchemaTransaction
(
tableTransaction
);
return
false
;
}
// if
m_ndb
->
closeSchemaTransaction
(
tableTransaction
);
info
<<
"Successfully created table "
<<
table
.
getTableName
()
<<
endl
;
return
true
;
#endif
}
...
...
@@ -1314,26 +1200,6 @@ void BackupRestore::tupleAsynch(const TupleS & tup, restore_callback_t * cbData)
Uint32
length
=
(
size
*
arraySize
)
/
8
;
if
(
key
==
TupleKey
)
{
#if NDB_VERSION_MAJOR >= VERSION3X
/**
* Convert VARCHAR from v.2x to v3x representation
*/
if
(
getMajor
(
tup
.
getTable
()
->
getBackupVersion
())
<
VERSION_3X
&&
((
tup
.
getTable
()
->
m_dictTable
->
getColumn
(
i
)
->
getType
()
==
NdbDictionary
::
Column
::
Varbinary
)
||
(
tup
.
getTable
()
->
m_dictTable
->
getColumn
(
i
)
->
getType
()
==
NdbDictionary
::
Column
::
Varchar
))
&&
!
attr
->
Data
.
null
)
{
char
*
src
=
dataPtr
;
char
var_len
[
2
];
var_len
[
0
]
=
*
(
dataPtr
+
length
-
2
);
var_len
[
1
]
=
*
(
dataPtr
+
length
-
1
);
memmove
((
char
*
)
dataPtr
+
2
,
dataPtr
,
length
);
src
[
0
]
=
var_len
[
0
];
src
[
1
]
=
var_len
[
1
];
dataPtr
=
src
;
}
#endif
ret
=
op
->
equal
(
i
,
dataPtr
,
length
);
if
(
ret
<
0
)
{
...
...
@@ -1358,48 +1224,21 @@ void BackupRestore::tupleAsynch(const TupleS & tup, restore_callback_t * cbData)
KeyType
key
=
attr
->
Desc
->
key
;
char
*
dataPtr
=
attr
->
Data
.
string_value
;
Uint32
length
=
(
size
*
arraySize
)
/
8
;
#if NDB_VERSION_MAJOR >= VERSION3X
/**
* Convert VARCHAR from v.2x to v3x representation
*/
if
(
getMajor
(
tup
.
getTable
()
->
getBackupVersion
())
<
VERSION_3X
&&
((
tup
.
getTable
()
->
m_dictTable
->
getColumn
(
i
)
->
getType
()
==
NdbDictionary
::
Column
::
Varbinary
)
||
(
tup
.
getTable
()
->
m_dictTable
->
getColumn
(
i
)
->
getType
()
==
NdbDictionary
::
Column
::
Varchar
))
&&
!
attr
->
Data
.
null
)
{
char
*
src
=
dataPtr
;
char
var_len
[
2
];
var_len
[
0
]
=
*
(
dataPtr
+
length
-
2
);
//length is last 2 bytes
var_len
[
1
]
=
*
(
dataPtr
+
length
-
1
);
memmove
((
char
*
)
dataPtr
+
2
,
dataPtr
,
length
);
src
[
0
]
=
var_len
[
0
];
src
[
1
]
=
var_len
[
1
];
dataPtr
=
src
;
}
#endif
if
(
key
==
NoKey
&&
!
attr
->
Data
.
null
)
{
ret
=
op
->
setValue
(
i
,
dataPtr
,
length
);
}
else
if
(
key
==
NoKey
&&
attr
->
Data
.
null
)
{
ret
=
op
->
setValue
(
i
,
NULL
,
0
);
}
if
(
ret
<
0
)
{
ndbout_c
(
"Column: %d type %d"
,
i
,
tup
.
getTable
()
->
m_dictTable
->
getColumn
(
i
)
->
getType
());
if
(
asynchErrorHandler
(
asynchTrans
[
nPreparedTransactions
],
m_ndb
))
{
retries
++
;
continue
;
}
asynchExitHandler
();
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment