Commit f02ebd6f authored by joreland@mysql.com's avatar joreland@mysql.com

bug#5128 - remove need of unique fs-path

bug#4761 - more validation of hosts
bug#4511 - only non depricated should be saved in config
         - fix ConfigInfo::BOOL w.r.t deprication
parent a3c99571
......@@ -5,6 +5,7 @@ DataMemory: CHOOSE_DataMemory
IndexMemory: CHOOSE_IndexMemory
Diskless: CHOOSE_Diskless
TimeBetweenWatchDogCheck: 30000
FileSystemPath: CHOOSE_FILESYSTEM
[COMPUTER]
Id: 1
......@@ -16,11 +17,9 @@ HostName: CHOOSE_HOSTNAME_2
[DB]
ExecuteOnComputer: 1
FileSystemPath: CHOOSE_FILESYSTEM_NODE_1
[DB]
ExecuteOnComputer: 2
FileSystemPath: CHOOSE_FILESYSTEM_NODE_2
[MGM]
PortNumber: CHOOSE_PORT_MGM
......
......@@ -54,7 +54,7 @@ while test $# -gt 0; do
stop_ndb=1
;;
--initial)
flags_ndb=$flags_ndb" -i"
flags_ndb="$flags_ndb -i"
initial_ndb=1
;;
--status)
......@@ -81,20 +81,18 @@ while test $# -gt 0; do
shift
done
fs_ndb=$fsdir/ndbcluster-$port_base
fs_name_1=$fs_ndb/node-1-fs
fs_name_2=$fs_ndb/node-2-fs
fs_ndb="$fsdir/ndbcluster-$port_base"
NDB_HOME=
if [ ! -x $fsdir ]; then
if [ ! -x "$fsdir" ]; then
echo "$fsdir missing"
exit 1
fi
if [ ! -x $exec_ndb ]; then
if [ ! -x "$exec_ndb" ]; then
echo "$exec_ndb missing"
exit 1
fi
if [ ! -x $exec_mgmtsrvr ]; then
if [ ! -x "$exec_mgmtsrvr" ]; then
echo "$exec_mgmtsrvr missing"
exit 1
fi
......@@ -108,12 +106,10 @@ start_default_ndbcluster() {
# do some checks
if [ $initial_ndb ] ; then
[ -d $fs_ndb ] || mkdir $fs_ndb
[ -d $fs_name_1 ] || mkdir $fs_name_1
[ -d $fs_name_2 ] || mkdir $fs_name_2
if [ "$initial_ndb" ] ; then
[ -d "$fs_ndb" ] || mkdir "$fs_ndb"
fi
if [ -d "$fs_ndb" -a -d "$fs_name_1" -a -d "$fs_name_2" ]; then :; else
if [ -d "$fs_ndb" ]; then :; else
echo "$fs_ndb filesystem directory does not exist"
exit 1
fi
......@@ -128,42 +124,41 @@ port_transporter=`expr $ndb_mgmd_port + 2`
if [ $initial_ndb ] ; then
sed \
-e s,"CHOOSE_MaxNoOfConcurrentOperations",$ndb_con_op,g \
-e s,"CHOOSE_DataMemory",$ndb_dmem,g \
-e s,"CHOOSE_IndexMemory",$ndb_imem,g \
-e s,"CHOOSE_Diskless",$ndb_diskless,g \
-e s,"CHOOSE_MaxNoOfConcurrentOperations","$ndb_con_op",g \
-e s,"CHOOSE_DataMemory","$ndb_dmem",g \
-e s,"CHOOSE_IndexMemory","$ndb_imem",g \
-e s,"CHOOSE_Diskless","$ndb_diskless",g \
-e s,"CHOOSE_HOSTNAME_".*,"$ndb_host",g \
-e s,"CHOOSE_FILESYSTEM_NODE_1","$fs_name_1",g \
-e s,"CHOOSE_FILESYSTEM_NODE_2","$fs_name_2",g \
-e s,"CHOOSE_PORT_MGM",$ndb_mgmd_port,g \
-e s,"CHOOSE_PORT_TRANSPORTER",$port_transporter,g \
-e s,"CHOOSE_FILESYSTEM","$fs_ndb",g \
-e s,"CHOOSE_PORT_MGM","$ndb_mgmd_port",g \
-e s,"CHOOSE_PORT_TRANSPORTER","$port_transporter",g \
< ndb/ndb_config_2_node.ini \
> "$fs_ndb/config.ini"
fi
rm -f $cfgfile 2>&1 | cat > /dev/null
rm -f $fs_ndb/$cfgfile 2>&1 | cat > /dev/null
rm -f "$cfgfile" 2>&1 | cat > /dev/null
rm -f "$fs_ndb/$cfgfile" 2>&1 | cat > /dev/null
if ( cd $fs_ndb ; $exec_mgmtsrvr -d -c config.ini ) ; then :; else
if ( cd "$fs_ndb" ; $exec_mgmtsrvr -d -c config.ini ) ; then :; else
echo "Unable to start $exec_mgmtsrvr from `pwd`"
exit 1
fi
cat `find $fs_ndb -name 'ndb_*.pid'` > $fs_ndb/$pidfile
cat `find "$fs_ndb" -name 'ndb_*.pid'` > "$fs_ndb/$pidfile"
# Start database node
echo "Starting ndbd"
( cd $fs_ndb ; $exec_ndb -d $flags_ndb & )
( cd "$fs_ndb" ; $exec_ndb -d $flags_ndb & )
cat `find $fs_ndb -name 'ndb_*.pid'` > $fs_ndb/$pidfile
cat `find "$fs_ndb" -name 'ndb_*.pid'` > "$fs_ndb/$pidfile"
# Start database node
echo "Starting ndbd"
( cd $fs_ndb ; $exec_ndb -d $flags_ndb & )
( cd "$fs_ndb" ; $exec_ndb -d $flags_ndb & )
cat `find $fs_ndb -name 'ndb_*.pid'` > $fs_ndb/$pidfile
cat `find "$fs_ndb" -name 'ndb_*.pid'` > "$fs_ndb/$pidfile"
# test if Ndb Cluster starts properly
......@@ -173,7 +168,7 @@ if ( $exec_waiter ) | grep "NDBT_ProgramExit: 0 - OK"; then :; else
exit 1
fi
cat `find $fs_ndb -name 'ndb_*.pid'` > $fs_ndb/$pidfile
cat `find "$fs_ndb" -name 'ndb_*.pid'` > $fs_ndb/$pidfile
status_ndbcluster
}
......@@ -200,9 +195,9 @@ exec_mgmtclient="$exec_mgmtclient --try-reconnect=1"
echo "all stop" | $exec_mgmtclient 2>&1 | cat > /dev/null
if [ -f $fs_ndb/$pidfile ] ; then
kill -9 `cat $fs_ndb/$pidfile` 2> /dev/null
rm $fs_ndb/$pidfile
if [ -f "$fs_ndb/$pidfile" ] ; then
kill -9 `cat "$fs_ndb/$pidfile"` 2> /dev/null
rm "$fs_ndb/$pidfile"
fi
}
......
This diff is collapsed.
......@@ -37,6 +37,7 @@
#include <mgmapi.h>
#include <mgmapi_config_parameters.h>
#include <mgmapi_configuration.hpp>
#include <ConfigValues.hpp>
#include <NdbHost.h>
......@@ -267,7 +268,7 @@ ConfigRetriever::verifyConfig(const struct ndb_mgm_configuration * conf){
char localhost[MAXHOSTNAMELEN];
if(NdbHost_GetHostName(localhost) != 0){
snprintf(buf, 255, "Unable to own hostname");
snprintf(buf, 255, "Unable to get own hostname");
setError(CR_ERROR, buf);
return false;
}
......@@ -317,6 +318,46 @@ ConfigRetriever::verifyConfig(const struct ndb_mgm_configuration * conf){
return false;
}
/**
* Check hostnames
*/
ndb_mgm_configuration_iterator iter(* conf, CFG_SECTION_CONNECTION);
for(iter.first(); iter.valid(); iter.next()){
Uint32 type = CONNECTION_TYPE_TCP + 1;
if(iter.get(CFG_TYPE_OF_SECTION, &type)) continue;
if(type != CONNECTION_TYPE_TCP) continue;
Uint32 nodeId1, nodeId2, remoteNodeId;
if(iter.get(CFG_CONNECTION_NODE_1, &nodeId1)) continue;
if(iter.get(CFG_CONNECTION_NODE_2, &nodeId2)) continue;
if(nodeId1 != _ownNodeId && nodeId2 != _ownNodeId) continue;
remoteNodeId = (_ownNodeId == nodeId1 ? nodeId2 : nodeId1);
const char * name;
struct in_addr addr;
BaseString tmp;
if(!iter.get(CFG_TCP_HOSTNAME_1, &name) && strlen(name)){
if(Ndb_getInAddr(&addr, name) != 0){
tmp.assfmt("Unable to lookup/illegal hostname %s, "
"connection from node %d to node %d",
name, _ownNodeId, remoteNodeId);
setError(CR_ERROR, tmp.c_str());
return false;
}
}
if(!iter.get(CFG_TCP_HOSTNAME_2, &name) && strlen(name)){
if(Ndb_getInAddr(&addr, name) != 0){
tmp.assfmt("Unable to lookup/illegal hostname %s, "
"connection from node %d to node %d",
name, _ownNodeId, remoteNodeId);
setError(CR_ERROR, tmp.c_str());
return false;
}
}
}
return true;
}
......
......@@ -108,8 +108,8 @@ AsyncFile::AsyncFile() :
}
void
AsyncFile::doStart(const char * filesystemPath) {
theFileName.init(filesystemPath);
AsyncFile::doStart(Uint32 nodeId, const char * filesystemPath) {
theFileName.init(nodeId, filesystemPath);
// Stacksize for filesystem threads
// An 8k stack should be enough
......
......@@ -181,7 +181,7 @@ public:
void execute( Request* request );
void doStart(const char * fspath);
void doStart(Uint32 nodeId, const char * fspath);
// its a thread so its always running
void run();
......
......@@ -46,7 +46,7 @@ Filename::Filename() :
}
void
Filename::init(const char * pFileSystemPath){
Filename::init(Uint32 nodeid, const char * pFileSystemPath){
if (pFileSystemPath == NULL) {
ERROR_SET(fatal, AFS_ERROR_NOPATH, ""," Filename::init()");
return;
......@@ -75,8 +75,15 @@ Filename::init(const char * pFileSystemPath){
DIR_SEPARATOR) != 0)
strcat(theBaseDirectory, DIR_SEPARATOR);
}
snprintf(buf2, sizeof(buf2), "ndb_%u_fs%s", nodeid, DIR_SEPARATOR);
strcat(theBaseDirectory, buf2);
#ifdef NDB_WIN32
CreateDirectory(theBaseDirectory, 0);
#else
mkdir(theBaseDirectory, S_IRUSR | S_IWUSR | S_IXUSR | S_IXGRP | S_IRGRP);
#endif
}
Filename::~Filename(){
}
......
......@@ -68,7 +68,7 @@ public:
int levels() const;
const char* c_str() const;
void init(const char * fileSystemPath);
void init(Uint32 nodeid, const char * fileSystemPath);
private:
int theLevelDepth;
......
......@@ -559,7 +559,7 @@ Ndbfs::createAsyncFile(){
}
AsyncFile* file = new AsyncFile;
file->doStart(theFileSystemPath);
file->doStart(getOwnNodeId(), theFileSystemPath);
// Put the file in list of all files
theFiles.push_back(file);
......
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