CALL FOR: Multicast/Unicast
Called by: Nico Clasens Total tally on this call : +2 (+3 for 1.8)
START OF VOTING: 2004-09-22 23:00 END OF CALL: 2004-09-27 23:00
YEA (4) : Michiel Meeuwissen, Andre van Toly, Pierre van Rooden, Kees Jongenburger
YEA, 1.8 only (1) : Jaco de Groot, Gerard van Enk
ABSTAIN (0) :
NAY (2) : Rob van Maris, Rob Vermeulen, Rico Jansen
VETO (0) :
Packaging (name tbd): Called by: Pierre van Rooden Total tally on this call : +6
YEA (4) : Rico Jansen, Michiel Meeuwissen, Andre van Toly, Nico Clasens
YEA, 1.8 only (2) : Rob van Maris, Gerard van Enk
ABSTAIN (2) : Jaco de Groot, Rob Vermeulen, Kees Jongenburger
NAY (1) :
VETO (0) :
No votes, assumed abstained (16): Eduard Witteveen, Marcel Maatkamp, Johannes Verelst, Daniel Ockeloen, Mark Huijser, Ernst Bunders
Result:
The vote did not pass. While there is small minority for adding the code to 1.8 CVS HEAD, this is not without a number of demands that seem to warrant a project, or at least for teh various parties to agree on an implementation.
There is sufficient support for moving the multicast code to another package, but the definite name of that package (and any class names that may need changing) is not decided yet.
Sugegstiosn are org.mmbase.notification or org.mmbase.event.
The hack cannot be added at this moment. It can be re-submitted after suggested changes, or made into a project.
Nico Klasens wrote:
Hello Developers,
The past days I tried to get out of a political-loaded discussion with the network and firewall guys here at Vodafone. Our current production setup has an editserver and 2 frontend servers which are on different lans. The shared storage multicast implementation will not work so I had to make a unicast (direct connection) implementation. I moved the confusing multicast code around and came to the conclusion that it wouldn't be hard at all to rewrite it to a unicast implementation. I have now a multicast and unicast implementation which share most of the code. I removed the thread spawning in the implementations. The multicast implementation already used 2 queues for sending and receiving. The receiving queue was read by a thread which spawned for every message a new thread. I don't think that processing the messages in a serial way will affect much performance. The unicast implementation uses the mmservers table to lookup the active servers. It opens a connection to every server per message. This could be optimized in the future to combine the messages in the sendqueue.
Just A minute ago, I read http://www.mail-archive.com/[EMAIL PROTECTED]/msg04161.html and I think most of the stuff is covered in this implementation.
Changed source files
Moved to org.mmbase,module.core.change (new package, open for discussion) org.mmbase,module.core MMBaseChangeDummy MMBaseMultiCast MultiCastChangesReceiver MultiCastChangesSender MMBaseWaitNode (renamed from MMBaseMultiCastWaitNode) Deleted org.mmbase,module.core MMBaseMultiCastProbe Modified org.mmbase,module.builders MMServers org.mmbase,module.core MMBase MMBaseChangeInterface (Had some methods which were used only locally. Previous mails on this subject suggested to remove them.) config/modules mmbaseroot.xml (moved multicast settings to utils xml and added a sharedstorage property for an implementation class) New org.mmbase,module.core MMBaseSharedStorage MMBaseUniCast UniCastChangesReceiver UniCastChangesSender config/util multicast.xml unicast.xml
I made the changes on the 1.7 branch, because that is now running here in production. The changes can easily be applied to the HEAD.
I would like to add the changes to 1.7 and head. The code of the multicast is for 95% the same (code only moved around for readability and easy extension).
Committors: please choose one of the options below.
START OF CALL: 2004-09-22 END OF CALL: 2004-09-27
[_] +1 (YES) [_] +0 (ABSTAIN ) [_] -1 (NO), because : [_] VETO, because:
Nico Klasens
------------------------------------------------------------------------
<?xml version="1.0" encoding="iso-8859-1"?> <!DOCTYPE module PUBLIC "//MMBase - module//" "http://www.mmbase.org/dtd/module_1_0.dtd"> <!-- The MMBaseRoot module is used to configure the basic properties of mmbase. --> <module maintainer="mmbase.org" version="0">
<!-- <status> This module is always active. MMBase will not run without it. --> <status>active</status>
<classfile>org.mmbase.module.core.MMBase</classfile>
<!-- <properties> You can define properties to be used by the classfile. The properties described here are mandatory. --> <properties>
<!-- name="machinename" defines the name that is used in the mmbase cluster, it is used for the mmservers objects. Make sure that this is different for each node in your cluster. This is not the machines dns name (as defined by host as name or ip number). --> <property name="machinename">MMBaseserver</property>
<!-- name="storagemanagerfactory" defines what factory to use for accessing the storage devices. Currently. only DatabaseStorageManagerFactory is implemented, which gives access to various database devices using JDBC. Comment this property to use the old database support classes (which are deprecated). --> <property name="storagemanagerfactory">org.mmbase.storage.implementation.database.DatabaseStorageManagerFactory</property>
<!-- name="database" defines which database we are using as defined in your config databases directory (default : org/mmbase/config/default/databases/). It is defined by a xml file for example sql92.xml or mysql.xml. This should be set in combo with the jdbc.xml files (where you define the database server and how to connect to it.
sql92 for default SQL92 database (normally not used) mysql for MySQL (www.mysql.com) informix for Informix Universal Server (www.informix.com)
** remark : more database are supported or are easy to support, check www.mmbase.org's howto's on this we will complete this list as soon as possble **
MyQSL: mysql PostgrSQL: postgresql71 HyperSonic: hypersonic --> <!-- TODO: Why is this setting not in the jdbc.xml? --> <!-- property name="database">mysql</property -->
<!-- name="sharedstorage" the MMBaseChangeInterface which communicates with other MMBase instance which use the same storage --> <property name="sharedstorage">org.mmbase.module.core.change.MMBaseMultiCast</property>
<!-- name="multicastttl" sets the Time To Live for a datapackage send by a Multicast. Time to live determines the number of hops a package can make. The default, 1, is generally enough, but higher values may be needed on some networks. --> <property name="multicastttl">1</property>
<!-- name="host" the host or ip number of the machine this mmbase node is running on. Its important that this name is set correctly because its used for communication between mmbase nodes and external devices (xml or jini based). --> <property name="host">127.0.0.1</property>
<!-- name="authtype" defines what authorisation type is used, This is a plugin system at the moment we only support 2 types :
none (only perform name/password checks based on accounts.properties)
basic (use the default authorisation system, based on groups and relations see the install/example docs how to enable this DON'T set it before creating the needed tables/objects as defined in these docs). --> <property name="authtype">none</property>
<!-- name="dtdbase" defines the homebase for the DTD's used by the objects (urls, cdtracks, images etc etc). Normally this is set to www.mmbase.org but you can aim it to your own system if you defined extra objects yourself. Its not used at the moment for anything vital. --> <property name="dtdbase">http://www.mmbase.org/dtd/</property>
<!-- name="basename" You can have multiple mmbase systems inside your database if you want this can be very handy when testing of for running multiple setups inside one database its added as a preset to all your table names like : BASENAME=test will result in table names like test_object and test_urls. --> <property name="basename">mm</property>
<!-- name="language" defines the language for the gui. The standard gui information for the editors can be found in /config/modules/mmlanguage.xml. The gui information of a builder is provided by the builder itself (e.g. /config/builders/urls.xml). --> <property name="language">nl</property>
<!-- name="encoding"
The encoding to be used in the database (if the database layer needs to know), and for use as default for the pages. Recommended is 'UTF-8', since this can be used for virtually every language on the world, and is a superset of ASCII.
Default though, it is ISO-8859-1, to ensure backwards
compatibility. Perhaps this will change to UTF-8 once this is
tested well.
-->
<!-- since, when not mentioned it will be ISO-8859-1, all new systems will get utf-8 -->
<property name="encoding">UTF-8</property>
<!--
name="xmlbuilderwriterdir"
If specified, MMBase will write xml configuration files to this directory when loading builders.
This can be useful if you want to convert old format builder xmls to the new format.
-->
<!-- property name="xmlbuilderwriterdir">/home/guest/schooltv/tmpbul/</property -->
</properties> </module>
------------------------------------------------------------------------
<?xml version="1.0"?>
<!DOCTYPE util PUBLIC "-//MMBase//DTD util config 1.0//EN" "http://www.mmbase.org/dtd/util_1_0.dtd">
<util>
<!--
What is Multicast?
Multicast is essentially the ability to send one IP packet to multiple receivers. Multicast is often used
for audio and video conferencing systems. You often hear about the Mbone in reference to Multicast. The Mbone
is essentially a ``virtual backbone'' which exists in the Internet itself. If you want to send and/or receive
Multicast, you need to be ``on the Mbone.''
Things to remember:
1 Multicast tunnels/configurations/infrastructure are often unstable. You may lose multicast connectivity
but still have unicast connectivity.
2 Multicast does not reduce the number of ICP replies being sent around. It does reduce the number of ICP
queries sent, but not the number of replies.
-->
<properties>
<!--
name="multicasthost" mmbase nodes in a cluster use multicast to talk to
eachother this defines what 'channel' we are talking to its now set
to the default local network so unless you know what you are doing
leave it to ALL-SYSTEMS.MCAST.NET else use a multicat IP address like this
<property name="multicasthost">224.0.0.1</property>
-->
<property name="multicasthost"></property><!-- ALL-SYSTEMS.MCAST.NET -->
<!--
name="multicastport" on what port does this multicast talking between servers
take place, This can be set to any port but check if something else on
your network is allready using multicast when you have problems.
-->
<property name="multicastport">16080</property>
<!--
name="multicastTTL" The Multicast TTL determines how ``far'' your ICP queries will go.
In the Mbone, there is a certain TTL threshold defined for each network interface or tunnel.
A multicast packet's TTL must be larger than the defined TTL for that packet to be forwarded across that link. For example, the mrouted manual page recommends:
32 for links that separate sites within an organization.
64 for links that separate communities or organizations, and are
attached to the Internet MBONE.
128 for links that separate continents on the MBONE.
A good way to determine the TTL you need is to run mtrace and look at the last line. It will
show you the minimum TTL required to reach the other host. Mtrace can be downloaded from
Xerox PARC FTP site (ftp://parcftp.xerox.com/pub/net-research/ipmulti/)
If you set you TTL too high, then your ICP messages may travel ``too far'' and will be subject
to eavesdropping by others. If you're only using multicast on your LAN, as we suggest, then your
TTL will be quite small, for example ttl=4.
-->
<property name="multicastTTL">1</property>
<!--
name="dpsize" Datapacket receive size 64*1024
-->
<property name="dpsize">65536</property>
</properties> </util>
------------------------------------------------------------------------
<?xml version="1.0"?> <!DOCTYPE util PUBLIC "-//MMBase//DTD util config 1.0//EN" "http://www.mmbase.org/dtd/util_1_0.dtd"> <util> <properties> <!-- name="unicastport" on what port does this multicast talking between nodes take place, This can be set to any port but check if something else on your network is allready using multicast when you have problems. --> <property name="unicastport">16080</property> <!-- name="unicasttimeout" the time another MMbase server has to respond. --> <property name="unicasttimeout">10000</property> </properties> </util>
-- Pierre van Rooden Mediapark, C 107 tel. +31 (0)35 6772815 "Never summon anything bigger than your head."
