Ok, Reviewed.
-JB-
On 09/10/2014 05:36 AM, Yasumasa Suenaga wrote:
Hi Dmitry,
Okay, I've uploaded new webrev for JDK-8057556:
http://cr.openjdk.java.net/~ysuenaga/JDK-8057556/webrev.2/
This change fixes a comment from Jarosalv as below:
L103 Please, move "else" to the previous line
Could you review it again?
Thanks,
Yasumasa
(2014/09/10 6:40), Dmitry Samersoff wrote:
Yasumasa,
To allow multiple application to use the same *multicast* address:port
you probably just need to move
channel.setOption(StandardSocketOptions.SO_REUSEADDR, true);
before bind.
As for bind call lets leave this question out of scope of these two
fixes. Different OS'es behave differently and I need to check it before
we can go further. I'll come back later and file a separate CR if
necessary.
-Dmitry
On 2014-09-09 07:45, Yasumasa Suenaga wrote:
Bind call is required to listen on particular address. So please, keep
it.
I think JdpBroadcaster need not to call bind().
bind() binds address to application, so another application on same host
cannot use JDP.
I've changed JdpBroadcaster as below:
-----------
diff -r 68a6bb51cb26
src/java.management/share/classes/sun/management/jdp/JdpBroadcaster.java
---
a/src/java.management/share/classes/sun/management/jdp/JdpBroadcaster.java
Mon Sep 01 13:33:28 2014 +0200
+++
b/src/java.management/share/classes/sun/management/jdp/JdpBroadcaster.java
Tue Sep 09 12:27:33 2014 +0900
@@ -79,11 +79,7 @@
if (srcAddress != null) {
// User requests particular interface to bind to
NetworkInterface interf =
NetworkInterface.getByInetAddress(srcAddress);
- try {
- channel.bind(new InetSocketAddress(srcAddress, 0));
- } catch (UnsupportedAddressTypeException ex) {
- throw new JdpException("Unable to bind to source
address");
- }
+ channel.setOption(StandardSocketOptions.SO_REUSEADDR,
true);
channel.setOption(StandardSocketOptions.IP_MULTICAST_IF,
interf);
}
}
-----------
I ran two JVMs as below:
-----------
java -Dcom.sun.management.jmxremote.port=<port>
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.autodiscovery=true
-Dcom.sun.management.jdp.source_addr=<IP> <Long sleep application>
-----------
Both JVM instances could send JDP packet.
I checked it with tcpdump and my JDP receiver application.
If you keep bind() call, JDP broadcaster only exists one instance
on same host.
I think JDP should be used by multiple JVM instance on same host.
Thanks,
Yasumasa
(2014/09/09 0:48), Dmitry Samersoff wrote:
Jaroslav,
L96-100 Do we still need these lines? Isn't
`channel.setOption(StandardSocketOptions.IP_MULTICAST_IF, interf);`
enough to listen on the interface?
Bind call is required to listen on particular address. So please, keep
it.
-Dmitry
On 2014-09-08 14:12, Jaroslav Bachorik wrote:
Hi Yasamusa,
On 09/05/2014 12:28 PM, Yasumasa Suenaga wrote:
Hi Peter,
I fixed it and created new webrev.
http://cr.openjdk.java.net/~ysuenaga/JDK-8057556/webrev.1/
Could you review it again?
Just a few nits ...
L103 Please, move "else" to the previous line
L96-100 Do we still need these lines? Isn't
`channel.setOption(StandardSocketOptions.IP_MULTICAST_IF, interf);`
enough to listen on the interface?
-JB-
Thanks,
Yasumasa
(2014/09/05 17:20), Peter Allwin wrote:
Looks like only the first Interface will be considered if no
srcAddress is provided (succeeded will be false and we will throw to
exit the while loop). Is this intended?
Thanks!
/peter
On 4 sep 2014, at 17:59, Yasumasa Suenaga <yasue...@gmail.com>
wrote:
Hi all,
Thank you so much, Dmitry!
I've created webrev for it.
http://cr.openjdk.java.net/~ysuenaga/JDK-8057556/webrev.0/
Please review.
Thanks,
Yasumasa
(2014/09/04 21:26), Dmitry Samersoff wrote:
Yasumasa,
The CR number is JDK-8057556
I'll care about it's integration.
-Dmitry
On 2014-09-02 18:52, Yasumasa Suenaga wrote:
Hi all,
I'm trying to use JDP on my Fedora20 machine.
My machine has two NICs and only one NIC is up.
I passed system properties as below, however JDP broadcaster
thread was not started:
-Dcom.sun.management.jmxremote.port=7091
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.autodiscovery=true
-Dcom.sun.management.jdp.name=TEST
I checked exceptions with jdb, SocketException was occurred in
JDPControllerRunner#run(), and it was caused by another NIC
is down.
Currently, DiagramChannel which is used in JDPBroadcaster
tries to send JDP packet through all "UP" NICs.
However, NIC which is controlled by NetworkManager seems to
be still "UP" when ifdown command is executed.
(It seems to be removed IP address from NIC only.)
This problem may be Fedora, however I think it should be
improved in JDK.
I've created a patch as below, and it works fine in my
environment.
(jdk9/dev/jdk)
If this patch may be accepted, I will file this to JBS.
--------------------
diff -r 68a6bb51cb26
src/java.management/share/classes/sun/management/jdp/JdpBroadcaster.java
---
a/src/java.management/share/classes/sun/management/jdp/JdpBroadcaster.java
Mon Sep 01 13:33:28 2014 +0200
+++что случилось с go contacts
b/src/java.management/share/classes/sun/management/jdp/JdpBroadcaster.java
Tue Sep 02 23:25:50 2014 +0900
@@ -35,6 +35,7 @@
import java.nio.ByteBuffer;
import java.nio.channels.DatagramChannel;
import java.nio.channels.UnsupportedAddressTypeException;
+import java.util.Enumeration;
/**
* JdpBroadcaster is responsible for sending pre-built JDP
packet
across a Net
@@ -79,6 +80,15 @@
if (srcAddress != null) {
// User requests particular interface to bind to
NetworkInterface interf =
NetworkInterface.getByInetAddress(srcAddress);
+
+ if (interf == null) {
+ throw new JdpException("Unable to get network
interface for " + srcAddress.toString());
+ }
+
+ if (!interf.isUp() || !interf.supportsMulticast()) {
+ throw new JdpException(interf.getName() + " does
not support multicast.");
+ }
+
try {
channel.bind(new
InetSocketAddress(srcAddress, 0));
} catch (UnsupportedAddressTypeException ex) {
@@ -86,6 +96,23 @@
}
channel.setOption(StandardSocketOptions.IP_MULTICAST_IF, interf);
}
+ else {
+ Enumeration<NetworkInterface> nics =
NetworkInterface.getNetworkInterfaces();
+ while (nics.hasMoreElements()) {
+ NetworkInterface nic = nics.nextElement();
+
+ if (nic.isUp() && nic.supportsMulticast()) {
+ try {
+
channel.setOption(StandardSocketOptions.IP_MULTICAST_IF, nic);
+ } catch (IOException ex) {
+ System.err.println("WARNING: JDP
broadcaster cannot use " + nic.getName() + ": " +
ex.getMessage());
+ }
+ }
+
+ }
+
+ }
+
}
/**
--------------------
Thanks,
Yasumasa