[Quickfix-users] Weekly sessions
Brought to you by:
orenmnero
From: Brian E. <azz...@ya...> - 2005-09-13 18:40:43
|
It appears that I am either somewhat confused as to how to configure a weeklong session, or that the SessionTime code is wrong. I am trying to have a weeklong session that includes about 5 minutes of downtime. Originally we had sessions going from Sunday to Friday, but we had odd results and switched to a Saturday-Saturday model, which seemed to work pretty well until we had to modify the start and end times. I am sure that the problem existed before that change, but due to the nature of when our clients connect, the problem did not present itself until now. I currently have the session start/end times defined as such: StartDay=Saturday StartTime=23:50:00 EndDay=Saturday EndTime=23:45:00 The thought is that wuold give us a weeklong session, from Saturday at 23:50 UMT to the next Saturday at 23:45 UMT - a weeklong session with 5 minutes of downtime to perform some system maintenance and have QF reset the sequence numbers. What we're finding instead is that QF is treating this as a daily session that starts at 23:50 and ends at 23:45 - kicking off all our users at the same time every day. As some of the markets we connect to are open at this point, the users aren't real happy. >grin< This is where either someone says "hey dummy, that's not how you set up a weeklong session" or we look at SessionTime.cpp. The problem (if there is one), would appear to be in the following code fragment: ----SessionTime.cpp bool SessionTime::isSessionTime( const UtcTimeOnly& startTime, const UtcTimeOnly& endTime, int startDay, int endDay, const UtcTimeStamp& time ) { QF_STACK_PUSH(SessionTime::isSessionTime) int currentDay = time.getWeekDay(); UtcTimeOnly timeOnly( time, 0 ); if( startDay == endDay ) { if( timeOnly < startTime && timeOnly > endTime ) return false; } ----end code fragment The code to test whether we're "in session" appears to make the assumption that if the start and end days are the same, we must be talking about a daily session. That does not seem right to me. Instead, there should be some sort of other indicator (daily vs. weeklong) that can be set based on whether StartDay and EndDay are set in the configuration file. Using an "out of range" value for startDay and/or endDay (like -1 or 0) is one way to get around this problem, or a separate boolean value that gets set during configuration reads. I also had a thought that perhaps I should only define a start OR end day, but not both - there seems to be some code in SessionTime dealing with days of "0", but I didn't have time to completely reverse engineer the code paths. If this is the case, the documentation should be updated to reflect this - the current documentation definitely implies that StartDay and EndDay should both be set for weeklong sessions. This is also perhaps an issue with having a start time that comes AFTER the end time on the same day - the code might be written assuming that we're trying to define a single-day (Saturday only) session and gets tripped up by the reversed times. This is easy enough to code around and I could provide a patch for this in a day or two. Thanks, Brian Erst Thynk Software, Inc. |