diff options
author | Dwayne Boone <dwayne@zeroc.com> | 2015-10-28 16:07:56 -0230 |
---|---|---|
committer | Dwayne Boone <dwayne@zeroc.com> | 2015-10-28 16:07:56 -0230 |
commit | be5e69faebc1e7cb55938550440c8b8bc19c1d31 (patch) | |
tree | d5cb233ca00e0ca1aa07993fea95486e266754f5 /cpp/src | |
parent | Fixed merge issue from previous commit (diff) | |
download | ice-be5e69faebc1e7cb55938550440c8b8bc19c1d31.tar.bz2 ice-be5e69faebc1e7cb55938550440c8b8bc19c1d31.tar.xz ice-be5e69faebc1e7cb55938550440c8b8bc19c1d31.zip |
Convert IceGrid/IceStorm to use LMDB database rather than Freeze/BdB
Diffstat (limited to 'cpp/src')
46 files changed, 3563 insertions, 3674 deletions
diff --git a/cpp/src/IceDB/.depend.mak b/cpp/src/IceDB/.depend.mak new file mode 100644 index 00000000000..17a7ab482d8 --- /dev/null +++ b/cpp/src/IceDB/.depend.mak @@ -0,0 +1,75 @@ + +IceDB.obj: \ + IceDB.cpp \ + "IceDB.h" \ + "$(includedir)\IceUtil\Exception.h" \ + "$(includedir)\IceUtil\Config.h" \ + "$(includedir)\Ice\Initialize.h" \ + "$(includedir)\IceUtil\Timer.h" \ + "$(includedir)\IceUtil\Shared.h" \ + "$(includedir)\IceUtil\Atomic.h" \ + "$(includedir)\IceUtil\Thread.h" \ + "$(includedir)\IceUtil\Handle.h" \ + "$(includedir)\IceUtil\Mutex.h" \ + "$(includedir)\IceUtil\Lock.h" \ + "$(includedir)\IceUtil\ThreadException.h" \ + "$(includedir)\IceUtil\Time.h" \ + "$(includedir)\IceUtil\MutexProtocol.h" \ + "$(includedir)\IceUtil\Monitor.h" \ + "$(includedir)\IceUtil\Cond.h" \ + "$(includedir)\Ice\CommunicatorF.h" \ + "$(includedir)\IceUtil\PushDisableWarnings.h" \ + "$(includedir)\Ice\ProxyF.h" \ + "$(includedir)\Ice\Config.h" \ + "$(includedir)\Ice\ProxyHandle.h" \ + "$(includedir)\Ice\ObjectF.h" \ + "$(includedir)\Ice\Handle.h" \ + "$(includedir)\Ice\Exception.h" \ + "$(includedir)\Ice\Format.h" \ + "$(includedir)\Ice\StreamF.h" \ + "$(includedir)\Ice\LocalObject.h" \ + "$(includedir)\Ice\LocalObjectF.h" \ + "$(includedir)\Ice\StreamHelpers.h" \ + "$(includedir)\IceUtil\ScopedArray.h" \ + "$(includedir)\IceUtil\Iterator.h" \ + "$(includedir)\IceUtil\Optional.h" \ + "$(includedir)\IceUtil\UndefSysMacros.h" \ + "$(includedir)\IceUtil\PopDisableWarnings.h" \ + "$(includedir)\Ice\PropertiesF.h" \ + "$(includedir)\Ice\Proxy.h" \ + "$(includedir)\Ice\ProxyFactoryF.h" \ + "$(includedir)\Ice\ConnectionIF.h" \ + "$(includedir)\Ice\RequestHandlerF.h" \ + "$(includedir)\Ice\EndpointF.h" \ + "$(includedir)\Ice\EndpointTypes.h" \ + "$(includedir)\Ice\ObjectAdapterF.h" \ + "$(includedir)\Ice\ReferenceF.h" \ + "$(includedir)\Ice\BatchRequestQueueF.h" \ + "$(includedir)\Ice\AsyncResult.h" \ + "$(includedir)\IceUtil\UniquePtr.h" \ + "$(includedir)\Ice\ConnectionF.h" \ + "$(includedir)\Ice\InstanceF.h" \ + "$(includedir)\Ice\AsyncResultF.h" \ + "$(includedir)\Ice\ObserverHelper.h" \ + "$(includedir)\Ice\Instrumentation.h" \ + "$(includedir)\Ice\Current.h" \ + "$(includedir)\Ice\Identity.h" \ + "$(includedir)\Ice\Version.h" \ + "$(includedir)\Ice\BasicStream.h" \ + "$(includedir)\IceUtil\StringConverter.h" \ + "$(includedir)\Ice\Object.h" \ + "$(includedir)\Ice\IncomingAsyncF.h" \ + "$(includedir)\Ice\ObjectFactoryF.h" \ + "$(includedir)\Ice\ObjectFactoryManagerF.h" \ + "$(includedir)\Ice\Buffer.h" \ + "$(includedir)\Ice\Protocol.h" \ + "$(includedir)\Ice\SlicedDataF.h" \ + "$(includedir)\Ice\UserExceptionFactory.h" \ + "$(includedir)\Ice\FactoryTable.h" \ + "$(includedir)\Ice\LoggerF.h" \ + "$(includedir)\Ice\InstrumentationF.h" \ + "$(includedir)\Ice\Dispatcher.h" \ + "$(includedir)\Ice\BuiltinSequences.h" \ + "$(includedir)\Ice\Plugin.h" \ + "$(includedir)\Ice\BatchRequestInterceptor.h" \ + "$(includedir)\Ice\Stream.h" \ diff --git a/cpp/src/IceDB/IceDB.cpp b/cpp/src/IceDB/IceDB.cpp new file mode 100644 index 00000000000..78cb4b4dfc7 --- /dev/null +++ b/cpp/src/IceDB/IceDB.cpp @@ -0,0 +1,460 @@ +// ********************************************************************** +// +// Copyright (c) 2003-2015 ZeroC, Inc. All rights reserved. +// +// This copy of Ice is licensed to you under the terms described in the +// ICE_LICENSE file included in this distribution. +// +// ********************************************************************** + +#include <IceDB/IceDB.h> +#include <Ice/Initialize.h> +#include <Ice/Stream.h> + +#include <lmdb.h> + +using namespace IceDB; +using namespace std; + +const char* IceDB::LMDBException::_name = "IceDB::LMDBException"; + +LMDBException::LMDBException(const char* file, int line, int err) : + IceUtil::Exception(file, line), + _error(err) +{ +} + +LMDBException::~LMDBException() throw() +{ +} + +string +LMDBException::ice_name() const +{ + return _name; +} + +void +LMDBException::ice_print(ostream& out) const +{ + IceUtil::Exception::ice_print(out); + out << ": " << mdb_strerror(_error); +} + +LMDBException* +LMDBException::ice_clone() const +{ + return new LMDBException(*this); +} + +void +LMDBException::ice_throw() const +{ + throw *this; +} + +int +LMDBException::error() const +{ + return _error; +} + +const char* IceDB::KeyTooLongException::_name = "IceDB::KeyTooLongException"; + +KeyTooLongException::KeyTooLongException(const char* file, int line, size_t size) : + IceUtil::Exception(file, line), + _size(size) +{ +} + +KeyTooLongException::~KeyTooLongException() throw() +{ +} + +string +KeyTooLongException::ice_name() const +{ + return _name; +} + +void +KeyTooLongException::ice_print(ostream& out) const +{ + IceUtil::Exception::ice_print(out); + out << ": "; + if(_size > 0) + { + out << "Key size = " << _size << ", "; + } + out << "Max size = " << maxKeySize; +} + +KeyTooLongException* +KeyTooLongException::ice_clone() const +{ + return new KeyTooLongException(*this); +} + +void +KeyTooLongException::ice_throw() const +{ + throw *this; +} + +const char* IceDB::BadEnvException::_name = "IceDB::BadEnvException"; + +BadEnvException::BadEnvException(const char* file, int line, size_t size) : + IceUtil::Exception(file, line), + _size(size) +{ +} + +BadEnvException::~BadEnvException() throw() +{ +} + +string +BadEnvException::ice_name() const +{ + return _name; +} + +void +BadEnvException::ice_print(ostream& out) const +{ + IceUtil::Exception::ice_print(out); + out << ": LMDB env max key size = " << _size; + out << ", IceDB max key size = " << maxKeySize; +} + +BadEnvException* +BadEnvException::ice_clone() const +{ + return new BadEnvException(*this); +} + +void +BadEnvException::ice_throw() const +{ + throw *this; +} + + +Env::Env(const string& path, MDB_dbi maxDbs, size_t mapSize, unsigned int maxReaders) +{ + int rc = mdb_env_create(&_menv); + if(rc != MDB_SUCCESS) + { + throw LMDBException(__FILE__, __LINE__, rc); + } + + if(maxDbs != 0) + { + rc = mdb_env_set_maxdbs(_menv, maxDbs); + if(rc != MDB_SUCCESS) + { + throw LMDBException(__FILE__, __LINE__, rc); + } + } + + if(mapSize != 0) + { + rc = mdb_env_set_mapsize(_menv, mapSize); + if(rc != MDB_SUCCESS) + { + throw LMDBException(__FILE__, __LINE__, rc); + } + } + + if(maxReaders != 0) + { + rc = mdb_env_set_maxreaders(_menv, maxReaders); + if(rc != MDB_SUCCESS) + { + throw LMDBException(__FILE__, __LINE__, rc); + } + } + + rc = mdb_env_open(_menv, path.c_str(), 0, 0644); + if(rc != MDB_SUCCESS) + { + throw LMDBException(__FILE__, __LINE__, rc); + } + + size_t envMaxKeySize = mdb_env_get_maxkeysize(_menv); + if(maxKeySize > envMaxKeySize) + { + throw BadEnvException(__FILE__, __LINE__, envMaxKeySize); + } +} + +Env::~Env() +{ + close(); +} + +void +Env::close() +{ + if(_menv != 0) + { + mdb_env_close(_menv); + _menv = 0; + } +} + +MDB_env* +Env::menv() const +{ + return _menv; +} + +Txn::Txn(const Env& env, unsigned int flags) +{ + const int rc = mdb_txn_begin(env.menv(), 0, flags, &_mtxn); + if(rc != MDB_SUCCESS) + { + throw LMDBException(__FILE__, __LINE__, rc); + } +} + +Txn::~Txn() +{ + abort(); +} + +void +Txn::commit() +{ + const int rc = mdb_txn_commit(_mtxn); + _mtxn = 0; + if(rc != MDB_SUCCESS) + { + throw LMDBException(__FILE__, __LINE__, rc); + } +} + +void +Txn::abort() +{ + if(_mtxn != 0) + { + mdb_txn_abort(_mtxn); + _mtxn = 0; + } +} + +MDB_txn* +Txn::mtxn() const +{ + return _mtxn; +} + +ReadOnlyTxn::ReadOnlyTxn(const Env& env) : + Txn(env, MDB_RDONLY) +{ +} + +void +ReadOnlyTxn::reset() +{ + mdb_txn_reset(_mtxn); +} + +void +ReadOnlyTxn::renew() +{ + const int rc = mdb_txn_renew(_mtxn); + if(rc != MDB_SUCCESS) + { + throw LMDBException(__FILE__, __LINE__, rc); + } +} + +ReadWriteTxn::ReadWriteTxn(const Env& env) : + Txn(env, 0) +{ +} + +DbiBase::DbiBase(const Txn& txn, const std::string& name, unsigned int flags, MDB_cmp_func* cmp) +{ + int rc = mdb_dbi_open(txn.mtxn(), name.c_str(), flags, &_mdbi); + if(rc != MDB_SUCCESS) + { + throw LMDBException(__FILE__, __LINE__, rc); + } + if(cmp != 0) + { + rc = mdb_set_compare(txn.mtxn(), _mdbi, cmp); + if(rc != MDB_SUCCESS) + { + throw LMDBException(__FILE__, __LINE__, rc); + } + } +} + +DbiBase::DbiBase() : + _mdbi(0) +{ +} + +DbiBase::~DbiBase() +{ +} + +void +DbiBase::clear(const ReadWriteTxn& txn) +{ + const int rc = mdb_drop(txn.mtxn(), _mdbi, 0); + if (rc != MDB_SUCCESS) + { + throw LMDBException(__FILE__, __LINE__, rc); + } +} + +MDB_dbi +DbiBase::mdbi() const +{ + return _mdbi; +} + +bool +DbiBase::get(const Txn& txn, MDB_val* key, MDB_val* data) const +{ + assert(key->mv_size <= maxKeySize); + + const int rc = mdb_get(txn.mtxn(), _mdbi, key, data); + if(rc != MDB_SUCCESS && rc != MDB_NOTFOUND) + { + throw LMDBException(__FILE__, __LINE__, rc); + } + return rc == MDB_SUCCESS; +} + +void +DbiBase::put(const ReadWriteTxn& txn, MDB_val* key, MDB_val* data, unsigned int flags) +{ + assert(key->mv_size <= maxKeySize); + + const int rc = mdb_put(txn.mtxn(), _mdbi, key, data, flags); + if(rc != MDB_SUCCESS) + { + throw LMDBException(__FILE__, __LINE__, rc); + } +} + +bool +DbiBase::find(const Txn& txn, MDB_val* key) const +{ + MDB_val data; + return get(txn, key, &data); +} + +bool +DbiBase::del(const ReadWriteTxn& txn, MDB_val* key, MDB_val* data) +{ + assert(key->mv_size <= maxKeySize); + + const int rc = mdb_del(txn.mtxn(), _mdbi, key, data); + if (rc != MDB_SUCCESS && rc != MDB_NOTFOUND) + { + throw LMDBException(__FILE__, __LINE__, rc); + } + return rc == MDB_SUCCESS; +} + +CursorBase::CursorBase(MDB_dbi dbi, const Txn& txn, bool readOnly) : + _readOnly(readOnly) +{ + const int rc = mdb_cursor_open(txn.mtxn(), dbi, &_mcursor); + if(rc != MDB_SUCCESS) + { + throw LMDBException(__FILE__, __LINE__, rc); + } +} + +CursorBase::~CursorBase() +{ + if(_readOnly) + { + close(); + } +} + +void +CursorBase::close() +{ + if(_mcursor != 0) + { + mdb_cursor_close(_mcursor); + _mcursor = 0; + } +} + +MDB_cursor* +CursorBase::mcursor() const +{ + return _mcursor; +} + +bool +CursorBase::get(MDB_val* key, MDB_val* data, MDB_cursor_op op) +{ + const int rc = mdb_cursor_get(_mcursor, key, data, op); + if(rc != MDB_SUCCESS && rc != MDB_NOTFOUND) + { + throw LMDBException(__FILE__, __LINE__, rc); + } + return rc == MDB_SUCCESS; +} + +void +CursorBase::put(MDB_val* key, MDB_val* data, unsigned int flags) +{ + assert(key->mv_size <= maxKeySize); + assert(!_readOnly); + + const int rc = mdb_cursor_put(_mcursor, key, data, flags); + if (rc != MDB_SUCCESS) + { + throw LMDBException(__FILE__, __LINE__, rc); + } +} + +bool +CursorBase::find(MDB_val* key) +{ + MDB_val data; + return get(key, &data, MDB_SET); +} + +bool +CursorBase::find(MDB_val* key, MDB_val* data) +{ + return get(key, data, MDB_SET); +} + +void +CursorBase::del(unsigned int flags) +{ + assert(!_readOnly); + + const int rc = mdb_cursor_del(_mcursor, flags); + if (rc != MDB_SUCCESS) + { + throw LMDBException(__FILE__, __LINE__, rc); + } +} + +void +CursorBase::renew(const ReadOnlyTxn& txn) +{ + assert(_readOnly); + const int rc = mdb_cursor_renew(txn.mtxn(), CursorBase::_mcursor); + if(rc != MDB_SUCCESS) + { + throw LMDBException(__FILE__, __LINE__, rc); + } +} + + diff --git a/cpp/src/IceDB/IceDB.h b/cpp/src/IceDB/IceDB.h new file mode 100644 index 00000000000..764daa0ed1e --- /dev/null +++ b/cpp/src/IceDB/IceDB.h @@ -0,0 +1,539 @@ +// ********************************************************************** +// +// Copyright (c) 2003-2015 ZeroC, Inc. All rights reserved. +// +// This copy of Ice is licensed to you under the terms described in the +// ICE_LICENSE file included in this distribution. +// +// ********************************************************************** + +#ifndef ICE_DB_H +#define ICE_DB_H + +#include <IceUtil/Exception.h> +#include <IceUtil/FileUtil.h> +#include <Ice/Initialize.h> +#include <Ice/Stream.h> + +#include <lmdb.h> + +#ifndef ICE_DB_API +# ifdef ICE_DB_API_EXPORTS +# define ICE_DB_API ICE_DECLSPEC_EXPORT +# elif defined(ICE_STATIC_LIBS) +# define ICE_DB_API /**/ +# else +# define ICE_DB_API ICE_DECLSPEC_IMPORT +# endif +#endif + +// +// Automatically link IceDB[D].lib with Visual C++ +// +#if !defined(ICE_BUILDING_ICE_DB) && defined(ICE_DB_API_EXPORTS) +# define ICE_BUILDING_ICE_DB +#endif + +#ifdef _MSC_VER +# if !defined(ICE_BUILDING_ICE_DB) +# if defined(_DEBUG) && !defined(ICE_OS_WINRT) +# pragma comment(lib, "IceDBD.lib") +# else +# pragma comment(lib, "IceDB.lib") +# endif +# endif +#endif + +namespace IceDB +{ + +const size_t maxKeySize = 511; + +// +// LMDBException wraps an error condition (and error code) +// returned by LMDB +// +class ICE_DB_API LMDBException : public IceUtil::Exception +{ +public: + + LMDBException(const char*, int, int); + virtual ~LMDBException() throw(); + + virtual std::string ice_name() const; + virtual void ice_print(std::ostream&) const; + virtual LMDBException* ice_clone() const; + virtual void ice_throw() const; + + int error() const; + +private: + + const int _error; + static const char* _name; +}; + +// +// KeyTooLongException is thrown if we attempt to marshal a +// key with a marshaled representation longer than maxKeySize. +// +class ICE_DB_API KeyTooLongException : public IceUtil::Exception +{ +public: + + KeyTooLongException(const char*, int, size_t); + virtual ~KeyTooLongException() throw(); + + virtual std::string ice_name() const; + virtual void ice_print(std::ostream&) const; + virtual KeyTooLongException* ice_clone() const; + virtual void ice_throw() const; + +private: + + const size_t _size; + static const char* _name; +}; + +// +// The creation of an Env fails with BadEnvException when this +// Env's max key size is smaller than maxKeySize. +// +class ICE_DB_API BadEnvException : public IceUtil::Exception +{ +public: + + BadEnvException(const char*, int, size_t); + virtual ~BadEnvException() throw(); + + virtual std::string ice_name() const; + virtual void ice_print(std::ostream&) const; + virtual BadEnvException* ice_clone() const; + virtual void ice_throw() const; + +private: + + const size_t _size; + static const char* _name; +}; + + +// +// Codec reads and writes T to/from MDB_val +// +// Partial specializations of this template must provide: +// +// Read [out] T from [in] MDB_val using [in] context C +// static void read(T& , const MDB_val&, const C&); +// +// Write [in] T into [out] MDB_val using [in] context C +// [out] H& holds the memory for MDB_val.mv_data. +// static void write(const T&, MDB_val&, H&, const C&); +// +// Write [in] T into [in/out] MDB_val using [in] context C +// [in] MDB_val contains the destination array +// write returns true on success, and false if the provided +// array is too small. +// On failure, MDB_val.mv_size contains the marshaled key +// size if known, and 0 if not know. +// static bool write(const T&, MDB_val&, H&, const C&); +// +template<typename T, typename C, typename H> +struct Codec; + +class ICE_DB_API Env +{ +public: + + explicit Env(const std::string&, MDB_dbi = 0, size_t = 0, unsigned int = 0); + ~Env(); + + void close(); + + MDB_env* menv() const; + +private: + + // Not implemented: class is not copyable + Env(const Env&); + void operator=(const Env&); + + MDB_env* _menv; +}; + +class ICE_DB_API Txn +{ +public: + + virtual ~Txn(); + + void commit(); + void abort(); + + MDB_txn* mtxn() const; + +protected: + + explicit Txn(const Env&, unsigned int); + + MDB_txn* _mtxn; + +private: + + // Not implemented: class is not copyable + Txn(const Txn&); + void operator=(const Txn&); +}; + +class ICE_DB_API ReadOnlyTxn : public Txn +{ +public: + + explicit ReadOnlyTxn(const Env&); + + void reset(); + void renew(); +}; + +class ICE_DB_API ReadWriteTxn : public Txn +{ +public: + + explicit ReadWriteTxn(const Env&); +}; + +class ICE_DB_API DbiBase +{ +public: + + void clear(const ReadWriteTxn&); + MDB_dbi mdbi() const; + + virtual ~DbiBase(); + +protected: + + DbiBase(const Txn&, const std::string&, unsigned int, MDB_cmp_func*); + DbiBase(); + + // default copy ctor and assignment operator are OK + + bool get(const Txn&, MDB_val*, MDB_val*) const; + void put(const ReadWriteTxn&, MDB_val*, MDB_val*, unsigned int); + bool find(const Txn&, MDB_val*) const; + bool del(const ReadWriteTxn&, MDB_val*, MDB_val*); + +private: + + MDB_dbi _mdbi; +}; + +template<typename K, typename D, typename C, typename H> +class Dbi : public DbiBase +{ +public: + + Dbi(const Txn& txn, const std::string& name, const C& ctx, unsigned int flags = 0, MDB_cmp_func* cmp = 0) : + DbiBase(txn, name, flags, cmp), + _marshalingContext(ctx) + { + } + + Dbi() + { + } + + bool get(const Txn& txn, const K& key, D& data) const + { + unsigned char kbuf[maxKeySize]; + MDB_val mkey = {maxKeySize, kbuf}; + + if(Codec<K, C, H>::write(key, mkey, _marshalingContext)) + { + MDB_val mdata; + if(DbiBase::get(txn, &mkey, &mdata)) + { + Codec<D, C, H>::read(data, mdata, _marshalingContext); + return true; + } + } + return false; + } + + void put(const ReadWriteTxn& txn, const K& key, const D& data, unsigned int flags = 0) + { + unsigned char kbuf[maxKeySize]; + MDB_val mkey = {maxKeySize, kbuf}; + + if(Codec<K, C, H>::write(key, mkey, _marshalingContext)) + { + H hdata; + MDB_val mdata; + Codec<D, C, H>::write(data, mdata, hdata, _marshalingContext); + DbiBase::put(txn, &mkey, &mdata, flags); + } + else + { + throw KeyTooLongException(__FILE__, __LINE__, mkey.mv_size); + } + } + + bool find(const Txn& txn, const K& key) const + { + unsigned char kbuf[maxKeySize]; + MDB_val mkey = {maxKeySize, kbuf}; + if(Codec<K, C, H>::write(key, mkey, _marshalingContext)) + { + return DbiBase::find(txn, &mkey); + } + else + { + return false; + } + } + + bool del(const ReadWriteTxn& txn, const K& key, const D& data) + { + unsigned char kbuf[maxKeySize]; + MDB_val mkey = {maxKeySize, kbuf}; + if(Codec<K, C, H>::write(key, mkey, _marshalingContext)) + { + H hdata; + MDB_val mdata; + Codec<D, C, H>::write(data, mdata, hdata, _marshalingContext); + return DbiBase::del(txn, &mkey, &mdata); + } + else + { + return false; + } + } + + bool del(const ReadWriteTxn& txn, const K& key) + { + unsigned char kbuf[maxKeySize]; + MDB_val mkey = {maxKeySize, kbuf}; + if(Codec<K, C, H>::write(key, mkey, _marshalingContext)) + { + return DbiBase::del(txn, &mkey, 0); + } + else + { + return false; + } + } + + C marshalingContext() const + { + return _marshalingContext; + } + +private: + + C _marshalingContext; +}; + +class ICE_DB_API CursorBase +{ +public: + + void close(); + + MDB_cursor* mcursor() const; + + virtual ~CursorBase(); + +protected: + + CursorBase(MDB_dbi dbi, const Txn& txn, bool); + + bool get(MDB_val*, MDB_val*, MDB_cursor_op); + void put(MDB_val*, MDB_val*, unsigned int); + bool find(MDB_val*); + bool find(MDB_val*, MDB_val*); + void del(unsigned int); + void renew(const ReadOnlyTxn&); + +private: + + // Not implemented: class is not copyable + CursorBase(const CursorBase&); + void operator=(const CursorBase&); + + MDB_cursor* _mcursor; + const bool _readOnly; +}; + +template<typename K, typename D, typename C, typename H> +class Cursor : public CursorBase +{ +public: + + Cursor(const Dbi<K, D, C, H>& dbi, const ReadOnlyTxn& txn) : + CursorBase(dbi.mdbi(), txn, true), + _marshalingContext(dbi.marshalingContext()) + { + } + + Cursor(const Dbi<K, D, C, H>& dbi, const ReadWriteTxn& txn) : + CursorBase(dbi.mdbi(), txn, false), + _marshalingContext(dbi.marshalingContext()) + { + } + + Cursor(const Dbi<K, D, C, H>& dbi, const Txn& txn) : + CursorBase(dbi.mdbi(), txn, dynamic_cast<const ReadOnlyTxn*>(&txn) != 0), + _marshalingContext(dbi.marshalingContext()) + { + } + + bool get(K& key, D& data, MDB_cursor_op op) + { + MDB_val mkey, mdata; + if(CursorBase::get(&mkey, &mdata, op)) + { + Codec<K, C, H>::read(key, mkey, _marshalingContext); + Codec<D, C, H>::read(data, mdata, _marshalingContext); + return true; + } + return false; + } + + bool find(const K& key) + { + unsigned char kbuf[maxKeySize]; + MDB_val mkey = {maxKeySize, kbuf}; + if(Codec<K, C, H>::write(key, mkey, _marshalingContext)) + { + return CursorBase::find(&mkey); + } + else + { + return false; + } + } + + bool find(const K& key, D& data) + { + unsigned char kbuf[maxKeySize]; + MDB_val mkey = {maxKeySize, kbuf}; + if(Codec<K, C, H>::write(key, mkey, _marshalingContext)) + { + MDB_val mdata; + if(CursorBase::find(&mkey, &mdata)) + { + Codec<D, C, H>::read(data, mdata, _marshalingContext); + return true; + } + } + return false; + } + +protected: + + C _marshalingContext; +}; + +template<typename K, typename D, typename C, typename H> +class ReadWriteCursor : public Cursor<K, D, C, H> +{ +public: + + ReadWriteCursor(const Dbi<K, D, C, H>& dbi, const ReadWriteTxn& txn) : + Cursor<K, D, C, H>(dbi, txn) + { + } + + void put(const K& key, const D& data, unsigned int flags = 0) + { + unsigned char kbuf[maxKeySize]; + MDB_val mkey = {maxKeySize, kbuf}; + if(Codec<K, C, H>::write(key, mkey, this->_marshalingContext)) + { + H hdata; + MDB_val mdata; + Codec<D, C, H>::write(data, mdata, hdata, this->_marshalingContext); + CursorBase::put(&mkey, &mdata, flags); + } + else + { + throw KeyTooLongException(__FILE__, __LINE__, mkey.mv_size); + } + } + + void del(unsigned int flags = 0) + { + CursorBase::del(flags); + } +}; + +template<typename K, typename D, typename C, typename H> +class ReadOnlyCursor : public Cursor<K, D, C, H> +{ +public: + + ReadOnlyCursor(const Dbi<K, D, C, H>& dbi, const ReadOnlyTxn& txn) : + Cursor<K, D, C, H>(dbi, txn) + { + } + + void renew(const ReadOnlyTxn& txn) + { + CursorBase::renew(txn); + } +}; + + +// +// Partial specialization of Codec for Ice encoding +// +struct IceContext +{ + Ice::CommunicatorPtr communicator; + Ice::EncodingVersion encoding; +}; + +template<typename T> +struct Codec<T, IceContext, Ice::OutputStreamPtr> +{ + static void read(T& t, const MDB_val& val, const IceContext& ctx) + { + std::pair<const Ice::Byte*, const Ice::Byte*> buf(static_cast<const Ice::Byte*>(val.mv_data), + static_cast<const Ice::Byte*>(val.mv_data) + val.mv_size); + Ice::InputStreamPtr in = Ice::wrapInputStream(ctx.communicator, buf, ctx.encoding); + in->read(t); + } + + static void write(const T& t, MDB_val& val, Ice::OutputStreamPtr& holder, const IceContext& ctx) + { + holder = Ice::createOutputStream(ctx.communicator, ctx.encoding); + holder->write(t); + std::pair<const Ice::Byte*, const Ice::Byte*> buf = holder->finished(); + val.mv_size = buf.second - buf.first; + val.mv_data = const_cast<Ice::Byte*>(buf.first); + } + + static bool write(const T& t, MDB_val& val, const IceContext& ctx) + { + // Cannot use stack-allocated bytes for now + Ice::OutputStreamPtr stream = Ice::createOutputStream(ctx.communicator, ctx.encoding); + stream->write(t); + std::pair<const Ice::Byte*, const Ice::Byte*> buf = stream->finished(); + size_t sz = static_cast<size_t>(buf.second - buf.first); + if(sz > val.mv_size) + { + val.mv_size = sz; + return false; + } + else + { + val.mv_size = sz; + memcpy(val.mv_data, buf.first, sz); + return true; + } + } +}; + +} + +#endif diff --git a/cpp/src/IceDB/IceDB.rc b/cpp/src/IceDB/IceDB.rc new file mode 100644 index 00000000000..2256f2f27a8 --- /dev/null +++ b/cpp/src/IceDB/IceDB.rc @@ -0,0 +1,38 @@ +#include "winver.h" + +VS_VERSION_INFO VERSIONINFO + FILEVERSION 3,6,1,0 + PRODUCTVERSION 3,6,1,0 + FILEFLAGSMASK VS_FFI_FILEFLAGSMASK +#ifdef _DEBUG + FILEFLAGS VS_FF_DEBUG + #define INTERNALNAME "icedb36d\0" + #define ORIGINALFILENAME "icedb36d.dll\0" +#else + FILEFLAGS 0x0L + #define INTERNALNAME "icedb36\0" + #define ORIGINALFILENAME "icedb36.dll\0" +#endif + FILEOS 0x4L + FILETYPE VFT_DLL + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904e4" + BEGIN + VALUE "CompanyName", "ZeroC, Inc.\0" + VALUE "FileDescription", "IceDB C++ Library\0" + VALUE "FileVersion", "3.6.1\0" + VALUE "InternalName", INTERNALNAME + VALUE "LegalCopyright", "\251 2003-2015 ZeroC, Inc.\0" + VALUE "OriginalFilename", ORIGINALFILENAME + VALUE "ProductName", "Ice\0" + VALUE "ProductVersion", "3.6.1\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1252 + END +END diff --git a/cpp/src/IceDB/Makefile b/cpp/src/IceDB/Makefile new file mode 100644 index 00000000000..c82a7b32ad8 --- /dev/null +++ b/cpp/src/IceDB/Makefile @@ -0,0 +1,44 @@ +# ********************************************************************** +# +# Copyright (c) 2003-2015 ZeroC, Inc. All rights reserved. +# +# This copy of Ice is licensed to you under the terms described in the +# ICE_LICENSE file included in this distribution. +# +# ********************************************************************** + +top_srcdir = ../.. + +LIBFILENAME = $(call mklibfilename,IceDB,$(VERSION)) +SONAME = $(call mksoname,IceDB,$(SOVERSION)) +LIBNAME = $(call mklibname,IceDB) + +TARGETS = $(call mklibtargets,$(libdir)/$(LIBFILENAME),$(libdir)/$(SONAME),$(libdir)$(cpp11libdirsuffix)/$(LIBNAME)) + +OBJS = IceDB.o + +RPATH_DIR = $(LOADER_PATH)/../$(libsubdir) + +include $(top_srcdir)/config/Make.rules + +CPPFLAGS := $(CPPFLAGS) -DICE_DB_API_EXPORTS -I.. +LINKWITH := -lIce -lIceUtil -llmdb + +$(libdir)/$(LIBFILENAME): $(OBJS) + @mkdir -p $(dir $@) + rm -f $@ + $(call mkshlib,$@,$(SONAME),$(OBJS),$(LINKWITH)) + +$(libdir)/$(SONAME): $(libdir)/$(LIBFILENAME) + rm -f $@ + ln -s $(LIBFILENAME) $@ + +$(libdir)$(cpp11libdirsuffix)/$(LIBNAME): $(libdir)/$(SONAME) + @mkdir -p $(libdir)$(cpp11libdirsuffix) + rm -f $@ + ln -s $(cpp11sonamedir)$(SONAME) $@ + +install:: all + $(call installlib,$(DESTDIR)$(install_libdir),$(libdir),$(LIBFILENAME),$(SONAME),$(LIBNAME)) + $(call installprogram,$(ADMIN),$(DESTDIR)$(install_bindir)) + $(call installdata,$(top_srcdir)/../man/man1/icestormadmin.1,$(DESTDIR)$(install_mandir)) diff --git a/cpp/src/IceDB/Makefile.mak b/cpp/src/IceDB/Makefile.mak new file mode 100644 index 00000000000..b711a9b4d67 --- /dev/null +++ b/cpp/src/IceDB/Makefile.mak @@ -0,0 +1,58 @@ +# ********************************************************************** +# +# Copyright (c) 2003-2015 ZeroC, Inc. All rights reserved. +# +# This copy of Ice is licensed to you under the terms described in the +# ICE_LICENSE file included in this distribution. +# +# ********************************************************************** + +top_srcdir = ..\.. + +LIBNAME = $(top_srcdir)\lib\icedb$(LIBSUFFIX).lib +DLLNAME = $(top_srcdir)\bin\icedb$(SOVERSION)$(LIBSUFFIX)$(COMPSUFFIX).dll + +TARGETS = $(LIBNAME) $(DLLNAME) + +OBJS = .\IceDB.obj + +!include $(top_srcdir)/config/Make.rules.mak + +# +#$(OBJS) : $(LMDB_NUPKG) +# + +CPPFLAGS = -I.. -I$(LMDB_HOME)\include $(CPPFLAGS) -DICE_DB_API_EXPORTS -DWIN32_LEAN_AND_MEAN +LINKWITH = /LIBPATH:$(LMDB_HOME)\lib$(libsuff) lmdb$(LIBSUFFIX).lib Advapi32.lib + +!if "$(GENERATE_PDB)" == "yes" +PDBFLAGS = /pdb:$(DLLNAME:.dll=.pdb) +!endif + +RES_FILE = IceDB.res + +$(LIBNAME): $(DLLNAME) + +$(DLLNAME): $(OBJS) IceDB.res + $(LINK) $(BASE):0x2D000000 $(LD_DLLFLAGS) $(DB_LDFLAGS) $(PDBFLAGS) $(OBJS) $(PREOUT)$@ $(PRELIBS)$(LINKWITH) $(RES_FILE) + move $(DLLNAME:.dll=.lib) $(LIBNAME) + @if exist $@.manifest echo ^ ^ ^ Embedding manifest using $(MT) && \ + $(MT) -nologo -manifest $@.manifest -outputresource:$@;#2 && del /q $@.manifest + @if exist $(DLLNAME:.dll=.exp) del /q $(DLLNAME:.dll=.exp) + @if defined SIGN_CERTIFICATE echo ^ ^ ^ Signing $@ && \ + signtool sign /f "$(SIGN_CERTIFICATE)" /p $(SIGN_PASSWORD) /t $(SIGN_TIMESTAMPSERVER) $@ + +clean:: + -del /q IceDB.obj + -del /q $(RES_FILE) + +install:: all + copy $(LIBNAME) "$(install_libdir)" + copy $(DLLNAME) "$(install_bindir)" + +!if "$(GENERATE_PDB)" == "yes" + +install:: all + copy $(DLLNAME:.dll=.pdb) "$(install_bindir)" + +!endif diff --git a/cpp/src/IceGrid/.depend.mak b/cpp/src/IceGrid/.depend.mak index 752acc49a81..7b45a35e975 100755 --- a/cpp/src/IceGrid/.depend.mak +++ b/cpp/src/IceGrid/.depend.mak @@ -2049,7 +2049,6 @@ Activator.obj: \ "$(includedir)\IceUtil\StringUtil.h" \ "$(includedir)\IceUtil\Random.h" \ "ServerI.h" \ - "$(includedir)\Freeze\EvictorF.h" \ "..\..\src\IcePatch2Lib\Util.h" \ "$(includedir)\IcePatch2\FileInfo.h" \ "$(includedir)\IcePatch2\Config.h" \ @@ -2196,7 +2195,6 @@ NodeAdminRouter.obj: \ "$(includedir)\Ice\Service.h" \ "$(includedir)\Ice\RegisterPlugins.h" \ "ServerI.h" \ - "$(includedir)\Freeze\EvictorF.h" \ "Activator.h" \ "ServerAdapterI.h" \ @@ -2344,7 +2342,6 @@ NodeI.obj: \ "FileCache.h" \ "Activator.h" \ "ServerI.h" \ - "$(includedir)\Freeze\EvictorF.h" \ "ServerAdapterI.h" \ "Util.h" \ "$(includedir)\IceUtil\StringUtil.h" \ @@ -2632,7 +2629,6 @@ ServerAdapterI.obj: \ "$(includedir)\IceGrid\Registry.h" \ "$(includedir)\IceGrid\Session.h" \ "ServerI.h" \ - "$(includedir)\Freeze\EvictorF.h" \ "Activator.h" \ "TraceLevels.h" \ "NodeI.h" \ @@ -2767,7 +2763,6 @@ ServerI.obj: \ "$(includedir)\Ice\Service.h" \ "$(includedir)\Ice\RegisterPlugins.h" \ "ServerI.h" \ - "$(includedir)\Freeze\EvictorF.h" \ "Activator.h" \ "Internal.h" \ "$(includedir)\Glacier2\Session.h" \ @@ -3233,22 +3228,7 @@ AdminI.obj: \ "$(includedir)\IceStorm\Metrics.h" \ "$(includedir)\IceStorm\Config.h" \ "Database.h" \ - "$(includedir)\Freeze\Freeze.h" \ - "$(includedir)\Freeze\Initialize.h" \ - "$(includedir)\Freeze\EvictorF.h" \ - "$(includedir)\Freeze\ConnectionF.h" \ - "$(includedir)\Freeze\Index.h" \ - "$(includedir)\Freeze\DB.h" \ - "$(includedir)\Freeze\Transaction.h" \ - "$(includedir)\Freeze\BackgroundSaveEvictor.h" \ - "$(includedir)\Freeze\Evictor.h" \ - "$(includedir)\Freeze\Exception.h" \ - "$(includedir)\Freeze\TransactionalEvictor.h" \ - "$(includedir)\Freeze\Map.h" \ - "$(includedir)\Freeze\Connection.h" \ - "$(includedir)\Freeze\TransactionHolder.h" \ - "$(includedir)\Freeze\Catalog.h" \ - "$(includedir)\Freeze\CatalogData.h" \ + "..\..\src\IceUtil\FileUtil.h" \ "ServerCache.h" \ "Allocatable.h" \ "Cache.h" \ @@ -3264,9 +3244,7 @@ AdminI.obj: \ "AdapterCache.h" \ "Topics.h" \ "PluginFacadeI.h" \ - "StringApplicationInfoDict.h" \ - "StringAdapterInfoDict.h" \ - "IdentityObjectInfoDict.h" \ + "..\..\src\IceDB\IceDB.h" \ "DescriptorParser.h" \ "DescriptorHelper.h" \ "$(includedir)\IceUtil\OutputUtil.h" \ @@ -3444,22 +3422,7 @@ AdminSessionI.obj: \ "Topics.h" \ "AdminI.h" \ "Database.h" \ - "$(includedir)\Freeze\Freeze.h" \ - "$(includedir)\Freeze\Initialize.h" \ - "$(includedir)\Freeze\EvictorF.h" \ - "$(includedir)\Freeze\ConnectionF.h" \ - "$(includedir)\Freeze\Index.h" \ - "$(includedir)\Freeze\DB.h" \ - "$(includedir)\Freeze\Transaction.h" \ - "$(includedir)\Freeze\BackgroundSaveEvictor.h" \ - "$(includedir)\Freeze\Evictor.h" \ - "$(includedir)\Freeze\Exception.h" \ - "$(includedir)\Freeze\TransactionalEvictor.h" \ - "$(includedir)\Freeze\Map.h" \ - "$(includedir)\Freeze\Connection.h" \ - "$(includedir)\Freeze\TransactionHolder.h" \ - "$(includedir)\Freeze\Catalog.h" \ - "$(includedir)\Freeze\CatalogData.h" \ + "..\..\src\IceUtil\FileUtil.h" \ "ServerCache.h" \ "Allocatable.h" \ "Cache.h" \ @@ -3473,9 +3436,7 @@ AdminSessionI.obj: \ "AllocatableObjectCache.h" \ "AdapterCache.h" \ "PluginFacadeI.h" \ - "StringApplicationInfoDict.h" \ - "StringAdapterInfoDict.h" \ - "IdentityObjectInfoDict.h" \ + "..\..\src\IceDB\IceDB.h" \ "$(includedir)\IceSSL\Plugin.h" \ "$(includedir)\IceSSL\Config.h" \ "$(includedir)\IceSSL\ConnectionInfo.h" \ @@ -3857,58 +3818,12 @@ Database.obj: \ "$(includedir)\Ice\ObjectAdapter.h" \ "$(includedir)\Ice\Endpoint.h" \ "Database.h" \ - "$(includedir)\Freeze\Freeze.h" \ - "$(includedir)\Freeze\Initialize.h" \ - "$(includedir)\Ice\Ice.h" \ - "$(includedir)\Ice\DeprecatedStringConverter.h" \ - "$(includedir)\Ice\Initialize.h" \ - "$(includedir)\IceUtil\Timer.h" \ - "$(includedir)\IceUtil\Thread.h" \ - "$(includedir)\Ice\PropertiesF.h" \ - "$(includedir)\Ice\Dispatcher.h" \ - "$(includedir)\Ice\BatchRequestInterceptor.h" \ - "$(includedir)\Ice\LocalException.h" \ - "$(includedir)\Ice\RemoteLogger.h" \ + "..\..\src\IceUtil\FileUtil.h" \ + "$(includedir)\IceGrid\Admin.h" \ "$(includedir)\Ice\FactoryTableInit.h" \ "$(includedir)\Ice\DefaultObjectFactory.h" \ "$(includedir)\Ice\ObjectFactory.h" \ - "$(includedir)\Ice\CommunicatorAsync.h" \ - "$(includedir)\Ice\ServantLocator.h" \ - "$(includedir)\Ice\SlicedData.h" \ - "$(includedir)\Ice\OutgoingAsync.h" \ - "$(includedir)\Ice\OutgoingAsyncF.h" \ - "$(includedir)\Ice\Process.h" \ - "$(includedir)\Ice\Application.h" \ - "$(includedir)\Ice\Connection.h" \ - "$(includedir)\Ice\ConnectionAsync.h" \ - "$(includedir)\Ice\Functional.h" \ - "$(includedir)\Ice\Stream.h" \ - "$(includedir)\Ice\ImplicitContext.h" \ - "$(includedir)\Ice\Locator.h" \ - "$(includedir)\Ice\ProcessF.h" \ - "$(includedir)\Ice\Router.h" \ - "$(includedir)\Ice\DispatchInterceptor.h" \ - "$(includedir)\Ice\NativePropertiesAdmin.h" \ - "$(includedir)\Ice\Metrics.h" \ - "$(includedir)\Ice\SliceChecksums.h" \ "$(includedir)\Ice\SliceChecksumDict.h" \ - "$(includedir)\Ice\Service.h" \ - "$(includedir)\Ice\RegisterPlugins.h" \ - "$(includedir)\Freeze\EvictorF.h" \ - "$(includedir)\Freeze\ConnectionF.h" \ - "$(includedir)\Freeze\Index.h" \ - "$(includedir)\Freeze\DB.h" \ - "$(includedir)\Freeze\Transaction.h" \ - "$(includedir)\Freeze\BackgroundSaveEvictor.h" \ - "$(includedir)\Freeze\Evictor.h" \ - "$(includedir)\Freeze\Exception.h" \ - "$(includedir)\Freeze\TransactionalEvictor.h" \ - "$(includedir)\Freeze\Map.h" \ - "$(includedir)\Freeze\Connection.h" \ - "$(includedir)\Freeze\TransactionHolder.h" \ - "$(includedir)\Freeze\Catalog.h" \ - "$(includedir)\Freeze\CatalogData.h" \ - "$(includedir)\IceGrid\Admin.h" \ "$(includedir)\Glacier2\Session.h" \ "$(includedir)\Glacier2\SSLInfo.h" \ "$(includedir)\Glacier2\Config.h" \ @@ -3916,12 +3831,16 @@ Database.obj: \ "$(includedir)\IceGrid\Config.h" \ "$(includedir)\IceGrid\Descriptor.h" \ "Internal.h" \ + "$(includedir)\Ice\ProcessF.h" \ + "$(includedir)\Ice\Locator.h" \ "$(includedir)\IceGrid\Observer.h" \ "$(includedir)\IceGrid\Registry.h" \ "$(includedir)\IceGrid\Session.h" \ "ServerCache.h" \ "$(includedir)\IceGrid\Query.h" \ "Allocatable.h" \ + "$(includedir)\IceUtil\Timer.h" \ + "$(includedir)\IceUtil\Thread.h" \ "Cache.h" \ "Util.h" \ "TraceLevels.h" \ @@ -3930,6 +3849,7 @@ Database.obj: \ "ReplicaCache.h" \ "$(includedir)\IceStorm\IceStorm.h" \ "$(includedir)\IceStorm\Metrics.h" \ + "$(includedir)\Ice\Metrics.h" \ "$(includedir)\IceStorm\Config.h" \ "ObjectCache.h" \ "AllocatableObjectCache.h" \ @@ -3937,9 +3857,12 @@ Database.obj: \ "Topics.h" \ "PluginFacadeI.h" \ "$(includedir)\IceGrid\PluginFacade.h" \ - "StringApplicationInfoDict.h" \ - "StringAdapterInfoDict.h" \ - "IdentityObjectInfoDict.h" \ + "..\..\src\IceDB\IceDB.h" \ + "$(includedir)\Ice\Initialize.h" \ + "$(includedir)\Ice\PropertiesF.h" \ + "$(includedir)\Ice\Dispatcher.h" \ + "$(includedir)\Ice\BatchRequestInterceptor.h" \ + "$(includedir)\Ice\Stream.h" \ "DescriptorHelper.h" \ "$(includedir)\IceUtil\OutputUtil.h" \ "..\..\src\IceXML\Parser.h" \ @@ -3949,7 +3872,6 @@ Database.obj: \ "$(includedir)\IceGrid\FileParser.h" \ "$(includedir)\IceGrid\Locator.h" \ "$(includedir)\IceGrid\UserAccountMapper.h" \ - "SerialsDict.h" \ FileUserAccountMapperI.obj: \ FileUserAccountMapperI.cpp \ @@ -4028,142 +3950,6 @@ FileUserAccountMapperI.obj: \ "$(includedir)\Ice\ObjectFactory.h" \ "$(includedir)\IceGrid\Config.h" \ -IdentityObjectInfoDict.obj: \ - IdentityObjectInfoDict.cpp \ - "$(includedir)\IceUtil\PushDisableWarnings.h" \ - "$(includedir)\Ice\BasicStream.h" \ - "$(includedir)\IceUtil\StringConverter.h" \ - "$(includedir)\IceUtil\Config.h" \ - "$(includedir)\IceUtil\Exception.h" \ - "$(includedir)\IceUtil\Shared.h" \ - "$(includedir)\IceUtil\Atomic.h" \ - "$(includedir)\IceUtil\Handle.h" \ - "$(includedir)\Ice\InstanceF.h" \ - "$(includedir)\Ice\Handle.h" \ - "$(includedir)\Ice\Config.h" \ - "$(includedir)\Ice\Object.h" \ - "$(includedir)\IceUtil\Mutex.h" \ - "$(includedir)\IceUtil\Lock.h" \ - "$(includedir)\IceUtil\ThreadException.h" \ - "$(includedir)\IceUtil\Time.h" \ - "$(includedir)\IceUtil\MutexProtocol.h" \ - "$(includedir)\Ice\ObjectF.h" \ - "$(includedir)\Ice\ProxyF.h" \ - "$(includedir)\Ice\ProxyHandle.h" \ - "$(includedir)\Ice\IncomingAsyncF.h" \ - "$(includedir)\Ice\Current.h" \ - "$(includedir)\Ice\Exception.h" \ - "$(includedir)\Ice\Format.h" \ - "$(includedir)\Ice\StreamF.h" \ - "$(includedir)\Ice\LocalObject.h" \ - "$(includedir)\Ice\LocalObjectF.h" \ - "$(includedir)\Ice\StreamHelpers.h" \ - "$(includedir)\IceUtil\ScopedArray.h" \ - "$(includedir)\IceUtil\Iterator.h" \ - "$(includedir)\IceUtil\Optional.h" \ - "$(includedir)\Ice\ObjectAdapterF.h" \ - "$(includedir)\IceUtil\UndefSysMacros.h" \ - "$(includedir)\IceUtil\PopDisableWarnings.h" \ - "$(includedir)\Ice\ConnectionF.h" \ - "$(includedir)\Ice\Identity.h" \ - "$(includedir)\Ice\Version.h" \ - "$(includedir)\Ice\ObjectFactoryF.h" \ - "$(includedir)\Ice\ObjectFactoryManagerF.h" \ - "$(includedir)\Ice\Buffer.h" \ - "$(includedir)\Ice\Protocol.h" \ - "$(includedir)\Ice\SlicedDataF.h" \ - "$(includedir)\Ice\UserExceptionFactory.h" \ - "$(includedir)\Ice\FactoryTable.h" \ - "$(includedir)\IceUtil\StringUtil.h" \ - "IdentityObjectInfoDict.h" \ - "$(includedir)\Freeze\Map.h" \ - "$(includedir)\Ice\Ice.h" \ - "$(includedir)\Ice\DeprecatedStringConverter.h" \ - "$(includedir)\Ice\CommunicatorF.h" \ - "$(includedir)\Ice\Plugin.h" \ - "$(includedir)\Ice\LoggerF.h" \ - "$(includedir)\Ice\BuiltinSequences.h" \ - "$(includedir)\Ice\Initialize.h" \ - "$(includedir)\IceUtil\Timer.h" \ - "$(includedir)\IceUtil\Thread.h" \ - "$(includedir)\IceUtil\Monitor.h" \ - "$(includedir)\IceUtil\Cond.h" \ - "$(includedir)\Ice\PropertiesF.h" \ - "$(includedir)\Ice\Proxy.h" \ - "$(includedir)\Ice\ProxyFactoryF.h" \ - "$(includedir)\Ice\ConnectionIF.h" \ - "$(includedir)\Ice\RequestHandlerF.h" \ - "$(includedir)\Ice\EndpointF.h" \ - "$(includedir)\Ice\EndpointTypes.h" \ - "$(includedir)\Ice\ReferenceF.h" \ - "$(includedir)\Ice\BatchRequestQueueF.h" \ - "$(includedir)\Ice\AsyncResult.h" \ - "$(includedir)\IceUtil\UniquePtr.h" \ - "$(includedir)\Ice\AsyncResultF.h" \ - "$(includedir)\Ice\ObserverHelper.h" \ - "$(includedir)\Ice\Instrumentation.h" \ - "$(includedir)\Ice\InstrumentationF.h" \ - "$(includedir)\Ice\Dispatcher.h" \ - "$(includedir)\Ice\BatchRequestInterceptor.h" \ - "$(includedir)\Ice\LocalException.h" \ - "$(includedir)\Ice\PropertiesAdmin.h" \ - "$(includedir)\Ice\GCObject.h" \ - "$(includedir)\IceUtil\MutexPtrLock.h" \ - "$(includedir)\Ice\Incoming.h" \ - "$(includedir)\Ice\ServantLocatorF.h" \ - "$(includedir)\Ice\ServantManagerF.h" \ - "$(includedir)\Ice\ResponseHandlerF.h" \ - "$(includedir)\Ice\IncomingAsync.h" \ - "$(includedir)\Ice\Properties.h" \ - "$(includedir)\Ice\Logger.h" \ - "$(includedir)\Ice\LoggerUtil.h" \ - "$(includedir)\Ice\RemoteLogger.h" \ - "$(includedir)\Ice\FactoryTableInit.h" \ - "$(includedir)\Ice\DefaultObjectFactory.h" \ - "$(includedir)\Ice\ObjectFactory.h" \ - "$(includedir)\Ice\Communicator.h" \ - "$(includedir)\Ice\RouterF.h" \ - "$(includedir)\Ice\LocatorF.h" \ - "$(includedir)\Ice\PluginF.h" \ - "$(includedir)\Ice\ImplicitContextF.h" \ - "$(includedir)\Ice\FacetMap.h" \ - "$(includedir)\Ice\CommunicatorAsync.h" \ - "$(includedir)\Ice\ObjectAdapter.h" \ - "$(includedir)\Ice\Endpoint.h" \ - "$(includedir)\Ice\ServantLocator.h" \ - "$(includedir)\Ice\SlicedData.h" \ - "$(includedir)\Ice\OutgoingAsync.h" \ - "$(includedir)\Ice\OutgoingAsyncF.h" \ - "$(includedir)\Ice\Process.h" \ - "$(includedir)\Ice\Application.h" \ - "$(includedir)\Ice\Connection.h" \ - "$(includedir)\Ice\ConnectionAsync.h" \ - "$(includedir)\Ice\Functional.h" \ - "$(includedir)\IceUtil\Functional.h" \ - "$(includedir)\Ice\Stream.h" \ - "$(includedir)\Ice\ImplicitContext.h" \ - "$(includedir)\Ice\Locator.h" \ - "$(includedir)\Ice\ProcessF.h" \ - "$(includedir)\Ice\Router.h" \ - "$(includedir)\Ice\DispatchInterceptor.h" \ - "$(includedir)\Ice\NativePropertiesAdmin.h" \ - "$(includedir)\Ice\Metrics.h" \ - "$(includedir)\Ice\SliceChecksums.h" \ - "$(includedir)\Ice\SliceChecksumDict.h" \ - "$(includedir)\Ice\Service.h" \ - "$(includedir)\Ice\RegisterPlugins.h" \ - "$(includedir)\Freeze\DB.h" \ - "$(includedir)\Freeze\Exception.h" \ - "$(includedir)\Freeze\Connection.h" \ - "$(includedir)\Freeze\Transaction.h" \ - "$(includedir)\IceGrid\Admin.h" \ - "$(includedir)\Glacier2\Session.h" \ - "$(includedir)\Glacier2\SSLInfo.h" \ - "$(includedir)\Glacier2\Config.h" \ - "$(includedir)\IceGrid\Exception.h" \ - "$(includedir)\IceGrid\Config.h" \ - "$(includedir)\IceGrid\Descriptor.h" \ - InternalRegistryI.obj: \ InternalRegistryI.cpp \ "$(includedir)\IceUtil\DisableWarnings.h" \ @@ -4313,22 +4099,7 @@ InternalRegistryI.obj: \ "$(includedir)\IceStorm\Config.h" \ "InternalRegistryI.h" \ "Database.h" \ - "$(includedir)\Freeze\Freeze.h" \ - "$(includedir)\Freeze\Initialize.h" \ - "$(includedir)\Freeze\EvictorF.h" \ - "$(includedir)\Freeze\ConnectionF.h" \ - "$(includedir)\Freeze\Index.h" \ - "$(includedir)\Freeze\DB.h" \ - "$(includedir)\Freeze\Transaction.h" \ - "$(includedir)\Freeze\BackgroundSaveEvictor.h" \ - "$(includedir)\Freeze\Evictor.h" \ - "$(includedir)\Freeze\Exception.h" \ - "$(includedir)\Freeze\TransactionalEvictor.h" \ - "$(includedir)\Freeze\Map.h" \ - "$(includedir)\Freeze\Connection.h" \ - "$(includedir)\Freeze\TransactionHolder.h" \ - "$(includedir)\Freeze\Catalog.h" \ - "$(includedir)\Freeze\CatalogData.h" \ + "..\..\src\IceUtil\FileUtil.h" \ "ServerCache.h" \ "Allocatable.h" \ "Cache.h" \ @@ -4344,9 +4115,7 @@ InternalRegistryI.obj: \ "AdapterCache.h" \ "Topics.h" \ "PluginFacadeI.h" \ - "StringApplicationInfoDict.h" \ - "StringAdapterInfoDict.h" \ - "IdentityObjectInfoDict.h" \ + "..\..\src\IceDB\IceDB.h" \ "WellKnownObjectsManager.h" \ "ReapThread.h" \ "NodeSessionI.h" \ @@ -4494,22 +4263,7 @@ LocatorI.obj: \ "$(includedir)\IceGrid\Session.h" \ "$(includedir)\IceGrid\Locator.h" \ "Database.h" \ - "$(includedir)\Freeze\Freeze.h" \ - "$(includedir)\Freeze\Initialize.h" \ - "$(includedir)\Freeze\EvictorF.h" \ - "$(includedir)\Freeze\ConnectionF.h" \ - "$(includedir)\Freeze\Index.h" \ - "$(includedir)\Freeze\DB.h" \ - "$(includedir)\Freeze\Transaction.h" \ - "$(includedir)\Freeze\BackgroundSaveEvictor.h" \ - "$(includedir)\Freeze\Evictor.h" \ - "$(includedir)\Freeze\Exception.h" \ - "$(includedir)\Freeze\TransactionalEvictor.h" \ - "$(includedir)\Freeze\Map.h" \ - "$(includedir)\Freeze\Connection.h" \ - "$(includedir)\Freeze\TransactionHolder.h" \ - "$(includedir)\Freeze\Catalog.h" \ - "$(includedir)\Freeze\CatalogData.h" \ + "..\..\src\IceUtil\FileUtil.h" \ "ServerCache.h" \ "$(includedir)\IceGrid\Query.h" \ "Allocatable.h" \ @@ -4530,9 +4284,7 @@ LocatorI.obj: \ "Topics.h" \ "PluginFacadeI.h" \ "$(includedir)\IceGrid\PluginFacade.h" \ - "StringApplicationInfoDict.h" \ - "StringAdapterInfoDict.h" \ - "IdentityObjectInfoDict.h" \ + "..\..\src\IceDB\IceDB.h" \ "WellKnownObjectsManager.h" \ "SessionI.h" \ "ReapThread.h" \ @@ -4682,22 +4434,7 @@ LocatorRegistryI.obj: \ "SessionManager.h" \ "$(includedir)\IceGrid\Query.h" \ "Database.h" \ - "$(includedir)\Freeze\Freeze.h" \ - "$(includedir)\Freeze\Initialize.h" \ - "$(includedir)\Freeze\EvictorF.h" \ - "$(includedir)\Freeze\ConnectionF.h" \ - "$(includedir)\Freeze\Index.h" \ - "$(includedir)\Freeze\DB.h" \ - "$(includedir)\Freeze\Transaction.h" \ - "$(includedir)\Freeze\BackgroundSaveEvictor.h" \ - "$(includedir)\Freeze\Evictor.h" \ - "$(includedir)\Freeze\Exception.h" \ - "$(includedir)\Freeze\TransactionalEvictor.h" \ - "$(includedir)\Freeze\Map.h" \ - "$(includedir)\Freeze\Connection.h" \ - "$(includedir)\Freeze\TransactionHolder.h" \ - "$(includedir)\Freeze\Catalog.h" \ - "$(includedir)\Freeze\CatalogData.h" \ + "..\..\src\IceUtil\FileUtil.h" \ "ServerCache.h" \ "Allocatable.h" \ "Cache.h" \ @@ -4717,9 +4454,7 @@ LocatorRegistryI.obj: \ "Topics.h" \ "PluginFacadeI.h" \ "$(includedir)\IceGrid\PluginFacade.h" \ - "StringApplicationInfoDict.h" \ - "StringAdapterInfoDict.h" \ - "IdentityObjectInfoDict.h" \ + "..\..\src\IceDB\IceDB.h" \ NodeCache.obj: \ NodeCache.cpp \ @@ -5017,22 +4752,7 @@ NodeSessionI.obj: \ "$(includedir)\IceGrid\Registry.h" \ "$(includedir)\IceGrid\Session.h" \ "Database.h" \ - "$(includedir)\Freeze\Freeze.h" \ - "$(includedir)\Freeze\Initialize.h" \ - "$(includedir)\Freeze\EvictorF.h" \ - "$(includedir)\Freeze\ConnectionF.h" \ - "$(includedir)\Freeze\Index.h" \ - "$(includedir)\Freeze\DB.h" \ - "$(includedir)\Freeze\Transaction.h" \ - "$(includedir)\Freeze\BackgroundSaveEvictor.h" \ - "$(includedir)\Freeze\Evictor.h" \ - "$(includedir)\Freeze\Exception.h" \ - "$(includedir)\Freeze\TransactionalEvictor.h" \ - "$(includedir)\Freeze\Map.h" \ - "$(includedir)\Freeze\Connection.h" \ - "$(includedir)\Freeze\TransactionHolder.h" \ - "$(includedir)\Freeze\Catalog.h" \ - "$(includedir)\Freeze\CatalogData.h" \ + "..\..\src\IceUtil\FileUtil.h" \ "ServerCache.h" \ "$(includedir)\IceGrid\Query.h" \ "Allocatable.h" \ @@ -5053,9 +4773,7 @@ NodeSessionI.obj: \ "Topics.h" \ "PluginFacadeI.h" \ "$(includedir)\IceGrid\PluginFacade.h" \ - "StringApplicationInfoDict.h" \ - "StringAdapterInfoDict.h" \ - "IdentityObjectInfoDict.h" \ + "..\..\src\IceDB\IceDB.h" \ ObjectCache.obj: \ ObjectCache.cpp \ @@ -5306,85 +5024,36 @@ PluginFacadeI.obj: \ "$(includedir)\IceGrid\Session.h" \ "NodeSessionI.h" \ "Database.h" \ - "$(includedir)\Freeze\Freeze.h" \ - "$(includedir)\Freeze\Initialize.h" \ - "$(includedir)\Ice\Ice.h" \ - "$(includedir)\Ice\DeprecatedStringConverter.h" \ - "$(includedir)\Ice\Plugin.h" \ - "$(includedir)\Ice\LoggerF.h" \ - "$(includedir)\Ice\Initialize.h" \ - "$(includedir)\IceUtil\Timer.h" \ - "$(includedir)\Ice\PropertiesF.h" \ - "$(includedir)\Ice\InstrumentationF.h" \ - "$(includedir)\Ice\Dispatcher.h" \ - "$(includedir)\Ice\BatchRequestInterceptor.h" \ - "$(includedir)\Ice\LocalException.h" \ - "$(includedir)\Ice\Logger.h" \ - "$(includedir)\Ice\LoggerUtil.h" \ - "$(includedir)\Ice\RemoteLogger.h" \ - "$(includedir)\Ice\Communicator.h" \ - "$(includedir)\Ice\RouterF.h" \ - "$(includedir)\Ice\LocatorF.h" \ - "$(includedir)\Ice\PluginF.h" \ - "$(includedir)\Ice\ImplicitContextF.h" \ - "$(includedir)\Ice\FacetMap.h" \ - "$(includedir)\Ice\CommunicatorAsync.h" \ - "$(includedir)\Ice\ObjectAdapter.h" \ - "$(includedir)\Ice\Endpoint.h" \ - "$(includedir)\Ice\ServantLocator.h" \ - "$(includedir)\Ice\SlicedData.h" \ - "$(includedir)\Ice\OutgoingAsync.h" \ - "$(includedir)\Ice\OutgoingAsyncF.h" \ - "$(includedir)\Ice\Process.h" \ - "$(includedir)\Ice\Application.h" \ - "$(includedir)\Ice\Connection.h" \ - "$(includedir)\Ice\ConnectionAsync.h" \ - "$(includedir)\Ice\Functional.h" \ - "$(includedir)\IceUtil\Functional.h" \ - "$(includedir)\Ice\Stream.h" \ - "$(includedir)\Ice\ImplicitContext.h" \ - "$(includedir)\Ice\Router.h" \ - "$(includedir)\Ice\DispatchInterceptor.h" \ - "$(includedir)\Ice\NativePropertiesAdmin.h" \ - "$(includedir)\Ice\Metrics.h" \ - "$(includedir)\Ice\SliceChecksums.h" \ - "$(includedir)\Ice\Service.h" \ - "$(includedir)\Ice\RegisterPlugins.h" \ - "$(includedir)\Freeze\EvictorF.h" \ - "$(includedir)\Freeze\ConnectionF.h" \ - "$(includedir)\Freeze\Index.h" \ - "$(includedir)\Freeze\DB.h" \ - "$(includedir)\Freeze\Transaction.h" \ - "$(includedir)\Freeze\BackgroundSaveEvictor.h" \ - "$(includedir)\Freeze\Evictor.h" \ - "$(includedir)\Freeze\Exception.h" \ - "$(includedir)\Freeze\TransactionalEvictor.h" \ - "$(includedir)\Freeze\Map.h" \ - "$(includedir)\Freeze\Connection.h" \ - "$(includedir)\Freeze\TransactionHolder.h" \ - "$(includedir)\Freeze\Catalog.h" \ - "$(includedir)\Freeze\CatalogData.h" \ + "..\..\src\IceUtil\FileUtil.h" \ "ServerCache.h" \ "$(includedir)\IceGrid\Query.h" \ "Allocatable.h" \ + "$(includedir)\IceUtil\Timer.h" \ "Cache.h" \ "Util.h" \ "$(includedir)\IceUtil\StringUtil.h" \ "$(includedir)\IceUtil\Random.h" \ "TraceLevels.h" \ + "$(includedir)\Ice\LoggerF.h" \ "NodeCache.h" \ "$(includedir)\IceUtil\RecMutex.h" \ "ReplicaCache.h" \ "$(includedir)\IceStorm\IceStorm.h" \ "$(includedir)\IceStorm\Metrics.h" \ + "$(includedir)\Ice\Metrics.h" \ "$(includedir)\IceStorm\Config.h" \ "ObjectCache.h" \ "AllocatableObjectCache.h" \ "AdapterCache.h" \ "Topics.h" \ - "StringApplicationInfoDict.h" \ - "StringAdapterInfoDict.h" \ - "IdentityObjectInfoDict.h" \ + "..\..\src\IceDB\IceDB.h" \ + "$(includedir)\Ice\Initialize.h" \ + "$(includedir)\Ice\PropertiesF.h" \ + "$(includedir)\Ice\InstrumentationF.h" \ + "$(includedir)\Ice\Dispatcher.h" \ + "$(includedir)\Ice\Plugin.h" \ + "$(includedir)\Ice\BatchRequestInterceptor.h" \ + "$(includedir)\Ice\Stream.h" \ QueryI.obj: \ QueryI.cpp \ @@ -5478,77 +5147,23 @@ QueryI.obj: \ "QueryI.h" \ "$(includedir)\IceGrid\Query.h" \ "Database.h" \ - "$(includedir)\Freeze\Freeze.h" \ - "$(includedir)\Freeze\Initialize.h" \ - "$(includedir)\Ice\Ice.h" \ - "$(includedir)\Ice\DeprecatedStringConverter.h" \ - "$(includedir)\Ice\Plugin.h" \ - "$(includedir)\Ice\LoggerF.h" \ - "$(includedir)\Ice\Initialize.h" \ - "$(includedir)\IceUtil\Timer.h" \ - "$(includedir)\IceUtil\Thread.h" \ - "$(includedir)\Ice\PropertiesF.h" \ - "$(includedir)\Ice\InstrumentationF.h" \ - "$(includedir)\Ice\Dispatcher.h" \ - "$(includedir)\Ice\BatchRequestInterceptor.h" \ - "$(includedir)\Ice\LocalException.h" \ - "$(includedir)\Ice\Logger.h" \ - "$(includedir)\Ice\LoggerUtil.h" \ - "$(includedir)\Ice\RemoteLogger.h" \ - "$(includedir)\Ice\Communicator.h" \ - "$(includedir)\Ice\RouterF.h" \ - "$(includedir)\Ice\LocatorF.h" \ - "$(includedir)\Ice\PluginF.h" \ - "$(includedir)\Ice\ImplicitContextF.h" \ - "$(includedir)\Ice\FacetMap.h" \ - "$(includedir)\Ice\CommunicatorAsync.h" \ - "$(includedir)\Ice\ObjectAdapter.h" \ - "$(includedir)\Ice\Endpoint.h" \ - "$(includedir)\Ice\ServantLocator.h" \ - "$(includedir)\Ice\SlicedData.h" \ - "$(includedir)\Ice\OutgoingAsync.h" \ - "$(includedir)\Ice\OutgoingAsyncF.h" \ - "$(includedir)\Ice\Process.h" \ - "$(includedir)\Ice\Application.h" \ - "$(includedir)\Ice\Connection.h" \ - "$(includedir)\Ice\ConnectionAsync.h" \ - "$(includedir)\Ice\Functional.h" \ - "$(includedir)\IceUtil\Functional.h" \ - "$(includedir)\Ice\Stream.h" \ - "$(includedir)\Ice\ImplicitContext.h" \ - "$(includedir)\Ice\Router.h" \ - "$(includedir)\Ice\DispatchInterceptor.h" \ - "$(includedir)\Ice\NativePropertiesAdmin.h" \ - "$(includedir)\Ice\Metrics.h" \ - "$(includedir)\Ice\SliceChecksums.h" \ - "$(includedir)\Ice\Service.h" \ - "$(includedir)\Ice\RegisterPlugins.h" \ - "$(includedir)\Freeze\EvictorF.h" \ - "$(includedir)\Freeze\ConnectionF.h" \ - "$(includedir)\Freeze\Index.h" \ - "$(includedir)\Freeze\DB.h" \ - "$(includedir)\Freeze\Transaction.h" \ - "$(includedir)\Freeze\BackgroundSaveEvictor.h" \ - "$(includedir)\Freeze\Evictor.h" \ - "$(includedir)\Freeze\Exception.h" \ - "$(includedir)\Freeze\TransactionalEvictor.h" \ - "$(includedir)\Freeze\Map.h" \ - "$(includedir)\Freeze\Connection.h" \ - "$(includedir)\Freeze\TransactionHolder.h" \ - "$(includedir)\Freeze\Catalog.h" \ - "$(includedir)\Freeze\CatalogData.h" \ + "..\..\src\IceUtil\FileUtil.h" \ "ServerCache.h" \ "Allocatable.h" \ + "$(includedir)\IceUtil\Timer.h" \ + "$(includedir)\IceUtil\Thread.h" \ "Cache.h" \ "Util.h" \ "$(includedir)\IceUtil\StringUtil.h" \ "$(includedir)\IceUtil\Random.h" \ "TraceLevels.h" \ + "$(includedir)\Ice\LoggerF.h" \ "NodeCache.h" \ "$(includedir)\IceUtil\RecMutex.h" \ "ReplicaCache.h" \ "$(includedir)\IceStorm\IceStorm.h" \ "$(includedir)\IceStorm\Metrics.h" \ + "$(includedir)\Ice\Metrics.h" \ "$(includedir)\IceStorm\Config.h" \ "ObjectCache.h" \ "AllocatableObjectCache.h" \ @@ -5556,9 +5171,14 @@ QueryI.obj: \ "Topics.h" \ "PluginFacadeI.h" \ "$(includedir)\IceGrid\PluginFacade.h" \ - "StringApplicationInfoDict.h" \ - "StringAdapterInfoDict.h" \ - "IdentityObjectInfoDict.h" \ + "..\..\src\IceDB\IceDB.h" \ + "$(includedir)\Ice\Initialize.h" \ + "$(includedir)\Ice\PropertiesF.h" \ + "$(includedir)\Ice\InstrumentationF.h" \ + "$(includedir)\Ice\Dispatcher.h" \ + "$(includedir)\Ice\Plugin.h" \ + "$(includedir)\Ice\BatchRequestInterceptor.h" \ + "$(includedir)\Ice\Stream.h" \ ReapThread.obj: \ ReapThread.cpp \ @@ -5696,12 +5316,13 @@ RegistryAdminRouter.obj: \ "$(includedir)\IceUtil\MutexProtocol.h" \ "$(includedir)\IceUtil\Shared.h" \ "$(includedir)\IceUtil\Atomic.h" \ + "..\..\src\IceUtil\FileUtil.h" \ + "$(includedir)\IceUtil\Handle.h" \ "$(includedir)\Ice\CommunicatorF.h" \ "$(includedir)\IceUtil\PushDisableWarnings.h" \ "$(includedir)\Ice\ProxyF.h" \ "$(includedir)\Ice\Config.h" \ "$(includedir)\Ice\ProxyHandle.h" \ - "$(includedir)\IceUtil\Handle.h" \ "$(includedir)\Ice\ObjectF.h" \ "$(includedir)\Ice\Handle.h" \ "$(includedir)\Ice\Exception.h" \ @@ -5715,20 +5336,7 @@ RegistryAdminRouter.obj: \ "$(includedir)\IceUtil\Optional.h" \ "$(includedir)\IceUtil\UndefSysMacros.h" \ "$(includedir)\IceUtil\PopDisableWarnings.h" \ - "$(includedir)\Freeze\Freeze.h" \ - "$(includedir)\Freeze\Initialize.h" \ - "$(includedir)\Ice\Ice.h" \ - "$(includedir)\Ice\DeprecatedStringConverter.h" \ - "$(includedir)\IceUtil\StringConverter.h" \ - "$(includedir)\Ice\Plugin.h" \ - "$(includedir)\Ice\LoggerF.h" \ - "$(includedir)\Ice\BuiltinSequences.h" \ - "$(includedir)\Ice\Initialize.h" \ - "$(includedir)\IceUtil\Timer.h" \ - "$(includedir)\IceUtil\Thread.h" \ - "$(includedir)\IceUtil\Monitor.h" \ - "$(includedir)\IceUtil\Cond.h" \ - "$(includedir)\Ice\PropertiesF.h" \ + "$(includedir)\IceGrid\Admin.h" \ "$(includedir)\Ice\Proxy.h" \ "$(includedir)\Ice\ProxyFactoryF.h" \ "$(includedir)\Ice\ConnectionIF.h" \ @@ -5739,6 +5347,8 @@ RegistryAdminRouter.obj: \ "$(includedir)\Ice\ReferenceF.h" \ "$(includedir)\Ice\BatchRequestQueueF.h" \ "$(includedir)\Ice\AsyncResult.h" \ + "$(includedir)\IceUtil\Monitor.h" \ + "$(includedir)\IceUtil\Cond.h" \ "$(includedir)\IceUtil\UniquePtr.h" \ "$(includedir)\Ice\ConnectionF.h" \ "$(includedir)\Ice\InstanceF.h" \ @@ -5749,6 +5359,7 @@ RegistryAdminRouter.obj: \ "$(includedir)\Ice\Identity.h" \ "$(includedir)\Ice\Version.h" \ "$(includedir)\Ice\BasicStream.h" \ + "$(includedir)\IceUtil\StringConverter.h" \ "$(includedir)\Ice\Object.h" \ "$(includedir)\Ice\IncomingAsyncF.h" \ "$(includedir)\Ice\ObjectFactoryF.h" \ @@ -5758,11 +5369,6 @@ RegistryAdminRouter.obj: \ "$(includedir)\Ice\SlicedDataF.h" \ "$(includedir)\Ice\UserExceptionFactory.h" \ "$(includedir)\Ice\FactoryTable.h" \ - "$(includedir)\Ice\InstrumentationF.h" \ - "$(includedir)\Ice\Dispatcher.h" \ - "$(includedir)\Ice\BatchRequestInterceptor.h" \ - "$(includedir)\Ice\LocalException.h" \ - "$(includedir)\Ice\PropertiesAdmin.h" \ "$(includedir)\Ice\GCObject.h" \ "$(includedir)\IceUtil\MutexPtrLock.h" \ "$(includedir)\Ice\Incoming.h" \ @@ -5770,59 +5376,13 @@ RegistryAdminRouter.obj: \ "$(includedir)\Ice\ServantManagerF.h" \ "$(includedir)\Ice\ResponseHandlerF.h" \ "$(includedir)\Ice\IncomingAsync.h" \ - "$(includedir)\Ice\Properties.h" \ - "$(includedir)\Ice\Logger.h" \ - "$(includedir)\Ice\LoggerUtil.h" \ - "$(includedir)\Ice\RemoteLogger.h" \ "$(includedir)\Ice\FactoryTableInit.h" \ "$(includedir)\Ice\DefaultObjectFactory.h" \ "$(includedir)\Ice\ObjectFactory.h" \ - "$(includedir)\Ice\Communicator.h" \ - "$(includedir)\Ice\RouterF.h" \ - "$(includedir)\Ice\LocatorF.h" \ - "$(includedir)\Ice\PluginF.h" \ - "$(includedir)\Ice\ImplicitContextF.h" \ - "$(includedir)\Ice\FacetMap.h" \ - "$(includedir)\Ice\CommunicatorAsync.h" \ - "$(includedir)\Ice\ObjectAdapter.h" \ - "$(includedir)\Ice\Endpoint.h" \ - "$(includedir)\Ice\ServantLocator.h" \ - "$(includedir)\Ice\SlicedData.h" \ - "$(includedir)\Ice\OutgoingAsync.h" \ - "$(includedir)\Ice\OutgoingAsyncF.h" \ - "$(includedir)\Ice\Process.h" \ - "$(includedir)\Ice\Application.h" \ - "$(includedir)\Ice\Connection.h" \ - "$(includedir)\Ice\ConnectionAsync.h" \ - "$(includedir)\Ice\Functional.h" \ - "$(includedir)\IceUtil\Functional.h" \ - "$(includedir)\Ice\Stream.h" \ - "$(includedir)\Ice\ImplicitContext.h" \ - "$(includedir)\Ice\Locator.h" \ - "$(includedir)\Ice\ProcessF.h" \ - "$(includedir)\Ice\Router.h" \ - "$(includedir)\Ice\DispatchInterceptor.h" \ - "$(includedir)\Ice\NativePropertiesAdmin.h" \ - "$(includedir)\Ice\Metrics.h" \ - "$(includedir)\Ice\SliceChecksums.h" \ + "$(includedir)\Ice\BuiltinSequences.h" \ + "$(includedir)\Ice\Properties.h" \ + "$(includedir)\Ice\PropertiesAdmin.h" \ "$(includedir)\Ice\SliceChecksumDict.h" \ - "$(includedir)\Ice\Service.h" \ - "$(includedir)\Ice\RegisterPlugins.h" \ - "$(includedir)\Freeze\EvictorF.h" \ - "$(includedir)\Freeze\ConnectionF.h" \ - "$(includedir)\Freeze\Index.h" \ - "$(includedir)\Freeze\DB.h" \ - "$(includedir)\Freeze\Transaction.h" \ - "$(includedir)\Freeze\BackgroundSaveEvictor.h" \ - "$(includedir)\Freeze\Evictor.h" \ - "$(includedir)\Freeze\Exception.h" \ - "$(includedir)\Freeze\TransactionalEvictor.h" \ - "$(includedir)\Freeze\Map.h" \ - "$(includedir)\Freeze\Connection.h" \ - "$(includedir)\Freeze\TransactionHolder.h" \ - "$(includedir)\Freeze\Catalog.h" \ - "$(includedir)\Freeze\CatalogData.h" \ - "$(includedir)\IceGrid\Admin.h" \ "$(includedir)\Glacier2\Session.h" \ "$(includedir)\Glacier2\SSLInfo.h" \ "$(includedir)\Glacier2\Config.h" \ @@ -5830,22 +5390,28 @@ RegistryAdminRouter.obj: \ "$(includedir)\IceGrid\Config.h" \ "$(includedir)\IceGrid\Descriptor.h" \ "Internal.h" \ + "$(includedir)\Ice\ProcessF.h" \ + "$(includedir)\Ice\Locator.h" \ "$(includedir)\IceGrid\Observer.h" \ "$(includedir)\IceGrid\Registry.h" \ "$(includedir)\IceGrid\Session.h" \ "ServerCache.h" \ "$(includedir)\IceGrid\Query.h" \ "Allocatable.h" \ + "$(includedir)\IceUtil\Timer.h" \ + "$(includedir)\IceUtil\Thread.h" \ "Cache.h" \ "Util.h" \ "$(includedir)\IceUtil\StringUtil.h" \ "$(includedir)\IceUtil\Random.h" \ "TraceLevels.h" \ + "$(includedir)\Ice\LoggerF.h" \ "NodeCache.h" \ "$(includedir)\IceUtil\RecMutex.h" \ "ReplicaCache.h" \ "$(includedir)\IceStorm\IceStorm.h" \ "$(includedir)\IceStorm\Metrics.h" \ + "$(includedir)\Ice\Metrics.h" \ "$(includedir)\IceStorm\Config.h" \ "ObjectCache.h" \ "AllocatableObjectCache.h" \ @@ -5853,10 +5419,47 @@ RegistryAdminRouter.obj: \ "Topics.h" \ "PluginFacadeI.h" \ "$(includedir)\IceGrid\PluginFacade.h" \ - "StringApplicationInfoDict.h" \ - "StringAdapterInfoDict.h" \ - "IdentityObjectInfoDict.h" \ + "..\..\src\IceDB\IceDB.h" \ + "$(includedir)\Ice\Initialize.h" \ + "$(includedir)\Ice\PropertiesF.h" \ + "$(includedir)\Ice\InstrumentationF.h" \ + "$(includedir)\Ice\Dispatcher.h" \ + "$(includedir)\Ice\Plugin.h" \ + "$(includedir)\Ice\BatchRequestInterceptor.h" \ + "$(includedir)\Ice\Stream.h" \ "AdminRouter.h" \ + "$(includedir)\Ice\Ice.h" \ + "$(includedir)\Ice\DeprecatedStringConverter.h" \ + "$(includedir)\Ice\LocalException.h" \ + "$(includedir)\Ice\Logger.h" \ + "$(includedir)\Ice\LoggerUtil.h" \ + "$(includedir)\Ice\RemoteLogger.h" \ + "$(includedir)\Ice\Communicator.h" \ + "$(includedir)\Ice\RouterF.h" \ + "$(includedir)\Ice\LocatorF.h" \ + "$(includedir)\Ice\PluginF.h" \ + "$(includedir)\Ice\ImplicitContextF.h" \ + "$(includedir)\Ice\FacetMap.h" \ + "$(includedir)\Ice\CommunicatorAsync.h" \ + "$(includedir)\Ice\ObjectAdapter.h" \ + "$(includedir)\Ice\Endpoint.h" \ + "$(includedir)\Ice\ServantLocator.h" \ + "$(includedir)\Ice\SlicedData.h" \ + "$(includedir)\Ice\OutgoingAsync.h" \ + "$(includedir)\Ice\OutgoingAsyncF.h" \ + "$(includedir)\Ice\Process.h" \ + "$(includedir)\Ice\Application.h" \ + "$(includedir)\Ice\Connection.h" \ + "$(includedir)\Ice\ConnectionAsync.h" \ + "$(includedir)\Ice\Functional.h" \ + "$(includedir)\IceUtil\Functional.h" \ + "$(includedir)\Ice\ImplicitContext.h" \ + "$(includedir)\Ice\Router.h" \ + "$(includedir)\Ice\DispatchInterceptor.h" \ + "$(includedir)\Ice\NativePropertiesAdmin.h" \ + "$(includedir)\Ice\SliceChecksums.h" \ + "$(includedir)\Ice\Service.h" \ + "$(includedir)\Ice\RegisterPlugins.h" \ RegistryI.obj: \ RegistryI.cpp \ @@ -6006,22 +5609,6 @@ RegistryI.obj: \ "$(includedir)\Glacier2\NullPermissionsVerifier.h" \ "TraceLevels.h" \ "Database.h" \ - "$(includedir)\Freeze\Freeze.h" \ - "$(includedir)\Freeze\Initialize.h" \ - "$(includedir)\Freeze\EvictorF.h" \ - "$(includedir)\Freeze\ConnectionF.h" \ - "$(includedir)\Freeze\Index.h" \ - "$(includedir)\Freeze\DB.h" \ - "$(includedir)\Freeze\Transaction.h" \ - "$(includedir)\Freeze\BackgroundSaveEvictor.h" \ - "$(includedir)\Freeze\Evictor.h" \ - "$(includedir)\Freeze\Exception.h" \ - "$(includedir)\Freeze\TransactionalEvictor.h" \ - "$(includedir)\Freeze\Map.h" \ - "$(includedir)\Freeze\Connection.h" \ - "$(includedir)\Freeze\TransactionHolder.h" \ - "$(includedir)\Freeze\Catalog.h" \ - "$(includedir)\Freeze\CatalogData.h" \ "$(includedir)\IceGrid\Admin.h" \ "$(includedir)\Glacier2\Session.h" \ "$(includedir)\IceGrid\Exception.h" \ @@ -6047,9 +5634,7 @@ RegistryI.obj: \ "Topics.h" \ "PluginFacadeI.h" \ "$(includedir)\IceGrid\PluginFacade.h" \ - "StringApplicationInfoDict.h" \ - "StringAdapterInfoDict.h" \ - "IdentityObjectInfoDict.h" \ + "..\..\src\IceDB\IceDB.h" \ "ReapThread.h" \ "RegistryI.h" \ "$(includedir)\IceGrid\Locator.h" \ @@ -6327,22 +5912,7 @@ ReplicaSessionI.obj: \ "Internal.h" \ "$(includedir)\IceGrid\Observer.h" \ "Database.h" \ - "$(includedir)\Freeze\Freeze.h" \ - "$(includedir)\Freeze\Initialize.h" \ - "$(includedir)\Freeze\EvictorF.h" \ - "$(includedir)\Freeze\ConnectionF.h" \ - "$(includedir)\Freeze\Index.h" \ - "$(includedir)\Freeze\DB.h" \ - "$(includedir)\Freeze\Transaction.h" \ - "$(includedir)\Freeze\BackgroundSaveEvictor.h" \ - "$(includedir)\Freeze\Evictor.h" \ - "$(includedir)\Freeze\Exception.h" \ - "$(includedir)\Freeze\TransactionalEvictor.h" \ - "$(includedir)\Freeze\Map.h" \ - "$(includedir)\Freeze\Connection.h" \ - "$(includedir)\Freeze\TransactionHolder.h" \ - "$(includedir)\Freeze\Catalog.h" \ - "$(includedir)\Freeze\CatalogData.h" \ + "..\..\src\IceUtil\FileUtil.h" \ "ServerCache.h" \ "$(includedir)\IceGrid\Query.h" \ "Allocatable.h" \ @@ -6363,9 +5933,7 @@ ReplicaSessionI.obj: \ "Topics.h" \ "PluginFacadeI.h" \ "$(includedir)\IceGrid\PluginFacade.h" \ - "StringApplicationInfoDict.h" \ - "StringAdapterInfoDict.h" \ - "IdentityObjectInfoDict.h" \ + "..\..\src\IceDB\IceDB.h" \ "WellKnownObjectsManager.h" \ "$(includedir)\IceGrid\Locator.h" \ "PlatformInfo.h" \ @@ -6507,22 +6075,7 @@ ReplicaSessionManager.obj: \ "$(includedir)\IceGrid\Session.h" \ "TraceLevels.h" \ "Database.h" \ - "$(includedir)\Freeze\Freeze.h" \ - "$(includedir)\Freeze\Initialize.h" \ - "$(includedir)\Freeze\EvictorF.h" \ - "$(includedir)\Freeze\ConnectionF.h" \ - "$(includedir)\Freeze\Index.h" \ - "$(includedir)\Freeze\DB.h" \ - "$(includedir)\Freeze\Transaction.h" \ - "$(includedir)\Freeze\BackgroundSaveEvictor.h" \ - "$(includedir)\Freeze\Evictor.h" \ - "$(includedir)\Freeze\Exception.h" \ - "$(includedir)\Freeze\TransactionalEvictor.h" \ - "$(includedir)\Freeze\Map.h" \ - "$(includedir)\Freeze\Connection.h" \ - "$(includedir)\Freeze\TransactionHolder.h" \ - "$(includedir)\Freeze\Catalog.h" \ - "$(includedir)\Freeze\CatalogData.h" \ + "..\..\src\IceUtil\FileUtil.h" \ "ServerCache.h" \ "Allocatable.h" \ "Cache.h" \ @@ -6541,141 +6094,10 @@ ReplicaSessionManager.obj: \ "Topics.h" \ "PluginFacadeI.h" \ "$(includedir)\IceGrid\PluginFacade.h" \ - "StringApplicationInfoDict.h" \ - "StringAdapterInfoDict.h" \ - "IdentityObjectInfoDict.h" \ + "..\..\src\IceDB\IceDB.h" \ "WellKnownObjectsManager.h" \ "$(includedir)\IceGrid\Locator.h" \ -SerialsDict.obj: \ - SerialsDict.cpp \ - "$(includedir)\IceUtil\PushDisableWarnings.h" \ - "$(includedir)\Ice\BasicStream.h" \ - "$(includedir)\IceUtil\StringConverter.h" \ - "$(includedir)\IceUtil\Config.h" \ - "$(includedir)\IceUtil\Exception.h" \ - "$(includedir)\IceUtil\Shared.h" \ - "$(includedir)\IceUtil\Atomic.h" \ - "$(includedir)\IceUtil\Handle.h" \ - "$(includedir)\Ice\InstanceF.h" \ - "$(includedir)\Ice\Handle.h" \ - "$(includedir)\Ice\Config.h" \ - "$(includedir)\Ice\Object.h" \ - "$(includedir)\IceUtil\Mutex.h" \ - "$(includedir)\IceUtil\Lock.h" \ - "$(includedir)\IceUtil\ThreadException.h" \ - "$(includedir)\IceUtil\Time.h" \ - "$(includedir)\IceUtil\MutexProtocol.h" \ - "$(includedir)\Ice\ObjectF.h" \ - "$(includedir)\Ice\ProxyF.h" \ - "$(includedir)\Ice\ProxyHandle.h" \ - "$(includedir)\Ice\IncomingAsyncF.h" \ - "$(includedir)\Ice\Current.h" \ - "$(includedir)\Ice\Exception.h" \ - "$(includedir)\Ice\Format.h" \ - "$(includedir)\Ice\StreamF.h" \ - "$(includedir)\Ice\LocalObject.h" \ - "$(includedir)\Ice\LocalObjectF.h" \ - "$(includedir)\Ice\StreamHelpers.h" \ - "$(includedir)\IceUtil\ScopedArray.h" \ - "$(includedir)\IceUtil\Iterator.h" \ - "$(includedir)\IceUtil\Optional.h" \ - "$(includedir)\Ice\ObjectAdapterF.h" \ - "$(includedir)\IceUtil\UndefSysMacros.h" \ - "$(includedir)\IceUtil\PopDisableWarnings.h" \ - "$(includedir)\Ice\ConnectionF.h" \ - "$(includedir)\Ice\Identity.h" \ - "$(includedir)\Ice\Version.h" \ - "$(includedir)\Ice\ObjectFactoryF.h" \ - "$(includedir)\Ice\ObjectFactoryManagerF.h" \ - "$(includedir)\Ice\Buffer.h" \ - "$(includedir)\Ice\Protocol.h" \ - "$(includedir)\Ice\SlicedDataF.h" \ - "$(includedir)\Ice\UserExceptionFactory.h" \ - "$(includedir)\Ice\FactoryTable.h" \ - "$(includedir)\IceUtil\StringUtil.h" \ - "SerialsDict.h" \ - "$(includedir)\Freeze\Map.h" \ - "$(includedir)\Ice\Ice.h" \ - "$(includedir)\Ice\DeprecatedStringConverter.h" \ - "$(includedir)\Ice\CommunicatorF.h" \ - "$(includedir)\Ice\Plugin.h" \ - "$(includedir)\Ice\LoggerF.h" \ - "$(includedir)\Ice\BuiltinSequences.h" \ - "$(includedir)\Ice\Initialize.h" \ - "$(includedir)\IceUtil\Timer.h" \ - "$(includedir)\IceUtil\Thread.h" \ - "$(includedir)\IceUtil\Monitor.h" \ - "$(includedir)\IceUtil\Cond.h" \ - "$(includedir)\Ice\PropertiesF.h" \ - "$(includedir)\Ice\Proxy.h" \ - "$(includedir)\Ice\ProxyFactoryF.h" \ - "$(includedir)\Ice\ConnectionIF.h" \ - "$(includedir)\Ice\RequestHandlerF.h" \ - "$(includedir)\Ice\EndpointF.h" \ - "$(includedir)\Ice\EndpointTypes.h" \ - "$(includedir)\Ice\ReferenceF.h" \ - "$(includedir)\Ice\BatchRequestQueueF.h" \ - "$(includedir)\Ice\AsyncResult.h" \ - "$(includedir)\IceUtil\UniquePtr.h" \ - "$(includedir)\Ice\AsyncResultF.h" \ - "$(includedir)\Ice\ObserverHelper.h" \ - "$(includedir)\Ice\Instrumentation.h" \ - "$(includedir)\Ice\InstrumentationF.h" \ - "$(includedir)\Ice\Dispatcher.h" \ - "$(includedir)\Ice\BatchRequestInterceptor.h" \ - "$(includedir)\Ice\LocalException.h" \ - "$(includedir)\Ice\PropertiesAdmin.h" \ - "$(includedir)\Ice\GCObject.h" \ - "$(includedir)\IceUtil\MutexPtrLock.h" \ - "$(includedir)\Ice\Incoming.h" \ - "$(includedir)\Ice\ServantLocatorF.h" \ - "$(includedir)\Ice\ServantManagerF.h" \ - "$(includedir)\Ice\ResponseHandlerF.h" \ - "$(includedir)\Ice\IncomingAsync.h" \ - "$(includedir)\Ice\Properties.h" \ - "$(includedir)\Ice\Logger.h" \ - "$(includedir)\Ice\LoggerUtil.h" \ - "$(includedir)\Ice\RemoteLogger.h" \ - "$(includedir)\Ice\FactoryTableInit.h" \ - "$(includedir)\Ice\DefaultObjectFactory.h" \ - "$(includedir)\Ice\ObjectFactory.h" \ - "$(includedir)\Ice\Communicator.h" \ - "$(includedir)\Ice\RouterF.h" \ - "$(includedir)\Ice\LocatorF.h" \ - "$(includedir)\Ice\PluginF.h" \ - "$(includedir)\Ice\ImplicitContextF.h" \ - "$(includedir)\Ice\FacetMap.h" \ - "$(includedir)\Ice\CommunicatorAsync.h" \ - "$(includedir)\Ice\ObjectAdapter.h" \ - "$(includedir)\Ice\Endpoint.h" \ - "$(includedir)\Ice\ServantLocator.h" \ - "$(includedir)\Ice\SlicedData.h" \ - "$(includedir)\Ice\OutgoingAsync.h" \ - "$(includedir)\Ice\OutgoingAsyncF.h" \ - "$(includedir)\Ice\Process.h" \ - "$(includedir)\Ice\Application.h" \ - "$(includedir)\Ice\Connection.h" \ - "$(includedir)\Ice\ConnectionAsync.h" \ - "$(includedir)\Ice\Functional.h" \ - "$(includedir)\IceUtil\Functional.h" \ - "$(includedir)\Ice\Stream.h" \ - "$(includedir)\Ice\ImplicitContext.h" \ - "$(includedir)\Ice\Locator.h" \ - "$(includedir)\Ice\ProcessF.h" \ - "$(includedir)\Ice\Router.h" \ - "$(includedir)\Ice\DispatchInterceptor.h" \ - "$(includedir)\Ice\NativePropertiesAdmin.h" \ - "$(includedir)\Ice\Metrics.h" \ - "$(includedir)\Ice\SliceChecksums.h" \ - "$(includedir)\Ice\SliceChecksumDict.h" \ - "$(includedir)\Ice\Service.h" \ - "$(includedir)\Ice\RegisterPlugins.h" \ - "$(includedir)\Freeze\DB.h" \ - "$(includedir)\Freeze\Exception.h" \ - "$(includedir)\Freeze\Connection.h" \ - "$(includedir)\Freeze\Transaction.h" \ - ServerCache.obj: \ ServerCache.cpp \ "$(includedir)\IceUtil\DisableWarnings.h" \ @@ -6984,22 +6406,7 @@ SessionI.obj: \ "$(includedir)\IceGrid\Registry.h" \ "$(includedir)\IceGrid\Locator.h" \ "Database.h" \ - "$(includedir)\Freeze\Freeze.h" \ - "$(includedir)\Freeze\Initialize.h" \ - "$(includedir)\Freeze\EvictorF.h" \ - "$(includedir)\Freeze\ConnectionF.h" \ - "$(includedir)\Freeze\Index.h" \ - "$(includedir)\Freeze\DB.h" \ - "$(includedir)\Freeze\Transaction.h" \ - "$(includedir)\Freeze\BackgroundSaveEvictor.h" \ - "$(includedir)\Freeze\Evictor.h" \ - "$(includedir)\Freeze\Exception.h" \ - "$(includedir)\Freeze\TransactionalEvictor.h" \ - "$(includedir)\Freeze\Map.h" \ - "$(includedir)\Freeze\Connection.h" \ - "$(includedir)\Freeze\TransactionHolder.h" \ - "$(includedir)\Freeze\Catalog.h" \ - "$(includedir)\Freeze\CatalogData.h" \ + "..\..\src\IceUtil\FileUtil.h" \ "ServerCache.h" \ "Allocatable.h" \ "Cache.h" \ @@ -7018,9 +6425,7 @@ SessionI.obj: \ "Topics.h" \ "PluginFacadeI.h" \ "$(includedir)\IceGrid\PluginFacade.h" \ - "StringApplicationInfoDict.h" \ - "StringAdapterInfoDict.h" \ - "IdentityObjectInfoDict.h" \ + "..\..\src\IceDB\IceDB.h" \ "$(includedir)\IceSSL\Plugin.h" \ "$(includedir)\IceSSL\Config.h" \ "$(includedir)\IceSSL\ConnectionInfo.h" \ @@ -7159,278 +6564,6 @@ SessionServantManager.obj: \ "$(includedir)\Glacier2\SSLInfo.h" \ "$(includedir)\Glacier2\Config.h" \ -StringAdapterInfoDict.obj: \ - StringAdapterInfoDict.cpp \ - "$(includedir)\IceUtil\PushDisableWarnings.h" \ - "$(includedir)\Ice\BasicStream.h" \ - "$(includedir)\IceUtil\StringConverter.h" \ - "$(includedir)\IceUtil\Config.h" \ - "$(includedir)\IceUtil\Exception.h" \ - "$(includedir)\IceUtil\Shared.h" \ - "$(includedir)\IceUtil\Atomic.h" \ - "$(includedir)\IceUtil\Handle.h" \ - "$(includedir)\Ice\InstanceF.h" \ - "$(includedir)\Ice\Handle.h" \ - "$(includedir)\Ice\Config.h" \ - "$(includedir)\Ice\Object.h" \ - "$(includedir)\IceUtil\Mutex.h" \ - "$(includedir)\IceUtil\Lock.h" \ - "$(includedir)\IceUtil\ThreadException.h" \ - "$(includedir)\IceUtil\Time.h" \ - "$(includedir)\IceUtil\MutexProtocol.h" \ - "$(includedir)\Ice\ObjectF.h" \ - "$(includedir)\Ice\ProxyF.h" \ - "$(includedir)\Ice\ProxyHandle.h" \ - "$(includedir)\Ice\IncomingAsyncF.h" \ - "$(includedir)\Ice\Current.h" \ - "$(includedir)\Ice\Exception.h" \ - "$(includedir)\Ice\Format.h" \ - "$(includedir)\Ice\StreamF.h" \ - "$(includedir)\Ice\LocalObject.h" \ - "$(includedir)\Ice\LocalObjectF.h" \ - "$(includedir)\Ice\StreamHelpers.h" \ - "$(includedir)\IceUtil\ScopedArray.h" \ - "$(includedir)\IceUtil\Iterator.h" \ - "$(includedir)\IceUtil\Optional.h" \ - "$(includedir)\Ice\ObjectAdapterF.h" \ - "$(includedir)\IceUtil\UndefSysMacros.h" \ - "$(includedir)\IceUtil\PopDisableWarnings.h" \ - "$(includedir)\Ice\ConnectionF.h" \ - "$(includedir)\Ice\Identity.h" \ - "$(includedir)\Ice\Version.h" \ - "$(includedir)\Ice\ObjectFactoryF.h" \ - "$(includedir)\Ice\ObjectFactoryManagerF.h" \ - "$(includedir)\Ice\Buffer.h" \ - "$(includedir)\Ice\Protocol.h" \ - "$(includedir)\Ice\SlicedDataF.h" \ - "$(includedir)\Ice\UserExceptionFactory.h" \ - "$(includedir)\Ice\FactoryTable.h" \ - "$(includedir)\IceUtil\StringUtil.h" \ - "StringAdapterInfoDict.h" \ - "$(includedir)\Freeze\Map.h" \ - "$(includedir)\Ice\Ice.h" \ - "$(includedir)\Ice\DeprecatedStringConverter.h" \ - "$(includedir)\Ice\CommunicatorF.h" \ - "$(includedir)\Ice\Plugin.h" \ - "$(includedir)\Ice\LoggerF.h" \ - "$(includedir)\Ice\BuiltinSequences.h" \ - "$(includedir)\Ice\Initialize.h" \ - "$(includedir)\IceUtil\Timer.h" \ - "$(includedir)\IceUtil\Thread.h" \ - "$(includedir)\IceUtil\Monitor.h" \ - "$(includedir)\IceUtil\Cond.h" \ - "$(includedir)\Ice\PropertiesF.h" \ - "$(includedir)\Ice\Proxy.h" \ - "$(includedir)\Ice\ProxyFactoryF.h" \ - "$(includedir)\Ice\ConnectionIF.h" \ - "$(includedir)\Ice\RequestHandlerF.h" \ - "$(includedir)\Ice\EndpointF.h" \ - "$(includedir)\Ice\EndpointTypes.h" \ - "$(includedir)\Ice\ReferenceF.h" \ - "$(includedir)\Ice\BatchRequestQueueF.h" \ - "$(includedir)\Ice\AsyncResult.h" \ - "$(includedir)\IceUtil\UniquePtr.h" \ - "$(includedir)\Ice\AsyncResultF.h" \ - "$(includedir)\Ice\ObserverHelper.h" \ - "$(includedir)\Ice\Instrumentation.h" \ - "$(includedir)\Ice\InstrumentationF.h" \ - "$(includedir)\Ice\Dispatcher.h" \ - "$(includedir)\Ice\BatchRequestInterceptor.h" \ - "$(includedir)\Ice\LocalException.h" \ - "$(includedir)\Ice\PropertiesAdmin.h" \ - "$(includedir)\Ice\GCObject.h" \ - "$(includedir)\IceUtil\MutexPtrLock.h" \ - "$(includedir)\Ice\Incoming.h" \ - "$(includedir)\Ice\ServantLocatorF.h" \ - "$(includedir)\Ice\ServantManagerF.h" \ - "$(includedir)\Ice\ResponseHandlerF.h" \ - "$(includedir)\Ice\IncomingAsync.h" \ - "$(includedir)\Ice\Properties.h" \ - "$(includedir)\Ice\Logger.h" \ - "$(includedir)\Ice\LoggerUtil.h" \ - "$(includedir)\Ice\RemoteLogger.h" \ - "$(includedir)\Ice\FactoryTableInit.h" \ - "$(includedir)\Ice\DefaultObjectFactory.h" \ - "$(includedir)\Ice\ObjectFactory.h" \ - "$(includedir)\Ice\Communicator.h" \ - "$(includedir)\Ice\RouterF.h" \ - "$(includedir)\Ice\LocatorF.h" \ - "$(includedir)\Ice\PluginF.h" \ - "$(includedir)\Ice\ImplicitContextF.h" \ - "$(includedir)\Ice\FacetMap.h" \ - "$(includedir)\Ice\CommunicatorAsync.h" \ - "$(includedir)\Ice\ObjectAdapter.h" \ - "$(includedir)\Ice\Endpoint.h" \ - "$(includedir)\Ice\ServantLocator.h" \ - "$(includedir)\Ice\SlicedData.h" \ - "$(includedir)\Ice\OutgoingAsync.h" \ - "$(includedir)\Ice\OutgoingAsyncF.h" \ - "$(includedir)\Ice\Process.h" \ - "$(includedir)\Ice\Application.h" \ - "$(includedir)\Ice\Connection.h" \ - "$(includedir)\Ice\ConnectionAsync.h" \ - "$(includedir)\Ice\Functional.h" \ - "$(includedir)\IceUtil\Functional.h" \ - "$(includedir)\Ice\Stream.h" \ - "$(includedir)\Ice\ImplicitContext.h" \ - "$(includedir)\Ice\Locator.h" \ - "$(includedir)\Ice\ProcessF.h" \ - "$(includedir)\Ice\Router.h" \ - "$(includedir)\Ice\DispatchInterceptor.h" \ - "$(includedir)\Ice\NativePropertiesAdmin.h" \ - "$(includedir)\Ice\Metrics.h" \ - "$(includedir)\Ice\SliceChecksums.h" \ - "$(includedir)\Ice\SliceChecksumDict.h" \ - "$(includedir)\Ice\Service.h" \ - "$(includedir)\Ice\RegisterPlugins.h" \ - "$(includedir)\Freeze\DB.h" \ - "$(includedir)\Freeze\Exception.h" \ - "$(includedir)\Freeze\Connection.h" \ - "$(includedir)\Freeze\Transaction.h" \ - "$(includedir)\IceGrid\Admin.h" \ - "$(includedir)\Glacier2\Session.h" \ - "$(includedir)\Glacier2\SSLInfo.h" \ - "$(includedir)\Glacier2\Config.h" \ - "$(includedir)\IceGrid\Exception.h" \ - "$(includedir)\IceGrid\Config.h" \ - "$(includedir)\IceGrid\Descriptor.h" \ - -StringApplicationInfoDict.obj: \ - StringApplicationInfoDict.cpp \ - "$(includedir)\IceUtil\PushDisableWarnings.h" \ - "$(includedir)\Ice\BasicStream.h" \ - "$(includedir)\IceUtil\StringConverter.h" \ - "$(includedir)\IceUtil\Config.h" \ - "$(includedir)\IceUtil\Exception.h" \ - "$(includedir)\IceUtil\Shared.h" \ - "$(includedir)\IceUtil\Atomic.h" \ - "$(includedir)\IceUtil\Handle.h" \ - "$(includedir)\Ice\InstanceF.h" \ - "$(includedir)\Ice\Handle.h" \ - "$(includedir)\Ice\Config.h" \ - "$(includedir)\Ice\Object.h" \ - "$(includedir)\IceUtil\Mutex.h" \ - "$(includedir)\IceUtil\Lock.h" \ - "$(includedir)\IceUtil\ThreadException.h" \ - "$(includedir)\IceUtil\Time.h" \ - "$(includedir)\IceUtil\MutexProtocol.h" \ - "$(includedir)\Ice\ObjectF.h" \ - "$(includedir)\Ice\ProxyF.h" \ - "$(includedir)\Ice\ProxyHandle.h" \ - "$(includedir)\Ice\IncomingAsyncF.h" \ - "$(includedir)\Ice\Current.h" \ - "$(includedir)\Ice\Exception.h" \ - "$(includedir)\Ice\Format.h" \ - "$(includedir)\Ice\StreamF.h" \ - "$(includedir)\Ice\LocalObject.h" \ - "$(includedir)\Ice\LocalObjectF.h" \ - "$(includedir)\Ice\StreamHelpers.h" \ - "$(includedir)\IceUtil\ScopedArray.h" \ - "$(includedir)\IceUtil\Iterator.h" \ - "$(includedir)\IceUtil\Optional.h" \ - "$(includedir)\Ice\ObjectAdapterF.h" \ - "$(includedir)\IceUtil\UndefSysMacros.h" \ - "$(includedir)\IceUtil\PopDisableWarnings.h" \ - "$(includedir)\Ice\ConnectionF.h" \ - "$(includedir)\Ice\Identity.h" \ - "$(includedir)\Ice\Version.h" \ - "$(includedir)\Ice\ObjectFactoryF.h" \ - "$(includedir)\Ice\ObjectFactoryManagerF.h" \ - "$(includedir)\Ice\Buffer.h" \ - "$(includedir)\Ice\Protocol.h" \ - "$(includedir)\Ice\SlicedDataF.h" \ - "$(includedir)\Ice\UserExceptionFactory.h" \ - "$(includedir)\Ice\FactoryTable.h" \ - "$(includedir)\IceUtil\StringUtil.h" \ - "StringApplicationInfoDict.h" \ - "$(includedir)\Freeze\Map.h" \ - "$(includedir)\Ice\Ice.h" \ - "$(includedir)\Ice\DeprecatedStringConverter.h" \ - "$(includedir)\Ice\CommunicatorF.h" \ - "$(includedir)\Ice\Plugin.h" \ - "$(includedir)\Ice\LoggerF.h" \ - "$(includedir)\Ice\BuiltinSequences.h" \ - "$(includedir)\Ice\Initialize.h" \ - "$(includedir)\IceUtil\Timer.h" \ - "$(includedir)\IceUtil\Thread.h" \ - "$(includedir)\IceUtil\Monitor.h" \ - "$(includedir)\IceUtil\Cond.h" \ - "$(includedir)\Ice\PropertiesF.h" \ - "$(includedir)\Ice\Proxy.h" \ - "$(includedir)\Ice\ProxyFactoryF.h" \ - "$(includedir)\Ice\ConnectionIF.h" \ - "$(includedir)\Ice\RequestHandlerF.h" \ - "$(includedir)\Ice\EndpointF.h" \ - "$(includedir)\Ice\EndpointTypes.h" \ - "$(includedir)\Ice\ReferenceF.h" \ - "$(includedir)\Ice\BatchRequestQueueF.h" \ - "$(includedir)\Ice\AsyncResult.h" \ - "$(includedir)\IceUtil\UniquePtr.h" \ - "$(includedir)\Ice\AsyncResultF.h" \ - "$(includedir)\Ice\ObserverHelper.h" \ - "$(includedir)\Ice\Instrumentation.h" \ - "$(includedir)\Ice\InstrumentationF.h" \ - "$(includedir)\Ice\Dispatcher.h" \ - "$(includedir)\Ice\BatchRequestInterceptor.h" \ - "$(includedir)\Ice\LocalException.h" \ - "$(includedir)\Ice\PropertiesAdmin.h" \ - "$(includedir)\Ice\GCObject.h" \ - "$(includedir)\IceUtil\MutexPtrLock.h" \ - "$(includedir)\Ice\Incoming.h" \ - "$(includedir)\Ice\ServantLocatorF.h" \ - "$(includedir)\Ice\ServantManagerF.h" \ - "$(includedir)\Ice\ResponseHandlerF.h" \ - "$(includedir)\Ice\IncomingAsync.h" \ - "$(includedir)\Ice\Properties.h" \ - "$(includedir)\Ice\Logger.h" \ - "$(includedir)\Ice\LoggerUtil.h" \ - "$(includedir)\Ice\RemoteLogger.h" \ - "$(includedir)\Ice\FactoryTableInit.h" \ - "$(includedir)\Ice\DefaultObjectFactory.h" \ - "$(includedir)\Ice\ObjectFactory.h" \ - "$(includedir)\Ice\Communicator.h" \ - "$(includedir)\Ice\RouterF.h" \ - "$(includedir)\Ice\LocatorF.h" \ - "$(includedir)\Ice\PluginF.h" \ - "$(includedir)\Ice\ImplicitContextF.h" \ - "$(includedir)\Ice\FacetMap.h" \ - "$(includedir)\Ice\CommunicatorAsync.h" \ - "$(includedir)\Ice\ObjectAdapter.h" \ - "$(includedir)\Ice\Endpoint.h" \ - "$(includedir)\Ice\ServantLocator.h" \ - "$(includedir)\Ice\SlicedData.h" \ - "$(includedir)\Ice\OutgoingAsync.h" \ - "$(includedir)\Ice\OutgoingAsyncF.h" \ - "$(includedir)\Ice\Process.h" \ - "$(includedir)\Ice\Application.h" \ - "$(includedir)\Ice\Connection.h" \ - "$(includedir)\Ice\ConnectionAsync.h" \ - "$(includedir)\Ice\Functional.h" \ - "$(includedir)\IceUtil\Functional.h" \ - "$(includedir)\Ice\Stream.h" \ - "$(includedir)\Ice\ImplicitContext.h" \ - "$(includedir)\Ice\Locator.h" \ - "$(includedir)\Ice\ProcessF.h" \ - "$(includedir)\Ice\Router.h" \ - "$(includedir)\Ice\DispatchInterceptor.h" \ - "$(includedir)\Ice\NativePropertiesAdmin.h" \ - "$(includedir)\Ice\Metrics.h" \ - "$(includedir)\Ice\SliceChecksums.h" \ - "$(includedir)\Ice\SliceChecksumDict.h" \ - "$(includedir)\Ice\Service.h" \ - "$(includedir)\Ice\RegisterPlugins.h" \ - "$(includedir)\Freeze\DB.h" \ - "$(includedir)\Freeze\Exception.h" \ - "$(includedir)\Freeze\Connection.h" \ - "$(includedir)\Freeze\Transaction.h" \ - "$(includedir)\IceGrid\Admin.h" \ - "$(includedir)\Glacier2\Session.h" \ - "$(includedir)\Glacier2\SSLInfo.h" \ - "$(includedir)\Glacier2\Config.h" \ - "$(includedir)\IceGrid\Exception.h" \ - "$(includedir)\IceGrid\Config.h" \ - "$(includedir)\IceGrid\Descriptor.h" \ - Topics.obj: \ Topics.cpp \ "$(includedir)\Ice\Ice.h" \ @@ -7573,7 +6706,7 @@ Topics.obj: \ WellKnownObjectsManager.obj: \ WellKnownObjectsManager.cpp \ - "$(includedir)\Glacier2\PermissionsVerifier.h" \ + "$(includedir)\Ice\Endpoint.h" \ "$(includedir)\IceUtil\PushDisableWarnings.h" \ "$(includedir)\Ice\ProxyF.h" \ "$(includedir)\IceUtil\Shared.h" \ @@ -7593,6 +6726,13 @@ WellKnownObjectsManager.obj: \ "$(includedir)\Ice\StreamHelpers.h" \ "$(includedir)\IceUtil\ScopedArray.h" \ "$(includedir)\IceUtil\Iterator.h" \ + "$(includedir)\IceUtil\Optional.h" \ + "$(includedir)\Ice\Version.h" \ + "$(includedir)\IceUtil\UndefSysMacros.h" \ + "$(includedir)\IceUtil\PopDisableWarnings.h" \ + "$(includedir)\Ice\BuiltinSequences.h" \ + "$(includedir)\Ice\EndpointF.h" \ + "$(includedir)\Glacier2\PermissionsVerifier.h" \ "$(includedir)\Ice\Proxy.h" \ "$(includedir)\IceUtil\Mutex.h" \ "$(includedir)\IceUtil\Lock.h" \ @@ -7602,10 +6742,6 @@ WellKnownObjectsManager.obj: \ "$(includedir)\Ice\ProxyFactoryF.h" \ "$(includedir)\Ice\ConnectionIF.h" \ "$(includedir)\Ice\RequestHandlerF.h" \ - "$(includedir)\Ice\EndpointF.h" \ - "$(includedir)\IceUtil\Optional.h" \ - "$(includedir)\IceUtil\UndefSysMacros.h" \ - "$(includedir)\IceUtil\PopDisableWarnings.h" \ "$(includedir)\Ice\EndpointTypes.h" \ "$(includedir)\Ice\ObjectAdapterF.h" \ "$(includedir)\Ice\ReferenceF.h" \ @@ -7622,7 +6758,6 @@ WellKnownObjectsManager.obj: \ "$(includedir)\Ice\Instrumentation.h" \ "$(includedir)\Ice\Current.h" \ "$(includedir)\Ice\Identity.h" \ - "$(includedir)\Ice\Version.h" \ "$(includedir)\Ice\BasicStream.h" \ "$(includedir)\IceUtil\StringConverter.h" \ "$(includedir)\Ice\Object.h" \ @@ -7644,7 +6779,6 @@ WellKnownObjectsManager.obj: \ "$(includedir)\Ice\DefaultObjectFactory.h" \ "$(includedir)\Ice\ObjectFactory.h" \ "$(includedir)\Glacier2\SSLInfo.h" \ - "$(includedir)\Ice\BuiltinSequences.h" \ "$(includedir)\Glacier2\Config.h" \ "WellKnownObjectsManager.h" \ "Internal.h" \ @@ -7664,78 +6798,24 @@ WellKnownObjectsManager.obj: \ "$(includedir)\IceGrid\Session.h" \ "$(includedir)\IceGrid\Locator.h" \ "Database.h" \ - "$(includedir)\Freeze\Freeze.h" \ - "$(includedir)\Freeze\Initialize.h" \ - "$(includedir)\Ice\Ice.h" \ - "$(includedir)\Ice\DeprecatedStringConverter.h" \ - "$(includedir)\Ice\Plugin.h" \ - "$(includedir)\Ice\LoggerF.h" \ - "$(includedir)\Ice\Initialize.h" \ - "$(includedir)\IceUtil\Timer.h" \ - "$(includedir)\IceUtil\Thread.h" \ - "$(includedir)\Ice\PropertiesF.h" \ - "$(includedir)\Ice\InstrumentationF.h" \ - "$(includedir)\Ice\Dispatcher.h" \ - "$(includedir)\Ice\BatchRequestInterceptor.h" \ - "$(includedir)\Ice\LocalException.h" \ - "$(includedir)\Ice\Logger.h" \ - "$(includedir)\Ice\LoggerUtil.h" \ - "$(includedir)\Ice\RemoteLogger.h" \ - "$(includedir)\Ice\Communicator.h" \ - "$(includedir)\Ice\RouterF.h" \ - "$(includedir)\Ice\LocatorF.h" \ - "$(includedir)\Ice\PluginF.h" \ - "$(includedir)\Ice\ImplicitContextF.h" \ - "$(includedir)\Ice\FacetMap.h" \ - "$(includedir)\Ice\CommunicatorAsync.h" \ - "$(includedir)\Ice\ObjectAdapter.h" \ - "$(includedir)\Ice\Endpoint.h" \ - "$(includedir)\Ice\ServantLocator.h" \ - "$(includedir)\Ice\SlicedData.h" \ - "$(includedir)\Ice\OutgoingAsync.h" \ - "$(includedir)\Ice\OutgoingAsyncF.h" \ - "$(includedir)\Ice\Process.h" \ - "$(includedir)\Ice\Application.h" \ - "$(includedir)\Ice\Connection.h" \ - "$(includedir)\Ice\ConnectionAsync.h" \ - "$(includedir)\Ice\Functional.h" \ - "$(includedir)\IceUtil\Functional.h" \ - "$(includedir)\Ice\Stream.h" \ - "$(includedir)\Ice\ImplicitContext.h" \ - "$(includedir)\Ice\Router.h" \ - "$(includedir)\Ice\DispatchInterceptor.h" \ - "$(includedir)\Ice\NativePropertiesAdmin.h" \ - "$(includedir)\Ice\Metrics.h" \ - "$(includedir)\Ice\SliceChecksums.h" \ - "$(includedir)\Ice\Service.h" \ - "$(includedir)\Ice\RegisterPlugins.h" \ - "$(includedir)\Freeze\EvictorF.h" \ - "$(includedir)\Freeze\ConnectionF.h" \ - "$(includedir)\Freeze\Index.h" \ - "$(includedir)\Freeze\DB.h" \ - "$(includedir)\Freeze\Transaction.h" \ - "$(includedir)\Freeze\BackgroundSaveEvictor.h" \ - "$(includedir)\Freeze\Evictor.h" \ - "$(includedir)\Freeze\Exception.h" \ - "$(includedir)\Freeze\TransactionalEvictor.h" \ - "$(includedir)\Freeze\Map.h" \ - "$(includedir)\Freeze\Connection.h" \ - "$(includedir)\Freeze\TransactionHolder.h" \ - "$(includedir)\Freeze\Catalog.h" \ - "$(includedir)\Freeze\CatalogData.h" \ + "..\..\src\IceUtil\FileUtil.h" \ "ServerCache.h" \ "$(includedir)\IceGrid\Query.h" \ "Allocatable.h" \ + "$(includedir)\IceUtil\Timer.h" \ + "$(includedir)\IceUtil\Thread.h" \ "Cache.h" \ "Util.h" \ "$(includedir)\IceUtil\StringUtil.h" \ "$(includedir)\IceUtil\Random.h" \ "TraceLevels.h" \ + "$(includedir)\Ice\LoggerF.h" \ "NodeCache.h" \ "$(includedir)\IceUtil\RecMutex.h" \ "ReplicaCache.h" \ "$(includedir)\IceStorm\IceStorm.h" \ "$(includedir)\IceStorm\Metrics.h" \ + "$(includedir)\Ice\Metrics.h" \ "$(includedir)\IceStorm\Config.h" \ "ObjectCache.h" \ "AllocatableObjectCache.h" \ @@ -7743,9 +6823,14 @@ WellKnownObjectsManager.obj: \ "Topics.h" \ "PluginFacadeI.h" \ "$(includedir)\IceGrid\PluginFacade.h" \ - "StringApplicationInfoDict.h" \ - "StringAdapterInfoDict.h" \ - "IdentityObjectInfoDict.h" \ + "..\..\src\IceDB\IceDB.h" \ + "$(includedir)\Ice\Initialize.h" \ + "$(includedir)\Ice\PropertiesF.h" \ + "$(includedir)\Ice\InstrumentationF.h" \ + "$(includedir)\Ice\Dispatcher.h" \ + "$(includedir)\Ice\Plugin.h" \ + "$(includedir)\Ice\BatchRequestInterceptor.h" \ + "$(includedir)\Ice\Stream.h" \ IceGridNode.obj: \ IceGridNode.cpp \ diff --git a/cpp/src/IceGrid/.gitignore b/cpp/src/IceGrid/.gitignore index 5a179db546b..dd791e621d9 100644 --- a/cpp/src/IceGrid/.gitignore +++ b/cpp/src/IceGrid/.gitignore @@ -5,11 +5,5 @@ IceLocatorDiscovery.cpp IceLocatorDiscovery.h Internal.cpp Internal.h -StringApplicationInfoDict.h -StringApplicationInfoDict.cpp -IdentityObjectInfoDict.h -IdentityObjectInfoDict.cpp -StringAdapterInfoDict.h -StringAdapterInfoDict.cpp -SerialsDict.h -SerialsDict.cpp +DBTypes.h +DBTypes.cpp diff --git a/cpp/src/IceStorm/V31Format.ice b/cpp/src/IceGrid/DBTypes.ice index 57281cb73ff..96efb51157c 100644 --- a/cpp/src/IceStorm/V31Format.ice +++ b/cpp/src/IceGrid/DBTypes.ice @@ -9,15 +9,22 @@ #pragma once -[["cpp:header-ext:h"]] +#include <IceGrid/Admin.ice> -#include <IceStorm/LinkRecord.ice> +[["cpp:header-ext:h"]] -module IceStorm +module IceGrid { -/** Dictionary of link name to link record. */ -dictionary<string, LinkRecord> LinkRecordDict; +dictionary<string, long> StringLongDict; -}; // End module IceStorm +struct AllData +{ + ApplicationInfoSeq applications; + AdapterInfoSeq adapters; + ObjectInfoSeq objects; + ObjectInfoSeq internalObjects; + StringLongDict serials; +}; +}; diff --git a/cpp/src/IceGrid/Database.cpp b/cpp/src/IceGrid/Database.cpp index c38dfea7ac0..91989d77a01 100644 --- a/cpp/src/IceGrid/Database.cpp +++ b/cpp/src/IceGrid/Database.cpp @@ -22,7 +22,6 @@ #include <IceGrid/Session.h> #include <IceGrid/Topics.h> #include <IceGrid/IceGrid.h> -#include <IceGrid/SerialsDict.h> #include <algorithm> #include <functional> @@ -30,15 +29,23 @@ using namespace std; using namespace IceGrid; -using namespace Freeze; + +typedef IceDB::ReadWriteCursor<string, ApplicationInfo, IceDB::IceContext, Ice::OutputStreamPtr> ApplicationMapRWCursor; +typedef IceDB::ReadOnlyCursor<string, AdapterInfo, IceDB::IceContext, Ice::OutputStreamPtr> AdapterMapROCursor; +typedef IceDB::Cursor<string, string, IceDB::IceContext, Ice::OutputStreamPtr> AdaptersByGroupMapCursor; +typedef IceDB::ReadOnlyCursor<string, Ice::Identity, IceDB::IceContext, Ice::OutputStreamPtr> ObjectsByTypeMapROCursor; +typedef IceDB::ReadOnlyCursor<Ice::Identity, ObjectInfo, IceDB::IceContext, Ice::OutputStreamPtr> ObjectsMapROCursor; namespace { const string applicationsDbName = "applications"; const string adaptersDbName = "adapters"; +const string adaptersByReplicaGroupIdDbName = "adaptersByReplicaGroupId"; const string objectsDbName = "objects"; +const string objectsByTypeDbName = "objectsByType"; const string internalObjectsDbName = "internal-objects"; +const string internalObjectsByTypeDbName = "internal-objectsByType"; const string serialsDbName = "serials"; struct ObjectLoadCI : binary_function<pair<Ice::ObjectPrx, float>&, pair<Ice::ObjectPrx, float>&, bool> @@ -49,35 +56,38 @@ struct ObjectLoadCI : binary_function<pair<Ice::ObjectPrx, float>&, pair<Ice::Ob } }; -template<typename K, typename V, typename C, typename Comp> vector<V> -toVector(const Map<K, V, C, Comp>& m) +template<typename K, typename V, typename C, typename H> vector<V> +toVector(const IceDB::ReadOnlyTxn& txn, const IceDB::Dbi<K, V, C, H>& m) { vector<V> v; - for(typename Map<K, V, C, Comp>::const_iterator p = m.begin(); p != m.end(); ++p) + IceDB::ReadOnlyCursor<K, V, C, H> cursor(m, txn); + K key; + V value; + while(cursor.get(key, value, MDB_NEXT)) { - v.push_back(p->second); + v.push_back(value); } return v; } -template<typename K, typename V, typename C, typename Comp> map<K, V> -toMap(const Map<K, V, C, Comp>& d) +template<typename K, typename V, typename C, typename H> map<K, V> +toMap(const IceDB::Txn& txn, const IceDB::Dbi<K, V, C, H>& d) { std::map<K, V> m; - for(typename Map<K, V, C, Comp>::const_iterator p = d.begin(); p != d.end(); ++p) + IceDB::Cursor<K, V, C, H> cursor(d, txn); + K key; + V value; + while(cursor.get(key, value, MDB_NEXT)) { -#ifdef __SUNPRO_CC - std::map<Key, Value>::value_type v(p->first, p->second); + typename std::map<K, V>::value_type v(key, value); m.insert(v); -#else - m.insert(*p); -#endif } + cursor.close(); return m; } void -halt(const Ice::CommunicatorPtr& com, const DatabaseException& ex) +halt(const Ice::CommunicatorPtr& com, const IceDB::LMDBException& ex) { { Ice::Error error(com->getLogger()); @@ -134,69 +144,52 @@ filterAdapterInfos(const string& filter, infos.swap(filteredAdpts); } -Ice::Long -getSerial(const Freeze::ConnectionPtr& connection, const string& dbName) -{ - SerialsDict dict(connection, serialsDbName); - - // - // If a serial number is provided, juste update the serial number from the database, - // otherwise if the serial is 0, we increment the serial from the database. - // - SerialsDict::iterator p = dict.find(dbName); - if(p == dict.end()) - { - dict.insert(SerialsDict::value_type(dbName, 1)); - return 1; - } - return p->second; -} - -Ice::Long -updateSerial(const Freeze::ConnectionPtr& connection, const string& dbName, Ice::Long serial = 0) -{ - if(serial == -1) // Master doesn't support serials. - { - return -1; - } - - SerialsDict dict(connection, serialsDbName); - - // - // If a serial number is provided, juste update the serial number from the database, - // otherwise if the serial is 0, we increment the serial from the database. - // - SerialsDict::iterator p = dict.find(dbName); - if(p == dict.end()) - { - dict.insert(SerialsDict::value_type(dbName, serial == 0 ? 1 : serial)); - return 1; - } - else - { - p.set(serial == 0 ? p->second + 1 : serial); - return p->second; - } -} - vector<AdapterInfo> -findByReplicaGroupId(const StringAdapterInfoDict& dict, const string& name) +findByReplicaGroupId(const IceDB::Txn& txn, + const StringAdapterInfoMap& adapters, + const StringStringMap& adaptersByGroupId, + const string& name) { vector<AdapterInfo> result; - for(StringAdapterInfoDict::const_iterator p = dict.findByReplicaGroupId(name, true); p != dict.end(); ++p) + AdaptersByGroupMapCursor cursor(adaptersByGroupId, txn); + string id; + if(cursor.find(name, id)) { - result.push_back(p->second); + AdapterInfo info; + adapters.get(txn, id, info); + result.push_back(info); + + string n; + while(cursor.get(n, id, MDB_NEXT) && n == name) + { + adapters.get(txn, id, info); + result.push_back(info); + } } return result; } vector<ObjectInfo> -findByType(const IdentityObjectInfoDict& dict, const string& type) +findByType(const IceDB::ReadOnlyTxn& txn, + const IdentityObjectInfoMap& objects, + const StringIdentityMap& objectsByType, + const string& type) { vector<ObjectInfo> result; - for(IdentityObjectInfoDict::const_iterator p = dict.findByType(type); p != dict.end(); ++p) + ObjectsByTypeMapROCursor cursor(objectsByType, txn); + Ice::Identity id; + if(cursor.find(type, id)) { - result.push_back(p->second); + ObjectInfo info; + objects.get(txn, id, info); + result.push_back(info); + + string t; + while(cursor.get(t, id, MDB_NEXT) && t == type) + { + objects.get(txn, id, info); + result.push_back(info); + } } return result; } @@ -208,8 +201,6 @@ Database::Database(const Ice::ObjectAdapterPtr& registryAdapter, const string& instanceName, const TraceLevelsPtr& traceLevels, const RegistryInfo& info, - const Freeze::ConnectionPtr& connection, - const string& envName, bool readonly) : _communicator(registryAdapter->getCommunicator()), _internalAdapter(registryAdapter), @@ -224,27 +215,45 @@ Database::Database(const Ice::ObjectAdapterPtr& registryAdapter, _objectCache(_communicator), _allocatableObjectCache(_communicator), _serverCache(_communicator, _instanceName, _nodeCache, _adapterCache, _objectCache, _allocatableObjectCache), - _connection(connection), - _envName(envName), - _applications(_connection, applicationsDbName), - _adapters(_connection, adaptersDbName), - _objects(_connection, objectsDbName), - _internalObjects(_connection, internalObjectsDbName), + _dbLock(_communicator->getProperties()->getProperty("Registry.LMDB.Path") + "/icedb.lock"), + _env(_communicator->getProperties()->getProperty("Registry.LMDB.Path"), 8), _pluginFacade(RegistryPluginFacadeIPtr::dynamicCast(getRegistryPluginFacade())), _lock(0) { + IceDB::ReadWriteTxn txn(_env); + + IceDB::IceContext context; + context.communicator = _communicator; + context.encoding = { 1, 1 }; + + _applications = StringApplicationInfoMap(txn, applicationsDbName, context, MDB_CREATE); + + _adapters = StringAdapterInfoMap(txn, adaptersDbName, context, MDB_CREATE); + _adaptersByGroupId = StringStringMap(txn, adaptersByReplicaGroupIdDbName, context, MDB_CREATE|MDB_DUPSORT); + + _objects = IdentityObjectInfoMap(txn, objectsDbName, context, MDB_CREATE); + _objectsByType = StringIdentityMap(txn, objectsByTypeDbName, context, MDB_CREATE|MDB_DUPSORT); + + _internalObjects = IdentityObjectInfoMap(txn, internalObjectsDbName, context, MDB_CREATE); + _internalObjectsByType = StringIdentityMap(txn, internalObjectsByTypeDbName, context, MDB_CREATE|MDB_DUPSORT); + + _serials = StringLongMap(txn, serialsDbName, context, MDB_CREATE); + ServerEntrySeq entries; - for(StringApplicationInfoDict::iterator p = _applications.begin(); p != _applications.end(); ++p) + string k; + ApplicationInfo v; + ApplicationMapRWCursor cursor(_applications, txn); + while(cursor.get(k, v, MDB_NEXT)) { try { - load(ApplicationHelper(_communicator, p->second.descriptor), entries, p->second.uuid, p->second.revision); + load(ApplicationHelper(_communicator, v.descriptor), entries, v.uuid, v.revision); } catch(const DeploymentException& ex) { Ice::Error err(_traceLevels->logger); - err << "invalid application `" << p->first << "':\n" << ex.reason; + err << "invalid application `" << k << "':\n" << ex.reason; } } @@ -257,9 +266,15 @@ Database::Database(const Ice::ObjectAdapterPtr& registryAdapter, _nodeObserverTopic = new NodeObserverTopic(_topicManager, _internalAdapter); _registryObserverTopic = new RegistryObserverTopic(_topicManager); - _applicationObserverTopic = new ApplicationObserverTopic(_topicManager, toMap(_applications), getSerial(_connection, applicationsDbName)); - _adapterObserverTopic = new AdapterObserverTopic(_topicManager, toMap(_adapters), getSerial(_connection, adaptersDbName)); - _objectObserverTopic = new ObjectObserverTopic(_topicManager, toMap(_objects), getSerial(_connection, objectsDbName)); + + _applicationObserverTopic = + new ApplicationObserverTopic(_topicManager, toMap(txn, _applications), getSerial(txn, applicationsDbName)); + _adapterObserverTopic = + new AdapterObserverTopic(_topicManager, toMap(txn, _adapters), getSerial(txn, adaptersDbName)); + _objectObserverTopic = + new ObjectObserverTopic(_topicManager, toMap(txn, _objects), getSerial(txn, objectsDbName)); + + txn.commit(); _registryObserverTopic->registryUp(info); @@ -353,29 +368,23 @@ Database::syncApplications(const ApplicationInfoSeq& newApplications, Ice::Long Lock sync(*this); map<string, ApplicationInfo> oldApplications; - for(;;) + try { - try - { - TransactionHolder txHolder(_connection); - oldApplications = toMap(_applications); - _applications.clear(); - for(ApplicationInfoSeq::const_iterator p = newApplications.begin(); p != newApplications.end(); ++p) - { - _applications.put(StringApplicationInfoDict::value_type(p->descriptor.name, *p)); - } - dbSerial = updateSerial(_connection, applicationsDbName, dbSerial); - txHolder.commit(); - break; - } - catch(const DeadlockException&) - { - continue; - } - catch(const DatabaseException& ex) + IceDB::ReadWriteTxn txn(_env); + + oldApplications = toMap(txn, _applications); + _applications.clear(txn); + for(ApplicationInfoSeq::const_iterator p = newApplications.begin(); p != newApplications.end(); ++p) { - halt(_communicator, ex); + _applications.put(txn, p->descriptor.name, *p); } + dbSerial = updateSerial(txn, applicationsDbName, dbSerial); + + txn.commit(); + } + catch(const IceDB::LMDBException& ex) + { + halt(_communicator, ex); } ServerEntrySeq entries; @@ -433,28 +442,23 @@ Database::syncAdapters(const AdapterInfoSeq& adapters, Ice::Long dbSerial) int serial = 0; { Lock sync(*this); - for(;;) + try { - try - { - TransactionHolder txHolder(_connection); - _adapters.clear(); - for(AdapterInfoSeq::const_iterator r = adapters.begin(); r != adapters.end(); ++r) - { - _adapters.put(StringAdapterInfoDict::value_type(r->id, *r)); - } - dbSerial = updateSerial(_connection, adaptersDbName, dbSerial); - txHolder.commit(); - break; - } - catch(const DeadlockException&) + IceDB::ReadWriteTxn txn(_env); + + _adapters.clear(txn); + _adaptersByGroupId.clear(txn); + for(AdapterInfoSeq::const_iterator r = adapters.begin(); r != adapters.end(); ++r) { - continue; - } - catch(const DatabaseException& ex) - { - halt(_communicator, ex); + addAdapter(txn, *r); } + dbSerial = updateSerial(txn, adaptersDbName, dbSerial); + + txn.commit(); + } + catch(const IceDB::LMDBException& ex) + { + halt(_communicator, ex); } if(_traceLevels->adapter > 0) @@ -475,28 +479,23 @@ Database::syncObjects(const ObjectInfoSeq& objects, Ice::Long dbSerial) int serial = 0; { Lock sync(*this); - for(;;) + try { - try - { - TransactionHolder txHolder(_connection); - _objects.clear(); - for(ObjectInfoSeq::const_iterator q = objects.begin(); q != objects.end(); ++q) - { - _objects.put(IdentityObjectInfoDict::value_type(q->proxy->ice_getIdentity(), *q)); - } - dbSerial = updateSerial(_connection, objectsDbName, dbSerial); - txHolder.commit(); - break; - } - catch(const DeadlockException&) - { - continue; - } - catch(const DatabaseException& ex) + IceDB::ReadWriteTxn txn(_env); + + _objects.clear(txn); + _objectsByType.clear(txn); + for(ObjectInfoSeq::const_iterator q = objects.begin(); q != objects.end(); ++q) { - halt(_communicator, ex); + addObject(txn, *q, false); } + dbSerial = updateSerial(txn, objectsDbName, dbSerial); + + txn.commit(); + } + catch(const IceDB::LMDBException& ex) + { + halt(_communicator, ex); } if(_traceLevels->object > 0) @@ -511,82 +510,64 @@ Database::syncObjects(const ObjectInfoSeq& objects, Ice::Long dbSerial) } ApplicationInfoSeq -Database::getApplications(Ice::Long& serial) const +Database::getApplications(Ice::Long& serial) { - for(;;) + try { - try - { - ConnectionPtr connection = Freeze::createConnection(_communicator, _envName); - TransactionHolder txHolder(connection); - StringApplicationInfoDict applications(connection, applicationsDbName); - serial = getSerial(connection, applicationsDbName); - return toVector(applications); - } - catch(const DeadlockException&) - { - continue; - } - catch(const DatabaseException& ex) - { - halt(_communicator, ex); - } + IceDB::ReadOnlyTxn txn(_env); + + serial = getSerial(txn, applicationsDbName); + return toVector(txn, _applications); } + catch(const IceDB::LMDBException& ex) + { + halt(_communicator, ex); + } + assert(false); + return ApplicationInfoSeq(); } AdapterInfoSeq -Database::getAdapters(Ice::Long& serial) const +Database::getAdapters(Ice::Long& serial) { - for(;;) + try { - try - { - ConnectionPtr connection = Freeze::createConnection(_communicator, _envName); - TransactionHolder txHolder(connection); - StringAdapterInfoDict adapters(connection, adaptersDbName); - serial = getSerial(connection, adaptersDbName); - return toVector(adapters); - } - catch(const DeadlockException&) - { - continue; - } - catch(const DatabaseException& ex) - { - halt(_communicator, ex); - } + IceDB::ReadOnlyTxn txn(_env); + + serial = getSerial(txn, adaptersDbName); + return toVector(txn, _adapters); + } + catch(const IceDB::LMDBException& ex) + { + halt(_communicator, ex); } + assert(false); + return AdapterInfoSeq(); } ObjectInfoSeq -Database::getObjects(Ice::Long& serial) const +Database::getObjects(Ice::Long& serial) { - for(;;) + try { - try - { - ConnectionPtr connection = Freeze::createConnection(_communicator, _envName); - TransactionHolder txHolder(connection); - IdentityObjectInfoDict objects(connection, objectsDbName); - serial = getSerial(connection, objectsDbName); - return toVector(objects); - } - catch(const DeadlockException&) - { - continue; - } - catch(const DatabaseException& ex) - { - halt(_communicator, ex); - } + IceDB::ReadOnlyTxn txn(_env); + + serial = getSerial(txn, objectsDbName); + return toVector(txn, _objects); + } + catch(const IceDB::LMDBException& ex) + { + halt(_communicator, ex); } + assert(false); + return ObjectInfoSeq(); } StringLongDict Database::getSerials() const { - SerialsDict serials(Freeze::createConnection(_communicator, _envName), serialsDbName); - return toMap(serials); + IceDB::ReadOnlyTxn txn(_env); + return toMap(txn, _serials); } void @@ -603,22 +584,30 @@ Database::addApplication(const ApplicationInfo& info, AdminSessionI* session, Ic waitForUpdate(info.descriptor.name); - StringApplicationInfoDict::const_iterator i = _applications.find(info.descriptor.name); - if(i != _applications.end()) + IceDB::ReadWriteTxn txn(_env); + + if(_applications.find(txn, info.descriptor.name)) { throw DeploymentException("application `" + info.descriptor.name + "' already exists"); } ApplicationHelper helper(_communicator, info.descriptor, true); - checkForAddition(helper, _connection); - dbSerial = saveApplication(info, _connection, dbSerial); + checkForAddition(helper, txn); + dbSerial = saveApplication(info, txn, dbSerial); + + txn.commit(); + load(helper, entries, info.uuid, info.revision); startUpdating(info.descriptor.name, info.uuid, info.revision); for_each(entries.begin(), entries.end(), IceUtil::voidMemFun(&ServerEntry::sync)); serial = _applicationObserverTopic->applicationAdded(dbSerial, info); } - catch(const DatabaseException& ex) + catch(const IceDB::KeyTooLongException&) + { + throw DeploymentException("application name is too long: `" + info.descriptor.name + "'"); + } + catch(const IceDB::LMDBException& ex) { halt(_communicator, ex); } @@ -659,7 +648,10 @@ Database::addApplication(const ApplicationInfo& info, AdminSessionI* session, Ic Lock sync(*this); entries.clear(); unload(ApplicationHelper(_communicator, info.descriptor), entries); - dbSerial = removeApplication(info.descriptor.name, _connection); + + IceDB::ReadWriteTxn txn(_env); + dbSerial = removeApplication(info.descriptor.name, txn); + txn.commit(); for_each(entries.begin(), entries.end(), IceUtil::voidMemFun(&ServerEntry::sync)); serial = _applicationObserverTopic->applicationRemoved(dbSerial, info.descriptor.name); @@ -669,7 +661,7 @@ Database::addApplication(const ApplicationInfo& info, AdminSessionI* session, Ic Ice::Error err(_traceLevels->logger); err << "failed to rollback previous application `" << info.descriptor.name << "':\n" << ex.reason; } - catch(const DatabaseException& ex) + catch(const IceDB::LMDBException& ex) { halt(_communicator, ex); } @@ -705,12 +697,12 @@ Database::updateApplication(const ApplicationUpdateInfo& updt, bool noRestart, A waitForUpdate(update.descriptor.name); - StringApplicationInfoDict::const_iterator i = _applications.find(update.descriptor.name); - if(i == _applications.end()) + IceDB::ReadOnlyTxn txn(_env); + + if(!_applications.get(txn, update.descriptor.name, oldApp)) { throw ApplicationNotExistException(update.descriptor.name); } - oldApp = i->second; if(update.revision < 0) { @@ -722,7 +714,7 @@ Database::updateApplication(const ApplicationUpdateInfo& updt, bool noRestart, A startUpdating(update.descriptor.name, oldApp.uuid, oldApp.revision + 1); } - catch(const DatabaseException& ex) + catch(const IceDB::LMDBException& ex) { halt(_communicator, ex); } @@ -746,12 +738,12 @@ Database::syncApplicationDescriptor(const ApplicationDescriptor& newDesc, bool n waitForUpdate(newDesc.name); - StringApplicationInfoDict::const_iterator i = _applications.find(newDesc.name); - if(i == _applications.end()) + IceDB::ReadOnlyTxn txn(_env); + + if(!_applications.get(txn, newDesc.name, oldApp)) { throw ApplicationNotExistException(newDesc.name); } - oldApp = i->second; previous.reset(new ApplicationHelper(_communicator, oldApp.descriptor)); helper.reset(new ApplicationHelper(_communicator, newDesc, true)); @@ -763,7 +755,7 @@ Database::syncApplicationDescriptor(const ApplicationDescriptor& newDesc, bool n startUpdating(update.descriptor.name, oldApp.uuid, oldApp.revision + 1); } - catch(const DatabaseException& ex) + catch(const IceDB::LMDBException& ex) { halt(_communicator, ex); } @@ -791,13 +783,12 @@ Database::instantiateServer(const string& application, waitForUpdate(application); - StringApplicationInfoDict::const_iterator i = _applications.find(application); - if(i == _applications.end()) + IceDB::ReadOnlyTxn txn(_env); + + if(!_applications.get(txn, application, oldApp)) { throw ApplicationNotExistException(application); - } - oldApp = i->second; previous.reset(new ApplicationHelper(_communicator, oldApp.descriptor)); helper.reset(new ApplicationHelper(_communicator, previous->instantiateServer(node, instance), true)); @@ -809,7 +800,7 @@ Database::instantiateServer(const string& application, startUpdating(update.descriptor.name, oldApp.uuid, oldApp.revision + 1); } - catch(const DatabaseException& ex) + catch(const IceDB::LMDBException& ex) { halt(_communicator, ex); } @@ -833,12 +824,12 @@ Database::removeApplication(const string& name, AdminSessionI* session, Ice::Lon ApplicationInfo appInfo; - StringApplicationInfoDict::const_iterator i = _applications.find(name); - if(i == _applications.end()) + IceDB::ReadWriteTxn txn(_env); + + if(!_applications.get(txn, name, appInfo)) { throw ApplicationNotExistException(name); } - appInfo = i->second; bool init = false; try @@ -855,14 +846,16 @@ Database::removeApplication(const string& name, AdminSessionI* session, Ice::Lon throw; } } + dbSerial = removeApplication(name, txn, dbSerial); + + txn.commit(); - dbSerial = removeApplication(name, _connection, dbSerial); startUpdating(name, appInfo.uuid, appInfo.revision); for_each(entries.begin(), entries.end(), IceUtil::voidMemFun(&ServerEntry::sync)); serial = _applicationObserverTopic->applicationRemoved(dbSerial, name); } - catch(const DatabaseException& ex) + catch(const IceDB::LMDBException& ex) { halt(_communicator, ex); } @@ -885,22 +878,21 @@ Database::removeApplication(const string& name, AdminSessionI* session, Ice::Lon ApplicationInfo Database::getApplicationInfo(const std::string& name) { - ConnectionPtr connection = Freeze::createConnection(_communicator, _envName); - StringApplicationInfoDict applications(connection, applicationsDbName); - StringApplicationInfoDict::const_iterator i = applications.find(name); - if(i == applications.end()) + IceDB::ReadOnlyTxn txn(_env); + + ApplicationInfo info; + if(!_applications.get(txn, name, info)) { throw ApplicationNotExistException(name); } - return i->second; + return info; } Ice::StringSeq Database::getAllApplications(const string& expression) { - ConnectionPtr connection = Freeze::createConnection(_communicator, _envName); - StringApplicationInfoDict applications(connection, applicationsDbName); - return getMatchingKeys<map<string, ApplicationInfo> >(toMap(applications), expression); + IceDB::ReadOnlyTxn txn(_env); + return getMatchingKeys<map<string, ApplicationInfo> >(toMap(txn, _applications), expression); } void @@ -989,44 +981,37 @@ Database::setAdapterDirectProxy(const string& adapterId, const string& replicaGr info.replicaGroupId = replicaGroupId; bool updated = false; - for(;;) + try { - try + IceDB::ReadWriteTxn txn(_env); + + AdapterInfo oldInfo; + bool found = _adapters.get(txn, adapterId, oldInfo); + if(proxy) { - TransactionHolder txHolder(_connection); - StringAdapterInfoDict::iterator i = _adapters.find(adapterId); - if(proxy) - { - if(i == _adapters.end()) - { - _adapters.put(StringAdapterInfoDict::value_type(adapterId, info)); - } - else - { - updated = true; - i.set(info); - } - } - else + updated = found; + + if(replicaGroupId != oldInfo.replicaGroupId) { - if(i == _adapters.end()) - { - return; - } - _adapters.erase(i); + _adaptersByGroupId.del(txn, oldInfo.replicaGroupId, adapterId); } - dbSerial = updateSerial(_connection, adaptersDbName, dbSerial); - txHolder.commit(); - break; - } - catch(const DeadlockException&) - { - continue; + addAdapter(txn, info); } - catch(const DatabaseException& ex) + else { - halt(_communicator, ex); + if(!found) + { + return; + } + deleteAdapter(txn, oldInfo); } + dbSerial = updateSerial(txn, adaptersDbName, dbSerial); + + txn.commit(); + } + catch(const IceDB::LMDBException& ex) + { + halt(_communicator, ex); } if(_traceLevels->adapter > 0) @@ -1037,7 +1022,7 @@ Database::setAdapterDirectProxy(const string& adapterId, const string& replicaGr { out << " with replica group `" << replicaGroupId << "'"; } - out << " (serial = `" << dbSerial << "')"; + out << " (serial = `" << dbSerial << "')"; } if(proxy) @@ -1063,16 +1048,16 @@ Ice::ObjectPrx Database::getAdapterDirectProxy(const string& id, const Ice::EncodingVersion& encoding, const Ice::ConnectionPtr& con, const Ice::Context& ctx) { - ConnectionPtr connection = Freeze::createConnection(_communicator, _envName); - StringAdapterInfoDict adapters(connection, adaptersDbName); - StringAdapterInfoDict::const_iterator i = adapters.find(id); - if(i != adapters.end()) + IceDB::ReadOnlyTxn txn(_env); + + AdapterInfo info; + if(_adapters.get(txn, id, info)) { - return i->second.proxy; + return info.proxy; } Ice::EndpointSeq endpoints; - vector<AdapterInfo> infos = findByReplicaGroupId(adapters, id); + vector<AdapterInfo> infos = findByReplicaGroupId(txn, _adapters, _adaptersByGroupId, id); filterAdapterInfos("", id, _pluginFacade, con, ctx, infos); for(unsigned int i = 0; i < infos.size(); ++i) { @@ -1109,41 +1094,36 @@ Database::removeAdapter(const string& adapterId) AdapterInfoSeq infos; Ice::Long dbSerial = 0; - for(;;) + try { - try + IceDB::ReadWriteTxn txn(_env); + + AdapterInfo info; + if(_adapters.get(txn, adapterId, info)) { - TransactionHolder txHolder(_connection); - StringAdapterInfoDict::iterator i = _adapters.find(adapterId); - if(i != _adapters.end()) + deleteAdapter(txn, info); + } + else + { + infos = findByReplicaGroupId(txn, _adapters, _adaptersByGroupId, adapterId); + if(infos.empty()) { - _adapters.erase(i); + throw AdapterNotExistException(adapterId); } - else + for(AdapterInfoSeq::iterator p = infos.begin(); p != infos.end(); ++p) { - infos = findByReplicaGroupId(_adapters, adapterId); - if(infos.empty()) - { - throw AdapterNotExistException(adapterId); - } - for(AdapterInfoSeq::iterator p = infos.begin(); p != infos.end(); ++p) - { - p->replicaGroupId.clear(); - _adapters.put(StringAdapterInfoDict::value_type(p->id, *p)); - } + _adaptersByGroupId.del(txn, p->replicaGroupId, p->id); + p->replicaGroupId.clear(); + addAdapter(txn, *p); } - dbSerial = updateSerial(_connection, adaptersDbName); - txHolder.commit(); - break; - } - catch(const DeadlockException&) - { - continue; - } - catch(const DatabaseException& ex) - { - halt(_communicator, ex); } + dbSerial = updateSerial(txn, adaptersDbName); + + txn.commit(); + } + catch(const IceDB::LMDBException& ex) + { + halt(_communicator, ex); } if(_traceLevels->adapter > 0) @@ -1254,13 +1234,13 @@ Database::getAdapterInfo(const string& id) // Otherwise, we check the adapter endpoint table -- if there's an // entry the adapter is managed by the registry itself. // - ConnectionPtr connection = Freeze::createConnection(_communicator, _envName); - StringAdapterInfoDict adapters(connection, adaptersDbName); + IceDB::ReadOnlyTxn txn(_env); + + AdapterInfo info; AdapterInfoSeq infos; - StringAdapterInfoDict::const_iterator i = adapters.find(id); - if(i != adapters.end()) + if(_adapters.get(txn, id, info)) { - infos.push_back(i->second); + infos.push_back(info); } else { @@ -1268,7 +1248,7 @@ Database::getAdapterInfo(const string& id) // If it's not a regular object adapter, perhaps it's a replica // group... // - infos = findByReplicaGroupId(adapters, id); + infos = findByReplicaGroupId(txn, _adapters, _adaptersByGroupId, id); if(infos.empty()) { throw AdapterNotExistException(id); @@ -1310,13 +1290,13 @@ Database::getFilteredAdapterInfo(const string& id, const Ice::ConnectionPtr& con // Otherwise, we check the adapter endpoint table -- if there's an // entry the adapter is managed by the registry itself. // - ConnectionPtr connection = Freeze::createConnection(_communicator, _envName); - StringAdapterInfoDict adapters(connection, adaptersDbName); + IceDB::ReadOnlyTxn txn(_env); + + AdapterInfo info; AdapterInfoSeq infos; - StringAdapterInfoDict::const_iterator i = adapters.find(id); - if(i != adapters.end()) + if(_adapters.get(txn, id, info)) { - infos.push_back(i->second); + infos.push_back(info); } else { @@ -1324,7 +1304,7 @@ Database::getFilteredAdapterInfo(const string& id, const Ice::ConnectionPtr& con // If it's not a regular object adapter, perhaps it's a replica // group... // - infos = findByReplicaGroupId(adapters, id); + infos = findByReplicaGroupId(txn, _adapters, _adaptersByGroupId, id); if(infos.empty()) { throw AdapterNotExistException(id); @@ -1393,18 +1373,25 @@ Database::getAllAdapters(const string& expression) result.swap(ids); set<string> groups; - for(StringAdapterInfoDict::const_iterator p = _adapters.begin(); p != _adapters.end(); ++p) + IceDB::ReadOnlyTxn txn(_env); + + string name; + AdapterInfo info; + AdapterMapROCursor cursor(_adapters, txn); + while(cursor.get(name, info, MDB_NEXT)) { - if(expression.empty() || IceUtilInternal::match(p->first, expression, true)) + if(expression.empty() || IceUtilInternal::match(name, expression, true)) { - result.push_back(p->first); + result.push_back(name); } - string replicaGroupId = p->second.replicaGroupId; + string replicaGroupId = info.replicaGroupId; if(!replicaGroupId.empty() && (expression.empty() || IceUtilInternal::match(replicaGroupId, expression, true))) { groups.insert(replicaGroupId); } } + cursor.close(); + // // COMPILERFIX: We're not using result.insert() here, this doesn't compile on Sun. // @@ -1432,29 +1419,22 @@ Database::addObject(const ObjectInfo& info) } Ice::Long dbSerial = 0; - for(;;) + try { - try - { - TransactionHolder txHolder(_connection); - IdentityObjectInfoDict::const_iterator i = _objects.find(id); - if(i != _objects.end()) - { - throw ObjectExistsException(id); - } - _objects.put(IdentityObjectInfoDict::value_type(id, info)); - dbSerial = updateSerial(_connection, objectsDbName); - txHolder.commit(); - break; - } - catch(const DeadlockException&) - { - continue; - } - catch(const DatabaseException& ex) + IceDB::ReadWriteTxn txn(_env); + + if(_objects.find(txn, id)) { - halt(_communicator, ex); + throw ObjectExistsException(id); } + addObject(txn, info, false); + dbSerial = updateSerial(txn, objectsDbName); + + txn.commit(); + } + catch(const IceDB::LMDBException& ex) + { + halt(_communicator, ex); } serial = _objectObserverTopic->objectAdded(dbSerial, info); @@ -1484,33 +1464,25 @@ Database::addOrUpdateObject(const ObjectInfo& info, Ice::Long dbSerial) } bool update = false; - for(;;) + try { - try - { - TransactionHolder txHolder(_connection); - IdentityObjectInfoDict::iterator i = _objects.find(id); - if(i != _objects.end()) - { - update = true; - i.set(info); - } - else - { - _objects.put(IdentityObjectInfoDict::value_type(id, info)); - } - dbSerial = updateSerial(_connection, objectsDbName, dbSerial); - txHolder.commit(); - break; - } - catch(const DeadlockException&) - { - continue; - } - catch(const DatabaseException& ex) + IceDB::ReadWriteTxn txn(_env); + + Ice::Identity k; + ObjectInfo v; + update = _objects.get(txn, k, v); + if(update) { - halt(_communicator, ex); + _objectsByType.del(txn, v.type, v.proxy->ice_getIdentity()); } + addObject(txn, info, false); + dbSerial = updateSerial(txn, objectsDbName, dbSerial); + + txn.commit(); + } + catch(const IceDB::LMDBException& ex) + { + halt(_communicator, ex); } if(update) @@ -1549,32 +1521,25 @@ Database::removeObject(const Ice::Identity& id, Ice::Long dbSerial) throw ex; } - for(;;) + try { - try - { - TransactionHolder txHolder(_connection); - IdentityObjectInfoDict::iterator i = _objects.find(id); - if(i == _objects.end()) - { - ObjectNotRegisteredException ex; - ex.id = id; - throw ex; - } + IceDB::ReadWriteTxn txn(_env); - _objects.erase(i); - dbSerial = updateSerial(_connection, objectsDbName, dbSerial); - txHolder.commit(); - break; - } - catch(const DeadlockException&) - { - continue; - } - catch(const DatabaseException& ex) + ObjectInfo info; + if(!_objects.get(txn, id, info)) { - halt(_communicator, ex); + ObjectNotRegisteredException ex; + ex.id = id; + throw ex; } + deleteObject(txn, info, false); + dbSerial = updateSerial(txn, objectsDbName, dbSerial); + + txn.commit(); + } + catch(const IceDB::LMDBException& ex) + { + halt(_communicator, ex); } serial = _objectObserverTopic->objectRemoved(dbSerial, id); @@ -1610,33 +1575,25 @@ Database::updateObject(const Ice::ObjectPrx& proxy) ObjectInfo info; Ice::Long dbSerial = 0; - for(;;) + try { - try - { - TransactionHolder txHolder(_connection); - IdentityObjectInfoDict::iterator i = _objects.find(id); - if(i == _objects.end()) - { - ObjectNotRegisteredException ex; - ex.id = id; - throw ex; - } - info = i->second; - info.proxy = proxy; - i.set(info); - dbSerial = updateSerial(_connection, objectsDbName); - txHolder.commit(); - break; - } - catch(const DeadlockException&) - { - continue; - } - catch(const DatabaseException& ex) + IceDB::ReadWriteTxn txn(_env); + + if(!_objects.get(txn, id, info)) { - halt(_communicator, ex); + ObjectNotRegisteredException ex; + ex.id = id; + throw ex; } + info.proxy = proxy; + addObject(txn, info, false); + dbSerial = updateSerial(txn, objectsDbName); + + txn.commit(); + } + catch(const IceDB::LMDBException& ex) + { + halt(_communicator, ex); } serial = _objectObserverTopic->objectUpdated(dbSerial, info); @@ -1653,26 +1610,24 @@ int Database::addOrUpdateRegistryWellKnownObjects(const ObjectInfoSeq& objects) { Lock sync(*this); - for(;;) + try { - try + IceDB::ReadWriteTxn txn(_env); + for(ObjectInfoSeq::const_iterator p = objects.begin(); p != objects.end(); ++p) { - TransactionHolder txHolder(_connection); - for(ObjectInfoSeq::const_iterator p = objects.begin(); p != objects.end(); ++p) + Ice::Identity id = p->proxy->ice_getIdentity(); + ObjectInfo info; + if(_objects.get(txn, id, info)) { - _objects.put(IdentityObjectInfoDict::value_type(p->proxy->ice_getIdentity(), *p)); + _objectsByType.del(txn, info.type, id); } - txHolder.commit(); - break; - } - catch(const DeadlockException&) - { - continue; - } - catch(const DatabaseException& ex) - { - halt(_communicator, ex); + addObject(txn, *p, false); } + txn.commit(); + } + catch(const IceDB::LMDBException& ex) + { + halt(_communicator, ex); } return _objectObserverTopic->wellKnownObjectsAddedOrUpdated(objects); } @@ -1681,26 +1636,23 @@ int Database::removeRegistryWellKnownObjects(const ObjectInfoSeq& objects) { Lock sync(*this); - for(;;) + try { - try + IceDB::ReadWriteTxn txn(_env); + for(ObjectInfoSeq::const_iterator p = objects.begin(); p != objects.end(); ++p) { - TransactionHolder txHolder(_connection); - for(ObjectInfoSeq::const_iterator p = objects.begin(); p != objects.end(); ++p) + Ice::Identity id = p->proxy->ice_getIdentity(); + ObjectInfo info; + if(_objects.get(txn, id, info)) { - _objects.erase(p->proxy->ice_getIdentity()); + deleteObject(txn, info, false); } - txHolder.commit(); - break; - } - catch(const DeadlockException&) - { - continue; - } - catch(const DatabaseException& ex) - { - halt(_communicator, ex); } + txn.commit(); + } + catch(const IceDB::LMDBException& ex) + { + halt(_communicator, ex); } return _objectObserverTopic->wellKnownObjectsRemoved(objects); } @@ -1719,16 +1671,15 @@ Database::getObjectProxy(const Ice::Identity& id) { } - ConnectionPtr connection = Freeze::createConnection(_communicator, _envName); - IdentityObjectInfoDict objects(connection, objectsDbName); - IdentityObjectInfoDict::const_iterator i = objects.find(id); - if(i == objects.end()) + IceDB::ReadOnlyTxn txn(_env); + ObjectInfo info; + if(!_objects.get(txn, id, info)) { ObjectNotRegisteredException ex; ex.id = id; throw ex; } - return i->second.proxy; + return info.proxy; } Ice::ObjectPrx @@ -1780,9 +1731,8 @@ Database::getObjectsByType(const string& type, const Ice::ConnectionPtr& con, co { Ice::ObjectProxySeq proxies = _objectCache.getObjectsByType(type); - ConnectionPtr connection = Freeze::createConnection(_communicator, _envName); - IdentityObjectInfoDict objects(connection, objectsDbName); - vector<ObjectInfo> infos = findByType(objects, type); + IceDB::ReadOnlyTxn txn(_env); + vector<ObjectInfo> infos = findByType(txn, _objects, _objectsByType, type); for(unsigned int i = 0; i < infos.size(); ++i) { proxies.push_back(infos[i].proxy); @@ -1814,14 +1764,13 @@ Database::getObjectInfo(const Ice::Identity& id) { } - ConnectionPtr connection = Freeze::createConnection(_communicator, _envName); - IdentityObjectInfoDict objects(connection, objectsDbName); - IdentityObjectInfoDict::const_iterator i = objects.find(id); - if(i == objects.end()) + IceDB::ReadOnlyTxn txn(_env); + ObjectInfo info; + if(!_objects.get(txn, id, info)) { throw ObjectNotRegisteredException(id); } - return i->second; + return info; } ObjectInfoSeq @@ -1829,13 +1778,16 @@ Database::getAllObjectInfos(const string& expression) { ObjectInfoSeq infos = _objectCache.getAll(expression); - ConnectionPtr connection = Freeze::createConnection(_communicator, _envName); - IdentityObjectInfoDict objects(connection, objectsDbName); - for(IdentityObjectInfoDict::const_iterator p = objects.begin(); p != objects.end(); ++p) + IceDB::ReadOnlyTxn txn(_env); + + Ice::Identity id; + ObjectInfo info; + ObjectsMapROCursor cursor(_objects, txn); + while(cursor.get(id, info, MDB_NEXT)) { - if(expression.empty() || IceUtilInternal::match(_communicator->identityToString(p->first), expression, true)) + if(expression.empty() || IceUtilInternal::match(_communicator->identityToString(id), expression, true)) { - infos.push_back(p->second); + infos.push_back(info); } } return infos; @@ -1846,9 +1798,8 @@ Database::getObjectInfosByType(const string& type) { ObjectInfoSeq infos = _objectCache.getAllByType(type); - ConnectionPtr connection = Freeze::createConnection(_communicator, _envName); - IdentityObjectInfoDict objects(connection, objectsDbName); - ObjectInfoSeq dbInfos = findByType(objects, type); + IceDB::ReadOnlyTxn txn(_env); + ObjectInfoSeq dbInfos = findByType(txn, _objects, _objectsByType, type); for(unsigned int i = 0; i < dbInfos.size(); ++i) { infos.push_back(dbInfos[i]); @@ -1862,31 +1813,26 @@ Database::addInternalObject(const ObjectInfo& info, bool replace) Lock sync(*this); const Ice::Identity id = info.proxy->ice_getIdentity(); - for(;;) + try { - try + IceDB::ReadWriteTxn txn(_env); + + ObjectInfo oldInfo; + if(_internalObjects.get(txn, id, oldInfo)) { - TransactionHolder txHolder(_connection); if(!replace) { - IdentityObjectInfoDict::const_iterator i = _internalObjects.find(id); - if(i != _internalObjects.end()) - { - throw ObjectExistsException(id); - } + throw ObjectExistsException(id); } - _internalObjects.put(IdentityObjectInfoDict::value_type(id, info)); - txHolder.commit(); - break; - } - catch(const DeadlockException&) - { - continue; - } - catch(const DatabaseException& ex) - { - halt(_communicator, ex); + _internalObjectsByType.del(txn, oldInfo.type, id); } + addObject(txn, info, true); + + txn.commit(); + } + catch(const IceDB::LMDBException& ex) + { + halt(_communicator, ex); } } @@ -1895,30 +1841,24 @@ Database::removeInternalObject(const Ice::Identity& id) { Lock sync(*this); - for(;;) + try { - try - { - TransactionHolder txHolder(_connection); - IdentityObjectInfoDict::iterator i = _internalObjects.find(id); - if(i == _internalObjects.end()) - { - ObjectNotRegisteredException ex; - ex.id = id; - throw ex; - } - _internalObjects.erase(i); - txHolder.commit(); - break; - } - catch(const DeadlockException&) - { - continue; - } - catch(const DatabaseException& ex) + IceDB::ReadWriteTxn txn(_env); + + ObjectInfo info; + if(!_internalObjects.get(txn, id, info)) { - halt(_communicator, ex); + ObjectNotRegisteredException ex; + ex.id = id; + throw ex; } + deleteObject(txn, info, true); + + txn.commit(); + } + catch(const IceDB::LMDBException& ex) + { + halt(_communicator, ex); } } @@ -1927,9 +1867,8 @@ Database::getInternalObjectsByType(const string& type) { Ice::ObjectProxySeq proxies; - ConnectionPtr connection = Freeze::createConnection(_communicator, _envName); - IdentityObjectInfoDict internalObjects(connection, internalObjectsDbName); - vector<ObjectInfo> infos = findByType(internalObjects, type); + IceDB::ReadOnlyTxn txn(_env); + vector<ObjectInfo> infos = findByType(txn, _internalObjects, _internalObjectsByType, type); for(unsigned int i = 0; i < infos.size(); ++i) { proxies.push_back(infos[i].proxy); @@ -1938,7 +1877,7 @@ Database::getInternalObjectsByType(const string& type) } void -Database::checkForAddition(const ApplicationHelper& app, const ConnectionPtr& connection) +Database::checkForAddition(const ApplicationHelper& app, const IceDB::ReadWriteTxn& txn) { set<string> serverIds; set<string> adapterIds; @@ -1949,18 +1888,16 @@ Database::checkForAddition(const ApplicationHelper& app, const ConnectionPtr& co for_each(serverIds.begin(), serverIds.end(), objFunc(*this, &Database::checkServerForAddition)); if(!adapterIds.empty()) { - StringAdapterInfoDict adapters(connection, adaptersDbName); for(set<string>::const_iterator p = adapterIds.begin(); p != adapterIds.end(); ++p) { - checkAdapterForAddition(*p, adapters); + checkAdapterForAddition(*p, txn); } } if(!objectIds.empty()) { - IdentityObjectInfoDict objects(connection, objectsDbName); for(set<Ice::Identity>::const_iterator p = objectIds.begin(); p != objectIds.end(); ++p) { - checkObjectForAddition(*p, objects); + checkObjectForAddition(*p, txn); } } @@ -1973,7 +1910,7 @@ Database::checkForAddition(const ApplicationHelper& app, const ConnectionPtr& co void Database::checkForUpdate(const ApplicationHelper& origApp, const ApplicationHelper& newApp, - const ConnectionPtr& connection) + const IceDB::ReadWriteTxn& txn) { set<string> oldSvrs, newSvrs; set<string> oldAdpts, newAdpts; @@ -1990,10 +1927,9 @@ Database::checkForUpdate(const ApplicationHelper& origApp, set_difference(newAdpts.begin(), newAdpts.end(), oldAdpts.begin(), oldAdpts.end(), back_inserter(addedAdpts)); if(!addedAdpts.empty()) { - StringAdapterInfoDict adapters(connection, adaptersDbName); for(Ice::StringSeq::const_iterator p = addedAdpts.begin(); p != addedAdpts.end(); ++p) { - checkAdapterForAddition(*p, adapters); + checkAdapterForAddition(*p, txn); } } @@ -2001,10 +1937,9 @@ Database::checkForUpdate(const ApplicationHelper& origApp, set_difference(newObjs.begin(), newObjs.end(), oldObjs.begin(), oldObjs.end(), back_inserter(addedObjs)); if(!addedObjs.empty()) { - IdentityObjectInfoDict objects(connection, objectsDbName); for(vector<Ice::Identity>::const_iterator p = addedObjs.begin(); p != addedObjs.end(); ++p) { - checkObjectForAddition(*p, objects); + checkObjectForAddition(*p, txn); } } @@ -2054,7 +1989,7 @@ Database::checkServerForAddition(const string& id) } void -Database::checkAdapterForAddition(const string& id, const StringAdapterInfoDict& adapters) +Database::checkAdapterForAddition(const string& id, const IceDB::ReadWriteTxn& txn) { bool found = false; if(_adapterCache.has(id)) @@ -2063,14 +1998,13 @@ Database::checkAdapterForAddition(const string& id, const StringAdapterInfoDict& } else { - StringAdapterInfoDict::const_iterator i = adapters.find(id); - if(i != adapters.end()) + if(_adapters.find(txn, id)) { found = true; } else { - if(!findByReplicaGroupId(adapters, id).empty()) + if(!findByReplicaGroupId(txn, _adapters,_adaptersByGroupId, id).empty()) { found = true; } @@ -2086,7 +2020,8 @@ Database::checkAdapterForAddition(const string& id, const StringAdapterInfoDict& } void -Database::checkObjectForAddition(const Ice::Identity& objectId, const IdentityObjectInfoDict& objects) +Database::checkObjectForAddition(const Ice::Identity& objectId, + const IceDB::ReadWriteTxn& txn) { bool found = false; if(_objectCache.has(objectId) || _allocatableObjectCache.has(objectId)) @@ -2095,8 +2030,7 @@ Database::checkObjectForAddition(const Ice::Identity& objectId, const IdentityOb } else { - IdentityObjectInfoDict::const_iterator i = objects.find(objectId); - if(i != objects.end()) + if(_objects.find(txn, objectId)) { found = true; } @@ -2342,57 +2276,19 @@ Database::reload(const ApplicationHelper& oldApp, } Ice::Long -Database::saveApplication(const ApplicationInfo& info, const ConnectionPtr& connection, Ice::Long dbSerial) +Database::saveApplication(const ApplicationInfo& info, const IceDB::ReadWriteTxn& txn, Ice::Long dbSerial) { assert(dbSerial != 0 || _master); - for(;;) - { - try - { - StringApplicationInfoDict applications(connection, applicationsDbName); - TransactionHolder txHolder(connection); - applications.put(StringApplicationInfoDict::value_type(info.descriptor.name, info)); - dbSerial = updateSerial(connection, applicationsDbName, dbSerial); - txHolder.commit(); - break; - } - catch(const DeadlockException&) - { - continue; - } - catch(const DatabaseException& ex) - { - halt(_communicator, ex); - } - } - return dbSerial; + _applications.put(txn, info.descriptor.name, info); + return updateSerial(txn, applicationsDbName, dbSerial); } Ice::Long -Database::removeApplication(const string& name, const ConnectionPtr& connection, Ice::Long dbSerial) +Database::removeApplication(const string& name, const IceDB::ReadWriteTxn& txn, Ice::Long dbSerial) { assert(dbSerial != 0 || _master); - for(;;) - { - try - { - StringApplicationInfoDict applications(connection, applicationsDbName); - TransactionHolder txHolder(connection); - applications.erase(name); - dbSerial = updateSerial(connection, applicationsDbName, dbSerial); - txHolder.commit(); - break; - } - catch(const DeadlockException&) - { - continue; - } - catch(const DatabaseException& ex) - { - halt(_communicator, ex); - } - } - return dbSerial; + _applications.del(txn, name); + return updateSerial(txn, applicationsDbName, dbSerial); } void @@ -2598,7 +2494,6 @@ Database::finishApplicationUpdate(const ApplicationUpdateInfo& update, Ice::Long dbSerial) { const ApplicationDescriptor& newDesc = helper.getDefinition(); - ConnectionPtr connection = Freeze::createConnection(_communicator, _envName); ServerEntrySeq entries; int serial = 0; @@ -2610,7 +2505,10 @@ Database::finishApplicationUpdate(const ApplicationUpdateInfo& update, } Lock sync(*this); - checkForUpdate(previous, helper, connection); + + IceDB::ReadWriteTxn txn(_env); + + checkForUpdate(previous, helper, txn); reload(previous, helper, entries, oldApp.uuid, oldApp.revision + 1, noRestart); for_each(entries.begin(), entries.end(), IceUtil::voidMemFun(&ServerEntry::sync)); @@ -2620,7 +2518,9 @@ Database::finishApplicationUpdate(const ApplicationUpdateInfo& update, info.updateUser = update.updateUser; info.revision = update.revision; info.descriptor = newDesc; - dbSerial = saveApplication(info, connection, dbSerial); + dbSerial = saveApplication(info, txn, dbSerial); + + txn.commit(); serial = _applicationObserverTopic->applicationUpdated(dbSerial, update); } @@ -2629,6 +2529,10 @@ Database::finishApplicationUpdate(const ApplicationUpdateInfo& update, finishUpdating(update.descriptor.name); throw; } + catch(const IceDB::LMDBException& ex) + { + halt(_communicator, ex); + } _applicationObserverTopic->waitForSyncedSubscribers(serial); // Wait for replicas to be updated. @@ -2670,7 +2574,18 @@ Database::finishApplicationUpdate(const ApplicationUpdateInfo& update, ApplicationInfo info = oldApp; info.revision = update.revision + 1; - dbSerial = saveApplication(info, connection); + + try + { + IceDB::ReadWriteTxn txn(_env); + dbSerial = saveApplication(info, txn); + txn.commit(); + } + catch(const IceDB::LMDBException& ex) + { + halt(_communicator, ex); + } + reload(previous, helper, entries, info.uuid, info.revision, noRestart); newUpdate.updateTime = IceUtil::Time::now().toMilliSeconds(); @@ -2729,3 +2644,114 @@ Database::finishUpdating(const string& name) _updating.erase(p); notifyAll(); } + +Ice::Long +Database::getSerial(const IceDB::Txn& txn, const string& dbName) +{ + Ice::Long serial; + if(!_serials.get(txn, dbName, serial)) + { + return 1; + } + return serial; +} + +Ice::Long +Database::updateSerial(const IceDB::ReadWriteTxn& txn, const string& dbName, Ice::Long serial) +{ + if(serial == -1) // Master doesn't support serials. + { + return -1; + } + + // + // If a serial number is provided, just update the serial number from the database, + // otherwise if the serial is 0, we increment the serial from the database. + // + Ice::Long dbSerial; + if(!_serials.get(txn, dbName, dbSerial)) + { + _serials.put(txn, dbName, serial == 0 ? 1 : serial); + return 1; + } + else + { + dbSerial = (serial == 0 ? dbSerial + 1 : serial); + _serials.put(txn, dbName, dbSerial); + return dbSerial; + } +} + +void +Database::addAdapter(const IceDB::ReadWriteTxn& txn, const AdapterInfo& info) +{ + try + { + _adapters.put(txn, info.id, info); + } + catch(const IceDB::KeyTooLongException&) + { + throw Ice::InvalidAdapterException("adapter name is too long: `" + info.id + "'"); + } + try + { + _adaptersByGroupId.put(txn, info.replicaGroupId, info.id); + } + catch(const IceDB::KeyTooLongException&) + { + throw Ice::InvalidAdapterException("replica group id is too long: `" + info.replicaGroupId + "'"); + } +} + +void +Database::deleteAdapter(const IceDB::ReadWriteTxn& txn, const AdapterInfo& info) +{ + + _adapters.del(txn, info.id); + _adaptersByGroupId.del(txn, info.replicaGroupId, info.id); +} + +void +Database::addObject(const IceDB::ReadWriteTxn& txn, const ObjectInfo& info, bool internal) +{ + if(internal) + { + _internalObjects.put(txn, info.proxy->ice_getIdentity(), info); + _internalObjectsByType.put(txn, info.type, info.proxy->ice_getIdentity()); + } + else + { + try + { + _objects.put(txn, info.proxy->ice_getIdentity(), info); + } + catch(const IceDB::KeyTooLongException&) + { + throw DeploymentException("object identity is too long: `" + + _communicator->identityToString(info.proxy->ice_getIdentity()) + "'"); + } + try + { + _objectsByType.put(txn, info.type, info.proxy->ice_getIdentity()); + } + catch(const IceDB::KeyTooLongException&) + { + throw DeploymentException("object type is too long: `" + info.type + "'"); + } + } +} + +void +Database::deleteObject(const IceDB::ReadWriteTxn& txn, const ObjectInfo& info, bool internal) +{ + if(internal) + { + _internalObjects.del(txn, info.proxy->ice_getIdentity()); + _internalObjectsByType.del(txn, info.type, info.proxy->ice_getIdentity()); + } + else + { + _objects.del(txn, info.proxy->ice_getIdentity()); + _objectsByType.del(txn, info.type, info.proxy->ice_getIdentity()); + } +} diff --git a/cpp/src/IceGrid/Database.h b/cpp/src/IceGrid/Database.h index c6105901940..fd1cf7d8b5c 100644 --- a/cpp/src/IceGrid/Database.h +++ b/cpp/src/IceGrid/Database.h @@ -12,8 +12,8 @@ #include <IceUtil/Mutex.h> #include <IceUtil/Shared.h> +#include <IceUtil/FileUtil.h> #include <Ice/CommunicatorF.h> -#include <Freeze/Freeze.h> #include <IceGrid/Admin.h> #include <IceGrid/Internal.h> #include <IceGrid/ServerCache.h> @@ -25,9 +25,7 @@ #include <IceGrid/Topics.h> #include <IceGrid/PluginFacadeI.h> -#include <IceGrid/StringApplicationInfoDict.h> -#include <IceGrid/StringAdapterInfoDict.h> -#include <IceGrid/IdentityObjectInfoDict.h> +#include <IceDB/IceDB.h> namespace IceGrid { @@ -48,6 +46,17 @@ typedef IceUtil::Handle<ServerEntry> ServerEntryPtr; class ApplicationHelper; +typedef IceDB::Dbi<std::string, IceGrid::ApplicationInfo, IceDB::IceContext, Ice::OutputStreamPtr> + StringApplicationInfoMap; + +typedef IceDB::Dbi<Ice::Identity, IceGrid::ObjectInfo, IceDB::IceContext, Ice::OutputStreamPtr> IdentityObjectInfoMap; +typedef IceDB::Dbi<std::string, Ice::Identity, IceDB::IceContext, Ice::OutputStreamPtr> StringIdentityMap; + +typedef IceDB::Dbi<std::string, IceGrid::AdapterInfo, IceDB::IceContext, Ice::OutputStreamPtr> StringAdapterInfoMap; +typedef IceDB::Dbi<std::string, std::string, IceDB::IceContext, Ice::OutputStreamPtr> StringStringMap; + +typedef IceDB::Dbi<std::string, Ice::Long, IceDB::IceContext, Ice::OutputStreamPtr> StringLongMap; + class Database : public IceUtil::Shared, public IceUtil::Monitor<IceUtil::Mutex> { public: @@ -58,9 +67,9 @@ public: #endif - Database(const Ice::ObjectAdapterPtr&, const IceStorm::TopicManagerPrx&, const std::string&, - const TraceLevelsPtr&, const RegistryInfo&, const Freeze::ConnectionPtr&, const std::string&, bool); - + Database(const Ice::ObjectAdapterPtr&, const IceStorm::TopicManagerPrx&, const std::string&, const TraceLevelsPtr&, + const RegistryInfo&, bool); + std::string getInstanceName() const; bool isReadOnly() const { return _readonly; } const TraceLevelsPtr& getTraceLevels() const { return _traceLevels; } @@ -78,9 +87,9 @@ public: void syncAdapters(const AdapterInfoSeq&, Ice::Long); void syncObjects(const ObjectInfoSeq&, Ice::Long); - ApplicationInfoSeq getApplications(Ice::Long&) const; - AdapterInfoSeq getAdapters(Ice::Long&) const; - ObjectInfoSeq getObjects(Ice::Long&) const; + ApplicationInfoSeq getApplications(Ice::Long&); + AdapterInfoSeq getAdapters(Ice::Long&); + ObjectInfoSeq getObjects(Ice::Long&); StringLongDict getSerials() const; @@ -98,7 +107,7 @@ public: ReplicaCache& getReplicaCache(); ReplicaEntryPtr getReplica(const std::string&) const; - + ServerCache& getServerCache(); ServerEntryPtr getServer(const std::string&) const; @@ -106,16 +115,16 @@ public: AllocatableObjectEntryPtr getAllocatableObject(const Ice::Identity&) const; void setAdapterDirectProxy(const std::string&, const std::string&, const Ice::ObjectPrx&, Ice::Long = 0); - Ice::ObjectPrx getAdapterDirectProxy(const std::string&, const Ice::EncodingVersion&, const Ice::ConnectionPtr&, + Ice::ObjectPrx getAdapterDirectProxy(const std::string&, const Ice::EncodingVersion&, const Ice::ConnectionPtr&, const Ice::Context&); void removeAdapter(const std::string&); AdapterPrx getAdapterProxy(const std::string&, const std::string&, bool); - void getLocatorAdapterInfo(const std::string&, const Ice::ConnectionPtr&, const Ice::Context&, - LocatorAdapterInfoSeq&, int&, bool&, bool&, + void getLocatorAdapterInfo(const std::string&, const Ice::ConnectionPtr&, const Ice::Context&, + LocatorAdapterInfoSeq&, int&, bool&, bool&, const std::set<std::string>& = std::set<std::string>()); - bool addAdapterSyncCallback(const std::string&, const SynchronizationCallbackPtr&, + bool addAdapterSyncCallback(const std::string&, const SynchronizationCallbackPtr&, const std::set<std::string>& = std::set<std::string>()); std::vector<std::pair<std::string, AdapterPrx> > getAdapters(const std::string&, int&, bool&); @@ -140,7 +149,7 @@ public: Ice::ObjectPrx getObjectByTypeOnLeastLoadedNode(const std::string&, LoadSample, const Ice::ConnectionPtr& = Ice::ConnectionPtr(), const Ice::Context& = Ice::Context()); - Ice::ObjectProxySeq getObjectsByType(const std::string&, + Ice::ObjectProxySeq getObjectsByType(const std::string&, const Ice::ConnectionPtr& = Ice::ConnectionPtr(), const Ice::Context& = Ice::Context()); ObjectInfo getObjectInfo(const Ice::Identity&); @@ -153,13 +162,13 @@ public: private: - void checkForAddition(const ApplicationHelper&, const Freeze::ConnectionPtr&); - void checkForUpdate(const ApplicationHelper&, const ApplicationHelper&, const Freeze::ConnectionPtr&); + void checkForAddition(const ApplicationHelper&, const IceDB::ReadWriteTxn&); + void checkForUpdate(const ApplicationHelper&, const ApplicationHelper&, const IceDB::ReadWriteTxn&); void checkForRemove(const ApplicationHelper&); void checkServerForAddition(const std::string&); - void checkAdapterForAddition(const std::string&, const StringAdapterInfoDict&); - void checkObjectForAddition(const Ice::Identity&, const IdentityObjectInfoDict&); + void checkAdapterForAddition(const std::string&, const IceDB::ReadWriteTxn&); + void checkObjectForAddition(const Ice::Identity&, const IceDB::ReadWriteTxn&); void checkReplicaGroupExists(const std::string&); void checkReplicaGroupForRemove(const std::string&); @@ -169,8 +178,8 @@ private: void checkUpdate(const ApplicationHelper&, const ApplicationHelper&, const std::string&, int, bool); - Ice::Long saveApplication(const ApplicationInfo&, const Freeze::ConnectionPtr&, Ice::Long = 0); - Ice::Long removeApplication(const std::string&, const Freeze::ConnectionPtr&, Ice::Long = 0); + Ice::Long saveApplication(const ApplicationInfo&, const IceDB::ReadWriteTxn&, Ice::Long = 0); + Ice::Long removeApplication(const std::string&, const IceDB::ReadWriteTxn&, Ice::Long = 0); void finishApplicationUpdate(const ApplicationUpdateInfo&, const ApplicationInfo&, const ApplicationHelper&, const ApplicationHelper&, AdminSessionI*, bool, Ice::Long = 0); @@ -181,6 +190,15 @@ private: void startUpdating(const std::string&, const std::string&, int); void finishUpdating(const std::string&); + Ice::Long getSerial(const IceDB::Txn&, const std::string&); + Ice::Long updateSerial(const IceDB::ReadWriteTxn&, const std::string&, Ice::Long = 0); + + void addAdapter(const IceDB::ReadWriteTxn&, const AdapterInfo&); + void deleteAdapter(const IceDB::ReadWriteTxn&, const AdapterInfo&); + + void addObject(const IceDB::ReadWriteTxn&, const ObjectInfo&, bool); + void deleteObject(const IceDB::ReadWriteTxn&, const ObjectInfo&, bool); + friend struct AddComponent; static const std::string _applicationDbName; @@ -188,7 +206,7 @@ private: static const std::string _internalObjectDbName; static const std::string _adapterDbName; static const std::string _replicaGroupDbName; - + const Ice::CommunicatorPtr _communicator; const Ice::ObjectAdapterPtr _internalAdapter; const IceStorm::TopicManagerPrx _topicManager; @@ -210,16 +228,24 @@ private: AdapterObserverTopicPtr _adapterObserverTopic; ObjectObserverTopicPtr _objectObserverTopic; - Freeze::ConnectionPtr _connection; - const std::string _envName; - - StringApplicationInfoDict _applications; - StringAdapterInfoDict _adapters; - IdentityObjectInfoDict _objects; - IdentityObjectInfoDict _internalObjects; - + IceUtilInternal::FileLock _dbLock; + IceDB::Env _env; + + StringApplicationInfoMap _applications; + + StringAdapterInfoMap _adapters; + StringStringMap _adaptersByGroupId; + + IdentityObjectInfoMap _objects; + StringIdentityMap _objectsByType; + + IdentityObjectInfoMap _internalObjects; + StringIdentityMap _internalObjectsByType; + + StringLongMap _serials; + RegistryPluginFacadeIPtr _pluginFacade; - + AdminSessionI* _lock; std::string _lockUserId; diff --git a/cpp/src/IceGrid/IceGridDB.cpp b/cpp/src/IceGrid/IceGridDB.cpp new file mode 100644 index 00000000000..bbdb2b0666a --- /dev/null +++ b/cpp/src/IceGrid/IceGridDB.cpp @@ -0,0 +1,530 @@ +// ********************************************************************** +// +// Copyright (c) 2003-2015 ZeroC, Inc. All rights reserved. +// +// This copy of Ice is licensed to you under the terms described in the +// ICE_LICENSE file included in this distribution. +// +// ********************************************************************** + +#include <IceUtil/Options.h> +#include <Ice/Application.h> +#include <IceDB/IceDB.h> +#include <IceGrid/Admin.h> +#include <IceGrid/DBTypes.h> +#include <IcePatch2Lib/Util.h> +#include <IceUtil/DisableWarnings.h> + +using namespace std; +using namespace Ice; +using namespace IceGrid; + +namespace +{ + +bool skipFilter = false; + +class ServerDescriptorI : public IceGrid::ServerDescriptor +{ +public: + + ServerDescriptorI(const string& serverVersion) : + _serverVersion(serverVersion) + { + } + +protected: + + virtual void ice_postUnmarshal() + { + iceVersion = _serverVersion; + } + +private: + + string _serverVersion; +}; + +class IceBoxDescriptorI : public IceGrid::IceBoxDescriptor +{ +public: + + IceBoxDescriptorI(const string& serverVersion) : + _serverVersion(serverVersion) + { + } + +protected: + + virtual void ice_postUnmarshal() + { + iceVersion = _serverVersion; + } + +private: + + string _serverVersion; +}; + +class ObjectFactoryI : public Ice::ObjectFactory +{ +public: + + ObjectFactoryI(const string& serverVersion) : + _serverVersion(serverVersion) + { + } + + virtual ObjectPtr create(const string& type) + { + if(type == "::IceGrid::ServerDescriptor") + { + return new ServerDescriptorI(_serverVersion); + } + else if(type == "::IceGrid::IceBoxDescriptor") + { + return new IceBoxDescriptorI(_serverVersion); + } + return 0; + } + + virtual void destroy() + { + } + +private: + + string _serverVersion; +}; + +} + +namespace Ice +{ +template<> +struct StreamReader< ::IceGrid::ReplicaGroupDescriptor, Ice::InputStream> +{ + static void read(Ice::InputStream* __is, ::IceGrid::ReplicaGroupDescriptor& v) + { + __is->read(v.id); + __is->read(v.loadBalancing); + __is->read(v.proxyOptions); + __is->read(v.objects); + __is->read(v.description); + if(!skipFilter) + { + __is->read(v.filter); + } + } +}; +} + +class Client : public Application +{ +public: + + void usage(); + virtual int run(int, char*[]); +}; + +#ifdef _WIN32 + +int +wmain(int argc, wchar_t* argv[]) + +#else + +int +main(int argc, char* argv[]) + +#endif +{ + Client app; + return app.main(argc, argv); +} + +void +Client::usage() +{ + cerr << "Usage: " << appName() << " <options>\n"; + cerr << + "Options:\n" + "-h, --help Show this message.\n" + "-v, --version Display version.\n" + "--import FILE Import database from FILE.\n" + "--export FILE Export database to FILE.\n" + "--dbhome DIR The database directory.\n" + "--server-version VER Ice version for IceGrid servers (import only).\n" + "-d, --debug Print debug messages." + ; +} + +int +Client::run(int argc, char* argv[]) +{ + IceUtilInternal::Options opts; + opts.addOpt("h", "help"); + opts.addOpt("v", "version"); + opts.addOpt("d", "debug"); + opts.addOpt("", "import", IceUtilInternal::Options::NeedArg); + opts.addOpt("", "export", IceUtilInternal::Options::NeedArg); + opts.addOpt("", "dbhome", IceUtilInternal::Options::NeedArg); + opts.addOpt("", "server-version", IceUtilInternal::Options::NeedArg); + + vector<string> args; + try + { + args = opts.parse(argc, const_cast<const char**>(argv)); + } + catch(const IceUtilInternal::BadOptException& e) + { + cerr << e.reason << endl; + usage(); + return EXIT_FAILURE; + } + if(!args.empty()) + { + cerr << argv[0] << ": too many arguments" << endl; + usage(); + return EXIT_FAILURE; + } + + if(opts.isSet("help")) + { + usage(); + return EXIT_SUCCESS; + } + + if(opts.isSet("version")) + { + cout << ICE_STRING_VERSION << endl; + return EXIT_SUCCESS; + } + + if((!opts.isSet("import") && !opts.isSet("export")) || (opts.isSet("import") && opts.isSet("export"))) + { + cerr << "Either --import or --export must be set" << endl; + usage(); + return EXIT_FAILURE; + } + + if(!opts.isSet("dbhome")) + { + cerr << "Database home must be specified" << endl; + usage(); + return EXIT_FAILURE; + } + + bool debug = opts.isSet("debug"); + bool import = opts.isSet("import"); + string dbFile = opts.optArg(import ? "import" : "export"); + string dbPath = opts.optArg("dbhome"); + string serverVersion = opts.optArg("server-version"); + + try + { + IceGrid::AllData data; + + IceDB::IceContext dbContext; + dbContext.communicator = communicator(); + dbContext.encoding = { 1, 1 }; + + if(import) + { + cout << "Importing database to directory `" << dbPath << "' from file `" << dbFile << "'" << endl; + + if(!IceUtilInternal::directoryExists(dbPath)) + { + cerr << "Output directory does not exist: " << dbPath << endl; + return EXIT_FAILURE; + } + + StringSeq files = IcePatch2Internal::readDirectory(dbPath); + if(!files.empty()) + { + cerr << "Output directory is not empty: " << dbPath << endl; + return EXIT_FAILURE; + } + + ifstream fs(dbFile, ios::binary); + if(fs.fail()) + { + cerr << "Could not open input file: " << strerror(errno) << endl; + return EXIT_FAILURE; + } + fs.unsetf(ios::skipws); + + fs.seekg(0, ios::end); + streampos fileSize = fs.tellg(); + fs.seekg(0, ios::beg); + + vector<Ice::Byte> buf; + buf.reserve(static_cast<size_t>(fileSize)); + buf.insert(buf.begin(), istream_iterator<Ice::Byte>(fs), istream_iterator<Ice::Byte>()); + + fs.close(); + + if(!serverVersion.empty()) + { + ObjectFactoryPtr factory = new ObjectFactoryI(serverVersion); + communicator()->addObjectFactory(factory, "::IceGrid::ServerDescriptor"); + communicator()->addObjectFactory(factory, "::IceGrid::IceBoxDescriptor"); + } + + Ice::InputStreamPtr stream = Ice::wrapInputStream(communicator(), buf, dbContext.encoding); + + string type; + int version; + + stream->read(type); + if(type != "IceGrid") + { + cerr << "Incorrect input file type: " << type << endl; + return EXIT_FAILURE; + } + stream->read(version); + if(version / 100 == 305) + { + if(debug) + { + cout << "Reading Ice 3.5.x data" << endl; + } + skipFilter = true; + } + stream->read(data); + + { + IceDB::Env env(dbPath, 5); + IceDB::ReadWriteTxn txn(env); + + if(debug) + { + cout << "Writing Applications Map:" << endl; + } + + IceDB::Dbi<string, ApplicationInfo, IceDB::IceContext, Ice::OutputStreamPtr> + apps(txn, "applications", dbContext, MDB_CREATE); + + for(ApplicationInfoSeq::const_iterator p = data.applications.begin(); p != data.applications.end(); ++p) + { + if(debug) + { + cout << " NAME = " << p->descriptor.name << endl; + } + apps.put(txn, p->descriptor.name, *p); + } + + if(debug) + { + cout << "Writing Adapters Map:" << endl; + } + + IceDB::Dbi<string, AdapterInfo, IceDB::IceContext, Ice::OutputStreamPtr> + adpts(txn, "adapters", dbContext, MDB_CREATE); + + for(AdapterInfoSeq::const_iterator p = data.adapters.begin(); p != data.adapters.end(); ++p) + { + if(debug) + { + cout << " NAME = " << p->id << endl; + } + adpts.put(txn, p->id, *p); + } + + if(debug) + { + cout << "Writing Objects Map:" << endl; + } + + IceDB::Dbi<Identity, ObjectInfo, IceDB::IceContext, Ice::OutputStreamPtr> + objs(txn, "objects", dbContext, MDB_CREATE); + + for(ObjectInfoSeq::const_iterator p = data.objects.begin(); p != data.objects.end(); ++p) + { + if(debug) + { + cout << " NAME = " << communicator()->identityToString(p->proxy->ice_getIdentity()) << endl; + } + objs.put(txn, p->proxy->ice_getIdentity(), *p); + } + + if(debug) + { + cout << "Writing Internal Objects Map:" << endl; + } + + IceDB::Dbi<Identity, ObjectInfo, IceDB::IceContext, Ice::OutputStreamPtr> + internalObjs(txn, "internal-objects", dbContext, MDB_CREATE); + + for(ObjectInfoSeq::const_iterator p = data.internalObjects.begin(); p != data.internalObjects.end(); ++p) + { + if(debug) + { + cout << " NAME = " << communicator()->identityToString(p->proxy->ice_getIdentity()) << endl; + } + internalObjs.put(txn, p->proxy->ice_getIdentity(), *p); + } + + if(debug) + { + cout << "Writing Serials Map:" << endl; + } + + IceDB::Dbi<string, Long, IceDB::IceContext, Ice::OutputStreamPtr> + srls(txn, "serials", dbContext, MDB_CREATE); + + for(StringLongDict::const_iterator p = data.serials.begin(); p != data.serials.end(); ++p) + { + if(debug) + { + cout << " NAME = " << p->first << endl; + } + srls.put(txn, p->first, p->second); + } + + txn.commit(); + env.close(); + } + } + else + { + cout << "Exporting database from directory `" << dbPath << "' to file `" << dbFile << "'" << endl; + + { + IceDB::Env env(dbPath, 5); + IceDB::ReadOnlyTxn txn(env); + + if(debug) + { + cout << "Reading Application Map:" << endl; + } + + IceDB::Dbi<string, IceGrid::ApplicationInfo, IceDB::IceContext, Ice::OutputStreamPtr> + applications(txn, "applications", dbContext, 0); + + string name; + ApplicationInfo application; + IceDB::ReadOnlyCursor<string, IceGrid::ApplicationInfo, IceDB::IceContext, Ice::OutputStreamPtr> + appCursor(applications, txn); + while(appCursor.get(name, application, MDB_NEXT)) + { + if(debug) + { + cout << " APPLICATION = " << name << endl; + } + data.applications.push_back(application); + } + appCursor.close(); + + if(debug) + { + cout << "Reading Adapter Map:" << endl; + } + + IceDB::Dbi<string, IceGrid::AdapterInfo, IceDB::IceContext, Ice::OutputStreamPtr> + adapters(txn, "adapters", dbContext, 0); + + AdapterInfo adapter; + IceDB::ReadOnlyCursor<string, IceGrid::AdapterInfo, IceDB::IceContext, Ice::OutputStreamPtr> + adapterCursor(adapters, txn); + while(adapterCursor.get(name, adapter, MDB_NEXT)) + { + if(debug) + { + cout << " ADAPTER = " << name << endl; + } + data.adapters.push_back(adapter); + } + adapterCursor.close(); + + if(debug) + { + cout << "Reading Object Map:" << endl; + } + + IceDB::Dbi<Identity, IceGrid::ObjectInfo, IceDB::IceContext, Ice::OutputStreamPtr> + objects(txn, "objects", dbContext, 0); + + Identity id; + ObjectInfo object; + IceDB::ReadOnlyCursor<Identity, IceGrid::ObjectInfo, IceDB::IceContext, Ice::OutputStreamPtr> + objCursor(objects, txn); + while(objCursor.get(id, object, MDB_NEXT)) + { + if(debug) + { + cout << " IDENTITY = " << communicator()->identityToString(id) << endl; + } + data.objects.push_back(object); + } + objCursor.close(); + + if(debug) + { + cout << "Reading Internal Object Map:" << endl; + } + + IceDB::Dbi<Identity, IceGrid::ObjectInfo, IceDB::IceContext, Ice::OutputStreamPtr> + internalObjects(txn, "internal-objects", dbContext, 0); + + IceDB::ReadOnlyCursor<Identity, IceGrid::ObjectInfo, IceDB::IceContext, Ice::OutputStreamPtr> + iobjCursor(internalObjects, txn); + while(iobjCursor.get(id, object, MDB_NEXT)) + { + if(debug) + { + cout << " IDENTITY = " << communicator()->identityToString(id) << endl; + } + data.internalObjects.push_back(object); + } + iobjCursor.close(); + + if(debug) + { + cout << "Reading Serials Map:" << endl; + } + + IceDB::Dbi<string, Long, IceDB::IceContext, Ice::OutputStreamPtr> + serials(txn, "serials", dbContext, 0); + + Long serial; + IceDB::ReadOnlyCursor<string, Long, IceDB::IceContext, Ice::OutputStreamPtr> + serialCursor(serials, txn); + while(serialCursor.get(name, serial, MDB_NEXT)) + { + if(debug) + { + cout << " NAME = " << name << endl; + } + data.serials.insert(std::make_pair(name, serial)); + } + serialCursor.close(); + + txn.abort(); + env.close(); + } + + Ice::OutputStreamPtr stream = Ice::createOutputStream(communicator(), dbContext.encoding); + stream->write("IceGrid"); + stream->write(ICE_INT_VERSION); + stream->write(data); + pair<const Ice::Byte*, const Ice::Byte*> buf = stream->finished(); + + ofstream fs(dbFile, ios::binary); + if(fs.fail()) + { + cerr << "Could not open output file: " << strerror(errno) << endl; + return EXIT_FAILURE; + } + fs.write(reinterpret_cast<const char*>(buf.first), buf.second - buf.first); + fs.close(); + } + } + catch(const IceUtil::Exception& ex) + { + cerr << (import ? "Import" : "Export") << " failed:\n" << ex << endl; + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} diff --git a/cpp/src/IceStorm/IceStormMigrate.rc b/cpp/src/IceGrid/IceGridDB.rc index e8ba76a7fe2..f54626a4632 100644 --- a/cpp/src/IceStorm/IceStormMigrate.rc +++ b/cpp/src/IceGrid/IceGridDB.rc @@ -18,11 +18,11 @@ BEGIN BLOCK "040904e4" BEGIN VALUE "CompanyName", "ZeroC, Inc.\0" - VALUE "FileDescription", "Migration Utility for IceStorm Database\0" + VALUE "FileDescription", "IceGridDB\0" VALUE "FileVersion", "3.6.1\0" - VALUE "InternalName", "icestormmigrate\0" + VALUE "InternalName", "icegriddb\0" VALUE "LegalCopyright", "\251 2003-2015 ZeroC, Inc.\0" - VALUE "OriginalFilename", "icestormmigrate.exe\0" + VALUE "OriginalFilename", "icegriddb.exe\0" VALUE "ProductName", "Ice\0" VALUE "ProductVersion", "3.6.1\0" END diff --git a/cpp/src/IceGrid/IceGridNode.cpp b/cpp/src/IceGrid/IceGridNode.cpp index 1fd8142a089..4461b49745c 100644 --- a/cpp/src/IceGrid/IceGridNode.cpp +++ b/cpp/src/IceGrid/IceGridNode.cpp @@ -41,14 +41,14 @@ namespace class ProcessI : public Process { public: - + ProcessI(const ActivatorPtr&, const ProcessPtr&); virtual void shutdown(const Current&); virtual void writeMessage(const std::string&, Int, const Current&); - + private: - + ActivatorPtr _activator; ProcessPtr _origProcess; }; @@ -119,11 +119,11 @@ setNoIndexingAttribute(const string& pa) } #endif -} +} -CollocatedRegistry::CollocatedRegistry(const CommunicatorPtr& com, - const ActivatorPtr& activator, +CollocatedRegistry::CollocatedRegistry(const CommunicatorPtr& com, + const ActivatorPtr& activator, bool nowarn, bool readonly, const string& initFromReplica, @@ -139,7 +139,7 @@ CollocatedRegistry::shutdown() _activator->shutdown(); } -ProcessI::ProcessI(const ActivatorPtr& activator, const ProcessPtr& origProcess) : +ProcessI::ProcessI(const ActivatorPtr& activator, const ProcessPtr& origProcess) : _activator(activator), _origProcess(origProcess) { @@ -239,7 +239,7 @@ NodeService::startImpl(int argc, char* argv[], int& status) } initFromReplica = argv[++i]; - } + } else if(strcmp(argv[i], "--deploy") == 0) { if(i + 1 >= argc) @@ -293,7 +293,7 @@ NodeService::startImpl(int argc, char* argv[], int& status) out << "setting `Ice.ThreadPool.Server.Size' is not useful, "; out << "you should set individual adapter thread pools instead."; } - + setupThreadPool(properties, "IceGrid.Node.ThreadPool", 1, 100); // @@ -314,7 +314,7 @@ NodeService::startImpl(int argc, char* argv[], int& status) } communicator()->setDefaultLocator(_registry->getLocator()); - + // // Set the default locator property to point to the collocated // locator (this property is passed by the activator to each @@ -336,7 +336,6 @@ NodeService::startImpl(int argc, char* argv[], int& status) // Initialize the database environment (first setup the directory structure if needed). // string dataPath = properties->getProperty("IceGrid.Node.Data"); - string dbPath; if(dataPath.empty()) { error("property `IceGrid.Node.Data' is not set"); @@ -349,7 +348,7 @@ NodeService::startImpl(int argc, char* argv[], int& status) FileException ex(__FILE__, __LINE__); ex.path = dataPath; ex.error = IceInternal::getSystemErrno(); - + ServiceError err(this); err << "property `IceGrid.Node.Data' is set to an invalid path:\n" << ex; return false; @@ -360,7 +359,7 @@ NodeService::startImpl(int argc, char* argv[], int& status) // if(dataPath[dataPath.length() - 1] != '/') { - dataPath += "/"; + dataPath += "/"; } IcePatch2Internal::createDirectory(dataPath + "servers"); @@ -401,12 +400,6 @@ NodeService::startImpl(int argc, char* argv[], int& status) } // - // Setup the Freeze database environment home directory. The name of the database - // environment for the IceGrid node is the name of the node. - // - properties->setProperty("Freeze.DbEnv." + name + ".DbHome", dbPath); - - // // Create the node object adapter. // _adapter = communicator()->createObjectAdapter("IceGrid.Node"); @@ -483,7 +476,7 @@ NodeService::startImpl(int argc, char* argv[], int& status) _adapter->add(_node, nodeProxy->ice_getIdentity()); _adapter->addDefaultServant(new NodeServerAdminRouter(_node), _node->getServerAdminCategory()); - + // // Start the platform info thread if needed. // @@ -491,7 +484,7 @@ NodeService::startImpl(int argc, char* argv[], int& status) // // Ensures that the locator is reachable. - // + // if(!nowarn) { try @@ -520,7 +513,7 @@ NodeService::startImpl(int argc, char* argv[], int& status) // Replace Admin facet ProcessPtr origProcess = ProcessPtr::dynamicCast(communicator()->removeAdminFacet("Process")); communicator()->addAdminFacet(new ProcessI(_activator, origProcess), "Process"); - + Identity adminId; adminId.name = "NodeAdmin-" + name; adminId.category = instanceName; @@ -568,15 +561,15 @@ NodeService::startImpl(int argc, char* argv[], int& status) Ice::Identity regId; regId.category = instanceName; regId.name = "Registry"; - + RegistryPrx registry = RegistryPrx::checkedCast(communicator()->getDefaultLocator()->findObjectById(regId)); if(!registry) { throw "invalid registry"; } - + registry = registry->ice_preferSecure(true); // Use SSL if available. - + IceGrid::AdminSessionPrx session; if(communicator()->getProperties()->getPropertyAsInt("IceGridAdmin.AuthenticateUsingSSL")) { @@ -592,14 +585,14 @@ NodeService::startImpl(int argc, char* argv[], int& status) getline(cin, id); id = IceUtilInternal::trim(id); } - + if(password.empty()) { cout << "password: " << flush; getline(cin, password); password = IceUtilInternal::trim(password); } - + session = registry->createAdminSession(id, password); } assert(session); @@ -625,7 +618,7 @@ NodeService::startImpl(int argc, char* argv[], int& status) catch(const AccessDeniedException& ex) { ServiceWarning warn(this); - warn << "failed to deploy application `" << desc << "':\n" + warn << "failed to deploy application `" << desc << "':\n" << "registry database is locked by `" << ex.lockUserId << "'"; } catch(const std::exception& ex) @@ -763,7 +756,7 @@ NodeService::stop() } CommunicatorPtr -NodeService::initializeCommunicator(int& argc, char* argv[], +NodeService::initializeCommunicator(int& argc, char* argv[], const InitializationData& initializationData) { InitializationData initData = initializationData; diff --git a/cpp/src/IceGrid/Makefile b/cpp/src/IceGrid/Makefile index ed6f7fcaa01..0e78b8497ff 100644 --- a/cpp/src/IceGrid/Makefile +++ b/cpp/src/IceGrid/Makefile @@ -10,12 +10,13 @@ top_srcdir = ../.. ADMIN = $(bindir)/icegridadmin +DB = $(bindir)/icegriddb NODE_SERVER = $(bindir)/icegridnode REGISTRY_SERVER = $(bindir)/icegridregistry -TARGETS = $(NODE_SERVER) $(REGISTRY_SERVER) $(ADMIN) +TARGETS = $(NODE_SERVER) $(REGISTRY_SERVER) $(ADMIN) $(DB) -SLICE_OBJS = Internal.o \ +CSLICE_OBJS = Internal.o \ IceLocatorDiscovery.o ADMIN_OBJS = Client.o \ @@ -27,7 +28,7 @@ ADMIN_OBJS = Client.o \ Parser.o \ Scanner.o \ Util.o \ - $(SLICE_OBJS) + $(CSLICE_OBJS) COMMON_OBJS = AdminRouter.o \ DescriptorBuilder.o \ @@ -36,7 +37,7 @@ COMMON_OBJS = AdminRouter.o \ PlatformInfo.o \ SessionManager.o \ TraceLevels.o \ - $(SLICE_OBJS) + $(CSLICE_OBJS) NODE_OBJS = Activator.o \ NodeAdminRouter.o \ @@ -54,7 +55,6 @@ REGISTRY_OBJS = AdminCallbackRouter.o \ Database.o \ DescriptorHelper.o \ FileUserAccountMapperI.o \ - IdentityObjectInfoDict.o \ InternalRegistryI.o \ LocatorI.o \ LocatorRegistryI.o \ @@ -69,12 +69,9 @@ REGISTRY_OBJS = AdminCallbackRouter.o \ ReplicaCache.o \ ReplicaSessionI.o \ ReplicaSessionManager.o \ - SerialsDict.o \ ServerCache.o \ SessionI.o \ SessionServantManager.o \ - StringAdapterInfoDict.o \ - StringApplicationInfoDict.o \ Topics.o \ Util.o \ WellKnownObjectsManager.o @@ -89,11 +86,20 @@ REGISTRY_SVR_OBJS = \ $(REGISTRY_OBJS) \ IceGridRegistry.o +DSLICE_OBJS = DBTypes.o + +DB_OBJS = IceGridDB.o \ + $(DSLICE_OBJS) + OBJS = $(ADMIN_OBJS) \ $(COMMON_OBJS) \ $(NODE_OBJS) \ $(NODE_SVR_OBJS) \ - $(REGISTRY_SVR_OBJS) + $(REGISTRY_SVR_OBJS) \ + $(DB_OBJS) + +SLICE_OBJS = $(CSLICE_OBJS) \ + $(DSLICE_OBJS) SDIR = $(slicedir)/IceGrid @@ -111,15 +117,19 @@ $(ADMIN): $(ADMIN_OBJS) $(LIBTARGETS) $(CXX) $(LDFLAGS) $(LDEXEFLAGS) -o $@ $(ADMIN_OBJS) -lGlacier2 $(EXPAT_RPATH_LINK) -lIceXML -lIceGrid -lIcePatch2 -lIceBox \ $(LIBS) $(READLINE_LIBS) $(OPENSSL_RPATH_LINK) +$(DB): $(DB_OBJS) $(LIBTARGETS) + rm -f $@ + $(CXX) $(LDFLAGS) $(LDEXEFLAGS) -o $@ $(DB_OBJS) -lIceGrid -lGlacier2 -lIcePatch2 -lIceDB $(LIBS) + $(REGISTRY_SERVER): $(REGISTRY_SVR_OBJS) $(LIBTARGETS) rm -f $@ $(CXX) $(LDFLAGS) $(LDEXEFLAGS) -o $@ $(REGISTRY_SVR_OBJS) -lIceGrid -lIceStorm -lIceStormService -lGlacier2 -lIcePatch2 \ - $(RPATH_LINK) -lFreeze -lIceBox $(EXPAT_RPATH_LINK) -lIceXML -lIceSSL $(OPENSSL_RPATH_LINK) $(LIBS) + $(RPATH_LINK) -lIceDB -lIceBox $(EXPAT_RPATH_LINK) -lIceXML -lIceSSL $(OPENSSL_RPATH_LINK) $(LIBS) $(NODE_SERVER): $(NODE_SVR_OBJS) $(LIBTARGETS) rm -f $@ $(CXX) $(LDFLAGS) $(LDEXEFLAGS) -o $@ $(NODE_SVR_OBJS) -lIceGrid -lIceStorm -lIceStormService -lIceBox -lGlacier2 \ - $(DB_RPATH_LINK) -lFreeze -lIcePatch2 $(EXPAT_RPATH_LINK) -lIceXML -lIceSSL $(OPENSSL_RPATH_LINK) $(LIBS) + -lIceDB -lIcePatch2 $(EXPAT_RPATH_LINK) -lIceXML -lIceSSL $(OPENSSL_RPATH_LINK) $(LIBS) ../IceLocatorDiscovery/%.h %.cpp: $(slicedir)/IceLocatorDiscovery/%.ice $(SLICE2CPP) $(SLICEPARSERLIB) rm -f $(*F).h $(*F).cpp @@ -128,40 +138,9 @@ $(NODE_SERVER): $(NODE_SVR_OBJS) $(LIBTARGETS) @mkdir -p .depend @$(SLICE2CPP) $(SLICE2CPPFLAGS) --depend $(slicedir)/IceLocatorDiscovery/$(*F).ice > .depend/$(*F).ice.d -# The slice2freeze rules are structured like this to avoid issues with -# parallel make. -../IceGrid/StringApplicationInfoDict.h: StringApplicationInfoDict.cpp -StringApplicationInfoDict.cpp: $(SDIR)/Admin.ice $(SLICE2FREEZE) $(SLICEPARSERLIB) - rm -f StringApplicationInfoDict.h StringApplicationInfoDict.cpp - $(SLICE2FREEZECMD) --dict IceGrid::StringApplicationInfoDict,string,IceGrid::ApplicationInfo \ - StringApplicationInfoDict $(SDIR)/Admin.ice - -../IceGrid/IdentityObjectInfoDict.h: IdentityObjectInfoDict.cpp -IdentityObjectInfoDict.cpp: $(slicedir)/Ice/Identity.ice $(SDIR)/Admin.ice $(SLICE2FREEZE) $(SLICEPARSERLIB) - rm -f IdentityObjectInfoDict.h IdentityObjectInfoDict.cpp - $(SLICE2FREEZECMD) --dict IceGrid::IdentityObjectInfoDict,Ice::Identity,IceGrid::ObjectInfo \ - --dict-index IceGrid::IdentityObjectInfoDict,type \ - IdentityObjectInfoDict $(slicedir)/Ice/Identity.ice $(SDIR)/Admin.ice - -../IceGrid/StringAdapterInfoDict.h: StringAdapterInfoDict.cpp -StringAdapterInfoDict.cpp: $(SDIR)/Admin.ice $(SLICE2FREEZE) $(SLICEPARSERLIB) - rm -f StringAdapterInfoDict.h StringAdapterInfoDict.cpp - $(SLICE2FREEZECMD) --dict IceGrid::StringAdapterInfoDict,string,IceGrid::AdapterInfo \ - --dict-index IceGrid::StringAdapterInfoDict,replicaGroupId StringAdapterInfoDict $(SDIR)/Admin.ice - -../IceGrid/SerialsDict.h: SerialsDict.cpp -SerialsDict.cpp: $(SLICE2FREEZE) $(SLICEPARSERLIB) - rm -f SerialsDict.h SerialsDict.cpp - $(SLICE2FREEZECMD) --dict IceGrid::SerialsDict,string,long SerialsDict - -clean:: - -rm -f StringApplicationInfoDict.h StringApplicationInfoDict.cpp - -rm -f IdentityObjectInfoDict.h IdentityObjectInfoDict.cpp - -rm -f StringAdapterInfoDict.h StringAdapterInfoDict.cpp - -rm -f SerialsDict.h SerialsDict.cpp - install:: all $(call installprogram,$(ADMIN),$(DESTDIR)$(install_bindir)) + $(call installprogram,$(DB),$(DESTDIR)$(install_bindir)) $(call installdata,$(top_srcdir)/../man/man1/icegridadmin.1,$(DESTDIR)$(install_mandir)) $(call installprogram,$(NODE_SERVER),$(DESTDIR)$(install_bindir)) $(call installdata,$(top_srcdir)/../man/man1/icegridnode.1,$(DESTDIR)$(install_mandir)) diff --git a/cpp/src/IceGrid/Makefile.mak b/cpp/src/IceGrid/Makefile.mak index 980fb219e4c..00382abfc34 100644 --- a/cpp/src/IceGrid/Makefile.mak +++ b/cpp/src/IceGrid/Makefile.mak @@ -10,28 +10,23 @@ top_srcdir = ..\.. ADMIN = $(top_srcdir)\bin\icegridadmin.exe +DB = $(top_srcdir)\bin\icegriddb.exe NODE_SERVER_D = $(top_srcdir)\bin\icegridnoded.exe NODE_SERVER_R = $(top_srcdir)\bin\icegridnode.exe NODE_SERVER = $(top_srcdir)\bin\icegridnode$(LIBSUFFIX).exe - REGISTRY_SERVER_D = $(top_srcdir)\bin\icegridregistryd.exe REGISTRY_SERVER_R = $(top_srcdir)\bin\icegridregistry.exe REGISTRY_SERVER = $(top_srcdir)\bin\icegridregistry$(LIBSUFFIX).exe -TARGETS = $(ADMIN) $(NODE_SERVER) $(REGISTRY_SERVER) +TARGETS = $(ADMIN) $(NODE_SERVER) $(REGISTRY_SERVER) $(DB) -SLICE_OBJS = .\Internal.obj \ +CSLICE_OBJS = .\Internal.obj \ .\IceLocatorDiscovery.obj -all:: StringApplicationInfoDict.h StringApplicationInfoDict.cpp \ - IdentityObjectInfoDict.h IdentityObjectInfoDict.cpp \ - StringAdapterInfoDict.h StringAdapterInfoDict.cpp \ - SerialsDict.h SerialsDict.cpp - BISON_FLEX_OBJS = .\Grammar.obj \ .\Scanner.obj @@ -42,7 +37,7 @@ ADMIN_OBJS = .\Client.obj \ .\FileParserI.obj \ .\Parser.obj \ .\Util.obj \ - $(SLICE_OBJS) \ + $(CSLICE_OBJS) \ $(BISON_FLEX_OBJS) COMMON_OBJS = .\AdminRouter.obj \ @@ -52,7 +47,7 @@ COMMON_OBJS = .\AdminRouter.obj \ .\PlatformInfo.obj \ .\SessionManager.obj \ .\TraceLevels.obj \ - $(SLICE_OBJS) + $(CSLICE_OBJS) NODE_OBJS = .\Activator.obj \ .\NodeAdminRouter.obj \ @@ -70,7 +65,6 @@ REGISTRY_OBJS = .\AdapterCache.obj \ .\Database.obj \ .\DescriptorHelper.obj \ .\FileUserAccountMapperI.obj \ - .\IdentityObjectInfoDict.obj \ .\InternalRegistryI.obj \ .\LocatorI.obj \ .\LocatorRegistryI.obj \ @@ -85,12 +79,9 @@ REGISTRY_OBJS = .\AdapterCache.obj \ .\ReplicaCache.obj \ .\ReplicaSessionI.obj \ .\ReplicaSessionManager.obj \ - .\SerialsDict.obj \ .\ServerCache.obj \ .\SessionI.obj \ .\SessionServantManager.obj \ - .\StringAdapterInfoDict.obj \ - .\StringApplicationInfoDict.obj \ .\Topics.obj \ .\Util.obj \ .\WellKnownObjectsManager.obj @@ -105,31 +96,41 @@ REGISTRY_SVR_OBJS = \ $(REGISTRY_OBJS) \ .\IceGridRegistry.obj +DSLICE_OBJS = .\DBTypes.obj + +DB_OBJS = .\IceGridDB.obj \ + $(DSLICE_OBJS) + OBJS = $(ADMIN_OBJS) \ + $(DB_OBJS) \ $(NODE_SVR_OBJS) \ $(REGISTRY_SVR_OBJS) +SLICE_OBJS = $(CSLICE_OBJS) \ + $(DSLICE_OBJS) + HDIR = $(headerdir)\IceGrid SDIR = $(slicedir)\IceGrid -SLICE2FREEZECMD = $(SLICE2FREEZE) -I.. --ice --include-dir IceGrid $(ICECPPFLAGS) - !include $(top_srcdir)\config\Make.rules.mak LINKWITH = $(LIBS) ALINKWITH = $(LIBS) +DLINKWITH = $(LIBS) NLINKWITH = $(LIBS) advapi32.lib pdh.lib ws2_32.lib SLICE2CPPFLAGS = --checksum --ice --include-dir IceGrid $(SLICE2CPPFLAGS) -CPPFLAGS = -I. -I.. $(CPPFLAGS) -DWIN32_LEAN_AND_MEAN -Zm200 +CPPFLAGS = -I. -I.. -I$(LMDB_HOME)\include $(CPPFLAGS) -DWIN32_LEAN_AND_MEAN -Zm200 !if "$(GENERATE_PDB)" == "yes" APDBFLAGS = /pdb:$(ADMIN:.exe=.pdb) +DPDBFLAGS = /pdb:$(DB:.exe=.pdb) RPDBFLAGS = /pdb:$(REGISTRY_SERVER:.exe=.pdb) NPDBFLAGS = /pdb:$(NODE_SERVER:.exe=.pdb) !endif ARES_FILE = IceGridAdmin.res +DRES_FILE = IceGridDB.res RRES_FILE = IceGridRegistry.res NRES_FILE = IceGridNode.res @@ -140,6 +141,13 @@ $(ADMIN): $(ADMIN_OBJS) IceGridAdmin.res @if defined SIGN_CERTIFICATE echo ^ ^ ^ Signing $@ && \ signtool sign /f "$(SIGN_CERTIFICATE)" /p $(SIGN_PASSWORD) /t $(SIGN_TIMESTAMPSERVER) $@ +$(DB): $(DB_OBJS) IceGridDB.res + $(LINK) $(LD_EXEFLAGS) $(DPDBFLAGS) $(DB_OBJS) $(SETARGV) $(PREOUT)$@ $(PRELIBS)$(DLINKWITH) $(DRES_FILE) + @if exist $@.manifest echo ^ ^ ^ Embedding manifest using $(MT) &&\ + $(MT) -nologo -manifest $@.manifest -outputresource:$@;#1 && del /q $@.manifest + @if defined SIGN_CERTIFICATE echo ^ ^ ^ Signing $@ && \ + signtool sign /f "$(SIGN_CERTIFICATE)" /p $(SIGN_PASSWORD) /t $(SIGN_TIMESTAMPSERVER) $@ + $(REGISTRY_SERVER): $(REGISTRY_SVR_OBJS) IceGridRegistry.res $(LINK) $(LD_EXEFLAGS) $(RPDBFLAGS) $(REGISTRY_SVR_OBJS) $(SETARGV) $(PREOUT)$@ \ $(PRELIBS)$(NLINKWITH) $(RRES_FILE) @@ -163,40 +171,17 @@ IceLocatorDiscovery.h IceLocatorDiscovery.cpp: $(slicedir)\IceLocatorDiscovery\I @echo Generating dependencies for $< @"$(SLICE2CPP)" $(SLICE2CPPFLAGS) --depend $< | cscript /NoLogo $(top_srcdir)\..\config\makedepend-slice.vbs $(*F).ice - -StringApplicationInfoDict.h StringApplicationInfoDict.cpp: $(SDIR)\Admin.ice $(SLICE2FREEZE) $(SLICEPARSERLIB) - del /q StringApplicationInfoDict.h StringApplicationInfoDict.cpp - $(SLICE2FREEZECMD) --dict IceGrid::StringApplicationInfoDict,string,IceGrid::ApplicationInfo \ - StringApplicationInfoDict $(SDIR)\Admin.ice - -IdentityObjectInfoDict.h IdentityObjectInfoDict.cpp: $(slicedir)\Ice\Identity.ice $(SDIR)\Admin.ice $(SLICE2FREEZE) $(SLICEPARSERLIB) - del /q IdentityObjectInfoDict.h IdentityObjectInfoDict.cpp - $(SLICE2FREEZECMD) --dict IceGrid::IdentityObjectInfoDict,Ice::Identity,IceGrid::ObjectInfo \ - --dict-index IceGrid::IdentityObjectInfoDict,type \ - IdentityObjectInfoDict $(slicedir)\Ice\Identity.ice $(SDIR)\Admin.ice - -StringAdapterInfoDict.h StringAdapterInfoDict.cpp: $(SDIR)\Admin.ice $(SLICE2FREEZE) $(SLICEPARSERLIB) - del /q StringAdapterInfoDict.h StringAdapterInfoDict.cpp - $(SLICE2FREEZECMD) --dict IceGrid::StringAdapterInfoDict,string,IceGrid::AdapterInfo \ - --dict-index IceGrid::StringAdapterInfoDict,replicaGroupId StringAdapterInfoDict $(SDIR)\Admin.ice - -SerialsDict.h SerialsDict.cpp: $(SLICE2FREEZE) $(SLICEPARSERLIB) - del /q SerialsDict.h SerialsDict.cpp - $(SLICE2FREEZECMD) --dict IceGrid::SerialsDict,string,long SerialsDict - clean:: -del /q Internal.cpp Internal.h - -del /q StringApplicationInfoDict.h StringApplicationInfoDict.cpp - -del /q StringAdapterInfoDict.h StringAdapterInfoDict.cpp - -del /q IdentityObjectInfoDict.h IdentityObjectInfoDict.cpp - -del /q SerialsDict.h SerialsDict.cpp -del /q $(ADMIN:.exe=.*) + -del /q $(DB:.exe=.*) -del /q $(NODE_SERVER_D:.exe=.*) $(NODE_SERVER_R:.exe=.*) -del /q $(REGISTRY_SERVER_D:.exe=.*) $(REGISTRY_SERVER_R:.exe=.*) -del /q IceGridAdmin.res IceGridNode.res IceGridRegistry.res install:: all copy $(ADMIN) "$(install_bindir)" + copy $(DB) "$(install_bindir)" copy $(NODE_SERVER) "$(install_bindir)" copy $(REGISTRY_SERVER) "$(install_bindir)" @@ -205,6 +190,7 @@ install:: all install:: all copy $(ADMIN:.exe=.pdb) "$(install_bindir)" + copy $(DB:.exe=.pdb) "$(install_bindir)" copy $(NODE_SERVER:.exe=.pdb) "$(install_bindir)" copy $(REGISTRY_SERVER:.exe=.pdb) "$(install_bindir)" diff --git a/cpp/src/IceGrid/NodeCache.cpp b/cpp/src/IceGrid/NodeCache.cpp index e28468b36af..22f98a01a05 100644 --- a/cpp/src/IceGrid/NodeCache.cpp +++ b/cpp/src/IceGrid/NodeCache.cpp @@ -109,10 +109,12 @@ struct ToInternalServerDescriptor : std::unary_function<CommunicatorDescriptorPt if(p->dbHome.empty()) { _desc->dbEnvs.push_back(new InternalDbEnvDescriptor(p->name, p->properties)); + props.push_back(createProperty(p->name + ".LMDB.Path", dbsPath + p->name)); props.push_back(createProperty("Freeze.DbEnv." + p->name + ".DbHome", dbsPath + p->name)); } else { + props.push_back(createProperty(p->name + ".LMDB.Path", p->dbHome)); props.push_back(createProperty("Freeze.DbEnv." + p->name + ".DbHome", p->dbHome)); } } @@ -663,7 +665,7 @@ NodeEntry::destroyServer(const ServerEntryPtr& entry, const ServerInfo& info, in if(noRestart) { - node->begin_destroyServerWithoutRestart(info.descriptor->id, info.uuid, info.revision, + node->begin_destroyServerWithoutRestart(info.descriptor->id, info.uuid, info.revision, _cache.getReplicaName(), newCallback_Node_destroyServerWithoutRestart( new DestroyCB(_cache.getTraceLevels(), entry, _name), diff --git a/cpp/src/IceGrid/NodeI.cpp b/cpp/src/IceGrid/NodeI.cpp index 2f1281c9286..5f7c3296180 100644 --- a/cpp/src/IceGrid/NodeI.cpp +++ b/cpp/src/IceGrid/NodeI.cpp @@ -32,7 +32,7 @@ class LogPatcherFeedback : public IcePatch2::PatcherFeedback { public: - LogPatcherFeedback(const TraceLevelsPtr& traceLevels, const string& dest) : + LogPatcherFeedback(const TraceLevelsPtr& traceLevels, const string& dest) : _traceLevels(traceLevels), _startedPatch(false), _lastProgress(0), @@ -40,7 +40,7 @@ public: { } - void + void setPatchingPath(const string& path) { _path = path; @@ -149,12 +149,12 @@ public: { roundedSize = 1; } - out << _dest << ": downloading " << (_path.empty() ? string("") : (_path + " ")) << roundedSize + out << _dest << ": downloading " << (_path.empty() ? string("") : (_path + " ")) << roundedSize << "KB "; _startedPatch = true; } } - + return true; } @@ -166,7 +166,7 @@ public: virtual bool patchEnd() - { + { return true; } @@ -193,7 +193,7 @@ class NodeUp : public NodeI::Update { public: - NodeUp(const NodeIPtr& node, const NodeObserverPrx& observer, NodeDynamicInfo info) : + NodeUp(const NodeIPtr& node, const NodeObserverPrx& observer, NodeDynamicInfo info) : NodeI::Update(node, observer), _info(info) { } @@ -211,9 +211,9 @@ public: } return true; } - + private: - + NodeDynamicInfo _info; }; @@ -221,7 +221,7 @@ class UpdateServer : public NodeI::Update { public: - UpdateServer(const NodeIPtr& node, const NodeObserverPrx& observer, ServerDynamicInfo info) : + UpdateServer(const NodeIPtr& node, const NodeObserverPrx& observer, ServerDynamicInfo info) : NodeI::Update(node, observer), _info(info) { } @@ -231,7 +231,7 @@ public: { try { - _observer->begin_updateServer(_node->getName(), + _observer->begin_updateServer(_node->getName(), _info, newCallback(static_cast<NodeI::Update*>(this), &NodeI::Update::completed)); } @@ -241,9 +241,9 @@ public: } return true; } - + private: - + ServerDynamicInfo _info; }; @@ -251,7 +251,7 @@ class UpdateAdapter : public NodeI::Update { public: - UpdateAdapter(const NodeIPtr& node, const NodeObserverPrx& observer, AdapterDynamicInfo info) : + UpdateAdapter(const NodeIPtr& node, const NodeObserverPrx& observer, AdapterDynamicInfo info) : NodeI::Update(node, observer), _info(info) { } @@ -261,7 +261,7 @@ public: { try { - _observer->begin_updateAdapter(_node->getName(), + _observer->begin_updateAdapter(_node->getName(), _info, newCallback(static_cast<NodeI::Update*>(this), &NodeI::Update::completed)); } @@ -271,9 +271,9 @@ public: } return true; } - + private: - + AdapterDynamicInfo _info; }; @@ -295,7 +295,7 @@ NodeI::Update::finished(bool success) NodeI::NodeI(const Ice::ObjectAdapterPtr& adapter, NodeSessionManager& sessions, - const ActivatorPtr& activator, + const ActivatorPtr& activator, const IceUtil::TimerPtr& timer, const TraceLevelsPtr& traceLevels, const NodePrx& proxy, @@ -395,19 +395,19 @@ NodeI::loadServerWithoutRestart_async(const AMD_Node_loadServerWithoutRestartPtr { } - virtual void + virtual void ice_response(const ServerPrx& server, const AdapterPrxDict& adapters, Ice::Int actTimeout, Ice::Int deacTimeout) { _cb->ice_response(server, adapters, actTimeout, deacTimeout); }; - virtual void + virtual void ice_exception(const ::std::exception& ex) { _cb->ice_exception(ex); } - virtual void + virtual void ice_exception() { _cb->ice_exception(); @@ -448,19 +448,19 @@ NodeI::destroyServerWithoutRestart_async(const AMD_Node_destroyServerWithoutRest { } - virtual void + virtual void ice_response() { _cb->ice_response(); }; - virtual void + virtual void ice_exception(const ::std::exception& ex) { _cb->ice_exception(ex); } - virtual void + virtual void ice_exception() { _cb->ice_exception(); @@ -476,10 +476,10 @@ NodeI::destroyServerWithoutRestart_async(const AMD_Node_destroyServerWithoutRest void NodeI::patch_async(const AMD_Node_patchPtr& amdCB, const PatcherFeedbackPrx& feedback, - const string& application, + const string& application, const string& server, const InternalDistributionDescriptorPtr& appDistrib, - bool shutdown, + bool shutdown, const Ice::Current&) { amdCB->ice_response(); @@ -528,8 +528,8 @@ NodeI::patch_async(const AMD_Node_patchPtr& amdCB, else { // - // If the server to patch depends on the application, - // we need to shutdown all the application servers + // If the server to patch depends on the application, + // we need to shutdown all the application servers // that depend on the application. // servers = getApplicationServers(application); @@ -583,7 +583,7 @@ NodeI::patch_async(const AMD_Node_patchPtr& amdCB, servers.erase(s++); } } - + if(!running.empty()) { if(running.size() == 1) @@ -601,7 +601,7 @@ NodeI::patch_async(const AMD_Node_patchPtr& amdCB, (*s)->waitForPatch(); } - // + // // Patch the application. // FileServerPrx icepatch; @@ -664,7 +664,7 @@ NodeI::patch_async(const AMD_Node_patchPtr& amdCB, _patchInProgress.erase(application); notifyAll(); } - + try { if(failure.empty()) @@ -754,7 +754,7 @@ NodeI::shutdown() IceUtil::Mutex::Lock sync(_serversLock); for(map<string, set<ServerIPtr> >::const_iterator p = _serversByApplication.begin(); p != _serversByApplication.end(); ++p) - { + { for(set<ServerIPtr>::const_iterator q = p->second.begin(); q != p->second.end(); ++q) { (*q)->shutdown(); @@ -802,7 +802,7 @@ NodeI::getUserAccountMapper() const PlatformInfo& NodeI::getPlatformInfo() const { - return _platform; + return _platform; } FileCachePtr @@ -902,7 +902,7 @@ NodeI::checkConsistency(const NodeSessionPrx& session) } sort(servers.begin(), servers.end()); } - + for_each(commands.begin(), commands.end(), IceUtil::voidMemFun(&ServerCommand::execute)); } @@ -917,14 +917,14 @@ NodeI::addObserver(const NodeSessionPrx& session, const NodeObserverPrx& observe ServerDynamicInfoSeq serverInfos; AdapterDynamicInfoSeq adapterInfos; - for(map<string, ServerDynamicInfo>::const_iterator p = _serversDynamicInfo.begin(); + for(map<string, ServerDynamicInfo>::const_iterator p = _serversDynamicInfo.begin(); p != _serversDynamicInfo.end(); ++p) { assert(p->second.state != Destroyed && (p->second.state != Inactive || !p->second.enabled)); serverInfos.push_back(p->second); } - for(map<string, AdapterDynamicInfo>::const_iterator q = _adaptersDynamicInfo.begin(); + for(map<string, AdapterDynamicInfo>::const_iterator q = _adaptersDynamicInfo.begin(); q != _adaptersDynamicInfo.end(); ++q) { assert(q->second.proxy); @@ -1005,12 +1005,12 @@ NodeI::observerUpdateAdapter(const AdapterDynamicInfo& info) } } -void +void NodeI::queueUpdate(const NodeObserverPrx& proxy, const UpdatePtr& update) { //Lock sync(*this); Called within the synchronization map<NodeObserverPrx, deque<UpdatePtr> >::iterator p = _observerUpdates.find(proxy); - if(p == _observerUpdates.end()) + if(p == _observerUpdates.end()) { if(update->send()) { @@ -1023,7 +1023,7 @@ NodeI::queueUpdate(const NodeObserverPrx& proxy, const UpdatePtr& update) } } -void +void NodeI::dequeueUpdate(const NodeObserverPrx& proxy, const UpdatePtr& update, bool all) { IceUtil::Mutex::Lock sync(_observerMutex); @@ -1070,7 +1070,7 @@ NodeI::removeServer(const ServerIPtr& server, const std::string& application) if(p->second.empty()) { _serversByApplication.erase(p); - + string appDir = _dataDir + "/distrib/" + application; if(IceUtilInternal::directoryExists(appDir)) { @@ -1126,7 +1126,7 @@ NodeI::checkConsistencyNoSync(const Ice::StringSeq& servers) vector<string> remove; set_difference(contents.begin(), contents.end(), servers.begin(), servers.end(), back_inserter(remove)); - + // // Remove the extra servers if possible. // @@ -1161,7 +1161,7 @@ NodeI::checkConsistencyNoSync(const Ice::StringSeq& servers) assert(false); } } - + try { if(canRemoveServerDirectory(*p)) @@ -1193,7 +1193,7 @@ NodeI::checkConsistencyNoSync(const Ice::StringSeq& servers) // return commands; } - + if(!remove.empty()) { Ice::Warning out(_traceLevels->logger); @@ -1225,7 +1225,7 @@ NodeI::canRemoveServerDirectory(const string& name) { return false; } - + c = readDirectory(_serversDir + "/" + name + "/config"); for(Ice::StringSeq::const_iterator p = c.begin() ; p != c.end(); ++p) { @@ -1234,7 +1234,7 @@ NodeI::canRemoveServerDirectory(const string& name) return false; } } - + c = readDirectory(_serversDir + "/" + name + "/dbs"); for(Ice::StringSeq::const_iterator p = c.begin() ; p != c.end(); ++p) { @@ -1292,7 +1292,7 @@ NodeI::patch(const FileServerPrx& icepatch, const string& dest, const vector<str // // Update the files owner/group - // + // } set<ServerIPtr> @@ -1348,9 +1348,9 @@ NodeI::loadServer(const AMD_Node_loadServerPtr& amdCB, { Lock sync(*this); ++_serial; - + Ice::Identity id = createServerIdentity(descriptor->id); - + // // Check if we already have a servant for this server. If that's // the case, the server is already loaded and we just need to @@ -1383,7 +1383,7 @@ NodeI::loadServer(const AMD_Node_loadServerPtr& amdCB, // throw Ice::ObjectNotExistException(__FILE__, __LINE__, current.id, current.facet, current.operation); } - + try { command = server->load(amdCB, descriptor, replicaName, noRestart); @@ -1430,7 +1430,7 @@ NodeI::destroyServer(const AMD_Node_destroyServerPtr& amdCB, { Lock sync(*this); ++_serial; - + ServerIPtr server; try { @@ -1453,7 +1453,7 @@ NodeI::destroyServer(const AMD_Node_destroyServerPtr& amdCB, { server = new ServerI(this, 0, _serversDir, serverId, _waitTime); } - + // // Destroy the server object if it's loaded. // diff --git a/cpp/src/IceGrid/RegistryI.cpp b/cpp/src/IceGrid/RegistryI.cpp index d8a406931f4..1450436306a 100644 --- a/cpp/src/IceGrid/RegistryI.cpp +++ b/cpp/src/IceGrid/RegistryI.cpp @@ -341,9 +341,7 @@ RegistryI::startImpl() return false; } } - _communicator->getProperties()->setProperty("Freeze.DbEnv.Registry.DbHome", dbPath); - const string envName = "Registry"; - Freeze::ConnectionPtr connection = Freeze::createConnection(_communicator, envName); + _communicator->getProperties()->setProperty("Registry.LMDB.Path", dbPath); // // Ensure that nothing is running on this port. This is also @@ -388,11 +386,10 @@ RegistryI::startImpl() _registryAdapter, "IceGrid.Registry", registryTopicManagerId, - envName); + ""); const IceStorm::TopicManagerPrx topicManager = _iceStorm->getTopicManager(); - _database = new Database(_registryAdapter, topicManager, _instanceName, _traceLevels, getInfo(), connection, - "Registry", _readonly); + _database = new Database(_registryAdapter, topicManager, _instanceName, _traceLevels, getInfo(), _readonly); _wellKnownObjects = new WellKnownObjectsManager(_database); if(!_initFromReplica.empty()) diff --git a/cpp/src/IceGrid/ReplicaSessionI.cpp b/cpp/src/IceGrid/ReplicaSessionI.cpp index e9f1a17c0ce..cb4c655d4c6 100644 --- a/cpp/src/IceGrid/ReplicaSessionI.cpp +++ b/cpp/src/IceGrid/ReplicaSessionI.cpp @@ -28,7 +28,7 @@ operator==(const ObjectInfo& info, const Ice::Identity& id) } -ReplicaSessionI::ReplicaSessionI(const DatabasePtr& database, +ReplicaSessionI::ReplicaSessionI(const DatabasePtr& database, const WellKnownObjectsManagerPtr& wellKnownObjects, const InternalReplicaInfoPtr& info, const InternalRegistryPrx& proxy, @@ -95,7 +95,7 @@ ReplicaSessionI::getTimeout(const Ice::Current&) const } void -ReplicaSessionI::setDatabaseObserver(const DatabaseObserverPrx& observer, +ReplicaSessionI::setDatabaseObserver(const DatabaseObserverPrx& observer, const IceUtil::Optional<StringLongDict>& slaveSerials, const Ice::Current&) { @@ -140,7 +140,7 @@ ReplicaSessionI::setDatabaseObserver(const DatabaseObserverPrx& observer, os << " master and slave database with an administrative client and either:\n"; os << " - restart the slave with --initdb-from-replica=Master\n"; os << " - restart the master with --initdb-from-replica=" << _info->name; - + Ice::Error out(_traceLevels->logger); out << os.str(); throw DeploymentException(os.str()); @@ -160,7 +160,7 @@ ReplicaSessionI::setDatabaseObserver(const DatabaseObserverPrx& observer, if(_destroy) { throw Ice::ObjectNotExistException(__FILE__, __LINE__); - } + } _observer = observer; serialApplicationObserver = applicationObserver->subscribe(_observer, _info->name); @@ -181,7 +181,7 @@ ReplicaSessionI::setEndpoints(const StringObjectProxyDict& endpoints, const Ice: if(_destroy) { throw Ice::ObjectNotExistException(__FILE__, __LINE__); - } + } _replicaEndpoints = endpoints; } _wellKnownObjects->updateReplicatedWellKnownObjects(); @@ -212,7 +212,7 @@ ReplicaSessionI::registerWellKnownObjects(const ObjectInfoSeq& objects, const Ic void ReplicaSessionI::setAdapterDirectProxy(const string& adapterId, - const string& replicaGroupId, + const string& replicaGroupId, const Ice::ObjectPrx& proxy, const Ice::Current&) { @@ -256,13 +256,13 @@ ReplicaSessionI::shutdown() destroyImpl(true); } -const InternalRegistryPrx& +const InternalRegistryPrx& ReplicaSessionI::getInternalRegistry() const { return _internalRegistry; } - -const InternalReplicaInfoPtr& + +const InternalReplicaInfoPtr& ReplicaSessionI::getInfo() const { return _info; @@ -300,7 +300,7 @@ ReplicaSessionI::destroyImpl(bool shutdown) if(_destroy) { throw Ice::ObjectNotExistException(__FILE__, __LINE__); - } + } _destroy = true; } diff --git a/cpp/src/IceGrid/ServerI.h b/cpp/src/IceGrid/ServerI.h index 8d5b8f1bbdf..b9ac1190a4e 100644 --- a/cpp/src/IceGrid/ServerI.h +++ b/cpp/src/IceGrid/ServerI.h @@ -12,7 +12,6 @@ #include <IceUtil/Mutex.h> #include <IceUtil/Timer.h> -#include <Freeze/EvictorF.h> #include <IceGrid/Activator.h> #include <IceGrid/Internal.h> #include <set> diff --git a/cpp/src/IceGrid/WellKnownObjectsManager.cpp b/cpp/src/IceGrid/WellKnownObjectsManager.cpp index 595b3fe5de0..518792ffd66 100644 --- a/cpp/src/IceGrid/WellKnownObjectsManager.cpp +++ b/cpp/src/IceGrid/WellKnownObjectsManager.cpp @@ -7,6 +7,7 @@ // // ********************************************************************** +#include <Ice/Endpoint.h> #include <Glacier2/PermissionsVerifier.h> #include <IceGrid/WellKnownObjectsManager.h> #include <IceGrid/Database.h> diff --git a/cpp/src/IceStorm/.depend.mak b/cpp/src/IceStorm/.depend.mak index 731b5d71418..b7a6d9a2252 100755 --- a/cpp/src/IceStorm/.depend.mak +++ b/cpp/src/IceStorm/.depend.mak @@ -70,42 +70,6 @@ SubscriberRecord.h: \ "$(slicedir)/Ice/Metrics.ice" \ "$(slicedir)/Ice/BuiltinSequences.ice" -V31Format.h: \ - V31Format.ice \ - ../IceStorm/LinkRecord.ice \ - "$(slicedir)/Ice/Identity.ice" \ - ../IceStorm/IceStormInternal.ice \ - "$(slicedir)/IceStorm/IceStorm.ice" \ - "$(slicedir)/Ice/SliceChecksumDict.ice" \ - "$(slicedir)/IceStorm/Metrics.ice" \ - "$(slicedir)/Ice/Metrics.ice" \ - "$(slicedir)/Ice/BuiltinSequences.ice" \ - ../IceStorm/Election.ice \ - ../IceStorm/SubscriberRecord.ice \ - ../IceStorm/LLURecord.ice \ - "$(slicedir)/Ice/Current.ice" \ - "$(slicedir)/Ice/ObjectAdapterF.ice" \ - "$(slicedir)/Ice/ConnectionF.ice" \ - "$(slicedir)/Ice/Version.ice" - -V32Format.h: \ - V32Format.ice \ - ../IceStorm/LinkRecord.ice \ - "$(slicedir)/Ice/Identity.ice" \ - ../IceStorm/IceStormInternal.ice \ - "$(slicedir)/IceStorm/IceStorm.ice" \ - "$(slicedir)/Ice/SliceChecksumDict.ice" \ - "$(slicedir)/IceStorm/Metrics.ice" \ - "$(slicedir)/Ice/Metrics.ice" \ - "$(slicedir)/Ice/BuiltinSequences.ice" \ - ../IceStorm/Election.ice \ - ../IceStorm/SubscriberRecord.ice \ - ../IceStorm/LLURecord.ice \ - "$(slicedir)/Ice/Current.ice" \ - "$(slicedir)/Ice/ObjectAdapterF.ice" \ - "$(slicedir)/Ice/ConnectionF.ice" \ - "$(slicedir)/Ice/Version.ice" - Instance.obj: \ Instance.cpp \ "Instance.h" \ @@ -189,12 +153,11 @@ Instance.obj: \ "$(includedir)\IceStorm\Config.h" \ "LLURecord.h" \ "Instrumentation.h" \ - "TraceLevels.h" \ - "$(includedir)\Ice\LoggerF.h" \ - "Observers.h" \ + "Util.h" \ "$(includedir)\Ice\Ice.h" \ "$(includedir)\Ice\DeprecatedStringConverter.h" \ "$(includedir)\Ice\Plugin.h" \ + "$(includedir)\Ice\LoggerF.h" \ "$(includedir)\Ice\Initialize.h" \ "$(includedir)\IceUtil\Timer.h" \ "$(includedir)\IceUtil\Thread.h" \ @@ -237,6 +200,9 @@ Instance.obj: \ "$(includedir)\Ice\SliceChecksums.h" \ "$(includedir)\Ice\Service.h" \ "$(includedir)\Ice\RegisterPlugins.h" \ + "..\..\src\IceDB\IceDB.h" \ + "TraceLevels.h" \ + "Observers.h" \ "$(includedir)\IceUtil\IceUtil.h" \ "$(includedir)\IceUtil\AbstractMutex.h" \ "$(includedir)\IceUtil\Cache.h" \ @@ -361,136 +327,6 @@ InstrumentationI.obj: \ "$(includedir)\Ice\LoggerUtil.h" \ "$(includedir)\Ice\Logger.h" \ -LLUMap.obj: \ - LLUMap.cpp \ - "$(includedir)\IceUtil\PushDisableWarnings.h" \ - "$(includedir)\Ice\BasicStream.h" \ - "$(includedir)\IceUtil\StringConverter.h" \ - "$(includedir)\IceUtil\Config.h" \ - "$(includedir)\IceUtil\Exception.h" \ - "$(includedir)\IceUtil\Shared.h" \ - "$(includedir)\IceUtil\Atomic.h" \ - "$(includedir)\IceUtil\Handle.h" \ - "$(includedir)\Ice\InstanceF.h" \ - "$(includedir)\Ice\Handle.h" \ - "$(includedir)\Ice\Config.h" \ - "$(includedir)\Ice\Object.h" \ - "$(includedir)\IceUtil\Mutex.h" \ - "$(includedir)\IceUtil\Lock.h" \ - "$(includedir)\IceUtil\ThreadException.h" \ - "$(includedir)\IceUtil\Time.h" \ - "$(includedir)\IceUtil\MutexProtocol.h" \ - "$(includedir)\Ice\ObjectF.h" \ - "$(includedir)\Ice\ProxyF.h" \ - "$(includedir)\Ice\ProxyHandle.h" \ - "$(includedir)\Ice\IncomingAsyncF.h" \ - "$(includedir)\Ice\Current.h" \ - "$(includedir)\Ice\Exception.h" \ - "$(includedir)\Ice\Format.h" \ - "$(includedir)\Ice\StreamF.h" \ - "$(includedir)\Ice\LocalObject.h" \ - "$(includedir)\Ice\LocalObjectF.h" \ - "$(includedir)\Ice\StreamHelpers.h" \ - "$(includedir)\IceUtil\ScopedArray.h" \ - "$(includedir)\IceUtil\Iterator.h" \ - "$(includedir)\IceUtil\Optional.h" \ - "$(includedir)\Ice\ObjectAdapterF.h" \ - "$(includedir)\IceUtil\UndefSysMacros.h" \ - "$(includedir)\IceUtil\PopDisableWarnings.h" \ - "$(includedir)\Ice\ConnectionF.h" \ - "$(includedir)\Ice\Identity.h" \ - "$(includedir)\Ice\Version.h" \ - "$(includedir)\Ice\ObjectFactoryF.h" \ - "$(includedir)\Ice\ObjectFactoryManagerF.h" \ - "$(includedir)\Ice\Buffer.h" \ - "$(includedir)\Ice\Protocol.h" \ - "$(includedir)\Ice\SlicedDataF.h" \ - "$(includedir)\Ice\UserExceptionFactory.h" \ - "$(includedir)\Ice\FactoryTable.h" \ - "$(includedir)\IceUtil\StringUtil.h" \ - "LLUMap.h" \ - "$(includedir)\Freeze\Map.h" \ - "$(includedir)\Ice\Ice.h" \ - "$(includedir)\Ice\DeprecatedStringConverter.h" \ - "$(includedir)\Ice\CommunicatorF.h" \ - "$(includedir)\Ice\Plugin.h" \ - "$(includedir)\Ice\LoggerF.h" \ - "$(includedir)\Ice\BuiltinSequences.h" \ - "$(includedir)\Ice\Initialize.h" \ - "$(includedir)\IceUtil\Timer.h" \ - "$(includedir)\IceUtil\Thread.h" \ - "$(includedir)\IceUtil\Monitor.h" \ - "$(includedir)\IceUtil\Cond.h" \ - "$(includedir)\Ice\PropertiesF.h" \ - "$(includedir)\Ice\Proxy.h" \ - "$(includedir)\Ice\ProxyFactoryF.h" \ - "$(includedir)\Ice\ConnectionIF.h" \ - "$(includedir)\Ice\RequestHandlerF.h" \ - "$(includedir)\Ice\EndpointF.h" \ - "$(includedir)\Ice\EndpointTypes.h" \ - "$(includedir)\Ice\ReferenceF.h" \ - "$(includedir)\Ice\BatchRequestQueueF.h" \ - "$(includedir)\Ice\AsyncResult.h" \ - "$(includedir)\IceUtil\UniquePtr.h" \ - "$(includedir)\Ice\AsyncResultF.h" \ - "$(includedir)\Ice\ObserverHelper.h" \ - "$(includedir)\Ice\Instrumentation.h" \ - "$(includedir)\Ice\InstrumentationF.h" \ - "$(includedir)\Ice\Dispatcher.h" \ - "$(includedir)\Ice\BatchRequestInterceptor.h" \ - "$(includedir)\Ice\LocalException.h" \ - "$(includedir)\Ice\PropertiesAdmin.h" \ - "$(includedir)\Ice\GCObject.h" \ - "$(includedir)\IceUtil\MutexPtrLock.h" \ - "$(includedir)\Ice\Incoming.h" \ - "$(includedir)\Ice\ServantLocatorF.h" \ - "$(includedir)\Ice\ServantManagerF.h" \ - "$(includedir)\Ice\ResponseHandlerF.h" \ - "$(includedir)\Ice\IncomingAsync.h" \ - "$(includedir)\Ice\Properties.h" \ - "$(includedir)\Ice\Logger.h" \ - "$(includedir)\Ice\LoggerUtil.h" \ - "$(includedir)\Ice\RemoteLogger.h" \ - "$(includedir)\Ice\FactoryTableInit.h" \ - "$(includedir)\Ice\DefaultObjectFactory.h" \ - "$(includedir)\Ice\ObjectFactory.h" \ - "$(includedir)\Ice\Communicator.h" \ - "$(includedir)\Ice\RouterF.h" \ - "$(includedir)\Ice\LocatorF.h" \ - "$(includedir)\Ice\PluginF.h" \ - "$(includedir)\Ice\ImplicitContextF.h" \ - "$(includedir)\Ice\FacetMap.h" \ - "$(includedir)\Ice\CommunicatorAsync.h" \ - "$(includedir)\Ice\ObjectAdapter.h" \ - "$(includedir)\Ice\Endpoint.h" \ - "$(includedir)\Ice\ServantLocator.h" \ - "$(includedir)\Ice\SlicedData.h" \ - "$(includedir)\Ice\OutgoingAsync.h" \ - "$(includedir)\Ice\OutgoingAsyncF.h" \ - "$(includedir)\Ice\Process.h" \ - "$(includedir)\Ice\Application.h" \ - "$(includedir)\Ice\Connection.h" \ - "$(includedir)\Ice\ConnectionAsync.h" \ - "$(includedir)\Ice\Functional.h" \ - "$(includedir)\IceUtil\Functional.h" \ - "$(includedir)\Ice\Stream.h" \ - "$(includedir)\Ice\ImplicitContext.h" \ - "$(includedir)\Ice\Locator.h" \ - "$(includedir)\Ice\ProcessF.h" \ - "$(includedir)\Ice\Router.h" \ - "$(includedir)\Ice\DispatchInterceptor.h" \ - "$(includedir)\Ice\NativePropertiesAdmin.h" \ - "$(includedir)\Ice\Metrics.h" \ - "$(includedir)\Ice\SliceChecksums.h" \ - "$(includedir)\Ice\SliceChecksumDict.h" \ - "$(includedir)\Ice\Service.h" \ - "$(includedir)\Ice\RegisterPlugins.h" \ - "$(includedir)\Freeze\DB.h" \ - "$(includedir)\Freeze\Exception.h" \ - "$(includedir)\Freeze\Connection.h" \ - "$(includedir)\Freeze\Transaction.h" \ - "LLURecord.h" \ - NodeI.obj: \ NodeI.cpp \ "NodeI.h" \ @@ -629,6 +465,8 @@ NodeI.obj: \ "Replica.h" \ "Instance.h" \ "Instrumentation.h" \ + "Util.h" \ + "..\..\src\IceDB\IceDB.h" \ "Observers.h" \ "TraceLevels.h" \ @@ -770,6 +608,8 @@ Observers.obj: \ "Replica.h" \ "Instance.h" \ "Instrumentation.h" \ + "Util.h" \ + "..\..\src\IceDB\IceDB.h" \ "TraceLevels.h" \ Service.obj: \ @@ -859,8 +699,8 @@ Service.obj: \ "SubscriberRecord.h" \ "LLURecord.h" \ "Instrumentation.h" \ - "$(includedir)\Freeze\Freeze.h" \ - "$(includedir)\Freeze\Initialize.h" \ + "TopicManagerI.h" \ + "Replica.h" \ "$(includedir)\Ice\Ice.h" \ "$(includedir)\Ice\DeprecatedStringConverter.h" \ "$(includedir)\Ice\Initialize.h" \ @@ -906,25 +746,11 @@ Service.obj: \ "$(includedir)\Ice\SliceChecksums.h" \ "$(includedir)\Ice\Service.h" \ "$(includedir)\Ice\RegisterPlugins.h" \ - "$(includedir)\Freeze\EvictorF.h" \ - "$(includedir)\Freeze\ConnectionF.h" \ - "$(includedir)\Freeze\Index.h" \ - "$(includedir)\Freeze\DB.h" \ - "$(includedir)\Freeze\Transaction.h" \ - "$(includedir)\Freeze\BackgroundSaveEvictor.h" \ - "$(includedir)\Freeze\Evictor.h" \ - "$(includedir)\Freeze\Exception.h" \ - "$(includedir)\Freeze\TransactionalEvictor.h" \ - "$(includedir)\Freeze\Map.h" \ - "$(includedir)\Freeze\Connection.h" \ - "$(includedir)\Freeze\TransactionHolder.h" \ - "$(includedir)\Freeze\Catalog.h" \ - "$(includedir)\Freeze\CatalogData.h" \ - "TopicManagerI.h" \ - "Replica.h" \ "$(includedir)\IceUtil\RecMutex.h" \ "TransientTopicManagerI.h" \ "Instance.h" \ + "Util.h" \ + "..\..\src\IceDB\IceDB.h" \ "Service.h" \ "$(includedir)\IceBox\IceBox.h" \ "$(includedir)\IceBox\Config.h" \ @@ -1030,172 +856,24 @@ Subscriber.obj: \ "$(includedir)\IceUtil\RecMutex.h" \ "Instance.h" \ "$(includedir)\Ice\PropertiesF.h" \ - "TraceLevels.h" \ - "$(includedir)\Ice\LoggerF.h" \ - "NodeI.h" \ - "$(includedir)\IceUtil\IceUtil.h" \ - "$(includedir)\IceUtil\AbstractMutex.h" \ - "$(includedir)\IceUtil\Cache.h" \ - "$(includedir)\IceUtil\CountDownLatch.h" \ - "$(includedir)\IceUtil\CtrlCHandler.h" \ - "$(includedir)\IceUtil\Functional.h" \ - "$(includedir)\IceUtil\Thread.h" \ - "$(includedir)\IceUtil\Timer.h" \ - "$(includedir)\IceUtil\UUID.h" \ - "$(includedir)\Ice\Ice.h" \ - "$(includedir)\Ice\DeprecatedStringConverter.h" \ - "$(includedir)\Ice\Plugin.h" \ - "$(includedir)\Ice\Initialize.h" \ - "$(includedir)\Ice\InstrumentationF.h" \ - "$(includedir)\Ice\Dispatcher.h" \ - "$(includedir)\Ice\BatchRequestInterceptor.h" \ - "$(includedir)\Ice\LocalException.h" \ - "$(includedir)\Ice\PropertiesAdmin.h" \ - "$(includedir)\Ice\IncomingAsync.h" \ - "$(includedir)\Ice\Properties.h" \ - "$(includedir)\Ice\Logger.h" \ - "$(includedir)\Ice\LoggerUtil.h" \ - "$(includedir)\Ice\RemoteLogger.h" \ - "$(includedir)\Ice\Communicator.h" \ - "$(includedir)\Ice\RouterF.h" \ - "$(includedir)\Ice\LocatorF.h" \ - "$(includedir)\Ice\PluginF.h" \ - "$(includedir)\Ice\ImplicitContextF.h" \ - "$(includedir)\Ice\FacetMap.h" \ - "$(includedir)\Ice\CommunicatorAsync.h" \ - "$(includedir)\Ice\ObjectAdapter.h" \ - "$(includedir)\Ice\Endpoint.h" \ - "$(includedir)\Ice\ServantLocator.h" \ - "$(includedir)\Ice\SlicedData.h" \ - "$(includedir)\Ice\OutgoingAsync.h" \ - "$(includedir)\Ice\OutgoingAsyncF.h" \ - "$(includedir)\Ice\Process.h" \ - "$(includedir)\Ice\Application.h" \ - "$(includedir)\Ice\Connection.h" \ - "$(includedir)\Ice\ConnectionAsync.h" \ - "$(includedir)\Ice\Functional.h" \ - "$(includedir)\Ice\Stream.h" \ - "$(includedir)\Ice\ImplicitContext.h" \ - "$(includedir)\Ice\Locator.h" \ - "$(includedir)\Ice\ProcessF.h" \ - "$(includedir)\Ice\Router.h" \ - "$(includedir)\Ice\DispatchInterceptor.h" \ - "$(includedir)\Ice\NativePropertiesAdmin.h" \ - "$(includedir)\Ice\SliceChecksums.h" \ - "$(includedir)\Ice\Service.h" \ - "$(includedir)\Ice\RegisterPlugins.h" \ - "Replica.h" \ "Util.h" \ - "$(includedir)\Freeze\Freeze.h" \ - "$(includedir)\Freeze\Initialize.h" \ - "$(includedir)\Freeze\EvictorF.h" \ - "$(includedir)\Freeze\ConnectionF.h" \ - "$(includedir)\Freeze\Index.h" \ - "$(includedir)\Freeze\DB.h" \ - "$(includedir)\Freeze\Transaction.h" \ - "$(includedir)\Freeze\BackgroundSaveEvictor.h" \ - "$(includedir)\Freeze\Evictor.h" \ - "$(includedir)\Freeze\Exception.h" \ - "$(includedir)\Freeze\TransactionalEvictor.h" \ - "$(includedir)\Freeze\Map.h" \ - "$(includedir)\Freeze\Connection.h" \ - "$(includedir)\Freeze\TransactionHolder.h" \ - "$(includedir)\Freeze\Catalog.h" \ - "$(includedir)\Freeze\CatalogData.h" \ - -SubscriberMap.obj: \ - SubscriberMap.cpp \ - "$(includedir)\IceUtil\PushDisableWarnings.h" \ - "$(includedir)\Ice\BasicStream.h" \ - "$(includedir)\IceUtil\StringConverter.h" \ - "$(includedir)\IceUtil\Config.h" \ - "$(includedir)\IceUtil\Exception.h" \ - "$(includedir)\IceUtil\Shared.h" \ - "$(includedir)\IceUtil\Atomic.h" \ - "$(includedir)\IceUtil\Handle.h" \ - "$(includedir)\Ice\InstanceF.h" \ - "$(includedir)\Ice\Handle.h" \ - "$(includedir)\Ice\Config.h" \ - "$(includedir)\Ice\Object.h" \ - "$(includedir)\IceUtil\Mutex.h" \ - "$(includedir)\IceUtil\Lock.h" \ - "$(includedir)\IceUtil\ThreadException.h" \ - "$(includedir)\IceUtil\Time.h" \ - "$(includedir)\IceUtil\MutexProtocol.h" \ - "$(includedir)\Ice\ObjectF.h" \ - "$(includedir)\Ice\ProxyF.h" \ - "$(includedir)\Ice\ProxyHandle.h" \ - "$(includedir)\Ice\IncomingAsyncF.h" \ - "$(includedir)\Ice\Current.h" \ - "$(includedir)\Ice\Exception.h" \ - "$(includedir)\Ice\Format.h" \ - "$(includedir)\Ice\StreamF.h" \ - "$(includedir)\Ice\LocalObject.h" \ - "$(includedir)\Ice\LocalObjectF.h" \ - "$(includedir)\Ice\StreamHelpers.h" \ - "$(includedir)\IceUtil\ScopedArray.h" \ - "$(includedir)\IceUtil\Iterator.h" \ - "$(includedir)\IceUtil\Optional.h" \ - "$(includedir)\Ice\ObjectAdapterF.h" \ - "$(includedir)\IceUtil\UndefSysMacros.h" \ - "$(includedir)\IceUtil\PopDisableWarnings.h" \ - "$(includedir)\Ice\ConnectionF.h" \ - "$(includedir)\Ice\Identity.h" \ - "$(includedir)\Ice\Version.h" \ - "$(includedir)\Ice\ObjectFactoryF.h" \ - "$(includedir)\Ice\ObjectFactoryManagerF.h" \ - "$(includedir)\Ice\Buffer.h" \ - "$(includedir)\Ice\Protocol.h" \ - "$(includedir)\Ice\SlicedDataF.h" \ - "$(includedir)\Ice\UserExceptionFactory.h" \ - "$(includedir)\Ice\FactoryTable.h" \ - "$(includedir)\IceUtil\StringUtil.h" \ - "SubscriberMap.h" \ - "$(includedir)\Freeze\Map.h" \ "$(includedir)\Ice\Ice.h" \ "$(includedir)\Ice\DeprecatedStringConverter.h" \ - "$(includedir)\Ice\CommunicatorF.h" \ "$(includedir)\Ice\Plugin.h" \ "$(includedir)\Ice\LoggerF.h" \ - "$(includedir)\Ice\BuiltinSequences.h" \ "$(includedir)\Ice\Initialize.h" \ "$(includedir)\IceUtil\Timer.h" \ "$(includedir)\IceUtil\Thread.h" \ - "$(includedir)\IceUtil\Monitor.h" \ - "$(includedir)\IceUtil\Cond.h" \ - "$(includedir)\Ice\PropertiesF.h" \ - "$(includedir)\Ice\Proxy.h" \ - "$(includedir)\Ice\ProxyFactoryF.h" \ - "$(includedir)\Ice\ConnectionIF.h" \ - "$(includedir)\Ice\RequestHandlerF.h" \ - "$(includedir)\Ice\EndpointF.h" \ - "$(includedir)\Ice\EndpointTypes.h" \ - "$(includedir)\Ice\ReferenceF.h" \ - "$(includedir)\Ice\BatchRequestQueueF.h" \ - "$(includedir)\Ice\AsyncResult.h" \ - "$(includedir)\IceUtil\UniquePtr.h" \ - "$(includedir)\Ice\AsyncResultF.h" \ - "$(includedir)\Ice\ObserverHelper.h" \ - "$(includedir)\Ice\Instrumentation.h" \ "$(includedir)\Ice\InstrumentationF.h" \ "$(includedir)\Ice\Dispatcher.h" \ "$(includedir)\Ice\BatchRequestInterceptor.h" \ "$(includedir)\Ice\LocalException.h" \ "$(includedir)\Ice\PropertiesAdmin.h" \ - "$(includedir)\Ice\GCObject.h" \ - "$(includedir)\IceUtil\MutexPtrLock.h" \ - "$(includedir)\Ice\Incoming.h" \ - "$(includedir)\Ice\ServantLocatorF.h" \ - "$(includedir)\Ice\ServantManagerF.h" \ - "$(includedir)\Ice\ResponseHandlerF.h" \ "$(includedir)\Ice\IncomingAsync.h" \ "$(includedir)\Ice\Properties.h" \ "$(includedir)\Ice\Logger.h" \ "$(includedir)\Ice\LoggerUtil.h" \ "$(includedir)\Ice\RemoteLogger.h" \ - "$(includedir)\Ice\FactoryTableInit.h" \ - "$(includedir)\Ice\DefaultObjectFactory.h" \ - "$(includedir)\Ice\ObjectFactory.h" \ "$(includedir)\Ice\Communicator.h" \ "$(includedir)\Ice\RouterF.h" \ "$(includedir)\Ice\LocatorF.h" \ @@ -1222,19 +900,19 @@ SubscriberMap.obj: \ "$(includedir)\Ice\Router.h" \ "$(includedir)\Ice\DispatchInterceptor.h" \ "$(includedir)\Ice\NativePropertiesAdmin.h" \ - "$(includedir)\Ice\Metrics.h" \ "$(includedir)\Ice\SliceChecksums.h" \ - "$(includedir)\Ice\SliceChecksumDict.h" \ "$(includedir)\Ice\Service.h" \ "$(includedir)\Ice\RegisterPlugins.h" \ - "$(includedir)\Freeze\DB.h" \ - "$(includedir)\Freeze\Exception.h" \ - "$(includedir)\Freeze\Connection.h" \ - "$(includedir)\Freeze\Transaction.h" \ - "SubscriberRecord.h" \ - "$(includedir)\IceStorm\IceStorm.h" \ - "$(includedir)\IceStorm\Metrics.h" \ - "$(includedir)\IceStorm\Config.h" \ + "..\..\src\IceDB\IceDB.h" \ + "TraceLevels.h" \ + "NodeI.h" \ + "$(includedir)\IceUtil\IceUtil.h" \ + "$(includedir)\IceUtil\AbstractMutex.h" \ + "$(includedir)\IceUtil\Cache.h" \ + "$(includedir)\IceUtil\CountDownLatch.h" \ + "$(includedir)\IceUtil\CtrlCHandler.h" \ + "$(includedir)\IceUtil\UUID.h" \ + "Replica.h" \ TopicI.obj: \ TopicI.cpp \ @@ -1319,8 +997,9 @@ TopicI.obj: \ "SubscriberRecord.h" \ "LLURecord.h" \ "Instrumentation.h" \ - "$(includedir)\Freeze\Freeze.h" \ - "$(includedir)\Freeze\Initialize.h" \ + "Instance.h" \ + "$(includedir)\Ice\PropertiesF.h" \ + "Util.h" \ "$(includedir)\Ice\Ice.h" \ "$(includedir)\Ice\DeprecatedStringConverter.h" \ "$(includedir)\Ice\Plugin.h" \ @@ -1328,7 +1007,6 @@ TopicI.obj: \ "$(includedir)\Ice\Initialize.h" \ "$(includedir)\IceUtil\Timer.h" \ "$(includedir)\IceUtil\Thread.h" \ - "$(includedir)\Ice\PropertiesF.h" \ "$(includedir)\Ice\InstrumentationF.h" \ "$(includedir)\Ice\Dispatcher.h" \ "$(includedir)\Ice\BatchRequestInterceptor.h" \ @@ -1368,21 +1046,7 @@ TopicI.obj: \ "$(includedir)\Ice\SliceChecksums.h" \ "$(includedir)\Ice\Service.h" \ "$(includedir)\Ice\RegisterPlugins.h" \ - "$(includedir)\Freeze\EvictorF.h" \ - "$(includedir)\Freeze\ConnectionF.h" \ - "$(includedir)\Freeze\Index.h" \ - "$(includedir)\Freeze\DB.h" \ - "$(includedir)\Freeze\Transaction.h" \ - "$(includedir)\Freeze\BackgroundSaveEvictor.h" \ - "$(includedir)\Freeze\Evictor.h" \ - "$(includedir)\Freeze\Exception.h" \ - "$(includedir)\Freeze\TransactionalEvictor.h" \ - "$(includedir)\Freeze\Map.h" \ - "$(includedir)\Freeze\Connection.h" \ - "$(includedir)\Freeze\TransactionHolder.h" \ - "$(includedir)\Freeze\Catalog.h" \ - "$(includedir)\Freeze\CatalogData.h" \ - "Instance.h" \ + "..\..\src\IceDB\IceDB.h" \ "Subscriber.h" \ "$(includedir)\IceUtil\RecMutex.h" \ "TraceLevels.h" \ @@ -1395,9 +1059,6 @@ TopicI.obj: \ "$(includedir)\IceUtil\UUID.h" \ "Replica.h" \ "Observers.h" \ - "SubscriberMap.h" \ - "LLUMap.h" \ - "Util.h" \ TopicManagerI.obj: \ TopicManagerI.cpp \ @@ -1529,27 +1190,13 @@ TopicManagerI.obj: \ "SubscriberRecord.h" \ "LLURecord.h" \ "Instrumentation.h" \ - "$(includedir)\Freeze\Freeze.h" \ - "$(includedir)\Freeze\Initialize.h" \ - "$(includedir)\Freeze\EvictorF.h" \ - "$(includedir)\Freeze\ConnectionF.h" \ - "$(includedir)\Freeze\Index.h" \ - "$(includedir)\Freeze\DB.h" \ - "$(includedir)\Freeze\Transaction.h" \ - "$(includedir)\Freeze\BackgroundSaveEvictor.h" \ - "$(includedir)\Freeze\Evictor.h" \ - "$(includedir)\Freeze\Exception.h" \ - "$(includedir)\Freeze\TransactionalEvictor.h" \ - "$(includedir)\Freeze\Map.h" \ - "$(includedir)\Freeze\Connection.h" \ - "$(includedir)\Freeze\TransactionHolder.h" \ - "$(includedir)\Freeze\Catalog.h" \ - "$(includedir)\Freeze\CatalogData.h" \ "$(includedir)\IceUtil\RecMutex.h" \ "TopicI.h" \ "IceStormInternal.h" \ "TraceLevels.h" \ "Instance.h" \ + "Util.h" \ + "..\..\src\IceDB\IceDB.h" \ "NodeI.h" \ "$(includedir)\IceUtil\IceUtil.h" \ "$(includedir)\IceUtil\AbstractMutex.h" \ @@ -1559,9 +1206,6 @@ TopicManagerI.obj: \ "$(includedir)\IceUtil\UUID.h" \ "Observers.h" \ "Subscriber.h" \ - "SubscriberMap.h" \ - "LLUMap.h" \ - "Util.h" \ TraceLevels.obj: \ TraceLevels.cpp \ @@ -1724,14 +1368,11 @@ TransientTopicI.obj: \ "Instance.h" \ "$(includedir)\Ice\PropertiesF.h" \ "Instrumentation.h" \ - "Subscriber.h" \ - "$(includedir)\IceUtil\RecMutex.h" \ - "TraceLevels.h" \ - "$(includedir)\Ice\LoggerF.h" \ "Util.h" \ "$(includedir)\Ice\Ice.h" \ "$(includedir)\Ice\DeprecatedStringConverter.h" \ "$(includedir)\Ice\Plugin.h" \ + "$(includedir)\Ice\LoggerF.h" \ "$(includedir)\Ice\Initialize.h" \ "$(includedir)\IceUtil\Timer.h" \ "$(includedir)\IceUtil\Thread.h" \ @@ -1774,22 +1415,10 @@ TransientTopicI.obj: \ "$(includedir)\Ice\SliceChecksums.h" \ "$(includedir)\Ice\Service.h" \ "$(includedir)\Ice\RegisterPlugins.h" \ - "$(includedir)\Freeze\Freeze.h" \ - "$(includedir)\Freeze\Initialize.h" \ - "$(includedir)\Freeze\EvictorF.h" \ - "$(includedir)\Freeze\ConnectionF.h" \ - "$(includedir)\Freeze\Index.h" \ - "$(includedir)\Freeze\DB.h" \ - "$(includedir)\Freeze\Transaction.h" \ - "$(includedir)\Freeze\BackgroundSaveEvictor.h" \ - "$(includedir)\Freeze\Evictor.h" \ - "$(includedir)\Freeze\Exception.h" \ - "$(includedir)\Freeze\TransactionalEvictor.h" \ - "$(includedir)\Freeze\Map.h" \ - "$(includedir)\Freeze\Connection.h" \ - "$(includedir)\Freeze\TransactionHolder.h" \ - "$(includedir)\Freeze\Catalog.h" \ - "$(includedir)\Freeze\CatalogData.h" \ + "..\..\src\IceDB\IceDB.h" \ + "Subscriber.h" \ + "$(includedir)\IceUtil\RecMutex.h" \ + "TraceLevels.h" \ TransientTopicManagerI.obj: \ TransientTopicManagerI.cpp \ @@ -1879,8 +1508,7 @@ TransientTopicManagerI.obj: \ "$(includedir)\Ice\LoggerF.h" \ "Instance.h" \ "Instrumentation.h" \ - "Subscriber.h" \ - "$(includedir)\IceUtil\RecMutex.h" \ + "Util.h" \ "$(includedir)\Ice\Ice.h" \ "$(includedir)\Ice\DeprecatedStringConverter.h" \ "$(includedir)\Ice\Plugin.h" \ @@ -1926,6 +1554,9 @@ TransientTopicManagerI.obj: \ "$(includedir)\Ice\SliceChecksums.h" \ "$(includedir)\Ice\Service.h" \ "$(includedir)\Ice\RegisterPlugins.h" \ + "..\..\src\IceDB\IceDB.h" \ + "Subscriber.h" \ + "$(includedir)\IceUtil\RecMutex.h" \ Util.obj: \ Util.cpp \ @@ -2049,300 +1680,15 @@ Util.obj: \ "$(includedir)\Ice\SliceChecksumDict.h" \ "$(includedir)\Ice\Service.h" \ "$(includedir)\Ice\RegisterPlugins.h" \ - "$(includedir)\Freeze\Freeze.h" \ - "$(includedir)\Freeze\Initialize.h" \ - "$(includedir)\Freeze\EvictorF.h" \ - "$(includedir)\Freeze\ConnectionF.h" \ - "$(includedir)\Freeze\Index.h" \ - "$(includedir)\Freeze\DB.h" \ - "$(includedir)\Freeze\Transaction.h" \ - "$(includedir)\Freeze\BackgroundSaveEvictor.h" \ - "$(includedir)\Freeze\Evictor.h" \ - "$(includedir)\Freeze\Exception.h" \ - "$(includedir)\Freeze\TransactionalEvictor.h" \ - "$(includedir)\Freeze\Map.h" \ - "$(includedir)\Freeze\Connection.h" \ - "$(includedir)\Freeze\TransactionHolder.h" \ - "$(includedir)\Freeze\Catalog.h" \ - "$(includedir)\Freeze\CatalogData.h" \ - "LLURecord.h" \ - "LLUMap.h" \ - -V31FormatDB.obj: \ - V31FormatDB.cpp \ - "$(includedir)\IceUtil\PushDisableWarnings.h" \ - "$(includedir)\Ice\BasicStream.h" \ - "$(includedir)\IceUtil\StringConverter.h" \ - "$(includedir)\IceUtil\Config.h" \ - "$(includedir)\IceUtil\Exception.h" \ - "$(includedir)\IceUtil\Shared.h" \ - "$(includedir)\IceUtil\Atomic.h" \ - "$(includedir)\IceUtil\Handle.h" \ - "$(includedir)\Ice\InstanceF.h" \ - "$(includedir)\Ice\Handle.h" \ - "$(includedir)\Ice\Config.h" \ - "$(includedir)\Ice\Object.h" \ - "$(includedir)\IceUtil\Mutex.h" \ - "$(includedir)\IceUtil\Lock.h" \ - "$(includedir)\IceUtil\ThreadException.h" \ - "$(includedir)\IceUtil\Time.h" \ - "$(includedir)\IceUtil\MutexProtocol.h" \ - "$(includedir)\Ice\ObjectF.h" \ - "$(includedir)\Ice\ProxyF.h" \ - "$(includedir)\Ice\ProxyHandle.h" \ - "$(includedir)\Ice\IncomingAsyncF.h" \ - "$(includedir)\Ice\Current.h" \ - "$(includedir)\Ice\Exception.h" \ - "$(includedir)\Ice\Format.h" \ - "$(includedir)\Ice\StreamF.h" \ - "$(includedir)\Ice\LocalObject.h" \ - "$(includedir)\Ice\LocalObjectF.h" \ - "$(includedir)\Ice\StreamHelpers.h" \ - "$(includedir)\IceUtil\ScopedArray.h" \ - "$(includedir)\IceUtil\Iterator.h" \ - "$(includedir)\IceUtil\Optional.h" \ - "$(includedir)\Ice\ObjectAdapterF.h" \ - "$(includedir)\IceUtil\UndefSysMacros.h" \ - "$(includedir)\IceUtil\PopDisableWarnings.h" \ - "$(includedir)\Ice\ConnectionF.h" \ - "$(includedir)\Ice\Identity.h" \ - "$(includedir)\Ice\Version.h" \ - "$(includedir)\Ice\ObjectFactoryF.h" \ - "$(includedir)\Ice\ObjectFactoryManagerF.h" \ - "$(includedir)\Ice\Buffer.h" \ - "$(includedir)\Ice\Protocol.h" \ - "$(includedir)\Ice\SlicedDataF.h" \ - "$(includedir)\Ice\UserExceptionFactory.h" \ - "$(includedir)\Ice\FactoryTable.h" \ - "$(includedir)\IceUtil\StringUtil.h" \ - "V31FormatDB.h" \ - "$(includedir)\Freeze\Map.h" \ - "$(includedir)\Ice\Ice.h" \ - "$(includedir)\Ice\DeprecatedStringConverter.h" \ - "$(includedir)\Ice\CommunicatorF.h" \ - "$(includedir)\Ice\Plugin.h" \ - "$(includedir)\Ice\LoggerF.h" \ - "$(includedir)\Ice\BuiltinSequences.h" \ - "$(includedir)\Ice\Initialize.h" \ - "$(includedir)\IceUtil\Timer.h" \ - "$(includedir)\IceUtil\Thread.h" \ - "$(includedir)\IceUtil\Monitor.h" \ - "$(includedir)\IceUtil\Cond.h" \ - "$(includedir)\Ice\PropertiesF.h" \ - "$(includedir)\Ice\Proxy.h" \ - "$(includedir)\Ice\ProxyFactoryF.h" \ - "$(includedir)\Ice\ConnectionIF.h" \ - "$(includedir)\Ice\RequestHandlerF.h" \ - "$(includedir)\Ice\EndpointF.h" \ - "$(includedir)\Ice\EndpointTypes.h" \ - "$(includedir)\Ice\ReferenceF.h" \ - "$(includedir)\Ice\BatchRequestQueueF.h" \ - "$(includedir)\Ice\AsyncResult.h" \ - "$(includedir)\IceUtil\UniquePtr.h" \ - "$(includedir)\Ice\AsyncResultF.h" \ - "$(includedir)\Ice\ObserverHelper.h" \ - "$(includedir)\Ice\Instrumentation.h" \ - "$(includedir)\Ice\InstrumentationF.h" \ - "$(includedir)\Ice\Dispatcher.h" \ - "$(includedir)\Ice\BatchRequestInterceptor.h" \ - "$(includedir)\Ice\LocalException.h" \ - "$(includedir)\Ice\PropertiesAdmin.h" \ - "$(includedir)\Ice\GCObject.h" \ - "$(includedir)\IceUtil\MutexPtrLock.h" \ - "$(includedir)\Ice\Incoming.h" \ - "$(includedir)\Ice\ServantLocatorF.h" \ - "$(includedir)\Ice\ServantManagerF.h" \ - "$(includedir)\Ice\ResponseHandlerF.h" \ - "$(includedir)\Ice\IncomingAsync.h" \ - "$(includedir)\Ice\Properties.h" \ - "$(includedir)\Ice\Logger.h" \ - "$(includedir)\Ice\LoggerUtil.h" \ - "$(includedir)\Ice\RemoteLogger.h" \ - "$(includedir)\Ice\FactoryTableInit.h" \ - "$(includedir)\Ice\DefaultObjectFactory.h" \ - "$(includedir)\Ice\ObjectFactory.h" \ - "$(includedir)\Ice\Communicator.h" \ - "$(includedir)\Ice\RouterF.h" \ - "$(includedir)\Ice\LocatorF.h" \ - "$(includedir)\Ice\PluginF.h" \ - "$(includedir)\Ice\ImplicitContextF.h" \ - "$(includedir)\Ice\FacetMap.h" \ - "$(includedir)\Ice\CommunicatorAsync.h" \ - "$(includedir)\Ice\ObjectAdapter.h" \ - "$(includedir)\Ice\Endpoint.h" \ - "$(includedir)\Ice\ServantLocator.h" \ - "$(includedir)\Ice\SlicedData.h" \ - "$(includedir)\Ice\OutgoingAsync.h" \ - "$(includedir)\Ice\OutgoingAsyncF.h" \ - "$(includedir)\Ice\Process.h" \ - "$(includedir)\Ice\Application.h" \ - "$(includedir)\Ice\Connection.h" \ - "$(includedir)\Ice\ConnectionAsync.h" \ - "$(includedir)\Ice\Functional.h" \ - "$(includedir)\IceUtil\Functional.h" \ - "$(includedir)\Ice\Stream.h" \ - "$(includedir)\Ice\ImplicitContext.h" \ - "$(includedir)\Ice\Locator.h" \ - "$(includedir)\Ice\ProcessF.h" \ - "$(includedir)\Ice\Router.h" \ - "$(includedir)\Ice\DispatchInterceptor.h" \ - "$(includedir)\Ice\NativePropertiesAdmin.h" \ - "$(includedir)\Ice\Metrics.h" \ - "$(includedir)\Ice\SliceChecksums.h" \ - "$(includedir)\Ice\SliceChecksumDict.h" \ - "$(includedir)\Ice\Service.h" \ - "$(includedir)\Ice\RegisterPlugins.h" \ - "$(includedir)\Freeze\DB.h" \ - "$(includedir)\Freeze\Exception.h" \ - "$(includedir)\Freeze\Connection.h" \ - "$(includedir)\Freeze\Transaction.h" \ - "V31Format.h" \ - "LinkRecord.h" \ - "IceStormInternal.h" \ - "$(includedir)\IceStorm\IceStorm.h" \ - "$(includedir)\IceStorm\Metrics.h" \ - "$(includedir)\IceStorm\Config.h" \ - "Election.h" \ + "..\..\src\IceDB\IceDB.h" \ "SubscriberRecord.h" \ - "LLURecord.h" \ - -V32FormatDB.obj: \ - V32FormatDB.cpp \ - "$(includedir)\IceUtil\PushDisableWarnings.h" \ - "$(includedir)\Ice\BasicStream.h" \ - "$(includedir)\IceUtil\StringConverter.h" \ - "$(includedir)\IceUtil\Config.h" \ - "$(includedir)\IceUtil\Exception.h" \ - "$(includedir)\IceUtil\Shared.h" \ - "$(includedir)\IceUtil\Atomic.h" \ - "$(includedir)\IceUtil\Handle.h" \ - "$(includedir)\Ice\InstanceF.h" \ - "$(includedir)\Ice\Handle.h" \ - "$(includedir)\Ice\Config.h" \ - "$(includedir)\Ice\Object.h" \ - "$(includedir)\IceUtil\Mutex.h" \ - "$(includedir)\IceUtil\Lock.h" \ - "$(includedir)\IceUtil\ThreadException.h" \ - "$(includedir)\IceUtil\Time.h" \ - "$(includedir)\IceUtil\MutexProtocol.h" \ - "$(includedir)\Ice\ObjectF.h" \ - "$(includedir)\Ice\ProxyF.h" \ - "$(includedir)\Ice\ProxyHandle.h" \ - "$(includedir)\Ice\IncomingAsyncF.h" \ - "$(includedir)\Ice\Current.h" \ - "$(includedir)\Ice\Exception.h" \ - "$(includedir)\Ice\Format.h" \ - "$(includedir)\Ice\StreamF.h" \ - "$(includedir)\Ice\LocalObject.h" \ - "$(includedir)\Ice\LocalObjectF.h" \ - "$(includedir)\Ice\StreamHelpers.h" \ - "$(includedir)\IceUtil\ScopedArray.h" \ - "$(includedir)\IceUtil\Iterator.h" \ - "$(includedir)\IceUtil\Optional.h" \ - "$(includedir)\Ice\ObjectAdapterF.h" \ - "$(includedir)\IceUtil\UndefSysMacros.h" \ - "$(includedir)\IceUtil\PopDisableWarnings.h" \ - "$(includedir)\Ice\ConnectionF.h" \ - "$(includedir)\Ice\Identity.h" \ - "$(includedir)\Ice\Version.h" \ - "$(includedir)\Ice\ObjectFactoryF.h" \ - "$(includedir)\Ice\ObjectFactoryManagerF.h" \ - "$(includedir)\Ice\Buffer.h" \ - "$(includedir)\Ice\Protocol.h" \ - "$(includedir)\Ice\SlicedDataF.h" \ - "$(includedir)\Ice\UserExceptionFactory.h" \ - "$(includedir)\Ice\FactoryTable.h" \ - "$(includedir)\IceUtil\StringUtil.h" \ - "V32FormatDB.h" \ - "$(includedir)\Freeze\Map.h" \ - "$(includedir)\Ice\Ice.h" \ - "$(includedir)\Ice\DeprecatedStringConverter.h" \ - "$(includedir)\Ice\CommunicatorF.h" \ - "$(includedir)\Ice\Plugin.h" \ - "$(includedir)\Ice\LoggerF.h" \ - "$(includedir)\Ice\BuiltinSequences.h" \ - "$(includedir)\Ice\Initialize.h" \ - "$(includedir)\IceUtil\Timer.h" \ - "$(includedir)\IceUtil\Thread.h" \ - "$(includedir)\IceUtil\Monitor.h" \ - "$(includedir)\IceUtil\Cond.h" \ - "$(includedir)\Ice\PropertiesF.h" \ - "$(includedir)\Ice\Proxy.h" \ - "$(includedir)\Ice\ProxyFactoryF.h" \ - "$(includedir)\Ice\ConnectionIF.h" \ - "$(includedir)\Ice\RequestHandlerF.h" \ - "$(includedir)\Ice\EndpointF.h" \ - "$(includedir)\Ice\EndpointTypes.h" \ - "$(includedir)\Ice\ReferenceF.h" \ - "$(includedir)\Ice\BatchRequestQueueF.h" \ - "$(includedir)\Ice\AsyncResult.h" \ - "$(includedir)\IceUtil\UniquePtr.h" \ - "$(includedir)\Ice\AsyncResultF.h" \ - "$(includedir)\Ice\ObserverHelper.h" \ - "$(includedir)\Ice\Instrumentation.h" \ - "$(includedir)\Ice\InstrumentationF.h" \ - "$(includedir)\Ice\Dispatcher.h" \ - "$(includedir)\Ice\BatchRequestInterceptor.h" \ - "$(includedir)\Ice\LocalException.h" \ - "$(includedir)\Ice\PropertiesAdmin.h" \ - "$(includedir)\Ice\GCObject.h" \ - "$(includedir)\IceUtil\MutexPtrLock.h" \ - "$(includedir)\Ice\Incoming.h" \ - "$(includedir)\Ice\ServantLocatorF.h" \ - "$(includedir)\Ice\ServantManagerF.h" \ - "$(includedir)\Ice\ResponseHandlerF.h" \ - "$(includedir)\Ice\IncomingAsync.h" \ - "$(includedir)\Ice\Properties.h" \ - "$(includedir)\Ice\Logger.h" \ - "$(includedir)\Ice\LoggerUtil.h" \ - "$(includedir)\Ice\RemoteLogger.h" \ - "$(includedir)\Ice\FactoryTableInit.h" \ - "$(includedir)\Ice\DefaultObjectFactory.h" \ - "$(includedir)\Ice\ObjectFactory.h" \ - "$(includedir)\Ice\Communicator.h" \ - "$(includedir)\Ice\RouterF.h" \ - "$(includedir)\Ice\LocatorF.h" \ - "$(includedir)\Ice\PluginF.h" \ - "$(includedir)\Ice\ImplicitContextF.h" \ - "$(includedir)\Ice\FacetMap.h" \ - "$(includedir)\Ice\CommunicatorAsync.h" \ - "$(includedir)\Ice\ObjectAdapter.h" \ - "$(includedir)\Ice\Endpoint.h" \ - "$(includedir)\Ice\ServantLocator.h" \ - "$(includedir)\Ice\SlicedData.h" \ - "$(includedir)\Ice\OutgoingAsync.h" \ - "$(includedir)\Ice\OutgoingAsyncF.h" \ - "$(includedir)\Ice\Process.h" \ - "$(includedir)\Ice\Application.h" \ - "$(includedir)\Ice\Connection.h" \ - "$(includedir)\Ice\ConnectionAsync.h" \ - "$(includedir)\Ice\Functional.h" \ - "$(includedir)\IceUtil\Functional.h" \ - "$(includedir)\Ice\Stream.h" \ - "$(includedir)\Ice\ImplicitContext.h" \ - "$(includedir)\Ice\Locator.h" \ - "$(includedir)\Ice\ProcessF.h" \ - "$(includedir)\Ice\Router.h" \ - "$(includedir)\Ice\DispatchInterceptor.h" \ - "$(includedir)\Ice\NativePropertiesAdmin.h" \ - "$(includedir)\Ice\Metrics.h" \ - "$(includedir)\Ice\SliceChecksums.h" \ - "$(includedir)\Ice\SliceChecksumDict.h" \ - "$(includedir)\Ice\Service.h" \ - "$(includedir)\Ice\RegisterPlugins.h" \ - "$(includedir)\Freeze\DB.h" \ - "$(includedir)\Freeze\Exception.h" \ - "$(includedir)\Freeze\Connection.h" \ - "$(includedir)\Freeze\Transaction.h" \ - "V32Format.h" \ - "LinkRecord.h" \ - "IceStormInternal.h" \ "$(includedir)\IceStorm\IceStorm.h" \ "$(includedir)\IceStorm\Metrics.h" \ "$(includedir)\IceStorm\Config.h" \ + "Instance.h" \ "Election.h" \ - "SubscriberRecord.h" \ "LLURecord.h" \ + "Instrumentation.h" \ Election.obj: \ Election.cpp \ @@ -2826,186 +2172,6 @@ SubscriberRecord.obj: \ "$(includedir)\IceUtil\Thread.h" \ "$(includedir)\Ice\OutgoingAsyncF.h" \ -V31Format.obj: \ - V31Format.cpp \ - "V31Format.h" \ - "$(includedir)\IceUtil\PushDisableWarnings.h" \ - "$(includedir)\Ice\ProxyF.h" \ - "$(includedir)\IceUtil\Shared.h" \ - "$(includedir)\IceUtil\Config.h" \ - "$(includedir)\IceUtil\Atomic.h" \ - "$(includedir)\Ice\Config.h" \ - "$(includedir)\Ice\ProxyHandle.h" \ - "$(includedir)\IceUtil\Handle.h" \ - "$(includedir)\IceUtil\Exception.h" \ - "$(includedir)\Ice\ObjectF.h" \ - "$(includedir)\Ice\Handle.h" \ - "$(includedir)\Ice\Exception.h" \ - "$(includedir)\Ice\Format.h" \ - "$(includedir)\Ice\StreamF.h" \ - "$(includedir)\Ice\LocalObject.h" \ - "$(includedir)\Ice\LocalObjectF.h" \ - "$(includedir)\Ice\StreamHelpers.h" \ - "$(includedir)\IceUtil\ScopedArray.h" \ - "$(includedir)\IceUtil\Iterator.h" \ - "$(includedir)\Ice\Proxy.h" \ - "$(includedir)\IceUtil\Mutex.h" \ - "$(includedir)\IceUtil\Lock.h" \ - "$(includedir)\IceUtil\ThreadException.h" \ - "$(includedir)\IceUtil\Time.h" \ - "$(includedir)\IceUtil\MutexProtocol.h" \ - "$(includedir)\Ice\ProxyFactoryF.h" \ - "$(includedir)\Ice\ConnectionIF.h" \ - "$(includedir)\Ice\RequestHandlerF.h" \ - "$(includedir)\Ice\EndpointF.h" \ - "$(includedir)\IceUtil\Optional.h" \ - "$(includedir)\IceUtil\UndefSysMacros.h" \ - "$(includedir)\IceUtil\PopDisableWarnings.h" \ - "$(includedir)\Ice\EndpointTypes.h" \ - "$(includedir)\Ice\ObjectAdapterF.h" \ - "$(includedir)\Ice\ReferenceF.h" \ - "$(includedir)\Ice\BatchRequestQueueF.h" \ - "$(includedir)\Ice\AsyncResult.h" \ - "$(includedir)\IceUtil\Monitor.h" \ - "$(includedir)\IceUtil\Cond.h" \ - "$(includedir)\IceUtil\UniquePtr.h" \ - "$(includedir)\Ice\CommunicatorF.h" \ - "$(includedir)\Ice\ConnectionF.h" \ - "$(includedir)\Ice\InstanceF.h" \ - "$(includedir)\Ice\AsyncResultF.h" \ - "$(includedir)\Ice\ObserverHelper.h" \ - "$(includedir)\Ice\Instrumentation.h" \ - "$(includedir)\Ice\Current.h" \ - "$(includedir)\Ice\Identity.h" \ - "$(includedir)\Ice\Version.h" \ - "$(includedir)\Ice\BasicStream.h" \ - "$(includedir)\IceUtil\StringConverter.h" \ - "$(includedir)\Ice\Object.h" \ - "$(includedir)\Ice\IncomingAsyncF.h" \ - "$(includedir)\Ice\ObjectFactoryF.h" \ - "$(includedir)\Ice\ObjectFactoryManagerF.h" \ - "$(includedir)\Ice\Buffer.h" \ - "$(includedir)\Ice\Protocol.h" \ - "$(includedir)\Ice\SlicedDataF.h" \ - "$(includedir)\Ice\UserExceptionFactory.h" \ - "$(includedir)\Ice\FactoryTable.h" \ - "$(includedir)\Ice\GCObject.h" \ - "$(includedir)\IceUtil\MutexPtrLock.h" \ - "$(includedir)\Ice\Incoming.h" \ - "$(includedir)\Ice\ServantLocatorF.h" \ - "$(includedir)\Ice\ServantManagerF.h" \ - "$(includedir)\Ice\ResponseHandlerF.h" \ - "$(includedir)\Ice\FactoryTableInit.h" \ - "$(includedir)\Ice\DefaultObjectFactory.h" \ - "$(includedir)\Ice\ObjectFactory.h" \ - "LinkRecord.h" \ - "IceStormInternal.h" \ - "$(includedir)\IceStorm\IceStorm.h" \ - "$(includedir)\Ice\SliceChecksumDict.h" \ - "$(includedir)\IceStorm\Metrics.h" \ - "$(includedir)\Ice\Metrics.h" \ - "$(includedir)\Ice\BuiltinSequences.h" \ - "$(includedir)\IceStorm\Config.h" \ - "Election.h" \ - "SubscriberRecord.h" \ - "LLURecord.h" \ - "$(includedir)\Ice\LocalException.h" \ - "$(includedir)\Ice\Outgoing.h" \ - "$(includedir)\Ice\OutgoingAsync.h" \ - "$(includedir)\IceUtil\Timer.h" \ - "$(includedir)\IceUtil\Thread.h" \ - "$(includedir)\Ice\OutgoingAsyncF.h" \ - -V32Format.obj: \ - V32Format.cpp \ - "V32Format.h" \ - "$(includedir)\IceUtil\PushDisableWarnings.h" \ - "$(includedir)\Ice\ProxyF.h" \ - "$(includedir)\IceUtil\Shared.h" \ - "$(includedir)\IceUtil\Config.h" \ - "$(includedir)\IceUtil\Atomic.h" \ - "$(includedir)\Ice\Config.h" \ - "$(includedir)\Ice\ProxyHandle.h" \ - "$(includedir)\IceUtil\Handle.h" \ - "$(includedir)\IceUtil\Exception.h" \ - "$(includedir)\Ice\ObjectF.h" \ - "$(includedir)\Ice\Handle.h" \ - "$(includedir)\Ice\Exception.h" \ - "$(includedir)\Ice\Format.h" \ - "$(includedir)\Ice\StreamF.h" \ - "$(includedir)\Ice\LocalObject.h" \ - "$(includedir)\Ice\LocalObjectF.h" \ - "$(includedir)\Ice\StreamHelpers.h" \ - "$(includedir)\IceUtil\ScopedArray.h" \ - "$(includedir)\IceUtil\Iterator.h" \ - "$(includedir)\Ice\Proxy.h" \ - "$(includedir)\IceUtil\Mutex.h" \ - "$(includedir)\IceUtil\Lock.h" \ - "$(includedir)\IceUtil\ThreadException.h" \ - "$(includedir)\IceUtil\Time.h" \ - "$(includedir)\IceUtil\MutexProtocol.h" \ - "$(includedir)\Ice\ProxyFactoryF.h" \ - "$(includedir)\Ice\ConnectionIF.h" \ - "$(includedir)\Ice\RequestHandlerF.h" \ - "$(includedir)\Ice\EndpointF.h" \ - "$(includedir)\IceUtil\Optional.h" \ - "$(includedir)\IceUtil\UndefSysMacros.h" \ - "$(includedir)\IceUtil\PopDisableWarnings.h" \ - "$(includedir)\Ice\EndpointTypes.h" \ - "$(includedir)\Ice\ObjectAdapterF.h" \ - "$(includedir)\Ice\ReferenceF.h" \ - "$(includedir)\Ice\BatchRequestQueueF.h" \ - "$(includedir)\Ice\AsyncResult.h" \ - "$(includedir)\IceUtil\Monitor.h" \ - "$(includedir)\IceUtil\Cond.h" \ - "$(includedir)\IceUtil\UniquePtr.h" \ - "$(includedir)\Ice\CommunicatorF.h" \ - "$(includedir)\Ice\ConnectionF.h" \ - "$(includedir)\Ice\InstanceF.h" \ - "$(includedir)\Ice\AsyncResultF.h" \ - "$(includedir)\Ice\ObserverHelper.h" \ - "$(includedir)\Ice\Instrumentation.h" \ - "$(includedir)\Ice\Current.h" \ - "$(includedir)\Ice\Identity.h" \ - "$(includedir)\Ice\Version.h" \ - "$(includedir)\Ice\BasicStream.h" \ - "$(includedir)\IceUtil\StringConverter.h" \ - "$(includedir)\Ice\Object.h" \ - "$(includedir)\Ice\IncomingAsyncF.h" \ - "$(includedir)\Ice\ObjectFactoryF.h" \ - "$(includedir)\Ice\ObjectFactoryManagerF.h" \ - "$(includedir)\Ice\Buffer.h" \ - "$(includedir)\Ice\Protocol.h" \ - "$(includedir)\Ice\SlicedDataF.h" \ - "$(includedir)\Ice\UserExceptionFactory.h" \ - "$(includedir)\Ice\FactoryTable.h" \ - "$(includedir)\Ice\GCObject.h" \ - "$(includedir)\IceUtil\MutexPtrLock.h" \ - "$(includedir)\Ice\Incoming.h" \ - "$(includedir)\Ice\ServantLocatorF.h" \ - "$(includedir)\Ice\ServantManagerF.h" \ - "$(includedir)\Ice\ResponseHandlerF.h" \ - "$(includedir)\Ice\FactoryTableInit.h" \ - "$(includedir)\Ice\DefaultObjectFactory.h" \ - "$(includedir)\Ice\ObjectFactory.h" \ - "LinkRecord.h" \ - "IceStormInternal.h" \ - "$(includedir)\IceStorm\IceStorm.h" \ - "$(includedir)\Ice\SliceChecksumDict.h" \ - "$(includedir)\IceStorm\Metrics.h" \ - "$(includedir)\Ice\Metrics.h" \ - "$(includedir)\Ice\BuiltinSequences.h" \ - "$(includedir)\IceStorm\Config.h" \ - "Election.h" \ - "SubscriberRecord.h" \ - "LLURecord.h" \ - "$(includedir)\Ice\LocalException.h" \ - "$(includedir)\Ice\Outgoing.h" \ - "$(includedir)\Ice\OutgoingAsync.h" \ - "$(includedir)\IceUtil\Timer.h" \ - "$(includedir)\IceUtil\Thread.h" \ - "$(includedir)\Ice\OutgoingAsyncF.h" \ - Admin.obj: \ Admin.cpp \ "$(includedir)\IceUtil\Options.h" \ @@ -3518,155 +2684,3 @@ Scanner.obj: \ "$(includedir)\IceStorm\Metrics.h" \ "$(includedir)\IceStorm\Config.h" \ "Grammar.h" \ - -Migrate.obj: \ - Migrate.cpp \ - "$(includedir)\Freeze\Freeze.h" \ - "$(includedir)\IceUtil\PushDisableWarnings.h" \ - "$(includedir)\Freeze\Initialize.h" \ - "$(includedir)\Ice\Ice.h" \ - "$(includedir)\Ice\Config.h" \ - "$(includedir)\IceUtil\Config.h" \ - "$(includedir)\Ice\DeprecatedStringConverter.h" \ - "$(includedir)\Ice\CommunicatorF.h" \ - "$(includedir)\Ice\ProxyF.h" \ - "$(includedir)\IceUtil\Shared.h" \ - "$(includedir)\IceUtil\Atomic.h" \ - "$(includedir)\Ice\ProxyHandle.h" \ - "$(includedir)\IceUtil\Handle.h" \ - "$(includedir)\IceUtil\Exception.h" \ - "$(includedir)\Ice\ObjectF.h" \ - "$(includedir)\Ice\Handle.h" \ - "$(includedir)\Ice\Exception.h" \ - "$(includedir)\Ice\Format.h" \ - "$(includedir)\Ice\StreamF.h" \ - "$(includedir)\Ice\LocalObject.h" \ - "$(includedir)\Ice\LocalObjectF.h" \ - "$(includedir)\Ice\StreamHelpers.h" \ - "$(includedir)\IceUtil\ScopedArray.h" \ - "$(includedir)\IceUtil\Iterator.h" \ - "$(includedir)\IceUtil\Optional.h" \ - "$(includedir)\IceUtil\UndefSysMacros.h" \ - "$(includedir)\IceUtil\PopDisableWarnings.h" \ - "$(includedir)\IceUtil\StringConverter.h" \ - "$(includedir)\Ice\Plugin.h" \ - "$(includedir)\Ice\LoggerF.h" \ - "$(includedir)\Ice\BuiltinSequences.h" \ - "$(includedir)\Ice\Initialize.h" \ - "$(includedir)\IceUtil\Timer.h" \ - "$(includedir)\IceUtil\Thread.h" \ - "$(includedir)\IceUtil\Mutex.h" \ - "$(includedir)\IceUtil\Lock.h" \ - "$(includedir)\IceUtil\ThreadException.h" \ - "$(includedir)\IceUtil\Time.h" \ - "$(includedir)\IceUtil\MutexProtocol.h" \ - "$(includedir)\IceUtil\Monitor.h" \ - "$(includedir)\IceUtil\Cond.h" \ - "$(includedir)\Ice\PropertiesF.h" \ - "$(includedir)\Ice\Proxy.h" \ - "$(includedir)\Ice\ProxyFactoryF.h" \ - "$(includedir)\Ice\ConnectionIF.h" \ - "$(includedir)\Ice\RequestHandlerF.h" \ - "$(includedir)\Ice\EndpointF.h" \ - "$(includedir)\Ice\EndpointTypes.h" \ - "$(includedir)\Ice\ObjectAdapterF.h" \ - "$(includedir)\Ice\ReferenceF.h" \ - "$(includedir)\Ice\BatchRequestQueueF.h" \ - "$(includedir)\Ice\AsyncResult.h" \ - "$(includedir)\IceUtil\UniquePtr.h" \ - "$(includedir)\Ice\ConnectionF.h" \ - "$(includedir)\Ice\InstanceF.h" \ - "$(includedir)\Ice\AsyncResultF.h" \ - "$(includedir)\Ice\ObserverHelper.h" \ - "$(includedir)\Ice\Instrumentation.h" \ - "$(includedir)\Ice\Current.h" \ - "$(includedir)\Ice\Identity.h" \ - "$(includedir)\Ice\Version.h" \ - "$(includedir)\Ice\BasicStream.h" \ - "$(includedir)\Ice\Object.h" \ - "$(includedir)\Ice\IncomingAsyncF.h" \ - "$(includedir)\Ice\ObjectFactoryF.h" \ - "$(includedir)\Ice\ObjectFactoryManagerF.h" \ - "$(includedir)\Ice\Buffer.h" \ - "$(includedir)\Ice\Protocol.h" \ - "$(includedir)\Ice\SlicedDataF.h" \ - "$(includedir)\Ice\UserExceptionFactory.h" \ - "$(includedir)\Ice\FactoryTable.h" \ - "$(includedir)\Ice\InstrumentationF.h" \ - "$(includedir)\Ice\Dispatcher.h" \ - "$(includedir)\Ice\BatchRequestInterceptor.h" \ - "$(includedir)\Ice\LocalException.h" \ - "$(includedir)\Ice\PropertiesAdmin.h" \ - "$(includedir)\Ice\GCObject.h" \ - "$(includedir)\IceUtil\MutexPtrLock.h" \ - "$(includedir)\Ice\Incoming.h" \ - "$(includedir)\Ice\ServantLocatorF.h" \ - "$(includedir)\Ice\ServantManagerF.h" \ - "$(includedir)\Ice\ResponseHandlerF.h" \ - "$(includedir)\Ice\IncomingAsync.h" \ - "$(includedir)\Ice\Properties.h" \ - "$(includedir)\Ice\Logger.h" \ - "$(includedir)\Ice\LoggerUtil.h" \ - "$(includedir)\Ice\RemoteLogger.h" \ - "$(includedir)\Ice\FactoryTableInit.h" \ - "$(includedir)\Ice\DefaultObjectFactory.h" \ - "$(includedir)\Ice\ObjectFactory.h" \ - "$(includedir)\Ice\Communicator.h" \ - "$(includedir)\Ice\RouterF.h" \ - "$(includedir)\Ice\LocatorF.h" \ - "$(includedir)\Ice\PluginF.h" \ - "$(includedir)\Ice\ImplicitContextF.h" \ - "$(includedir)\Ice\FacetMap.h" \ - "$(includedir)\Ice\CommunicatorAsync.h" \ - "$(includedir)\Ice\ObjectAdapter.h" \ - "$(includedir)\Ice\Endpoint.h" \ - "$(includedir)\Ice\ServantLocator.h" \ - "$(includedir)\Ice\SlicedData.h" \ - "$(includedir)\Ice\OutgoingAsync.h" \ - "$(includedir)\Ice\OutgoingAsyncF.h" \ - "$(includedir)\Ice\Process.h" \ - "$(includedir)\Ice\Application.h" \ - "$(includedir)\Ice\Connection.h" \ - "$(includedir)\Ice\ConnectionAsync.h" \ - "$(includedir)\Ice\Functional.h" \ - "$(includedir)\IceUtil\Functional.h" \ - "$(includedir)\Ice\Stream.h" \ - "$(includedir)\Ice\ImplicitContext.h" \ - "$(includedir)\Ice\Locator.h" \ - "$(includedir)\Ice\ProcessF.h" \ - "$(includedir)\Ice\Router.h" \ - "$(includedir)\Ice\DispatchInterceptor.h" \ - "$(includedir)\Ice\NativePropertiesAdmin.h" \ - "$(includedir)\Ice\Metrics.h" \ - "$(includedir)\Ice\SliceChecksums.h" \ - "$(includedir)\Ice\SliceChecksumDict.h" \ - "$(includedir)\Ice\Service.h" \ - "$(includedir)\Ice\RegisterPlugins.h" \ - "$(includedir)\Freeze\EvictorF.h" \ - "$(includedir)\Freeze\ConnectionF.h" \ - "$(includedir)\Freeze\Index.h" \ - "$(includedir)\Freeze\DB.h" \ - "$(includedir)\Freeze\Transaction.h" \ - "$(includedir)\Freeze\BackgroundSaveEvictor.h" \ - "$(includedir)\Freeze\Evictor.h" \ - "$(includedir)\Freeze\Exception.h" \ - "$(includedir)\Freeze\TransactionalEvictor.h" \ - "$(includedir)\Freeze\Map.h" \ - "$(includedir)\Freeze\Connection.h" \ - "$(includedir)\Freeze\TransactionHolder.h" \ - "$(includedir)\Freeze\Catalog.h" \ - "$(includedir)\Freeze\CatalogData.h" \ - "IceStormInternal.h" \ - "$(includedir)\IceStorm\IceStorm.h" \ - "$(includedir)\IceStorm\Metrics.h" \ - "$(includedir)\IceStorm\Config.h" \ - "Election.h" \ - "SubscriberRecord.h" \ - "LLURecord.h" \ - "SubscriberMap.h" \ - "LLUMap.h" \ - "V32FormatDB.h" \ - "V32Format.h" \ - "LinkRecord.h" \ - "V31FormatDB.h" \ - "V31Format.h" \ diff --git a/cpp/src/IceStorm/.gitignore b/cpp/src/IceStorm/.gitignore index 809f31e4118..6ede462d77f 100644 --- a/cpp/src/IceStorm/.gitignore +++ b/cpp/src/IceStorm/.gitignore @@ -7,23 +7,13 @@ IceStormInternal.cpp LLURecord.cpp SubscriberRecord.cpp LinkRecord.cpp -V32Format.cpp -V31Format.cpp Instrumentation.h Election.h IceStormInternal.h LLURecord.h SubscriberRecord.h LinkRecord.h -V32Format.h -V31Format.h -SubscriberMap.h -SubscriberMap.cpp -V32FormatDB.h -V32FormatDB.cpp -V31FormatDB.h -V31FormatDB.cpp -LLUMap.h -LLUMap.cpp LinkRecord.h LinkRecord.cpp +DBTypes.h +DBTypes.cpp diff --git a/cpp/src/IceStorm/V32Format.ice b/cpp/src/IceStorm/DBTypes.ice index 377889325f5..4cf063c6eb4 100644 --- a/cpp/src/IceStorm/V32Format.ice +++ b/cpp/src/IceStorm/DBTypes.ice @@ -11,13 +11,22 @@ [["cpp:header-ext:h"]] -#include <IceStorm/LinkRecord.ice> +#include <IceStorm/SubscriberRecord.ice> +#include <IceStorm/LLURecord.ice> -module IceStorm +module IceStormElection { +dictionary<string, LogUpdate> StringLogUpdateDict; +}; -/** sequence of link records. */ -sequence<LinkRecord> LinkRecordSeq; +module IceStorm +{ +dictionary<SubscriberRecordKey, SubscriberRecord> SubscriberRecordDict; -}; // End module IceStorm +struct AllData +{ + IceStormElection::StringLogUpdateDict llus; + IceStorm::SubscriberRecordDict subscribers; +}; +}; diff --git a/cpp/src/IceStorm/IceStormDB.cpp b/cpp/src/IceStorm/IceStormDB.cpp new file mode 100644 index 00000000000..2ccd84e5309 --- /dev/null +++ b/cpp/src/IceStorm/IceStormDB.cpp @@ -0,0 +1,300 @@ +// ********************************************************************** +// +// Copyright (c) 2003-2015 ZeroC, Inc. All rights reserved. +// +// This copy of Ice is licensed to you under the terms described in the +// ICE_LICENSE file included in this distribution. +// +// ********************************************************************** + +#include <IceUtil/Options.h> +#include <Ice/Application.h> +#include <IceDB/IceDB.h> +#include <IceStorm/DBTypes.h> +#include <IcePatch2Lib/Util.h> +#include <IceUtil/DisableWarnings.h> + +using namespace std; +using namespace Ice; +using namespace IceStorm; +using namespace IceStormElection; + +class Client : public Application +{ +public: + + void usage(); + virtual int run(int, char*[]); +}; + +#ifdef _WIN32 + +int +wmain(int argc, wchar_t* argv[]) + +#else + +int +main(int argc, char* argv[]) + +#endif +{ + Client app; + return app.main(argc, argv); +} + +void +Client::usage() +{ + cerr << "Usage: " << appName() << " <options>\n"; + cerr << + "Options:\n" + "-h, --help Show this message.\n" + "-v, --version Display version.\n" + "--import FILE Import database from FILE.\n" + "--export FILE Export database to FILE.\n" + "--dbhome DIR The database directory.\n" + "-d, --debug Print debug messages." + ; +} + +int +Client::run(int argc, char* argv[]) +{ + IceUtilInternal::Options opts; + opts.addOpt("h", "help"); + opts.addOpt("v", "version"); + opts.addOpt("d", "debug"); + opts.addOpt("", "import", IceUtilInternal::Options::NeedArg); + opts.addOpt("", "export", IceUtilInternal::Options::NeedArg); + opts.addOpt("", "dbhome", IceUtilInternal::Options::NeedArg); + + vector<string> args; + try + { + args = opts.parse(argc, const_cast<const char**>(argv)); + } + catch(const IceUtilInternal::BadOptException& e) + { + cerr << e.reason << endl; + usage(); + return EXIT_FAILURE; + } + if(!args.empty()) + { + cerr << argv[0] << ": too many arguments" << endl; + usage(); + return EXIT_FAILURE; + } + + if(opts.isSet("help")) + { + usage(); + return EXIT_SUCCESS; + } + + if(opts.isSet("version")) + { + cout << ICE_STRING_VERSION << endl; + return EXIT_SUCCESS; + } + + if((!opts.isSet("import") && !opts.isSet("export")) || (opts.isSet("import") && opts.isSet("export"))) + { + cerr << "Either --import or --export must be set" << endl; + usage(); + return EXIT_FAILURE; + } + + if(!opts.isSet("dbhome")) + { + cerr << "Database path must be specified" << endl; + usage(); + return EXIT_FAILURE; + } + + bool debug = opts.isSet("debug"); + bool import = opts.isSet("import"); + string dbFile = opts.optArg(import ? "import" : "export"); + string dbPath = opts.optArg("dbhome"); + + try + { + IceStorm::AllData data; + + IceDB::IceContext dbContext; + dbContext.communicator = communicator(); + dbContext.encoding = { 1, 1 }; + + if(import) + { + cout << "Importing database to directory " << dbPath << " from file " << dbFile << endl; + + if(!IceUtilInternal::directoryExists(dbPath)) + { + cerr << "Output directory does not exist: " << dbPath << endl; + return EXIT_FAILURE; + } + + StringSeq files = IcePatch2Internal::readDirectory(dbPath); + if(!files.empty()) + { + cerr << "Output directory is not empty: " << dbPath << endl; + return EXIT_FAILURE; + } + + ifstream fs(dbFile, ios::binary); + if(fs.fail()) + { + cerr << "Could not open input file: " << strerror(errno) << endl; + return EXIT_FAILURE; + } + fs.unsetf(ios::skipws); + + fs.seekg(0, ios::end); + streampos fileSize = fs.tellg(); + fs.seekg(0, ios::beg); + + vector<Ice::Byte> buf; + buf.reserve(static_cast<size_t>(fileSize)); + buf.insert(buf.begin(), istream_iterator<Ice::Byte>(fs), istream_iterator<Ice::Byte>()); + + fs.close(); + + string type; + int version; + + Ice::InputStreamPtr stream = Ice::wrapInputStream(communicator(), buf, dbContext.encoding); + stream->read(type); + if(type != "IceStorm") + { + cerr << "Incorrect input file type: " << type << endl; + return EXIT_FAILURE; + } + stream->read(version); + stream->read(data); + + { + IceDB::Env env(dbPath, 2); + IceDB::ReadWriteTxn txn(env); + + if(debug) + { + cout << "Writing LLU Map:" << endl; + } + + IceDB::Dbi<string, LogUpdate, IceDB::IceContext, Ice::OutputStreamPtr> + lluMap(txn, "llu", dbContext, MDB_CREATE); + + for(StringLogUpdateDict::const_iterator p = data.llus.begin(); p != data.llus.end(); ++p) + { + if(debug) + { + cout << " KEY = " << p->first << endl; + } + lluMap.put(txn, p->first, p->second); + } + + if(debug) + { + cout << "Writing Subscriber Map:" << endl; + } + + IceDB::Dbi<SubscriberRecordKey, SubscriberRecord, IceDB::IceContext, Ice::OutputStreamPtr> + subscriberMap(txn, "subscribers", dbContext, MDB_CREATE); + + for(SubscriberRecordDict::const_iterator q = data.subscribers.begin(); q != data.subscribers.end(); ++q) + { + if(debug) + { + cout << " KEY = TOPIC(" << communicator()->identityToString(q->first.topic) + << ") ID(" << communicator()->identityToString(q->first.id) << ")" <<endl; + } + subscriberMap.put(txn, q->first, q->second); + } + + txn.commit(); + env.close(); + } + } + else + { + cout << "Exporting database from directory " << dbPath << " to file " << dbFile << endl; + + { + IceDB::Env env(dbPath, 2); + IceDB::ReadOnlyTxn txn(env); + + if(debug) + { + cout << "Reading LLU Map:" << endl; + } + + IceDB::Dbi<string, LogUpdate, IceDB::IceContext, Ice::OutputStreamPtr> + lluMap(txn, "llu", dbContext, 0); + + string s; + LogUpdate llu; + IceDB::ReadOnlyCursor<string, LogUpdate, IceDB::IceContext, Ice::OutputStreamPtr> + lluCursor(lluMap, txn); + while(lluCursor.get(s, llu, MDB_NEXT)) + { + if(debug) + { + cout << " KEY = " << s << endl; + } + data.llus.insert(std::make_pair(s, llu)); + } + lluCursor.close(); + + if(debug) + { + cout << "Reading Subscriber Map:" << endl; + } + + IceDB::Dbi<SubscriberRecordKey, SubscriberRecord, IceDB::IceContext, Ice::OutputStreamPtr> + subscriberMap(txn, "subscribers", dbContext, 0); + + SubscriberRecordKey key; + SubscriberRecord record; + IceDB::ReadOnlyCursor<SubscriberRecordKey, SubscriberRecord, IceDB::IceContext, Ice::OutputStreamPtr> + subCursor(subscriberMap, txn); + while(subCursor.get(key, record, MDB_NEXT)) + { + if(debug) + { + cout << " KEY = TOPIC(" << communicator()->identityToString(key.topic) + << ") ID(" << communicator()->identityToString(key.id) << ")" <<endl; + } + data.subscribers.insert(std::make_pair(key, record)); + } + subCursor.close(); + + txn.abort(); + env.close(); + } + + Ice::OutputStreamPtr stream = Ice::createOutputStream(communicator(), dbContext.encoding); + stream->write("IceStorm"); + stream->write(ICE_INT_VERSION); + stream->write(data); + pair<const Ice::Byte*, const Ice::Byte*> buf = stream->finished(); + + ofstream fs(dbFile, ios::binary); + if(fs.fail()) + { + cerr << "Could not open output file: " << strerror(errno) << endl; + return EXIT_FAILURE; + } + fs.write(reinterpret_cast<const char*>(buf.first), buf.second - buf.first); + fs.close(); + } + } + catch(const IceUtil::Exception& ex) + { + cerr << (import ? "Import" : "Export") << " failed:\n" << ex << endl; + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} diff --git a/cpp/src/IceStorm/IceStormDB.rc b/cpp/src/IceStorm/IceStormDB.rc new file mode 100644 index 00000000000..bb902f1f62b --- /dev/null +++ b/cpp/src/IceStorm/IceStormDB.rc @@ -0,0 +1,34 @@ +#include "winver.h" + +VS_VERSION_INFO VERSIONINFO + FILEVERSION 3,6,1,0 + PRODUCTVERSION 3,6,1,0 + FILEFLAGSMASK VS_FFI_FILEFLAGSMASK +#ifdef _DEBUG + FILEFLAGS VS_FF_DEBUG +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x4L + FILETYPE VFT_APP + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904e4" + BEGIN + VALUE "CompanyName", "ZeroC, Inc.\0" + VALUE "FileDescription", "IceStormDB\0" + VALUE "FileVersion", "3.6.1\0" + VALUE "InternalName", "icestormdb\0" + VALUE "LegalCopyright", "\251 2003-2015 ZeroC, Inc.\0" + VALUE "OriginalFilename", "icestormdb.exe\0" + VALUE "ProductName", "Ice\0" + VALUE "ProductVersion", "3.6.1\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1252 + END +END diff --git a/cpp/src/IceStorm/Instance.cpp b/cpp/src/IceStorm/Instance.cpp index 35c74c96ba3..5be83c5bb99 100644 --- a/cpp/src/IceStorm/Instance.cpp +++ b/cpp/src/IceStorm/Instance.cpp @@ -21,6 +21,12 @@ using namespace std; using namespace IceStorm; using namespace IceStormElection; +using namespace IceStormInternal; + +namespace IceStormInternal +{ +extern IceDB::IceContext dbContext; +} void TopicReaper::add(const string& name) @@ -38,6 +44,48 @@ TopicReaper::consumeReapedTopics() return reaped; } +PersistentInstance::PersistentInstance( + const string& instanceName, + const string& name, + const Ice::CommunicatorPtr& communicator, + const Ice::ObjectAdapterPtr& publishAdapter, + const Ice::ObjectAdapterPtr& topicAdapter, + const Ice::ObjectAdapterPtr& nodeAdapter, + const NodePrx& nodeProxy) : + Instance(instanceName, name, communicator, publishAdapter, topicAdapter, nodeAdapter, nodeProxy), + _dbLock(communicator->getProperties()->getPropertyWithDefault(name + ".LMDB.Path", name) + "/icedb.lock"), + _dbEnv(communicator->getProperties()->getPropertyWithDefault(name + ".LMDB.Path", name), 2) +{ + try + { + dbContext.communicator = communicator; + dbContext.encoding = { 1, 1 }; + + IceDB::ReadWriteTxn txn(_dbEnv); + + _lluMap = LLUMap(txn, "llu", dbContext, MDB_CREATE); + _subscriberMap = SubscriberMap(txn, "subscribers", dbContext, MDB_CREATE, compareSubscriberRecordKey); + + txn.commit(); + } + catch(...) + { + shutdown(); + destroy(); + + throw; + } +} + +void +PersistentInstance::destroy() +{ + _dbEnv.close(); + dbContext.communicator = 0; + + Instance::destroy(); +} + Instance::Instance( const string& instanceName, const string& name, diff --git a/cpp/src/IceStorm/Instance.h b/cpp/src/IceStorm/Instance.h index 02e78a26c00..49e7edaa089 100644 --- a/cpp/src/IceStorm/Instance.h +++ b/cpp/src/IceStorm/Instance.h @@ -17,6 +17,7 @@ #include <IceUtil/Time.h> #include <IceStorm/Election.h> #include <IceStorm/Instrumentation.h> +#include <IceStorm/Util.h> namespace IceUtil { @@ -89,7 +90,7 @@ public: int sendTimeout() const; void shutdown(); - void destroy(); + virtual void destroy(); private: @@ -112,9 +113,37 @@ private: IceUtil::TimerPtr _batchFlusher; IceUtil::TimerPtr _timer; IceStorm::Instrumentation::TopicManagerObserverPtr _observer; + + }; typedef IceUtil::Handle<Instance> InstancePtr; +typedef IceDB::ReadWriteCursor<SubscriberRecordKey, SubscriberRecord, IceDB::IceContext, Ice::OutputStreamPtr> + SubscriberMapRWCursor; + +class PersistentInstance : public Instance +{ +public: + + PersistentInstance(const std::string&, const std::string&, const Ice::CommunicatorPtr&, + const Ice::ObjectAdapterPtr&, const Ice::ObjectAdapterPtr&, const Ice::ObjectAdapterPtr& = 0, + const IceStormElection::NodePrx& = 0); + + const IceDB::Env& dbEnv() const { return _dbEnv; } + LLUMap lluMap() const { return _lluMap; } + SubscriberMap subscriberMap() const { return _subscriberMap; } + + virtual void destroy(); + +private: + + IceUtilInternal::FileLock _dbLock; + IceDB::Env _dbEnv; + LLUMap _lluMap; + SubscriberMap _subscriberMap; +}; +typedef IceUtil::Handle<PersistentInstance> PersistentInstancePtr; + } // End namespace IceStorm #endif diff --git a/cpp/src/IceStorm/Makefile b/cpp/src/IceStorm/Makefile index 2e83e626554..b520301a05d 100644 --- a/cpp/src/IceStorm/Makefile +++ b/cpp/src/IceStorm/Makefile @@ -14,35 +14,29 @@ SONAME = $(call mksoname,IceStormService,$(SOVERSION)) LIBNAME = $(call mklibname,IceStormService) ADMIN = $(bindir)/icestormadmin -MIGRATE = $(bindir)/icestormmigrate +DB = $(bindir)/icestormdb LIBTARGETS = $(call mklibtargets,$(libdir)/$(LIBFILENAME),$(libdir)/$(SONAME),$(libdir)$(cpp11libdirsuffix)/$(LIBNAME)) -TARGETS = $(LIBTARGETS) $(ADMIN) $(MIGRATE) +TARGETS = $(LIBTARGETS) $(ADMIN) $(DB) -SLICE_OBJS = Election.o \ +LSLICE_OBJS = Election.o \ IceStormInternal.o \ Instrumentation.o \ LinkRecord.o \ LLURecord.o \ - SubscriberRecord.o \ - V31Format.o \ - V32Format.o + SubscriberRecord.o LIB_OBJS = Instance.o \ InstrumentationI.o \ - LLUMap.o \ NodeI.o \ Observers.o \ Service.o \ Subscriber.o \ - SubscriberMap.o \ TopicI.o \ TopicManagerI.o \ TraceLevels.o \ TransientTopicI.o \ TransientTopicManagerI.o \ Util.o \ - V31FormatDB.o \ - V32FormatDB.o \ $(SLICE_OBJS) AOBJS = Admin.o \ @@ -51,27 +45,26 @@ AOBJS = Admin.o \ Scanner.o \ $(SLICE_OBJS) -MOBJS = LLUMap.o \ - Migrate.o \ - SubscriberMap.o \ - V31FormatDB.o \ - V32FormatDB.o \ - $(SLICE_OBJS) +DBSLICE_OBJS = DBTypes.o + +DBOBJS = IceStormDB.o \ + $(DBSLICE_OBJS) + +SLICE_OBJS = $(LSLICE_OBJS) \ + $(DBSLICE_OBJS) OBJS = $(LIB_OBJS) \ $(AOBJS) \ - $(MOBJS) + $(DBOBJS) RPATH_DIR = $(LOADER_PATH)/../$(libsubdir) -SLICE2FREEZECMD = $(SLICE2FREEZE) -I../.. --ice --include-dir IceStorm $(ICECPPFLAGS) - include $(top_srcdir)/config/Make.rules CPPFLAGS := $(CPPFLAGS) -I.. $(READLINE_FLAGS) ICECPPFLAGS := $(ICECPPFLAGS) -I.. SLICE2CPPFLAGS := --ice --include-dir IceStorm $(SLICE2CPPFLAGS) -LINKWITH := $(BZIP2_RPATH_LINK) -lIceStorm -lIceGrid -lGlacier2 -lFreeze -lIceBox -lIce -lIceUtil +LINKWITH := $(BZIP2_RPATH_LINK) -lIceStorm -lIceGrid -lGlacier2 -lIceBox -lIce -lIceUtil -lIceDB $(libdir)/$(LIBFILENAME): $(LIB_OBJS) @mkdir -p $(dir $@) @@ -91,51 +84,18 @@ $(ADMIN): $(AOBJS) $(LIBTARGETS) rm -f $@ $(CXX) $(LDFLAGS) $(LDEXEFLAGS) -o $@ $(AOBJS) -lIceStorm $(READLINE_LIBS) $(LIBS) -$(MIGRATE): $(MOBJS) +$(DB): $(DBOBJS) $(LIBTARGETS) rm -f $@ - $(CXX) $(LDFLAGS) $(DB_RPATH_LINK) $(LDEXEFLAGS) -o $@ $(MOBJS) -lIceStorm -lFreeze $(LIBS) - -# The slice2freeze rules are structured like this to avoid issues with -# parallel make. -../IceStorm/LLUMap.h: LLUMap.cpp -LLUMap.cpp: ../IceStorm/LLURecord.ice $(SLICE2FREEZE) $(SLICEPARSERLIB) - rm -f LLUMap.h LLUMap.cpp - $(SLICE2FREEZECMD) --dict IceStorm::LLUMap,string,IceStormElection::LogUpdate \ - LLUMap ../IceStorm/LLURecord.ice - -../IceStorm/SubscriberMap.h: SubscriberMap.cpp -SubscriberMap.cpp: ../IceStorm/SubscriberRecord.ice $(slicedir)/Ice/Identity.ice $(SLICE2FREEZE) $(SLICEPARSERLIB) - rm -f SubscriberMap.h SubscriberMap.cpp - $(SLICE2FREEZECMD) \ - --dict IceStorm::SubscriberMap,IceStorm::SubscriberRecordKey,IceStorm::SubscriberRecord,sort \ - SubscriberMap ../IceStorm/SubscriberRecord.ice - -# Needed for migration. -../IceStorm/V32FormatDB.h: V32FormatDB.cpp -V32FormatDB.cpp: ../IceStorm/V32Format.ice $(SLICE2FREEZE) $(SLICEPARSERLIB) - rm -f V32FormatDB.h V32FormatDB.cpp - $(SLICE2FREEZECMD) --dict IceStorm::V32Format,Ice::Identity,IceStorm::LinkRecordSeq \ - V32FormatDB ../IceStorm/V32Format.ice - -../IceStorm/V31FormatDB.h: V31FormatDB.cpp -V31FormatDB.cpp: ../IceStorm/V31Format.ice $(SLICE2FREEZE) $(SLICEPARSERLIB) - rm -f V31FormatDB.h V31FormatDB.cpp - $(SLICE2FREEZECMD) --dict IceStorm::V31Format,string,IceStorm::LinkRecordDict \ - V31FormatDB ../IceStorm/V31Format.ice + $(CXX) $(LDFLAGS) $(LDEXEFLAGS) -o $@ $(DBOBJS) -lIceStorm -lIceDB -lIcePatch2 $(LIBS) # Needed for make -jn to work. ../IceStorm/Grammar.y: Grammar.h clean:: -rm -f LinkRecord.h LinkRecord.cpp - -rm -f LLUMap.h LLUMap.cpp - -rm -f SubscriberMap.h SubscriberMap.cpp - -rm -f V31FormatDB.h V31FormatDB.cpp - -rm -f V32FormatDB.h V32FormatDB.cpp install:: all $(call installlib,$(DESTDIR)$(install_libdir),$(libdir),$(LIBFILENAME),$(SONAME),$(LIBNAME)) $(call installprogram,$(ADMIN),$(DESTDIR)$(install_bindir)) + $(call installprogram,$(DB),$(DESTDIR)$(install_bindir)) $(call installdata,$(top_srcdir)/../man/man1/icestormadmin.1,$(DESTDIR)$(install_mandir)) - $(call installprogram,$(MIGRATE),$(DESTDIR)$(install_bindir)) - $(call installdata,$(top_srcdir)/../man/man1/icestormmigrate.1,$(DESTDIR)$(install_mandir)) diff --git a/cpp/src/IceStorm/Makefile.mak b/cpp/src/IceStorm/Makefile.mak index d0df6172157..e29567556a3 100644 --- a/cpp/src/IceStorm/Makefile.mak +++ b/cpp/src/IceStorm/Makefile.mak @@ -13,79 +13,72 @@ LIBNAME = $(top_srcdir)\lib\icestormservice$(LIBSUFFIX).lib DLLNAME = $(top_srcdir)\bin\icestormservice$(SOVERSION)$(LIBSUFFIX)$(COMPSUFFIX).dll ADMIN = $(top_srcdir)\bin\icestormadmin.exe -MIGRATE = $(top_srcdir)\bin\icestormmigrate.exe +DB = $(top_srcdir)\bin\icestormdb.exe -TARGETS = $(LIBNAME) $(DLLNAME) $(ADMIN) $(MIGRATE) +TARGETS = $(LIBNAME) $(DLLNAME) $(ADMIN) $(DB) -SLICE_OBJS = .\Election.obj \ +LSLICE_OBJS = .\Election.obj \ .\IceStormInternal.obj \ .\Instrumentation.obj \ .\LinkRecord.obj \ .\LLURecord.obj \ - .\SubscriberRecord.obj \ - .\V31Format.obj \ - .\V32Format.obj + .\SubscriberRecord.obj BISON_FLEX_OBJS = .\Grammar.obj \ .\Scanner.obj LIB_OBJS = .\Instance.obj \ .\InstrumentationI.obj \ - .\LLUMap.obj \ .\NodeI.obj \ .\Observers.obj \ .\Service.obj \ .\Subscriber.obj \ - .\SubscriberMap.obj \ .\TopicI.obj \ .\TopicManagerI.obj \ .\TraceLevels.obj \ .\TransientTopicI.obj \ .\TransientTopicManagerI.obj \ .\Util.obj \ - .\V31FormatDB.obj \ - .\V32FormatDB.obj \ - $(SLICE_OBJS) + $(LSLICE_OBJS) AOBJS = .\Admin.obj \ .\Parser.obj \ - $(SLICE_OBJS) \ + $(LSLICE_OBJS) \ $(BISON_FLEX_OBJS) -MOBJS = .\LLUMap.obj \ - .\Migrate.obj \ - .\SubscriberMap.obj \ - .\V31FormatDB.obj \ - .\V32FormatDB.obj \ - $(SLICE_OBJS) +DSLICE_OBJS = .\DBTypes.obj + +DOBJS = .\IceStormDB.obj \ + $(DSLICE_OBJS) OBJS = $(LIB_OBJS) \ $(AOBJS) \ - $(MOBJS) + $(DOBJS) + +SLICE_OBJS = $(LSLICE_OBJS) \ + $(DSLICE_OBJS) HDIR = $(headerdir)\IceStorm SDIR = $(slicedir)\IceStorm -SLICE2FREEZECMD = $(SLICE2FREEZE) -I.. --ice --include-dir IceStorm $(ICECPPFLAGS) - !include $(top_srcdir)\config\Make.rules.mak -CPPFLAGS = -I.. $(CPPFLAGS) -DWIN32_LEAN_AND_MEAN +CPPFLAGS = -I.. -I$(LMDB_HOME)\include $(CPPFLAGS) -DWIN32_LEAN_AND_MEAN ICECPPFLAGS = $(ICECPPFLAGS) -I.. SLICE2CPPFLAGS = --ice --include-dir IceStorm $(SLICE2CPPFLAGS) LINKWITH = $(LIBS) ALINKWITH = $(LIBS) -MLINKWITH = $(LIBS) +DLINKWITH = $(LIBS) !if "$(GENERATE_PDB)" == "yes" PDBFLAGS = /pdb:$(DLLNAME:.dll=.pdb) APDBFLAGS = /pdb:$(ADMIN:.exe=.pdb) -MPDBFLAGS = /pdb:$(MIGRATE:.exe=.pdb) +DPDBFLAGS = /pdb:$(DB:.exe=.pdb) !endif RES_FILE = IceStormService.res ARES_FILE = IceStormAdmin.res -MRES_FILE = IceStormMigrate.res +DRES_FILE = IceStormDB.res $(LIBNAME): $(DLLNAME) @@ -105,8 +98,8 @@ $(ADMIN): $(AOBJS) $(ARES_FILE) @if defined SIGN_CERTIFICATE echo ^ ^ ^ Signing $@ && \ signtool sign /f "$(SIGN_CERTIFICATE)" /p $(SIGN_PASSWORD) /t $(SIGN_TIMESTAMPSERVER) $@ -$(MIGRATE): $(MOBJS) $(MRES_FILE) - $(LINK) $(LD_EXEFLAGS) $(MPDBFLAGS) $(MOBJS) $(SETARGV) $(PREOUT)$@ $(PRELIBS)$(MLINKWITH) $(MRES_FILE) +$(DB): $(DOBJS) $(DRES_FILE) + $(LINK) $(LD_EXEFLAGS) $(DPDBFLAGS) $(DOBJS) $(SETARGV) $(PREOUT)$@ $(PRELIBS)$(DLINKWITH) $(DRES_FILE) @if exist $@.manifest echo ^ ^ ^ Embedding manifest using $(MT) && \ $(MT) -nologo -manifest $@.manifest -outputresource:$@;#1 && del /q $@.manifest @if defined SIGN_CERTIFICATE echo ^ ^ ^ Signing $@ && \ @@ -117,54 +110,28 @@ $(MIGRATE): $(MOBJS) $(MRES_FILE) del /q $(*F).h $(*F).cpp "$(SLICE2CPP)" $(SLICE2CPPFLAGS) $(*F).ice -LLUMap.h LLUMap.cpp: ..\IceStorm\LLURecord.ice $(SLICE2FREEZE) $(SLICEPARSERLIB) - del /q LLUMap.h LLUMap.cpp - $(SLICE2FREEZECMD) --dict IceStorm::LLUMap,string,IceStormElection::LogUpdate LLUMap ..\IceStorm\LLURecord.ice - -SubscriberMap.h SubscriberMap.cpp: ..\IceStorm\SubscriberRecord.ice $(slicedir)\Ice\Identity.ice $(SLICE2FREEZE) $(SLICEPARSERLIB) - del /q SubscriberMap.h SubscriberMap.cpp - $(SLICE2FREEZECMD) \ - --dict IceStorm::SubscriberMap,IceStorm::SubscriberRecordKey,IceStorm::SubscriberRecord,sort \ - SubscriberMap ..\IceStorm\SubscriberRecord.ice - -# Needed for migration. -V32FormatDB.h V32FormatDB.cpp: V32Format.ice $(SLICE2FREEZE) $(SLICEPARSERLIB) - del /q V32FormatDB.h V32FormatDB.cpp - $(SLICE2FREEZECMD) --dict IceStorm::V32Format,Ice::Identity,IceStorm::LinkRecordSeq \ - V32FormatDB V32Format.ice - -V31FormatDB.h V31FormatDB.cpp: V31Format.ice $(SLICE2FREEZE) $(SLICEPARSERLIB) - del /q V31FormatDB.h V31FormatDB.cpp - $(SLICE2FREEZECMD) --dict IceStorm::V31Format,string,IceStorm::LinkRecordDict \ - V31FormatDB V31Format.ice - clean:: -del /q Election.cpp Election.h -del /q IceStormInternal.cpp IceStormInternal.h -del /q Instrumentation.cpp Instrumentation.h -del /q LinkRecord.cpp LinkRecord.h - -del /q LLUMap.h LLUMap.cpp -del /q LLURecord.cpp LLURecord.h - -del /q SubscriberMap.h SubscriberMap.cpp -del /q SubscriberRecord.cpp SubscriberRecord.h - -del /q V31Format.cpp V31Format.h - -del /q V32Format.cpp V32Format.h - -del /q V32FormatDB.cpp V31FormatDB.cpp V32FormatDB.h V31FormatDB.h -del /q $(ADMIN:.exe=.*) - -del /q $(MIGRATE:.exe=.*) - -del /q IceStormAdmin.res IceStormMigrate.res IceStormService.res + -del /q $(DB:.exe=.*) + -del /q IceStormAdmin.res IceStormService.res install:: all copy $(LIBNAME) "$(install_libdir)" copy $(DLLNAME) "$(install_bindir)" copy $(ADMIN) "$(install_bindir)" - copy $(MIGRATE) "$(install_bindir)" + copy $(DB) "$(install_bindir)" !if "$(GENERATE_PDB)" == "yes" install:: all copy $(ADMIN:.exe=.pdb) "$(install_bindir)" - copy $(MIGRATE:.exe=.pdb) "$(install_bindir)" + copy $(DB:.exe=.pdb) "$(install_bindir)" copy $(DLLNAME:.dll=.pdb) "$(install_bindir)" !endif diff --git a/cpp/src/IceStorm/Migrate.cpp b/cpp/src/IceStorm/Migrate.cpp deleted file mode 100644 index 5ff99c17716..00000000000 --- a/cpp/src/IceStorm/Migrate.cpp +++ /dev/null @@ -1,226 +0,0 @@ -// ********************************************************************** -// -// Copyright (c) 2003-2015 ZeroC, Inc. All rights reserved. -// -// This copy of Ice is licensed to you under the terms described in the -// ICE_LICENSE file included in this distribution. -// -// ********************************************************************** - -#include <Freeze/Freeze.h> - -#include <IceStorm/IceStormInternal.h> - -#include <IceStorm/SubscriberMap.h> -#include <IceStorm/LLUMap.h> -#include <IceStorm/V32FormatDB.h> -#include <IceStorm/V31FormatDB.h> - -using namespace std; -using namespace Ice; -using namespace IceStorm; - -class Client : public Application -{ -public: - - void usage(); - virtual int run(int, char*[]); - -private: - - void v32migrate(const Freeze::ConnectionPtr&, SubscriberMap&); - void v31migrate(const Freeze::ConnectionPtr&, SubscriberMap&); -}; - -#ifdef _WIN32 - -int -wmain(int argc, wchar_t* argv[]) - -#else - -int -main(int argc, char* argv[]) - -#endif -{ - Client app; - int rc = app.main(argc, argv); - return rc; -} - -void -Client::usage() -{ - cerr << "Usage: " << appName() << " old-env new-env\n"; - cerr << "\n"; - cerr << "This utility upgrades a 3.1 or 3.2 IceStorm database environment\n"; - cerr << "to a 3.3 or superior IceStorm database environment.\n"; -} - -string -identityToTopicName(const Ice::Identity& id) -{ - // - // Work out the topic name. If the category is empty then we're in - // backwards compatibility mode and the name is just - // identity.name. Otherwise identity.name is topic.<topicname>. - // - if(id.category.empty()) - { - return id.name; - } - - assert(id.name.length() > 6 && id.name.compare(0, 6, "topic.") == 0); - return id.name.substr(6); -} - -void -Client::v32migrate(const Freeze::ConnectionPtr& oldCon, SubscriberMap& subscriberMap) -{ - // We should not create the old database. - V32Format topicMap(oldCon, "topics", false); - Freeze::TransactionHolder oldTxn(oldCon); - - for(V32Format::const_iterator p = topicMap.begin(); p != topicMap.end(); ++p) - { - // First the placeholder record for the topic. - SubscriberRecordKey key; - key.topic = p->first; - SubscriberRecord rec; - rec.link = false; - rec.cost = 0; - subscriberMap.put(SubscriberMap::value_type(key, rec)); - - string topicName = identityToTopicName(key.topic); - - // Next each link. - for(LinkRecordSeq::const_iterator q = p->second.begin(); q != p->second.end(); ++q) - { - Ice::Identity id = q->theTopic->ice_getIdentity(); - key.id = id; - - rec.id = id; - rec.obj = q->obj; - rec.theTopic = q->theTopic; - rec.topicName = topicName; - rec.link = true; - rec.cost = q->cost; - - subscriberMap.put(SubscriberMap::value_type(key, rec)); - } - } - - oldTxn.rollback(); -} - -void -Client::v31migrate(const Freeze::ConnectionPtr& oldCon, SubscriberMap& subscriberMap) -{ - - // We should not create the old database. - V31Format topicMap(oldCon, "topics", false); - Freeze::TransactionHolder oldTxn(oldCon); - - for(V31Format::const_iterator p = topicMap.begin(); p != topicMap.end(); ++p) - { - // First the placeholder record for the topic. - SubscriberRecordKey key; - key.topic.name = p->first; - SubscriberRecord rec; - rec.link = false; - rec.cost = 0; - subscriberMap.put(SubscriberMap::value_type(key, rec)); - - string topicName = identityToTopicName(key.topic); - - // Next each link. - for(LinkRecordDict::const_iterator q = p->second.begin(); q != p->second.end(); ++q) - { - Ice::Identity id = q->second.theTopic->ice_getIdentity(); - key.id = id; - - rec.id = id; - rec.obj = q->second.obj; - rec.theTopic = q->second.theTopic; - rec.topicName = topicName; - rec.link = true; - rec.cost = q->second.cost; - - subscriberMap.put(SubscriberMap::value_type(key, rec)); - } - } - - oldTxn.rollback(); -} - -int -Client::run(int argc, char* argv[]) -{ - if(argc != 3) - { - usage(); - return EXIT_FAILURE; - } - - string oldEnvName = argv[1]; - string newEnvName = argv[2]; - - if(oldEnvName == newEnvName) - { - cerr << argv[0] << ": The database environment names must be different" << endl; - return EXIT_FAILURE; - } - - bool migrate31 = false; - - Freeze::ConnectionPtr oldCon = Freeze::createConnection(communicator(), oldEnvName); - Freeze::Catalog catalog(oldCon, Freeze::catalogName()); - if(catalog.size() != 1 || catalog.begin()->first != "topics") - { - cerr << argv[0] << ": The old database environment does not contain an IceStorm database." << endl; - return EXIT_FAILURE; - } - Freeze::CatalogData data = catalog.begin()->second; - if(!data.evictor && data.key == "string" && data.value == "::IceStorm::LinkRecordDict") - { - migrate31 = true; - } - else if(!data.evictor && data.key == "::Ice::Identity" && data.value == "::IceStorm::LinkRecordSeq") - { - migrate31 = false; - } - else - { - cerr << argv[0] << ": The old environment contains an unrecognized IceStorm database version." << endl; - return EXIT_FAILURE; - } - - // Creating the new database is fine. - Freeze::ConnectionPtr newCon = Freeze::createConnection(communicator(), newEnvName); - SubscriberMap subscriberMap(newCon, "subscribers"); - LLUMap lluMap(newCon, "llu"); - Freeze::TransactionHolder newTxn(newCon); - - if(migrate31) - { - v31migrate(oldCon, subscriberMap); - } - else - { - v32migrate(oldCon, subscriberMap); - } - - // We need to write a record in the LLU map so that if this - // database is used for a migration this database will be picked - // as the latest. We use generation 1 since the default is 0. - IceStormElection::LogUpdate llu; - llu.generation = 1; - llu.iteration = 0; - lluMap.put(LLUMap::value_type("_manager", llu)); - - newTxn.commit(); - - return 0; -} diff --git a/cpp/src/IceStorm/Service.cpp b/cpp/src/IceStorm/Service.cpp index 9cfc1bb4139..6c10fbe55ba 100644 --- a/cpp/src/IceStorm/Service.cpp +++ b/cpp/src/IceStorm/Service.cpp @@ -15,6 +15,7 @@ #include <IceStorm/TopicManagerI.h> #include <IceStorm/TransientTopicManagerI.h> #include <IceStorm/Instance.h> +#include <IceStorm/Util.h> #include <IceStorm/Service.h> @@ -61,6 +62,7 @@ public: private: + void createDbEnv(const Ice::CommunicatorPtr&); void validateProperties(const string&, const PropertiesPtr&, const LoggerPtr&); TopicManagerImplPtr _manager; @@ -183,14 +185,16 @@ ServiceI::start( if(id == -1) // No replication. { - _instance = new Instance(instanceName, name, communicator, publishAdapter, topicAdapter); - try { - _manager = new TopicManagerImpl(_instance); + PersistentInstancePtr instance = + new PersistentInstance(instanceName, name, communicator, publishAdapter, topicAdapter); + _instance = instance; + + _manager = new TopicManagerImpl(instance); _managerProxy = TopicManagerPrx::uncheckedCast(topicAdapter->add(_manager->getServant(), topicManagerId)); } - catch(const Ice::Exception& ex) + catch(const IceUtil::Exception& ex) { _instance = 0; @@ -336,8 +340,11 @@ ServiceI::start( Ice::ObjectAdapterPtr nodeAdapter = communicator->createObjectAdapter(name + ".Node"); - _instance = new Instance(instanceName, name, communicator, publishAdapter, topicAdapter, - nodeAdapter, nodes[id]); + PersistentInstancePtr instance = + new PersistentInstance(instanceName, name, communicator, publishAdapter, topicAdapter, + nodeAdapter, nodes[id]); + _instance = instance; + _instance->observers()->setMajority(static_cast<unsigned int>(nodes.size())/2); // Trace replication information. @@ -366,7 +373,7 @@ ServiceI::start( _managerProxy = TopicManagerPrx::uncheckedCast(topicAdapter->createIndirectProxy(topicManagerId)); } - _manager = new TopicManagerImpl(_instance); + _manager = new TopicManagerImpl(instance); topicAdapter->add(_manager->getServant(), topicManagerId); ostringstream os; // The node object identity. @@ -382,7 +389,7 @@ ServiceI::start( node->start(); } - catch(const Ice::Exception& ex) + catch(const IceUtil::Exception& ex) { _instance = 0; @@ -420,7 +427,7 @@ ServiceI::start(const CommunicatorPtr& communicator, // This is for IceGrid only and as such we use a transient // implementation of IceStorm. string instanceName = communicator->getProperties()->getPropertyWithDefault(name + ".InstanceName", "IceStorm"); - _instance = new Instance(instanceName, name, communicator, publishAdapter, topicAdapter); + _instance = new Instance(instanceName, name, communicator, publishAdapter, topicAdapter, 0); try { @@ -536,7 +543,8 @@ ServiceI::validateProperties(const string& name, const PropertiesPtr& properties "SQL.Port", "SQL.DatabaseName", "SQL.UserName", - "SQL.Password" + "SQL.Password", + "LMDB.Path" }; vector<string> unknownProps; diff --git a/cpp/src/IceStorm/TopicI.cpp b/cpp/src/IceStorm/TopicI.cpp index 422e3456383..2bd4f7420a0 100644 --- a/cpp/src/IceStorm/TopicI.cpp +++ b/cpp/src/IceStorm/TopicI.cpp @@ -13,8 +13,6 @@ #include <IceStorm/TraceLevels.h> #include <IceStorm/NodeI.h> #include <IceStorm/Observers.h> -#include <IceStorm/SubscriberMap.h> -#include <IceStorm/LLUMap.h> #include <IceStorm/Util.h> #include <Ice/LoggerUtil.h> #include <algorithm> @@ -24,15 +22,11 @@ using namespace IceStorm; using namespace IceStormElection; using namespace IceStormInternal; -using namespace Freeze; - namespace { -const string subscriberDbName = "subscribers"; - void -halt(const Ice::CommunicatorPtr& com, const DatabaseException& ex) +halt(const Ice::CommunicatorPtr& com, const IceDB::LMDBException& ex) { { Ice::Error error(com->getLogger()); @@ -50,7 +44,7 @@ class PublisherI : public Ice::BlobjectArray { public: - PublisherI(const TopicImplPtr& topic, const InstancePtr& instance) : + PublisherI(const TopicImplPtr& topic, const PersistentInstancePtr& instance) : _topic(topic), _instance(instance) { } @@ -80,7 +74,7 @@ public: private: const TopicImplPtr _topic; - const InstancePtr _instance; + const PersistentInstancePtr _instance; }; // @@ -91,7 +85,7 @@ class TopicLinkI : public TopicLink { public: - TopicLinkI(const TopicImplPtr& impl, const InstancePtr& instance) : + TopicLinkI(const TopicImplPtr& impl, const PersistentInstancePtr& instance) : _impl(impl), _instance(instance) { } @@ -106,14 +100,14 @@ public: private: const TopicImplPtr _impl; - const InstancePtr _instance; + const PersistentInstancePtr _instance; }; class TopicI : public TopicInternal { public: - TopicI(const TopicImplPtr& impl, const InstancePtr& instance) : + TopicI(const TopicImplPtr& impl, const PersistentInstancePtr& instance) : _impl(impl), _instance(instance) { } @@ -343,26 +337,22 @@ private: } const TopicImplPtr _impl; - const InstancePtr _instance; + const PersistentInstancePtr _instance; }; } -namespace IceStorm -{ -extern string identityToTopicName(const Ice::Identity& id); -} - TopicImpl::TopicImpl( - const InstancePtr& instance, + const PersistentInstancePtr& instance, const string& name, const Ice::Identity& id, const SubscriberRecordSeq& subscribers) : _instance(instance), - _connection(Freeze::createConnection(instance->communicator(), instance->serviceName())), _name(name), _id(id), - _destroyed(false) + _destroyed(false), + _lluMap(_instance->lluMap()), + _subscriberMap(_instance->subscriberMap()) { try { @@ -496,7 +486,7 @@ TopicImpl::getNonReplicatedPublisher() const namespace { void -trace(Ice::Trace& out, const InstancePtr& instance, const vector<SubscriberPtr>& s) +trace(Ice::Trace& out, const PersistentInstancePtr& instance, const vector<SubscriberPtr>& s) { out << '['; for(vector<SubscriberPtr>::const_iterator p = s.begin(); p != s.end(); ++p) @@ -568,34 +558,30 @@ TopicImpl::subscribeAndGetPublisher(const QoS& qos, const Ice::ObjectPrx& obj) LogUpdate llu; SubscriberPtr subscriber = Subscriber::create(_instance, record); - for(;;) + try { - try - { - TransactionHolder txn(_connection); + IceDB::ReadWriteTxn txn(_instance->dbEnv()); - SubscriberRecordKey key; - key.topic = _id; - key.id = subscriber->id(); + SubscriberRecordKey key; + key.topic = _id; + key.id = subscriber->id(); - SubscriberMap subscriberMap(_connection, subscriberDbName); - subscriberMap.put(SubscriberMap::value_type(key, record)); + _subscriberMap.put(txn, key, record); - llu = getLLU(_connection); - llu.iteration++; - putLLU(_connection, llu); + llu = getIncrementedLLU(txn, _lluMap); - txn.commit(); - break; - } - catch(const DeadlockException&) - { - continue; - } - catch(const DatabaseException& ex) - { - halt(_instance->communicator(), ex); - } + txn.commit(); + } + catch(const IceDB::KeyTooLongException&) + { + ostringstream os; + os << "subscriber identity is too long: "; + os << _instance->communicator()->identityToString(subscriber->id()); + throw InvalidSubscriber(os.str()); + } + catch(const IceDB::LMDBException& ex) + { + halt(_instance->communicator(), ex); } _subscribers.push_back(subscriber); @@ -680,7 +666,7 @@ TopicImpl::link(const TopicPrx& topic, Ice::Int cost) vector<SubscriberPtr>::iterator p = find(_subscribers.begin(), _subscribers.end(), record.id); if(p != _subscribers.end()) { - string name = identityToTopicName(id); + string name = IceStormInternal::identityToTopicName(id); LinkExists ex; ex.name = name; throw ex; @@ -690,34 +676,23 @@ TopicImpl::link(const TopicPrx& topic, Ice::Int cost) SubscriberPtr subscriber = Subscriber::create(_instance, record); - for(;;) + try { - try - { - TransactionHolder txn(_connection); + IceDB::ReadWriteTxn txn(_instance->dbEnv()); - SubscriberRecordKey key; - key.topic = _id; - key.id = id; + SubscriberRecordKey key; + key.topic = _id; + key.id = id; - SubscriberMap subscriberMap(_connection, subscriberDbName); - subscriberMap.put(SubscriberMap::value_type(key, record)); + _subscriberMap.put(txn, key, record); - llu = getLLU(_connection); - llu.iteration++; - putLLU(_connection, llu); + llu = getIncrementedLLU(txn, _lluMap); - txn.commit(); - break; - } - catch(const DeadlockException&) - { - continue; - } - catch(const DatabaseException& ex) - { - halt(_instance->communicator(), ex); - } + txn.commit(); + } + catch(const IceDB::LMDBException& ex) + { + halt(_instance->communicator(), ex); } _subscribers.push_back(subscriber); @@ -739,7 +714,7 @@ TopicImpl::unlink(const TopicPrx& topic) vector<SubscriberPtr>::const_iterator p = find(_subscribers.begin(), _subscribers.end(), id); if(p == _subscribers.end()) { - string name = identityToTopicName(id); + string name = IceStormInternal::identityToTopicName(id); TraceLevelsPtr traceLevels = _instance->traceLevels(); if(traceLevels->topic > 0) { @@ -814,7 +789,7 @@ TopicImpl::getLinkInfoSeq() const if(record.link && !(*p)->errored()) { LinkInfo info; - info.name = identityToTopicName(record.theTopic->ice_getIdentity()); + info.name = IceStormInternal::identityToTopicName(record.theTopic->ice_getIdentity()); info.cost = record.cost; info.theTopic = record.theTopic; seq.push_back(info); @@ -974,7 +949,7 @@ class TopicInternalReapCB : public IceUtil::Shared { public: - TopicInternalReapCB(const InstancePtr& instance, Ice::Long generation) : + TopicInternalReapCB(const PersistentInstancePtr& instance, Ice::Long generation) : _instance(instance), _generation(generation) { } @@ -992,7 +967,7 @@ public: private: - const InstancePtr _instance; + const PersistentInstancePtr _instance; const Ice::Long _generation; }; @@ -1112,33 +1087,24 @@ TopicImpl::observerAddSubscriber(const LogUpdate& llu, const SubscriberRecord& r } SubscriberPtr subscriber = Subscriber::create(_instance, record); - for(;;) + try { - try - { - TransactionHolder txn(_connection); + IceDB::ReadWriteTxn txn(_instance->dbEnv()); - SubscriberRecordKey key; - key.topic = _id; - key.id = subscriber->id(); + SubscriberRecordKey key; + key.topic = _id; + key.id = subscriber->id(); - SubscriberMap subscriberMap(_connection, subscriberDbName); - subscriberMap.put(SubscriberMap::value_type(key, record)); + _subscriberMap.put(txn, key, record); - // Update the LLU. - putLLU(_connection, llu); + // Update the LLU. + _lluMap.put(txn, lluDbKey, llu); - txn.commit(); - break; - } - catch(const DeadlockException&) - { - continue; - } - catch(const DatabaseException& ex) - { - halt(_instance->communicator(), ex); - } + txn.commit(); + } + catch(const IceDB::LMDBException& ex) + { + halt(_instance->communicator(), ex); } _subscribers.push_back(subscriber); @@ -1179,33 +1145,26 @@ TopicImpl::observerRemoveSubscriber(const LogUpdate& llu, const Ice::IdentitySeq } // Next remove from the database. - for(;;) + try { - try - { - TransactionHolder txn(_connection); - - for(Ice::IdentitySeq::const_iterator id = ids.begin(); id != ids.end(); ++id) - { - SubscriberRecordKey key; - key.topic = _id; - key.id = *id; + IceDB::ReadWriteTxn txn(_instance->dbEnv()); - SubscriberMap subscriberMap(_connection, subscriberDbName); - subscriberMap.erase(key); - } - putLLU(_connection, llu); - txn.commit(); - break; - } - catch(const DeadlockException&) - { - continue; - } - catch(const DatabaseException& ex) + for(Ice::IdentitySeq::const_iterator id = ids.begin(); id != ids.end(); ++id) { - halt(_instance->communicator(), ex); + SubscriberRecordKey key; + key.topic = _id; + key.id = *id; + + _subscriberMap.del(txn, key); } + + _lluMap.put(txn, lluDbKey, llu); + + txn.commit(); + } + catch(const IceDB::LMDBException& ex) + { + halt(_instance->communicator(), ex); } } @@ -1272,46 +1231,43 @@ TopicImpl::destroyInternal(const LogUpdate& origLLU, bool master) // Clear out the database records related to this topic. LogUpdate llu; - for(;;) + try { - try - { - TransactionHolder txn(_connection); + IceDB::ReadWriteTxn txn(_instance->dbEnv()); - // Erase all subscriber records and the topic record. - SubscriberMap subscriberMap(_connection, subscriberDbName); + // Erase all subscriber records and the topic record. + SubscriberRecordKey key; + key.topic = _id; - IceStorm::SubscriberRecordKey key; - key.topic = _id; - SubscriberMap::iterator p = subscriberMap.find(key); - while(p != subscriberMap.end() && p->first.topic == key.topic) - { - subscriberMap.erase(p++); - } + SubscriberMapRWCursor cursor(_subscriberMap, txn); + if(cursor.find(key)) + { + _subscriberMap.del(txn, key); - // Update the LLU. - if(master) - { - llu = getLLU(_connection); - llu.iteration++; - } - else + SubscriberRecordKey k; + SubscriberRecord v; + while(cursor.get(k, v, MDB_NEXT) && k.topic == key.topic) { - llu = origLLU; + _subscriberMap.del(txn, k); } - putLLU(_connection, llu); - - txn.commit(); - break; } - catch(const DeadlockException&) + + // Update the LLU. + if(master) { - continue; + llu = getIncrementedLLU(txn, _lluMap); } - catch(const DatabaseException& ex) + else { - halt(_instance->communicator(), ex); + llu = origLLU; + _lluMap.put(txn, lluDbKey, llu); } + + txn.commit(); + } + catch(const IceDB::LMDBException& ex) + { + halt(_instance->communicator(), ex); } _instance->topicAdapter()->remove(_id); @@ -1352,37 +1308,26 @@ TopicImpl::removeSubscribers(const Ice::IdentitySeq& ids) // Next update the database and send the notification to any // slaves. LogUpdate llu; - for(;;) + try { - try - { - TransactionHolder txn(_connection); + IceDB::ReadWriteTxn txn(_instance->dbEnv()); - for(Ice::IdentitySeq::const_iterator id = ids.begin(); id != ids.end(); ++id) - { - SubscriberRecordKey key; - key.topic = _id; - key.id = *id; + for(Ice::IdentitySeq::const_iterator id = ids.begin(); id != ids.end(); ++id) + { + SubscriberRecordKey key; + key.topic = _id; + key.id = *id; - SubscriberMap subscriberMap(_connection, subscriberDbName); - subscriberMap.erase(key); - } + _subscriberMap.del(txn, key); + } - llu = getLLU(_connection); - llu.iteration++; - putLLU(_connection, llu); + llu = getIncrementedLLU(txn, _lluMap); - txn.commit(); - break; - } - catch(const DeadlockException&) - { - continue; - } - catch(const DatabaseException& ex) - { - halt(_instance->communicator(), ex); - } + txn.commit(); + } + catch(const IceDB::LMDBException& ex) + { + halt(_instance->communicator(), ex); } _instance->observers()->removeSubscriber(llu, _name, ids); diff --git a/cpp/src/IceStorm/TopicI.h b/cpp/src/IceStorm/TopicI.h index 355818b4cbc..a8c0bbdcbfd 100644 --- a/cpp/src/IceStorm/TopicI.h +++ b/cpp/src/IceStorm/TopicI.h @@ -13,16 +13,16 @@ #include <IceStorm/IceStormInternal.h> #include <IceStorm/Election.h> #include <IceStorm/Instrumentation.h> +#include <IceStorm/Util.h> #include <Ice/ObserverHelper.h> -#include <Freeze/Freeze.h> #include <list> namespace IceStorm { // Forward declarations -class Instance; -typedef IceUtil::Handle<Instance> InstancePtr; +class PersistentInstance; +typedef IceUtil::Handle<PersistentInstance> PersistentInstancePtr; class Subscriber; typedef IceUtil::Handle<Subscriber> SubscriberPtr; @@ -31,7 +31,7 @@ class TopicImpl : public IceUtil::Shared { public: - TopicImpl(const InstancePtr&, const std::string&, const Ice::Identity&, const SubscriberRecordSeq&); + TopicImpl(const PersistentInstancePtr&, const std::string&, const Ice::Identity&, const SubscriberRecordSeq&); ~TopicImpl(); std::string getName() const; @@ -77,11 +77,9 @@ private: // Immutable members. // const Ice::ObjectPrx _publisherReplicaProxy; - const InstancePtr _instance; - const Freeze::ConnectionPtr _connection; + const PersistentInstancePtr _instance; const std::string _name; // The topic name const Ice::Identity _id; // The topic identity - const std::string _envName; IceInternal::ObserverHelperT<IceStorm::Instrumentation::TopicObserver> _observer; @@ -103,6 +101,9 @@ private: std::vector<SubscriberPtr> _subscribers; bool _destroyed; // Has this Topic been destroyed? + + LLUMap _lluMap; + SubscriberMap _subscriberMap; }; typedef IceUtil::Handle<TopicImpl> TopicImplPtr; diff --git a/cpp/src/IceStorm/TopicManagerI.cpp b/cpp/src/IceStorm/TopicManagerI.cpp index 0de2ab58aa9..c05ee2b8193 100644 --- a/cpp/src/IceStorm/TopicManagerI.cpp +++ b/cpp/src/IceStorm/TopicManagerI.cpp @@ -14,8 +14,6 @@ #include <IceStorm/NodeI.h> #include <IceStorm/Observers.h> #include <IceStorm/Subscriber.h> -#include <IceStorm/SubscriberMap.h> -#include <IceStorm/LLUMap.h> #include <IceStorm/Util.h> #include <Ice/SliceChecksums.h> @@ -26,15 +24,11 @@ using namespace IceStorm; using namespace IceStormElection; using namespace IceStormInternal; -using namespace Freeze; - namespace { -const string subscriberDbName = "subscribers"; - void -halt(const Ice::CommunicatorPtr& com, const DatabaseException& ex) +halt(const Ice::CommunicatorPtr& com, const IceDB::LMDBException& ex) { { Ice::Error error(com->getLogger()); @@ -48,7 +42,7 @@ class TopicManagerI : public TopicManagerInternal { public: - TopicManagerI(const InstancePtr& instance, const TopicManagerImplPtr& impl) : + TopicManagerI(const PersistentInstancePtr& instance, const TopicManagerImplPtr& impl) : _instance(instance), _impl(impl) { } @@ -130,7 +124,7 @@ private: } } - const InstancePtr _instance; + const PersistentInstancePtr _instance; const TopicManagerImplPtr _impl; }; @@ -138,7 +132,7 @@ class ReplicaObserverI : public ReplicaObserver { public: - ReplicaObserverI(const InstancePtr& instance, const TopicManagerImplPtr& impl) : + ReplicaObserverI(const PersistentInstancePtr& instance, const TopicManagerImplPtr& impl) : _instance(instance), _impl(impl) { @@ -228,7 +222,7 @@ public: private: - const InstancePtr _instance; + const PersistentInstancePtr _instance; const TopicManagerImplPtr _impl; }; @@ -258,42 +252,10 @@ private: } -namespace IceStorm -{ - -string -identityToTopicName(const Ice::Identity& id) -{ - // - // Work out the topic name. If the category is empty then we're in - // backwards compatibility mode and the name is just - // identity.name. Otherwise identity.name is topic.<topicname>. - // - if(id.category.empty()) - { - return id.name; - } - - assert(id.name.length() > 6 && id.name.compare(0, 6, "topic.") == 0); - return id.name.substr(6); -} - -Ice::Identity -nameToIdentity(const InstancePtr& instance, const string& name) -{ - // Identity is instanceName>/topic.<topicname> - Ice::Identity id; - id.category = instance->instanceName(); - id.name = "topic." + name; - - return id; -} - -} - -TopicManagerImpl::TopicManagerImpl(const InstancePtr& instance) : +TopicManagerImpl::TopicManagerImpl(const PersistentInstancePtr& instance) : _instance(instance), - _connection(Freeze::createConnection(instance->communicator(), instance->serviceName())) + _lluMap(instance->lluMap()), + _subscriberMap(instance->subscriberMap()) { try { @@ -309,7 +271,6 @@ TopicManagerImpl::TopicManagerImpl(const InstancePtr& instance) : // here. _managerImpl = new TopicManagerI(instance, this); - Ice::PropertiesPtr properties = _instance->communicator()->getProperties(); // If there is no node adapter we don't need to start the // observer, nor sync since we're not replicating. if(_instance->nodeAdapter()) @@ -320,35 +281,43 @@ TopicManagerImpl::TopicManagerImpl(const InstancePtr& instance) : _sync = _instance->nodeAdapter()->addWithUUID(_syncImpl); } - - - // Ensure that the llu counter is present in the log. - LogUpdate empty = {0, 0}; - putLLU(_connection, empty); - - // Recreate each of the topics. - SubscriberMap subscriberMap(_connection, subscriberDbName); - SubscriberMap::const_iterator p = subscriberMap.begin(); - while(p != subscriberMap.end()) { - // This record has to be a place holder record, otherwise - // there is a database bug. - assert(p->first.id.name.empty() && p->first.id.category.empty()); + IceDB::ReadWriteTxn txn(_instance->dbEnv()); - Ice::Identity topic = p->first.topic; + // Ensure that the llu counter is present in the log. + LogUpdate empty = {0, 0}; + _instance->lluMap().put(txn, lluDbKey, empty); - // Skip the place holder. - ++p; - SubscriberRecordSeq content; - while(p != subscriberMap.end() && p->first.topic == topic) + // Recreate each of the topics. + SubscriberRecordKey k; + SubscriberRecord v; + + SubscriberMapRWCursor cursor(_subscriberMap, txn); + if(cursor.get(k, v, MDB_FIRST)) { - content.push_back(p->second); - ++p; + bool moreTopics = false; + do + { + // This record has to be a place holder record, otherwise + // there is a database bug. + assert(k.id.name.empty() && k.id.category.empty()); + + Ice::Identity topic = k.topic; + + bool moreTopics; + SubscriberRecordSeq content; + while((moreTopics = cursor.get(k, v, MDB_NEXT)) && k.topic == topic) + { + content.push_back(v); + } + + string name = identityToTopicName(topic); + installTopic(name, topic, false, content); + } while(moreTopics); } - string name = identityToTopicName(topic); - installTopic(name, topic, false, content); + txn.commit(); } } catch(...) @@ -380,38 +349,34 @@ TopicManagerImpl::create(const string& name) // Identity is instanceName>/topic.<topicname> Ice::Identity id = nameToIdentity(_instance, name); - LogUpdate llu; - for(;;) + LogUpdate llu; + try { - try - { - TransactionHolder txn(_connection); + IceDB::ReadWriteTxn txn(_instance->dbEnv()); - SubscriberRecordKey key; - key.topic = id; - SubscriberRecord rec; - rec.link = false; - rec.cost = 0; + SubscriberRecordKey key; + key.topic = id; + SubscriberRecord rec; + rec.link = false; + rec.cost = 0; - SubscriberMap subscriberMap(_connection, subscriberDbName); - subscriberMap.put(SubscriberMap::value_type(key, rec)); + _subscriberMap.put(txn, key, rec); - llu = getLLU(_connection); - llu.iteration++; - putLLU(_connection, llu); + llu = getIncrementedLLU(txn, _lluMap); - txn.commit(); - break; - } - catch(const DeadlockException&) - { - continue; - } - catch(const DatabaseException& ex) - { - halt(_instance->communicator(), ex); - } + txn.commit(); + } + catch(const IceDB::KeyTooLongException&) + { + ostringstream os; + os << "topic name is too long: "; + os << name; + throw InvalidTopic(os.str()); + } + catch(const IceDB::LMDBException& ex) + { + halt(_instance->communicator(), ex); } _instance->observers()->createTopic(llu, name); @@ -484,47 +449,38 @@ TopicManagerImpl::observerInit(const LogUpdate& llu, const TopicContentSeq& cont // First we update the database state, and then we update our // internal state. - for(;;) + try { - try - { - TransactionHolder txn(_connection); + IceDB::ReadWriteTxn txn(_instance->dbEnv()); - putLLU(_connection, llu); + _lluMap.put(txn, lluDbKey, llu); - SubscriberMap subscriberMap(_connection, subscriberDbName); - subscriberMap.clear(); + _subscriberMap.clear(txn); - for(TopicContentSeq::const_iterator p = content.begin(); p != content.end(); ++p) + for(TopicContentSeq::const_iterator p = content.begin(); p != content.end(); ++p) + { + SubscriberRecordKey key; + key.topic = p->id; + SubscriberRecord rec; + rec.link = false; + rec.cost = 0; + + _subscriberMap.put(txn, key, rec); + + for(SubscriberRecordSeq::const_iterator q = p->records.begin(); q != p->records.end(); ++q) { SubscriberRecordKey key; key.topic = p->id; - SubscriberRecord rec; - rec.link = false; - rec.cost = 0; - - subscriberMap.put(SubscriberMap::value_type(key, rec)); + key.id = q->id; - for(SubscriberRecordSeq::const_iterator q = p->records.begin(); q != p->records.end(); ++q) - { - SubscriberRecordKey key; - key.topic = p->id; - key.id = q->id; - - subscriberMap.put(SubscriberMap::value_type(key, *q)); - } + _subscriberMap.put(txn, key, *q); } - txn.commit(); - break; - } - catch(const DeadlockException&) - { - continue; - } - catch(const DatabaseException& ex) - { - halt(_instance->communicator(), ex); } + txn.commit(); + } + catch(const IceDB::LMDBException& ex) + { + halt(_instance->communicator(), ex); } // We do this with two scans. The first runs through the topics @@ -586,38 +542,29 @@ TopicManagerImpl::observerCreateTopic(const LogUpdate& llu, const string& name) Lock sync(*this); Ice::Identity id = nameToIdentity(_instance, name); - for(;;) + try { - try - { - TransactionHolder txn(_connection); + IceDB::ReadWriteTxn txn(_instance->dbEnv()); - SubscriberRecordKey key; - key.topic = id; - SubscriberRecord rec; - rec.link = false; - rec.cost = 0; + SubscriberRecordKey key; + key.topic = id; + SubscriberRecord rec; + rec.link = false; + rec.cost = 0; - SubscriberMap subscriberMap(_connection, subscriberDbName); - if(subscriberMap.find(key) != subscriberMap.end()) - { - throw ObserverInconsistencyException("topic exists: " + name); - } - subscriberMap.put(SubscriberMap::value_type(key, rec)); - - putLLU(_connection, llu); - - txn.commit(); - break; - } - catch(const DeadlockException&) + if(_subscriberMap.find(txn, key)) { - continue; - } - catch(const DatabaseException& ex) - { - halt(_instance->communicator(), ex); + throw ObserverInconsistencyException("topic exists: " + name); } + _subscriberMap.put(txn, key, rec); + + _lluMap.put(txn, lluDbKey, llu); + + txn.commit(); + } + catch(const IceDB::LMDBException& ex) + { + halt(_instance->communicator(), ex); } installTopic(name, id, true); } @@ -681,48 +628,38 @@ TopicManagerImpl::getContent(LogUpdate& llu, TopicContentSeq& content) reap(); } - for(;;) + try { - try + content.clear(); + for(map<string, TopicImplPtr>::const_iterator p = _topics.begin(); p != _topics.end(); ++p) { - content.clear(); - for(map<string, TopicImplPtr>::const_iterator p = _topics.begin(); p != _topics.end(); ++p) - { - TopicContent rec = p->second->getContent(); - content.push_back(rec); - } - llu = getLLU(_connection); - break; - } - catch(const DeadlockException&) - { - continue; - } - catch(const DatabaseException& ex) - { - halt(_instance->communicator(), ex); + TopicContent rec = p->second->getContent(); + content.push_back(rec); } + + IceDB::ReadOnlyTxn txn(_instance->dbEnv()); + _lluMap.get(txn, lluDbKey, llu); + } + catch(const IceDB::LMDBException& ex) + { + halt(_instance->communicator(), ex); } } LogUpdate TopicManagerImpl::getLastLogUpdate() const { - for(;;) + LogUpdate llu; + try { - try - { - return getLLU(_connection); - } - catch(const DeadlockException&) - { - continue; - } - catch(const DatabaseException& ex) - { - halt(_instance->communicator(), ex); - } + IceDB::ReadOnlyTxn txn(_instance->dbEnv()); + _lluMap.get(txn, lluDbKey, llu); } + catch(const IceDB::LMDBException& ex) + { + halt(_instance->communicator(), ex); + } + return llu; } void @@ -757,31 +694,25 @@ TopicManagerImpl::initMaster(const set<GroupNodeInfo>& slaves, const LogUpdate& // elected and gets the latest database state it immediately // updates the llu stamp. // - for(;;) + try { - try - { - content.clear(); + content.clear(); - TransactionHolder txn(_connection); + IceDB::ReadWriteTxn txn(_instance->dbEnv()); - for(map<string, TopicImplPtr>::const_iterator p = _topics.begin(); p != _topics.end(); ++p) - { - TopicContent rec = p->second->getContent(); - content.push_back(rec); - } - putLLU(_connection, llu); - txn.commit(); - break; - } - catch(const DeadlockException&) - { - continue; - } - catch(const DatabaseException& ex) + for(map<string, TopicImplPtr>::const_iterator p = _topics.begin(); p != _topics.end(); ++p) { - halt(_instance->communicator(), ex); + TopicContent rec = p->second->getContent(); + content.push_back(rec); } + + _lluMap.put(txn, lluDbKey, llu); + + txn.commit(); + } + catch(const IceDB::LMDBException& ex) + { + halt(_instance->communicator(), ex); } // Now initialize the observers. diff --git a/cpp/src/IceStorm/TopicManagerI.h b/cpp/src/IceStorm/TopicManagerI.h index 0dd67a019d9..448062781e4 100644 --- a/cpp/src/IceStorm/TopicManagerI.h +++ b/cpp/src/IceStorm/TopicManagerI.h @@ -15,8 +15,7 @@ #include <IceStorm/Replica.h> #include <IceStorm/Election.h> #include <IceStorm/Instrumentation.h> - -#include <Freeze/Freeze.h> +#include <IceStorm/Util.h> #include <IceUtil/RecMutex.h> @@ -26,8 +25,8 @@ namespace IceStorm // // Forward declarations. // -class Instance; -typedef IceUtil::Handle<Instance> InstancePtr; +class PersistentInstance; +typedef IceUtil::Handle<PersistentInstance> PersistentInstancePtr; class TopicImpl; typedef IceUtil::Handle<TopicImpl> TopicImplPtr; @@ -41,7 +40,7 @@ class TopicManagerImpl : public IceStormElection::Replica, { public: - TopicManagerImpl(const InstancePtr&); + TopicManagerImpl(const PersistentInstancePtr&); ~TopicManagerImpl(); // TopicManager methods. @@ -81,8 +80,7 @@ private: TopicPrx installTopic(const std::string&, const Ice::Identity&, bool, const IceStorm::SubscriberRecordSeq& = IceStorm::SubscriberRecordSeq()); - const InstancePtr _instance; - const Freeze::ConnectionPtr _connection; + const PersistentInstancePtr _instance; std::map<std::string, TopicImplPtr> _topics; @@ -92,6 +90,8 @@ private: Ice::ObjectPtr _syncImpl; Ice::ObjectPrx _sync; + LLUMap _lluMap; + SubscriberMap _subscriberMap; }; typedef IceUtil::Handle<TopicManagerImpl> TopicManagerImplPtr; diff --git a/cpp/src/IceStorm/TransientTopicI.cpp b/cpp/src/IceStorm/TransientTopicI.cpp index 5f52ebe2a2e..86ba24f2509 100644 --- a/cpp/src/IceStorm/TransientTopicI.cpp +++ b/cpp/src/IceStorm/TransientTopicI.cpp @@ -94,11 +94,6 @@ private: } -namespace IceStorm -{ -extern string identityToTopicName(const Ice::Identity& id); -} - TransientTopicImpl::TransientTopicImpl( const InstancePtr& instance, const string& name, @@ -398,7 +393,7 @@ TransientTopicImpl::link(const TopicPrx& topic, Ice::Int cost, const Ice::Curren vector<SubscriberPtr>::iterator p = find(_subscribers.begin(), _subscribers.end(), record.id); if(p != _subscribers.end()) { - string name = identityToTopicName(id); + string name = IceStormInternal::identityToTopicName(id); LinkExists ex; ex.name = name; throw ex; @@ -422,7 +417,7 @@ TransientTopicImpl::unlink(const TopicPrx& topic, const Ice::Current&) vector<SubscriberPtr>::iterator p = find(_subscribers.begin(), _subscribers.end(), id); if(p == _subscribers.end()) { - string name = identityToTopicName(id); + string name = IceStormInternal::identityToTopicName(id); TraceLevelsPtr traceLevels = _instance->traceLevels(); if(traceLevels->topic > 0) { @@ -464,7 +459,7 @@ TransientTopicImpl::getLinkInfoSeq(const Ice::Current&) const if(record.link && !(*p)->errored()) { LinkInfo info; - info.name = identityToTopicName(record.theTopic->ice_getIdentity()); + info.name = IceStormInternal::identityToTopicName(record.theTopic->ice_getIdentity()); info.cost = record.cost; info.theTopic = record.theTopic; seq.push_back(info); diff --git a/cpp/src/IceStorm/TransientTopicManagerI.cpp b/cpp/src/IceStorm/TransientTopicManagerI.cpp index 9099a7409ec..12595bf202b 100644 --- a/cpp/src/IceStorm/TransientTopicManagerI.cpp +++ b/cpp/src/IceStorm/TransientTopicManagerI.cpp @@ -22,13 +22,6 @@ using namespace IceStorm; using namespace std; -namespace IceStorm -{ - -extern Ice::Identity nameToIdentity(const InstancePtr&, const string&); - -} - TransientTopicManagerImpl::TransientTopicManagerImpl(const InstancePtr& instance) : _instance(instance) { @@ -52,7 +45,7 @@ TransientTopicManagerImpl::create(const string& name, const Ice::Current&) throw ex; } - Ice::Identity id = nameToIdentity(_instance, name); + Ice::Identity id = IceStormInternal::nameToIdentity(_instance, name); // // Called by constructor or with 'this' mutex locked. diff --git a/cpp/src/IceStorm/Util.cpp b/cpp/src/IceStorm/Util.cpp index 25bc43bef89..d59775e6044 100644 --- a/cpp/src/IceStorm/Util.cpp +++ b/cpp/src/IceStorm/Util.cpp @@ -8,13 +8,45 @@ // ********************************************************************** #include <IceStorm/Util.h> -#include <IceStorm/LLUMap.h> +#include <IceStorm/SubscriberRecord.h> +#include <IceStorm/Instance.h> -using namespace Freeze; -using namespace IceStormElection; using namespace IceStorm; using namespace std; +namespace IceStormInternal +{ +IceDB::IceContext dbContext; +} + +string +IceStormInternal::identityToTopicName(const Ice::Identity& id) +{ + // + // Work out the topic name. If the category is empty then we're in + // backwards compatibility mode and the name is just + // identity.name. Otherwise identity.name is topic.<topicname>. + // + if(id.category.empty()) + { + return id.name; + } + + assert(id.name.length() > 6 && id.name.compare(0, 6, "topic.") == 0); + return id.name.substr(6); +} + +Ice::Identity +IceStormInternal::nameToIdentity(const InstancePtr& instance, const string& name) +{ + // Identity is instanceName>/topic.<topicname> + Ice::Identity id; + id.category = instance->instanceName(); + id.name = "topic." + name; + + return id; +} + string IceStormInternal::describeEndpoints(const Ice::ObjectPrx& proxy) { @@ -26,7 +58,7 @@ IceStormInternal::describeEndpoints(const Ice::ObjectPrx& proxy) { if(i != endpoints.begin()) { - os << ", "; + os << ", "; } os << "\"" << (*i)->toString() << "\""; } @@ -38,33 +70,32 @@ IceStormInternal::describeEndpoints(const Ice::ObjectPrx& proxy) return os.str(); } -namespace +int +IceStormInternal::compareSubscriberRecordKey(const MDB_val* v1, const MDB_val* v2) { - -const string lluDbName = "llu"; - -} - -void -IceStormInternal::putLLU(const ConnectionPtr& connection, const LogUpdate& llu) -{ - LLUMap llumap(connection, lluDbName); - LLUMap::iterator ci = llumap.find("_manager"); - if(ci == llumap.end()) + SubscriberRecordKey k1, k2; + IceDB::Codec<SubscriberRecordKey, IceDB::IceContext, Ice::OutputStreamPtr>::read(k1, *v1, dbContext); + IceDB::Codec<SubscriberRecordKey, IceDB::IceContext, Ice::OutputStreamPtr>::read(k2, *v2, dbContext); + if(k1 < k2) { - llumap.put(LLUMap::value_type("_manager", llu)); + return -1; + } + else if(k1 == k2) + { + return 0; } else { - ci.set(llu); + return 1; } } -LogUpdate -IceStormInternal::getLLU(const ConnectionPtr& connection) +IceStormElection::LogUpdate +IceStormInternal::getIncrementedLLU(const IceDB::ReadWriteTxn& txn, LLUMap& lluMap) { - LLUMap llumap(connection, lluDbName); - LLUMap::iterator ci = llumap.find("_manager"); - assert(ci != llumap.end()); - return ci->second; -}
\ No newline at end of file + IceStormElection::LogUpdate llu; + lluMap.get(txn, lluDbKey, llu); + llu.iteration++; + lluMap.put(txn, lluDbKey, llu); + return llu; +} diff --git a/cpp/src/IceStorm/Util.h b/cpp/src/IceStorm/Util.h index 9249068e3bc..cb8184e8476 100644 --- a/cpp/src/IceStorm/Util.h +++ b/cpp/src/IceStorm/Util.h @@ -10,24 +10,46 @@ #ifndef UTIL_H #define UTIL_H -#include <string> - #include <Ice/Ice.h> - -#include <Freeze/Freeze.h> +#include <IceDB/IceDB.h> #include <IceStorm/LLURecord.h> +#include <IceStorm/SubscriberRecord.h> + +namespace IceStorm +{ + +// +// Forward declarations. +// +class Instance; +typedef IceUtil::Handle<Instance> InstancePtr; + +typedef IceDB::Dbi<IceStorm::SubscriberRecordKey, IceStorm::SubscriberRecord, IceDB::IceContext, Ice::OutputStreamPtr> + SubscriberMap; +typedef IceDB::Dbi<std::string, IceStormElection::LogUpdate, IceDB::IceContext, Ice::OutputStreamPtr> LLUMap; + +const std::string lluDbKey = "_manager"; + +} namespace IceStormInternal { std::string +identityToTopicName(const Ice::Identity&); + +Ice::Identity +nameToIdentity(const IceStorm::InstancePtr&, const std::string&); + +std::string describeEndpoints(const Ice::ObjectPrx&); -void -putLLU(const Freeze::ConnectionPtr&, const IceStormElection::LogUpdate&); +int +compareSubscriberRecordKey(const MDB_val* v1, const MDB_val* v2); IceStormElection::LogUpdate -getLLU(const Freeze::ConnectionPtr&); +getIncrementedLLU(const IceDB::ReadWriteTxn&, IceStorm::LLUMap&); } + #endif diff --git a/cpp/src/IceStorm/dummy.ice b/cpp/src/IceStorm/dummy.ice deleted file mode 100644 index 0169fa0df3a..00000000000 --- a/cpp/src/IceStorm/dummy.ice +++ /dev/null @@ -1,3 +0,0 @@ -// -// This file is necessary to compile StringBoolDict under msdev. -// diff --git a/cpp/src/IceStorm/dummy2.ice b/cpp/src/IceStorm/dummy2.ice deleted file mode 100644 index e69de29bb2d..00000000000 --- a/cpp/src/IceStorm/dummy2.ice +++ /dev/null diff --git a/cpp/src/IceUtil/Exception.cpp b/cpp/src/IceUtil/Exception.cpp index 886ff276b7d..1cdacff1e62 100644 --- a/cpp/src/IceUtil/Exception.cpp +++ b/cpp/src/IceUtil/Exception.cpp @@ -676,7 +676,7 @@ IceUtil::FileLockException::~FileLockException() throw() { } -const char* IceUtil::FileLockException::_name = "IceUtil::FileLockedException"; +const char* IceUtil::FileLockException::_name = "IceUtil::FileLockException"; string IceUtil::FileLockException::ice_name() const diff --git a/cpp/src/Makefile b/cpp/src/Makefile index 6fd6a0be040..d497e826943 100644 --- a/cpp/src/Makefile +++ b/cpp/src/Makefile @@ -51,6 +51,7 @@ endif IcePatch2 \ IceStormLib \ IceGridLib \ + IceDB \ IceStorm \ IceGrid endif diff --git a/cpp/src/Makefile.mak b/cpp/src/Makefile.mak index 409ab6e455e..d67f8c3353e 100644 --- a/cpp/src/Makefile.mak +++ b/cpp/src/Makefile.mak @@ -43,6 +43,7 @@ SUBDIRS = IceUtil \ IceDiscovery \ IceLocatorDiscovery \ IceXML \ + IceDB \ Freeze \ FreezeScript \ IcePatch2Lib \ |