quickfix-users Mailing List for QuickFIX (Page 53)
Brought to you by:
orenmnero
You can subscribe to this list here.
2002 |
Jan
|
Feb
(4) |
Mar
(6) |
Apr
(2) |
May
(4) |
Jun
(1) |
Jul
(1) |
Aug
(2) |
Sep
(11) |
Oct
(3) |
Nov
|
Dec
|
---|---|---|---|---|---|---|---|---|---|---|---|---|
2003 |
Jan
(7) |
Feb
(3) |
Mar
(10) |
Apr
(40) |
May
(63) |
Jun
(12) |
Jul
(26) |
Aug
(13) |
Sep
(6) |
Oct
(13) |
Nov
(17) |
Dec
(28) |
2004 |
Jan
(13) |
Feb
(6) |
Mar
(9) |
Apr
(20) |
May
(15) |
Jun
(29) |
Jul
(22) |
Aug
(11) |
Sep
(32) |
Oct
(34) |
Nov
(22) |
Dec
(33) |
2005 |
Jan
(17) |
Feb
(8) |
Mar
(3) |
Apr
(20) |
May
(19) |
Jun
(29) |
Jul
(30) |
Aug
(10) |
Sep
(24) |
Oct
|
Nov
(17) |
Dec
(11) |
2006 |
Jan
(32) |
Feb
(54) |
Mar
(34) |
Apr
(43) |
May
(14) |
Jun
(11) |
Jul
(10) |
Aug
(43) |
Sep
(37) |
Oct
(44) |
Nov
(16) |
Dec
(11) |
2007 |
Jan
(26) |
Feb
(5) |
Mar
(23) |
Apr
(3) |
May
(22) |
Jun
(17) |
Jul
(22) |
Aug
(34) |
Sep
(17) |
Oct
(18) |
Nov
(4) |
Dec
(8) |
2008 |
Jan
(28) |
Feb
(28) |
Mar
(23) |
Apr
(37) |
May
(53) |
Jun
(20) |
Jul
(30) |
Aug
(12) |
Sep
(19) |
Oct
(16) |
Nov
(15) |
Dec
(10) |
2009 |
Jan
(19) |
Feb
(8) |
Mar
(21) |
Apr
(8) |
May
(15) |
Jun
(22) |
Jul
(34) |
Aug
(18) |
Sep
(23) |
Oct
(26) |
Nov
(16) |
Dec
(13) |
2010 |
Jan
(38) |
Feb
(17) |
Mar
(39) |
Apr
(34) |
May
(5) |
Jun
(15) |
Jul
(7) |
Aug
(18) |
Sep
(4) |
Oct
(16) |
Nov
(3) |
Dec
(17) |
2011 |
Jan
(28) |
Feb
(12) |
Mar
(36) |
Apr
(9) |
May
(26) |
Jun
(27) |
Jul
(6) |
Aug
(10) |
Sep
(6) |
Oct
(1) |
Nov
(1) |
Dec
|
2012 |
Jan
(3) |
Feb
(4) |
Mar
|
Apr
(7) |
May
(9) |
Jun
(4) |
Jul
(2) |
Aug
(1) |
Sep
|
Oct
(9) |
Nov
(10) |
Dec
(8) |
2013 |
Jan
(3) |
Feb
(2) |
Mar
(7) |
Apr
(2) |
May
|
Jun
(7) |
Jul
(22) |
Aug
(5) |
Sep
(3) |
Oct
(3) |
Nov
(3) |
Dec
(2) |
2014 |
Jan
(4) |
Feb
|
Mar
(7) |
Apr
|
May
|
Jun
|
Jul
(1) |
Aug
(7) |
Sep
(1) |
Oct
|
Nov
|
Dec
(1) |
2015 |
Jan
|
Feb
|
Mar
(3) |
Apr
|
May
|
Jun
(3) |
Jul
|
Aug
|
Sep
|
Oct
(4) |
Nov
(4) |
Dec
|
2016 |
Jan
(1) |
Feb
|
Mar
(3) |
Apr
|
May
|
Jun
|
Jul
(5) |
Aug
|
Sep
(1) |
Oct
|
Nov
|
Dec
|
2017 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
(2) |
Jul
(1) |
Aug
|
Sep
(1) |
Oct
(5) |
Nov
(1) |
Dec
|
2019 |
Jan
|
Feb
(2) |
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2020 |
Jan
|
Feb
|
Mar
(3) |
Apr
|
May
|
Jun
|
Jul
(1) |
Aug
(1) |
Sep
(1) |
Oct
|
Nov
|
Dec
|
2023 |
Jan
|
Feb
|
Mar
(4) |
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: EclipseCap <tob...@ec...> - 2006-10-12 20:11:25
|
I have a question for the collective mind. How did you know to use FIX::FileLogFactory? I am new to FIX and QuickFIX and only have the examples as a development guide. The examples for QuickFIX namely tradingclient use the FIX::ScreenLogFactory. How is a new programmer to QFix going to know to look for other logging options? I ask the question to help those who would come after me with the same troubles I have had. Perhaps there is a development guide someplace I have not found. Anyway I find the quickfixengine.org website lacking when it comes to helping the new user become an intermediate user. -- View this message in context: http://www.nabble.com/How-do-you-know-to-use-FIX%3A%3AFileLogFactory--tf2432817.html#a6783771 Sent from the QuickFIX - User mailing list archive at Nabble.com. |
From: George M. C. <geo...@qu...> - 2006-10-12 13:12:06
|
Chuck, If you are the connecting party, you use an initiator, if you are waiting to be connected to, use an acceptor. You do not need both at the same time. I seem to remember that when I was wondering why certain events were not happening, the logs showed some errors. Have you looked there? Also, perhaps your config file and a snippet of the code you are using to create your initiator would help the list help you? thx George cstrader232 wrote: >QuickFIX Documentation: http://www.quickfixengine.org/quickfix/doc/html/index.html >QuickFIX Support: http://www.quickfixengine.org/services.html > > > > > ------------------------------------------------------------------------ > > Hello again: > > > > I think I may not understand the general logic of quickfix (I know > next to nothing about TCP). > > > > I am trying to connect to a price feed from my broker. They have > provided me a host (209.120.151.162) and port (2000) to use. I give > that information in the acceptor config file, and start the acceptor. > TCPview seems to indicate that the acceptor is listening on the port > 2000: > > > > Acceptor.vshost.exe:5620 TCP D3ZH8G81:2000 > D3ZG8I81:0 LISTENING > > Acceptor.vshost.exe:5620 TCP D3ZH8G81:3225 > D3ZG8I81:0 LISTENING > > Acceptor.vshost.exe:5620 TCP D3ZH8G81:3225 > localhost:3226 ESTABLISHED > > Acceptor.vshost.exe:5620 TCP D3ZH8G81:3226 > localhost:3225 ESTABLISHED > > > > However, only the oncreate event fires after the acceptor starts. My > logon, fromadmin, and fromapp events never fire. > > > > Is this correct behavior? > > > > Should I be listening on their port 2000, or should I be listening on > one of my own ports? > > > > If the logon event doesn't fire, how is the host address and > userid/password that I have in the config file ever used in this process? > > > > Do I need an acceptor at all? Or will the initiator also listen after > it sends the logon message? > > > > Is there another host that I could use which is known to send a return > message when its reached that would allow me to check whether my > acceptor is working at all? > > > > Thanks for your patience! > > > > chuck > >------------------------------------------------------------------------ > >------------------------------------------------------------------------- >Using Tomcat but need to do more? Need to support web services, security? >Get stuff done quickly with pre-integrated technology to make your job easier >Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo >http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 > >------------------------------------------------------------------------ > >_______________________________________________ >Quickfix-users mailing list >Qui...@li... >https://lists.sourceforge.net/lists/listinfo/quickfix-users > > |
From: cstrader232 <cst...@cs...> - 2006-10-12 13:06:26
|
Hello again: I think I may not understand the general logic of quickfix (I know next = to nothing about TCP). =20 =20 I am trying to connect to a price feed from my broker. They have = provided me a host (209.120.151.162) and port (2000) to use. I give = that information in the acceptor config file, and start the acceptor. = TCPview seems to indicate that the acceptor is listening on the port = 2000: =20 =20 Acceptor.vshost.exe:5620 TCP D3ZH8G81:2000 = D3ZG8I81:0 LISTENING =20 Acceptor.vshost.exe:5620 TCP D3ZH8G81:3225 = D3ZG8I81:0 LISTENING =20 Acceptor.vshost.exe:5620 TCP D3ZH8G81:3225 = localhost:3226 ESTABLISHED =20 Acceptor.vshost.exe:5620 TCP D3ZH8G81:3226 = localhost:3225 ESTABLISHED =20 =20 However, only the oncreate event fires after the acceptor starts. My = logon, fromadmin, and fromapp events never fire. =20 Is this correct behavior? =20 Should I be listening on their port 2000, or should I be listening on = one of my own ports? =20 If the logon event doesn't fire, how is the host address and = userid/password that I have in the config file ever used in this = process? Do I need an acceptor at all? Or will the initiator also listen after = it sends the logon message? =20 Is there another host that I could use which is known to send a return = message when its reached that would allow me to check whether my = acceptor is working at all? =20 Thanks for your patience! =20 chuck |
From: Djalma R. d. S. F. <drs...@bm...> - 2006-10-11 17:57:59
|
I suggest that you change your logon message in toAdmin() function. Djalma Rosa dos Santos Filho Bolsa de Mercadorias e Futuros - BM&F DST-Dn-BTS +55 11 3119-2585 drs...@bm... www.bmf.com.br -----Mensagem original----- De: qui...@li... [mailto:qui...@li...] Em nome de cstrader232 Enviada em: quarta-feira, 11 de outubro de 2006 11:17 Para: qui...@li... Assunto: [Quickfix-users] Custom logon QuickFIX Documentation: http://www.quickfixengine.org/quickfix/doc/html/index.html QuickFIX Support: http://www.quickfixengine.org/services.html |
From: cstrader232 <cst...@cs...> - 2006-10-11 14:17:53
|
Hello. I need to send the rawdata and other fields in my logon message. My log = is showing that that is not happening, although I have specified the = value of the fields in the configuration file. Can someone tell me how = to do that? =20 thanks again! |
From: Oren M. <or...@qu...> - 2006-10-10 23:14:28
|
The file log factory needs to take in a directory, not a file. In that directory it will create logfiles for the engine and your sessions. As an acceptor, you will be waiting for an initiator to connect and send a logon to you. --oren On Oct 10, 2006, at 6:06 PM, cstrader232 wrote: > Thanks for helping me get started. I've made some progress. > > I now have my acceptor running (see my code below). However, it > doesn't seem that any of the events (toapp, fromapp, fromAdmin etc) > are firing, nor is any log being written (screen or file). > > I'm assuming I next need to try to create a logon message? But I > can't quite figure out how to do that. > > Thanks for your patience.... > > chuck > > Dim sessionSettings As New SessionSettings("C: > \fixsessioninitiator.txt") ' CmdArgs(0)) > > Dim application As New Application > > Dim storeFactory As New FileStoreFactory(sessionSettings) > > Dim logFactory As New ScreenLogFactory(sessionSettings) > > Dim FileFactory As New FileLogFactory("c:\fixlog.txt") > > Dim messageFactory As New DefaultMessageFactory > > Dim acceptor As New SocketInitiator _ > > (application, storeFactory, sessionSettings, logFactory, > messageFactory) > > acceptor.start() |
From: cstrader232 <cst...@cs...> - 2006-10-10 23:07:37
|
Thanks for helping me get started. I've made some progress. =20 I now have my acceptor running (see my code below). However, it doesn't = seem that any of the events (toapp, fromapp, fromAdmin etc) are firing, = nor is any log being written (screen or file). I'm assuming I next need to try to create a logon message? But I can't = quite figure out how to do that. =20 Thanks for your patience.... chuck Dim sessionSettings As New SessionSettings("C:\fixsessioninitiator.txt") = ' CmdArgs(0)) Dim application As New Application Dim storeFactory As New FileStoreFactory(sessionSettings) Dim logFactory As New ScreenLogFactory(sessionSettings) Dim FileFactory As New FileLogFactory("c:\fixlog.txt") Dim messageFactory As New DefaultMessageFactory Dim acceptor As New SocketInitiator _ (application, storeFactory, sessionSettings, logFactory, messageFactory) acceptor.start() |
From: Djalma R. d. S. F. <drs...@bm...> - 2006-10-10 14:57:40
|
Charles, fix44.xml is not a SessionSettings file, this is a dictionary file. At quickfix\bin\cfg you should find examples regarding quickfix settings = files. They are not XML files, they look like: [DEFAULT] ConnectionType=3Dinitiator HeartBtInt=3D30 ReconnectInterval=3D1 FileStorePath=3Dstore FileLogPath=3Dlog StartTime=3D00:00:00 EndTime=3D00:00:00 UseDataDictionary=3DN SocketConnectHost=3Dlocalhost [SESSION] BeginString=3DFIX.4.2 SenderCompID=3DCLIENT1 TargetCompID=3DORDERMATCH SocketConnectPort=3D5002 [SESSION] BeginString=3DFIX.4.2 SenderCompID=3DCLIENT1 TargetCompID=3DORDERMATCH SocketConnectPort=3D5002 Regards, Djalma Rosa dos Santos Filho Bolsa de Mercadorias e Futuros - BM&F DST-Dn-BTS +55 11 3119-2585 drs...@bm... www.bmf.com.br -----Mensagem original----- De: qui...@li... = [mailto:qui...@li...] Em nome de Charles = Stangor Enviada em: ter=E7a-feira, 10 de outubro de 2006 09:58 Para: qui...@li... Assunto: [Quickfix-users] vb.net 2005 error QuickFIX Documentation: = http://www.quickfixengine.org/quickfix/doc/html/index.html QuickFIX Support: http://www.quickfixengine.org/services.html |
From: Charles S. <cst...@ch...> - 2006-10-10 12:58:43
|
Hello: I am a new user of quickfix. I am getting a Microsoft "sorry for the = inconvenience" screen on this line of my vb.net 2005 code, whenever = there are any lines in the input .xml file. I copied this file from the = "examples" folder. Dim sessionSettings As New SessionSettings("C:\fix44.xml") =20 Any thoughts would be appreciated. Thanks |
From: EclipseCap <tob...@ec...> - 2006-10-09 20:41:29
|
I have been trying to execute the tradeclient against executor. I am not sure if it is running correctly because whenever I run the trade client I get gibberish across the screen. Note how I get the start of the menu 1) Enter Order < Then all of the suddent messages start flying across the screen. Should I post a config file that went along with the trade client. This was all compiled with VS 2005. Thanks! <20061009-20:28:14, FIX.4.0:CLIENT1->EXECUTOR, event> (Created session) 1) Enter Order< 20061009-20:28:152) Cancel Order, FIX.4.0:CLIENT1->EXECUTOR3) Replace Order, event>4) Market data test (5) QuitConnecting to localhost on port 5001 )Action: <20061009-20:28:15, FIX.4.0:CLIENT1->EXECUTOR, outgoing> (8=FIX.4.0?9=67?35=A?34=46?49=CLIENT1?52=20061009-20:28:15?56=EXECUTOR?98=0?10 8=30?10=205?) <20061009-20:28:15, FIX.4.0:CLIENT1->EXECUTOR, event> (Initiated logon request) <20061009-20:28:15, FIX.4.0:CLIENT1->EXECUTOR, incoming> (8=FIX.4.0?9=67?35=A?34=55?49=EXECUTOR?52=20061009-20:28:15?56=CLIENT1?98=0?10 8=30?10=205?) <20061009-20:28:15, FIX.4.0:CLIENT1->EXECUTOR, event> (Received logon response) <20061009-20:28:15, FIX.4.0:CLIENT1->EXECUTOR, event> (MsgSeqNum too high, expecting 53 but received 55) <20061009-20:28:15, FIX.4.0:CLIENT1->EXECUTOR, outgoing> (8=FIX.4.0?9=70?35=2?34=47?49=CLIENT1?52=20061009-20:28:15?56=EXECUTOR?7=53?16 =999999?10=120?) -- View this message in context: http://www.nabble.com/Tradeclient-pushing-gibberish-tf2412703.html#a6725200 Sent from the QuickFIX - User mailing list archive at Nabble.com. |
From: EclipseCap <tob...@ec...> - 2006-10-06 21:54:12
|
Greetings, Can the VS8 quickfix dll be used in visual studio 2005 with a non managed c++ app? Or should I use the VS7 version instead? I am new to the world of FIX and I don't know enough to know that I don't know anything about it. Are they any good documentation sites out there about FIX? This is in addition to http://www.quickfixengine.org http://www.quickfixengine.org -- View this message in context: http://www.nabble.com/quickfix_net.dll-and-c%2B%2B-tf2398243.html#a6687843 Sent from the QuickFIX - User mailing list archive at Nabble.com. |
From: Oren M. <or...@qu...> - 2006-10-06 02:44:33
|
It's hard to tell what is going on here. What StartTime and EndTime are you using, and what time is it connecting when it shouldn't be. Also, are you aware that StartTime and EndTime are UTC? --oren > When the application is launched and Connect() is called, QF will > always try > to connect even if StartTime is in the future. This is different > than when > EndTime is reached: then QF simply disconnects until StartTime. > > Is this how it's supposed to work? If so why? I'd like to able to > restart > the service without having to rely on external scripts to launch it > at the > StartTime. |
From: Francis G. <fr...@at...> - 2006-10-06 00:57:23
|
When the application is launched and Connect() is called, QF will always try to connect even if StartTime is in the future. This is different than when EndTime is reached: then QF simply disconnects until StartTime. Is this how it's supposed to work? If so why? I'd like to able to restart the service without having to rely on external scripts to launch it at the StartTime. Thanks, Francis Gingras |
From: Oren M. <or...@qu...> - 2006-09-30 08:29:13
|
I looked into this further and the results are truly bizarre. I was able to duplicate the first 'leak' that you demonstrated (which =20= as you point out isn't really a leak at all). The thing is there =20 isn't really anything that is hoarding memory either. The testing I was doing was with gcc 4.0.1. I ran a simple test that =20= sent message from one session to another with an empty fromApp. I =20 was using a SocketInitiator/SocketAcceptor pair. As expected, the =20 memory footprint remained constant. I then added your example of =20 creating a new message with the copy constructor. In this case, the =20 memory footprint was definitely increasing, like you predicted it =20 would. Here is where it begins to get weird. I switched to using a ThreadedSocketInitiator/ThreadedSocketAcceptor =20 pair, and poof, the memory footprint remained constant even with the =20 copy constructor calls. So we have a situation where the exact same code increases the =20 footprint in one case, but not in the other. And since there is no =20 increase in footprint with an empty fromApp with both acceptor types, =20= there isn't a reason they should behave differently. So, on a hunch I compiled QuickFIX with icc and reran the tests. =20 Well, you can guess what happened here, no increase of the memory =20 footprint under any scenario. Yikes! Looks like a compiler bug! I don't know the details of your environment, but are you using a =20 SocketInitiator or Acceptor, and if so, can you try switching to the =20 Threaded versions and see how this affects the footprint? --oren > Well. After spending some more time with Purify and valgrind, I am =20= > starting to think that there is not an actual leak, but more of a =20 > =93hoarding=94 of memory !!! > > There is no question that the program grows and grows (as per the =20 > previous posting) but now I am not convinced that it is because of =20= > a leak. > > Oren, what do you reckon is the normal memory foot print of a =20 > simple quickfix app which just return from fromApp without doing =20 > anything? Why when I just instantiate a message from a string, =20 > over and over again, the footprint is stable. When I start using =20 > the copy constructor the foot print grows even though the program =20 > is not really doing anything? What is it about repeating groups =20 > that could induce this observations? > > Both valgrind and purify don=92t detect any significant leak (when =20 > compared to the footprint) when one calls initiator.stop() and then =20= > exit()=85 > > I am puzzled and frustrated J > > Regards > > David |
From: Oren M. <or...@qu...> - 2006-09-29 22:49:11
|
David, Can you provide some more information about your environment? Are =20 you running under unix or windows. If you are running under unix I =20 have a theory about what you might be experiencing. --oren On Sep 29, 2006, at 6:44 AM, Monheit, David wrote: > QuickFIX Documentation: http://www.quickfixengine.org/quickfix/doc/=20 > html/index.html > QuickFIX Support: http://www.quickfixengine.org/services.html > > Well. After spending some more time with Purify and valgrind, I am =20= > starting to think that there is not an actual leak, but more of a =20 > =93hoarding=94 of memory !!! > > > > There is no question that the program grows and grows (as per the =20 > previous posting) but now I am not convinced that it is because of =20= > a leak. > > > > Oren, what do you reckon is the normal memory foot print of a =20 > simple quickfix app which just return from fromApp without doing =20 > anything? Why when I just instantiate a message from a string, =20 > over and over again, the footprint is stable. When I start using =20 > the copy constructor the foot print grows even though the program =20 > is not really doing anything? What is it about repeating groups =20 > that could induce this observations? > > > > Both valgrind and purify don=92t detect any significant leak (when =20 > compared to the footprint) when one calls initiator.stop() and then =20= > exit()=85 > > > > I am puzzled and frustrated J > > > > Regards > > David > > > > > > ------------------------------------------------------- > > David Monheit > > Citadel Investment Group (Europe) Ltd > > Tel +44 (0) 20 7645 9715 > > Mob +44 (0) 7968 988 218 > > > > > ----------------------------------------------------------------------=20= > ----------------------------------------------------------------------=20= > ------ > > The contents of this message and any attachments may be privileged, =20= > confidential and proprietary. If you are not an intended recipient, =20= > please inform the sender of the transmission error and delete this =20 > message immediately without reading, disseminating, distributing or =20= > copying the contents. Citadel makes no assurances that this e-mail =20 > and any attachments are free of viruses and other harmful code. > > Citadel Investment Group (Europe) Ltd is authorized and regulated =20 > by the Financial Services Authority (FSA Firm Ref No 190260). > Registered in England and Wales. Registration No. 3666898. > Registered Office: 10th Floor, 2 George Yard, Lombard Street, =20 > London EC3V 9DH. > ----------------------------------------------------------------------=20= > --- > Take Surveys. Earn Cash. Influence the Future of IT > Join SourceForge.net's Techsay panel and you'll get the chance to =20 > share your > opinions on IT & business topics through brief surveys -- and earn =20 > cash > http://www.techsay.com/default.php?=20 > page=3Djoin.php&p=3Dsourceforge&CID=3DDEVDEV____________________________= ____=20 > _______________ > Quickfix-users mailing list > Qui...@li... > https://lists.sourceforge.net/lists/listinfo/quickfix-users |
From: Monheit, D. <Dav...@ci...> - 2006-09-29 11:44:10
|
Well. After spending some more time with Purify and valgrind, I am starting to think that there is not an actual leak, but more of a "hoarding" of memory !!! There is no question that the program grows and grows (as per the previous posting) but now I am not convinced that it is because of a leak. Oren, what do you reckon is the normal memory foot print of a simple quickfix app which just return from fromApp without doing anything? Why when I just instantiate a message from a string, over and over again, the footprint is stable. When I start using the copy constructor the foot print grows even though the program is not really doing anything? What is it about repeating groups that could induce this observations? Both valgrind and purify don't detect any significant leak (when compared to the footprint) when one calls initiator.stop() and then exit(). I am puzzled and frustrated :-) Regards David ------------------------------------------------------- David Monheit Citadel Investment Group (Europe) Ltd Tel +44 (0) 20 7645 9715 Mob +44 (0) 7968 988 218 ------------------------------------------------------------------------ ------------------------------------------------------------------------ -- The contents of this message and any attachments may be privileged, confidential and proprietary. If you are not an intended recipient, please inform the sender of the transmission error and delete this message immediately without reading, disseminating, distributing or copying the contents. Citadel makes no assurances that this e-mail and any attachments are free of viruses and other harmful code. Citadel Investment Group (Europe) Ltd is authorized and regulated by the Financial Services Authority (FSA Firm Ref No 190260). Registered in England and Wales. Registration No. 3666898. Registered Office: 10th Floor, 2 George Yard, Lombard Street, London EC3V 9DH. |
From: Monheit, D. <Dav...@ci...> - 2006-09-29 09:34:05
|
Hi I am experiencing SEVERE memory leakage. Our app handles 12,000,000 fix messages from 8:00 till 4:30PM. It cores at around 3:00 - 3:30 with a memory footprint of > 2.5 gb !!!! Here are some simple ways to duplicate this (I tested this on version 1.12.2, 1.12.3 and 1.12.4 (this morning)). NO LEAK: Instantiating a FIX::Message from a string. while (getline(infile, line, '\n')) { linecount++; FIX::Message fixmsg(line, false); Parse(&fixmsg); } LEAK 1: Instantiating a FIX::Message from another FIX::Message. This leaks even if no data dictionaries are being used. void Application::fromApp( const FIX::Message& message, const FIX::SessionID& sessionID ) throw( FIX::FieldNotFound, FIX::IncorrectDataFormat, FIX::IncorrectTagValue, FIX::UnsupportedMessageType ) { FIX::Message *p = new FIX::Message( message ); delete p; } NO LEAK - Amazing - same as above but instantiate the message from a string again. Double parsing but no leak void Application::fromApp( const FIX::Message& message, const FIX::SessionID& sessionID ) throw( FIX::FieldNotFound, FIX::IncorrectDataFormat, FIX::IncorrectTagValue, FIX::UnsupportedMessageType ) { FIX::Message *p = new FIX::Message( message.toString() ); delete p; } No LEAK - when using data dictionary to instantiate a fix message DataDictionary dd is a member of the Application class. Application::Application() { FIX::DataDictionary dd2; dd2.addField( 134 ); dd2.addField( 9167 ); dd2.addField( 132 ); dd2.addField( 135 ); dd2.addField( 9168 ); dd2.addField( 133 ); dd2.checkFieldsHaveValues(false); dd2.checkFieldsOutOfOrder(false); dd2.checkUserDefinedFields(false); dd.addGroup( "U0004", 9917, 134, dd2); dd.checkFieldsHaveValues(false); dd.checkFieldsOutOfOrder(false); dd.checkUserDefinedFields(false); } void Application::fromApp( const FIX::Message& message, const FIX::SessionID& sessionID ) throw( FIX::FieldNotFound, FIX::IncorrectDataFormat, FIX::IncorrectTagValue, FIX::UnsupportedMessageType ) { FIX::Message *p = new FIX::Message( message.toString(), dd ); delete p; } LEAK LEAK LEAK - This is really amazing in how much it leaks void Application::fromApp( const FIX::Message& message, const FIX::SessionID& sessionID ) throw( FIX::FieldNotFound, FIX::IncorrectDataFormat, FIX::IncorrectTagValue, FIX::UnsupportedMessageType ) { FIX::Message *p = new FIX::Message( message.toString(), dd ); if(p->getHeader().getField(35) == "U0004") { FIX::Group g( 9917, 134, FIX::message_order(134,9167,132,135,9168,133,0) ); // IF NOT STATIC, THIS LEAKS int numLimits = atoi(p->getField(9917).c_str()); for ( int i=0; i < 5; i++ ) { p->getGroup( i+1, g ); // THIS CAUSES THE LEAK } } delete p; } Some additional observations: * The creation of FIX::Group g on the stack causes a leak. If I change that to a static it does not leak anymore. * The call to getGroup leaks galore :-) Am I using the library incorrectly? Any ideas or clues will be much appreciated. Regards David ------------------------------------------------------- David Monheit Citadel Investment Group (Europe) Ltd Tel +44 (0) 20 7645 9715 Mob +44 (0) 7968 988 218 ------------------------------------------------------------------------ ------------------------------------------------------------------------ -- The contents of this message and any attachments may be privileged, confidential and proprietary. If you are not an intended recipient, please inform the sender of the transmission error and delete this message immediately without reading, disseminating, distributing or copying the contents. Citadel makes no assurances that this e-mail and any attachments are free of viruses and other harmful code. Citadel Investment Group (Europe) Ltd is authorized and regulated by the Financial Services Authority (FSA Firm Ref No 190260). Registered in England and Wales. Registration No. 3666898. Registered Office: 10th Floor, 2 George Yard, Lombard Street, London EC3V 9DH. |
From: George M. C. <geo...@qu...> - 2006-09-27 20:53:33
|
Hi, I am using the ODBC mesage log, and my underlying database is SQL Server 2000. I realized during my testing that the messages logged in the messages table of my buy-side logs were getting deleted upon each reset. I was planning on writing a DELETE trigger to copy those rows over to a parallel table that I can use to archive those messages permanently, but SQL Server does not support the use of columns of TEXT datatype in triggers. Is it absolutely necessary to use TEXT in this column instead of a slightly smaller variable-length character datatype like varchar? I know that this may be a limitation specific to SQL Server. Do you recommend the use of field 383, sent during the logon, to limit the size of all messages to some value like 8k? What is the reasonable limit that one might expect for real-world FIX messages? thx George Coles |
From: Robert P. <rob...@gm...> - 2006-09-26 18:49:53
|
Hi folks, Is there support in quickfix for ODBC on unix (i.e. linux) via unixODBC? thanks, rob |
From: Eranga S. <pe...@ri...> - 2006-09-26 09:48:37
|
Hi, Quickfix JNI layer was not serializable. So that what is the correct way to copy fix message values to DTO (data transfer object)? I want to send fix message values through network but in fix independent way. My approach is to extract fix values from message and fill a java bean using those values. Is that causing what is the most correct way to address serialization issue? Thanks BR, Eranga |
From: Oren M. <or...@qu...> - 2006-09-26 05:26:52
|
This is apparently the default behavior of Swig when it receives a python exception from a callback. It doesn't know what to do so it simply throws an DirectorMethodException and quits. It is telling you that something went wrong, but does not provide any sort of reasonable feedback to help you figure out what it is. The callback methods which handle exceptions already deal with this, however we did not think to handle the case where a callback method might throw an exception even when we were not expecting one. I've checked in a fix for this. Now when this happens, the actual python message will be printed out for you just as it would in a normal python application. Running your example code in onCreate, I now get this: Traceback (most recent call last): File "../examples/executor/python/executor.py", line 11, in onCreate print "SessionID = " + sessionID TypeError: cannot concatenate 'str' and 'SessionID' objects I'm guessing your other director exceptions are caused by similar python exceptions being thrown from the callbacks. If you get the latest from svn, you will be able to see the real exceptions that are causing the application to break. Also, is there a method in python that needs to be implemented on the SessionID object to make what you are doing legal? Something that will automatically convert an object to a string during concatenation? If so, we can implement it for all our serializable objects. Doing just print sessionID seems legal, so the print method seems to be converting to a string automatically. --oren On Sep 25, 2006, at 3:08 PM, Robert Parrott wrote: > I'm using the python binding from quickfix 1.12.4, and seeing a > possible bug in the python interface to the Application class. The > platform is CentOS 4.4 (equiv to RHEL 4, update 4). > > class MyApplication(quickfix.Application): > > def onCreate(self, sessionID): print "Session ID = " + sessionID > > throws an exception when called: "terminate called after throwing an > instance of 'Swig::DirectorMethodException' ". However, calling > sessionID.toString() here instead works. |
From: Robert P. <rob...@gm...> - 2006-09-25 20:08:36
|
Hi folks, I'm using the python binding from quickfix 1.12.4, and seeing a possible bug in the python interface to the Application class. The platform is CentOS 4.4 (equiv to RHEL 4, update 4). (1) Basically in C++, defining the method FIX::MyApplication::onCreate(const FIX::SessionID& sessionID ) { cout << sessionID.toString() << endl; } works, and prints the session ID as a string when the session is instantiated, but under python, the code: class MyApplication(quickfix.Application): def onCreate(self, sessionID): print "Session ID = " + sessionID throws an exception when called: "terminate called after throwing an instance of 'Swig::DirectorMethodException' ". However, calling sessionID.toString() here instead works. (2) In addition, in a very simple application, I'm getting more of these Swig::DirectorMethodException' errors, and can't seem to determine the origin. Below I've included a simple, sample program and the gdb backtrace from when the program puked. The error occurs in the Initiator.block() method. Any ideas on the cause of these errors? thanks, rob ------------------------------------------------------------------- import quickfix import time, sys from twisted.python import log class QuickFIXQuoteClient(quickfix.Application): def onCreate(self, sessionID): log.msg("QuickFIXQuoteClient: created. SessionID = " +sessionID.toString()) def onLogon(self, sessionID): return def onLogout(self, sessionID): return def toAdmin(self, message, sessionID): log.msg("QuickFIXQuoteClient:toAdmin." ) log.msg(" session ID = " + sessionID.toString() ) log.msg(" message = \n"+message.toXML()) def toApp(self, message, sessionID): return def fromAdmin(self, message, sessionID): return def fromApp(self, message, sessionID): return fileName = "config.conf" settings = quickfix.SessionSettings(fileName) application = QuickFIXQuoteClient() storeFactory = quickfix.FileStoreFactory(settings) logFactory = quickfix.FileLogFactory(settings) initiator = quickfix.SocketInitiator(application, storeFactory,settings, logFactory) initiator.start() while 1 == 1 : time.sleep(1) print "waiting..." initiator.stop() ------------------------------------------------------ The following is a session from gdb and python2.3 ------------------------------------------------------------------ user@host src> gdb python2.3 GNU gdb Red Hat Linux (6.3.0.0-1.132.EL4rh) Copyright 2004 Free Software Foundation, Inc. GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type "show copying" to see the conditions. There is absolutely no warranty for GDB. Type "show warranty" for details. This GDB was configured as "i386-redhat-linux-gnu"...(no debugging symbols found) Using host libthread_db library "/lib/tls/libthread_db.so.1". (gdb) set args -u FIXQuoteClientStub.py (gdb) r Starting program: /usr/bin/python2.3 -u FIXQuoteClientStub.py (no debugging symbols found) (no debugging symbols found) [Thread debugging using libthread_db enabled] [New Thread -1208301888 (LWP 19118)] (no debugging symbols found) (no debugging symbols found) (no debugging symbols found) (no debugging symbols found) (no debugging symbols found) 2006/09/25 15:30 -0400 [-] Log opened. 2006/09/25 15:30 -0400 [-] QuickFIXQuoteClient: created. SessionID = FIX.4.4:BLAH_TEST->BLAH [New Thread -1215657040 (LWP 19124)] 2006/09/25 15:33 -0400 [-] QuickFIXQuoteClient:toAdmin. 2006/09/25 15:33 -0400 [-] session ID = FIX.4.4:BLAH_TEST->BLAH 2006/09/25 15:33 -0400 [-] message = <message> <header> <field number="8"><![CDATA[FIX.4.4]]></field> <field number="35"><![CDATA[A]]></field> <field number="34"><![CDATA[22]]></field> <field number="49"><![CDATA[BLAH]]></field> <field number="52"><![CDATA[20060925-19:33:52.882]]></field> <field number="56"><![CDATA[BLAH]]></field> </header> <body> <field number="98"><![CDATA[0]]></field> <field number="108"><![CDATA[20]]></field> </body> <trailer> </trailer> </message> terminate called after throwing an instance of 'Swig::DirectorMethodException' Program received signal SIGABRT, Aborted. [Switching to Thread -1215657040 (LWP 19124)] 0x007e67a2 in _dl_sysinfo_int80 () from /lib/ld-linux.so.2 (gdb) bt #0 0x007e67a2 in _dl_sysinfo_int80 () from /lib/ld-linux.so.2 #1 0x008267a5 in raise () from /lib/tls/libc.so.6 #2 0x00828209 in abort () from /lib/tls/libc.so.6 #3 0x00b4a14b in __gnu_cxx::__verbose_terminate_handler () from /usr/lib/libstdc++.so.6 #4 0x00b47e61 in __cxa_call_unexpected () from /usr/lib/libstdc++.so.6 #5 0x00b47e96 in std::terminate () from /usr/lib/libstdc++.so.6 #6 0x00b47eab in std::terminate () from /usr/lib/libstdc++.so.6 #7 0x00b47da3 in __cxa_call_unexpected () from /usr/lib/libstdc++.so.6 #8 0x004e603d in FIX::Initiator::block (this=Variable "this" is not available. ) at Initiator.cpp:217 #9 0x002616bf in _wrap_Initiator_block (args=0xb796f8cc) at QuickfixPython.cpp:150095 #10 0x0099a961 in PyCFunction_Call () from /usr/lib/libpython2.3.so.1.0 #11 0x00977637 in PyObject_Call () from /usr/lib/libpython2.3.so.1.0 #12 0x009cca88 in _PyEval_SliceIndex () from /usr/lib/libpython2.3.so.1.0 #13 0x009cf196 in PyEval_EvalCodeEx () from /usr/lib/libpython2.3.so.1.0 #14 0x009cde89 in _PyEval_SliceIndex () from /usr/lib/libpython2.3.so.1.0 #15 0x009cf196 in PyEval_EvalCodeEx () from /usr/lib/libpython2.3.so.1.0 #16 0x0098ae6e in PyFunction_SetClosure () from /usr/lib/libpython2.3.so.1.0 #17 0x00977637 in PyObject_Call () from /usr/lib/libpython2.3.so.1.0 #18 0x009c92a0 in PyEval_CallObjectWithKeywords () from /usr/lib/libpython2.3.so.1.0 #19 0x009f1172 in _PyObject_GC_Del () from /usr/lib/libpython2.3.so.1.0 #20 0x00a67371 in start_thread () from /lib/tls/libpthread.so.0 #21 0x008c6ffe in clone () from /lib/tls/libc.so.6 (gdb) |
From: Oren M. <or...@qu...> - 2006-09-22 22:01:39
|
> You might consider using the fully qualified table names in case someone=20 > like me runs into this ODBC connection issue in the future. I think it=20 > is good practice to use fully qualified names for db objects in general=20 > isnt it? We don't fully qualify because some people may not want to use a database called quickfix. If someone puts the tables in the default context, then that may very well be their intention. The main issue is that we are crashing instead of providing a proper ConfigException. This was due to a ConfigError pointer being thrown instead of a reference. This has been fixed and QuickFIX will now report a connection problem in this case (due to being unable to populate the cache). > There are a couple of other issues too: >=20 > -From time to time the trace log shows that inserts into messages_log=20 > are failing because a NULL is being inserted in the SESSION_QUALIFIER=20 > column, which is defined as NOT NULL in the sql create script. This column should be nullable. We will fix it. > - The columns MESSAGES_LOG.TEXT and MESSAGES.MESSAGE are, at least in my=20 > database, being truncated - only the section of the text "8=3DFIX.4.4"=20 > exists. I see that the sql string is being built with a lot of=20 > backslashes - is that some kind of MYSQL escape char that MSSQL is not=20 > enjoying? I believe this is a result of MSSQL tools interpreting the SOH character as some sort of end of string. The correct values are actually in there. -oren |
From: Oren M. <or...@qu...> - 2006-09-22 20:52:38
|
Is there a reason you are not providing a DATABASE=3Dquickfix into the connection string? --oren > Hi, this is an update on my earlier issue. > I am using the ODBC log and store factories built from the=20 > quickfix_vs8.sln in version 1.12.4 of quickfix. I am using SQL Server,=20 > and my ODBC DataSource Administrator say that those drivers are version=20 > 2000.85.1117.00. >=20 > I am using these connection strings: >=20 > OdbcLogUser=3Dxx > OdbcLogPassword=3Dyy > OdbcStoreUser=3Dxx > OdbcStorePassword=3Dyy > OdbcLogConnectionString=3D"DATABASE=3Dquickfix;DRIVER=3D{SQL=20 > Server};SERVER=3DDATASERVER;" > OdbcStoreConnectionString=3D"DATABASE=3Dquickfix;DRIVER=3D{SQL=20 > Server};SERVER=3DDATASERVER;" |
From: George M. C. <geo...@qu...> - 2006-09-22 20:41:08
|
Hi, this is an update on my earlier issue. I am using the ODBC log and store factories built from the quickfix_vs8.sln in version 1.12.4 of quickfix. I am using SQL Server, and my ODBC DataSource Administrator say that those drivers are version 2000.85.1117.00. I am using these connection strings: OdbcLogUser=xx OdbcLogPassword=yy OdbcStoreUser=xx OdbcStorePassword=yy OdbcLogConnectionString="DATABASE=quickfix;DRIVER={SQL Server};SERVER=DATASERVER;" OdbcStoreConnectionString="DATABASE=quickfix;DRIVER={SQL Server};SERVER=DATASERVER;" I turned on ODBC trace logging. It shows the following information codes when I try to connect: DIAG [01S00] [Microsoft][ODBC Driver Manager] Invalid connection string attribute (0) DIAG [01000] [Microsoft][ODBC SQL Server Driver][SQL Server]Changed database context to 'dbMARKET'. (5701) DIAG [01S00] [Microsoft][ODBC Driver Manager] Invalid connection string attribute (0) DIAG [01000] [Microsoft][ODBC SQL Server Driver][SQL Server]Changed database context to 'dbMARKET'. (5701) When subsequent SQL statements are executed against this connection, it blows up with the interop error I posted before, because, I believe, the table names are not fully qualified. I could not figure out why the database context is getting changed to dbMarket, and not quickfix, so I chose to address the problem by prefixing every table name in OdbcStore.cpp and OdbcLog.cpp with "quickfix.." This fixed that problem, and I can now set up an acceptor session, at least. You might consider using the fully qualified table names in case someone like me runs into this ODBC connection issue in the future. I think it is good practice to use fully qualified names for db objects in general isnt it? There are a couple of other issues too: -From time to time the trace log shows that inserts into messages_log are failing because a NULL is being inserted in the SESSION_QUALIFIER column, which is defined as NOT NULL in the sql create script. - The columns MESSAGES_LOG.TEXT and MESSAGES.MESSAGE are, at least in my database, being truncated - only the section of the text "8=FIX.4.4" exists. I see that the sql string is being built with a lot of backslashes - is that some kind of MYSQL escape char that MSSQL is not enjoying? thx George |