Source:
<code>public FramerContext( final EngineConfiguration configuration, final FixCounters fixCounters, final EngineContext engineContext, final ErrorHandler errorHandler, final Image replayImage, final Image slowReplayImage, final EngineTimers timers, final AgentInvoker conductorAgentInvoker, final RecordingCoordinator recordingCoordinator) { this.configuration = configuration; final SessionIdStrategy sessionIdStrategy = configuration.sessionIdStrategy(); final IdleStrategy idleStrategy = configuration.framerIdleStrategy(); final Streams outboundLibraryStreams = engineContext.outboundLibraryStreams(); this.sessionContexts = new SessionContexts( configuration.sessionIdBuffer(), sessionIdStrategy, configuration.initialSequenceIndex(), errorHandler); this.inboundPublication = engineContext.inboundPublication(); this.outboundPublication = outboundLibraryStreams.gatewayPublication(idleStrategy, outboundLibraryStreams.dataPublication("outboundPublication")); sentSequenceNumberIndex = new SequenceNumberIndexReader( <START> configuration.sentSequenceNumberBuffer(), errorHandler, recordingCoordinator.outboundRecordingIdLookup(), <END> configuration.logFileDir()); receivedSequenceNumberIndex = new SequenceNumberIndexReader( configuration.receivedSequenceNumberBuffer(), errorHandler, recordingCoordinator.inboundRecordingIdLookup(), null); gatewaySessions = new GatewaySessions( epochClock, inboundPublication, outboundPublication, sessionIdStrategy, configuration.sessionCustomisationStrategy(), fixCounters, configuration, errorHandler, sessionContexts, configuration.sessionPersistenceStrategy(), sentSequenceNumberIndex, receivedSequenceNumberIndex); final EndPointFactory endPointFactory = new EndPointFactory( configuration, sessionContexts, inboundPublication, fixCounters, errorHandler, gatewaySessions, engineContext.senderSequenceNumbers()); final FinalImagePositions finalImagePositions = new FinalImagePositions(); framer = new Framer( epochClock, timers.outboundTimer(), timers.sendTimer(), configuration, endPointFactory, engineContext.outboundLibrarySubscription( "outboundLibrarySubscription", finalImagePositions), engineContext.outboundLibrarySubscription( "outboundSlowSubscription", null), replayImage, slowReplayImage, engineContext.inboundReplayQuery(), outboundPublication, inboundPublication, this.adminCommands, sessionIdStrategy, sessionContexts, sentSequenceNumberIndex, receivedSequenceNumberIndex, gatewaySessions, errorHandler, configuration.agentNamePrefix(), engineContext.inboundCompletionPosition(), engineContext.outboundLibraryCompletionPosition(), finalImagePositions, conductorAgentInvoker, recordingCoordinator); }</code><technical_language>changes RecordingIdLookup class Framer Indexer agents. a class is designed threadsafe. pass out separate instances thread</technical_language>

Target:
public FramerContext( final EngineConfiguration configuration, final FixCounters fixCounters, final EngineContext engineContext, final ErrorHandler errorHandler, final Image replayImage, final Image slowReplayImage, final EngineTimers timers, final AgentInvoker conductorAgentInvoker, final RecordingCoordinator recordingCoordinator) { this.configuration = configuration; final SessionIdStrategy sessionIdStrategy = configuration.sessionIdStrategy(); final IdleStrategy idleStrategy = configuration.framerIdleStrategy(); final Streams outboundLibraryStreams = engineContext.outboundLibraryStreams(); this.sessionContexts = new SessionContexts( configuration.sessionIdBuffer(), sessionIdStrategy, configuration.initialSequenceIndex(), errorHandler); this.inboundPublication = engineContext.inboundPublication(); this.outboundPublication = outboundLibraryStreams.gatewayPublication(idleStrategy, outboundLibraryStreams.dataPublication("outboundPublication")); sentSequenceNumberIndex = new SequenceNumberIndexReader( configuration.sentSequenceNumberBuffer(), errorHandler, recordingCoordinator.framerOutboundLookup(), configuration.logFileDir()); receivedSequenceNumberIndex = new SequenceNumberIndexReader( configuration.receivedSequenceNumberBuffer(), errorHandler, recordingCoordinator.framerInboundLookup(), null); gatewaySessions = new GatewaySessions( epochClock, inboundPublication, outboundPublication, sessionIdStrategy, configuration.sessionCustomisationStrategy(), fixCounters, configuration, errorHandler, sessionContexts, configuration.sessionPersistenceStrategy(), sentSequenceNumberIndex, receivedSequenceNumberIndex); final EndPointFactory endPointFactory = new EndPointFactory( configuration, sessionContexts, inboundPublication, fixCounters, errorHandler, gatewaySessions, engineContext.senderSequenceNumbers()); final FinalImagePositions finalImagePositions = new FinalImagePositions(); framer = new Framer( epochClock, timers.outboundTimer(), timers.sendTimer(), configuration, endPointFactory, engineContext.outboundLibrarySubscription( "outboundLibrarySubscription", finalImagePositions), engineContext.outboundLibrarySubscription( "outboundSlowSubscription", null), replayImage, slowReplayImage, engineContext.inboundReplayQuery(), outboundPublication, inboundPublication, this.adminCommands, sessionIdStrategy, sessionContexts, sentSequenceNumberIndex, receivedSequenceNumberIndex, gatewaySessions, errorHandler, configuration.agentNamePrefix(), engineContext.inboundCompletionPosition(), engineContext.outboundLibraryCompletionPosition(), finalImagePositions, conductorAgentInvoker, recordingCoordinator); }