1 message in com.mysql.lists.ndb-connectorsRev 265: Fixed EventHandlers for MGM/...
FromSent OnAttachments
Monty Taylor19 Nov 2007 15:55 
Subject:Rev 265: Fixed EventHandlers for MGM/J. in http://bazaar.launchpad.net/~ndb-connectors/ndb-connectors/devel
From:Monty Taylor (mtay@mysql.com)
Date:11/19/2007 03:55:26 PM
List:com.mysql.lists.ndb-connectors

At http://bazaar.launchpad.net/~ndb-connectors/ndb-connectors/devel

------------------------------------------------------------ revno: 265 revision-id: mtay@mysql.com-20071119235529-0ymltvpjms5xkh3z parent: mtay@mysql.com-20071119093922-tcb6s2rywi0zlv2e committer: Monty Taylor <mtay@mysql.com> branch nick: devel timestamp: Mon 2007-11-19 15:55:29 -0800 message: Fixed EventHandlers for MGM/J. modified: interface/mgmapi/NdbLogEvent.i ndblogevent.i-20070906065931-8drgzkovsy4cdn0b-1 interface/mgmapi/NdbLogEventManager.i
ndbmgmlogeventhandle-20070906065939-pj4qrhof8kkzg3d1-1 java/com/mysql/cluster/mgmj/examples/SampleMGMJ.java
samplemgmj.java-20071119093428-2f2zw02dpk5jlq9f-2 java/mgmj.i mgmapi.i-20070415064013-80k9rsqzumm2kjaf-1 === modified file 'interface/mgmapi/NdbLogEvent.i' --- a/interface/mgmapi/NdbLogEvent.i 2007-11-19 09:34:49 +0000 +++ b/interface/mgmapi/NdbLogEvent.i 2007-11-19 23:55:29 +0000 @@ -81,6 +81,7 @@

};

+ %inline %{

@@ -944,7 +945,7 @@

struct BaseEventWrapper { int ret; - BaseEvent * theEvent; + ndb_logevent * theEvent; };

%}

=== modified file 'interface/mgmapi/NdbLogEventManager.i' --- a/interface/mgmapi/NdbLogEventManager.i 2007-11-19 09:34:49 +0000 +++ b/interface/mgmapi/NdbLogEventManager.i 2007-11-19 23:55:29 +0000 @@ -48,8 +48,8 @@

ndb_logevent_handle * handle;

- std::map<Ndb_logevent_type,std::vector<NdbLogEventTypeListener *> >
evtListeners; - std::map<ndb_mgm_event_category,std::vector<NdbLogEventCategoryListener *>
> evtCategoryListeners; + std::map<Ndb_logevent_type,NdbLogEventTypeListener *> evtListeners; + std::map<ndb_mgm_event_category,NdbLogEventCategoryListener *>
evtCategoryListeners;

public:

@@ -66,16 +66,10 @@ Ndb_logevent_type theType = listener->getEventType();

- std::vector<NdbLogEventTypeListener *> evtVec; + printf("Inserting %p, %d\n",listener, theType); +
evtListeners.insert(std::make_pair<Ndb_logevent_type,NdbLogEventTypeListener
*>(theType,listener)); +

- try { - evtVec = evtListeners.at(theType); - } catch (std::out_of_range e) { - if
(!(evtListeners.insert(std::make_pair<Ndb_logevent_type,std::vector<NdbLogEventTypeListener
*> >(theType,evtVec))).second) { - return -1; - } - }; - evtVec.push_back(listener); return 0; }

@@ -87,17 +81,16 @@ ndb_mgm_event_category theCategory = listener->getEventCategory();

- std::vector<NdbLogEventCategoryListener *> evtVec; + NdbLogEventCategoryListener * evtLis; +

try { - evtVec = evtCategoryListeners.at(theCategory); + evtLis = evtCategoryListeners.at(theCategory); } catch (std::out_of_range e) { - if
(!((evtCategoryListeners.insert(std::make_pair<ndb_mgm_event_category,std::vector<NdbLogEventCategoryListener*>
>(theCategory,evtVec))).second)) { + if
(!((evtCategoryListeners.insert(std::make_pair<ndb_mgm_event_category,NdbLogEventCategoryListener*>(theCategory,evtLis))).second))
{ return -1; } - evtVec = evtCategoryListeners.at(theCategory); }; - evtVec.push_back(listener); return 0; }

@@ -111,293 +104,42 @@ if (event==0) { return NULL; }*/ - ndb_logevent event; + ndb_logevent * event = (ndb_logevent*) malloc (sizeof(ndb_logevent)); + if (event==0) { + return NULL; + } BaseEventWrapper * eventWrapper = (BaseEventWrapper
*)malloc(sizeof(BaseEventWrapper));

//int r= ndb_logevent_get_next(handle,&(*event),timeout_in_milliseconds); - eventWrapper->ret =
ndb_logevent_get_next(handle,&event,timeout_in_milliseconds); + eventWrapper->ret =
ndb_logevent_get_next(handle,&(*event),timeout_in_milliseconds);

eventWrapper->theEvent = NULL; //TODO: Figure out how to deal with no event properly if (eventWrapper->ret > 0) { - - switch(event.type) { - - case NDB_LE_Connected: - eventWrapper->theEvent = (BaseEvent *)(new ConnectedEvent(event)); - break; - - case NDB_LE_Disconnected: - eventWrapper->theEvent = (BaseEvent *)(new DisconnectedEvent(event)); - break; - - case NDB_LE_CommunicationClosed: - eventWrapper->theEvent = (BaseEvent *)(new CommunicationClosedEvent(event)); - break; - - case NDB_LE_CommunicationOpened: - eventWrapper->theEvent = (BaseEvent *)(new CommunicationOpenedEvent(event)); - break; - - case NDB_LE_ConnectedApiVersion: - eventWrapper->theEvent = (BaseEvent *)(new ConnectedApiVersionEvent(event)); - break; - - case NDB_LE_GlobalCheckpointStarted: - eventWrapper->theEvent = (BaseEvent *)(new
GlobalCheckpointStartedEvent(event)); - break; - - case NDB_LE_GlobalCheckpointCompleted: - eventWrapper->theEvent = (BaseEvent *)(new
GlobalCheckpointCompletedEvent(event)); - break; - - case NDB_LE_LocalCheckpointStarted: - eventWrapper->theEvent = (BaseEvent *)(new
LocalCheckpointStartedEvent(event)); - break; - - case NDB_LE_LocalCheckpointCompleted: - eventWrapper->theEvent = (BaseEvent *)(new
LocalCheckpointCompletedEvent(event)); - break; - - case NDB_LE_LCPStoppedInCalcKeepGci: - eventWrapper->theEvent = (BaseEvent *)(new
LCPStoppedInCalcKeepGciEvent(event)); - break; - - case NDB_LE_LCPFragmentCompleted: - eventWrapper->theEvent = (BaseEvent *)(new
LCPFragmentCompletedEvent(event)); - break; - - case NDB_LE_NDBStartStarted: - eventWrapper->theEvent = (BaseEvent *)(new NDBStartStartedEvent(event)); - break; - - case NDB_LE_NDBStartCompleted: - eventWrapper->theEvent = (BaseEvent *)(new NDBStartCompletedEvent(event)); - break; - - case NDB_LE_STTORRYRecieved: - eventWrapper->theEvent = (BaseEvent *)(new STTORRYRecievedEvent(event)); - break; - - case NDB_LE_StartPhaseCompleted: - eventWrapper->theEvent = (BaseEvent *)(new StartPhaseCompletedEvent(event)); - break; - - case NDB_LE_CM_REGCONF: - eventWrapper->theEvent = (BaseEvent *)(new CmRegConfEvent(event)); - break; - - case NDB_LE_CM_REGREF: - eventWrapper->theEvent = (BaseEvent *)(new CmRegRefEvent(event)); - break; - - case NDB_LE_FIND_NEIGHBOURS: - eventWrapper->theEvent = (BaseEvent *)(new FindNeighboursEvent(event)); - break; - - case NDB_LE_NDBStopStarted: - eventWrapper->theEvent = (BaseEvent *)(new NDBStopStartedEvent(event)); - break; - - case NDB_LE_NDBStopCompleted: - eventWrapper->theEvent = (BaseEvent *)(new NDBStopCompletedEvent(event)); - break; - - case NDB_LE_NDBStopForced: - eventWrapper->theEvent = (BaseEvent *)(new NDBStopForcedEvent(event)); - break; - - case NDB_LE_NDBStopAborted: - eventWrapper->theEvent = (BaseEvent *)(new NDBStopAbortedEvent(event)); - break; - - case NDB_LE_StartREDOLog: - eventWrapper->theEvent = (BaseEvent *)(new StartREDOLogEvent(event)); - break; - - case NDB_LE_StartLog: - eventWrapper->theEvent = (BaseEvent *)(new StartLogEvent(event)); - break; - - case NDB_LE_UNDORecordsExecuted: - eventWrapper->theEvent = (BaseEvent *)(new UNDORecordsExecutedEvent(event)); - break; - - case NDB_LE_NR_CopyDict: - eventWrapper->theEvent = (BaseEvent *)(new NRCopyDictEvent(event)); - break; - - case NDB_LE_NR_CopyDistr: - eventWrapper->theEvent = (BaseEvent *)(new NRCopyDistrEvent(event)); - break; - - case NDB_LE_NR_CopyFragsStarted: - eventWrapper->theEvent = (BaseEvent *)(new NRCopyFragsStartedEvent(event)); - break; - - case NDB_LE_NR_CopyFragDone: - eventWrapper->theEvent = (BaseEvent *)(new NRCopyFragDoneEvent(event)); - break; - - case NDB_LE_NR_CopyFragsCompleted: - eventWrapper->theEvent = (BaseEvent *)(new
NRCopyFragsCompletedEvent(event)); - break; - - case NDB_LE_NodeFailCompleted: - eventWrapper->theEvent = (BaseEvent *)(new NodeFailCompletedEvent(event)); - break; - - case NDB_LE_NODE_FAILREP: - eventWrapper->theEvent = (BaseEvent *)(new NodeFAILREPEvent(event)); - break; - - case NDB_LE_ArbitState: - eventWrapper->theEvent = (BaseEvent *)(new ArbitStateEvent(event)); - break; - - case NDB_LE_ArbitResult: - eventWrapper->theEvent = (BaseEvent *)(new ArbitResultEvent(event)); - break; - - case NDB_LE_GCP_TakeoverStarted: - eventWrapper->theEvent = (BaseEvent *)(new GCPTakeoverStartedEvent(event)); - break; - - case NDB_LE_GCP_TakeoverCompleted: - eventWrapper->theEvent = (BaseEvent *)(new
GCPTakeoverCompletedEvent(event)); - break; - - case NDB_LE_LCP_TakeoverStarted: - eventWrapper->theEvent = (BaseEvent *)(new LCPTakeoverStartedEvent(event)); - break; - - case NDB_LE_LCP_TakeoverCompleted: - eventWrapper->theEvent = (BaseEvent *)(new
LCPTakeoverCompletedEvent(event)); - break; - - case NDB_LE_TransReportCounters: - eventWrapper->theEvent = (BaseEvent *)(new TransReportCountersEvent(event)); - break; - - case NDB_LE_OperationReportCounters: - eventWrapper->theEvent = (BaseEvent *)(new
OperationReportCountersEvent(event)); - break; - - case NDB_LE_TableCreated: - eventWrapper->theEvent = (BaseEvent *)(new TableCreatedEvent(event)); - break; - - case NDB_LE_UndoLogBlocked: - eventWrapper->theEvent = (BaseEvent *)(new UndoLogBlockedEvent(event)); - break; - - case NDB_LE_JobStatistic: - eventWrapper->theEvent = (BaseEvent *)(new JobStatisticEvent(event)); - break; - - case NDB_LE_SendBytesStatistic: - eventWrapper->theEvent = (BaseEvent *)(new SendBytesStatisticEvent(event)); - break; - - case NDB_LE_ReceiveBytesStatistic: - eventWrapper->theEvent = (BaseEvent *)(new
ReceiveBytesStatisticEvent(event)); - break; - - case NDB_LE_MemoryUsage: - eventWrapper->theEvent = (BaseEvent *)(new MemoryUsageEvent(event)); - break; - -/* case NDB_LE_ThreadConfigLoop: - eventWrapper->theEvent = (BaseEvent *)(new ThreadConfigLoopEvent(event)); - break; -*/ - case NDB_LE_TransporterError: - eventWrapper->theEvent = (BaseEvent *)(new TransporterErrorEvent(event)); - break; - - case NDB_LE_TransporterWarning: - eventWrapper->theEvent = (BaseEvent *)(new TransporterWarningEvent(event)); - break; - - case NDB_LE_MissedHeartbeat: - eventWrapper->theEvent = (BaseEvent *)(new MissedHeartbeatEvent(event)); - break; - - case NDB_LE_DeadDueToHeartbeat: - eventWrapper->theEvent = (BaseEvent *)(new DeadDueToHeartbeatEvent(event)); - break; - - case NDB_LE_WarningEvent: - eventWrapper->theEvent = (BaseEvent *)(new WarningEventEvent(event)); - break; - - case NDB_LE_SentHeartbeat: - eventWrapper->theEvent = (BaseEvent *)(new SentHeartbeatEvent(event)); - break; - - case NDB_LE_CreateLogBytes: - eventWrapper->theEvent = (BaseEvent *)(new CreateLogBytesEvent(event)); - break; - - case NDB_LE_InfoEvent: - eventWrapper->theEvent = (BaseEvent *)(new InfoEventEvent(event)); - break; - - case NDB_LE_SingleUser: - eventWrapper->theEvent = (BaseEvent *)(new SingleUserEvent(event)); - break; - - case NDB_LE_BackupStarted: - eventWrapper->theEvent = (BaseEvent *)(new BackupStartedEvent(event)); - break; - - case NDB_LE_BackupFailedToStart: - eventWrapper->theEvent = (BaseEvent *)(new BackupFailedToStartEvent(event)); - break; - -/* case NDB_LE_BackupStatus: - eventWrapper->theEvent = (BaseEvent *)(new BackupStatusEvent(event)); - break; -*/ - case NDB_LE_BackupCompleted: - eventWrapper->theEvent = (BaseEvent *)(new BackupCompletedEvent(event)); - break; - - case NDB_LE_BackupAborted: - eventWrapper->theEvent = (BaseEvent *)(new BackupAbortedEvent(event)); - break; - -/* case NDB_LE_RestoreMetaData: - eventWrapper->theEvent = (BaseEvent *)(new RestoreMetaDataEvent(event)); - break; -*/ -/* case NDB_LE_RestoreData: - eventWrapper->theEvent = (BaseEvent *)(new RestoreDataEvent(event)); - break; -*/ -/* case NDB_LE_RestoreLog: - eventWrapper->theEvent = (BaseEvent *)(new RestoreLogEvent(event)); - break; -*/ -/* case NDB_LE_RestoreStarted: - eventWrapper->theEvent = (BaseEvent *)(new RestoreStartedEvent(event)); - break; -*/ -/* case NDB_LE_RestoreCompleted: - eventWrapper->theEvent = (BaseEvent *)(new RestoreCompletedEvent(event)); - break; -*/ - case NDB_LE_EventBufferStatus: - eventWrapper->theEvent = (BaseEvent *)(new EventBufferStatusEvent(event)); - break; - - case NDB_LE_StartReport: - eventWrapper->theEvent = (BaseEvent *)(new StartReportEvent(event)); - break; - - default: - break; - } + eventWrapper->theEvent = event; + + NdbLogEventTypeListener * evtLis = NULL; + NdbLogEventCategoryListener * catLis = NULL; + + try { + evtLis = evtListeners.at(event->type); + + } catch (std::out_of_range e) { + // We don't have a listener to fire + } + if (evtLis != NULL) { + evtLis->handleEvent(event); + } + try { + catLis = evtCategoryListeners.at(event->category); + + } catch (std::out_of_range e) { + // We don't have a listener to fire + } + if (catLis != NULL) { + catLis->handleEvent(event); + } + // r > 0, event exists; // r==0, no event (timeout) // r==-1, error @@ -429,8 +171,8 @@ %}

-%feature("directors") NdbLogEventTypeListener; -%feature("directors") NdbLogEventCategoryListener; +%feature("director") NdbLogEventTypeListener; +%feature("director") NdbLogEventCategoryListener;

class NdbLogEventListener { public:

=== modified file 'java/com/mysql/cluster/mgmj/examples/SampleMGMJ.java' --- a/java/com/mysql/cluster/mgmj/examples/SampleMGMJ.java 2007-11-19 09:39:22
+0000 +++ b/java/com/mysql/cluster/mgmj/examples/SampleMGMJ.java 2007-11-19 23:55:29
+0000 @@ -7,38 +7,43 @@ /** * @param args */ + + public static void main(String[] args) throws MgmApiException {

NdbMgm mgm = NdbMgmFactory.createNdbMgm("localhost");

mgm.setConnectTimeout(4000); mgm.connect(5, 3, true); - int[] filter = { 15,
NdbMgmEventCategory.NDB_MGM_EVENT_CATEGORY_STATISTIC.swigValue(), 0 }; - /*NdbFilterList theList = new NdbFilterList(); - NdbFilterItem theItem = new NdbFilterItem(); - theItem.setLevel(15); - theItem.setCategory(NdbMgmEventCategory.NDB_MGM_EVENT_CATEGORY_STATISTIC); + /*int[] filter = { 15,
NdbMgmEventCategory.NDB_MGM_EVENT_CATEGORY_STATISTIC.swigValue(), 0 }; + NdbLogEventManager manager = mgm.createNdbLogEventManager(filter); */ + + NdbFilterList theList = new NdbFilterList(); + NdbFilterItem theItem = new
NdbFilterItem(15,NdbMgmEventCategory.NDB_MGM_EVENT_CATEGORY_STATISTIC); theList.add(theItem); - NdbLogEventManager manager = mgm.createNdbLogEventManager(theList);*/ - NdbLogEventManager manager = mgm.createNdbLogEventManager(filter); - + NdbLogEventManager manager = mgm.createNdbLogEventManager(theList); + TransReportListener theListener = new TransReportListener(); + System.out.println("Registering listener"); + manager.registerListener(theListener); + System.out.println("Done"); + while(true) { //mgm.dumpState(1, 1000); - BaseEvent event = manager.getLogEvent(5000); + NdbLogEvent event = manager.getLogEvent(5000); if (event != null) { - System.out.println("Got an Event from Node" + event.getSourceNodeId()+"
"+event.getType()); - if (event.getType() == NdbLogEventType.NDB_LE_TransReportCounters) { - TransReportCountersEvent theEvent = new
TransReportCountersEvent(event.getEvent()); + System.out.println("Got an Event from Node" + event.getSourceNodeId()+"
"+event.getEventType()); + if (event.getEventType() == NdbLogEventType.NDB_LE_TransReportCounters) { + TransReportCountersEvent theEvent = new TransReportCountersEvent(event); System.out.println("Trans count:"+theEvent.getTransCount()); System.out.println("Read count:"+theEvent.getReadCount()); System.out.println("Scan count:"+theEvent.getScanCount()); System.out.println("Range Scan count:"+theEvent.getRangeScanCount()); - } else if (event.getType() == NdbLogEventType.NDB_LE_MemoryUsage) { - MemoryUsageEvent theEvent = new MemoryUsageEvent(event.getEvent()); + } else if (event.getEventType() == NdbLogEventType.NDB_LE_MemoryUsage) { + MemoryUsageEvent theEvent = new MemoryUsageEvent(event); if (theEvent.getPageSizeKb() == 8192) { - //System.out.println("Index Memory: "+theEvent.getPagesUsed()); + System.out.println("Index Memory: "+theEvent.getPagesUsed()); } else if (theEvent.getPageSizeKb() == 32768) { - //System.out.println("Data Memory: "+theEvent.getPagesUsed()); + System.out.println("Data Memory: "+theEvent.getPagesUsed()); }

@@ -51,3 +56,31 @@ }

} + +class TransReportListener extends NdbLogEventTypeListener { + + + + /* (non-Javadoc) + * @see com.mysql.cluster.mgmj.NdbLogEventTypeListener#getEventType() + */ + @Override + public NdbLogEventType getEventType() { + // TODO Auto-generated method stub + return NdbLogEventType.NDB_LE_TransReportCounters; + } + + /* (non-Javadoc) + * @see
com.mysql.cluster.mgmj.NdbLogEventCategoryListener#handleEvent(com.mysql.cluster.mgmj.NdbLogEvent) + */ + @Override + public void handleEvent(NdbLogEvent event) { + TransReportCountersEvent theEvent = new TransReportCountersEvent(event); + System.out.println("Listner Trans count:"+theEvent.getTransCount()); + System.out.println("Listner Read count:"+theEvent.getReadCount()); + System.out.println("Listner Scan count:"+theEvent.getScanCount()); + System.out.println("Listner Range Scan count:"+theEvent.getRangeScanCount()); + } + + +}

=== modified file 'java/mgmj.i' --- a/java/mgmj.i 2007-11-19 09:34:49 +0000 +++ b/java/mgmj.i 2007-11-19 23:55:29 +0000 @@ -18,7 +18,7 @@ */

-%module mgmj +%module(directors="1") mgmj

/* %typemap(javaimports) NdbMgmFactory, ndb_mgm_handle, ndb_mgm_cluster_state,
ndb_mgm_node_state "import com.mysql.cluster.errors.*;" @@ -46,12 +46,12 @@ $result=$1->theEvent; } //%typemap(jtype) (BaseEventWrapper *) "BaseEvent"; -%typemap(jstype) (BaseEventWrapper *) "BaseEvent"; -%typemap(jni) (BaseEventWrapper *) "BaseEvent *"; +%typemap(jstype) (BaseEventWrapper *) "NdbLogEvent"; +%typemap(jni) (BaseEventWrapper *) "ndb_logevent *";

%typemap(javaout) (BaseEventWrapper *) { long cPtr = $jnicall; - return (cPtr == 0) ? null : new BaseEvent(cPtr,true); + return (cPtr == 0) ? null : new NdbLogEvent(cPtr,true); } %typemap(newfree) (BaseEventWrapper *) "free($1);"; /*