[jboss-jira] [JBoss JIRA] Commented: (JGRP-616) NullPointerException in Multiplexer.java

Robert Newson (JIRA) jira-events at lists.jboss.org
Sat Nov 3 14:26:48 EDT 2007


    [ 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

        



More information about the jboss-jira mailing list