[jboss-jira] [JBoss JIRA] Updated: (JGRP-1369) MuxRpcDispatcher may encapsulate infinitely RequestOption's filter with NoMuxHandlerRspFilter

Benoit Leblanc (JIRA) jira-events at lists.jboss.org
Tue Sep 27 05:56:26 EDT 2011


     [ https://issues.jboss.org/browse/JGRP-1369?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Benoit Leblanc updated JGRP-1369:
---------------------------------

        Description: 
MuxRpcDispatcher alters RequestOption's filter by encapsulating it with a NoMuxHandlerRspFilter. Passing the same instance of RequestOptions to rpc calls leads to :

java.lang.StackOverflowError
    at org.jgroups.blocks.mux.NoMuxHandlerRspFilter.isAcceptable(NoMuxHandlerRspFilter.java:24)
    at org.jgroups.blocks.mux.NoMuxHandlerRspFilter.isAcceptable(NoMuxHandlerRspFilter.java:24)
    .....
    .....

Solutions :
1/ "Clone" RequestOption at each call like fix used in https://issues.jboss.org/browse/JGRP-1271. The drawback with this solution, is the performance concern : useless object creation if a RequestOption is reused.

2/ Don't encapsulate RequestOption if a NoMuxHandlerRspFilter is already setted. Modification concerns two classes :
* NoMuxHandlerRspFilter
private NoMuxHandlerRspFilter(RspFilter filter) {
        this.filter = filter;
    }
  
    public static RspFilter createInstance(RspFilter filter) {
        if (filter instanceof NoMuxHandlerRspFilter) {
            return filter;  
        }
        return new NoMuxHandlerRspFilter(filter) ;
    }

* MuxRpcDispatcher
protected GroupRequest cast(Collection<Address> dests, Message msg, RequestOptions options, boolean blockForResults) {
        RspFilter filter = options.getRspFilter();
        return super.cast(dests, msg, options.setRspFilter(NoMuxHandlerRspFilter.createInstance(filter)), blockForResults);
    }

  was:
MuxRpcDispatcher alters RequestOption's filter by encapsulating it with a NoMuxHandlerRspFilter. Passing the same instance of RequestOptions to rpc calls leads to :

java.lang.StackOverflowError
    at org.jgroups.blocks.mux.NoMuxHandlerRspFilter.isAcceptable(NoMuxHandlerRspFilter.java:24)
    at org.jgroups.blocks.mux.NoMuxHandlerRspFilter.isAcceptable(NoMuxHandlerRspFilter.java:24)
    .....
    .....

Solutions :
1/ "Clone" RequestOption at each call like fix used in https://issues.jboss.org/browse/JGRP-1271. The drawback with this solution, is the performance concern : useless object creation if a RequestOption is reused.

2/ Don't encapsulate RequestOption is a NoMuxHandlerRspFilter is already setted. Modification concerns two classes :
* NoMuxHandlerRspFilter
private NoMuxHandlerRspFilter(RspFilter filter) {
        this.filter = filter;
    }
  
    public static RspFilter createInstance(RspFilter filter) {
        if (filter instanceof NoMuxHandlerRspFilter) {
            return filter;  
        }
        return new NoMuxHandlerRspFilter(filter) ;
    }

* MuxRpcDispatcher
protected GroupRequest cast(Collection<Address> dests, Message msg, RequestOptions options, boolean blockForResults) {
        RspFilter filter = options.getRspFilter();
        return super.cast(dests, msg, options.setRspFilter(NoMuxHandlerRspFilter.createInstance(filter)), blockForResults);
    }

    Forum Reference: http://sourceforge.net/mailarchive/forum.php?thread_name=4E80A39A.2090908%40yahoo.com&forum_name=javagroups-users  (was: http://sourceforge.net/mailarchive/forum.php?thread_name=4E80A39A.2090908%40yahoo.com&forum_name=javagroups-users)


> MuxRpcDispatcher may encapsulate infinitely RequestOption's filter with NoMuxHandlerRspFilter
> ---------------------------------------------------------------------------------------------
>
>                 Key: JGRP-1369
>                 URL: https://issues.jboss.org/browse/JGRP-1369
>             Project: JGroups
>          Issue Type: Bug
>    Affects Versions: 2.12.1
>            Reporter: Benoit Leblanc
>            Assignee: Bela Ban
>         Attachments: RequestOptTest.java
>
>
> MuxRpcDispatcher alters RequestOption's filter by encapsulating it with a NoMuxHandlerRspFilter. Passing the same instance of RequestOptions to rpc calls leads to :
> java.lang.StackOverflowError
>     at org.jgroups.blocks.mux.NoMuxHandlerRspFilter.isAcceptable(NoMuxHandlerRspFilter.java:24)
>     at org.jgroups.blocks.mux.NoMuxHandlerRspFilter.isAcceptable(NoMuxHandlerRspFilter.java:24)
>     .....
>     .....
> Solutions :
> 1/ "Clone" RequestOption at each call like fix used in https://issues.jboss.org/browse/JGRP-1271. The drawback with this solution, is the performance concern : useless object creation if a RequestOption is reused.
> 2/ Don't encapsulate RequestOption if a NoMuxHandlerRspFilter is already setted. Modification concerns two classes :
> * NoMuxHandlerRspFilter
> private NoMuxHandlerRspFilter(RspFilter filter) {
>         this.filter = filter;
>     }
>   
>     public static RspFilter createInstance(RspFilter filter) {
>         if (filter instanceof NoMuxHandlerRspFilter) {
>             return filter;  
>         }
>         return new NoMuxHandlerRspFilter(filter) ;
>     }
> * MuxRpcDispatcher
> protected GroupRequest cast(Collection<Address> dests, Message msg, RequestOptions options, boolean blockForResults) {
>         RspFilter filter = options.getRspFilter();
>         return super.cast(dests, msg, options.setRspFilter(NoMuxHandlerRspFilter.createInstance(filter)), blockForResults);
>     }

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        


More information about the jboss-jira mailing list