From jschultz at spread.org Wed Feb 1 10:27:15 2017 From: jschultz at spread.org (jschultz at spread.org) Date: Wed, 01 Feb 2017 10:27:15 -0500 Subject: [Spread-cvs] commit: r887 - trunk/java/spread Message-ID: Author: jschultz Date: 2017-02-01 10:27:15 -0500 (Wed, 01 Feb 2017) New Revision: 887 Modified: trunk/java/spread/SpreadVersion.java Log: Updated java's Spread version Modified: trunk/java/spread/SpreadVersion.java =================================================================== --- trunk/java/spread/SpreadVersion.java 2017-01-23 14:34:47 UTC (rev 886) +++ trunk/java/spread/SpreadVersion.java 2017-02-01 15:27:15 UTC (rev 887) @@ -43,15 +43,15 @@ { // The major version. ///////////////////// - private int majorVersion = 3; + private int majorVersion = 5; // The minor version. ///////////////////// - private int minorVersion = 16; + private int minorVersion = 0; // The patch version. ///////////////////// - private int patchVersion = 1; + private int patchVersion = 0; // Get the spread version. ////////////////////////// From jschultz at spread.org Wed Feb 1 10:33:30 2017 From: jschultz at spread.org (jschultz at spread.org) Date: Wed, 01 Feb 2017 10:33:30 -0500 Subject: [Spread-cvs] commit: r888 - in trunk: . daemon java libspread-util libspread-util/docs Message-ID: Author: jschultz Date: 2017-02-01 10:33:30 -0500 (Wed, 01 Feb 2017) New Revision: 888 Modified: trunk/Readme.txt trunk/daemon/Changelog trunk/daemon/spread_params.h trunk/java/readme.txt trunk/libspread-util/Changelog trunk/libspread-util/docs/Readme.txt trunk/release_announcement_5.0.txt Log: Updates to version numbers for release of 5.0.0 final Modified: trunk/Readme.txt =================================================================== --- trunk/Readme.txt 2017-02-01 15:27:15 UTC (rev 887) +++ trunk/Readme.txt 2017-02-01 15:33:30 UTC (rev 888) @@ -49,9 +49,14 @@ | WWW : http://www.spread.org and http://www.spreadconcepts.com | | Contact: info at spreadconcepts.com | | | -| Version 5.0.0 RC2 built 23/Jan/2017 | +| Version 5.0.0 built 1/Feb/2017 | \=============================================================================/ +February 1, 2017 Ver 5.0.0 +-------------------------- + +No significant changes versus 5.0.0 RC2. + January 23, 2017 Ver 5.0.0 RC2 ------------------------------ Modified: trunk/daemon/Changelog =================================================================== --- trunk/daemon/Changelog 2017-02-01 15:27:15 UTC (rev 887) +++ trunk/daemon/Changelog 2017-02-01 15:33:30 UTC (rev 888) @@ -1,3 +1,9 @@ +February 1, 2017 Ver 5.0.0 +-------------------------- + +r887 | jschultz | 2017-02-01 10:27:15 -0500 (Wed, 01 Feb 2017) | 2 lines + Updated java's Spread version + January 23, 2017 Ver 5.0.0 RC2 ------------------------------ Modified: trunk/daemon/spread_params.h =================================================================== --- trunk/daemon/spread_params.h 2017-02-01 15:27:15 UTC (rev 887) +++ trunk/daemon/spread_params.h 2017-02-01 15:33:30 UTC (rev 888) @@ -43,7 +43,7 @@ #define SPREAD_PROTOCOL 3 -#define SPREAD_BUILD_DATE "23/Jan/2017" +#define SPREAD_BUILD_DATE "1/Feb/2017" #define DEFAULT_SPREAD_PORT 4803 Modified: trunk/java/readme.txt =================================================================== --- trunk/java/readme.txt 2017-02-01 15:27:15 UTC (rev 887) +++ trunk/java/readme.txt 2017-02-01 15:33:30 UTC (rev 888) @@ -18,13 +18,15 @@ * The Creators of Spread are: * Yair Amir, Michal Miskin-Amir, Jonathan Stanton, John Schultz. * - * Copyright (C) 1993-2006 Spread Concepts LLC + * Copyright (C) 1993-2016 Spread Concepts LLC * * All Rights Reserved. * * Major Contributor(s): * --------------- + * Amy Babay babay at cs.jhu.edu - accelerated ring protocol. * Ryan Caudy rcaudy at gmail.com - contributions to process groups. + * Claudiu Danilov claudiu at acm.org - scalable wide area support. * Cristina Nita-Rotaru crisn at cs.purdue.edu - group communication security. * Theo Schlossnagle jesus at omniti.com - Perl, autoconf, old skiplist. * Dan Schoenblum dansch at cnds.jhu.edu - Java interface. Modified: trunk/libspread-util/Changelog =================================================================== --- trunk/libspread-util/Changelog 2017-02-01 15:27:15 UTC (rev 887) +++ trunk/libspread-util/Changelog 2017-02-01 15:33:30 UTC (rev 888) @@ -1,3 +1,8 @@ +February 1, 2017 v5.0.0 +----------------------- + +No changes versus v5.0.0 RC2. + January 23, 2017 v5.0.0 RC2 --------------------------- Modified: trunk/libspread-util/docs/Readme.txt =================================================================== --- trunk/libspread-util/docs/Readme.txt 2017-02-01 15:27:15 UTC (rev 887) +++ trunk/libspread-util/docs/Readme.txt 2017-02-01 15:33:30 UTC (rev 888) @@ -48,12 +48,22 @@ | WWW : http://www.spread.org and http://www.spreadconcepts.com | | Contact: info at spreadconcepts.com | | | -| Version 5.0.0 RC1 built 22/Nov/2016 | +| Version 5.0.0 built 1/Feb/2017 | \===========================================================================/ -November 22, 2016 Ver 5.0.0 ---------------------------- +February 1, 2017 Ver 5.0.0 +-------------------------- +No changes versus 5.0.0 RC2. + +January 23, 2017 Ver 5.0.0 RC2 +------------------------------ + +Exported E_get_time_monotonic(). + +November 22, 2016 Ver 5.0.0 RC1 +------------------------------- + This version adds IPv6 support to the library. The main changes are data_link.c and the addition of spu_addr.[ch], which is a variadic structure (union) that is a wrapper around the various sockaddr types. Modified: trunk/release_announcement_5.0.txt =================================================================== --- trunk/release_announcement_5.0.txt 2017-02-01 15:27:15 UTC (rev 887) +++ trunk/release_announcement_5.0.txt 2017-02-01 15:33:30 UTC (rev 888) @@ -1,9 +1,9 @@ -Spread 5.0.0 RC2 http://www.spread.org +Spread 5.0.0 http://www.spread.org -Spread Concepts LLC is happy to announce a release candidate for a -new version, 5.0.0 RC2, of The Spread Toolkit. It can be downloaded here: +Spread Concepts LLC is happy to announce a new version, 5.0.0, of +The Spread Toolkit. It can be downloaded here: -http://www.spread.org/download/spread-src-5.0.0rc2.tar.gz +http://www.spread.org/download/spread-src-5.0.0.tar.gz Spread 5 is an important release that adds support for IPv6. From jschultz at spread.org Wed Feb 1 12:54:47 2017 From: jschultz at spread.org (jschultz at spread.org) Date: Wed, 01 Feb 2017 12:54:47 -0500 Subject: [Spread-cvs] commit: r889 - tags Message-ID: Author: jschultz Date: 2017-02-01 12:54:47 -0500 (Wed, 01 Feb 2017) New Revision: 889 Added: tags/REL_5_0_0/ Log: Tagging spread 5.0.0 final from trunk From jschultz at spread.org Tue Feb 28 21:00:26 2017 From: jschultz at spread.org (jschultz at spread.org) Date: Wed, 01 Mar 2017 02:00:26 -0000 Subject: [Spread-cvs] commit: r890 - tags Message-ID: Author: jschultz Date: 2017-02-28 21:00:25 -0500 (Tue, 28 Feb 2017) New Revision: 890 Added: tags/ALPHA1_5_0_1/ Log: Tagging trunk as alpha version of 5.0.1 From jschultz at spread.org Tue Feb 28 21:01:57 2017 From: jschultz at spread.org (jschultz at spread.org) Date: Wed, 01 Mar 2017 02:01:57 -0000 Subject: [Spread-cvs] commit: r891 - in trunk: daemon docs Message-ID: Author: jschultz Date: 2017-02-28 21:01:55 -0500 (Tue, 28 Feb 2017) New Revision: 891 Modified: trunk/daemon/config_gram.l trunk/daemon/config_parse.y trunk/daemon/configuration.c trunk/daemon/configuration.h trunk/daemon/network.c trunk/docs/sample.spread.conf Log: Added two new features and parameters to configuration file: ExcludeSegAddrsFromHash, IgnoreMulticastJoinErrors. Modified: trunk/daemon/config_gram.l =================================================================== --- trunk/daemon/config_gram.l 2017-03-01 02:00:25 UTC (rev 890) +++ trunk/daemon/config_gram.l 2017-03-01 02:01:55 UTC (rev 891) @@ -225,6 +225,8 @@ LookupTimeout { return LOOKUPTIMEOUT; } VirtualID { return VIRTUALID; } WideAreaNetwork { return WIDEAREANETWORK; } +ExcludeSegAddrsFromHash { return EXCLUDESEGADDRSFROMHASH; } +IgnoreMulticastJoinErrors { return IGNOREMULTICASTJOINERRORS; } {true}|{yes} { yylval.boolean = TRUE; return SP_BOOL; } {false}|{no} { yylval.boolean = FALSE; return SP_BOOL; } {on} { yylval.number = 1; return SP_TRIVAL; } Modified: trunk/daemon/config_parse.y =================================================================== --- trunk/daemon/config_parse.y 2017-03-01 02:00:25 UTC (rev 890) +++ trunk/daemon/config_parse.y 2017-03-01 02:01:55 UTC (rev 891) @@ -263,8 +263,9 @@ c += snprintf(c, SPCLAMP(c, e), "Segment: port = %u;", (unsigned) spu_addr_ip_get_port(&seg->seg_addrs[0])); - for (i = 0; i < seg->num_seg_addrs; ++i) - c += snprintf(c, SPCLAMP(c, e), " [%s]", SPU_ADDR_NTOP_CANON(&seg->seg_addrs[i])); + if (!Conf_get_exclude_seg_addrs_from_hash()) + for (i = 0; i < seg->num_seg_addrs; ++i) + c += snprintf(c, SPCLAMP(c, e), " [%s]", SPU_ADDR_NTOP_CANON(&seg->seg_addrs[i])); c += snprintf(c, SPCLAMP(c, e), "\n"); @@ -315,6 +316,7 @@ %token DANGEROUSMONITOR SOCKETPORTREUSE RUNTIMEDIR SPUSER SPGROUP ALLOWEDAUTHMETHODS REQUIREDAUTHMETHODS ACCESSCONTROLPOLICY %token MAXSESSIONMESSAGES ACTIVEIPVERSION %token WINDOW PERSONALWINDOW ACCELERATEDRING ACCELERATEDWINDOW +%token EXCLUDESEGADDRSFROMHASH IGNOREMULTICASTJOINERRORS %token TOKENTIMEOUT HURRYTIMEOUT ALIVETIMEOUT JOINTIMEOUT REPTIMEOUT SEGTIMEOUT GATHERTIMEOUT FORMTIMEOUT LOOKUPTIMEOUT %token SP_BOOL SP_TRIVAL %token IMONITOR ICLIENT IDAEMON @@ -323,6 +325,8 @@ %% Config : ConfigStructs { + int i; + if (segments == 0) yyerror("No segments specified!"); @@ -338,8 +342,11 @@ Config->num_segments = segments; Config->num_total_procs = num_procs; - /* add Spread daemon version number and algorithm to hash string and calculate hash */ - + /* calculate configuration hash */ + + for (i = 0; i < Config->num_segments; ++i) + ConfStringLen += convert_segment_to_string(&ConfStringRep[ConfStringLen], MAX_CONF_STRING - ConfStringLen, &Config->segments[i]); + ConfStringLen += convert_version_to_string(&ConfStringRep[ConfStringLen], MAX_CONF_STRING - ConfStringLen); Config->hash_code = stdhcode_oaat(ConfStringRep, ConfStringLen + 1); @@ -629,7 +636,14 @@ Conf_set_wide_area_network_flag(TRUE); Conf_set_wide_area_network($3.boolean); } - + | EXCLUDESEGADDRSFROMHASH EQUALS SP_BOOL + { + Conf_set_exclude_seg_addrs_from_hash($3.boolean); + } + | IGNOREMULTICASTJOINERRORS EQUALS SP_BOOL + { + Conf_set_ignore_multicast_join_errors($3.boolean); + } SegmentStruct : SEGMENT SegmentAddress SegmentAddresses_opt OPENBRACE Segmentparams CLOSEBRACE { @@ -696,8 +710,6 @@ line_num, yytext, Config->allprocs[i].name, SPU_ADDR_NTOP(&Config->allprocs[i].proc_addr), j, Config->allprocs[j].name); } - ConfStringLen += convert_segment_to_string(&ConfStringRep[ConfStringLen], MAX_CONF_STRING - ConfStringLen, &Config->segments[segments]); - ++segments; segment_procs = 0; segment_addrs = 0; Modified: trunk/daemon/configuration.c =================================================================== --- trunk/daemon/configuration.c 2017-03-01 02:00:25 UTC (rev 890) +++ trunk/daemon/configuration.c 2017-03-01 02:01:55 UTC (rev 891) @@ -121,6 +121,9 @@ static bool WideAreaNetworkFlag = FALSE; static bool WideAreaNetwork = FALSE; +static bool ExcludeSegAddrsFromHash = FALSE; +static bool IgnoreMulticastJoinErrors = FALSE; + static bool Conf_Reload_State = FALSE; static bool Conf_Reload_Singleton_State = FALSE; static configuration *Config_Previous; @@ -1163,3 +1166,24 @@ { return WideAreaNetwork; } + +void Conf_set_exclude_seg_addrs_from_hash(bool exclude) +{ + ExcludeSegAddrsFromHash = exclude; +} + +bool Conf_get_exclude_seg_addrs_from_hash(void) +{ + return ExcludeSegAddrsFromHash; +} + +void Conf_set_ignore_multicast_join_errors(bool ignore) +{ + IgnoreMulticastJoinErrors = ignore; +} + +bool Conf_get_ignore_multicast_join_errors(void) +{ + return IgnoreMulticastJoinErrors; +} + Modified: trunk/daemon/configuration.h =================================================================== --- trunk/daemon/configuration.h 2017-03-01 02:00:25 UTC (rev 890) +++ trunk/daemon/configuration.h 2017-03-01 02:01:55 UTC (rev 891) @@ -189,5 +189,9 @@ bool Conf_get_wide_area_network_flag(void); void Conf_set_wide_area_network(bool network_is_wan); bool Conf_get_wide_area_network(void); +void Conf_set_exclude_seg_addrs_from_hash(bool exclude); +bool Conf_get_exclude_seg_addrs_from_hash(void); +void Conf_set_ignore_multicast_join_errors(bool ignore); +bool Conf_get_ignore_multicast_join_errors(void); #endif /* INC_CONFIGURATION */ Modified: trunk/daemon/network.c =================================================================== --- trunk/daemon/network.c 2017-03-01 02:00:25 UTC (rev 890) +++ trunk/daemon/network.c 2017-03-01 02:01:55 UTC (rev 891) @@ -204,11 +204,24 @@ for (i = 0; i < Bcast_addrs_num; ++i) if (spu_addr_ip_is_multicast(&Bcast_addrs[i])) { + int log_lvl = (Conf_get_ignore_multicast_join_errors() ? SPLOG_ERROR : SPLOG_FATAL); + if ((ret = DL_join_multicast_gen(Bcast_channel[Num_bcast_channels], &Bcast_addrs[i], &My.proc_addr))) - Alarmp(SPLOG_FATAL, NETWORK, "Net_init: implicit: error joining multicast group %s on channel %d: %d %s\n", + { + Alarmp(log_lvl, NETWORK, "Net_init: implicit: error joining multicast group %s on channel %d: %d %s; Won't send/recv to/from this segment address!\n", SPU_ADDR_NTOP(&Bcast_addrs[i]), (int) Bcast_channel[Num_bcast_channels], sock_errno, sock_strerror(sock_errno)); - Alarmp(SPLOG_INFO, NETWORK, "Net_init: implicit: joined multicast group %s on channel %d\n", SPU_ADDR_NTOP(&Bcast_addrs[i]), (int) Bcast_channel[Num_bcast_channels]); + /* move last bcast address into this spot and loop again */ + + --Bcast_addrs_num; + Bcast_addrs[i] = Bcast_addrs[Bcast_addrs_num]; + --i; /* NOTE: counteract loop counter increment */ + + if (Bcast_needed && Bcast_addrs_num == 0) + Alarmp(SPLOG_FATAL, NETWORK, "Net_init: implicit: no configured segment addresses worked in a non-singelton segment. Need at least one to work!\n"); + } + else + Alarmp(SPLOG_INFO, NETWORK, "Net_init: implicit: joined multicast group %s on channel %d\n", SPU_ADDR_NTOP(&Bcast_addrs[i]), (int) Bcast_channel[Num_bcast_channels]); } ++Num_bcast_channels; @@ -263,11 +276,25 @@ for (j = 0; j < Bcast_addrs_num; ++j) if (spu_addr_ip_is_multicast(&Bcast_addrs[j])) { + int log_lvl = (Conf_get_ignore_multicast_join_errors() ? SPLOG_ERROR : SPLOG_FATAL); + if ((ret = DL_join_multicast_gen(Bcast_channel[Num_bcast_channels], &Bcast_addrs[j], &My.proc_addr))) - Alarmp(SPLOG_FATAL, NETWORK, "Net_init: explicit: error joining multicast group %s on channel %d: %d %s\n", + { + Alarmp(log_lvl, NETWORK, "Net_init: explicit: error joining multicast group %s on channel %d: %d %s; Won't send/recv to/from this segment address!\n", SPU_ADDR_NTOP(&Bcast_addrs[j]), (int) Bcast_channel[Num_bcast_channels], sock_errno, sock_strerror(sock_errno)); + + /* move last bcast address into this spot and loop again */ - Alarmp(SPLOG_INFO, NETWORK, "Net_init: explicit: joined multicast group %s on channel %d\n", SPU_ADDR_NTOP(&Bcast_addrs[j]), (int) Bcast_channel[Num_bcast_channels]); + --Bcast_addrs_num; + Bcast_addrs[j] = Bcast_addrs[Bcast_addrs_num]; + bcast_bound[j] = bcast_bound[Bcast_addrs_num]; + --j; /* NOTE: counteract loop counter increment */ + + if (Bcast_needed && Bcast_addrs_num == 0) + Alarmp(SPLOG_FATAL, NETWORK, "Net_init: explicit: no configured segment addresses worked in a non-singelton segment. Need at least one to work!\n"); + } + else + Alarmp(SPLOG_INFO, NETWORK, "Net_init: explicit: joined multicast group %s on channel %d\n", SPU_ADDR_NTOP(&Bcast_addrs[j]), (int) Bcast_channel[Num_bcast_channels]); } ++Num_bcast_channels; @@ -292,29 +319,44 @@ #ifndef ARCH_PC_WIN95 /* NOTE: for backwards compatability with old configurations we don't do this for singleton segments */ + /* TODO: figure out a better way because not setting up this * socket here means that if a singleton segment is reconfigured * to have multiple daemons then this daemon needs to reboot */ - for (i = 0; Bcast_needed && i < Bcast_addrs_num; ++i) + for (i = 0; Bcast_needed && i < Bcast_addrs_num; ++i, ++Num_bcast_channels) if (!bcast_bound[i]) /* didn't already explicity or implicitly bind to Bcast_addrs[i] above */ { if_addr = Bcast_addrs[i]; - Alarmp(SPLOG_INFO, NETWORK, "Net_init: explicit: binding an extra recv bcast channel to [%s]:%u\n", SPU_ADDR_NTOP(&if_addr), (unsigned) spu_addr_ip_get_port(&if_addr)); + Alarmp(SPLOG_INFO, NETWORK, "Net_init: explicit: extras: binding a recv bcast channel to [%s]:%u\n", SPU_ADDR_NTOP(&if_addr), (unsigned) spu_addr_ip_get_port(&if_addr)); Bcast_channel[Num_bcast_channels] = DL_init_channel_gen(RECV_CHANNEL | REUSE_ADDR, NULL, &if_addr); - for (j = 0; j < Bcast_addrs_num; ++j) - if (spu_addr_ip_is_multicast(&Bcast_addrs[j])) + if (spu_addr_ip_is_multicast(&Bcast_addrs[i])) + { + int log_lvl = (Conf_get_ignore_multicast_join_errors() ? SPLOG_ERROR : SPLOG_FATAL); + + if ((ret = DL_join_multicast_gen(Bcast_channel[Num_bcast_channels], &Bcast_addrs[i], &My.proc_addr))) { - if ((ret = DL_join_multicast_gen(Bcast_channel[Num_bcast_channels], &Bcast_addrs[j], &My.proc_addr))) - Alarmp(SPLOG_FATAL, NETWORK, "Net_init: explicit: error joining multicast group %s on channel %d: %d %s\n", - SPU_ADDR_NTOP(&Bcast_addrs[j]), (int) Bcast_channel[Num_bcast_channels], sock_errno, sock_strerror(sock_errno)); + Alarmp(log_lvl, NETWORK, "Net_init: explicit: extras: error joining multicast group %s on channel %d: %d %s\n", + SPU_ADDR_NTOP(&Bcast_addrs[i]), (int) Bcast_channel[Num_bcast_channels], sock_errno, sock_strerror(sock_errno)); + + /* move last bcast address into this spot and loop again */ + + --Bcast_addrs_num; + Bcast_addrs[i] = Bcast_addrs[Bcast_addrs_num]; + bcast_bound[i] = bcast_bound[Bcast_addrs_num]; + --i; /* NOTE: counteract loop counter increment */ - Alarmp(SPLOG_INFO, NETWORK, "Net_init: explicit: joined multicast group %s on channel %d\n", SPU_ADDR_NTOP(&Bcast_addrs[j]), (int) Bcast_channel[Num_bcast_channels]); + if (Bcast_addrs_num == 0) + Alarmp(SPLOG_FATAL, NETWORK, "Net_init: explicit: extras: no configured segment addresses worked in a non-singelton segment. Need at least one to work!\n"); + + DL_close_channel(Bcast_channel[Num_bcast_channels]); + --Num_bcast_channels; /* NOTE: counteract loop increment */ } - - ++Num_bcast_channels; + else + Alarmp(SPLOG_INFO, NETWORK, "Net_init: explicit: extras: joined multicast group %s on channel %d\n", SPU_ADDR_NTOP(&Bcast_addrs[i]), (int) Bcast_channel[Num_bcast_channels]); + } } #endif } Modified: trunk/docs/sample.spread.conf =================================================================== --- trunk/docs/sample.spread.conf 2017-03-01 02:00:25 UTC (rev 890) +++ trunk/docs/sample.spread.conf 2017-03-01 02:01:55 UTC (rev 891) @@ -434,4 +434,15 @@ #SegTimeout = 500 #GatherTimeout = 1250 #FormTimeout = 1250 -#LookupTimeout = 30000 \ No newline at end of file +#LookupTimeout = 30000 + +# Exclude segment addresses from computation of configuration hashes. +# Can be useful if different daemons in configuration need to have +# different segment addresses. +# +#ExcludeSegAddrsFromHash = false + +# Ignore multicast join errors for segment addresses. Can be useful +# if a configured segment address' interface is down on startup +# +#IgnoreMulticastJoinErrors = false From jschultz at spread.org Tue Feb 28 21:05:32 2017 From: jschultz at spread.org (jschultz at spread.org) Date: Wed, 01 Mar 2017 02:05:32 -0000 Subject: [Spread-cvs] commit: r892 - in tags/ALPHA1_5_0_1: daemon docs Message-ID: Author: jschultz Date: 2017-02-28 21:05:31 -0500 (Tue, 28 Feb 2017) New Revision: 892 Modified: tags/ALPHA1_5_0_1/daemon/config_gram.l tags/ALPHA1_5_0_1/daemon/config_parse.y tags/ALPHA1_5_0_1/daemon/configuration.c tags/ALPHA1_5_0_1/daemon/configuration.h tags/ALPHA1_5_0_1/daemon/network.c tags/ALPHA1_5_0_1/docs/sample.spread.conf Log: Merging changes to trunk into tag because I did my commits in the reverse order like a dumb dumb. svn merge -r889:891 svn+ssh://svn.spread.org/spread/trunk svn+ssh://svn.spread.org/spread/tags/ALPHA1_5_0_1 Modified: tags/ALPHA1_5_0_1/daemon/config_gram.l =================================================================== --- tags/ALPHA1_5_0_1/daemon/config_gram.l 2017-03-01 02:01:55 UTC (rev 891) +++ tags/ALPHA1_5_0_1/daemon/config_gram.l 2017-03-01 02:05:31 UTC (rev 892) @@ -225,6 +225,8 @@ LookupTimeout { return LOOKUPTIMEOUT; } VirtualID { return VIRTUALID; } WideAreaNetwork { return WIDEAREANETWORK; } +ExcludeSegAddrsFromHash { return EXCLUDESEGADDRSFROMHASH; } +IgnoreMulticastJoinErrors { return IGNOREMULTICASTJOINERRORS; } {true}|{yes} { yylval.boolean = TRUE; return SP_BOOL; } {false}|{no} { yylval.boolean = FALSE; return SP_BOOL; } {on} { yylval.number = 1; return SP_TRIVAL; } Modified: tags/ALPHA1_5_0_1/daemon/config_parse.y =================================================================== --- tags/ALPHA1_5_0_1/daemon/config_parse.y 2017-03-01 02:01:55 UTC (rev 891) +++ tags/ALPHA1_5_0_1/daemon/config_parse.y 2017-03-01 02:05:31 UTC (rev 892) @@ -263,8 +263,9 @@ c += snprintf(c, SPCLAMP(c, e), "Segment: port = %u;", (unsigned) spu_addr_ip_get_port(&seg->seg_addrs[0])); - for (i = 0; i < seg->num_seg_addrs; ++i) - c += snprintf(c, SPCLAMP(c, e), " [%s]", SPU_ADDR_NTOP_CANON(&seg->seg_addrs[i])); + if (!Conf_get_exclude_seg_addrs_from_hash()) + for (i = 0; i < seg->num_seg_addrs; ++i) + c += snprintf(c, SPCLAMP(c, e), " [%s]", SPU_ADDR_NTOP_CANON(&seg->seg_addrs[i])); c += snprintf(c, SPCLAMP(c, e), "\n"); @@ -315,6 +316,7 @@ %token DANGEROUSMONITOR SOCKETPORTREUSE RUNTIMEDIR SPUSER SPGROUP ALLOWEDAUTHMETHODS REQUIREDAUTHMETHODS ACCESSCONTROLPOLICY %token MAXSESSIONMESSAGES ACTIVEIPVERSION %token WINDOW PERSONALWINDOW ACCELERATEDRING ACCELERATEDWINDOW +%token EXCLUDESEGADDRSFROMHASH IGNOREMULTICASTJOINERRORS %token TOKENTIMEOUT HURRYTIMEOUT ALIVETIMEOUT JOINTIMEOUT REPTIMEOUT SEGTIMEOUT GATHERTIMEOUT FORMTIMEOUT LOOKUPTIMEOUT %token SP_BOOL SP_TRIVAL %token IMONITOR ICLIENT IDAEMON @@ -323,6 +325,8 @@ %% Config : ConfigStructs { + int i; + if (segments == 0) yyerror("No segments specified!"); @@ -338,8 +342,11 @@ Config->num_segments = segments; Config->num_total_procs = num_procs; - /* add Spread daemon version number and algorithm to hash string and calculate hash */ - + /* calculate configuration hash */ + + for (i = 0; i < Config->num_segments; ++i) + ConfStringLen += convert_segment_to_string(&ConfStringRep[ConfStringLen], MAX_CONF_STRING - ConfStringLen, &Config->segments[i]); + ConfStringLen += convert_version_to_string(&ConfStringRep[ConfStringLen], MAX_CONF_STRING - ConfStringLen); Config->hash_code = stdhcode_oaat(ConfStringRep, ConfStringLen + 1); @@ -629,7 +636,14 @@ Conf_set_wide_area_network_flag(TRUE); Conf_set_wide_area_network($3.boolean); } - + | EXCLUDESEGADDRSFROMHASH EQUALS SP_BOOL + { + Conf_set_exclude_seg_addrs_from_hash($3.boolean); + } + | IGNOREMULTICASTJOINERRORS EQUALS SP_BOOL + { + Conf_set_ignore_multicast_join_errors($3.boolean); + } SegmentStruct : SEGMENT SegmentAddress SegmentAddresses_opt OPENBRACE Segmentparams CLOSEBRACE { @@ -696,8 +710,6 @@ line_num, yytext, Config->allprocs[i].name, SPU_ADDR_NTOP(&Config->allprocs[i].proc_addr), j, Config->allprocs[j].name); } - ConfStringLen += convert_segment_to_string(&ConfStringRep[ConfStringLen], MAX_CONF_STRING - ConfStringLen, &Config->segments[segments]); - ++segments; segment_procs = 0; segment_addrs = 0; Modified: tags/ALPHA1_5_0_1/daemon/configuration.c =================================================================== --- tags/ALPHA1_5_0_1/daemon/configuration.c 2017-03-01 02:01:55 UTC (rev 891) +++ tags/ALPHA1_5_0_1/daemon/configuration.c 2017-03-01 02:05:31 UTC (rev 892) @@ -121,6 +121,9 @@ static bool WideAreaNetworkFlag = FALSE; static bool WideAreaNetwork = FALSE; +static bool ExcludeSegAddrsFromHash = FALSE; +static bool IgnoreMulticastJoinErrors = FALSE; + static bool Conf_Reload_State = FALSE; static bool Conf_Reload_Singleton_State = FALSE; static configuration *Config_Previous; @@ -1163,3 +1166,24 @@ { return WideAreaNetwork; } + +void Conf_set_exclude_seg_addrs_from_hash(bool exclude) +{ + ExcludeSegAddrsFromHash = exclude; +} + +bool Conf_get_exclude_seg_addrs_from_hash(void) +{ + return ExcludeSegAddrsFromHash; +} + +void Conf_set_ignore_multicast_join_errors(bool ignore) +{ + IgnoreMulticastJoinErrors = ignore; +} + +bool Conf_get_ignore_multicast_join_errors(void) +{ + return IgnoreMulticastJoinErrors; +} + Modified: tags/ALPHA1_5_0_1/daemon/configuration.h =================================================================== --- tags/ALPHA1_5_0_1/daemon/configuration.h 2017-03-01 02:01:55 UTC (rev 891) +++ tags/ALPHA1_5_0_1/daemon/configuration.h 2017-03-01 02:05:31 UTC (rev 892) @@ -189,5 +189,9 @@ bool Conf_get_wide_area_network_flag(void); void Conf_set_wide_area_network(bool network_is_wan); bool Conf_get_wide_area_network(void); +void Conf_set_exclude_seg_addrs_from_hash(bool exclude); +bool Conf_get_exclude_seg_addrs_from_hash(void); +void Conf_set_ignore_multicast_join_errors(bool ignore); +bool Conf_get_ignore_multicast_join_errors(void); #endif /* INC_CONFIGURATION */ Modified: tags/ALPHA1_5_0_1/daemon/network.c =================================================================== --- tags/ALPHA1_5_0_1/daemon/network.c 2017-03-01 02:01:55 UTC (rev 891) +++ tags/ALPHA1_5_0_1/daemon/network.c 2017-03-01 02:05:31 UTC (rev 892) @@ -204,11 +204,24 @@ for (i = 0; i < Bcast_addrs_num; ++i) if (spu_addr_ip_is_multicast(&Bcast_addrs[i])) { + int log_lvl = (Conf_get_ignore_multicast_join_errors() ? SPLOG_ERROR : SPLOG_FATAL); + if ((ret = DL_join_multicast_gen(Bcast_channel[Num_bcast_channels], &Bcast_addrs[i], &My.proc_addr))) - Alarmp(SPLOG_FATAL, NETWORK, "Net_init: implicit: error joining multicast group %s on channel %d: %d %s\n", + { + Alarmp(log_lvl, NETWORK, "Net_init: implicit: error joining multicast group %s on channel %d: %d %s; Won't send/recv to/from this segment address!\n", SPU_ADDR_NTOP(&Bcast_addrs[i]), (int) Bcast_channel[Num_bcast_channels], sock_errno, sock_strerror(sock_errno)); - Alarmp(SPLOG_INFO, NETWORK, "Net_init: implicit: joined multicast group %s on channel %d\n", SPU_ADDR_NTOP(&Bcast_addrs[i]), (int) Bcast_channel[Num_bcast_channels]); + /* move last bcast address into this spot and loop again */ + + --Bcast_addrs_num; + Bcast_addrs[i] = Bcast_addrs[Bcast_addrs_num]; + --i; /* NOTE: counteract loop counter increment */ + + if (Bcast_needed && Bcast_addrs_num == 0) + Alarmp(SPLOG_FATAL, NETWORK, "Net_init: implicit: no configured segment addresses worked in a non-singelton segment. Need at least one to work!\n"); + } + else + Alarmp(SPLOG_INFO, NETWORK, "Net_init: implicit: joined multicast group %s on channel %d\n", SPU_ADDR_NTOP(&Bcast_addrs[i]), (int) Bcast_channel[Num_bcast_channels]); } ++Num_bcast_channels; @@ -263,11 +276,25 @@ for (j = 0; j < Bcast_addrs_num; ++j) if (spu_addr_ip_is_multicast(&Bcast_addrs[j])) { + int log_lvl = (Conf_get_ignore_multicast_join_errors() ? SPLOG_ERROR : SPLOG_FATAL); + if ((ret = DL_join_multicast_gen(Bcast_channel[Num_bcast_channels], &Bcast_addrs[j], &My.proc_addr))) - Alarmp(SPLOG_FATAL, NETWORK, "Net_init: explicit: error joining multicast group %s on channel %d: %d %s\n", + { + Alarmp(log_lvl, NETWORK, "Net_init: explicit: error joining multicast group %s on channel %d: %d %s; Won't send/recv to/from this segment address!\n", SPU_ADDR_NTOP(&Bcast_addrs[j]), (int) Bcast_channel[Num_bcast_channels], sock_errno, sock_strerror(sock_errno)); + + /* move last bcast address into this spot and loop again */ - Alarmp(SPLOG_INFO, NETWORK, "Net_init: explicit: joined multicast group %s on channel %d\n", SPU_ADDR_NTOP(&Bcast_addrs[j]), (int) Bcast_channel[Num_bcast_channels]); + --Bcast_addrs_num; + Bcast_addrs[j] = Bcast_addrs[Bcast_addrs_num]; + bcast_bound[j] = bcast_bound[Bcast_addrs_num]; + --j; /* NOTE: counteract loop counter increment */ + + if (Bcast_needed && Bcast_addrs_num == 0) + Alarmp(SPLOG_FATAL, NETWORK, "Net_init: explicit: no configured segment addresses worked in a non-singelton segment. Need at least one to work!\n"); + } + else + Alarmp(SPLOG_INFO, NETWORK, "Net_init: explicit: joined multicast group %s on channel %d\n", SPU_ADDR_NTOP(&Bcast_addrs[j]), (int) Bcast_channel[Num_bcast_channels]); } ++Num_bcast_channels; @@ -292,29 +319,44 @@ #ifndef ARCH_PC_WIN95 /* NOTE: for backwards compatability with old configurations we don't do this for singleton segments */ + /* TODO: figure out a better way because not setting up this * socket here means that if a singleton segment is reconfigured * to have multiple daemons then this daemon needs to reboot */ - for (i = 0; Bcast_needed && i < Bcast_addrs_num; ++i) + for (i = 0; Bcast_needed && i < Bcast_addrs_num; ++i, ++Num_bcast_channels) if (!bcast_bound[i]) /* didn't already explicity or implicitly bind to Bcast_addrs[i] above */ { if_addr = Bcast_addrs[i]; - Alarmp(SPLOG_INFO, NETWORK, "Net_init: explicit: binding an extra recv bcast channel to [%s]:%u\n", SPU_ADDR_NTOP(&if_addr), (unsigned) spu_addr_ip_get_port(&if_addr)); + Alarmp(SPLOG_INFO, NETWORK, "Net_init: explicit: extras: binding a recv bcast channel to [%s]:%u\n", SPU_ADDR_NTOP(&if_addr), (unsigned) spu_addr_ip_get_port(&if_addr)); Bcast_channel[Num_bcast_channels] = DL_init_channel_gen(RECV_CHANNEL | REUSE_ADDR, NULL, &if_addr); - for (j = 0; j < Bcast_addrs_num; ++j) - if (spu_addr_ip_is_multicast(&Bcast_addrs[j])) + if (spu_addr_ip_is_multicast(&Bcast_addrs[i])) + { + int log_lvl = (Conf_get_ignore_multicast_join_errors() ? SPLOG_ERROR : SPLOG_FATAL); + + if ((ret = DL_join_multicast_gen(Bcast_channel[Num_bcast_channels], &Bcast_addrs[i], &My.proc_addr))) { - if ((ret = DL_join_multicast_gen(Bcast_channel[Num_bcast_channels], &Bcast_addrs[j], &My.proc_addr))) - Alarmp(SPLOG_FATAL, NETWORK, "Net_init: explicit: error joining multicast group %s on channel %d: %d %s\n", - SPU_ADDR_NTOP(&Bcast_addrs[j]), (int) Bcast_channel[Num_bcast_channels], sock_errno, sock_strerror(sock_errno)); + Alarmp(log_lvl, NETWORK, "Net_init: explicit: extras: error joining multicast group %s on channel %d: %d %s\n", + SPU_ADDR_NTOP(&Bcast_addrs[i]), (int) Bcast_channel[Num_bcast_channels], sock_errno, sock_strerror(sock_errno)); + + /* move last bcast address into this spot and loop again */ + + --Bcast_addrs_num; + Bcast_addrs[i] = Bcast_addrs[Bcast_addrs_num]; + bcast_bound[i] = bcast_bound[Bcast_addrs_num]; + --i; /* NOTE: counteract loop counter increment */ - Alarmp(SPLOG_INFO, NETWORK, "Net_init: explicit: joined multicast group %s on channel %d\n", SPU_ADDR_NTOP(&Bcast_addrs[j]), (int) Bcast_channel[Num_bcast_channels]); + if (Bcast_addrs_num == 0) + Alarmp(SPLOG_FATAL, NETWORK, "Net_init: explicit: extras: no configured segment addresses worked in a non-singelton segment. Need at least one to work!\n"); + + DL_close_channel(Bcast_channel[Num_bcast_channels]); + --Num_bcast_channels; /* NOTE: counteract loop increment */ } - - ++Num_bcast_channels; + else + Alarmp(SPLOG_INFO, NETWORK, "Net_init: explicit: extras: joined multicast group %s on channel %d\n", SPU_ADDR_NTOP(&Bcast_addrs[i]), (int) Bcast_channel[Num_bcast_channels]); + } } #endif } Modified: tags/ALPHA1_5_0_1/docs/sample.spread.conf =================================================================== --- tags/ALPHA1_5_0_1/docs/sample.spread.conf 2017-03-01 02:01:55 UTC (rev 891) +++ tags/ALPHA1_5_0_1/docs/sample.spread.conf 2017-03-01 02:05:31 UTC (rev 892) @@ -434,4 +434,15 @@ #SegTimeout = 500 #GatherTimeout = 1250 #FormTimeout = 1250 -#LookupTimeout = 30000 \ No newline at end of file +#LookupTimeout = 30000 + +# Exclude segment addresses from computation of configuration hashes. +# Can be useful if different daemons in configuration need to have +# different segment addresses. +# +#ExcludeSegAddrsFromHash = false + +# Ignore multicast join errors for segment addresses. Can be useful +# if a configured segment address' interface is down on startup +# +#IgnoreMulticastJoinErrors = false