Commit 588613d2 authored by unknown's avatar unknown

Merge pnousiainen@bk-internal.mysql.com:/home/bk/mysql-5.0

into  mysql.com:/space/pekka/ndb/version/my50


sql/ha_ndbcluster.cc:
  Auto merged
parents 79f6936d 24594865
...@@ -626,3 +626,12 @@ select * from t1 where code = '12' and month = 4 and year = 2004 ; ...@@ -626,3 +626,12 @@ select * from t1 where code = '12' and month = 4 and year = 2004 ;
id month year code id month year code
1 4 2004 12 1 4 2004 12
drop table t1; drop table t1;
create table t1 (a int primary key, b varchar(1000) not null, unique key (b))
engine=ndb charset=utf8;
insert into t1 values (1, repeat(_utf8 0xe288ab6474, 200));
insert into t1 values (2, repeat(_utf8 0xe288ab6474, 200));
ERROR 23000: Duplicate entry '2' for key 1
select a, sha1(b) from t1;
a sha1(b)
1 08f5d02c8b8bc244f275bdfc22c42c5cab0d9d7d
drop table t1;
...@@ -309,4 +309,18 @@ select * from t1 where code = '12' and month = 4 and year = 2004 ; ...@@ -309,4 +309,18 @@ select * from t1 where code = '12' and month = 4 and year = 2004 ;
drop table t1; drop table t1;
# bug#15918 Unique Key Limit in NDB Engine
create table t1 (a int primary key, b varchar(1000) not null, unique key (b))
engine=ndb charset=utf8;
insert into t1 values (1, repeat(_utf8 0xe288ab6474, 200));
--error 1062
insert into t1 values (2, repeat(_utf8 0xe288ab6474, 200));
select a, sha1(b) from t1;
# perl -e 'print pack("H2000","e288ab6474"x200)' | sha1sum
drop table t1;
# End of 4.1 tests # End of 4.1 tests
...@@ -1446,7 +1446,7 @@ private: ...@@ -1446,7 +1446,7 @@ private:
Uint32 cexcPrevforward; Uint32 cexcPrevforward;
Uint32 clocalkey[32]; Uint32 clocalkey[32];
union { union {
Uint32 ckeys[2048]; Uint32 ckeys[2048 * MAX_XFRM_MULTIPLY];
Uint64 ckeys_align; Uint64 ckeys_align;
}; };
......
...@@ -63,8 +63,10 @@ extern "C" void handler_sigusr1(int signum); // child signalling failed restart ...@@ -63,8 +63,10 @@ extern "C" void handler_sigusr1(int signum); // child signalling failed restart
void systemInfo(const Configuration & conf, void systemInfo(const Configuration & conf,
const LogLevel & ll); const LogLevel & ll);
static FILE *child_info_file_r= 0; // These are used already before fork if fetch_configuration() fails
static FILE *child_info_file_w= 0; // (e.g. Unable to alloc node id). Set them to something reasonable.
static FILE *child_info_file_r= stdin;
static FILE *child_info_file_w= stdout;
static void writeChildInfo(const char *token, int val) static void writeChildInfo(const char *token, int val)
{ {
...@@ -270,8 +272,8 @@ int main(int argc, char** argv) ...@@ -270,8 +272,8 @@ int main(int argc, char** argv)
#ifndef NDB_WIN32 #ifndef NDB_WIN32
signal(SIGUSR1, handler_sigusr1); signal(SIGUSR1, handler_sigusr1);
pid_t child; pid_t child = -1;
while (1) while (! theConfig->getForegroundMode()) // the cond is const
{ {
// setup reporting between child and parent // setup reporting between child and parent
int filedes[2]; int filedes[2];
...@@ -393,8 +395,10 @@ int main(int argc, char** argv) ...@@ -393,8 +395,10 @@ int main(int argc, char** argv)
if (child >= 0) if (child >= 0)
g_eventLogger.info("Angel pid: %d ndb pid: %d", getppid(), getpid()); g_eventLogger.info("Angel pid: %d ndb pid: %d", getppid(), getpid());
else else if (child > 0)
g_eventLogger.info("Ndb pid: %d", getpid()); g_eventLogger.info("Ndb pid: %d", getpid());
else
g_eventLogger.info("Ndb started in foreground");
#else #else
g_eventLogger.info("Ndb started"); g_eventLogger.info("Ndb started");
#endif #endif
...@@ -569,10 +573,7 @@ catchsigs(bool ignore){ ...@@ -569,10 +573,7 @@ catchsigs(bool ignore){
#ifdef SIGPOLL #ifdef SIGPOLL
SIGPOLL, SIGPOLL,
#endif #endif
SIGSEGV, SIGSEGV
#ifdef SIGTRAP
SIGTRAP
#endif
}; };
static const int signals_ignore[] = { static const int signals_ignore[] = {
...@@ -586,6 +587,11 @@ catchsigs(bool ignore){ ...@@ -586,6 +587,11 @@ catchsigs(bool ignore){
handler_register(signals_error[i], handler_error, ignore); handler_register(signals_error[i], handler_error, ignore);
for(i = 0; i < sizeof(signals_ignore)/sizeof(signals_ignore[0]); i++) for(i = 0; i < sizeof(signals_ignore)/sizeof(signals_ignore[0]); i++)
handler_register(signals_ignore[i], SIG_IGN, ignore); handler_register(signals_ignore[i], SIG_IGN, ignore);
#ifdef SIGTRAP
Configuration* theConfig = globalEmulatorData.theConfiguration;
if (! theConfig->getForegroundMode())
handler_register(SIGTRAP, handler_error, ignore);
#endif
#endif #endif
} }
......
...@@ -48,11 +48,13 @@ extern EventLogger g_eventLogger; ...@@ -48,11 +48,13 @@ extern EventLogger g_eventLogger;
enum ndbd_options { enum ndbd_options {
OPT_INITIAL = NDB_STD_OPTIONS_LAST, OPT_INITIAL = NDB_STD_OPTIONS_LAST,
OPT_NODAEMON OPT_NODAEMON,
OPT_FOREGROUND
}; };
NDB_STD_OPTS_VARS; NDB_STD_OPTS_VARS;
static int _daemon, _no_daemon, _initial, _no_start; // XXX should be my_bool ???
static int _daemon, _no_daemon, _foreground, _initial, _no_start;
/** /**
* Arguments to NDB process * Arguments to NDB process
*/ */
...@@ -75,6 +77,11 @@ static struct my_option my_long_options[] = ...@@ -75,6 +77,11 @@ static struct my_option my_long_options[] =
"Do not start ndbd as daemon, provided for testing purposes", "Do not start ndbd as daemon, provided for testing purposes",
(gptr*) &_no_daemon, (gptr*) &_no_daemon, 0, (gptr*) &_no_daemon, (gptr*) &_no_daemon, 0,
GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0 }, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0 },
{ "foreground", OPT_FOREGROUND,
"Run real ndbd in foreground, provided for debugging purposes"
" (implies --nodaemon)",
(gptr*) &_foreground, (gptr*) &_foreground, 0,
GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0} { 0, 0, 0, 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0}
}; };
static void short_usage_sub(void) static void short_usage_sub(void)
...@@ -103,13 +110,14 @@ Configuration::init(int argc, char** argv) ...@@ -103,13 +110,14 @@ Configuration::init(int argc, char** argv)
ndb_std_get_one_option))) ndb_std_get_one_option)))
exit(ho_error); exit(ho_error);
if (_no_daemon) { if (_no_daemon || _foreground) {
_daemon= 0; _daemon= 0;
} }
DBUG_PRINT("info", ("no_start=%d", _no_start)); DBUG_PRINT("info", ("no_start=%d", _no_start));
DBUG_PRINT("info", ("initial=%d", _initial)); DBUG_PRINT("info", ("initial=%d", _initial));
DBUG_PRINT("info", ("daemon=%d", _daemon)); DBUG_PRINT("info", ("daemon=%d", _daemon));
DBUG_PRINT("info", ("foreground=%d", _foreground));
DBUG_PRINT("info", ("connect_str=%s", opt_connect_str)); DBUG_PRINT("info", ("connect_str=%s", opt_connect_str));
ndbSetOwnVersion(); ndbSetOwnVersion();
...@@ -131,6 +139,8 @@ Configuration::init(int argc, char** argv) ...@@ -131,6 +139,8 @@ Configuration::init(int argc, char** argv)
// Check daemon flag // Check daemon flag
if (_daemon) if (_daemon)
_daemonMode = true; _daemonMode = true;
if (_foreground)
_foregroundMode = true;
// Save programname // Save programname
if(argc > 0 && argv[0] != 0) if(argc > 0 && argv[0] != 0)
...@@ -151,6 +161,7 @@ Configuration::Configuration() ...@@ -151,6 +161,7 @@ Configuration::Configuration()
_backupPath = 0; _backupPath = 0;
_initialStart = false; _initialStart = false;
_daemonMode = false; _daemonMode = false;
_foregroundMode = false;
m_config_retriever= 0; m_config_retriever= 0;
m_clusterConfig= 0; m_clusterConfig= 0;
m_clusterConfigIter= 0; m_clusterConfigIter= 0;
......
...@@ -64,6 +64,7 @@ public: ...@@ -64,6 +64,7 @@ public:
bool getInitialStart() const; bool getInitialStart() const;
void setInitialStart(bool val); void setInitialStart(bool val);
bool getDaemonMode() const; bool getDaemonMode() const;
bool getForegroundMode() const;
const ndb_mgm_configuration_iterator * getOwnConfigIterator() const; const ndb_mgm_configuration_iterator * getOwnConfigIterator() const;
...@@ -105,7 +106,8 @@ private: ...@@ -105,7 +106,8 @@ private:
char * _connectString; char * _connectString;
Uint32 m_mgmd_port; Uint32 m_mgmd_port;
BaseString m_mgmd_host; BaseString m_mgmd_host;
bool _daemonMode; bool _daemonMode; // if not, angel in foreground
bool _foregroundMode; // no angel, raw ndbd in foreground
void calcSizeAlt(class ConfigValues * ); void calcSizeAlt(class ConfigValues * );
}; };
...@@ -140,4 +142,10 @@ Configuration::getDaemonMode() const { ...@@ -140,4 +142,10 @@ Configuration::getDaemonMode() const {
return _daemonMode; return _daemonMode;
} }
inline
bool
Configuration::getForegroundMode() const {
return _foregroundMode;
}
#endif #endif
...@@ -5098,6 +5098,10 @@ uint ha_ndbcluster::max_supported_key_length() const ...@@ -5098,6 +5098,10 @@ uint ha_ndbcluster::max_supported_key_length() const
{ {
return NDB_MAX_KEY_SIZE; return NDB_MAX_KEY_SIZE;
} }
uint ha_ndbcluster::max_supported_key_part_length() const
{
return NDB_MAX_KEY_SIZE;
}
bool ha_ndbcluster::low_byte_first() const bool ha_ndbcluster::low_byte_first() const
{ {
#ifdef WORDS_BIGENDIAN #ifdef WORDS_BIGENDIAN
......
...@@ -510,6 +510,7 @@ class ha_ndbcluster: public handler ...@@ -510,6 +510,7 @@ class ha_ndbcluster: public handler
uint max_supported_keys() const; uint max_supported_keys() const;
uint max_supported_key_parts() const; uint max_supported_key_parts() const;
uint max_supported_key_length() const; uint max_supported_key_length() const;
uint max_supported_key_part_length() const;
int rename_table(const char *from, const char *to); int rename_table(const char *from, const char *to);
int delete_table(const char *name); int delete_table(const char *name);
......
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