diff options
author | Benoit Foucher <benoit@zeroc.com> | 2014-11-05 19:05:58 +0100 |
---|---|---|
committer | Benoit Foucher <benoit@zeroc.com> | 2014-11-05 19:05:58 +0100 |
commit | 4abc9627f945c0b765cfaa326a38a548470890da (patch) | |
tree | 0f9ad49ec73e1c49a4715b4534634f0b1f5932da /java/src | |
parent | WinRT installer remove 8.0 SDK registry key (diff) | |
download | ice-4abc9627f945c0b765cfaa326a38a548470890da.tar.bz2 ice-4abc9627f945c0b765cfaa326a38a548470890da.tar.xz ice-4abc9627f945c0b765cfaa326a38a548470890da.zip |
Fixed ICE-5486: added support for MessageSizeMax OA property
Diffstat (limited to 'java/src')
5 files changed, 46 insertions, 26 deletions
diff --git a/java/src/Ice/src/main/java/Ice/ConnectionI.java b/java/src/Ice/src/main/java/Ice/ConnectionI.java index cfef2312b11..57ec2b58b49 100644 --- a/java/src/Ice/src/main/java/Ice/ConnectionI.java +++ b/java/src/Ice/src/main/java/Ice/ConnectionI.java @@ -1103,9 +1103,9 @@ public final class ConnectionI extends IceInternal.EventHandler { throw new Ice.IllegalMessageSizeException(); } - if(size > _instance.messageSizeMax()) + if(size > _messageSizeMax) { - IceInternal.Ex.throwMemoryLimitException(size, _instance.messageSizeMax()); + IceInternal.Ex.throwMemoryLimitException(size, _messageSizeMax); } if(size > _readStream.size()) { @@ -1625,8 +1625,8 @@ public final class ConnectionI extends IceInternal.EventHandler } public ConnectionI(Communicator communicator, IceInternal.Instance instance, IceInternal.ACMMonitor monitor, - IceInternal.Transceiver transceiver, IceInternal.Connector connector, IceInternal.EndpointI endpoint, - ObjectAdapter adapter) + IceInternal.Transceiver transceiver, IceInternal.Connector connector, + IceInternal.EndpointI endpoint, ObjectAdapterI adapter) { _communicator = communicator; _instance = instance; @@ -1659,6 +1659,7 @@ public final class ConnectionI extends IceInternal.EventHandler _acmLastActivity = -1; } _nextRequestId = 1; + _messageSizeMax = adapter != null ? adapter.messageSizeMax() : instance.messageSizeMax(); _batchAutoFlushSize = _instance.batchAutoFlushSize(); _batchStream = new IceInternal.BasicStream(instance, IceInternal.Protocol.currentProtocolEncoding); _batchStreamInUse = false; @@ -1684,9 +1685,9 @@ public final class ConnectionI extends IceInternal.EventHandler } _compressionLevel = compressionLevel; - if(_adapter != null) + if(adapter != null) { - _servantManager = ((ObjectAdapterI) _adapter).getServantManager(); + _servantManager = adapter.getServantManager(); } else { @@ -1695,9 +1696,9 @@ public final class ConnectionI extends IceInternal.EventHandler try { - if(_adapter != null) + if(adapter != null) { - _threadPool = ((ObjectAdapterI) _adapter).getThreadPool(); + _threadPool = adapter.getThreadPool(); } else { @@ -2518,7 +2519,7 @@ public final class ConnectionI extends IceInternal.EventHandler { if(IceInternal.BasicStream.compressible()) { - info.stream = info.stream.uncompress(IceInternal.Protocol.headerSize); + info.stream = info.stream.uncompress(IceInternal.Protocol.headerSize, _messageSizeMax); } else { @@ -3120,7 +3121,8 @@ public final class ConnectionI extends IceInternal.EventHandler private LocalException _exception; - private int _batchAutoFlushSize; + private final int _messageSizeMax; + private final int _batchAutoFlushSize; private IceInternal.BasicStream _batchStream; private boolean _batchStreamInUse; private int _batchRequestNum; diff --git a/java/src/Ice/src/main/java/Ice/ObjectAdapterI.java b/java/src/Ice/src/main/java/Ice/ObjectAdapterI.java index 9837175bccc..d00a347731a 100644 --- a/java/src/Ice/src/main/java/Ice/ObjectAdapterI.java +++ b/java/src/Ice/src/main/java/Ice/ObjectAdapterI.java @@ -857,6 +857,13 @@ public final class ObjectAdapterI implements ObjectAdapter return _acm; } + public int + messageSizeMax() + { + // No mutex lock, immutable. + return _messageSizeMax; + } + // // Only for use by IceInternal.ObjectAdapterFactory // @@ -879,6 +886,7 @@ public final class ObjectAdapterI implements ObjectAdapter _replicaGroupId = ""; _reference = _instance.referenceFactory().create("dummy -t", ""); _acm = _instance.serverACM(); + _messageSizeMax = _instance.messageSizeMax(); return; } @@ -940,6 +948,19 @@ public final class ObjectAdapterI implements ObjectAdapter _acm = new IceInternal.ACMConfig(properties, communicator.getLogger(), _name + ".ACM", instance.serverACM()); + { + final int defaultMessageSizeMax = instance.messageSizeMax() / 1024; + int num = properties.getPropertyAsIntWithDefault(_name + ".MessageSizeMax", defaultMessageSizeMax); + if(num < 1 || num > 0x7fffffff / 1024) + { + _messageSizeMax = 0x7fffffff; + } + else + { + _messageSizeMax = num * 1024; // Property is in kilobytes, _messageSizeMax in bytes + } + } + try { int threadPoolSize = properties.getPropertyAsInt(_name + ".ThreadPool.Size"); @@ -1519,6 +1540,7 @@ public final class ObjectAdapterI implements ObjectAdapter "Locator.PreferSecure", "Locator.CollocationOptimized", "Locator.Router", + "MessageSizeMax", "PublishedEndpoints", "RegisterProcess", "ReplicaGroupId", @@ -1614,4 +1636,5 @@ public final class ObjectAdapterI implements ObjectAdapter private int _directCount; // The number of direct proxies dispatching on this object adapter. private boolean _noConfig; private Identity _processId = null; + private final int _messageSizeMax; } diff --git a/java/src/Ice/src/main/java/IceInternal/BasicStream.java b/java/src/Ice/src/main/java/IceInternal/BasicStream.java index 82d84110cb9..58620c59170 100644 --- a/java/src/Ice/src/main/java/IceInternal/BasicStream.java +++ b/java/src/Ice/src/main/java/IceInternal/BasicStream.java @@ -1,4 +1,3 @@ - // ********************************************************************** // // Copyright (c) 2003-2014 ZeroC, Inc. All rights reserved. @@ -2637,7 +2636,7 @@ public class BasicStream } public BasicStream - uncompress(int headerSize) + uncompress(int headerSize, int messageSizeMax) { assert(compressible()); @@ -2647,9 +2646,9 @@ public class BasicStream { throw new Ice.IllegalMessageSizeException(); } - if(uncompressedSize > _instance.messageSizeMax()) + if(uncompressedSize > messageSizeMax) { - IceInternal.Ex.throwMemoryLimitException(uncompressedSize, _instance.messageSizeMax()); + IceInternal.Ex.throwMemoryLimitException(uncompressedSize, messageSizeMax); } int compressedLen = size() - headerSize - 4; diff --git a/java/src/Ice/src/main/java/IceInternal/IncomingConnectionFactory.java b/java/src/Ice/src/main/java/IceInternal/IncomingConnectionFactory.java index e1d3daa6b18..e0a62027edf 100644 --- a/java/src/Ice/src/main/java/IceInternal/IncomingConnectionFactory.java +++ b/java/src/Ice/src/main/java/IceInternal/IncomingConnectionFactory.java @@ -363,14 +363,14 @@ public final class IncomingConnectionFactory extends EventHandler implements Ice } public - IncomingConnectionFactory(Instance instance, EndpointI endpoint, Ice.ObjectAdapter adapter, String adapterName) + IncomingConnectionFactory(Instance instance, EndpointI endpoint, Ice.ObjectAdapterI adapter, String adapterName) { _instance = instance; _endpoint = endpoint; _adapter = adapter; _warn = _instance.initializationData().properties.getPropertyAsInt("Ice.Warn.Connections") > 0 ? true : false; _state = StateHolding; - _monitor = new FactoryACMMonitor(instance, ((Ice.ObjectAdapterI)adapter).getACM()); + _monitor = new FactoryACMMonitor(instance, adapter.getACM()); DefaultsAndOverrides defaultsAndOverrides = _instance.defaultsAndOverrides(); if(defaultsAndOverrides.overrideTimeout) @@ -430,7 +430,7 @@ public final class IncomingConnectionFactory extends EventHandler implements Ice _instance.initializationData().logger.trace(_instance.traceLevels().networkCat, s.toString()); } - ((Ice.ObjectAdapterI)_adapter).getThreadPool().initialize(this); + _adapter.getThreadPool().initialize(this); } } catch(java.lang.Exception ex) @@ -531,7 +531,7 @@ public final class IncomingConnectionFactory extends EventHandler implements Ice s.append(_acceptor.toString()); _instance.initializationData().logger.trace(_instance.traceLevels().networkCat, s.toString()); } - ((Ice.ObjectAdapterI)_adapter).getThreadPool().register(this, SocketOperation.Read); + _adapter.getThreadPool().register(this, SocketOperation.Read); } for(Ice.ConnectionI connection : _connections) @@ -557,7 +557,7 @@ public final class IncomingConnectionFactory extends EventHandler implements Ice s.append(_acceptor.toString()); _instance.initializationData().logger.trace(_instance.traceLevels().networkCat, s.toString()); } - ((Ice.ObjectAdapterI)_adapter).getThreadPool().unregister(this, SocketOperation.Read); + _adapter.getThreadPool().unregister(this, SocketOperation.Read); } for(Ice.ConnectionI connection : _connections) @@ -577,7 +577,7 @@ public final class IncomingConnectionFactory extends EventHandler implements Ice // if there are no more threads in the thread pool available to dispatch // the finish() call. // - if(((Ice.ObjectAdapterI)_adapter).getThreadPool().finish(this, true)) + if(_adapter.getThreadPool().finish(this, true)) { closeAcceptor(true); } @@ -633,7 +633,7 @@ public final class IncomingConnectionFactory extends EventHandler implements Ice private Transceiver _transceiver; private EndpointI _endpoint; - private Ice.ObjectAdapter _adapter; + private Ice.ObjectAdapterI _adapter; private final boolean _warn; diff --git a/java/src/Ice/src/main/java/IceInternal/Instance.java b/java/src/Ice/src/main/java/IceInternal/Instance.java index 8085635ad04..ebe7dd118df 100644 --- a/java/src/Ice/src/main/java/IceInternal/Instance.java +++ b/java/src/Ice/src/main/java/IceInternal/Instance.java @@ -892,11 +892,7 @@ public final class Instance { final int defaultMessageSizeMax = 1024; int num = _initData.properties.getPropertyAsIntWithDefault("Ice.MessageSizeMax", defaultMessageSizeMax); - if(num < 1) - { - _messageSizeMax = defaultMessageSizeMax * 1024; // Ignore non-sensical values. - } - else if(num > 0x7fffffff / 1024) + if(num < 1 || num > 0x7fffffff / 1024) { _messageSizeMax = 0x7fffffff; } |