[complement-svn] SF.net SVN: complement: [1761] trunk/complement/explore
Status: Pre-Alpha
Brought to you by:
complement
From: <com...@us...> - 2007-10-09 11:30:05
|
Revision: 1761 http://complement.svn.sourceforge.net/complement/?rev=1761&view=rev Author: complement Date: 2007-10-09 04:29:47 -0700 (Tue, 09 Oct 2007) Log Message: ----------- send notification about group members as response to VS_MERGE_GROUP event [via VS_OLD_MEMBER_RV]; libjanus: version 0.6.0. Modified Paths: -------------- trunk/complement/explore/include/janus/janus.h trunk/complement/explore/include/janus/vtime.h trunk/complement/explore/lib/janus/ChangeLog trunk/complement/explore/lib/janus/Makefile.inc trunk/complement/explore/lib/janus/janus.cc trunk/complement/explore/lib/janus/samples/point1/point1.cc Modified: trunk/complement/explore/include/janus/janus.h =================================================================== --- trunk/complement/explore/include/janus/janus.h 2007-10-08 13:04:57 UTC (rev 1760) +++ trunk/complement/explore/include/janus/janus.h 2007-10-09 11:29:47 UTC (rev 1761) @@ -148,6 +148,7 @@ void VSNewMember( const stem::Event_base<VSsync_rq>& e ); void VSNewRemoteMemberDirect( const stem::Event_base<VSsync_rq>& e ); void VSNewRemoteMemberRevert( const stem::Event_base<VSsync_rq>& e ); + void VSOldRemoteMemberRevert( const stem::Event_base<VSsync_rq>& e ); void VSOutMember( const stem::Event_base<VSsync_rq>& e ); void VSMergeRemoteGroup( const stem::Event_base<VSsync_rq>& e ); Modified: trunk/complement/explore/include/janus/vtime.h =================================================================== --- trunk/complement/explore/include/janus/vtime.h 2007-10-08 13:04:57 UTC (rev 1760) +++ trunk/complement/explore/include/janus/vtime.h 2007-10-09 11:29:47 UTC (rev 1761) @@ -402,9 +402,10 @@ #define VS_SYNC_TIME 0x303 #define VS_NEW_REMOTE_MEMBER 0x304 #define VS_NEW_MEMBER_RV 0x305 -#define VS_HOST_MGR_FINAL 0x306 -#define VS_MERGE_GROUP 0x307 -#define VS_SYNC_GROUP_TIME 0x308 +#define VS_OLD_MEMBER_RV 0x306 +#define VS_HOST_MGR_FINAL 0x307 +#define VS_MERGE_GROUP 0x308 +#define VS_SYNC_GROUP_TIME 0x309 #ifdef __USE_STLPORT_HASH # undef __USE_STLPORT_HASH Modified: trunk/complement/explore/lib/janus/ChangeLog =================================================================== --- trunk/complement/explore/lib/janus/ChangeLog 2007-10-08 13:04:57 UTC (rev 1760) +++ trunk/complement/explore/lib/janus/ChangeLog 2007-10-09 11:29:47 UTC (rev 1761) @@ -1,3 +1,11 @@ +2007-10-09 Petr Ovtchenkov <pt...@is...> + + * janus.h, janus.cc, vtime.h: send notification about + group members as response to VS_MERGE_GROUP event + [via VS_OLD_MEMBER_RV]; + + * libjanus: version 0.6.0. + 2007-10-05 Petr Ovtchenkov <pt...@is...> * janus.h, janus.cc, vtime.h, vtime.cc: cover use-case Modified: trunk/complement/explore/lib/janus/Makefile.inc =================================================================== --- trunk/complement/explore/lib/janus/Makefile.inc 2007-10-08 13:04:57 UTC (rev 1760) +++ trunk/complement/explore/lib/janus/Makefile.inc 2007-10-09 11:29:47 UTC (rev 1761) @@ -2,6 +2,6 @@ LIBNAME = janus MAJOR = 0 -MINOR = 5 +MINOR = 6 PATCH = 0 SRC_CC = vtime.cc janus.cc vshostmgr.cc Modified: trunk/complement/explore/lib/janus/janus.cc =================================================================== --- trunk/complement/explore/lib/janus/janus.cc 2007-10-08 13:04:57 UTC (rev 1760) +++ trunk/complement/explore/lib/janus/janus.cc 2007-10-09 11:29:47 UTC (rev 1761) @@ -886,17 +886,30 @@ // gvtime_type gvt; // gvtime_type gvt_last; // stem::addr_type addr = stem::badaddr; + stem::Event_base<VSsync_rq> e_rv( VS_OLD_MEMBER_RV ); + e_rv.dest( e.src() ); + e_rv.value().grp = grp; + + bool sync = false; + for ( ; range.first != range.second; ++range.first ) { vt_map_type::iterator i = vtmap.find( range.first->second ); - if ( i != vtmap.end() && ((i->second.stem_addr() & stem::extbit) == 0 )) { - // i->second.get_gvt( gvt ); - // if ( gvt_last < gvt ) { - // swap( gvt_last, gvt ); - // addr = i->second.stem_addr(); - // } - e.dest( i->second.stem_addr() ); - Forward( e ); - return; + if ( i != vtmap.end() ) { + if ( (i->second.stem_addr() & stem::extbit) == 0 ) { + e_rv.src( i->second.stem_addr() ); + Forward( e_rv ); + if ( !sync ) { + // i->second.get_gvt( gvt ); + // if ( gvt_last < gvt ) { + // swap( gvt_last, gvt ); + // addr = i->second.stem_addr(); + // } + e.dest( i->second.stem_addr() ); + Forward( e ); + // return; + sync = true; + } + } } } // e.dest( addr ); @@ -907,12 +920,14 @@ void Janus::VSsync_group_time( const stem::Event_base<VSsync>& ev ) { const group_type grp = ev.value().grp; + const addr_type addr = ev.src(); #ifdef __FIT_VS_TRACE try { scoped_lock lk(_lock_tr); if ( _trs != 0 && _trs->good() && (_trflags & tracegroup) ) { int f = _trs->flags(); - *_trs << " VS sync remote group time G" << grp << endl; + *_trs << " VS sync group time from " << hex << showbase << addr + << dec << " G" << grp << endl; #ifdef STLPORT _trs->flags( f ); #else @@ -924,11 +939,17 @@ } #endif // __FIT_VS_TRACE + // const gaddr_type oid = manager()->reflect( addr ); // ???? oid == gaddr + + // add remote memer of group grp + // vtmap[oid].add( addr, grp ); + // grmap.insert( make_pair(grp,oid) ); + // find all local group members and forward data as VS_SYNC_TIME pair<gid_map_type::const_iterator,gid_map_type::const_iterator> range = grmap.equal_range( grp ); stem::Event_base<VSsync> e( VS_SYNC_TIME ); - e.src( ev.src() ); - e.value().grp = ev.value().grp; + e.src( addr ); + e.value().grp = grp; e.value().gvt.gvt = ev.value().gvt.gvt; e.value().mess = ev.value().mess; @@ -941,11 +962,41 @@ } } +void Janus::VSOldRemoteMemberRevert( const stem::Event_base<VSsync_rq>& ev ) +{ + const group_type grp = ev.value().grp; + const addr_type addr = ev.src(); + const gaddr_type oid = manager()->reflect( addr ); // ???? oid == gaddr +#ifdef __FIT_VS_TRACE + try { + scoped_lock lk(_lock_tr); + if ( _trs != 0 && _trs->good() && (_trflags & tracegroup) ) { + int f = _trs->flags(); + *_trs << " VS remote " << hex << showbase << addr + << " (" << oid << ") " + << dec << " G" << grp << endl; +#ifdef STLPORT + _trs->flags( f ); +#else + _trs->flags( static_cast<std::_Ios_Fmtflags>(f) ); +#endif + } + } + catch ( ... ) { + } +#endif // __FIT_VS_TRACE + // add remote memer of group grp + vtmap[oid].add( addr, grp ); + grmap.insert( make_pair(grp,oid) ); +} + + DEFINE_RESPONSE_TABLE( Janus ) EV_Event_base_T_( ST_NULL, VS_MESS, JaDispatch, VSmess ) EV_Event_base_T_( ST_NULL, VS_NEW_MEMBER, VSNewMember, VSsync_rq ) EV_Event_base_T_( ST_NULL, VS_NEW_REMOTE_MEMBER, VSNewRemoteMemberDirect, VSsync_rq ) EV_Event_base_T_( ST_NULL, VS_NEW_MEMBER_RV, VSNewRemoteMemberRevert, VSsync_rq ) + EV_Event_base_T_( ST_NULL, VS_OLD_MEMBER_RV, VSOldRemoteMemberRevert, VSsync_rq ) EV_Event_base_T_( ST_NULL, VS_OUT_MEMBER, VSOutMember, VSsync_rq ) EV_Event_base_T_( ST_NULL, VS_MERGE_GROUP, VSMergeRemoteGroup, VSsync_rq ) EV_Event_base_T_( ST_NULL, VS_SYNC_GROUP_TIME, VSsync_group_time, VSsync ) Modified: trunk/complement/explore/lib/janus/samples/point1/point1.cc =================================================================== --- trunk/complement/explore/lib/janus/samples/point1/point1.cc 2007-10-08 13:04:57 UTC (rev 1760) +++ trunk/complement/explore/lib/janus/samples/point1/point1.cc 2007-10-09 11:29:47 UTC (rev 1761) @@ -108,8 +108,14 @@ while ( cin.good() ) { cin >> line; if ( !cin.fail() ) { + cerr << "local: " << line << endl; ev.value() = line; - sample.JaSend( ev ); + try { + sample.JaSend( ev ); + } + catch ( std::domain_error& err ) { + cerr << err.what() << endl; + } } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |