summaryrefslogtreecommitdiff
path: root/cpp/src
diff options
context:
space:
mode:
authorBernard Normier <bernard@zeroc.com>2012-08-21 17:01:15 -0400
committerBernard Normier <bernard@zeroc.com>2012-08-21 17:03:33 -0400
commit472d9552de83c5e8b96030f47ed222de77556417 (patch)
treeda9ed5b4c66c3e9ce112dbe6797cf73d8d386152 /cpp/src
parentFixed ICE-2097: with Ice encoding > 1.0, Freeze evictors no longer maintain (diff)
downloadice-472d9552de83c5e8b96030f47ed222de77556417.tar.bz2
ice-472d9552de83c5e8b96030f47ed222de77556417.tar.xz
ice-472d9552de83c5e8b96030f47ed222de77556417.zip
Much better fix for ICE-2097: whether or not to keep the stats is no longer
determined by the encoding but by the Catalog data for the evictor. With the new default, the catalog data key and value are set, in particular the value is set to "Object". With old evictors, the catalog data value was set to "", which means ::Freeze::ObjectRecord (with stats).
Diffstat (limited to 'cpp/src')
-rw-r--r--cpp/src/Freeze/BackgroundSaveEvictorI.cpp23
-rw-r--r--cpp/src/Freeze/IndexI.cpp2
-rw-r--r--cpp/src/Freeze/ObjectStore.cpp34
-rw-r--r--cpp/src/Freeze/ObjectStore.h14
-rw-r--r--cpp/src/Freeze/TransactionalEvictorContext.cpp2
-rw-r--r--cpp/src/Freeze/TransactionalEvictorI.cpp21
-rwxr-xr-xcpp/src/FreezeScript/DumpDB.cpp54
-rwxr-xr-xcpp/src/FreezeScript/transformdb.cpp129
8 files changed, 144 insertions, 135 deletions
diff --git a/cpp/src/Freeze/BackgroundSaveEvictorI.cpp b/cpp/src/Freeze/BackgroundSaveEvictorI.cpp
index f71a286b2d9..7b2215f7341 100644
--- a/cpp/src/Freeze/BackgroundSaveEvictorI.cpp
+++ b/cpp/src/Freeze/BackgroundSaveEvictorI.cpp
@@ -301,7 +301,7 @@ Freeze::BackgroundSaveEvictorI::addFacet(const ObjectPtr& servant, const Identit
ObjectRecord& rec = element->rec;
rec.servant = servant;
- if(_encoding == Ice::Encoding_1_0)
+ if(store->keepStats())
{
rec.stats.creationTime = IceUtil::Time::now(IceUtil::Time::Monotonic).toMilliSeconds();
rec.stats.lastSaveTime = 0;
@@ -934,11 +934,7 @@ Freeze::BackgroundSaveEvictorI::run()
deque<StreamedObject> streamedObjectQueue;
- Long streamStart = 0;
- if(_encoding == Ice::Encoding_1_0 || _trace >= 1)
- {
- streamStart = IceUtil::Time::now(IceUtil::Time::Monotonic).toMilliSeconds();
- }
+ Long streamStart = IceUtil::Time::now(IceUtil::Time::Monotonic).toMilliSeconds();
//
// Stream each element
@@ -1120,12 +1116,8 @@ Freeze::BackgroundSaveEvictorI::run()
txSize = streamedObjectQueue.size();
}
- Long saveStart = 0;
- if(_encoding == Ice::Encoding_1_0 || _trace >= 1)
- {
- saveStart = IceUtil::Time::now(IceUtil::Time::Monotonic).toMilliSeconds();
- }
-
+ Long saveStart = IceUtil::Time::now(IceUtil::Time::Monotonic).toMilliSeconds();
+
try
{
DbTxn* tx = 0;
@@ -1404,17 +1396,18 @@ Freeze::BackgroundSaveEvictorI::stream(const BackgroundSaveEvictorElementPtr& el
obj.status = element->status;
obj.store = &element->store;
-
+
const Identity& ident = element->cachePosition->first;
ObjectStoreBase::marshal(ident, obj.key, _communicator, _encoding);
if(element->status != destroyed)
{
- if(_encoding == Ice::Encoding_1_0)
+ bool keepStats = obj.store->keepStats();
+ if(keepStats)
{
EvictorIBase::updateStats(element->rec.stats, streamStart);
}
- ObjectStoreBase::marshal(element->rec, obj.value, _communicator, _encoding);
+ ObjectStoreBase::marshal(element->rec, obj.value, _communicator, _encoding, keepStats);
}
}
diff --git a/cpp/src/Freeze/IndexI.cpp b/cpp/src/Freeze/IndexI.cpp
index f0910bb2452..11a9bfc4be4 100644
--- a/cpp/src/Freeze/IndexI.cpp
+++ b/cpp/src/Freeze/IndexI.cpp
@@ -405,7 +405,7 @@ Freeze::IndexI::secondaryKeyCreate(Db* secondary, const Dbt* dbKey,
ObjectRecord rec;
Byte* first = static_cast<Byte*>(dbValue->get_data());
Value value(first, first + dbValue->get_size());
- ObjectStoreBase::unmarshal(rec, value, communicator, encoding);
+ ObjectStoreBase::unmarshal(rec, value, communicator, encoding, _store->keepStats());
Key bytes;
if(_index.marshalKey(rec.servant, bytes))
diff --git a/cpp/src/Freeze/ObjectStore.cpp b/cpp/src/Freeze/ObjectStore.cpp
index 899840b62a8..4015ab63eb5 100644
--- a/cpp/src/Freeze/ObjectStore.cpp
+++ b/cpp/src/Freeze/ObjectStore.cpp
@@ -29,7 +29,8 @@ Freeze::ObjectStoreBase::ObjectStoreBase(const string& facet, const string& face
_evictor(evictor),
_indices(indices),
_communicator(evictor->communicator()),
- _encoding(evictor->encoding())
+ _encoding(evictor->encoding()),
+ _keepStats(false)
{
if(facet == "")
{
@@ -60,10 +61,17 @@ Freeze::ObjectStoreBase::ObjectStoreBase(const string& facet, const string& face
Catalog::iterator p = catalog.find(evictor->filename());
if(p != catalog.end())
{
- if(p->second.evictor == false)
+ if(p->second.evictor)
+ {
+ //
+ // empty means the value is ::Freeze::ObjectRecord
+ //
+ _keepStats = p->second.value.empty();
+ }
+ else
{
DatabaseException ex(__FILE__, __LINE__);
- ex.message = evictor->filename() + " is an evictor database";
+ ex.message = evictor->filename() + " is not an evictor database";
throw ex;
}
}
@@ -141,6 +149,8 @@ Freeze::ObjectStoreBase::ObjectStoreBase(const string& facet, const string& face
{
CatalogData catalogData;
catalogData.evictor = true;
+ catalogData.key = "Ice::Identity";
+ catalogData.value = "Object";
catalog.put(Catalog::value_type(evictor->filename(), catalogData));
}
@@ -348,12 +358,13 @@ void
Freeze::ObjectStoreBase::marshal(const ObjectRecord& v,
Value& bytes,
const CommunicatorPtr& communicator,
- const EncodingVersion& encoding)
+ const EncodingVersion& encoding,
+ bool keepStats)
{
IceInternal::InstancePtr instance = IceInternal::getInstance(communicator);
IceInternal::BasicStream stream(instance.get(), encoding, true);
stream.startWriteEncaps();
- if(encoding == Ice::Encoding_1_0)
+ if(keepStats)
{
v.__write(&stream);
}
@@ -371,7 +382,8 @@ void
Freeze::ObjectStoreBase::unmarshal(ObjectRecord& v,
const Value& bytes,
const CommunicatorPtr& communicator,
- const EncodingVersion& encoding)
+ const EncodingVersion& encoding,
+ bool keepStats)
{
IceInternal::InstancePtr instance = IceInternal::getInstance(communicator);
IceInternal::BasicStream stream(instance.get(), encoding, true);
@@ -381,7 +393,7 @@ Freeze::ObjectStoreBase::unmarshal(ObjectRecord& v,
stream.i = stream.b.begin();
stream.startReadEncaps();
- if(encoding == Ice::Encoding_1_0)
+ if(keepStats)
{
v.__read(&stream);
}
@@ -453,7 +465,7 @@ Freeze::ObjectStoreBase::load(const Identity& ident, const TransactionIPtr& tran
}
}
- unmarshal(rec, value, _communicator, _encoding);
+ unmarshal(rec, value, _communicator, _encoding, _keepStats);
_evictor->initialize(ident, _facet, rec.servant);
return true;
}
@@ -477,7 +489,7 @@ Freeze::ObjectStoreBase::update(const Identity& ident, const ObjectRecord& rec,
marshal(ident, key, _communicator, _encoding);
Value value;
- marshal(rec, value, _communicator, _encoding);
+ marshal(rec, value, _communicator, _encoding, _keepStats);
Dbt dbKey;
Dbt dbValue;
@@ -522,7 +534,7 @@ Freeze::ObjectStoreBase::insert(const Identity& ident, const ObjectRecord& rec,
marshal(ident, key, _communicator, _encoding);
Value value;
- marshal(rec, value, _communicator, _encoding);
+ marshal(rec, value, _communicator, _encoding, _keepStats);
Dbt dbKey;
Dbt dbValue;
@@ -670,7 +682,7 @@ Freeze::ObjectStoreBase::loadImpl(const Identity& ident, ObjectRecord& rec)
}
}
- unmarshal(rec, value, _communicator, _encoding);
+ unmarshal(rec, value, _communicator, _encoding, _keepStats);
_evictor->initialize(ident, _facet, rec.servant);
return true;
}
diff --git a/cpp/src/Freeze/ObjectStore.h b/cpp/src/Freeze/ObjectStore.h
index a78c3e197d9..ff2574fa931 100644
--- a/cpp/src/Freeze/ObjectStore.h
+++ b/cpp/src/Freeze/ObjectStore.h
@@ -44,8 +44,8 @@ public:
static void marshal(const Ice::Identity&, Key&, const Ice::CommunicatorPtr&, const Ice::EncodingVersion&);
static void unmarshal(Ice::Identity&, const Key&, const Ice::CommunicatorPtr&, const Ice::EncodingVersion&);
- static void marshal(const ObjectRecord&, Value&, const Ice::CommunicatorPtr&, const Ice::EncodingVersion&);
- static void unmarshal(ObjectRecord&, const Value&, const Ice::CommunicatorPtr&, const Ice::EncodingVersion&);
+ static void marshal(const ObjectRecord&, Value&, const Ice::CommunicatorPtr&, const Ice::EncodingVersion&, bool);
+ static void unmarshal(ObjectRecord&, const Value&, const Ice::CommunicatorPtr&, const Ice::EncodingVersion&, bool);
bool load(const Ice::Identity&, const TransactionIPtr&, ObjectRecord&);
void update(const Ice::Identity&, const ObjectRecord&, const TransactionIPtr&);
@@ -64,7 +64,8 @@ public:
const Ice::CommunicatorPtr& communicator() const;
const Ice::EncodingVersion& encoding() const;
const std::string& facet() const;
-
+ bool keepStats() const;
+
protected:
bool loadImpl(const Ice::Identity&, ObjectRecord&);
@@ -79,6 +80,7 @@ private:
Ice::CommunicatorPtr _communicator;
Ice::EncodingVersion _encoding;
Ice::ObjectPtr _sampleServant;
+ bool _keepStats;
};
@@ -156,6 +158,12 @@ ObjectStoreBase::facet() const
return _facet;
}
+inline bool
+ObjectStoreBase::keepStats() const
+{
+ return _keepStats;
+}
+
inline const Ice::ObjectPtr&
ObjectStoreBase::sampleServant() const
{
diff --git a/cpp/src/Freeze/TransactionalEvictorContext.cpp b/cpp/src/Freeze/TransactionalEvictorContext.cpp
index e7c12e6a6b0..298019aed26 100644
--- a/cpp/src/Freeze/TransactionalEvictorContext.cpp
+++ b/cpp/src/Freeze/TransactionalEvictorContext.cpp
@@ -275,7 +275,7 @@ Freeze::TransactionalEvictorContext::ServantHolder::~ServantHolder()
{
if(!_body.readOnly && !_body.removed)
{
- if(_body.store->encoding() == Ice::Encoding_1_0)
+ if(_body.store->keepStats())
{
EvictorIBase::updateStats(_body.rec.stats,
IceUtil::Time::now(IceUtil::Time::Monotonic).toMilliSeconds());
diff --git a/cpp/src/Freeze/TransactionalEvictorI.cpp b/cpp/src/Freeze/TransactionalEvictorI.cpp
index 40ec9191450..dfca69dee6a 100644
--- a/cpp/src/Freeze/TransactionalEvictorI.cpp
+++ b/cpp/src/Freeze/TransactionalEvictorI.cpp
@@ -139,27 +139,26 @@ Freeze::TransactionalEvictorI::addFacet(const ObjectPtr& servant, const Identity
checkIdentity(ident);
DeactivateController::Guard deactivateGuard(_deactivateController);
+ ObjectStore<TransactionalEvictorElement>* store = findStore(facet, _createDb);
+ if(store == 0)
+ {
+ throw NotFoundException(__FILE__, __LINE__, "addFacet: could not open database for facet '"
+ + facet + "'");
+ }
+
Ice::Long currentTime = 0;
- if(_encoding == Ice::Encoding_1_0)
+ if(store->keepStats())
{
currentTime = IceUtil::Time::now(IceUtil::Time::Monotonic).toMilliSeconds();
}
Statistics stats = { currentTime };
ObjectRecord rec = { servant, stats };
-
- ObjectStore<TransactionalEvictorElement>* store = findStore(facet, _createDb);
-
- if(store == 0)
- {
- throw NotFoundException(__FILE__, __LINE__, "addFacet: could not open database for facet '"
- + facet + "'");
- }
-
+
TransactionIPtr tx = beforeQuery();
- if(_encoding == Ice::Encoding_1_0)
+ if(store->keepStats())
{
updateStats(rec.stats, currentTime);
}
diff --git a/cpp/src/FreezeScript/DumpDB.cpp b/cpp/src/FreezeScript/DumpDB.cpp
index 955cbcf66af..b2da041ec3d 100755
--- a/cpp/src/FreezeScript/DumpDB.cpp
+++ b/cpp/src/FreezeScript/DumpDB.cpp
@@ -106,7 +106,6 @@ usage(const string& n)
"--select EXPR Dump a record only if EXPR is true.\n"
"-c, --catalog Display information about the databases in an\n"
" environment, or about a particular database.\n"
- "--encoding VERSION Sets the encoding version for the database environment.\n"
;
}
@@ -159,7 +158,6 @@ run(const Ice::StringSeq& originalArgs, const Ice::CommunicatorPtr& communicator
opts.addOpt("", "value", IceUtilInternal::Options::NeedArg);
opts.addOpt("", "select", IceUtilInternal::Options::NeedArg);
opts.addOpt("c", "catalog");
- opts.addOpt("", "encoding", IceUtilInternal::Options::NeedArg);
vector<string> args;
try
@@ -173,8 +171,6 @@ run(const Ice::StringSeq& originalArgs, const Ice::CommunicatorPtr& communicator
return EXIT_FAILURE;
}
- Ice::EncodingVersion encoding = Ice::currentEncoding;
-
//
// Freeze creates a lock file by default to prevent multiple processes from opening
// the same database environment simultaneously. In the case of a read-only program
@@ -193,9 +189,6 @@ run(const Ice::StringSeq& originalArgs, const Ice::CommunicatorPtr& communicator
{
props->setProperty(prefix + ".LockFile", "0");
}
-
- encoding = Ice::stringToEncodingVersion(
- props->getPropertyWithDefault(prefix + ".Encoding", Ice::encodingVersionToString(encoding)));
}
if(opts.isSet("h"))
@@ -321,17 +314,7 @@ run(const Ice::StringSeq& originalArgs, const Ice::CommunicatorPtr& communicator
{
selectExpr = opts.optArg("select");
}
- if(opts.isSet("encoding"))
- {
- encoding = Ice::stringToEncodingVersion(opts.optArg("encoding"));
- }
-
- if(!IceInternal::isSupported(encoding, Ice::currentEncoding))
- {
- cerr << appName << ": " << "unsupported encoding" << endl;
- return EXIT_FAILURE;
- }
-
+
if(outputFile.empty() && args.size() != 2)
{
usage(appName);
@@ -374,15 +357,16 @@ run(const Ice::StringSeq& originalArgs, const Ice::CommunicatorPtr& communicator
if(inputFile.empty())
{
const string evictorKeyTypeName = "::Ice::Identity";
- const string evictorValueTypeName = (encoding == Ice::Encoding_1_0) ? "::Freeze::ObjectRecord" : "Object";
+ const string oldEvictorValueTypeName = "::Freeze::ObjectRecord";
+ const string newEvictorValueTypeName = "Object";
- if((!keyTypeName.empty() && valueTypeName.empty()) || (keyTypeName.empty() && !valueTypeName.empty()))
+ if((!keyTypeName.empty() && valueTypeName.empty()) || (keyTypeName.empty() && !valueTypeName.empty() && !evictor))
{
cerr << appName << ": a key type and a value type must be specified" << endl;
usage(appName);
return EXIT_FAILURE;
}
- else if(!evictor && keyTypeName.empty() && valueTypeName.empty())
+ else if(valueTypeName.empty())
{
try
{
@@ -404,24 +388,32 @@ run(const Ice::StringSeq& originalArgs, const Ice::CommunicatorPtr& communicator
{
evictor = true;
}
- else
- {
- keyTypeName = p->second.key;
- valueTypeName = p->second.value;
- }
+ keyTypeName = p->second.key;
+ valueTypeName = p->second.value;
+
+ if(evictor && valueTypeName.empty())
+ {
+ valueTypeName = oldEvictorValueTypeName;
+ }
}
}
catch(const FreezeScript::FailureException& ex)
{
- cerr << appName << ": " << ex.reason() << endl;
- return EXIT_FAILURE;
+ cerr << appName << ": " << ex.reason() << endl;
+ return EXIT_FAILURE;
}
}
if(evictor)
{
- keyTypeName = evictorKeyTypeName;
- valueTypeName = evictorValueTypeName;
+ if(keyTypeName.empty())
+ {
+ keyTypeName = evictorKeyTypeName;
+ }
+ if(valueTypeName.empty())
+ {
+ valueTypeName = newEvictorValueTypeName;
+ }
}
Slice::TypePtr keyType, valueType;
@@ -553,7 +545,7 @@ run(const Ice::StringSeq& originalArgs, const Ice::CommunicatorPtr& communicator
dbValue.set_flags(DB_DBT_USERMEM | DB_DBT_PARTIAL);
Dbc* dbc = 0;
- db.cursor(0, &dbc, 0);
+ db.cursor(txn, &dbc, 0);
while(dbc->get(&dbKey, &dbValue, DB_NEXT) == 0)
{
diff --git a/cpp/src/FreezeScript/transformdb.cpp b/cpp/src/FreezeScript/transformdb.cpp
index b9f6e9774ef..24bfdd71d1e 100755
--- a/cpp/src/FreezeScript/transformdb.cpp
+++ b/cpp/src/FreezeScript/transformdb.cpp
@@ -83,10 +83,8 @@ usage(const std::string& n)
"-p Purge objects whose types no longer exist.\n"
"-c Use catastrophic recovery on the old database environment.\n"
"-w Suppress duplicate warnings during migration.\n"
- "--encoding VER[,VER] Specifies the Ice encoding version for the database\n"
- " environments. If the encoding version remains the same,\n"
- " only one needs to be specified. Otherwise, the versions\n"
- " are specified as old-version,new-version.\n"
+ "--encoding VERSION Set the Ice encoding version for the new database\n"
+ " environment.\n"
"-f FILE Execute the transformation descriptors in the file FILE.\n"
;
}
@@ -236,7 +234,6 @@ run(const Ice::StringSeq& originalArgs, const Ice::CommunicatorPtr& communicator
string valueTypeNames;
string dbEnvName, dbName, dbEnvNameNew;
bool allDb = false;
- Ice::EncodingVersion oldEncoding = Ice::currentEncoding;
Ice::EncodingVersion newEncoding = Ice::currentEncoding;
IceUtilInternal::Options opts;
@@ -440,38 +437,17 @@ run(const Ice::StringSeq& originalArgs, const Ice::CommunicatorPtr& communicator
{
props->setProperty(prefix + ".LockFile", "0");
}
-
- oldEncoding = Ice::stringToEncodingVersion(
- props->getPropertyWithDefault(prefix + ".Encoding", Ice::encodingVersionToString(oldEncoding)));
}
if(opts.isSet("encoding"))
{
- string encodingList = opts.optArg("encoding");
- string::size_type pos = encodingList.find(",");
+ newEncoding = Ice::stringToEncodingVersion(opts.optArg("encoding"));
- if(pos == 0 || pos == encodingList.size())
+ if(!IceInternal::isSupported(newEncoding, Ice::currentEncoding))
{
cerr << appName << ": " << "unsupported encoding" << endl;
return EXIT_FAILURE;
}
- if(pos == string::npos)
- {
- oldEncoding = Ice::stringToEncodingVersion(encodingList);
- newEncoding = oldEncoding;
- }
- else
- {
- oldEncoding = Ice::stringToEncodingVersion(encodingList.substr(0, pos));
- newEncoding = Ice::stringToEncodingVersion(encodingList.substr(pos + 1));
- }
- }
-
- if(!IceInternal::isSupported(oldEncoding, Ice::currentEncoding) ||
- !IceInternal::isSupported(newEncoding, Ice::currentEncoding))
- {
- cerr << appName << ": " << "unsupported encoding" << endl;
- return EXIT_FAILURE;
}
Slice::UnitPtr oldUnit = Slice::Unit::createUnit(true, true, ice, underscore);
@@ -530,8 +506,8 @@ run(const Ice::StringSeq& originalArgs, const Ice::CommunicatorPtr& communicator
FreezeScript::TransformAnalyzer analyzer(oldUnit, newUnit, ignoreTypeChanges, out, missingTypes, analyzeErrors);
const string evictorKeyName = "::Ice::Identity";
- const string oldEvictorValueTypeName = (oldEncoding == Ice::Encoding_1_0) ? "::Freeze::ObjectRecord" : "Object";
- const string newEvictorValueTypeName = (newEncoding == Ice::Encoding_1_0) ? "::Freeze::ObjectRecord" : "Object";
+ const string oldEvictorValueName = "::Freeze::ObjectRecord";
+ const string newEvictorValueName = "Object";
if(allDb)
{
@@ -544,8 +520,17 @@ run(const Ice::StringSeq& originalArgs, const Ice::CommunicatorPtr& communicator
if(p->second.evictor)
{
- keyName = evictorKeyName;
- valueName = oldEvictorValueTypeName;
+ keyName = p->second.key;
+ valueName = p->second.value;
+
+ if(keyName.empty())
+ {
+ keyName = evictorKeyName;
+ }
+ if(valueName.empty())
+ {
+ valueName = oldEvictorValueName;
+ }
}
else
{
@@ -578,7 +563,10 @@ run(const Ice::StringSeq& originalArgs, const Ice::CommunicatorPtr& communicator
Slice::TypePtr newValueType;
if(p->second.evictor)
{
- newValueType = findType(newUnit, newEvictorValueTypeName);
+ //
+ // The new evictor does not keep stats
+ //
+ newValueType = findType(newUnit, newEvictorValueName);
}
else
{
@@ -604,47 +592,44 @@ run(const Ice::StringSeq& originalArgs, const Ice::CommunicatorPtr& communicator
{
return EXIT_FAILURE;
}
-
+
analyzer.addDatabase(p->first, oldKeyType, newKeyType, oldValueType, newValueType);
}
}
else
{
string oldKeyName, newKeyName, oldValueName, newValueName;
-
- if(evictor)
- {
- oldKeyName = newKeyName = evictorKeyName;
- oldValueName = oldEvictorValueTypeName;
- newValueName = newEvictorValueTypeName;
- }
- else
- {
- string::size_type pos;
-
- if(keyTypeNames.empty() || valueTypeNames.empty())
- {
- usage(appName);
- return EXIT_FAILURE;
- }
-
- pos = keyTypeNames.find(',');
- if(pos == 0 || pos == keyTypeNames.size())
- {
- usage(appName);
- return EXIT_FAILURE;
- }
- if(pos == string::npos)
- {
- oldKeyName = keyTypeNames;
- newKeyName = keyTypeNames;
- }
+
+ string::size_type pos;
+
+ if(!evictor && (keyTypeNames.empty() || valueTypeNames.empty()))
+ {
+ usage(appName);
+ return EXIT_FAILURE;
+ }
+
+ if(!keyTypeNames.empty())
+ {
+ pos = keyTypeNames.find(',');
+ if(pos == 0 || pos == keyTypeNames.size())
+ {
+ usage(appName);
+ return EXIT_FAILURE;
+ }
+ if(pos == string::npos)
+ {
+ oldKeyName = keyTypeNames;
+ newKeyName = keyTypeNames;
+ }
else
{
oldKeyName = keyTypeNames.substr(0, pos);
newKeyName = keyTypeNames.substr(pos + 1);
}
+ }
+ if(!valueTypeNames.empty())
+ {
pos = valueTypeNames.find(',');
if(pos == 0 || pos == valueTypeNames.size())
{
@@ -662,6 +647,26 @@ run(const Ice::StringSeq& originalArgs, const Ice::CommunicatorPtr& communicator
newValueName = valueTypeNames.substr(pos + 1);
}
}
+
+ if(evictor)
+ {
+ if(oldKeyName.empty())
+ {
+ oldKeyName = evictorKeyName;
+ }
+ if(newKeyName.empty())
+ {
+ newKeyName = evictorKeyName;
+ }
+ if(oldValueName.empty())
+ {
+ oldValueName = newEvictorValueName;
+ }
+ if(newValueName.empty())
+ {
+ newValueName = newEvictorValueName;
+ }
+ }
//
// Look up the key and value types in the old and new Slice definitions.