Commit a84d2971 authored by tomas@whalegate.ndb.mysql.com's avatar tomas@whalegate.ndb.mysql.com

Merge whalegate.ndb.mysql.com:/home/tomas/mysql-5.0-ndb

into  whalegate.ndb.mysql.com:/home/tomas/mysql-5.1-single-user
parents 73306167 ef1fdd30
...@@ -148,7 +148,14 @@ public: ...@@ -148,7 +148,14 @@ public:
* *
* @return Char value. * @return Char value.
*/ */
Int8 char_value() const; char char_value() const;
/**
* Get value stored in NdbRecAttr object.
*
* @return Int8 value.
*/
Int8 int8_value() const;
/** /**
* Get value stored in NdbRecAttr object. * Get value stored in NdbRecAttr object.
...@@ -185,6 +192,13 @@ public: ...@@ -185,6 +192,13 @@ public:
*/ */
Uint8 u_char_value() const; Uint8 u_char_value() const;
/**
* Get value stored in NdbRecAttr object.
*
* @return Uint8 value.
*/
Uint8 u_8_value() const;
/** /**
* Get value stored in NdbRecAttr object. * Get value stored in NdbRecAttr object.
* *
...@@ -309,8 +323,15 @@ NdbRecAttr::short_value() const ...@@ -309,8 +323,15 @@ NdbRecAttr::short_value() const
} }
inline inline
Int8 char
NdbRecAttr::char_value() const NdbRecAttr::char_value() const
{
return *(char*)theRef;
}
inline
Int8
NdbRecAttr::int8_value() const
{ {
return *(Int8*)theRef; return *(Int8*)theRef;
} }
...@@ -336,6 +357,13 @@ NdbRecAttr::u_char_value() const ...@@ -336,6 +357,13 @@ NdbRecAttr::u_char_value() const
return *(Uint8*)theRef; return *(Uint8*)theRef;
} }
inline
Uint8
NdbRecAttr::u_8_value() const
{
return *(Uint8*)theRef;
}
inline inline
void void
NdbRecAttr::release() NdbRecAttr::release()
......
...@@ -628,6 +628,16 @@ MgmtSrvr::start(BaseString &error_string) ...@@ -628,6 +628,16 @@ MgmtSrvr::start(BaseString &error_string)
ndbout_c("This is probably a bug."); ndbout_c("This is probably a bug.");
} }
/*
set api reg req frequency quite high:
100 ms interval to make sure we have fairly up-to-date
info from the nodes. This to make sure that this info
is not dependent on heart beat settings in the
configuration
*/
theFacade->theClusterMgr->set_max_api_reg_req_interval(100);
TransporterRegistry *reg = theFacade->get_registry(); TransporterRegistry *reg = theFacade->get_registry();
for(unsigned int i=0;i<reg->m_transporter_interface.size();i++) { for(unsigned int i=0;i<reg->m_transporter_interface.size();i++) {
BaseString msg; BaseString msg;
......
...@@ -61,6 +61,7 @@ ClusterMgr::ClusterMgr(TransporterFacade & _facade): ...@@ -61,6 +61,7 @@ ClusterMgr::ClusterMgr(TransporterFacade & _facade):
clusterMgrThreadMutex = NdbMutex_Create(); clusterMgrThreadMutex = NdbMutex_Create();
waitForHBCond= NdbCondition_Create(); waitForHBCond= NdbCondition_Create();
waitingForHB= false; waitingForHB= false;
m_max_api_reg_req_interval= 0xFFFFFFFF; // MAX_INT
noOfAliveNodes= 0; noOfAliveNodes= 0;
noOfConnectedNodes= 0; noOfConnectedNodes= 0;
theClusterMgrThread= 0; theClusterMgrThread= 0;
...@@ -243,7 +244,7 @@ ClusterMgr::threadMain( ){ ...@@ -243,7 +244,7 @@ ClusterMgr::threadMain( ){
} }
theFacade.lock_mutex(); theFacade.lock_mutex();
for (int i = 1; i < MAX_NODES; i++){ for (int i = 1; i < MAX_NDB_NODES; i++){
/** /**
* Send register request (heartbeat) to all available nodes * Send register request (heartbeat) to all available nodes
* at specified timing intervals * at specified timing intervals
...@@ -264,7 +265,8 @@ ClusterMgr::threadMain( ){ ...@@ -264,7 +265,8 @@ ClusterMgr::threadMain( ){
} }
theNode.hbCounter += timeSlept; theNode.hbCounter += timeSlept;
if (theNode.hbCounter >= theNode.hbFrequency) { if (theNode.hbCounter >= m_max_api_reg_req_interval ||
theNode.hbCounter >= theNode.hbFrequency) {
/** /**
* It is now time to send a new Heartbeat * It is now time to send a new Heartbeat
*/ */
......
...@@ -50,6 +50,7 @@ public: ...@@ -50,6 +50,7 @@ public:
void startThread(); void startThread();
void forceHB(); void forceHB();
void set_max_api_reg_req_interval(unsigned int millisec) { m_max_api_reg_req_interval = millisec; }
private: private:
void threadMain(); void threadMain();
...@@ -89,6 +90,7 @@ public: ...@@ -89,6 +90,7 @@ public:
Uint32 m_connect_count; Uint32 m_connect_count;
private: private:
Uint32 m_max_api_reg_req_interval;
Uint32 noOfAliveNodes; Uint32 noOfAliveNodes;
Uint32 noOfConnectedNodes; Uint32 noOfConnectedNodes;
Node theNodes[MAX_NODES]; Node theNodes[MAX_NODES];
......
...@@ -270,7 +270,7 @@ ndbrecattr_print_formatted(NdbOut& out, const NdbRecAttr &r, ...@@ -270,7 +270,7 @@ ndbrecattr_print_formatted(NdbOut& out, const NdbRecAttr &r,
out << r.u_short_value(); out << r.u_short_value();
break; break;
case NdbDictionary::Column::Tinyunsigned: case NdbDictionary::Column::Tinyunsigned:
out << (unsigned) r.u_char_value(); out << (unsigned) r.u_8_value();
break; break;
case NdbDictionary::Column::Bigint: case NdbDictionary::Column::Bigint:
out << r.int64_value(); out << r.int64_value();
...@@ -285,7 +285,7 @@ ndbrecattr_print_formatted(NdbOut& out, const NdbRecAttr &r, ...@@ -285,7 +285,7 @@ ndbrecattr_print_formatted(NdbOut& out, const NdbRecAttr &r,
out << r.short_value(); out << r.short_value();
break; break;
case NdbDictionary::Column::Tinyint: case NdbDictionary::Column::Tinyint:
out << (int) r.char_value(); out << (int) r.int8_value();
break; break;
case NdbDictionary::Column::Binary: case NdbDictionary::Column::Binary:
if (!f.hex_format) if (!f.hex_format)
...@@ -411,7 +411,7 @@ ndbrecattr_print_formatted(NdbOut& out, const NdbRecAttr &r, ...@@ -411,7 +411,7 @@ ndbrecattr_print_formatted(NdbOut& out, const NdbRecAttr &r,
break; break;
case NdbDictionary::Column::Year: case NdbDictionary::Column::Year:
{ {
uint year = 1900 + r.u_char_value(); uint year = 1900 + r.u_8_value();
char buf[40]; char buf[40];
sprintf(buf, "%04d", year); sprintf(buf, "%04d", year);
out << buf; out << buf;
......
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