Thread: [complement-svn] SF.net SVN: complement: [1703] trunk/complement/explore/lib/janus/ut/ vt_remote.cc
Status: Pre-Alpha
Brought to you by:
complement
From: <com...@us...> - 2007-08-23 13:57:51
|
Revision: 1703 http://complement.svn.sourceforge.net/complement/?rev=1703&view=rev Author: complement Date: 2007-08-23 06:57:49 -0700 (Thu, 23 Aug 2007) Log Message: ----------- correct interpretation; real transmit of virtual synchrony message Modified Paths: -------------- trunk/complement/explore/lib/janus/ut/vt_remote.cc Modified: trunk/complement/explore/lib/janus/ut/vt_remote.cc =================================================================== --- trunk/complement/explore/lib/janus/ut/vt_remote.cc 2007-08-23 09:02:15 UTC (rev 1702) +++ trunk/complement/explore/lib/janus/ut/vt_remote.cc 2007-08-23 13:57:49 UTC (rev 1703) @@ -103,7 +103,7 @@ void YaRemote::VSNewMember( const stem::Event_base<VSsync_rq>& ev ) { - cerr << "Hello " << xmt::getpid() << endl; + // cerr << "Hello " << xmt::getpid() << endl; ++count; // VTNewMember_data( ev, "" ); @@ -116,7 +116,7 @@ void YaRemote::VSOutMember( const stem::Event_base<VSsync_rq>& ev ) { - // cerr << "Hello" << endl; + cerr << "VSOutMember" << endl; ++ocount; } @@ -141,8 +141,6 @@ int EXAM_IMPL(vtime_operations::remote) { - cerr << "============\n"; - const char fname[] = "/tmp/yanus_test.shm"; xmt::shm_alloc<0> seg; xmt::allocator_shm<xmt::__condition<true>,0> shm_cnd; @@ -163,29 +161,35 @@ // obj1.manager()->settrf( stem::EvManager::tracenet | stem::EvManager::tracedispatch ); // obj1.manager()->settrs( &std::cerr ); - obj1.vtdispatcher()->settrf( janus::Janus::tracenet | janus::Janus::tracedispatch | janus::Janus::tracefault | janus::Janus::tracedelayed | janus::Janus::tracegroup ); - obj1.vtdispatcher()->settrs( &std::cerr ); + // obj1.vtdispatcher()->settrf( janus::Janus::tracenet | janus::Janus::tracedispatch | janus::Janus::tracefault | janus::Janus::tracedelayed | janus::Janus::tracegroup ); + // obj1.vtdispatcher()->settrs( &std::cerr ); EXAM_CHECK_ASYNC( obj1.vtdispatcher()->group_size(janus::vs_base::vshosts_group) == 1 ); obj1.vtdispatcher()->connect( "localhost", 6980 ); - cerr << obj1.vtdispatcher()->group_size(janus::vs_base::vshosts_group) << endl; + // cerr << obj1.vtdispatcher()->group_size(janus::vs_base::vshosts_group) << endl; -#if 1 while ( obj1.vtdispatcher()->vs_known_processes() < 2 ) { xmt::Thread::yield(); xmt::delay( xmt::timespec( 0, 1000000 ) ); } -#else + + /* ****************************************************************************** + This variant is wrong, because of group_size don't guarantee that information + in the object is relevant (i.e. VSsync happens); for example, in case below + group_size already 2, but no janus string stored yet. + while ( obj1.vtdispatcher()->group_size(janus::vs_base::vshosts_group) < 2 ) { xmt::Thread::yield(); xmt::delay( xmt::timespec( 0, 1000000 ) ); } -#endif + * ****************************************************************************** */ + // cerr << obj1.vtdispatcher()->vs_known_processes() << endl; + EXAM_CHECK_ASYNC( obj1.vtdispatcher()->group_size(janus::vs_base::vshosts_group) == 2 ); - cerr << obj1.vtdispatcher()->group_size(janus::vs_base::vshosts_group) << endl; + // cerr << obj1.vtdispatcher()->group_size(janus::vs_base::vshosts_group) << endl; obj1.JoinGroup( janus::vs_base::first_user_group ); @@ -194,6 +198,7 @@ EXAM_CHECK_ASYNC( obj1.vtdispatcher()->group_size(janus::vs_base::first_user_group) == 2 ); // cerr << "* " << obj1.vtdispatcher()->group_size(janus::vs_base::first_user_group) << endl; + obj1.wait(); } exit(0); @@ -214,16 +219,21 @@ // xmt::delay( xmt::timespec( 0, 1000000 ) ); // } - // stem::Event ev( VS_DUMMY_MESS ); - // ev.dest( janus::vs_base::first_user_group ); // group - // ev.value() = "hello"; + obj1.wait_greeting(); - // obj1.JaSend( ev ); + stem::Event ev( VS_DUMMY_MESS ); + ev.dest( janus::vs_base::first_user_group ); + ev.value() = "hello"; - // obj1.wait_greeting(); + obj1.JaSend( ev ); int stat; EXAM_CHECK( waitpid( child.pid(), &stat, 0 ) == child.pid() ); + + // cerr << obj1.vtdispatcher()->group_size(janus::vs_base::first_user_group) << endl; + // cerr << obj1.vtdispatcher()->group_size(janus::vs_base::vshosts_group) << endl; + // cerr << obj1.vtdispatcher()->vs_known_processes() << endl; + // cerr << obj1.vtdispatcher()->group_size(janus::vs_base::first_user_group) << endl; } (&b)->~__barrier<true>(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <com...@us...> - 2007-08-23 17:34:24
|
Revision: 1704 http://complement.svn.sourceforge.net/complement/?rev=1704&view=rev Author: complement Date: 2007-08-23 10:34:23 -0700 (Thu, 23 Aug 2007) Log Message: ----------- clean test Modified Paths: -------------- trunk/complement/explore/lib/janus/ut/vt_remote.cc Modified: trunk/complement/explore/lib/janus/ut/vt_remote.cc =================================================================== --- trunk/complement/explore/lib/janus/ut/vt_remote.cc 2007-08-23 13:57:49 UTC (rev 1703) +++ trunk/complement/explore/lib/janus/ut/vt_remote.cc 2007-08-23 17:34:23 UTC (rev 1704) @@ -1,4 +1,4 @@ -// -*- C++ -*- Time-stamp: <07/08/23 12:43:15 ptr> +// -*- C++ -*- Time-stamp: <07/08/23 21:31:56 ptr> #include "vt_operations.h" @@ -129,9 +129,7 @@ void YaRemote::greeting() { - if ( count > 0 ) { - gr.set( true ); - } + gr.set( true ); } DEFINE_RESPONSE_TABLE( YaRemote ) @@ -175,16 +173,17 @@ xmt::delay( xmt::timespec( 0, 1000000 ) ); } - /* ****************************************************************************** - This variant is wrong, because of group_size don't guarantee that information - in the object is relevant (i.e. VSsync happens); for example, in case below - group_size already 2, but no janus string stored yet. + /*******************************************************************\ + * This variant is wrong, because of group_size don't guarantee + * that information in the object is relevant (i.e. VSsync happens); + * for example, in case below group_size already 2, but no janus string + * stored yet. while ( obj1.vtdispatcher()->group_size(janus::vs_base::vshosts_group) < 2 ) { xmt::Thread::yield(); xmt::delay( xmt::timespec( 0, 1000000 ) ); } - * ****************************************************************************** */ + \********************************************************************/ // cerr << obj1.vtdispatcher()->vs_known_processes() << endl; @@ -196,7 +195,7 @@ obj1.wait_greeting(); EXAM_CHECK_ASYNC( obj1.vtdispatcher()->group_size(janus::vs_base::first_user_group) == 2 ); - + EXAM_CHECK_ASYNC( obj1.count == 1 ); // cerr << "* " << obj1.vtdispatcher()->group_size(janus::vs_base::first_user_group) << endl; obj1.wait(); } @@ -227,6 +226,8 @@ obj1.JaSend( ev ); + EXAM_CHECK( obj1.count == 1 ); + int stat; EXAM_CHECK( waitpid( child.pid(), &stat, 0 ) == child.pid() ); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <com...@us...> - 2007-09-10 10:11:16
|
Revision: 1735 http://complement.svn.sourceforge.net/complement/?rev=1735&view=rev Author: complement Date: 2007-09-10 03:11:10 -0700 (Mon, 10 Sep 2007) Log Message: ----------- propagate check results from child process to parent Modified Paths: -------------- trunk/complement/explore/lib/janus/ut/vt_remote.cc Modified: trunk/complement/explore/lib/janus/ut/vt_remote.cc =================================================================== --- trunk/complement/explore/lib/janus/ut/vt_remote.cc 2007-09-10 09:47:10 UTC (rev 1734) +++ trunk/complement/explore/lib/janus/ut/vt_remote.cc 2007-09-10 10:11:10 UTC (rev 1735) @@ -198,6 +198,8 @@ try { xmt::fork(); + long res_flag = 0; + b.wait(); { @@ -212,7 +214,7 @@ // obj1.vtdispatcher()->settrf( janus::Janus::tracenet | janus::Janus::tracedispatch | janus::Janus::tracefault | janus::Janus::tracedelayed | janus::Janus::tracegroup ); // obj1.vtdispatcher()->settrs( &std::cerr ); - EXAM_CHECK_ASYNC( obj1.vtdispatcher()->group_size(janus::vs_base::vshosts_group) == 1 ); + EXAM_CHECK_ASYNC_F( obj1.vtdispatcher()->group_size(janus::vs_base::vshosts_group) == 1, res_flag ); obj1.vtdispatcher()->connect( "localhost", 6980 ); @@ -237,15 +239,15 @@ // cerr << obj1.vtdispatcher()->vs_known_processes() << endl; - EXAM_CHECK_ASYNC( obj1.vtdispatcher()->group_size(janus::vs_base::vshosts_group) == 2 ); + EXAM_CHECK_ASYNC_F( obj1.vtdispatcher()->group_size(janus::vs_base::vshosts_group) == 2, res_flag ); // cerr << obj1.vtdispatcher()->group_size(janus::vs_base::vshosts_group) << endl; obj1.JoinGroup( janus::vs_base::first_user_group ); obj1.wait_greeting(); - EXAM_CHECK_ASYNC( obj1.vtdispatcher()->group_size(janus::vs_base::first_user_group) == 2 ); - EXAM_CHECK_ASYNC( obj1.count == 1 ); + EXAM_CHECK_ASYNC_F( obj1.vtdispatcher()->group_size(janus::vs_base::first_user_group) == 2, res_flag ); + EXAM_CHECK_ASYNC_F( obj1.count == 1, res_flag ); // cerr << "* " << obj1.vtdispatcher()->group_size(janus::vs_base::first_user_group) << endl; obj1.wait(); @@ -254,10 +256,10 @@ } // obj1 here away, but in another process (remote) still exist object in // first_user_group, that's why 1 here: - EXAM_CHECK_ASYNC( obj0.vtdispatcher()->group_size(janus::vs_base::first_user_group) == 1); + EXAM_CHECK_ASYNC_F( obj0.vtdispatcher()->group_size(janus::vs_base::first_user_group) == 1, res_flag ); } - exit(0); + exit( res_flag ); } catch ( xmt::fork_in_parent& child ) { YaRemote obj1( "obj srv" ); @@ -289,8 +291,13 @@ // obj1.manager()->settrf( stem::EvManager::tracenet | stem::EvManager::tracedispatch ); // obj1.manager()->settrs( &std::cerr ); - int stat; + int stat = -1; EXAM_CHECK( waitpid( child.pid(), &stat, 0 ) == child.pid() ); + if ( WIFEXITED(stat) ) { + EXAM_CHECK( WEXITSTATUS(stat) == 0 ); + } else { + EXAM_ERROR( "child interrupted" ); + } EXAM_CHECK( obj1.vtdispatcher()->group_size(janus::vs_base::first_user_group) == 1 ); @@ -325,6 +332,8 @@ try { xmt::fork(); + long res_flag = 0; + b.wait(); { @@ -346,9 +355,9 @@ obj1.wait_greeting(); obj1.wait_greeting2(); - EXAM_CHECK_ASYNC( obj1.vtdispatcher()->group_size(janus::vs_base::first_user_group) == 2 ); - EXAM_CHECK_ASYNC( obj1.vtdispatcher()->group_size(janus::vs_base::first_user_group + 1) == 2 ); - EXAM_CHECK_ASYNC( obj1.count == 2 ); + EXAM_CHECK_ASYNC_F( obj1.vtdispatcher()->group_size(janus::vs_base::first_user_group) == 2, res_flag ); + EXAM_CHECK_ASYNC_F( obj1.vtdispatcher()->group_size(janus::vs_base::first_user_group + 1) == 2, res_flag ); + EXAM_CHECK_ASYNC_F( obj1.count == 2, res_flag ); stem::Event ev( VS_DUMMY_MESS2 ); ev.dest( janus::vs_base::first_user_group + 1 ); @@ -362,11 +371,11 @@ // obj1.manager()->settrs( &std::cerr ); } - EXAM_CHECK_ASYNC( obj0.vtdispatcher()->group_size(janus::vs_base::first_user_group) == 1); - EXAM_CHECK_ASYNC( obj0.vtdispatcher()->group_size(janus::vs_base::first_user_group + 1) == 1); + EXAM_CHECK_ASYNC_F( obj0.vtdispatcher()->group_size(janus::vs_base::first_user_group) == 1, res_flag ); + EXAM_CHECK_ASYNC_F( obj0.vtdispatcher()->group_size(janus::vs_base::first_user_group + 1) == 1, res_flag ); } - exit(0); + exit( res_flag ); } catch ( xmt::fork_in_parent& child ) { YaRemote obj1( "obj srv" ); @@ -393,8 +402,13 @@ obj1.wait2(); - int stat; + int stat = -1; EXAM_CHECK( waitpid( child.pid(), &stat, 0 ) == child.pid() ); + if ( WIFEXITED(stat) ) { + EXAM_CHECK( WEXITSTATUS(stat) == 0 ); + } else { + EXAM_ERROR( "child interrupted" ); + } EXAM_CHECK( obj1.vtdispatcher()->group_size(janus::vs_base::first_user_group) == 1 ); EXAM_CHECK( obj1.vtdispatcher()->group_size(janus::vs_base::first_user_group + 1) == 1 ); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |