summaryrefslogtreecommitdiff
path: root/java/src
diff options
context:
space:
mode:
authorDwayne Boone <dwayne@zeroc.com>2015-03-05 15:44:08 -0330
committerDwayne Boone <dwayne@zeroc.com>2015-03-05 15:44:08 -0330
commitb96b045ecc6e034307ba8065af73c252e0093bbb (patch)
treec3f22df1c67a7de3c435c4be31ef2adfb300b1e8 /java/src
parentFixed linux php build (diff)
downloadice-b96b045ecc6e034307ba8065af73c252e0093bbb.tar.bz2
ice-b96b045ecc6e034307ba8065af73c252e0093bbb.tar.xz
ice-b96b045ecc6e034307ba8065af73c252e0093bbb.zip
ICE-6082 No way to discover send/recv buffer sizes
Diffstat (limited to 'java/src')
-rw-r--r--java/src/Ice/src/main/java/Ice/ConnectionI.java31
-rw-r--r--java/src/Ice/src/main/java/IceInternal/Network.java37
-rw-r--r--java/src/Ice/src/main/java/IceInternal/StreamSocket.java5
-rw-r--r--java/src/Ice/src/main/java/IceInternal/TcpTransceiver.java8
-rw-r--r--java/src/Ice/src/main/java/IceInternal/Transceiver.java1
-rw-r--r--java/src/Ice/src/main/java/IceInternal/UdpTransceiver.java27
-rw-r--r--java/src/Ice/src/main/java/IceInternal/WSTransceiver.java8
-rw-r--r--java/src/Ice/src/main/java/IceSSL/TransceiverI.java11
8 files changed, 96 insertions, 32 deletions
diff --git a/java/src/Ice/src/main/java/Ice/ConnectionI.java b/java/src/Ice/src/main/java/Ice/ConnectionI.java
index 51835eb4bd2..bfe8715e339 100644
--- a/java/src/Ice/src/main/java/Ice/ConnectionI.java
+++ b/java/src/Ice/src/main/java/Ice/ConnectionI.java
@@ -287,7 +287,7 @@ public final class ConnectionI extends IceInternal.EventHandler
// is sill only called every (timeout / 2) period.
//
if(acm.heartbeat == ACMHeartbeat.HeartbeatAlways ||
- (acm.heartbeat != ACMHeartbeat.HeartbeatOff && _writeStream.isEmpty() &&
+ (acm.heartbeat != ACMHeartbeat.HeartbeatOff && _writeStream.isEmpty() &&
now >= (_acmLastActivity + acm.timeout / 4)))
{
if(acm.heartbeat != ACMHeartbeat.HeartbeatOnInvocation || _dispatchCount > 0)
@@ -354,11 +354,11 @@ public final class ConnectionI extends IceInternal.EventHandler
_transceiver.checkSendSize(os.getBuffer());
//
- // Notify the request that it's cancelable with this connection.
+ // Notify the request that it's cancelable with this connection.
// This will throw if the request is canceled.
//
out.cancelable(this);
-
+
int requestId = 0;
if(response)
{
@@ -638,7 +638,7 @@ public final class ConnectionI extends IceInternal.EventHandler
private Ice.AsyncResult begin_flushBatchRequestsInternal(IceInternal.CallbackBase cb)
{
- IceInternal.ConnectionFlushBatch result =
+ IceInternal.ConnectionFlushBatch result =
new IceInternal.ConnectionFlushBatch(this, _communicator, _instance, __flushBatchRequests_name, cb);
result.invoke();
return result;
@@ -647,7 +647,7 @@ public final class ConnectionI extends IceInternal.EventHandler
@Override
public void end_flushBatchRequests(AsyncResult ir)
{
- IceInternal.ConnectionFlushBatch r =
+ IceInternal.ConnectionFlushBatch r =
IceInternal.ConnectionFlushBatch.check(ir, this, __flushBatchRequests_name);
r.__wait();
}
@@ -672,7 +672,7 @@ public final class ConnectionI extends IceInternal.EventHandler
}
//
- // Notify the request that it's cancelable with this connection.
+ // Notify the request that it's cancelable with this connection.
// This will throw if the request is canceled.
//
outAsync.cancelable(this);
@@ -1626,6 +1626,17 @@ public final class ConnectionI extends IceInternal.EventHandler
}
@Override
+ public synchronized void setBufferSize(int rcvSize, int sndSize)
+ {
+ if(_state >= StateClosed)
+ {
+ throw (Ice.LocalException) _exception.fillInStackTrace();
+ }
+ _transceiver.setBufferSize(rcvSize, sndSize);
+ _info = null; // Invalidate the cached connection info
+ }
+
+ @Override
public String _toString()
{
return _desc; // No mutex lock, _desc is immutable.
@@ -1637,7 +1648,7 @@ public final class ConnectionI extends IceInternal.EventHandler
}
public ConnectionI(Communicator communicator, IceInternal.Instance instance, IceInternal.ACMMonitor monitor,
- IceInternal.Transceiver transceiver, IceInternal.Connector connector,
+ IceInternal.Transceiver transceiver, IceInternal.Connector connector,
IceInternal.EndpointI endpoint, ObjectAdapterI adapter)
{
_communicator = communicator;
@@ -1901,7 +1912,7 @@ public final class ConnectionI extends IceInternal.EventHandler
{
return;
}
-
+
//
// Don't need to close now for connections so only close the transceiver
// if the selector request it.
@@ -1979,7 +1990,7 @@ public final class ConnectionI extends IceInternal.EventHandler
_exception instanceof ForcedCloseConnectionException ||
_exception instanceof ConnectionTimeoutException ||
_exception instanceof CommunicatorDestroyedException ||
- _exception instanceof ObjectAdapterDeactivatedException ||
+ _exception instanceof ObjectAdapterDeactivatedException ||
(_exception instanceof ConnectionLostException && _state >= StateClosing)))
{
_observer.failed(_exception.ice_name());
@@ -3129,7 +3140,7 @@ public final class ConnectionI extends IceInternal.EventHandler
private int _nextRequestId;
- private java.util.Map<Integer, IceInternal.OutgoingAsync> _asyncRequests =
+ private java.util.Map<Integer, IceInternal.OutgoingAsync> _asyncRequests =
new java.util.HashMap<Integer, IceInternal.OutgoingAsync>();
private LocalException _exception;
diff --git a/java/src/Ice/src/main/java/IceInternal/Network.java b/java/src/Ice/src/main/java/IceInternal/Network.java
index 0c7a9475fc4..94ca324227a 100644
--- a/java/src/Ice/src/main/java/IceInternal/Network.java
+++ b/java/src/Ice/src/main/java/IceInternal/Network.java
@@ -1000,52 +1000,57 @@ public final class Network
dfltBufSize = 128 * 1024;
}
- System.err.println("XXX");
+ int rcvSize = instance.properties().getPropertyAsIntWithDefault("Ice.TCP.RcvSize", dfltBufSize);
+ int sndSize = instance.properties().getPropertyAsIntWithDefault("Ice.TCP.SndSize", dfltBufSize);
- int sizeRequested = instance.properties().getPropertyAsIntWithDefault("Ice.TCP.RcvSize", dfltBufSize);
- if(sizeRequested > 0)
+ setTcpBufSize(socket, rcvSize, sndSize, instance);
+ }
+
+ public static void
+ setTcpBufSize(java.nio.channels.SocketChannel socket, int rcvSize, int sndSize, ProtocolInstance instance)
+ {
+ if(rcvSize > 0)
{
//
// Try to set the buffer size. The kernel will silently adjust
// the size to an acceptable value. Then read the size back to
// get the size that was actually set.
//
- setRecvBufferSize(socket, sizeRequested);
+ setRecvBufferSize(socket, rcvSize);
int size = getRecvBufferSize(socket);
- //if(size < sizeRequested)
+ if(size < rcvSize)
{
// Warn if the size that was set is less than the requested size and
// we have not already warned.
BufSizeWarnInfo winfo = instance.getBufSizeWarn(Ice.TCPEndpointType.value);
- if(!winfo.rcvWarn || sizeRequested != winfo.rcvSize)
+ if(!winfo.rcvWarn || rcvSize != winfo.rcvSize)
{
- instance.logger().warning("TCP receive buffer size: requested size of " + sizeRequested +
+ instance.logger().warning("TCP receive buffer size: requested size of " + rcvSize +
" adjusted to " + size);
- instance.setRcvBufSizeWarn(Ice.TCPEndpointType.value, sizeRequested);
+ instance.setRcvBufSizeWarn(Ice.TCPEndpointType.value, rcvSize);
}
}
}
- sizeRequested = instance.properties().getPropertyAsIntWithDefault("Ice.TCP.SndSize", dfltBufSize);
- if(sizeRequested > 0)
+ if(sndSize > 0)
{
//
// Try to set the buffer size. The kernel will silently adjust
// the size to an acceptable value. Then read the size back to
// get the size that was actually set.
//
- setSendBufferSize(socket, sizeRequested);
+ setSendBufferSize(socket, sndSize);
int size = getSendBufferSize(socket);
- //if(size < sizeRequested)
+ if(size < sndSize)
{
// Warn if the size that was set is less than the requested size and
// we have not already warned.
BufSizeWarnInfo winfo = instance.getBufSizeWarn(Ice.TCPEndpointType.value);
- if(!winfo.sndWarn || sizeRequested != winfo.sndSize)
+ if(!winfo.sndWarn || sndSize != winfo.sndSize)
{
- instance.logger().warning("TCP send buffer size: requested size of " + sizeRequested +
+ instance.logger().warning("TCP send buffer size: requested size of " + sndSize +
" adjusted to " + size);
- instance.setSndBufSizeWarn(Ice.TCPEndpointType.value, sizeRequested);
+ instance.setSndBufSizeWarn(Ice.TCPEndpointType.value, sndSize);
}
}
}
@@ -1077,7 +1082,7 @@ public final class Network
//
setRecvBufferSize(socket, sizeRequested);
int size = getRecvBufferSize(socket);
- //if(size < sizeRequested)
+ if(size < sizeRequested)
{
// Warn if the size that was set is less than the requested size and
// we have not already warned.
diff --git a/java/src/Ice/src/main/java/IceInternal/StreamSocket.java b/java/src/Ice/src/main/java/IceInternal/StreamSocket.java
index 61b546400b0..6fce7962576 100644
--- a/java/src/Ice/src/main/java/IceInternal/StreamSocket.java
+++ b/java/src/Ice/src/main/java/IceInternal/StreamSocket.java
@@ -79,6 +79,11 @@ public class StreamSocket
}
}
+ public void setBufferSize(int rcvSize, int sndSize)
+ {
+ Network.setTcpBufSize(_fd, rcvSize, sndSize, _instance);
+ }
+
public int connect(Buffer readBuffer, Buffer writeBuffer)
{
if(_state == StateNeedConnect)
diff --git a/java/src/Ice/src/main/java/IceInternal/TcpTransceiver.java b/java/src/Ice/src/main/java/IceInternal/TcpTransceiver.java
index 7f640059036..3e6cd059cd6 100644
--- a/java/src/Ice/src/main/java/IceInternal/TcpTransceiver.java
+++ b/java/src/Ice/src/main/java/IceInternal/TcpTransceiver.java
@@ -89,6 +89,8 @@ final class TcpTransceiver implements Transceiver
info.remoteAddress = socket.getInetAddress().getHostAddress();
info.remotePort = socket.getPort();
}
+ info.rcvSize = Network.getRecvBufferSize(_stream.fd());
+ info.sndSize = Network.getSendBufferSize(_stream.fd());
}
return info;
}
@@ -98,6 +100,12 @@ final class TcpTransceiver implements Transceiver
{
}
+ @Override
+ public void setBufferSize(int rcvSize, int sndSize)
+ {
+ _stream.setBufferSize(rcvSize, sndSize);
+ }
+
TcpTransceiver(ProtocolInstance instance, StreamSocket stream)
{
_instance = instance;
diff --git a/java/src/Ice/src/main/java/IceInternal/Transceiver.java b/java/src/Ice/src/main/java/IceInternal/Transceiver.java
index 6029b6cbd95..577a5b99941 100644
--- a/java/src/Ice/src/main/java/IceInternal/Transceiver.java
+++ b/java/src/Ice/src/main/java/IceInternal/Transceiver.java
@@ -27,4 +27,5 @@ public interface Transceiver
String toDetailedString();
Ice.ConnectionInfo getInfo();
void checkSendSize(Buffer buf);
+ void setBufferSize(int rcvSize, int sndSize);
}
diff --git a/java/src/Ice/src/main/java/IceInternal/UdpTransceiver.java b/java/src/Ice/src/main/java/IceInternal/UdpTransceiver.java
index bffbeb3ce82..88800a78a2b 100644
--- a/java/src/Ice/src/main/java/IceInternal/UdpTransceiver.java
+++ b/java/src/Ice/src/main/java/IceInternal/UdpTransceiver.java
@@ -315,6 +315,8 @@ final class UdpTransceiver implements Transceiver
info.remotePort = socket.getPort();
}
}
+ info.rcvSize = Network.getRecvBufferSize(_fd);
+ info.sndSize = Network.getSendBufferSize(_fd);
}
if(_mcastAddr != null)
{
@@ -338,6 +340,12 @@ final class UdpTransceiver implements Transceiver
}
}
+ @Override
+ public void setBufferSize(int rcvSize, int sndSize)
+ {
+ setBufSize(rcvSize, sndSize);
+ }
+
public final int effectivePort()
{
return _addr.getPort();
@@ -356,7 +364,7 @@ final class UdpTransceiver implements Transceiver
try
{
_fd = Network.createUdpSocket(_addr);
- setBufSize();
+ setBufSize(-1, -1);
Network.setBlock(_fd, false);
//
// NOTE: setting the multicast interface before performing the
@@ -393,7 +401,7 @@ final class UdpTransceiver implements Transceiver
{
_addr = Network.getAddressForServer(host, port, instance.protocolSupport(), instance.preferIPv6());
_fd = Network.createUdpSocket(_addr);
- setBufSize();
+ setBufSize(-1, -1);
Network.setBlock(_fd, false);
}
catch(Ice.LocalException ex)
@@ -403,7 +411,7 @@ final class UdpTransceiver implements Transceiver
}
}
- private synchronized void setBufSize()
+ private synchronized void setBufSize(int rcvSize, int sndSize)
{
assert(_fd != null);
@@ -413,12 +421,14 @@ final class UdpTransceiver implements Transceiver
String direction;
String prop;
int dfltSize;
+ int sizeRequested;
if(i == 0)
{
isSnd = false;
direction = "receive";
prop = "Ice.UDP.RcvSize";
dfltSize = Network.getRecvBufferSize(_fd);
+ sizeRequested = rcvSize;
_rcvSize = dfltSize;
}
else
@@ -427,13 +437,20 @@ final class UdpTransceiver implements Transceiver
direction = "send";
prop = "Ice.UDP.SndSize";
dfltSize = Network.getSendBufferSize(_fd);
+ sizeRequested = sndSize;
_sndSize = dfltSize;
}
//
- // Get property for buffer size and check for sanity.
+ // Get property for buffer size if size not passed in.
+ //
+ if(sizeRequested == -1)
+ {
+ sizeRequested = _instance.properties().getPropertyAsIntWithDefault(prop, dfltSize);
+ }
+ //
+ // Check for sanity.
//
- int sizeRequested = _instance.properties().getPropertyAsIntWithDefault(prop, dfltSize);
if(sizeRequested < (_udpOverhead + IceInternal.Protocol.headerSize))
{
_instance.logger().warning("Invalid " + prop + " value of " + sizeRequested + " adjusted to " +
diff --git a/java/src/Ice/src/main/java/IceInternal/WSTransceiver.java b/java/src/Ice/src/main/java/IceInternal/WSTransceiver.java
index bfa0d65e5a7..fa8e1279fb2 100644
--- a/java/src/Ice/src/main/java/IceInternal/WSTransceiver.java
+++ b/java/src/Ice/src/main/java/IceInternal/WSTransceiver.java
@@ -484,6 +484,8 @@ final class WSTransceiver implements Transceiver
info.localPort = di.localPort;
info.remoteAddress = di.remoteAddress;
info.remotePort = di.remotePort;
+ info.rcvSize = di.rcvSize;
+ info.sndSize = di.sndSize;
info.headers = _parser.getHeaders();
return info;
}
@@ -494,6 +496,12 @@ final class WSTransceiver implements Transceiver
_delegate.checkSendSize(buf);
}
+ @Override
+ public void setBufferSize(int rcvSize, int sndSize)
+ {
+ _delegate.setBufferSize(rcvSize, sndSize);
+ }
+
WSTransceiver(ProtocolInstance instance, Transceiver del, String host, int port, String resource)
{
init(instance, del);
diff --git a/java/src/Ice/src/main/java/IceSSL/TransceiverI.java b/java/src/Ice/src/main/java/IceSSL/TransceiverI.java
index f388e58ac60..128f890e690 100644
--- a/java/src/Ice/src/main/java/IceSSL/TransceiverI.java
+++ b/java/src/Ice/src/main/java/IceSSL/TransceiverI.java
@@ -257,6 +257,12 @@ final class TransceiverI implements IceInternal.Transceiver
}
@Override
+ public void setBufferSize(int rcvSize, int sndSize)
+ {
+ _stream.setBufferSize(rcvSize, sndSize);
+ }
+
+ @Override
public void checkSendSize(IceInternal.Buffer buf)
{
}
@@ -306,6 +312,9 @@ final class TransceiverI implements IceInternal.Transceiver
info.remotePort = socket.getPort();
}
+ info.rcvSize = IceInternal.Network.getRecvBufferSize(_stream.fd());
+ info.sndSize = IceInternal.Network.getSendBufferSize(_stream.fd());
+
SSLSession session = _engine.getSession();
info.cipher = session.getCipherSuite();
try
@@ -516,7 +525,7 @@ final class TransceiverI implements IceInternal.Transceiver
{
throw new Ice.ConnectionLostException(ex);
}
-
+
if(_netOutput.hasRemaining())
{
_netOutput.compact();