<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Recent changes to support-requests</title><link>https://sourceforge.net/p/equalizer/support-requests/</link><description>Recent changes to support-requests</description><atom:link href="https://sourceforge.net/p/equalizer/support-requests/feed.rss" rel="self"/><language>en</language><lastBuildDate>Thu, 03 Sep 2009 11:42:33 -0000</lastBuildDate><atom:link href="https://sourceforge.net/p/equalizer/support-requests/feed.rss" rel="self" type="application/rss+xml"/><item><title>Interoperability between Windows and Linux is bugged</title><link>https://sourceforge.net/p/equalizer/support-requests/1/</link><description>&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;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Alexandros Panagiotidis</dc:creator><pubDate>Thu, 03 Sep 2009 11:42:33 -0000</pubDate><guid>https://sourceforge.netab0713dc0863d113226bd3d99c492fbf368ab880</guid></item></channel></rss>