diff options
author | Benoit Foucher <benoit@zeroc.com> | 2006-09-12 09:01:35 +0000 |
---|---|---|
committer | Benoit Foucher <benoit@zeroc.com> | 2006-09-12 09:01:35 +0000 |
commit | d89514da858be06f7e44129bcd6675a46181208e (patch) | |
tree | 662073ca1e8a9b6e56e9914087da66a824b88d6c /cpp/src | |
parent | Minor Makefile tweak. (diff) | |
download | ice-d89514da858be06f7e44129bcd6675a46181208e.tar.bz2 ice-d89514da858be06f7e44129bcd6675a46181208e.tar.xz ice-d89514da858be06f7e44129bcd6675a46181208e.zip |
Fixes
Diffstat (limited to 'cpp/src')
32 files changed, 911 insertions, 322 deletions
diff --git a/cpp/src/IceGrid/.depend b/cpp/src/IceGrid/.depend index 16a87a810d0..3d904739cfc 100644 --- a/cpp/src/IceGrid/.depend +++ b/cpp/src/IceGrid/.depend @@ -32,7 +32,7 @@ InternalRegistryI$(OBJEXT): InternalRegistryI.cpp ../../include/Ice/Ice.h ../../ StringApplicationInfoDict$(OBJEXT): StringApplicationInfoDict.cpp ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Config.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../IceGrid/StringApplicationInfoDict.h ../../include/Freeze/Map.h ../../include/Ice/Ice.h ../../include/Ice/GCRecMutex.h ../../include/IceUtil/RecMutex.h ../../include/Ice/GCShared.h ../../include/Ice/GC.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/Initialize.h ../../include/Ice/CommunicatorF.h ../../include/Ice/PropertiesF.h ../../include/Ice/LoggerF.h ../../include/Ice/StreamF.h ../../include/Ice/StatsF.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/LocalException.h ../../include/Ice/Properties.h ../../include/Ice/Logger.h ../../include/Ice/LoggerUtil.h ../../include/Ice/Stats.h ../../include/Ice/Communicator.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/PluginF.h ../../include/Ice/ObjectFactory.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Outgoing.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/IncomingAsync.h ../../include/Ice/Direct.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/FactoryTable.h ../../include/Ice/FactoryTableDef.h ../../include/IceUtil/StaticMutex.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/FacetMap.h ../../include/Ice/Locator.h ../../include/Ice/ProcessF.h ../../include/Ice/ServantLocator.h ../../include/Ice/Process.h ../../include/Ice/Application.h ../../include/Ice/Connection.h ../../include/Ice/Functional.h ../../include/IceUtil/Functional.h ../../include/Ice/Stream.h ../../include/Freeze/DB.h ../../include/Freeze/Exception.h ../../include/Freeze/Connection.h ../../include/Freeze/Transaction.h ../IceGrid/Internal.h ../../include/Glacier2/Session.h ../../include/Glacier2/SSLInfo.h ../../include/IceGrid/Admin.h ../../include/Ice/SliceChecksumDict.h ../../include/IceGrid/Exception.h ../../include/IceGrid/Descriptor.h ../../include/IceGrid/Observer.h ../../include/IceGrid/Registry.h ../../include/IceGrid/Session.h IdentityObjectInfoDict$(OBJEXT): IdentityObjectInfoDict.cpp ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Config.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../IceGrid/IdentityObjectInfoDict.h ../../include/Freeze/Map.h ../../include/Ice/Ice.h ../../include/Ice/GCRecMutex.h ../../include/IceUtil/RecMutex.h ../../include/Ice/GCShared.h ../../include/Ice/GC.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/Initialize.h ../../include/Ice/CommunicatorF.h ../../include/Ice/PropertiesF.h ../../include/Ice/LoggerF.h ../../include/Ice/StreamF.h ../../include/Ice/StatsF.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/LocalException.h ../../include/Ice/Properties.h ../../include/Ice/Logger.h ../../include/Ice/LoggerUtil.h ../../include/Ice/Stats.h ../../include/Ice/Communicator.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/PluginF.h ../../include/Ice/ObjectFactory.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Outgoing.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/IncomingAsync.h ../../include/Ice/Direct.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/FactoryTable.h ../../include/Ice/FactoryTableDef.h ../../include/IceUtil/StaticMutex.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/FacetMap.h ../../include/Ice/Locator.h ../../include/Ice/ProcessF.h ../../include/Ice/ServantLocator.h ../../include/Ice/Process.h ../../include/Ice/Application.h ../../include/Ice/Connection.h ../../include/Ice/Functional.h ../../include/IceUtil/Functional.h ../../include/Ice/Stream.h ../../include/Freeze/DB.h ../../include/Freeze/Exception.h ../../include/Freeze/Connection.h ../../include/Freeze/Transaction.h ../IceGrid/Internal.h ../../include/Glacier2/Session.h ../../include/Glacier2/SSLInfo.h ../../include/IceGrid/Admin.h ../../include/Ice/SliceChecksumDict.h ../../include/IceGrid/Exception.h ../../include/IceGrid/Descriptor.h ../../include/IceGrid/Observer.h ../../include/IceGrid/Registry.h ../../include/IceGrid/Session.h StringAdapterInfoDict$(OBJEXT): StringAdapterInfoDict.cpp ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Config.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../IceGrid/StringAdapterInfoDict.h ../../include/Freeze/Map.h ../../include/Ice/Ice.h ../../include/Ice/GCRecMutex.h ../../include/IceUtil/RecMutex.h ../../include/Ice/GCShared.h ../../include/Ice/GC.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/Initialize.h ../../include/Ice/CommunicatorF.h ../../include/Ice/PropertiesF.h ../../include/Ice/LoggerF.h ../../include/Ice/StreamF.h ../../include/Ice/StatsF.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/LocalException.h ../../include/Ice/Properties.h ../../include/Ice/Logger.h ../../include/Ice/LoggerUtil.h ../../include/Ice/Stats.h ../../include/Ice/Communicator.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/PluginF.h ../../include/Ice/ObjectFactory.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Outgoing.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/IncomingAsync.h ../../include/Ice/Direct.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/FactoryTable.h ../../include/Ice/FactoryTableDef.h ../../include/IceUtil/StaticMutex.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/FacetMap.h ../../include/Ice/Locator.h ../../include/Ice/ProcessF.h ../../include/Ice/ServantLocator.h ../../include/Ice/Process.h ../../include/Ice/Application.h ../../include/Ice/Connection.h ../../include/Ice/Functional.h ../../include/IceUtil/Functional.h ../../include/Ice/Stream.h ../../include/Freeze/DB.h ../../include/Freeze/Exception.h ../../include/Freeze/Connection.h ../../include/Freeze/Transaction.h ../../include/IceGrid/Admin.h ../../include/Ice/SliceChecksumDict.h ../../include/Glacier2/Session.h ../../include/Glacier2/SSLInfo.h ../../include/IceGrid/Exception.h ../../include/IceGrid/Descriptor.h -Database$(OBJEXT): Database.cpp ../../include/IceUtil/StringUtil.h ../../include/IceUtil/Config.h ../../include/IceUtil/Random.h ../../include/IceUtil/Exception.h ../../include/IceUtil/UUID.h ../../include/Freeze/Freeze.h ../../include/Freeze/Initialize.h ../../include/Ice/Ice.h ../../include/Ice/GCRecMutex.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/Config.h ../../include/Ice/GCShared.h ../../include/Ice/GCCountMap.h ../../include/Ice/GC.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/Initialize.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Handle.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/PropertiesF.h ../../include/Ice/InstanceF.h ../../include/Ice/LoggerF.h ../../include/Ice/StreamF.h ../../include/Ice/StatsF.h ../../include/Ice/StringConverter.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/LocalException.h ../../include/Ice/Properties.h ../../include/Ice/Logger.h ../../include/Ice/LoggerUtil.h ../../include/Ice/Stats.h ../../include/Ice/Communicator.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/PluginF.h ../../include/Ice/ObjectFactory.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Outgoing.h ../../include/Ice/BasicStream.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/IceUtil/Unicode.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/IncomingAsync.h ../../include/Ice/Direct.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/FactoryTable.h ../../include/Ice/FactoryTableDef.h ../../include/IceUtil/StaticMutex.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/FacetMap.h ../../include/Ice/Locator.h ../../include/Ice/ProcessF.h ../../include/Ice/ServantLocator.h ../../include/Ice/Process.h ../../include/Ice/Application.h ../../include/Ice/Connection.h ../../include/Ice/Functional.h ../../include/IceUtil/Functional.h ../../include/Ice/Stream.h ../../include/Freeze/EvictorF.h ../../include/Freeze/ConnectionF.h ../../include/Freeze/Index.h ../../include/Freeze/DB.h ../../include/Freeze/Transaction.h ../../include/Freeze/Evictor.h ../../include/Freeze/Exception.h ../../include/Freeze/Map.h ../../include/Freeze/Connection.h ../../include/Freeze/TransactionHolder.h ../IceGrid/Database.h ../../include/IceGrid/Admin.h ../../include/Ice/SliceChecksumDict.h ../../include/Glacier2/Session.h ../../include/Glacier2/SSLInfo.h ../../include/IceGrid/Exception.h ../../include/IceGrid/Descriptor.h ../IceGrid/Internal.h ../../include/IceGrid/Observer.h ../../include/IceGrid/Registry.h ../../include/IceGrid/Session.h ../IceGrid/StringApplicationInfoDict.h ../IceGrid/IdentityObjectInfoDict.h ../IceGrid/StringAdapterInfoDict.h ../IceGrid/ServerCache.h ../../include/IceGrid/Query.h ../IceGrid/Allocatable.h ../IceGrid/WaitQueue.h ../IceGrid/Cache.h ../IceGrid/Util.h ../IceGrid/TraceLevels.h ../IceGrid/NodeCache.h ../IceGrid/ReplicaCache.h ../../include/IceStorm/IceStorm.h ../IceGrid/ObjectCache.h ../IceGrid/AllocatableObjectCache.h ../IceGrid/AdapterCache.h ../IceGrid/Topics.h ../IceGrid/DescriptorHelper.h ../../include/IceUtil/OutputUtil.h ../../include/IceXML/Parser.h ../IceGrid/NodeSessionI.h ../IceGrid/ReplicaSessionI.h +Database$(OBJEXT): Database.cpp ../../include/IceUtil/StringUtil.h ../../include/IceUtil/Config.h ../../include/IceUtil/Random.h ../../include/IceUtil/Exception.h ../../include/Freeze/Freeze.h ../../include/Freeze/Initialize.h ../../include/Ice/Ice.h ../../include/Ice/GCRecMutex.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/Config.h ../../include/Ice/GCShared.h ../../include/Ice/GCCountMap.h ../../include/Ice/GC.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/Initialize.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Handle.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/PropertiesF.h ../../include/Ice/InstanceF.h ../../include/Ice/LoggerF.h ../../include/Ice/StreamF.h ../../include/Ice/StatsF.h ../../include/Ice/StringConverter.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/LocalException.h ../../include/Ice/Properties.h ../../include/Ice/Logger.h ../../include/Ice/LoggerUtil.h ../../include/Ice/Stats.h ../../include/Ice/Communicator.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/PluginF.h ../../include/Ice/ObjectFactory.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Outgoing.h ../../include/Ice/BasicStream.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/IceUtil/Unicode.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/IncomingAsync.h ../../include/Ice/Direct.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/FactoryTable.h ../../include/Ice/FactoryTableDef.h ../../include/IceUtil/StaticMutex.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/FacetMap.h ../../include/Ice/Locator.h ../../include/Ice/ProcessF.h ../../include/Ice/ServantLocator.h ../../include/Ice/Process.h ../../include/Ice/Application.h ../../include/Ice/Connection.h ../../include/Ice/Functional.h ../../include/IceUtil/Functional.h ../../include/Ice/Stream.h ../../include/Freeze/EvictorF.h ../../include/Freeze/ConnectionF.h ../../include/Freeze/Index.h ../../include/Freeze/DB.h ../../include/Freeze/Transaction.h ../../include/Freeze/Evictor.h ../../include/Freeze/Exception.h ../../include/Freeze/Map.h ../../include/Freeze/Connection.h ../../include/Freeze/TransactionHolder.h ../IceGrid/Database.h ../../include/IceGrid/Admin.h ../../include/Ice/SliceChecksumDict.h ../../include/Glacier2/Session.h ../../include/Glacier2/SSLInfo.h ../../include/IceGrid/Exception.h ../../include/IceGrid/Descriptor.h ../IceGrid/Internal.h ../../include/IceGrid/Observer.h ../../include/IceGrid/Registry.h ../../include/IceGrid/Session.h ../IceGrid/StringApplicationInfoDict.h ../IceGrid/IdentityObjectInfoDict.h ../IceGrid/StringAdapterInfoDict.h ../IceGrid/ServerCache.h ../../include/IceGrid/Query.h ../IceGrid/Allocatable.h ../IceGrid/WaitQueue.h ../IceGrid/Cache.h ../IceGrid/Util.h ../IceGrid/TraceLevels.h ../IceGrid/NodeCache.h ../IceGrid/ReplicaCache.h ../../include/IceStorm/IceStorm.h ../IceGrid/ObjectCache.h ../IceGrid/AllocatableObjectCache.h ../IceGrid/AdapterCache.h ../IceGrid/Topics.h ../IceGrid/DescriptorHelper.h ../../include/IceUtil/OutputUtil.h ../../include/IceXML/Parser.h ../IceGrid/NodeSessionI.h ../IceGrid/ReplicaSessionI.h Allocatable$(OBJEXT): Allocatable.cpp ../IceGrid/Allocatable.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Config.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Time.h ../IceGrid/WaitQueue.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceGrid/Session.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/Object.h ../../include/Ice/GCShared.h ../../include/Ice/GCRecMutex.h ../../include/IceUtil/RecMutex.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Outgoing.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/IncomingAsync.h ../../include/Ice/Direct.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/FactoryTable.h ../../include/Ice/FactoryTableDef.h ../../include/IceUtil/StaticMutex.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Glacier2/Session.h ../../include/Ice/BuiltinSequences.h ../../include/Glacier2/SSLInfo.h ../../include/IceGrid/Exception.h ../IceGrid/SessionI.h ../IceGrid/ReapThread.h ../IceGrid/SessionServantLocatorI.h ../../include/Ice/ServantLocator.h AdapterCache$(OBJEXT): AdapterCache.cpp ../../include/IceUtil/Random.h ../../include/IceUtil/Config.h ../../include/IceUtil/Exception.h ../../include/Ice/LoggerUtil.h ../../include/Ice/LoggerF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/Locator.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/Object.h ../../include/Ice/GCShared.h ../../include/Ice/GCRecMutex.h ../../include/IceUtil/RecMutex.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/IncomingAsync.h ../../include/Ice/Direct.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/FactoryTable.h ../../include/Ice/FactoryTableDef.h ../../include/IceUtil/StaticMutex.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/ProcessF.h ../IceGrid/AdapterCache.h ../IceGrid/Cache.h ../IceGrid/Util.h ../../include/IceGrid/Descriptor.h ../../include/Ice/BuiltinSequences.h ../../include/IceUtil/StringUtil.h ../../include/IceGrid/Exception.h ../IceGrid/TraceLevels.h ../../include/IceGrid/Query.h ../IceGrid/Internal.h ../../include/Glacier2/Session.h ../../include/Glacier2/SSLInfo.h ../../include/IceGrid/Admin.h ../../include/Ice/SliceChecksumDict.h ../../include/IceGrid/Observer.h ../../include/IceGrid/Registry.h ../../include/IceGrid/Session.h ../IceGrid/NodeSessionI.h ../IceGrid/ServerCache.h ../IceGrid/Allocatable.h ../IceGrid/WaitQueue.h ../../include/IceUtil/Thread.h ../IceGrid/NodeCache.h ../IceGrid/SessionI.h ../IceGrid/ReapThread.h ../IceGrid/SessionServantLocatorI.h ../../include/Ice/ServantLocator.h ObjectCache$(OBJEXT): ObjectCache.cpp ../../include/IceUtil/Random.h ../../include/IceUtil/Config.h ../../include/IceUtil/Exception.h ../../include/Ice/Communicator.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LoggerF.h ../../include/Ice/StatsF.h ../../include/Ice/PropertiesF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/PluginF.h ../../include/Ice/LoggerUtil.h ../../include/Ice/LocalException.h ../../include/Ice/BuiltinSequences.h ../IceGrid/ObjectCache.h ../IceGrid/Cache.h ../IceGrid/Util.h ../../include/IceGrid/Descriptor.h ../../include/Ice/Object.h ../../include/Ice/GCShared.h ../../include/Ice/GCRecMutex.h ../../include/IceUtil/RecMutex.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../../include/Ice/FactoryTable.h ../../include/Ice/FactoryTableDef.h ../../include/IceUtil/StaticMutex.h ../../include/Ice/UserExceptionFactoryF.h ../../include/IceUtil/StringUtil.h ../../include/IceGrid/Exception.h ../../include/Ice/UserExceptionFactory.h ../IceGrid/TraceLevels.h ../IceGrid/Internal.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/IncomingAsync.h ../../include/Ice/ProcessF.h ../../include/Ice/Locator.h ../../include/Glacier2/Session.h ../../include/Glacier2/SSLInfo.h ../../include/IceGrid/Admin.h ../../include/Ice/SliceChecksumDict.h ../../include/IceGrid/Observer.h ../../include/IceGrid/Registry.h ../../include/IceGrid/Session.h ../IceGrid/NodeSessionI.h ../IceGrid/ServerCache.h ../../include/IceGrid/Query.h ../IceGrid/Allocatable.h ../IceGrid/WaitQueue.h ../../include/IceUtil/Thread.h ../IceGrid/SessionI.h ../IceGrid/ReapThread.h ../IceGrid/SessionServantLocatorI.h ../../include/Ice/ServantLocator.h @@ -42,7 +42,7 @@ NodeCache$(OBJEXT): NodeCache.cpp ../../include/IceUtil/Functional.h ../../inclu ReplicaCache$(OBJEXT): ReplicaCache.cpp ../../include/Ice/Communicator.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Handle.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/IceUtil/Config.h ../../include/Ice/Config.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/GCCountMap.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/StreamF.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LoggerF.h ../../include/Ice/StatsF.h ../../include/Ice/PropertiesF.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/PluginF.h ../../include/Ice/LocalException.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/LoggerUtil.h ../IceGrid/ReplicaCache.h ../IceGrid/Cache.h ../IceGrid/Util.h ../../include/IceGrid/Descriptor.h ../../include/Ice/Object.h ../../include/Ice/GCShared.h ../../include/Ice/GCRecMutex.h ../../include/IceUtil/RecMutex.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Outgoing.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/BasicStream.h ../../include/Ice/InstanceF.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/Ice/StringConverter.h ../../include/IceUtil/Unicode.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/Direct.h ../../include/Ice/FactoryTable.h ../../include/Ice/FactoryTableDef.h ../../include/IceUtil/StaticMutex.h ../../include/Ice/UserExceptionFactoryF.h ../../include/IceUtil/StringUtil.h ../../include/IceGrid/Exception.h ../../include/Ice/UserExceptionFactory.h ../../include/IceUtil/Random.h ../IceGrid/TraceLevels.h ../IceGrid/Internal.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/IncomingAsync.h ../../include/Ice/ProcessF.h ../../include/Ice/Locator.h ../../include/Glacier2/Session.h ../../include/Glacier2/SSLInfo.h ../../include/IceGrid/Admin.h ../../include/Ice/SliceChecksumDict.h ../../include/IceGrid/Observer.h ../../include/IceGrid/Registry.h ../../include/IceGrid/Session.h ../../include/IceStorm/IceStorm.h ../IceGrid/ReplicaSessionI.h ../IceGrid/Topics.h ../IceGrid/StringApplicationInfoDict.h ../../include/Freeze/Map.h ../../include/Ice/Ice.h ../../include/Ice/GC.h ../../include/IceUtil/Thread.h ../../include/Ice/Initialize.h ../../include/Ice/Properties.h ../../include/Ice/Logger.h ../../include/Ice/Stats.h ../../include/Ice/ObjectFactory.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/FacetMap.h ../../include/Ice/ServantLocator.h ../../include/Ice/Process.h ../../include/Ice/Application.h ../../include/Ice/Connection.h ../../include/Ice/Functional.h ../../include/IceUtil/Functional.h ../../include/Ice/Stream.h ../../include/Freeze/DB.h ../../include/Freeze/Exception.h ../../include/Freeze/Connection.h ../../include/Freeze/Transaction.h ../IceGrid/StringAdapterInfoDict.h ../IceGrid/IdentityObjectInfoDict.h LocatorI$(OBJEXT): LocatorI.cpp ../../include/Ice/Ice.h ../../include/Ice/GCRecMutex.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Config.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/GCShared.h ../../include/Ice/GCCountMap.h ../../include/Ice/GC.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/Initialize.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Handle.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/PropertiesF.h ../../include/Ice/InstanceF.h ../../include/Ice/LoggerF.h ../../include/Ice/StreamF.h ../../include/Ice/StatsF.h ../../include/Ice/StringConverter.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/LocalException.h ../../include/Ice/Properties.h ../../include/Ice/Logger.h ../../include/Ice/LoggerUtil.h ../../include/Ice/Stats.h ../../include/Ice/Communicator.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/PluginF.h ../../include/Ice/ObjectFactory.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Outgoing.h ../../include/Ice/BasicStream.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/IceUtil/Unicode.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/IncomingAsync.h ../../include/Ice/Direct.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/FactoryTable.h ../../include/Ice/FactoryTableDef.h ../../include/IceUtil/StaticMutex.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/FacetMap.h ../../include/Ice/Locator.h ../../include/Ice/ProcessF.h ../../include/Ice/ServantLocator.h ../../include/Ice/Process.h ../../include/Ice/Application.h ../../include/Ice/Connection.h ../../include/Ice/Functional.h ../../include/IceUtil/Functional.h ../../include/Ice/Stream.h ../IceGrid/LocatorI.h ../IceGrid/Internal.h ../../include/Glacier2/Session.h ../../include/Glacier2/SSLInfo.h ../../include/IceGrid/Admin.h ../../include/Ice/SliceChecksumDict.h ../../include/IceGrid/Exception.h ../../include/IceGrid/Descriptor.h ../../include/IceGrid/Observer.h ../../include/IceGrid/Registry.h ../../include/IceGrid/Session.h ../IceGrid/Database.h ../../include/Freeze/ConnectionF.h ../IceGrid/StringApplicationInfoDict.h ../../include/Freeze/Map.h ../../include/Freeze/DB.h ../../include/Freeze/Exception.h ../../include/Freeze/Connection.h ../../include/Freeze/Transaction.h ../IceGrid/IdentityObjectInfoDict.h ../IceGrid/StringAdapterInfoDict.h ../IceGrid/ServerCache.h ../../include/IceGrid/Query.h ../IceGrid/Allocatable.h ../IceGrid/WaitQueue.h ../IceGrid/Cache.h ../IceGrid/Util.h ../../include/IceUtil/StringUtil.h ../../include/IceUtil/Random.h ../IceGrid/TraceLevels.h ../IceGrid/NodeCache.h ../IceGrid/ReplicaCache.h ../../include/IceStorm/IceStorm.h ../IceGrid/ObjectCache.h ../IceGrid/AllocatableObjectCache.h ../IceGrid/AdapterCache.h ../IceGrid/Topics.h ../IceGrid/SessionI.h ../IceGrid/ReapThread.h ../IceGrid/SessionServantLocatorI.h LocatorRegistryI$(OBJEXT): LocatorRegistryI.cpp ../../include/Ice/Ice.h ../../include/Ice/GCRecMutex.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Config.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/GCShared.h ../../include/Ice/GCCountMap.h ../../include/Ice/GC.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/Initialize.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Handle.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/PropertiesF.h ../../include/Ice/InstanceF.h ../../include/Ice/LoggerF.h ../../include/Ice/StreamF.h ../../include/Ice/StatsF.h ../../include/Ice/StringConverter.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/LocalException.h ../../include/Ice/Properties.h ../../include/Ice/Logger.h ../../include/Ice/LoggerUtil.h ../../include/Ice/Stats.h ../../include/Ice/Communicator.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/PluginF.h ../../include/Ice/ObjectFactory.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Outgoing.h ../../include/Ice/BasicStream.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/IceUtil/Unicode.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/IncomingAsync.h ../../include/Ice/Direct.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/FactoryTable.h ../../include/Ice/FactoryTableDef.h ../../include/IceUtil/StaticMutex.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/FacetMap.h ../../include/Ice/Locator.h ../../include/Ice/ProcessF.h ../../include/Ice/ServantLocator.h ../../include/Ice/Process.h ../../include/Ice/Application.h ../../include/Ice/Connection.h ../../include/Ice/Functional.h ../../include/IceUtil/Functional.h ../../include/Ice/Stream.h ../IceGrid/LocatorRegistryI.h ../IceGrid/Internal.h ../../include/Glacier2/Session.h ../../include/Glacier2/SSLInfo.h ../../include/IceGrid/Admin.h ../../include/Ice/SliceChecksumDict.h ../../include/IceGrid/Exception.h ../../include/IceGrid/Descriptor.h ../../include/IceGrid/Observer.h ../../include/IceGrid/Registry.h ../../include/IceGrid/Session.h ../IceGrid/ReplicaSessionManager.h ../IceGrid/SessionManager.h ../../include/IceGrid/Query.h ../IceGrid/Database.h ../../include/Freeze/ConnectionF.h ../IceGrid/StringApplicationInfoDict.h ../../include/Freeze/Map.h ../../include/Freeze/DB.h ../../include/Freeze/Exception.h ../../include/Freeze/Connection.h ../../include/Freeze/Transaction.h ../IceGrid/IdentityObjectInfoDict.h ../IceGrid/StringAdapterInfoDict.h ../IceGrid/ServerCache.h ../IceGrid/Allocatable.h ../IceGrid/WaitQueue.h ../IceGrid/Cache.h ../IceGrid/Util.h ../../include/IceUtil/StringUtil.h ../../include/IceUtil/Random.h ../IceGrid/TraceLevels.h ../IceGrid/NodeCache.h ../IceGrid/ReplicaCache.h ../../include/IceStorm/IceStorm.h ../IceGrid/ObjectCache.h ../IceGrid/AllocatableObjectCache.h ../IceGrid/AdapterCache.h ../IceGrid/Topics.h -AdminI$(OBJEXT): AdminI.cpp ../../include/Ice/Ice.h ../../include/Ice/GCRecMutex.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Config.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/GCShared.h ../../include/Ice/GCCountMap.h ../../include/Ice/GC.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/Initialize.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Handle.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/PropertiesF.h ../../include/Ice/InstanceF.h ../../include/Ice/LoggerF.h ../../include/Ice/StreamF.h ../../include/Ice/StatsF.h ../../include/Ice/StringConverter.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/LocalException.h ../../include/Ice/Properties.h ../../include/Ice/Logger.h ../../include/Ice/LoggerUtil.h ../../include/Ice/Stats.h ../../include/Ice/Communicator.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/PluginF.h ../../include/Ice/ObjectFactory.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Outgoing.h ../../include/Ice/BasicStream.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/IceUtil/Unicode.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/IncomingAsync.h ../../include/Ice/Direct.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/FactoryTable.h ../../include/Ice/FactoryTableDef.h ../../include/IceUtil/StaticMutex.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/FacetMap.h ../../include/Ice/Locator.h ../../include/Ice/ProcessF.h ../../include/Ice/ServantLocator.h ../../include/Ice/Process.h ../../include/Ice/Application.h ../../include/Ice/Connection.h ../../include/Ice/Functional.h ../../include/IceUtil/Functional.h ../../include/Ice/Stream.h ../Ice/TraceUtil.h ../Ice/TraceLevelsF.h ../../include/Ice/SliceChecksums.h ../../include/Ice/SliceChecksumDict.h ../IceGrid/AdminI.h ../../include/IceGrid/Admin.h ../../include/Glacier2/Session.h ../../include/Glacier2/SSLInfo.h ../../include/IceGrid/Exception.h ../../include/IceGrid/Descriptor.h ../IceGrid/RegistryI.h ../../include/IceGrid/Registry.h ../../include/IceGrid/Session.h ../../include/IceGrid/Query.h ../IceGrid/Internal.h ../../include/IceGrid/Observer.h ../IceGrid/PlatformInfo.h ../IceGrid/ReplicaSessionManager.h ../IceGrid/SessionManager.h ../../include/Glacier2/PermissionsVerifierF.h ../../include/IceStorm/Service.h ../../include/IceBox/IceBox.h ../../include/IceStorm/IceStorm.h ../IceGrid/Database.h ../../include/Freeze/ConnectionF.h ../IceGrid/StringApplicationInfoDict.h ../../include/Freeze/Map.h ../../include/Freeze/DB.h ../../include/Freeze/Exception.h ../../include/Freeze/Connection.h ../../include/Freeze/Transaction.h ../IceGrid/IdentityObjectInfoDict.h ../IceGrid/StringAdapterInfoDict.h ../IceGrid/ServerCache.h ../IceGrid/Allocatable.h ../IceGrid/WaitQueue.h ../IceGrid/Cache.h ../IceGrid/Util.h ../../include/IceUtil/StringUtil.h ../../include/IceUtil/Random.h ../IceGrid/TraceLevels.h ../IceGrid/NodeCache.h ../IceGrid/ReplicaCache.h ../IceGrid/ObjectCache.h ../IceGrid/AllocatableObjectCache.h ../IceGrid/AdapterCache.h ../IceGrid/Topics.h ../IceGrid/DescriptorParser.h ../IceGrid/DescriptorHelper.h ../../include/IceUtil/OutputUtil.h ../../include/IceXML/Parser.h ../IceGrid/AdminSessionI.h ../IceGrid/SessionI.h ../IceGrid/ReapThread.h ../IceGrid/SessionServantLocatorI.h +AdminI$(OBJEXT): AdminI.cpp ../../include/IceUtil/UUID.h ../../include/IceUtil/Config.h ../../include/Ice/Ice.h ../../include/Ice/GCRecMutex.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/GCShared.h ../../include/Ice/GCCountMap.h ../../include/Ice/GC.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/Initialize.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Handle.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/PropertiesF.h ../../include/Ice/InstanceF.h ../../include/Ice/LoggerF.h ../../include/Ice/StreamF.h ../../include/Ice/StatsF.h ../../include/Ice/StringConverter.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/LocalException.h ../../include/Ice/Properties.h ../../include/Ice/Logger.h ../../include/Ice/LoggerUtil.h ../../include/Ice/Stats.h ../../include/Ice/Communicator.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/PluginF.h ../../include/Ice/ObjectFactory.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Outgoing.h ../../include/Ice/BasicStream.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/IceUtil/Unicode.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/IncomingAsync.h ../../include/Ice/Direct.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/FactoryTable.h ../../include/Ice/FactoryTableDef.h ../../include/IceUtil/StaticMutex.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/FacetMap.h ../../include/Ice/Locator.h ../../include/Ice/ProcessF.h ../../include/Ice/ServantLocator.h ../../include/Ice/Process.h ../../include/Ice/Application.h ../../include/Ice/Connection.h ../../include/Ice/Functional.h ../../include/IceUtil/Functional.h ../../include/Ice/Stream.h ../Ice/TraceUtil.h ../Ice/TraceLevelsF.h ../../include/Ice/SliceChecksums.h ../../include/Ice/SliceChecksumDict.h ../IceGrid/AdminI.h ../../include/IceGrid/Admin.h ../../include/Glacier2/Session.h ../../include/Glacier2/SSLInfo.h ../../include/IceGrid/Exception.h ../../include/IceGrid/Descriptor.h ../IceGrid/RegistryI.h ../../include/IceGrid/Registry.h ../../include/IceGrid/Session.h ../../include/IceGrid/Query.h ../IceGrid/Internal.h ../../include/IceGrid/Observer.h ../IceGrid/PlatformInfo.h ../IceGrid/ReplicaSessionManager.h ../IceGrid/SessionManager.h ../../include/Glacier2/PermissionsVerifierF.h ../../include/IceStorm/Service.h ../../include/IceBox/IceBox.h ../../include/IceStorm/IceStorm.h ../IceGrid/Database.h ../../include/Freeze/ConnectionF.h ../IceGrid/StringApplicationInfoDict.h ../../include/Freeze/Map.h ../../include/Freeze/DB.h ../../include/Freeze/Exception.h ../../include/Freeze/Connection.h ../../include/Freeze/Transaction.h ../IceGrid/IdentityObjectInfoDict.h ../IceGrid/StringAdapterInfoDict.h ../IceGrid/ServerCache.h ../IceGrid/Allocatable.h ../IceGrid/WaitQueue.h ../IceGrid/Cache.h ../IceGrid/Util.h ../../include/IceUtil/StringUtil.h ../../include/IceUtil/Random.h ../IceGrid/TraceLevels.h ../IceGrid/NodeCache.h ../IceGrid/ReplicaCache.h ../IceGrid/ObjectCache.h ../IceGrid/AllocatableObjectCache.h ../IceGrid/AdapterCache.h ../IceGrid/Topics.h ../IceGrid/DescriptorParser.h ../IceGrid/DescriptorHelper.h ../../include/IceUtil/OutputUtil.h ../../include/IceXML/Parser.h ../IceGrid/AdminSessionI.h ../IceGrid/SessionI.h ../IceGrid/ReapThread.h ../IceGrid/SessionServantLocatorI.h Util$(OBJEXT): Util.cpp ../../include/Ice/Ice.h ../../include/Ice/GCRecMutex.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Config.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/GCShared.h ../../include/Ice/GCCountMap.h ../../include/Ice/GC.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/Initialize.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Handle.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/PropertiesF.h ../../include/Ice/InstanceF.h ../../include/Ice/LoggerF.h ../../include/Ice/StreamF.h ../../include/Ice/StatsF.h ../../include/Ice/StringConverter.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/LocalException.h ../../include/Ice/Properties.h ../../include/Ice/Logger.h ../../include/Ice/LoggerUtil.h ../../include/Ice/Stats.h ../../include/Ice/Communicator.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/PluginF.h ../../include/Ice/ObjectFactory.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Outgoing.h ../../include/Ice/BasicStream.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/IceUtil/Unicode.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/IncomingAsync.h ../../include/Ice/Direct.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/FactoryTable.h ../../include/Ice/FactoryTableDef.h ../../include/IceUtil/StaticMutex.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/FacetMap.h ../../include/Ice/Locator.h ../../include/Ice/ProcessF.h ../../include/Ice/ServantLocator.h ../../include/Ice/Process.h ../../include/Ice/Application.h ../../include/Ice/Connection.h ../../include/Ice/Functional.h ../../include/IceUtil/Functional.h ../../include/Ice/Stream.h ../../include/IcePatch2/Util.h ../../include/IcePatch2/FileInfo.h ../IceGrid/Util.h ../../include/IceGrid/Descriptor.h ../../include/IceUtil/StringUtil.h ../../include/IceGrid/Exception.h ../../include/IceUtil/Random.h ../../include/IceGrid/Admin.h ../../include/Ice/SliceChecksumDict.h ../../include/Glacier2/Session.h ../../include/Glacier2/SSLInfo.h DescriptorHelper$(OBJEXT): DescriptorHelper.cpp ../../include/Ice/Ice.h ../../include/Ice/GCRecMutex.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Config.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/GCShared.h ../../include/Ice/GCCountMap.h ../../include/Ice/GC.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/Initialize.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Handle.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/PropertiesF.h ../../include/Ice/InstanceF.h ../../include/Ice/LoggerF.h ../../include/Ice/StreamF.h ../../include/Ice/StatsF.h ../../include/Ice/StringConverter.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/LocalException.h ../../include/Ice/Properties.h ../../include/Ice/Logger.h ../../include/Ice/LoggerUtil.h ../../include/Ice/Stats.h ../../include/Ice/Communicator.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/PluginF.h ../../include/Ice/ObjectFactory.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Outgoing.h ../../include/Ice/BasicStream.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/IceUtil/Unicode.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/IncomingAsync.h ../../include/Ice/Direct.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/FactoryTable.h ../../include/Ice/FactoryTableDef.h ../../include/IceUtil/StaticMutex.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/FacetMap.h ../../include/Ice/Locator.h ../../include/Ice/ProcessF.h ../../include/Ice/ServantLocator.h ../../include/Ice/Process.h ../../include/Ice/Application.h ../../include/Ice/Connection.h ../../include/Ice/Functional.h ../../include/IceUtil/Functional.h ../../include/Ice/Stream.h ../IceGrid/DescriptorHelper.h ../../include/IceUtil/OutputUtil.h ../../include/IceXML/Parser.h ../../include/IceGrid/Admin.h ../../include/Ice/SliceChecksumDict.h ../../include/Glacier2/Session.h ../../include/Glacier2/SSLInfo.h ../../include/IceGrid/Exception.h ../../include/IceGrid/Descriptor.h ../IceGrid/Util.h ../../include/IceUtil/StringUtil.h ../../include/IceUtil/Random.h NodeSessionI$(OBJEXT): NodeSessionI.cpp ../../include/Ice/Ice.h ../../include/Ice/GCRecMutex.h ../../include/IceUtil/RecMutex.h ../../include/IceUtil/Config.h ../../include/IceUtil/Lock.h ../../include/IceUtil/ThreadException.h ../../include/IceUtil/Exception.h ../../include/Ice/Config.h ../../include/Ice/GCShared.h ../../include/Ice/GCCountMap.h ../../include/Ice/GC.h ../../include/IceUtil/Thread.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Mutex.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Monitor.h ../../include/IceUtil/Cond.h ../../include/IceUtil/Time.h ../../include/Ice/Initialize.h ../../include/Ice/CommunicatorF.h ../../include/Ice/LocalObjectF.h ../../include/Ice/Handle.h ../../include/Ice/ProxyHandle.h ../../include/Ice/ProxyF.h ../../include/Ice/ObjectF.h ../../include/Ice/Exception.h ../../include/Ice/LocalObject.h ../../include/Ice/UndefSysMacros.h ../../include/Ice/PropertiesF.h ../../include/Ice/InstanceF.h ../../include/Ice/LoggerF.h ../../include/Ice/StreamF.h ../../include/Ice/StatsF.h ../../include/Ice/StringConverter.h ../../include/Ice/BuiltinSequences.h ../../include/Ice/Proxy.h ../../include/Ice/ProxyFactoryF.h ../../include/Ice/ConnectionIF.h ../../include/Ice/EndpointIF.h ../../include/Ice/Endpoint.h ../../include/Ice/ObjectAdapterF.h ../../include/Ice/ReferenceF.h ../../include/Ice/OutgoingAsyncF.h ../../include/Ice/Current.h ../../include/Ice/ConnectionF.h ../../include/Ice/Identity.h ../../include/Ice/LocalException.h ../../include/Ice/Properties.h ../../include/Ice/Logger.h ../../include/Ice/LoggerUtil.h ../../include/Ice/Stats.h ../../include/Ice/Communicator.h ../../include/Ice/ObjectFactoryF.h ../../include/Ice/RouterF.h ../../include/Ice/LocatorF.h ../../include/Ice/PluginF.h ../../include/Ice/ObjectFactory.h ../../include/Ice/ObjectAdapter.h ../../include/Ice/Object.h ../../include/Ice/IncomingAsyncF.h ../../include/Ice/Outgoing.h ../../include/Ice/BasicStream.h ../../include/Ice/Buffer.h ../../include/Ice/Protocol.h ../../include/IceUtil/Unicode.h ../../include/Ice/OutgoingAsync.h ../../include/Ice/Incoming.h ../../include/Ice/ServantLocatorF.h ../../include/Ice/ServantManagerF.h ../../include/Ice/IncomingAsync.h ../../include/Ice/Direct.h ../../include/Ice/UserExceptionFactory.h ../../include/Ice/FactoryTable.h ../../include/Ice/FactoryTableDef.h ../../include/IceUtil/StaticMutex.h ../../include/Ice/UserExceptionFactoryF.h ../../include/Ice/FacetMap.h ../../include/Ice/Locator.h ../../include/Ice/ProcessF.h ../../include/Ice/ServantLocator.h ../../include/Ice/Process.h ../../include/Ice/Application.h ../../include/Ice/Connection.h ../../include/Ice/Functional.h ../../include/IceUtil/Functional.h ../../include/Ice/Stream.h ../IceGrid/NodeSessionI.h ../IceGrid/Internal.h ../../include/Glacier2/Session.h ../../include/Glacier2/SSLInfo.h ../../include/IceGrid/Admin.h ../../include/Ice/SliceChecksumDict.h ../../include/IceGrid/Exception.h ../../include/IceGrid/Descriptor.h ../../include/IceGrid/Observer.h ../../include/IceGrid/Registry.h ../../include/IceGrid/Session.h ../IceGrid/Database.h ../../include/Freeze/ConnectionF.h ../IceGrid/StringApplicationInfoDict.h ../../include/Freeze/Map.h ../../include/Freeze/DB.h ../../include/Freeze/Exception.h ../../include/Freeze/Connection.h ../../include/Freeze/Transaction.h ../IceGrid/IdentityObjectInfoDict.h ../IceGrid/StringAdapterInfoDict.h ../IceGrid/ServerCache.h ../../include/IceGrid/Query.h ../IceGrid/Allocatable.h ../IceGrid/WaitQueue.h ../IceGrid/Cache.h ../IceGrid/Util.h ../../include/IceUtil/StringUtil.h ../../include/IceUtil/Random.h ../IceGrid/TraceLevels.h ../IceGrid/NodeCache.h ../IceGrid/ReplicaCache.h ../../include/IceStorm/IceStorm.h ../IceGrid/ObjectCache.h ../IceGrid/AllocatableObjectCache.h ../IceGrid/AdapterCache.h ../IceGrid/Topics.h diff --git a/cpp/src/IceGrid/Allocatable.cpp b/cpp/src/IceGrid/Allocatable.cpp index df21a3fbfdb..4fa81c13583 100644 --- a/cpp/src/IceGrid/Allocatable.cpp +++ b/cpp/src/IceGrid/Allocatable.cpp @@ -205,7 +205,7 @@ Allocatable::tryAllocate(const AllocationRequestPtr& request, bool fromRelease) } } -bool +void Allocatable::release(const SessionIPtr& session, bool fromRelease) { bool isReleased = false; @@ -218,6 +218,7 @@ Allocatable::release(const SessionIPtr& session, bool fromRelease) { wait(); } + assert(!_releasing); } if(!_session || _session != session) @@ -230,93 +231,95 @@ Allocatable::release(const SessionIPtr& session, bool fromRelease) _session = 0; released(session); + + isReleased = true; - if(!_releasing) + if(!fromRelease && !_requests.empty()) { - if(!_requests.empty()) - { - assert(!_parent); - _releasing = true; // Prevent new allocations. - hasRequests = true; - } - - isReleased = true; + assert(!_parent); + _releasing = true; // Prevent new allocations. + hasRequests = true; } } } - if(_parent) + if(isReleased) { - return _parent->release(session, fromRelease); + releasedNoSync(session); } - if(hasRequests) + if(_parent) + { + _parent->release(session, fromRelease); + } + else if(!fromRelease) { - while(true) + if(hasRequests) { - AllocationRequestPtr request; - AllocatablePtr allocatable = dequeueAllocationAttempt(request); - if(!allocatable) + while(true) { - Lock sync(*this); - assert(_count == 0 && _requests.empty()); - _releasing = false; - notifyAll(); - return true; - } + AllocationRequestPtr request; + AllocatablePtr allocatable = dequeueAllocationAttempt(request); + if(!allocatable) + { + Lock sync(*this); + assert(_count == 0 && _requests.empty()); + _releasing = false; + notifyAll(); + return; + } - // - // Try to allocate the allocatable with the request or if - // there's no request, just notify the allocatable that it can - // be allocated again. - // - if(request && allocatable->allocate(request, true) || !request && allocatable->canTryAllocate()) - { - while(true) + // + // Try to allocate the allocatable with the request or if + // there's no request, just notify the allocatable that it can + // be allocated again. + // + if(request && allocatable->allocate(request, true) || !request && allocatable->canTryAllocate()) { + while(true) { - Lock sync(*this); - assert(_count); - - allocatable = 0; - request = 0; - - // - // Check if there's other requests from the session - // waiting to allocate this allocatable. - // - list<pair<AllocatablePtr, AllocationRequestPtr> >::iterator p = _requests.begin(); - while(p != _requests.end()) { - if(p->second && p->second->getSession() == _session) + Lock sync(*this); + assert(_count); + + allocatable = 0; + request = 0; + + // + // Check if there's other requests from the session + // waiting to allocate this allocatable. + // + list<pair<AllocatablePtr, AllocationRequestPtr> >::iterator p = _requests.begin(); + while(p != _requests.end()) { - allocatable = p->first; - request = p->second; - _requests.erase(p); - break; + if(p->second && p->second->getSession() == _session) + { + allocatable = p->first; + request = p->second; + _requests.erase(p); + break; + } + ++p; + } + if(!allocatable) + { + _releasing = false; + notifyAll(); + return; // We're done, the allocatable was released (but is allocated again)! } - ++p; - } - if(!allocatable) - { - _releasing = false; - notifyAll(); - return true; // We're done, the allocatable was released (but is allocated again)! } - } - assert(allocatable && request); - allocatable->allocate(request, true); + assert(allocatable && request); + allocatable->allocate(request, true); + } } } } + else if(isReleased) + { + canTryAllocate(); // Notify that this allocatable can be allocated. + } } - else if(isReleased) - { - canTryAllocate(); // Notify that this allocatable can be allocated. - return true; // The allocatable was released. - } - return false; } SessionIPtr @@ -383,7 +386,8 @@ Allocatable::allocate(const AllocationRequestPtr& request, bool tryAllocate, boo { return false; } - + + bool allocationCount = 0; try { Lock sync(*this); @@ -406,7 +410,7 @@ Allocatable::allocate(const AllocationRequestPtr& request, bool tryAllocate, boo assert(_count == 0); _session = request->getSession(); ++_count; - return true; // Allocated + allocationCount = _count; } } else if(_session == request->getSession()) @@ -416,7 +420,7 @@ Allocatable::allocate(const AllocationRequestPtr& request, bool tryAllocate, boo assert(_count > 0); ++_count; request->allocated(this, _session); - return true; // Allocated + allocationCount = _count; } } else @@ -440,12 +444,16 @@ Allocatable::allocate(const AllocationRequestPtr& request, bool tryAllocate, boo } throw ex; } - - if(_parent) + + if(allocationCount == 1) + { + allocatedNoSync(request->getSession()); + } + else if(allocationCount == 0 && _parent) { _parent->release(request->getSession(), fromRelease); } - return false; + return allocationCount > 0; } bool @@ -460,30 +468,37 @@ Allocatable::allocateFromChild(const AllocationRequestPtr& request, { return false; } - - Lock sync(*this); - if((!_session || _session == request->getSession()) && (fromRelease || !_releasing)) + + int allocationCount = 0; { - if(!_session) + Lock sync(*this); + if((!_session || _session == request->getSession()) && (fromRelease || !_releasing)) { - try - { - allocated(request->getSession()); - } - catch(const SessionDestroyedException&) + if(!_session) { - // Ignore + try + { + allocated(request->getSession()); + } + catch(const SessionDestroyedException&) + { + // Ignore + } } + _session = request->getSession(); + ++_count; + allocationCount = _count; + } + else + { + queueAllocationAttempt(child, request, tryAllocate); } - _session = request->getSession(); - ++_count; - return true; // Allocated } - else + + if(allocationCount == 1) { - queueAllocationAttempt(child, request, tryAllocate); + allocatedNoSync(request->getSession()); } - - return false; + return allocationCount > 0; } diff --git a/cpp/src/IceGrid/Allocatable.h b/cpp/src/IceGrid/Allocatable.h index 13898863319..03ffc57fce6 100644 --- a/cpp/src/IceGrid/Allocatable.h +++ b/cpp/src/IceGrid/Allocatable.h @@ -80,7 +80,7 @@ public: virtual void checkAllocatable(); virtual bool allocate(const AllocationRequestPtr&, bool = false); virtual bool tryAllocate(const AllocationRequestPtr&, bool = false); - virtual bool release(const SessionIPtr&, bool = false); + virtual void release(const SessionIPtr&, bool = false); bool isAllocatable() const { return _allocatable; } SessionIPtr getSession() const; @@ -89,6 +89,9 @@ public: virtual void released(const SessionIPtr&) = 0; virtual bool canTryAllocate() { return false; } + virtual void allocatedNoSync(const SessionIPtr&) { ; } + virtual void releasedNoSync(const SessionIPtr&) { ; } + bool operator<(const Allocatable&) const; protected: diff --git a/cpp/src/IceGrid/Cache.h b/cpp/src/IceGrid/Cache.h index 51d7e9dcc57..65b246a2be7 100644 --- a/cpp/src/IceGrid/Cache.h +++ b/cpp/src/IceGrid/Cache.h @@ -19,7 +19,7 @@ namespace IceGrid { template<typename Key, typename Value> -class Cache : public IceUtil::Mutex +class Cache : public IceUtil::Monitor<IceUtil::Mutex> { typedef IceUtil::Handle<Value> ValuePtr; typedef std::map<Key, ValuePtr> ValueMap; @@ -142,7 +142,7 @@ public: virtual std::vector<std::string> getAll(const std::string& expr) { - IceUtil::Mutex::Lock sync(*this); + IceUtil::Monitor<IceUtil::Mutex>::Lock sync(*this); return getMatchingKeys<std::map<std::string,TPtr> >(Cache<std::string, T>::_entries, expr); } }; diff --git a/cpp/src/IceGrid/Database.cpp b/cpp/src/IceGrid/Database.cpp index ac63076458c..1f777a3675f 100644 --- a/cpp/src/IceGrid/Database.cpp +++ b/cpp/src/IceGrid/Database.cpp @@ -119,7 +119,8 @@ Database::Database(const Ice::ObjectAdapterPtr& registryAdapter, const IceStorm::TopicManagerPrx& topicManager, const string& instanceName, int sessionTimeout, - const TraceLevelsPtr& traceLevels) : + const TraceLevelsPtr& traceLevels, + bool master) : _communicator(registryAdapter->getCommunicator()), _internalAdapter(registryAdapter), _topicManager(topicManager), @@ -127,7 +128,7 @@ Database::Database(const Ice::ObjectAdapterPtr& registryAdapter, _instanceName(instanceName), _traceLevels(traceLevels), _sessionTimeout(sessionTimeout), - _master(_communicator->getProperties()->getProperty("IceGrid.Registry.ReplicaName").empty()), + _master(master), _replicaCache(_communicator, topicManager), _nodeCache(_communicator, _replicaCache, _master), _objectCache(_communicator), @@ -165,6 +166,7 @@ Database::Database(const Ice::ObjectAdapterPtr& registryAdapter, _nodeObserverTopic = new NodeObserverTopic(_topicManager, _internalAdapter); _registryObserverTopic = new RegistryObserverTopic(_topicManager); + _applicationObserverTopic = new ApplicationObserverTopic(_topicManager, _applications); _adapterObserverTopic = new AdapterObserverTopic(_topicManager, _adapters); _objectObserverTopic = new ObjectObserverTopic(_topicManager, _objects); @@ -391,24 +393,19 @@ Database::addApplication(const ApplicationInfo& info, AdminSessionI* session) checkForAddition(helper); load(helper, entries, info.uuid, info.revision); _updating.insert(info.descriptor.name); + + _replicaCache.startApplicationReplication(info.uuid, info.revision); } - // - // If the update is from an admin session, we synchronize the - // servers and throw if there's errors. - // - if(session) + if(_master) { - // - // Synchronize the servers on the nodes. If a server couldn't be - // deployed we unload the application and throw. - // try { for_each(entries.begin(), entries.end(), IceUtil::voidMemFun(&ServerEntry::sync)); } catch(const DeploymentException& ex) { + try { Lock sync(*this); entries.clear(); @@ -416,21 +413,14 @@ Database::addApplication(const ApplicationInfo& info, AdminSessionI* session) _updating.erase(info.descriptor.name); notifyAll(); } - try - { - for_each(entries.begin(), entries.end(), IceUtil::voidMemFun(&ServerEntry::sync)); - } - catch(const DeploymentException&) + catch(const DeploymentException& ex) { - // TODO: warning? + Ice::Error err(_traceLevels->logger); + err << "failed to rollback previous application `" << info.descriptor.name << "':\n" << ex.reason; } throw ex; } } - else - { - // TODO: XXX: Synchronize the servers here?! - } // // Save the application descriptor. @@ -446,6 +436,7 @@ Database::addApplication(const ApplicationInfo& info, AdminSessionI* session) _applicationObserverTopic->applicationAdded(serial, info); _replicaCache.waitForUpdateReplication("application", serial); + _replicaCache.finishApplicationReplication(info.uuid, info.revision); if(_traceLevels->application > 0) { @@ -491,6 +482,7 @@ Database::updateApplication(const ApplicationUpdateInfo& updt, AdminSessionI* se newDesc = helper.getDefinition(); _updating.insert(update.descriptor.name); + _replicaCache.startApplicationReplication(oldApp.uuid, update.revision); } finishUpdate(entries, update, oldApp, newDesc, session); @@ -532,6 +524,7 @@ Database::syncApplicationDescriptor(const ApplicationDescriptor& newDesc, AdminS reload(previous, helper, entries, oldApp.uuid, oldApp.revision + 1); _updating.insert(update.descriptor.name); + _replicaCache.startApplicationReplication(oldApp.uuid, update.revision); } finishUpdate(entries, update, oldApp, newDesc, session); @@ -579,6 +572,7 @@ Database::instantiateServer(const string& application, newDesc = helper.getDefinition(); _updating.insert(update.descriptor.name); + _replicaCache.startApplicationReplication(oldApp.uuid, update.revision); } finishUpdate(entries, update, oldApp, newDesc, session); @@ -752,9 +746,15 @@ Database::getReplicaInfo(const string& name) const } void -Database::replicaReceivedUpdate(const string& name, const string& update, int serial) +Database::replicaReceivedUpdate(const string& name, const string& update, int serial, const string& failure) +{ + _replicaCache.replicaReceivedUpdate(name, update, serial, failure); +} + +void +Database::waitForApplicationReplication(const string& application, int revision) { - _replicaCache.replicaReceivedUpdate(name, update, serial); + _replicaCache.waitForApplicationReplication(application, revision); } void @@ -1754,7 +1754,7 @@ Database::finishUpdate(ServerEntrySeq& entries, const ApplicationDescriptor& newDesc, AdminSessionI* session) { - if(session) + if(_master) { // // Synchronize the servers on the nodes. If a server couldn't be @@ -1766,6 +1766,7 @@ Database::finishUpdate(ServerEntrySeq& entries, } catch(const DeploymentException& ex) { + ApplicationUpdateInfo newUpdate; { Lock sync(*this); entries.clear(); @@ -1775,13 +1776,15 @@ Database::finishUpdate(ServerEntrySeq& entries, _updating.erase(newDesc.name); notifyAll(); } + try { for_each(entries.begin(), entries.end(), IceUtil::voidMemFun(&ServerEntry::sync)); } - catch(const DeploymentException&) + catch(const DeploymentException& ex) { - // TODO: warning? + Ice::Error err(_traceLevels->logger); + err << "failed to rollback previous application `" << oldApp.descriptor.name << "':\n" << ex.reason; } throw ex; } @@ -1808,6 +1811,7 @@ Database::finishUpdate(ServerEntrySeq& entries, _applicationObserverTopic->applicationUpdated(serial, update); _replicaCache.waitForUpdateReplication("application", serial); + _replicaCache.finishApplicationReplication(oldApp.uuid, update.revision); if(_traceLevels->application > 0) { diff --git a/cpp/src/IceGrid/Database.h b/cpp/src/IceGrid/Database.h index 0184729347f..e8226d776cd 100644 --- a/cpp/src/IceGrid/Database.h +++ b/cpp/src/IceGrid/Database.h @@ -51,7 +51,7 @@ class Database : public IceUtil::Shared, public IceUtil::Monitor<IceUtil::Mutex> public: Database(const Ice::ObjectAdapterPtr&, const IceStorm::TopicManagerPrx&, - const std::string&, int, const TraceLevelsPtr&); + const std::string&, int, const TraceLevelsPtr&, bool); virtual ~Database(); void destroy(); @@ -92,7 +92,8 @@ public: void addReplica(const std::string&, const ReplicaSessionIPtr&); RegistryInfo getReplicaInfo(const std::string&) const; InternalRegistryPrx getReplica(const std::string&) const; - void replicaReceivedUpdate(const std::string&, const std::string&, int); + void replicaReceivedUpdate(const std::string&, const std::string&, int, const std::string&); + void waitForApplicationReplication(const std::string&, int); void removeReplica(const std::string&, const ReplicaSessionIPtr&); Ice::StringSeq getAllReplicas(const std::string& = std::string()); @@ -183,6 +184,7 @@ private: AdminSessionI* _lock; std::string _lockUserId; int _applicationSerial; + int _replicaApplicationSerial; int _adapterSerial; int _objectSerial; std::set<std::string> _updating; diff --git a/cpp/src/IceGrid/IceGridNode.cpp b/cpp/src/IceGrid/IceGridNode.cpp index 26ddd08aaec..2e278db93b2 100644 --- a/cpp/src/IceGrid/IceGridNode.cpp +++ b/cpp/src/IceGrid/IceGridNode.cpp @@ -244,6 +244,28 @@ NodeService::start(int argc, char* argv[]) properties->setProperty("IceGrid.Node.ThreadPool.SizeMax", os.str()); } + size = properties->getPropertyAsIntWithDefault("Ice.ThreadPool.Client.Size", 0); + if(size <= 0) + { + properties->setProperty("Ice.ThreadPool.Client.Size", "1"); + size = 1; + } + sizeMax = properties->getPropertyAsIntWithDefault("Ice.ThreadPool.Client.SizeMax", 0); + if(sizeMax <= 0) + { + if(size >= sizeMax) + { + sizeMax = size * 10; + } + if(sizeMax < 100) + { + sizeMax = 100; + } + ostringstream os; + os << sizeMax; + properties->setProperty("Ice.ThreadPool.Client.SizeMax", os.str()); + } + // // Create the activator. // @@ -518,6 +540,9 @@ NodeService::start(int argc, char* argv[]) // We wait for the node to be registered with the registry // before to claim it's ready. // + // TODO: XXX: That's not correct. The node can't be + // interrupted if we wait here... + // _sessions.waitForCreate(); print(bundleName + " ready"); } diff --git a/cpp/src/IceGrid/Internal.ice b/cpp/src/IceGrid/Internal.ice index 6c5d1fa61be..7ebf0e02e56 100644 --- a/cpp/src/IceGrid/Internal.ice +++ b/cpp/src/IceGrid/Internal.ice @@ -202,7 +202,8 @@ interface Node * Destroy the given server. * **/ - ["amd", "ami"] idempotent void destroyServer(string name); + ["amd", "ami"] idempotent void destroyServer(string name, string uuid, int revision) + throws DeploymentException; /** * @@ -304,6 +305,13 @@ interface NodeSession /** * + * Ask the registry to load the servers on the node. + * + **/ + ["nonmutating", "cpp:const"] idempotent void loadServers(); + + /** + * * Get the name of the servers deployed on the node. * **/ @@ -311,6 +319,13 @@ interface NodeSession /** * + * Wait for the replication of the given application to be done. + * + **/ + ["ami", "cpp:const"] void waitForApplicationReplication(string application, int revision); + + /** + * * Destroy the session. * **/ @@ -376,7 +391,7 @@ interface ReplicaSession * before to continue. * **/ - void receivedUpdate(string name, int serial); + void receivedUpdate(string name, int serial, string failure); /** * diff --git a/cpp/src/IceGrid/InternalRegistryI.cpp b/cpp/src/IceGrid/InternalRegistryI.cpp index c679b7486cb..d821c44c024 100644 --- a/cpp/src/IceGrid/InternalRegistryI.cpp +++ b/cpp/src/IceGrid/InternalRegistryI.cpp @@ -113,10 +113,17 @@ InternalRegistryI::registerNode(const std::string& name, const NodeInfo& info, const Ice::Current& current) { - NodeSessionIPtr session = new NodeSessionI(_database, name, node, info); - NodeSessionPrx proxy = NodeSessionPrx::uncheckedCast(current.adapter->addWithUUID(session)); - _reaper->add(new SessionReapable<NodeSessionI>(current.adapter, session, proxy), _timeout); - return proxy; + try + { + NodeSessionIPtr session = new NodeSessionI(_database, name, node, info); + NodeSessionPrx proxy = NodeSessionPrx::uncheckedCast(current.adapter->addWithUUID(session)); + _reaper->add(new SessionReapable<NodeSessionI>(current.adapter, session, proxy), _timeout); + return proxy; + } + catch(const Ice::ObjectAdapterDeactivatedException&) + { + throw Ice::ObjectNotExistException(__FILE__, __LINE__, current.id, current.facet, current.operation); + } } ReplicaSessionPrx @@ -126,10 +133,18 @@ InternalRegistryI::registerReplica(const std::string& name, const DatabaseObserverPrx& dbObserver, const Ice::Current& current) { - ReplicaSessionIPtr session = new ReplicaSessionI(_database, _wellKnownObjects, name, info, registry, dbObserver); - ReplicaSessionPrx proxy = ReplicaSessionPrx::uncheckedCast(current.adapter->addWithUUID(session)); - _reaper->add(new SessionReapable<ReplicaSessionI>(current.adapter, session, proxy), _timeout); - return proxy; + try + { + ReplicaSessionIPtr session = new ReplicaSessionI(_database, _wellKnownObjects, name, info, registry, + dbObserver); + ReplicaSessionPrx proxy = ReplicaSessionPrx::uncheckedCast(current.adapter->addWithUUID(session)); + _reaper->add(new SessionReapable<ReplicaSessionI>(current.adapter, session, proxy), _timeout); + return proxy; + } + catch(const Ice::ObjectAdapterDeactivatedException&) + { + throw Ice::ObjectNotExistException(__FILE__, __LINE__, current.id, current.facet, current.operation); + } } void diff --git a/cpp/src/IceGrid/LocatorRegistryI.cpp b/cpp/src/IceGrid/LocatorRegistryI.cpp index 2efd89b93dd..bfe1fecdb2a 100644 --- a/cpp/src/IceGrid/LocatorRegistryI.cpp +++ b/cpp/src/IceGrid/LocatorRegistryI.cpp @@ -278,15 +278,20 @@ LocatorRegistryI::setAdapterDirectProxy_async(const Ice::AMD_LocatorRegistry_set ReplicaSessionPrx session = _session.getSession(); if(session) { - session->setAdapterDirectProxy_async(newMasterSetDirectProxyCB(cb), adapterId, "", proxy); - } - else - { - // - // TODO: Add a better exception? - // - cb->ice_exception(Ice::AdapterNotFoundException()); + try + { + session->setAdapterDirectProxy_async(newMasterSetDirectProxyCB(cb), adapterId, "", proxy); + return; + } + catch(const Ice::LocalException&) + { + } } + + // + // TODO: Add a better exception? + // + cb->ice_exception(Ice::AdapterNotFoundException()); return; } } @@ -351,15 +356,21 @@ LocatorRegistryI::setReplicatedAdapterDirectProxy_async( ReplicaSessionPrx session = _session.getSession(); if(session) { - session->setAdapterDirectProxy_async(newMasterSetDirectProxyCB(cb), adapterId, replicaGroupId, proxy); - } - else - { - // - // TODO: Add a better exception? - // - cb->ice_exception(Ice::AdapterNotFoundException()); + try + { + session->setAdapterDirectProxy_async(newMasterSetDirectProxyCB(cb), adapterId, replicaGroupId, + proxy); + return; + } + catch(const Ice::LocalException&) + { + } } + + // + // TODO: Add a better exception? + // + cb->ice_exception(Ice::AdapterNotFoundException()); return; } } diff --git a/cpp/src/IceGrid/NodeCache.cpp b/cpp/src/IceGrid/NodeCache.cpp index cc99eb4c07c..bb65d422d93 100644 --- a/cpp/src/IceGrid/NodeCache.cpp +++ b/cpp/src/IceGrid/NodeCache.cpp @@ -134,6 +134,18 @@ public: os << ex; _server->exception(NodeUnreachableException(_node, os.str())); } + catch(const DeploymentException& ex) + { + if(_traceLevels && _traceLevels->server > 1) + { + Ice::Trace out(_traceLevels->logger, _traceLevels->serverCat); + out << "couldn't unload `" << _id << "' on node `" << _node << "':\n" << ex.reason; + } + + ostringstream os; + os << "couldn't unload `" << _id << "' on node `" << _node << "':\n" << ex.reason; + _server->exception(DeploymentException(os.str())); + } catch(const Ice::Exception& ex) { if(_traceLevels && _traceLevels->server > 1) @@ -280,23 +292,6 @@ NodeEntry::setSession(const NodeSessionIPtr& session) Ice::Trace out(_cache.getTraceLevels()->logger, _cache.getTraceLevels()->nodeCat); out << "node `" << _name << "' up"; } - - ServerEntrySeq entries; - { - Lock sync(*this); - for(map<string, ServerEntryPtr>::const_iterator q = _servers.begin() ; q != _servers.end(); ++q) - { - entries.push_back(q->second); - } - } - - try - { - for_each(entries.begin(), entries.end(), IceUtil::voidMemFun(&ServerEntry::sync)); - } - catch(const DeploymentException&) - { - } } else { @@ -460,17 +455,17 @@ NodeEntry::loadServer(const ServerEntryPtr& entry, const ServerInfo& server, con } void -NodeEntry::destroyServer(const ServerEntryPtr& entry, const string& id) +NodeEntry::destroyServer(const ServerEntryPtr& entry, const ServerInfo& info) { try { if(_cache.getTraceLevels() && _cache.getTraceLevels()->server > 2) { Ice::Trace out(_cache.getTraceLevels()->logger, _cache.getTraceLevels()->serverCat); - out << "unloading `" << id << "' on node `" << _name << "'"; + out << "unloading `" << info.descriptor->id << "' on node `" << _name << "'"; } - AMI_Node_destroyServerPtr amiCB = new DestroyCB(_cache.getTraceLevels(), entry, id, _name); - getProxy()->destroyServer_async(amiCB, id); + AMI_Node_destroyServerPtr amiCB = new DestroyCB(_cache.getTraceLevels(), entry, info.descriptor->id, _name); + getProxy()->destroyServer_async(amiCB, info.descriptor->id, info.uuid, info.revision); } catch(const NodeUnreachableException& ex) { diff --git a/cpp/src/IceGrid/NodeCache.h b/cpp/src/IceGrid/NodeCache.h index ceea6d94b89..4ebec4f9a19 100644 --- a/cpp/src/IceGrid/NodeCache.h +++ b/cpp/src/IceGrid/NodeCache.h @@ -52,7 +52,7 @@ public: bool canRemove(); void loadServer(const ServerEntryPtr&, const ServerInfo&, const SessionIPtr&); - void destroyServer(const ServerEntryPtr&, const std::string&); + void destroyServer(const ServerEntryPtr&, const ServerInfo&); ServerInfo getServerInfo(const ServerInfo&, const SessionIPtr&); private: diff --git a/cpp/src/IceGrid/NodeI.cpp b/cpp/src/IceGrid/NodeI.cpp index 2d4b678c62e..1eed1b8bbf6 100644 --- a/cpp/src/IceGrid/NodeI.cpp +++ b/cpp/src/IceGrid/NodeI.cpp @@ -248,33 +248,25 @@ NodeI::loadServer_async(const AMD_Node_loadServerPtr& amdCB, } void -NodeI::destroyServer_async(const AMD_Node_destroyServerPtr& amdCB, const string& serverId, const Ice::Current& current) +NodeI::destroyServer_async(const AMD_Node_destroyServerPtr& amdCB, + const string& serverId, + const string& uuid, + int revision, + const Ice::Current& current) { Lock sync(*this); ++_serial; ServerIPtr server = ServerIPtr::dynamicCast(_adapter->find(createServerIdentity(serverId))); - if(server) - { - // - // Destroy the server object if it's loaded. - // - server->destroy(amdCB); - } - else + if(!server) { - // - // Delete the server directory from the disk. - // - try - { - removeRecursive(_serversDir + "/" + serverId); - } - catch(const string&) - { - } - amdCB->ice_response(); + server = new ServerI(this, 0, _serversDir, serverId, _waitTime); } + + // + // Destroy the server object if it's loaded. + // + server->destroy(amdCB, uuid, revision); } void @@ -667,7 +659,7 @@ NodeI::checkConsistencyNoSync(const Ice::StringSeq& servers) // try { - server->destroy(0); + server->destroy(0, "", 0); p = remove.erase(p); continue; } @@ -768,6 +760,12 @@ NodeI::checkConsistencyNoSync(const Ice::StringSeq& servers) } } +NodeSessionPrx +NodeI::getMasterNodeSession() const +{ + return _sessions.getMasterNodeSession(); +} + bool NodeI::canRemoveServerDirectory(const string& name) { diff --git a/cpp/src/IceGrid/NodeI.h b/cpp/src/IceGrid/NodeI.h index 8e4b54e1fd1..13b2adfa42d 100644 --- a/cpp/src/IceGrid/NodeI.h +++ b/cpp/src/IceGrid/NodeI.h @@ -40,7 +40,8 @@ public: virtual ~NodeI(); virtual void loadServer_async(const AMD_Node_loadServerPtr&, const ServerInfo&, bool, const Ice::Current&); - virtual void destroyServer_async(const AMD_Node_destroyServerPtr&, const std::string&, const Ice::Current&); + virtual void destroyServer_async(const AMD_Node_destroyServerPtr&, const std::string&, const std::string&, + int, const Ice::Current&); virtual void patch(const std::string&, const std::string&, const DistributionDescriptor&, bool, const Ice::Current&); @@ -65,6 +66,7 @@ public: NodeSessionPrx registerWithRegistry(const InternalRegistryPrx&); void setObserver(const NodeObserverPrx&); void checkConsistency(const NodeSessionPrx&); + NodeSessionPrx getMasterNodeSession() const; void addServer(const std::string&, const ServerIPtr&); void removeServer(const std::string&, const ServerIPtr&); diff --git a/cpp/src/IceGrid/NodeSessionI.cpp b/cpp/src/IceGrid/NodeSessionI.cpp index 2b19cfc59b1..35ca723dfa3 100644 --- a/cpp/src/IceGrid/NodeSessionI.cpp +++ b/cpp/src/IceGrid/NodeSessionI.cpp @@ -81,6 +81,19 @@ NodeSessionI::getObserver(const Ice::Current& current) const } } +void +NodeSessionI::loadServers(const Ice::Current& current) const +{ + // + // Get the server proxies to load them on the node. + // + Ice::StringSeq servers = _database->getAllNodeServers(_name); + for(Ice::StringSeq::const_iterator p = servers.begin(); p != servers.end(); ++p) + { + _database->getServer(*p); + } +} + Ice::StringSeq NodeSessionI::getServers(const Ice::Current& current) const { @@ -88,8 +101,20 @@ NodeSessionI::getServers(const Ice::Current& current) const } void +NodeSessionI::waitForApplicationReplication(const std::string& application, int revision, const Ice::Current&) const +{ + _database->waitForApplicationReplication(application, revision); +} + +void NodeSessionI::destroy(const Ice::Current& current) { + // + // TODO: XXX: If we set destroy to true now, it's possible that + // the node calls keepAlive on the sesion and tries to create the + // session after getting the ONE and before the node is removed + // from the db... + // { Lock sync(*this); if(_destroy) diff --git a/cpp/src/IceGrid/NodeSessionI.h b/cpp/src/IceGrid/NodeSessionI.h index 8d07ef35ace..e5e012cfc43 100644 --- a/cpp/src/IceGrid/NodeSessionI.h +++ b/cpp/src/IceGrid/NodeSessionI.h @@ -30,7 +30,9 @@ public: virtual void keepAlive(const LoadInfo&, const Ice::Current&); virtual int getTimeout(const Ice::Current&) const; virtual NodeObserverPrx getObserver(const Ice::Current&) const; + virtual void loadServers(const Ice::Current&) const; virtual Ice::StringSeq getServers(const Ice::Current&) const; + virtual void waitForApplicationReplication(const std::string&, int, const Ice::Current&) const; virtual void destroy(const Ice::Current&); const NodePrx& getNode() const; diff --git a/cpp/src/IceGrid/NodeSessionManager.cpp b/cpp/src/IceGrid/NodeSessionManager.cpp index d8767a3e0af..680b579369c 100644 --- a/cpp/src/IceGrid/NodeSessionManager.cpp +++ b/cpp/src/IceGrid/NodeSessionManager.cpp @@ -47,7 +47,7 @@ NodeSessionKeepAliveThread::createSession(const InternalRegistryPrx& registry, I int t = session->getTimeout(); if(t > 0) { - timeout = IceUtil::Time::seconds(t); + timeout = IceUtil::Time::seconds(t / 2); } if(traceLevels && traceLevels->replica > 0) @@ -150,6 +150,14 @@ NodeSessionManager::create(const NodeIPtr& node) _thread = new Thread(*this, _master); _thread->start(); + + // + // We can't wait for the session to be created here as the node + // adapter isn't activated yet and the registry would hang trying + // to load the servers on the node (when createSession invokes + // loadServers() on the session). + // + //_thread->tryCreateSession(_master); } void @@ -273,6 +281,7 @@ NodeSessionManager::syncReplicas(const InternalRegistryPrxSeq& replicas) { thread = new NodeSessionKeepAliveThread(*p, _node); thread->start(); + thread->tryCreateSession(*p); } _sessions.insert(make_pair((*p)->ice_getIdentity(), thread)); } @@ -309,7 +318,7 @@ NodeSessionManager::createSession(const InternalRegistryPrx& registry, IceUtil:: int t = session->getTimeout(); if(t > 0) { - timeout = IceUtil::Time::seconds(t); + timeout = IceUtil::Time::seconds(t / 2); } if(traceLevels && traceLevels->replica > 0) @@ -334,16 +343,6 @@ NodeSessionManager::createSession(const InternalRegistryPrx& registry, IceUtil:: } } - if(session) - { - _node->setObserver(session->getObserver()); - _node->checkConsistency(session); - } - else - { - _node->setObserver(0); - } - // // Get the list of replicas (either with the master session or the // IceGrid::Query interface) and make sure we have sessions opened @@ -387,6 +386,35 @@ NodeSessionManager::createSession(const InternalRegistryPrx& registry, IceUtil:: // IGNORE } + // + // Ask the master to load the servers on the node. Once this is + // done we check the consistency of the node to make sure old + // servers are removed. + // + // NOTE: it's important for this to be done after trying to + // register with the replicas. When the master loads the server + // some server might get activated and it's better if at that time + // the registry replicas (at least the ones which are up) have all + // established their session with the node. + // + try + { + if(session) + { + session->loadServers(); + _node->setObserver(session->getObserver()); + _node->checkConsistency(session); + } + else + { + _node->setObserver(0); + } + } + catch(const Ice::LocalException&) + { + // IGNORE + } + return session; } diff --git a/cpp/src/IceGrid/NodeSessionManager.h b/cpp/src/IceGrid/NodeSessionManager.h index 5188fb36409..a06d1f4e2c2 100644 --- a/cpp/src/IceGrid/NodeSessionManager.h +++ b/cpp/src/IceGrid/NodeSessionManager.h @@ -55,6 +55,8 @@ public: NodeSessionKeepAliveThreadPtr replicaAdded(const InternalRegistryPrx&); void replicaRemoved(const InternalRegistryPrx&); + NodeSessionPrx getMasterNodeSession() const { return _thread->getSession(); } + private: void syncReplicas(const InternalRegistryPrxSeq&); diff --git a/cpp/src/IceGrid/ReapThread.cpp b/cpp/src/IceGrid/ReapThread.cpp index f9f89e65765..22be3410b1e 100644 --- a/cpp/src/IceGrid/ReapThread.cpp +++ b/cpp/src/IceGrid/ReapThread.cpp @@ -26,7 +26,13 @@ ReapThread::run() { { Lock sync(*this); + if(_terminated) + { + break; + } + calcWakeInterval(); + // // If the wake interval is zero then we wait forever. // diff --git a/cpp/src/IceGrid/RegistryI.cpp b/cpp/src/IceGrid/RegistryI.cpp index 737277e9412..6c8ca721618 100644 --- a/cpp/src/IceGrid/RegistryI.cpp +++ b/cpp/src/IceGrid/RegistryI.cpp @@ -258,10 +258,10 @@ RegistryI::start(bool nowarn) registryTopicManagerId, "Registry"); - int timeout = properties->getPropertyAsIntWithDefault("IceGrid.Registry.NodeSessionTimeout", 10); - timeout = properties->getPropertyAsIntWithDefault("IceGrid.Registry.InternalSessionTimeout", timeout); + int t = properties->getPropertyAsIntWithDefault("IceGrid.Registry.NodeSessionTimeout", 10); + t = properties->getPropertyAsIntWithDefault("IceGrid.Registry.InternalSessionTimeout", t); - _database = new Database(registryAdapter, _iceStorm->getTopicManager(), _instanceName, timeout, _traceLevels); + _database = new Database(registryAdapter, _iceStorm->getTopicManager(), _instanceName, t, _traceLevels, _master); _wellKnownObjects = new WellKnownObjectsManager(_database); InternalRegistryPrx internalRegistry; diff --git a/cpp/src/IceGrid/ReplicaCache.cpp b/cpp/src/IceGrid/ReplicaCache.cpp index e60fd1a21e8..8eb940fa669 100644 --- a/cpp/src/IceGrid/ReplicaCache.cpp +++ b/cpp/src/IceGrid/ReplicaCache.cpp @@ -88,24 +88,11 @@ ReplicaCache::remove(const string& name) Ice::Trace out(_traceLevels->logger, _traceLevels->replicaCat); out << "replica `" << name << "' down"; } - } - { - IceUtil::Monitor<IceUtil::Mutex>::Lock sync(_waitForUpdatesMonitor); - map<string, set<string> >::iterator p = _waitForUpdates.begin(); - while(p != _waitForUpdates.end()) - { - p->second.erase(name); - if(p->second.empty()) - { - _waitForUpdates.erase(p++); - _waitForUpdatesMonitor.notifyAll(); - } - else - { - ++p; - } - } + // + // Remove the replica expected updates. + // + removeReplicaUpdates(name); } try @@ -193,13 +180,17 @@ ReplicaCache::getEndpoints(const string& name, const Ice::ObjectPrx& proxy) cons void ReplicaCache::waitForUpdateReplication(const string& name, int serial) { - IceUtil::Monitor<IceUtil::Mutex>::Lock sync(_waitForUpdatesMonitor); - - vector<string> replicas = getAll(""); - if(replicas.empty()) + Lock sync(*this); + if(_entries.empty()) { return; } + + vector<string> replicas; + for(map<string, ReplicaEntryPtr>::const_iterator s = _entries.begin(); s != _entries.end(); ++s) + { + replicas.push_back(s->first); + } ostringstream os; os << name << "-" << serial; @@ -215,19 +206,33 @@ ReplicaCache::waitForUpdateReplication(const string& name, int serial) map<string, set<string> >::const_iterator p = _waitForUpdates.find(key); if(p == _waitForUpdates.end()) { + map<string, map<string, string> >::iterator q = _updateFailures.find(key); + if(q != _updateFailures.end()) + { + map<string, string> failures = q->second; + _updateFailures.erase(q); + + ostringstream os; + for(map<string, string>::const_iterator r = failures.begin(); r != failures.end(); ++r) + { + os << "replication failed on replica `" << r->first << "':\n" << r->second << "\n"; + } + Ice::Error err(_traceLevels->logger); + err << os.str(); + } return; } else { - _waitForUpdatesMonitor.wait(); + wait(); } } } void -ReplicaCache::replicaReceivedUpdate(const string& name, const string& update, int serial) +ReplicaCache::replicaReceivedUpdate(const string& name, const string& update, int serial, const string& failure) { - IceUtil::Monitor<IceUtil::Mutex>::Lock sync(_waitForUpdatesMonitor); + Lock sync(*this); ostringstream os; os << update << "-" << serial; @@ -237,12 +242,87 @@ ReplicaCache::replicaReceivedUpdate(const string& name, const string& update, in if(p != _waitForUpdates.end()) { p->second.erase(name); + + if(!failure.empty()) + { + map<string, map<string, string> >::iterator q = _updateFailures.find(key); + if(q == _updateFailures.end()) + { + q = _updateFailures.insert(make_pair(key, map<string ,string>())).first; + } + q->second.insert(make_pair(name, failure)); + } + if(p->second.empty()) { _waitForUpdates.erase(p); - _waitForUpdatesMonitor.notifyAll(); + notifyAll(); + } + } +} + +void +ReplicaCache::startApplicationReplication(const string& application, int revision) +{ + // + // Add the given application to the set of application being + // replicated. + // + Lock sync(*this); + _applicationReplication.insert(application); +} + + +void +ReplicaCache::finishApplicationReplication(const string& application, int revision) +{ + // + // Notify waiting threads that the given application replication + // is completed. + // + Lock sync(*this); + _applicationReplication.erase(application); + notifyAll(); +} + +void +ReplicaCache::waitForApplicationReplication(const string& application, int revision) +{ + // + // Wait for the given application to be replicated. + // + Lock sync(*this); + while(_applicationReplication.find(application) != _applicationReplication.end()) + { + wait(); + } +} + +void +ReplicaCache::removeReplicaUpdates(const string& name) +{ + // Must b called within the synchronization. + + map<string, set<string> >::iterator p = _waitForUpdates.begin(); + bool notifyMonitor = false; + while(p != _waitForUpdates.end()) + { + p->second.erase(name); + if(p->second.empty()) + { + _waitForUpdates.erase(p++); + notifyMonitor = true; + } + else + { + ++p; } } + + if(notifyMonitor) + { + notifyAll(); + } } ReplicaEntry::ReplicaEntry(const std::string& name, const ReplicaSessionIPtr& session) : diff --git a/cpp/src/IceGrid/ReplicaCache.h b/cpp/src/IceGrid/ReplicaCache.h index 19aa8dcbc81..837a472c093 100644 --- a/cpp/src/IceGrid/ReplicaCache.h +++ b/cpp/src/IceGrid/ReplicaCache.h @@ -59,16 +59,23 @@ public: Ice::ObjectPrx getEndpoints(const std::string&, const Ice::ObjectPrx&) const; void waitForUpdateReplication(const std::string&, int); - void replicaReceivedUpdate(const std::string&, const std::string&, int); + void replicaReceivedUpdate(const std::string&, const std::string&, int, const std::string&); + + void startApplicationReplication(const std::string&, int); + void finishApplicationReplication(const std::string&, int); + void waitForApplicationReplication(const std::string&, int); private: + void removeReplicaUpdates(const std::string&); + const Ice::CommunicatorPtr _communicator; const IceStorm::TopicPrx _topic; const NodePrx _nodes; - IceUtil::Monitor<IceUtil::Mutex> _waitForUpdatesMonitor; std::map<std::string, std::set<std::string> > _waitForUpdates; + std::map<std::string, std::map<std::string, std::string> > _updateFailures; + std::set<std::string> _applicationReplication; }; }; diff --git a/cpp/src/IceGrid/ReplicaSessionI.cpp b/cpp/src/IceGrid/ReplicaSessionI.cpp index bbd70958f26..ecc9789c6f4 100644 --- a/cpp/src/IceGrid/ReplicaSessionI.cpp +++ b/cpp/src/IceGrid/ReplicaSessionI.cpp @@ -107,9 +107,9 @@ ReplicaSessionI::setAdapterDirectProxy(const string& adapterId, } void -ReplicaSessionI::receivedUpdate(const string& update, int serial, const Ice::Current&) +ReplicaSessionI::receivedUpdate(const string& update, int serial, const string& failure, const Ice::Current&) { - _database->replicaReceivedUpdate(_name, update, serial); + _database->replicaReceivedUpdate(_name, update, serial, failure); } void diff --git a/cpp/src/IceGrid/ReplicaSessionI.h b/cpp/src/IceGrid/ReplicaSessionI.h index bc29fe5d959..737ff4aa656 100644 --- a/cpp/src/IceGrid/ReplicaSessionI.h +++ b/cpp/src/IceGrid/ReplicaSessionI.h @@ -38,7 +38,7 @@ public: virtual void registerWellKnownObjects(const ObjectInfoSeq&, const Ice::Current&); virtual void setAdapterDirectProxy(const std::string&, const std::string&, const Ice::ObjectPrx&, const Ice::Current&); - virtual void receivedUpdate(const std::string&, int, const Ice::Current&); + virtual void receivedUpdate(const std::string&, int, const std::string&, const Ice::Current&); virtual void destroy(const Ice::Current&); virtual IceUtil::Time timestamp() const; diff --git a/cpp/src/IceGrid/ReplicaSessionManager.cpp b/cpp/src/IceGrid/ReplicaSessionManager.cpp index b6d099aad77..ab6895945f1 100644 --- a/cpp/src/IceGrid/ReplicaSessionManager.cpp +++ b/cpp/src/IceGrid/ReplicaSessionManager.cpp @@ -38,36 +38,58 @@ public: virtual void applicationAdded(int, const ApplicationInfo& application, const Ice::Current& current) { + string failure; try { _database->addApplication(application); } catch(const DeploymentException& ex) { - cerr << ex.reason << endl; + ostringstream os; + os << ex << ":\n" << ex.reason; + failure = os.str(); } - _manager.receivedUpdate("application", getSerial(current.ctx, "application")); + _manager.receivedUpdate("application", getSerial(current.ctx, "application"), failure); } virtual void applicationRemoved(int, const std::string& name, const Ice::Current& current) { + string failure; try { _database->removeApplication(name); } - catch(const Ice::Exception& ex) + catch(const ApplicationNotExistException& ex) { - cerr << ex << endl; + ostringstream os; + os << ex << ":\napplication: " << ex.name; + failure = os.str(); } - _manager.receivedUpdate("application", getSerial(current.ctx, "application")); + _manager.receivedUpdate("application", getSerial(current.ctx, "application"), failure); } virtual void applicationUpdated(int, const ApplicationUpdateInfo& update, const Ice::Current& current) { - _database->updateApplication(update); - _manager.receivedUpdate("application", getSerial(current.ctx, "application")); + string failure; + try + { + _database->updateApplication(update); + } + catch(const DeploymentException& ex) + { + ostringstream os; + os << ex << ":\n" << ex.reason; + failure = os.str(); + } + catch(const ApplicationNotExistException& ex) + { + ostringstream os; + os << ex << ":\napplication: " << ex.name; + failure = os.str(); + } + _manager.receivedUpdate("application", getSerial(current.ctx, "application"), failure); } virtual void @@ -79,22 +101,34 @@ public: virtual void adapterAdded(const AdapterInfo& info, const Ice::Current& current) { - _database->setAdapterDirectProxy(info.id, info.replicaGroupId, info.proxy); - _manager.receivedUpdate("adapter", getSerial(current.ctx, "adapter")); + string failure; + if(!_database->setAdapterDirectProxy(info.id, info.replicaGroupId, info.proxy)) + { + failure = "adapter `" + info.id + "' already exists and belongs to an application"; + } + _manager.receivedUpdate("adapter", getSerial(current.ctx, "adapter"), failure); } virtual void adapterUpdated(const AdapterInfo& info, const Ice::Current& current) { - _database->setAdapterDirectProxy(info.id, info.replicaGroupId, info.proxy); - _manager.receivedUpdate("adapter", getSerial(current.ctx, "adapter")); + string failure; + if(!_database->setAdapterDirectProxy(info.id, info.replicaGroupId, info.proxy)) + { + failure = "adapter `" + info.id + "' already exists and belongs to an application"; + } + _manager.receivedUpdate("adapter", getSerial(current.ctx, "adapter"), failure); } virtual void adapterRemoved(const std::string& id, const Ice::Current& current) { - _database->setAdapterDirectProxy(id, "", 0); - _manager.receivedUpdate("adapter", getSerial(current.ctx, "adapter")); + string failure; + if(!_database->setAdapterDirectProxy(id, "", 0)) + { + failure = "adapter `" + id + "' already exists and belongs to an application"; + } + _manager.receivedUpdate("adapter", getSerial(current.ctx, "adapter"), failure); } virtual void @@ -106,22 +140,56 @@ public: virtual void objectAdded(const ObjectInfo& info, const Ice::Current& current) { - _database->addObject(info, false); - _manager.receivedUpdate("object", getSerial(current.ctx, "object")); + string failure; + try + { + _database->addObject(info, true); + } + catch(const ObjectExistsException& ex) + { + ostringstream os; + os << ex << ":\n"; + os << "id: " << info.proxy->ice_getCommunicator()->identityToString(info.proxy->ice_getIdentity()); + failure = os.str(); + } + _manager.receivedUpdate("object", getSerial(current.ctx, "object"), failure); } virtual void objectUpdated(const ObjectInfo& info, const Ice::Current& current) { - _database->updateObject(info.proxy); - _manager.receivedUpdate("object", getSerial(current.ctx, "object")); + string failure; + try + { + _database->addObject(info, true); + } + catch(const DeploymentException& ex) + { + ostringstream os; + os << ex << ":\n" << ex.reason; + failure = os.str(); + } + _manager.receivedUpdate("object", getSerial(current.ctx, "object"), failure); } virtual void objectRemoved(const Ice::Identity& id, const Ice::Current& current) { - _database->removeObject(id); - _manager.receivedUpdate("object", getSerial(current.ctx, "object")); + string failure; + try + { + _database->removeObject(id); + } + catch(const DeploymentException& ex) + { + ostringstream os; + os << ex << ":\n" << ex.reason; + failure = os.str(); + } + catch(const ObjectNotRegisteredException& ex) + { + } + _manager.receivedUpdate("object", getSerial(current.ctx, "object"), failure); } private: @@ -237,12 +305,22 @@ ReplicaSessionManager::destroy() } void -ReplicaSessionManager::receivedUpdate(const string& update, int serial) +ReplicaSessionManager::receivedUpdate(const string& update, int serial, const string& failure) { ReplicaSessionPrx session = _thread->getSession(); if(session) { - session->receivedUpdate(update, serial); + try + { + session->receivedUpdate(update, serial, failure); + } + catch(const Ice::LocalException&) + { + } + } + if(!failure.empty()) + { + _thread->destroyActiveSession(); } } @@ -312,7 +390,7 @@ ReplicaSessionManager::createSession(const InternalRegistryPrx& registry, IceUti int t = session->getTimeout(); if(t > 0) { - timeout = IceUtil::Time::seconds(t); + timeout = IceUtil::Time::seconds(t / 2); } // diff --git a/cpp/src/IceGrid/ReplicaSessionManager.h b/cpp/src/IceGrid/ReplicaSessionManager.h index 3821e74557e..a1bc90bf326 100644 --- a/cpp/src/IceGrid/ReplicaSessionManager.h +++ b/cpp/src/IceGrid/ReplicaSessionManager.h @@ -41,7 +41,7 @@ public: NodePrxSeq getNodes() const; void destroy(); - void receivedUpdate(const std::string&, int); + void receivedUpdate(const std::string&, int, const std::string&); void registerAllWellKnownObjects(); ReplicaSessionPrx getSession() const { return _thread->getSession(); } diff --git a/cpp/src/IceGrid/ServerCache.cpp b/cpp/src/IceGrid/ServerCache.cpp index 60f15774c7b..d76972f32f0 100644 --- a/cpp/src/IceGrid/ServerCache.cpp +++ b/cpp/src/IceGrid/ServerCache.cpp @@ -93,7 +93,8 @@ ServerCache::add(const ServerInfo& info) if(_traceLevels && _traceLevels->server > 0) { Ice::Trace out(_traceLevels->logger, _traceLevels->serverCat); - out << "added server `" << info.descriptor->id << "'"; + + out << "added server `" << info.descriptor->id << "' (`" << info.uuid << "', `" << info.revision << "')"; } return entry; @@ -598,7 +599,7 @@ ServerEntry::syncImpl(bool waitForUpdate) { try { - _cache.getNodeCache().get(destroy.node)->destroyServer(this, destroy.descriptor->id); + _cache.getNodeCache().get(destroy.node)->destroyServer(this, destroy); } catch(NodeNotExistException&) { @@ -704,7 +705,7 @@ ServerEntry::loadCallback(const ServerPrx& proxy, const AdapterPrxDict& adpts, i { try { - _cache.getNodeCache().get(destroy.node)->destroyServer(this, destroy.descriptor->id); + _cache.getNodeCache().get(destroy.node)->destroyServer(this, destroy); } catch(NodeNotExistException&) { @@ -896,6 +897,22 @@ ServerEntry::allocated(const SessionIPtr& session) } void +ServerEntry::allocatedNoSync(const SessionIPtr& session) +{ + { + Lock sync(*this); + if(!_updated || + _loaded.get() && _loaded->descriptor->activation != "session" || + _load.get() && _load->descriptor->activation != "session") + { + return; + } + } + + syncImpl(true); // We sync here to ensure the "session" server will be activated. +} + +void ServerEntry::released(const SessionIPtr& session) { assert(_loaded.get() || _load.get()); @@ -969,29 +986,18 @@ ServerEntry::released(const SessionIPtr& session) } } -bool -ServerEntry::release(const SessionIPtr& session, bool fromRelease) +void +ServerEntry::releaseNoSync(const SessionIPtr& session) { - bool released = Allocatable::release(session, fromRelease); - - // - // If this server was released (and not from another release - // call), we check if it needs to be synced. - // - if(released && !fromRelease) { + Lock sync(*this); + if(!_updated || + _loaded.get() && _loaded->descriptor->activation != "session" || + _load.get() && _load->descriptor->activation != "session") { - Lock sync(*this); - if(!_updated || - _loaded.get() && _loaded->descriptor->activation != "session" || - _load.get() && _load->descriptor->activation != "session") - { - return true; - } + return; } - - syncImpl(false); // We sync here to ensure the "session" server will be shutdown. } - - return released; + + syncImpl(false); // We sync here to ensure the "session" server will be shutdown. } diff --git a/cpp/src/IceGrid/ServerCache.h b/cpp/src/IceGrid/ServerCache.h index eccf5485fa2..ce19eec144a 100644 --- a/cpp/src/IceGrid/ServerCache.h +++ b/cpp/src/IceGrid/ServerCache.h @@ -58,8 +58,9 @@ public: void exception(const Ice::Exception&); virtual void allocated(const SessionIPtr&); + virtual void allocatedNoSync(const SessionIPtr&); virtual void released(const SessionIPtr&); - virtual bool release(const SessionIPtr&, bool); + virtual void releaseNoSync(const SessionIPtr&); private: diff --git a/cpp/src/IceGrid/ServerI.cpp b/cpp/src/IceGrid/ServerI.cpp index 2fca2d0c00d..9c24a7a2dec 100644 --- a/cpp/src/IceGrid/ServerI.cpp +++ b/cpp/src/IceGrid/ServerI.cpp @@ -151,7 +151,9 @@ public: catch(const ServerStartException& ex) { Ice::Error out(_traceLevels->logger); - out << "couldn't reactivate server `" + _server->getId() + "' with `always' activation mode after failure:\n" << ex.reason; + out << "couldn't reactivate server `" << _server->getId() + << "' with `always' activation mode after failure:\n" + << ex.reason; } } } @@ -162,6 +164,31 @@ private: const TraceLevelsPtr _traceLevels; }; +class WaitForApplicationReplicationCB : public AMI_NodeSession_waitForApplicationReplication +{ +public: + + WaitForApplicationReplicationCB(const ServerIPtr& server) : _server(server) + { + } + + virtual void + ice_response() + { + _server->activate(); + } + + virtual void + ice_exception(const Ice::Exception&) + { + _server->activate(); + } + +private: + + const ServerIPtr _server; +}; + struct EnvironmentEval : std::unary_function<string, string> { string @@ -837,6 +864,12 @@ ServerI::start(ServerActivation activation, const AMD_Server_startPtr& amdCB) } else if(_state == Active) { + if(activation == Always) + { + return; // Nothing to do, it's already active (and we + // don't want to throw because it would be + // considered as an error.) + } throw ServerStartException(_id, "The server is already active."); } else if(_state == Destroying) @@ -885,12 +918,13 @@ ServerI::load(const AMD_Node_loadServerPtr& amdCB, const ServerInfo& info, bool // In any case, we update the server application revision if // it needs to be updated. // - if(!fromMaster) + if(!_info.uuid.empty() && !fromMaster) { if(_info.uuid != info.uuid) { - throw DeploymentException("server descriptor from replica is from another application (`" + - info.uuid + "'"); + DeploymentException ex; + ex.reason = "server descriptor from replica is from another application (`" + info.uuid + "')"; + throw ex; } else if(_info.revision > info.revision) { @@ -902,7 +936,18 @@ ServerI::load(const AMD_Node_loadServerPtr& amdCB, const ServerInfo& info, bool } } - if(_info.descriptor && _info.sessionId == info.sessionId && + // + // Otherwise, if the following conditions are met: + // + // - the server is already loaded. + // - the descriptor is from the master and the session id didn't change or it's coming from a slave. + // - the descriptor is the same as the one loaded. + // + // we don't re-load the server. We just return the server + // proxy and the proxies of its adapters. + // + if(_info.descriptor && + (!fromMaster || _info.sessionId == info.sessionId) && (_info.uuid == info.uuid && _info.revision == info.revision || descriptorEqual(_node->getCommunicator(), _info.descriptor, info.descriptor))) { @@ -956,11 +1001,35 @@ ServerI::load(const AMD_Node_loadServerPtr& amdCB, const ServerInfo& info, bool } void -ServerI::destroy(const AMD_Node_destroyServerPtr& amdCB) +ServerI::destroy(const AMD_Node_destroyServerPtr& amdCB, const string& uuid, int revision) { ServerCommandPtr command; { Lock sync(*this); + if(!uuid.empty()) // Empty if from checkConsistency. + { + if(_info.uuid.empty()) + { + DeploymentException ex; + ex.reason = "server doesn't exist (`" + uuid + "')"; + throw ex; + } + else if(_info.uuid != uuid) + { + DeploymentException ex; + ex.reason = "server descriptor from replica is from another application (`" + uuid + "')"; + throw ex; + } + else if(_info.revision > revision) + { + ostringstream os; + os << "server descriptor from replica is too old:\n"; + os << "current revision: " << _info.revision << "\n"; + os << "replica revision: " << revision; + throw DeploymentException(os.str()); + } + } + if(!_destroy) { _destroy = new DestroyCommand(this, _state != Inactive && _state != Loading && _state != Patching); @@ -1180,8 +1249,10 @@ ServerI::activationFailed(bool destroyed) void ServerI::activate() { - ServerDescriptorPtr desc; + ServerInfo info; ServerAdapterDict adpts; + bool waitForReplication; + #ifndef _WIN32 uid_t uid; gid_t gid; @@ -1189,8 +1260,18 @@ ServerI::activate() { Lock sync(*this); assert(_state == Activating && _info.descriptor); - desc = _info.descriptor; + info = _info; adpts = _adapters; + + // + // The first time the server is started, we ensure that the + // replication of its descriptor is completed. This is to make + // sure all the replicas are up to date when the server + // starts for the first time with a given descriptor. + // + waitForReplication = _waitForReplication; + _waitForReplication = false; + #ifndef _WIN32 uid = _uid; gid = _gid; @@ -1198,8 +1279,25 @@ ServerI::activate() } // + // We first ensure that the application is replicated on all the + // registries before to start the server. We only do this each + // time the server is updated or the initialy loaded on the node. + // + if(waitForReplication) + { + NodeSessionPrx session = _node->getMasterNodeSession(); + if(session) + { + AMI_NodeSession_waitForApplicationReplicationPtr cb = new WaitForApplicationReplicationCB(this); + _node->getMasterNodeSession()->waitForApplicationReplication_async(cb, info.uuid, info.revision); + return; + } + } + + // // Compute the server command line options. // + ServerDescriptorPtr desc = info.descriptor; Ice::StringSeq options; copy(desc->options.begin(), desc->options.end(), back_inserter(options)); options.push_back("--Ice.Config=" + _serverDir + "/config/config"); @@ -1608,6 +1706,7 @@ ServerI::updateImpl(const ServerInfo& info) assert(_load); _info = info; + _waitForReplication = true; if(!_info.descriptor) { @@ -2157,7 +2256,8 @@ ServerI::setStateNoSync(InternalServerState st, const std::string& reason) } else if(_state == Inactive) { - if(_activation == Disabled && _previousActivation == Always && + if(_activation == Always || + _activation == Disabled && _previousActivation == Always && _disableOnFailure > 0 && _failureTime != IceUtil::Time()) { // @@ -2168,15 +2268,16 @@ ServerI::setStateNoSync(InternalServerState st, const std::string& reason) // callback is executed. // _timer = new DelayedStart(this, _node->getTraceLevels()); - _node->getWaitQueue()->add(_timer, IceUtil::Time::seconds(_disableOnFailure) + IceUtil::Time::milliSeconds(500)); - } - else if(_activation == Always) - { - if(!_start) - { - _start = new StartCommand(this, _node->getWaitQueue(), _activationTimeout); - } - } + _node->getWaitQueue()->add(_timer, + IceUtil::Time::seconds(_disableOnFailure) + IceUtil::Time::milliSeconds(500)); + } +// else if(_activation == Always) +// { +// if(!_start) +// { +// _start = new StartCommand(this, _node->getWaitQueue(), _activationTimeout); +// } +// } } // diff --git a/cpp/src/IceGrid/ServerI.h b/cpp/src/IceGrid/ServerI.h index f4851a0cae1..60377b48e96 100644 --- a/cpp/src/IceGrid/ServerI.h +++ b/cpp/src/IceGrid/ServerI.h @@ -90,7 +90,7 @@ public: void start(ServerActivation, const AMD_Server_startPtr& = AMD_Server_startPtr()); void load(const AMD_Node_loadServerPtr&, const ServerInfo&, bool); - void destroy(const AMD_Node_destroyServerPtr&); + void destroy(const AMD_Node_destroyServerPtr&, const std::string&, int); bool startPatch(bool); bool waitForPatch(); void finishPatch(); @@ -153,6 +153,7 @@ private: IceUtil::Time _failureTime; ServerActivation _previousActivation; WaitItemPtr _timer; + bool _waitForReplication; DestroyCommandPtr _destroy; StopCommandPtr _stop; diff --git a/cpp/src/IceGrid/SessionManager.h b/cpp/src/IceGrid/SessionManager.h index da7b837cb2b..fc358d19a87 100644 --- a/cpp/src/IceGrid/SessionManager.h +++ b/cpp/src/IceGrid/SessionManager.h @@ -28,6 +28,7 @@ class SessionKeepAliveThread : public IceUtil::Thread, public IceUtil::Monitor<I Disconnected, Connected, Retry, + DestroySession, Destroyed }; @@ -46,6 +47,7 @@ public: FPrx factory = _factory; bool updateState = false; IceUtil::Time timeout = IceUtil::Time::seconds(10); + bool destroy = false; while(true) { @@ -116,9 +118,9 @@ public: { Lock sync(*this); - if(_state != Destroyed && _state != Retry) + if(_state == Connected || _state == Disconnected) { - timedWait(timeout); // TODO: XXX: Timeout / 2 instead? + timedWait(timeout); } if(_state == Destroyed) @@ -126,9 +128,22 @@ public: break; } - updateState = _state == Retry; + if(_state == DestroySession && session) + { + destroy = true; + } + + updateState = _state == Retry || _state == DestroySession; factory = _factory; } + + if(destroy) + { + assert(session); + destroySession(session); + destroy = false; + session = 0; + } } // @@ -184,6 +199,14 @@ public: } void + destroyActiveSession() + { + Lock sync(*this); + _state = DestroySession; + notifyAll(); + } + + void terminate() { Lock sync(*this); diff --git a/cpp/src/IceGrid/Topics.cpp b/cpp/src/IceGrid/Topics.cpp index 6fd3f381a4e..6eebdae97bc 100644 --- a/cpp/src/IceGrid/Topics.cpp +++ b/cpp/src/IceGrid/Topics.cpp @@ -197,7 +197,15 @@ RegistryObserverTopic::registryUp(const RegistryInfo& info) } updateSerial(_serial + 1); _registries.insert(make_pair(info.name, info)); - _publisher->registryUp(info); + try + { + _publisher->registryUp(info); + } + catch(const Ice::LocalException& ex) + { + Ice::Warning out(_publisher->ice_getCommunicator()->getLogger()); + out << "unexpected exception while publishing `registryUp' update:\n" << ex; + } } void @@ -212,7 +220,15 @@ RegistryObserverTopic::registryDown(const string& name) if(_registries.find(name) != _registries.end()) { _registries.erase(name); - _publisher->registryDown(name); + try + { + _publisher->registryDown(name); + } + catch(const Ice::LocalException& ex) + { + Ice::Warning out(_publisher->ice_getCommunicator()->getLogger()); + out << "unexpected exception while publishing `registryDown' update:\n" << ex; + } } } @@ -265,7 +281,15 @@ NodeObserverTopic::nodeUp(const NodeDynamicInfo& info, const Ice::Current& curre } updateSerial(_serial + 1); _nodes.insert(make_pair(info.info.name, info)); - _publisher->nodeUp(info); + try + { + _publisher->nodeUp(info); + } + catch(const Ice::LocalException& ex) + { + Ice::Warning out(_publisher->ice_getCommunicator()->getLogger()); + out << "unexpected exception while publishing 'nodeUp' update:\n" << ex; + } } void @@ -316,7 +340,15 @@ NodeObserverTopic::updateServer(const string& node, const ServerDynamicInfo& ser servers.push_back(server); } - _publisher->updateServer(node, server); + try + { + _publisher->updateServer(node, server); + } + catch(const Ice::LocalException& ex) + { + Ice::Warning out(_publisher->ice_getCommunicator()->getLogger()); + out << "unexpected exception while publishing `updateServer' update:\n" << ex; + } } void @@ -361,7 +393,15 @@ NodeObserverTopic::updateAdapter(const string& node, const AdapterDynamicInfo& a adapters.push_back(adapter); } - _publisher->updateAdapter(node, adapter); + try + { + _publisher->updateAdapter(node, adapter); + } + catch(const Ice::LocalException& ex) + { + Ice::Warning out(_publisher->ice_getCommunicator()->getLogger()); + out << "unexpected exception while publishing `updateAdapter' update:\n" << ex; + } } void @@ -378,7 +418,15 @@ NodeObserverTopic::nodeDown(const string& name) if(_nodes.find(name) != _nodes.end()) { _nodes.erase(name); - _publisher->nodeDown(name); + try + { + _publisher->nodeDown(name); + } + catch(const Ice::LocalException& ex) + { + Ice::Warning out(_publisher->ice_getCommunicator()->getLogger()); + out << "unexpected exception while publishing `nodeDown' update:\n" << ex; + } } } @@ -422,7 +470,15 @@ ApplicationObserverTopic::applicationInit(int serial, const ApplicationInfoSeq& { _applications.insert(make_pair(p->descriptor.name, *p)); } - _publisher->applicationInit(serial, apps, getContext("application", serial)); + try + { + _publisher->applicationInit(serial, apps, getContext("application", serial)); + } + catch(const Ice::LocalException& ex) + { + Ice::Warning out(_publisher->ice_getCommunicator()->getLogger()); + out << "unexpected exception while publishing `applicationInit' update:\n" << ex; + } } void @@ -435,7 +491,15 @@ ApplicationObserverTopic::applicationAdded(int serial, const ApplicationInfo& in } updateSerial(serial); _applications.insert(make_pair(info.descriptor.name, info)); - _publisher->applicationAdded(serial, info, getContext("application", serial)); + try + { + _publisher->applicationAdded(serial, info, getContext("application", serial)); + } + catch(const Ice::LocalException& ex) + { + Ice::Warning out(_publisher->ice_getCommunicator()->getLogger()); + out << "unexpected exception while publishing `applicationAdded' update:\n" << ex; + } } void @@ -448,7 +512,15 @@ ApplicationObserverTopic::applicationRemoved(int serial, const string& name) } updateSerial(serial); _applications.erase(name); - _publisher->applicationRemoved(serial, name, getContext("application", serial)); + try + { + _publisher->applicationRemoved(serial, name, getContext("application", serial)); + } + catch(const Ice::LocalException& ex) + { + Ice::Warning out(_publisher->ice_getCommunicator()->getLogger()); + out << "unexpected exception while publishing `applicationRemoved' update:\n" << ex; + } } void @@ -492,7 +564,15 @@ ApplicationObserverTopic::applicationUpdated(int serial, const ApplicationUpdate { assert(false); } - _publisher->applicationUpdated(serial, info, getContext("application", serial)); + try + { + _publisher->applicationUpdated(serial, info, getContext("application", serial)); + } + catch(const Ice::LocalException& ex) + { + Ice::Warning out(_publisher->ice_getCommunicator()->getLogger()); + out << "unexpected exception while publishing `applicationUpdated' update:\n" << ex; + } } void @@ -537,7 +617,15 @@ AdapterObserverTopic::adapterInit(int serial, const AdapterInfoSeq& adpts) { _adapters.insert(make_pair(q->id, *q)); } - _publisher->adapterInit(adpts, getContext("adapter", serial)); + try + { + _publisher->adapterInit(adpts, getContext("adapter", serial)); + } + catch(const Ice::LocalException& ex) + { + Ice::Warning out(_publisher->ice_getCommunicator()->getLogger()); + out << "unexpected exception while publishing `adapterInit' update:\n" << ex; + } } void @@ -550,7 +638,15 @@ AdapterObserverTopic::adapterAdded(int serial, const AdapterInfo& info) } updateSerial(serial); _adapters.insert(make_pair(info.id, info)); - _publisher->adapterAdded(info, getContext("adapter", serial)); + try + { + _publisher->adapterAdded(info, getContext("adapter", serial)); + } + catch(const Ice::LocalException& ex) + { + Ice::Warning out(_publisher->ice_getCommunicator()->getLogger()); + out << "unexpected exception while publishing `adapterAdded' update:\n" << ex; + } } void @@ -563,7 +659,15 @@ AdapterObserverTopic::adapterUpdated(int serial, const AdapterInfo& info) } updateSerial(serial); _adapters[info.id] = info; - _publisher->adapterUpdated(info, getContext("adapter", serial)); + try + { + _publisher->adapterUpdated(info, getContext("adapter", serial)); + } + catch(const Ice::LocalException& ex) + { + Ice::Warning out(_publisher->ice_getCommunicator()->getLogger()); + out << "unexpected exception while publishing `adapterUpdated' update:\n" << ex; + } } void @@ -576,7 +680,15 @@ AdapterObserverTopic::adapterRemoved(int serial, const string& id) } updateSerial(serial); _adapters.erase(id); - _publisher->adapterRemoved(id, getContext("adapter", serial)); + try + { + _publisher->adapterRemoved(id, getContext("adapter", serial)); + } + catch(const Ice::LocalException& ex) + { + Ice::Warning out(_publisher->ice_getCommunicator()->getLogger()); + out << "unexpected exception while publishing `adapterRemoved' update:\n" << ex; + } } void @@ -620,7 +732,15 @@ ObjectObserverTopic::objectInit(int serial, const ObjectInfoSeq& objects) { _objects.insert(make_pair(r->proxy->ice_getIdentity(), *r)); } - _publisher->objectInit(objects, getContext("object", serial)); + try + { + _publisher->objectInit(objects, getContext("object", serial)); + } + catch(const Ice::LocalException& ex) + { + Ice::Warning out(_publisher->ice_getCommunicator()->getLogger()); + out << "unexpected exception while publishing `objectInit' update:\n" << ex; + } } void @@ -633,7 +753,15 @@ ObjectObserverTopic::objectAdded(int serial, const ObjectInfo& info) } updateSerial(serial); _objects.insert(make_pair(info.proxy->ice_getIdentity(), info)); - _publisher->objectAdded(info, getContext("object", serial)); + try + { + _publisher->objectAdded(info, getContext("object", serial)); + } + catch(const Ice::LocalException& ex) + { + Ice::Warning out(_publisher->ice_getCommunicator()->getLogger()); + out << "unexpected exception while publishing `objectAdded' update:\n" << ex; + } } void @@ -646,7 +774,15 @@ ObjectObserverTopic::objectUpdated(int serial, const ObjectInfo& info) } updateSerial(serial); _objects[info.proxy->ice_getIdentity()] = info; - _publisher->objectUpdated(info, getContext("object", serial)); + try + { + _publisher->objectUpdated(info, getContext("object", serial)); + } + catch(const Ice::LocalException& ex) + { + Ice::Warning out(_publisher->ice_getCommunicator()->getLogger()); + out << "unexpected exception while publishing `objectUpdated' update:\n" << ex; + } } void @@ -659,7 +795,15 @@ ObjectObserverTopic::objectRemoved(int serial, const Ice::Identity& id) } updateSerial(serial); _objects.erase(id); - _publisher->objectRemoved(id, getContext("object", serial)); + try + { + _publisher->objectRemoved(id, getContext("object", serial)); + } + catch(const Ice::LocalException& ex) + { + Ice::Warning out(_publisher->ice_getCommunicator()->getLogger()); + out << "unexpected exception while publishing `objectRemoved' update:\n" << ex; + } } void |