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
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
mariadb
Commits
e938fb8f
Commit
e938fb8f
authored
May 27, 2004
by
tomas@mc05.(none)
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
removed version 2 backwards compatability from ndb restore
parent
443f1eb1
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 @
e938fb8f
...
...
@@ -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 @
e938fb8f
...
...
@@ -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 @
e938fb8f
...
...
@@ -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