Skip to content

Commit b1eb16b

Browse files
authored
Support setting RefreshOnLogon for Initiators (#286)
* unify naming refreshAtLogon -> refreshOnLogon * unify naming refreshMessageStoreOnLogon -> refreshOnLogon * - removed method `isStateRefreshNeeded()`: passed `msgType` was always `MsgType.LOGON` and check for acceptor could be removed anyway - extracted common code to method `refreshState()` * Moved RefreshOnLogon to Misc section in documentation.
1 parent 0c4aa71 commit b1eb16b

File tree

3 files changed

+26
-29
lines changed

3 files changed

+26
-29
lines changed

quickfixj-core/src/main/doc/usermanual/usage/configuration.html

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -601,16 +601,6 @@ <H3>QuickFIX Settings</H3>
601601
</TD>
602602
<TD> empty, ie all remote addresses are allowed </TD>
603603
</TR>
604-
<TR ALIGN="left" VALIGN="middle">
605-
<TD> <I>RefreshOnLogon</I></TD>
606-
607-
<TD>Refresh the session state when a logon is received. This allows a simple form of failover
608-
when the message store data is persistent. The
609-
option will be ignored for message stores that are not persistent
610-
(e.g., MemoryStore).</TD>
611-
<TD> Y<br/>N</TD>
612-
<TD>N</TD>
613-
</TR>
614604

615605
<TR ALIGN="center" VALIGN="middle">
616606
<TD COLSPAN="4" class="subsection"><A NAME="Security">Secure Communication Options</A></TD>
@@ -1207,6 +1197,15 @@ <H3>QuickFIX Settings</H3>
12071197
</TD>
12081198
<TD> </TD>
12091199
</TR>
1200+
<TR ALIGN="left" VALIGN="middle">
1201+
<TD> <I>RefreshOnLogon</I></TD>
1202+
<TD>Refresh the session state when a Logon is received. This allows a simple form of failover
1203+
when the message store data is persistent. The
1204+
option will be ignored for message stores that are not persistent
1205+
(e.g., MemoryStore).</TD>
1206+
<TD> Y<br/>N</TD>
1207+
<TD>N</TD>
1208+
</TR>
12101209
<TR ALIGN="left" VALIGN="middle">
12111210
<TD> <I>ResetOnLogon</I> </TD>
12121211
<TD> Determines if sequence numbers should be reset before sending/receiving a logon request. </TD>

quickfixj-core/src/main/java/quickfix/DefaultSessionFactory.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,7 @@ public Session create(SessionID sessionID, SessionSettings settings) throws Conf
186186
final boolean resetOnLogon = getSetting(settings, sessionID, Session.SETTING_RESET_ON_LOGON,
187187
false);
188188

189-
final boolean refreshAtLogon = getSetting(settings, sessionID,
189+
final boolean refreshOnLogon = getSetting(settings, sessionID,
190190
Session.SETTING_REFRESH_ON_LOGON, false);
191191

192192
final boolean checkCompID = getSetting(settings, sessionID, Session.SETTING_CHECK_COMP_ID,
@@ -224,7 +224,7 @@ public Session create(SessionID sessionID, SessionSettings settings) throws Conf
224224
final Session session = new Session(application, messageStoreFactory, sessionID,
225225
dataDictionaryProvider, sessionSchedule, logFactory,
226226
messageFactory, heartbeatInterval, checkLatency, maxLatency, timestampPrecision,
227-
resetOnLogon, resetOnLogout, resetOnDisconnect, refreshAtLogon, checkCompID,
227+
resetOnLogon, resetOnLogout, resetOnDisconnect, refreshOnLogon, checkCompID,
228228
redundantResentRequestAllowed, persistMessages, useClosedIntervalForResend,
229229
testRequestDelayMultiplier, senderDefaultApplVerID, validateSequenceNumbers,
230230
logonIntervals, resetOnError, disconnectOnError, disableHeartBeatCheck, rejectGarbledMessage,

quickfixj-core/src/main/java/quickfix/Session.java

Lines changed: 15 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -294,7 +294,7 @@ public class Session implements Closeable {
294294

295295
/**
296296
* Requests that state and message data be refreshed from the message store at
297-
* logon, if possible. This supports simple failover behavior for acceptors
297+
* logon, if possible. This supports simple failover behavior for acceptors.
298298
*/
299299
public static final String SETTING_REFRESH_ON_LOGON = "RefreshOnLogon";
300300

@@ -405,7 +405,7 @@ public class Session implements Closeable {
405405
private final boolean resetOnError;
406406
private final boolean disconnectOnError;
407407
private final UtcTimestampPrecision timestampPrecision;
408-
private final boolean refreshMessageStoreAtLogon;
408+
private final boolean refreshOnLogon;
409409
private final boolean redundantResentRequestsAllowed;
410410
private final boolean persistMessages;
411411
private final boolean checkCompID;
@@ -468,7 +468,7 @@ public class Session implements Closeable {
468468
LogFactory logFactory, MessageFactory messageFactory, int heartbeatInterval,
469469
boolean checkLatency, int maxLatency, UtcTimestampPrecision timestampPrecision,
470470
boolean resetOnLogon, boolean resetOnLogout, boolean resetOnDisconnect,
471-
boolean refreshMessageStoreAtLogon, boolean checkCompID,
471+
boolean refreshOnLogon, boolean checkCompID,
472472
boolean redundantResentRequestsAllowed, boolean persistMessages,
473473
boolean useClosedRangeForResend, double testRequestDelayMultiplier,
474474
DefaultApplVerID senderDefaultApplVerID, boolean validateSequenceNumbers,
@@ -488,7 +488,7 @@ public class Session implements Closeable {
488488
this.resetOnLogout = resetOnLogout;
489489
this.resetOnDisconnect = resetOnDisconnect;
490490
this.timestampPrecision = timestampPrecision;
491-
this.refreshMessageStoreAtLogon = refreshMessageStoreAtLogon;
491+
this.refreshOnLogon = refreshOnLogon;
492492
this.dataDictionaryProvider = dataDictionaryProvider;
493493
this.messageFactory = messageFactory;
494494
this.checkCompID = checkCompID;
@@ -1254,10 +1254,6 @@ private boolean resetOrDisconnectIfRequired(Message msg) {
12541254
return false;
12551255
}
12561256

1257-
private boolean isStateRefreshNeeded(String msgType) {
1258-
return refreshMessageStoreAtLogon && !state.isInitiator() && MsgType.LOGON.equals(msgType);
1259-
}
1260-
12611257
private void nextReject(Message reject) throws FieldNotFound, RejectLogon, IncorrectDataFormat,
12621258
IncorrectTagValue, UnsupportedMessageType, IOException, InvalidMessage {
12631259
if (!verify(reject, false, validateSequenceNumbers)) {
@@ -2013,10 +2009,8 @@ private boolean generateLogon() throws IOException {
20132009
if (sessionID.isFIXT()) {
20142010
logon.setField(DefaultApplVerID.FIELD, senderDefaultApplVerID);
20152011
}
2016-
if (isStateRefreshNeeded(MsgType.LOGON)) {
2017-
getLog().onEvent("Refreshing message/state store at logon");
2018-
getStore().refresh();
2019-
stateListener.onRefresh();
2012+
if (refreshOnLogon) {
2013+
refreshState();
20202014
}
20212015
if (resetOnLogon) {
20222016
resetState();
@@ -2117,10 +2111,8 @@ private void nextLogon(Message logon) throws FieldNotFound, RejectLogon, Incorre
21172111
// QFJ-926 - reset session before accepting Logon
21182112
resetIfSessionNotCurrent(sessionID, SystemTime.currentTimeMillis());
21192113

2120-
if (isStateRefreshNeeded(MsgType.LOGON)) {
2121-
getLog().onEvent("Refreshing message/state store at logon");
2122-
getStore().refresh();
2123-
stateListener.onRefresh();
2114+
if (refreshOnLogon) {
2115+
refreshState();
21242116
}
21252117

21262118
if (logon.isSetField(ResetSeqNumFlag.FIELD)) {
@@ -2803,7 +2795,7 @@ public boolean getRedundantResentRequestsAllowed() {
28032795
}
28042796

28052797
public boolean getRefreshOnLogon() {
2806-
return refreshMessageStoreAtLogon;
2798+
return refreshOnLogon;
28072799
}
28082800

28092801
public boolean getResetOnDisconnect() {
@@ -3033,4 +3025,10 @@ private void setLogonTags(final Message logon) {
30333025
}
30343026
}
30353027

3028+
private void refreshState() throws IOException {
3029+
getLog().onEvent("Refreshing message/state store on Logon");
3030+
getStore().refresh();
3031+
stateListener.onRefresh();
3032+
}
3033+
30363034
}

0 commit comments

Comments
 (0)