Обсуждение: 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



Re: Getting blocked when receinving response from a Parse message...

От
Tom Lane
Дата:
"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


Re: Getting blocked when receinving response from a Parse message...

От
Carlos Guzman Alvarez
Дата:
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



Re: Getting blocked when receinving response from a Parse

От
"Francisco Figueiredo Jr."
Дата:
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



Re: Getting blocked when receinving response from a Parse

От
"Francisco Figueiredo Jr."
Дата:
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



Re: Getting blocked when receinving response from a Parse

От
Carlos Guzman Alvarez
Дата:
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



Re: Getting blocked when receinving response from a Parse

От
"Francisco Figueiredo Jr."
Дата:
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



Re: Getting blocked when receinving response from a Parse

От
Carlos Guzman Alvarez
Дата:
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