[
http://jira.jboss.com/jira/browse/JGRP-616?page=comments#action_12385903 ]
Robert Newson commented on JGRP-616:
------------------------------------
Hi.
Here are the relevant code snippets. We have an abstraction layer around jgroups to make
it pluggable, it should be pretty easy to follow, though;
We construct a channel factory like this;
final URL url = getClass().getClassLoader().getResource(
"META-INF/groups/jgroups.xml");
channelFactory = new JChannelFactory();
channelFactory.setMultiplexerConfig(url);
the jgroups.xml file is a multiplexer stack with a "udp" as detailed above.
Then I construct a wrapper (DistributedMap) around the blocks.ReplicatedHashMap as
follows;
public <K extends Serializable, V extends Serializable> DistributedMap<K, V>
createMap(
final String name, final boolean synchronous) throws GroupException {
notNull(name, "name");
try {
final Channel channel = configuredChannel(name);
final ReplicatedHashMap<K, V> map = new ReplicatedHashMap<K, V>(
channel);
map.setBlockingUpdates(synchronous);
channel.connect(name);
map.start(0);
return new ReplicatedHashMapAdapter<K, V>(map);
} catch (final Exception e) {
throw new GroupException(e);
}
}
configuredChannel() does this;
private Channel configuredChannel(final String name) throws GroupException {
final Channel channel;
try {
channel = channelFactory
.createMultiplexerChannel(stackName(), name);
} catch (final Exception e) {
throw new GroupException(e);
}
channel.setOpt(Channel.AUTO_RECONNECT, true);
channel.setOpt(Channel.AUTO_GETSTATE, true);
if (mbeanServer != null) {
try {
final String objectName = "JGroups:channel=" + name;
JmxConfigurator.registerChannel((JChannel) channel,
mbeanServer, objectName);
registeredJmxNames.add(objectName);
} catch (final Exception e) {
throw new GroupException(e);
}
}
final HashMap map = new HashMap();
final int asInt = localConfiguration.getNode().getKey().getIntValue();
final ByteArrayOutputStream bos = new ByteArrayOutputStream(8);
try {
EncodingUtils.writeVInt(bos, asInt);
} catch (final IOException e) {
assert false : "can't happen with ByteArrayOutputStream";
}
map.put("additional_data", bos.toByteArray());
channel.down(new Event(Event.CONFIG, map));
return channel;
}
This code is used as follows;
this.loadMap = groupFactory.createMap("load", false);
this.locationMap = groupFactory.createMap("loc", true);
this.spaceMap = groupFactory.createMap("space", false);
this.stateMap = groupFactory.createMap("state", true);
this.systemVolumeMap = groupFactory.createMap("sys", true);
we create lots of maps. :)
B.
NullPointerException in Multiplexer.java
----------------------------------------
Key: JGRP-616
URL:
http://jira.jboss.com/jira/browse/JGRP-616
Project: JGroups
Issue Type: Bug
Affects Versions: 2.6
Environment: Debian Etch,
Java HotSpot(TM) Server VM (build 1.6.0_01-b06, mixed mode),
Version: 2.6.0 cr-1
CVS: $Id: Version.java,v 1.58 2007/10/26 21:34:01 rachmatowicz Exp $
Reporter: Robert Newson
Assigned To: Vladimir Blagojevic
Fix For: 2.6
When starting 4 servers, which each join 8 different ReplicatedHashMaps over a
multiplexed channel, we frequently get this;
2007-11-03 09:39:48,774 ERROR [STREAMING_STATE_TRANSFER sender,udp,192.168.164.227:33709]
log.GeronimoLog (GeronimoLog.java:108) - failed returning the application state, will
return null
java.lang.IllegalArgumentException: State provider 192.168.164.227:33709 does not have
service with id space
at org.jgroups.mux.Multiplexer.handleStateRequest(Multiplexer.java:640)
at org.jgroups.mux.Multiplexer.up(Multiplexer.java:365)
at org.jgroups.JChannel.up(JChannel.java:1147)
at org.jgroups.stack.ProtocolStack.up(ProtocolStack.java:341)
at org.jgroups.protocols.pbcast.FLUSH.up(FLUSH.java:428)
at
org.jgroups.protocols.pbcast.STREAMING_STATE_TRANSFER$StateProviderHandler.process(STREAMING_STATE_TRANSFER.java:731)
at
org.jgroups.protocols.pbcast.STREAMING_STATE_TRANSFER$StateProviderThreadSpawner$1.run(STREAMING_STATE_TRANSFER.java:648)
at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
at java.lang.Thread.run(Thread.java:619)
This is using the following stacks.xml;
<protocol_stacks>
<stack name="udp">
<config>
<UDP
mcast_addr="${jgroups.udp.mcast_addr}"
mcast_port="${jgroups.udp.mcast_port}"
tos="8"
ucast_recv_buf_size="20000000"
ucast_send_buf_size="640000"
mcast_recv_buf_size="25000000"
mcast_send_buf_size="640000"
loopback="false"
discard_incompatible_packets="true"
max_bundle_size="64000"
max_bundle_timeout="30"
use_incoming_packet_handler="true"
ip_ttl="${jgroups.udp.ip_ttl:32}"
enable_bundling="true"
enable_diagnostics="false"
thread_naming_pattern="cl"
use_concurrent_stack="true"
thread_pool.enabled="true"
thread_pool.min_threads="1"
thread_pool.max_threads="25"
thread_pool.keep_alive_time="5000"
thread_pool.queue_enabled="false"
thread_pool.queue_max_size="100"
thread_pool.rejection_policy="Run"
oob_thread_pool.enabled="true"
oob_thread_pool.min_threads="1"
oob_thread_pool.max_threads="8"
oob_thread_pool.keep_alive_time="5000"
oob_thread_pool.queue_enabled="false"
oob_thread_pool.queue_max_size="100"
oob_thread_pool.rejection_policy="Run"/>
<PING timeout="${jgroups.ping.timeout:15000}"
num_initial_members="${jgroups.ping.num_initial_members:32}"/>
<MERGE2 max_interval="30000"
min_interval="10000"/>
<FD_SOCK/>
<FD timeout="10000" max_tries="5"
shun="true"/>
<VERIFY_SUSPECT timeout="1500" />
<BARRIER />
<pbcast.NAKACK
use_mcast_xmit="false" gc_lag="10"
retransmit_timeout="300,600,1200,2400,4800"
discard_delivered_msgs="true"/>
<UNICAST timeout="300,600,1200,2400,3600"/>
<pbcast.STABLE stability_delay="1000"
desired_avg_gossip="50000"
max_bytes="400000"/>
<VIEW_SYNC avg_send_interval="60000" />
<pbcast.GMS print_local_addr="false" join_timeout="10000"
join_retry_timeout="2000" shun="true"
view_bundling="true" view_ack_collection_timeout="5000"/>
<FC max_credits="20000000"
min_threshold="0.10"/>
<FRAG2 frag_size="60000" />
<pbcast.STREAMING_STATE_TRANSFER />
<pbcast.FLUSH timeout="0"/>
</config>
</stack>
</protocol_stacks>
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://jira.jboss.com/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira