Обсуждение: Getting blocked when receinving response from a Parse message...
Getting blocked when receinving response from a Parse message...
От
"Francisco Figueiredo Jr."
Дата:
Hi all, I'm playing with this for one week with no luck... :( I'm implementing the 3.0 protocol version in Npgsql, a .Net Data provider for postgresql. I could get it working using the simple query and so, I started to work in the extended query. I stopped in the first message: Parse :( I send the parse message but I don't receive the ParseComplete or the ErrorResponse. My code simply freezes while reading the byte from network stream. I added some elog lines to check that I was sending the message correctly. I could even check that pq_putemptymessage('1') is being called in the exec_parse_message() method, but I don't know why I'm getting blocked when reading the data. It is strange because all the simple query mode tests I did work very well. Just this Parse message isn't working for me. Am I missing something? I'm using the latest cvs code on cygwin. Thanks in advance. -- Regards, Francisco Figueiredo Jr. ------ "My grandfather once told me that there are two kinds of people: those who work and those who take the credit. He told me to try to be in the first group; there was less competition there." - Indira Gandhi
"Francisco Figueiredo Jr." <fxjrlists@yahoo.com.br> writes: > I'm implementing the 3.0 protocol version in Npgsql, a .Net Data > provider for postgresql. > I stopped in the first message: Parse :( > I send the parse message but I don't receive the ParseComplete or the > ErrorResponse. My code simply freezes while reading the byte from > network stream. You must send either Flush or Sync after the Parse to force the backend to emit its response to Parse. The assumption is that in many cases you'll be sending Parse as part of a batch of commands, and the backend should batch its responses to minimize the number of network packets sent. So you have to tell it where the batch boundaries are --- thus, Flush or Sync. See the docs concerning the difference between the two. regards, tom lane
Hello: >You must send either Flush or Sync after the Parse to force the backend>to emit its response to Parse. The assumption isthat in many cases>you'll be sending Parse as part of a batch of commands, and the backend>should batch its responses tominimize the number of network packets>sent. So you have to tell it where the batch boundaries are --- thus,>Flush orSync. See the docs concerning the difference between the two. I have the same problem some days ago with the implementation of the version 3.0 protocol in C# and now using Flush it's working quite well :) -- Best regards
Tom Lane wrote: > "Francisco Figueiredo Jr." <fxjrlists@yahoo.com.br> writes: > >>I'm implementing the 3.0 protocol version in Npgsql, a .Net Data >>provider for postgresql. > > >>I stopped in the first message: Parse :( >>I send the parse message but I don't receive the ParseComplete or the >>ErrorResponse. My code simply freezes while reading the byte from >>network stream. > > > You must send either Flush or Sync after the Parse to force the backend > to emit its response to Parse. The assumption is that in many cases > you'll be sending Parse as part of a batch of commands, and the backend > should batch its responses to minimize the number of network packets > sent. So you have to tell it where the batch boundaries are --- thus, > Flush or Sync. See the docs concerning the difference between the two. > Oohh, thanks, Tom Lane! I didn't read carefully the final part of extended query where it says about the Flush message :) I didn't realize the idea of holding responses to minimize network traffic. I was thinking in the send reply style :) -- Regards, Francisco Figueiredo Jr. ------ "My grandfather once told me that there are two kinds of people: those who work and those who take the credit. He told me to try to be in the first group; there was less competition there." - Indira Gandhi
Carlos Guzman Alvarez wrote: > Hello: > > >You must send either Flush or Sync after the Parse to force the backend > >to emit its response to Parse. The assumption is that in many cases > >you'll be sending Parse as part of a batch of commands, and the backend > >should batch its responses to minimize the number of network packets > >sent. So you have to tell it where the batch boundaries are --- thus, > >Flush or Sync. See the docs concerning the difference between the two. > > > > I have the same problem some days ago with the implementation of the > version 3.0 protocol in C# and now using Flush it's working quite well :) > > Thanks Carlos. Uhmmm, if you don't mind... are you implementing something like a data provider for Postgresql, or it is just an ad hoc program? -- Regards, Francisco Figueiredo Jr. ------ "My grandfather once told me that there are two kinds of people: those who work and those who take the credit. He told me to try to be in the first group; there was less competition there." - Indira Gandhi
Hello: > Uhmmm, if you don't mind... are you implementing something like a data > provider for Postgresql, or it is just an ad hoc program? Well i start making a simple library for 3.0 protocol for curiosity only :), the protocol have a great documentation, butafter some some days i decide to try to make a Data Provider for protocol 3.0 only (I already have made a Data Provider for other RDMBMS :)), -- Best regards Carlos Guzmán Álvarez Vigo-Spain
Carlos Guzman Alvarez wrote: > Hello: > >> Uhmmm, if you don't mind... are you implementing something like a data >> provider for Postgresql, or it is just an ad hoc program? > > > Well i start making a simple library for 3.0 protocol for curiosity only > :), the protocol have a great documentation, but after some some days i > decide to try to make a Data Provider for protocol 3.0 only (I already > have made a Data Provider for other RDMBMS :)), That's very good! Do you know about Npgsql? Please, have a look at gborg.postgresql.org/project/npgsql. It is a Postgresql .net data provider written 100% in C#. Maybe you could give some tips, suggestions, improvements, bug fixes... :) I'm right now implementing the extended query mode and as you and Tom Lane said, the Flush message worked very well. Thanks again. -- Regards, Francisco Figueiredo Jr. ------ "My grandfather once told me that there are two kinds of people: those who work and those who take the credit. He told me to try to be in the first group; there was less competition there." - Indira Gandhi
Hello: > That's very good! > Do you know about Npgsql? Yes i know about it, but i have no see it in deep ( i use Firebird as RDBMS at this moment ), i decide to take a glance at the 3.0 protocol using C# when i know about the plans for a native Windows version in 7.4 version :) , but i'm not sure if i'm going to finish the .NET data provider implementation. > Please, have a look at gborg.postgresql.org/project/npgsql. > It is a Postgresql .net data provider written 100% in C#. > Maybe you could give some tips, suggestions, improvements, bug fixes... :) :) -- Best regards Carlos Guzmán Álvarez Vigo-Spain