When I have my plugin join with the bug table (using the IPluginBugJoin interface), it takes a very long time to list cases (usually a couple minutes), especially if the search filter has over 1000 results. It will sometimes timeout with the following error:
Sorry for the large blob of text.
The Fog Creek Maintenance Service has reported an error. Error in plugin Organizations - Hide Notification 8/11/2010 1:25 PM (GMT-05:00): Wasabi.Runtime.WasabiException (0x80004005): Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding. SQL: SELECT Bug.ixBug AS ixBug, Bug.fOpen AS fOpen, Bug.sTitle AS sTitle, Bug.sOriginalTitle AS sOriginalTitle, Bug.sLatestTextSummary AS sLatestTextSummary, Bug.ixBugEventLatestText AS ixBugEventLatestText, Bug.ixProject AS ixProject, Bug.ixArea AS ixArea, Bug.ixPersonAssignedTo AS ixPersonAssignedTo, Bug.ixPersonOpenedBy AS ixPersonOpenedBy, Bug.ixPersonResolvedBy AS ixPersonResolvedBy, Bug.ixPersonClosedBy AS ixPersonClosedBy, Bug.ixPersonLastEditedBy AS ixPersonLastEditedBy, Bug.ixPersonEstimator AS ixPersonEstimator, Bug.ixStatus AS ixStatus, Bug.ixPriority AS ixPriority, Bug.ixFixFor AS ixFixFor, Bug.sVersion AS sVersion, Bug.sComputer AS sComputer, Bug.hrsOrigEst AS hrsOrigEst, Bug.hrsCurrEst AS hrsCurrEst, Bug.hrsElapsed AS hrsElapsed, Bug.hrsElapsedExtra AS hrsElapsedExtra, Bug.c AS c, Bug.sCustomerEmail AS sCustomerEmail, Bug.ixCategory AS ixCategory, Bug.dtResolved AS dtResolved, Bug.dtOpened as dtOpened, Bug.dtClosed AS dtClosed, Bug.ixBugEventLatest AS ixBugEventLatest, Bug.ixMailbox AS ixMailbox, Bug.fTrained AS fTrained, Bug.fReplied AS fReplied, Bug.fForwarded AS fForwarded, Bug.fEstLocked AS fEstLocked, Bug.ixOriginalPrediction AS ixOriginalPrediction, Bug.nStatType AS nStatType, Bug.sTicket AS sTicket, Bug.ixDiscussTopic AS ixDiscussTopic, Bug.sReleaseNotes AS sReleaseNotes, Bug.dtDue AS dtDue, Bug.ixBugEmail AS ixBugEmail, Bug.ixTagEventLatest AS ixTagEventLatest, Bug.ixBugParent AS ixBugParent, Bug.ixBugRoot AS ixBugRoot, Bug.iSetLeft AS iSetLeft, Bug.iSetRight AS iSetRight, Project.sProject AS sProject, Project.ixGroup AS ixGroup, Area.sArea AS sArea, PersonAssignedTo.sFullName AS sPersonAssignedTo, PersonAssignedTo.sEmail AS sEmailAssignedTo, PersonAssignedTo.fNotify AS fNotify, Status.sStatus AS sStatus, Priority.sPriority AS sPriority, BugView.ixBugEvent AS ixBugEventLastView, BugView.dt AS dtLastView, FixFor.sFixFor AS sFixFor, FixFor.dt AS dtFixFor, Plugin_8_CustomBugData.entrysourceH51 AS Plugin_8_CustomBugData_entrysourceH51, Plugin_8_CustomBugData.ixBug AS Plugin_8_CustomBugData_ixBug, Plugin_23_Bug_Organization.ixBug AS Plugin_23_Bug_Organization_ixBug, Plugin_23_Bug_Organization.ixOrg AS Plugin_23_Bug_Organization_ixOrg FROM (((((((( Bug INNER JOIN Project AS Project ON ( Bug.ixProject = Project.ixProject ) ) INNER JOIN Area AS Area ON ( Bug.ixArea = Area.ixArea ) ) INNER JOIN Person AS PersonAssignedTo ON ( Bug.ixPersonAssignedTo = PersonAssignedTo.ixPerson ) ) INNER JOIN Status AS Status ON ( Bug.ixStatus = Status.ixStatus ) ) INNER JOIN Priority AS Priority ON ( Bug.ixPriority = Priority.ixPriority ) ) LEFT JOIN BugView AS BugView ON ( Bug.ixBug = BugView.ixBug AND BugView.ixPerson = ? ) ) INNER JOIN FixFor AS FixFor ON ( Bug.ixFixFor = FixFor.ixFixFor ) ) LEFT JOIN Plugin_8_CustomBugData AS Plugin_8_CustomBugData ON ( Plugin_8_CustomBugData.ixBug = Bug.ixBug ) ) LEFT JOIN Plugin_23_Bug_Organization AS Plugin_23_Bug_Organization ON ( Plugin_23_Bug_Organization.ixBug = Bug.ixBug ) WHERE ( Bug.ixBug = ? ) Params: II 1: -2 2: 6415
at MySql.Data.MySqlClient.MySqlCommand.ExecuteReader (CommandBehavior behavior) [0x00000]
at MySql.Data.MySqlClient.MySqlCommand.ExecuteDbDataReader (CommandBehavior behavior) [0x00000]
at System.Data.Common.DbCommand.ExecuteReader (CommandBehavior behavior) [0x00000]
at (wrapper remoting-invoke-with-check) System.Data.Common.DbCommand:ExecuteReader (System.Data.CommandBehavior)
at Wasabi.Runtime.ADO.KeySetCursor..ctor (System.Data.Common.DbCommand command, Boolean noUpdates) [0x00000]
at Wasabi.Runtime.ADO.KeySetCursor..ctor (System.Data.Common.DbCommand command) [0x00000]
at Wasabi.Runtime.ADO.RecordSet..ctor (Wasabi.Runtime.ADO.Command command) [0x00000]
at Wasabi.Runtime.ADO.Command.Execute (System.Object ignored1, System.Object ignored2, Nullable`1 Options) [0x00000]
at FogCreek.FogBugz.CCmd.InternalExecute (System.String& sError) [0x00000]
at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke (System.Runtime.Remoting.Proxies.RealProxy rp, IMessage msg, System.Exception& exc, System.Object[]& out_args) [0x00000]
However, if I comment out the bug join interface function, and leave the rest of my plugin in tact, everything works very quickly and a search for all bugs returns results almost instantly.
I was wondering what I could be doing wrong in my plugin, or if there are any known issues with filtering while IPluginBugJoin is in use. I have a heartbeat task that populates my bug joined table at a rate of 32 bugs per cycle, and besides the filters, my plug in doesn't read from that table.
Any insight would be greatly appreciated. Thank you!