On 11 August 2017 at 17:50, Galder Zamarreño <gal...@redhat.com> wrote:
>
>
>> On 11 Aug 2017, at 16:30, Sanne Grinovero <sa...@infinispan.org> wrote:
>>
>> On 11 August 2017 at 14:14, Galder Zamarreño <gal...@redhat.com> wrote:
>>> Hi,
>>>
>>> Re: https://issues.jboss.org/browse/ISPN-8186
>>>
>>> I've been looking at TRACE logs and what seems to happen is that is that 
>>> sometimes, when the client needs to create a new Socket, it sends using the 
>>> same localport as the Hot Rod server port. As a result, when the client 
>>> sends something to the server, it also receives it, hence it ends finding a 
>>> request instead of a response. Analysis of the logs linked in the JIRA can 
>>> be found in [1].
>>>
>>> What I'm not sure about is how to fix this... There are ways to potentially 
>>> pass a specific localport to a Socket [2] but this could be a bit messy: 
>>> It'd require us to generate a random local port and see if that works, 
>>> making sure that's not the server port...
>>>
>>> However, I think the real problem we're having here is the fact that both 
>>> the server and client are bound to same IP address, 127.0.0.1. A simpler 
>>> solution could be a way to get the server to be in a different IP address 
>>> to the client, but what would that be that IP address and how to make sure 
>>> it always works? Bind the server to eth0?
>>>
>>> Any other ideas?
>>
>> You could create multiple aliases for the same loopback device, and
>> assign a different IP address to each of them.
>>
>> But I fail to understand why you don't have specific ports for each
>> purpose? That's the point for using ports in the first place, no?
>
> ^ Hmmm?
>
> The servers in the test use a random port that's available. The clients 
> connect to these ports. The local ports used by the clients are random. You 
> need to use APIs such as [2] to fix them.
>
> So, what exactly are you talking about? Are you saying we should fix the 
> local client ports? As I said in the first post, we could try to find a 
> random port that's not the server one...

It should be clear that all sources of randomness are your enemy?

For obvious reasons we have to endure with reproducibility complexity
caused by using threads, timing, network packets interleaving... you
can't do much about these but you could at least try to introduce more
of it.

I would just hard code all ports in the testsuite, and test for their
availability during testsuite initialization. This would have some
other nice consequences, like improving the likelyhood to detect
leaked sockets.

You might remember that the main reason I proposed a "timer service"
years ago was to be able to mock time passage and make that all
reproducible even in the presence of GC and slow machines; eventually
you'd have been able to remove all reasons to actually run tests in
parallel as all needs for idle waiting would be controlled, so further
reducing variability.

My whole point has always been that you need to reduce randomness to
improve the testsuite reliability.

Thanks,
Sanne


>
> I must admit this scenario sounds very weird... how does Java allow you for a 
> local port to be bound to a port that's already in use by the server? It 
> doesn't make sense. I'll be trying to replicate this in a small unit test 
> next few days...
>
> Cheers,
>
>>
>> Thanks,
>> Sanne
>>
>>
>>>
>>> Cheers,
>>>
>>> [1] https://gist.github.com/galderz/b8549259ff65cb74505c9268eeec96a7
>>> [2] 
>>> http://docs.oracle.com/javase/6/docs/api/java/net/Socket.html#Socket(java.net.InetAddress,%20int,%20java.net.InetAddress,%20int)
>>> --
>>> Galder Zamarreño
>>> Infinispan, Red Hat
>>>
>>>
>>> _______________________________________________
>>> infinispan-dev mailing list
>>> infinispan-dev@lists.jboss.org
>>> https://lists.jboss.org/mailman/listinfo/infinispan-dev
>>
>> _______________________________________________
>> infinispan-dev mailing list
>> infinispan-dev@lists.jboss.org
>> https://lists.jboss.org/mailman/listinfo/infinispan-dev
>
> --
> Galder Zamarreño
> Infinispan, Red Hat
>
>
> _______________________________________________
> infinispan-dev mailing list
> infinispan-dev@lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/infinispan-dev

_______________________________________________
infinispan-dev mailing list
infinispan-dev@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/infinispan-dev

Reply via email to