<?xml version="1.0" encoding="utf-8"?>
<feed xml:lang="en" xmlns="http://www.w3.org/2005/Atom"><title>Recent changes to support-requests</title><link href="https://sourceforge.net/p/equalizer/support-requests/" rel="alternate"/><link href="https://sourceforge.net/p/equalizer/support-requests/feed.atom" rel="self"/><id>https://sourceforge.net/p/equalizer/support-requests/</id><updated>2009-09-03T11:42:33Z</updated><subtitle>Recent changes to support-requests</subtitle><entry><title>Interoperability between Windows and Linux is bugged</title><link href="https://sourceforge.net/p/equalizer/support-requests/1/" rel="alternate"/><published>2009-09-03T11:42:33Z</published><updated>2009-09-03T11:42:33Z</updated><author><name>Alexandros Panagiotidis</name><uri>https://sourceforge.net/u/ap6/</uri></author><id>https://sourceforge.netab0713dc0863d113226bd3d99c492fbf368ab880</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;Hello Equalizer-Team,&lt;/p&gt;
&lt;p&gt;I tried setting up the following scenario using the 0.9 release and HEAD-revision of Equalizer (checked out 02.09.2009):&lt;/p&gt;
&lt;p&gt;- server on cluster headnode running "Linux XXX 2.6.18-92.1.10.el5_lustre.1.6.6custom #1 SMP Mon May 25 17:23:20 CEST 2009 x86_64 x86_64 x86_64 GNU/Linux"&lt;br /&gt;
- client and applicatiuon on Windows XP x64 SP2&lt;/p&gt;
&lt;p&gt;Equalizer was built as 64-bit.&lt;br /&gt;
On the Linux machine GCC 4.3.2 is used. On Windows I used Visual Studio 2005 8.0.50727.42 to build and debug Equalizer.&lt;br /&gt;
The following programm outputs "1" on both machines, which is why I assume they are both little-endian.&lt;/p&gt;
&lt;p&gt;#include &amp;lt;stdio.h&amp;gt;&lt;/p&gt;
&lt;p&gt;int main() {&lt;br /&gt;
unsigned char EndianTest[2] = { 1, 0 };&lt;br /&gt;
short x;&lt;/p&gt;
&lt;p&gt;x = *(short *) EndianTest;&lt;/p&gt;
&lt;p&gt;printf("%d\n", x);&lt;/p&gt;
&lt;p&gt;return 0;&lt;br /&gt;
}&lt;/p&gt;
&lt;p&gt;Using the attached configuration for eqServer I received the error "Node not found on server".&lt;br /&gt;
Trying to fix this problem, I did some debugging in Visual Studio. Essentially, the offender for this error seems to be in Session::_cmdGetIDMasterReply():&lt;/p&gt;
&lt;p&gt;NodeID nodeID = packet-&amp;gt;masterID;&lt;br /&gt;
nodeID.convertToHost();&lt;/p&gt;
&lt;p&gt;if( nodeID != NodeID::ZERO )&lt;br /&gt;
{&lt;br /&gt;
ScopedMutex mutex( _idMasterMutex );&lt;br /&gt;
_idMasters[ packet-&amp;gt;id ] = packet-&amp;gt;masterID;&lt;br /&gt;
}&lt;br /&gt;
// else not found&lt;/p&gt;
&lt;p&gt;The nodeID that the master returns is converted via "nodeID.convertToHost()" but the unconverted ID from the original answer is used inside the if-case.&lt;br /&gt;
Applying the following patch gets rid of the above error:&lt;/p&gt;
&lt;p&gt;713c713&lt;br /&gt;
&amp;gt;         _idMasters[ packet-&amp;gt;id ] = packet-&amp;gt;masterID;&lt;br /&gt;
---&lt;br /&gt;
&amp;lt;         _idMasters[ packet-&amp;gt;id ] = nodeID;&lt;/p&gt;
&lt;p&gt;After patching and recompiling on both machines I get the error:&lt;/p&gt;
&lt;p&gt;3344 3976656 ..\lib\net\session.cpp:359  4380 Can't find master node for object id 0&lt;br /&gt;
3344 3976656 ..\lib\client\pipe.cpp:361  4380 Assert: eqResult [session-&amp;gt;mapObject( view, viewVersion.id )]&lt;/p&gt;
&lt;p&gt;At this point I gave up debugging and tried running the client and application under Linux on the Windows machine:&lt;/p&gt;
&lt;p&gt;- eqServer on cluster headnode (see above)&lt;br /&gt;
- eqPly as client on "Linux XXX 2.6.27.25-0.1-default #1 SMP 2009-07-01 15:37:09 +0200 x86_64 x86_64 x86_64 GNU/Linux"&lt;br /&gt;
- eqPly as application on the same machine as the client&lt;/p&gt;
&lt;p&gt;In this setup no errors occured with and without patching Session::_cmdGetIDMasterReply().&lt;br /&gt;
A colleague of mine noticed that under Linux "UUID::convertToHost()" and "UUID::convertToNetwork()" are not implemented but should be.&lt;br /&gt;
I also assume that this is related to the error in the first setup but we did not investigate any further as we settled for running on Linux only for now.&lt;/p&gt;
&lt;p&gt;Attached is my Equalizer configuration and several logs of server, client and application, both unpatched and patched and running client/application under Windows and Linux.&lt;br /&gt;
Due to privacy reasons I had to remove hostnames and IP-addresses, the rest of the log is unchanged.&lt;br /&gt;
The binaries were always called like this:&lt;/p&gt;
&lt;p&gt;Server:       eqServer test.eqc&lt;br /&gt;
Client:       eqPly -- --eq-client --eq-listen CLIENT:4242 --eq-server LINUX-CLUSTER-HEAD:4242&lt;br /&gt;
Application:  eqPly -m screwdriver.ply -- --eq-server LINUX-CLUSTER-HEAD:4242&lt;/p&gt;
&lt;p&gt;I also included the call stack from Visual Studio of the second error, where I stopped debugging.&lt;/p&gt;
&lt;p&gt;If it helps, I got on to the error in Session::_cmdGetIDMasterReply() because the bytes of the node IDs were swapped in the log.&lt;br /&gt;
If you need any more information or testing regarding this issue feel free to contact me anytime.&lt;/p&gt;
&lt;p&gt;Kind regards, Alex&lt;/p&gt;&lt;/div&gt;</summary></entry></feed>