[Re] Re: Winsock error 10035 while trying to upgrade from 8.0 to 8.2

From: "Cyril VELTER" <cyril(dot)velter(at)metadys(dot)com>
To: magnus(at)hagander(dot)net
Cc: cyril(dot)velter(at)metadys(dot)com, pgsql-general(at)postgresql(dot)org
Subject: [Re] Re: Winsock error 10035 while trying to upgrade from 8.0 to 8.2
Date: 2007-05-28 18:18:39
Message-ID: 0-39230756345-2674-1822046@CFGEM
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

> Cyril VELTER wrote:
> >
> >>> Cyril VELTER wrote:
> >>>> Searching the source files, it seems the error message is generated in
> >>>> port/win32/socket.c line 594.
> >>> Right, but the important thing is which path down to that function is it
> >>> generated in. Which is why a backtrace would help.
> >> Yes, I understand that.
> >>
> >>> Looking at the code, the problem is probably somewhere in
> >>> pgwin32_recv(). Now, it really shouldn't end up doing what you're
> >>> seeing, but obviously it is.
> >>
> >> After looking at the code of pgwin32_recv(), I don't understand why
> >> pgwin32_waitforsinglesocket() is called with the FD_ACCEPT argument.
> >>
> >>> Perhaps we just need to have it retry if it gets the WSAEWOULDBLOCK?
> >>> Thoughts?
> >> I've modified pgwin32_recv() to do that (repeat the
> >> pgwin32_waitforsinglesocket() / WSARecv while the error is WSAEWOULDBLOCK
and
> >
> >
> >> not raising this error. I've an upgrade running right now (I will have the

> >> result in the next hours).
> >
> >
> > Replying to myself, the upgrade is not finished yet, but I can confirm
that
> > there is cases where pgwin32_waitforsinglesocket() return and the WSARecv
> > immediatly fail. I-ve modified the end of pgwin32_recv() :
> >
> >
> > /* No error, zero bytes (win2000+) or error+WSAEWOULDBLOCK (<=nt4) */
> >
> > for(;;) {
> > if (pgwin32_waitforsinglesocket(s, FD_READ | FD_CLOSE | FD_ACCEPT,
> > INFINITE) == 0)
> > return -1;
> >
> > r = WSARecv(s, &wbuf, 1, &b, &flags, NULL, NULL);
> > if (r == SOCKET_ERROR)
> > {
> > printf("SOCKERROR");
> > if (WSAGetLastError() != WSAEWOULDBLOCK)
> > {
> > TranslateSocketError();
> > return -1;
> > }
> > }
> > else
> > {
> > return b;
> > }
> > }
> >
> >
> > The printf("SOCKERROR") line have been hit two times.
> >
> > Any though ?
> >
> > Once this upgrade is finished, I will make another try removing FD_ACCEPT
from
> >
> > the pgwin32_waitforsinglesocket() call.
>
> Hmm. That really isn't supposed to happen, but seems it is. Does it work
> when you add that loop, though? Spits out the message and works, or does
> it spit out the message and still not work?

OK, I've the results of my tests :

With the previous code, then message "SOCKERROR" is printed 5 times during the
whole process (100 Gb dump import with psql). There one group of three and one
group of two, but I don't have timestamps and am not sure if they are printing
in the same loop or not. The import is finally successful.

The second test I have done is to remove FD_ACCEPT I still have the message
one times, but it still happen. The import is also sucessfull.

>
> I'm also a bit worried about it getting caught in a tight loop if the
> error codes are wrong, but probably it just goes back into waitfor.. and
> blocks the second time. Otherwise, you'd see screenfuls of that message.
>
> Can you determine if it was hit two times right after each other, or if
> there was time between them?

For the first test I don't known the amount of time between them (I have two
groups separeted in the logs with other messages).

What do you think ? may be a bug in the windows server installation I have
(this machines have not been updated for some times, perhaps I should try to do
that and see if the problem is still there. In the long run, I plan to upgrade
to windows 2003).

cyril

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Michael Fuhr 2007-05-28 18:20:52 Re: Different sort order
Previous Message olivier 2007-05-28 18:01:22 hundreds of schema vs hundreds of databases