summaryrefslogtreecommitdiff
path: root/cpp/src
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src')
-rw-r--r--cpp/src/Freeze/BackgroundSaveEvictorI.cpp30
-rw-r--r--cpp/src/Freeze/ObjectStore.cpp21
-rw-r--r--cpp/src/Freeze/TransactionalEvictorContext.cpp7
-rw-r--r--cpp/src/Freeze/TransactionalEvictorI.cpp16
-rwxr-xr-xcpp/src/FreezeScript/DumpDB.cpp19
-rwxr-xr-xcpp/src/FreezeScript/transformdb.cpp60
6 files changed, 132 insertions, 21 deletions
diff --git a/cpp/src/Freeze/BackgroundSaveEvictorI.cpp b/cpp/src/Freeze/BackgroundSaveEvictorI.cpp
index 1d8fa7acce4..f71a286b2d9 100644
--- a/cpp/src/Freeze/BackgroundSaveEvictorI.cpp
+++ b/cpp/src/Freeze/BackgroundSaveEvictorI.cpp
@@ -301,10 +301,12 @@ Freeze::BackgroundSaveEvictorI::addFacet(const ObjectPtr& servant, const Identit
ObjectRecord& rec = element->rec;
rec.servant = servant;
- rec.stats.creationTime = IceUtil::Time::now(IceUtil::Time::Monotonic).toMilliSeconds();
- rec.stats.lastSaveTime = 0;
- rec.stats.avgSaveTime = 0;
-
+ if(_encoding == Ice::Encoding_1_0)
+ {
+ rec.stats.creationTime = IceUtil::Time::now(IceUtil::Time::Monotonic).toMilliSeconds();
+ rec.stats.lastSaveTime = 0;
+ rec.stats.avgSaveTime = 0;
+ }
addToModifiedQueue(element);
break;
}
@@ -932,7 +934,11 @@ Freeze::BackgroundSaveEvictorI::run()
deque<StreamedObject> streamedObjectQueue;
- Long streamStart = IceUtil::Time::now(IceUtil::Time::Monotonic).toMilliSeconds();
+ Long streamStart = 0;
+ if(_encoding == Ice::Encoding_1_0 || _trace >= 1)
+ {
+ streamStart = IceUtil::Time::now(IceUtil::Time::Monotonic).toMilliSeconds();
+ }
//
// Stream each element
@@ -1114,7 +1120,12 @@ Freeze::BackgroundSaveEvictorI::run()
txSize = streamedObjectQueue.size();
}
- Long saveStart = IceUtil::Time::now(IceUtil::Time::Monotonic).toMilliSeconds();
+ Long saveStart = 0;
+ if(_encoding == Ice::Encoding_1_0 || _trace >= 1)
+ {
+ saveStart = IceUtil::Time::now(IceUtil::Time::Monotonic).toMilliSeconds();
+ }
+
try
{
DbTxn* tx = 0;
@@ -1399,7 +1410,10 @@ Freeze::BackgroundSaveEvictorI::stream(const BackgroundSaveEvictorElementPtr& el
if(element->status != destroyed)
{
- EvictorIBase::updateStats(element->rec.stats, streamStart);
+ if(_encoding == Ice::Encoding_1_0)
+ {
+ EvictorIBase::updateStats(element->rec.stats, streamStart);
+ }
ObjectStoreBase::marshal(element->rec, obj.value, _communicator, _encoding);
}
}
@@ -1422,6 +1436,8 @@ Freeze::BackgroundSaveEvictorElement::BackgroundSaveEvictorElement(ObjectStore<B
stale(true),
status(clean)
{
+ const Statistics cleanStats = { 0 };
+ rec.stats = cleanStats;
}
Freeze::BackgroundSaveEvictorElement::~BackgroundSaveEvictorElement()
diff --git a/cpp/src/Freeze/ObjectStore.cpp b/cpp/src/Freeze/ObjectStore.cpp
index 744381ed984..899840b62a8 100644
--- a/cpp/src/Freeze/ObjectStore.cpp
+++ b/cpp/src/Freeze/ObjectStore.cpp
@@ -353,7 +353,15 @@ Freeze::ObjectStoreBase::marshal(const ObjectRecord& v,
IceInternal::InstancePtr instance = IceInternal::getInstance(communicator);
IceInternal::BasicStream stream(instance.get(), encoding, true);
stream.startWriteEncaps();
- v.__write(&stream);
+ if(encoding == Ice::Encoding_1_0)
+ {
+ v.__write(&stream);
+ }
+ else
+ {
+ stream.write(v.servant);
+ }
+
stream.writePendingObjects();
stream.endWriteEncaps();
vector<Byte>(stream.b.begin(), stream.b.end()).swap(bytes);
@@ -372,7 +380,16 @@ Freeze::ObjectStoreBase::unmarshal(ObjectRecord& v,
memcpy(&stream.b[0], &bytes[0], bytes.size());
stream.i = stream.b.begin();
stream.startReadEncaps();
- v.__read(&stream);
+
+ if(encoding == Ice::Encoding_1_0)
+ {
+ v.__read(&stream);
+ }
+ else
+ {
+ stream.read(v.servant);
+ }
+
stream.readPendingObjects();
stream.endReadEncaps();
}
diff --git a/cpp/src/Freeze/TransactionalEvictorContext.cpp b/cpp/src/Freeze/TransactionalEvictorContext.cpp
index b0dacafe261..e7c12e6a6b0 100644
--- a/cpp/src/Freeze/TransactionalEvictorContext.cpp
+++ b/cpp/src/Freeze/TransactionalEvictorContext.cpp
@@ -275,8 +275,11 @@ Freeze::TransactionalEvictorContext::ServantHolder::~ServantHolder()
{
if(!_body.readOnly && !_body.removed)
{
- EvictorIBase::updateStats(_body.rec.stats,
- IceUtil::Time::now(IceUtil::Time::Monotonic).toMilliSeconds());
+ if(_body.store->encoding() == Ice::Encoding_1_0)
+ {
+ EvictorIBase::updateStats(_body.rec.stats,
+ IceUtil::Time::now(IceUtil::Time::Monotonic).toMilliSeconds());
+ }
_body.store->update(_body.current->id, _body.rec, ctx->_tx);
}
diff --git a/cpp/src/Freeze/TransactionalEvictorI.cpp b/cpp/src/Freeze/TransactionalEvictorI.cpp
index 5d984a5cf4f..40ec9191450 100644
--- a/cpp/src/Freeze/TransactionalEvictorI.cpp
+++ b/cpp/src/Freeze/TransactionalEvictorI.cpp
@@ -139,12 +139,15 @@ Freeze::TransactionalEvictorI::addFacet(const ObjectPtr& servant, const Identity
checkIdentity(ident);
DeactivateController::Guard deactivateGuard(_deactivateController);
- Ice::Long currentTime = IceUtil::Time::now(IceUtil::Time::Monotonic).toMilliSeconds();
+ Ice::Long currentTime = 0;
+
+ if(_encoding == Ice::Encoding_1_0)
+ {
+ currentTime = IceUtil::Time::now(IceUtil::Time::Monotonic).toMilliSeconds();
+ }
Statistics stats = { currentTime };
- ObjectRecord rec;
- rec.servant = servant;
- rec.stats = stats;
+ ObjectRecord rec = { servant, stats };
ObjectStore<TransactionalEvictorElement>* store = findStore(facet, _createDb);
@@ -156,7 +159,10 @@ Freeze::TransactionalEvictorI::addFacet(const ObjectPtr& servant, const Identity
TransactionIPtr tx = beforeQuery();
- updateStats(rec.stats, currentTime);
+ if(_encoding == Ice::Encoding_1_0)
+ {
+ updateStats(rec.stats, currentTime);
+ }
if(!store->insert(ident, rec, tx))
{
diff --git a/cpp/src/FreezeScript/DumpDB.cpp b/cpp/src/FreezeScript/DumpDB.cpp
index 5472b1d50a8..955cbcf66af 100755
--- a/cpp/src/FreezeScript/DumpDB.cpp
+++ b/cpp/src/FreezeScript/DumpDB.cpp
@@ -106,6 +106,7 @@ 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"
;
}
@@ -158,6 +159,7 @@ 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
@@ -171,6 +173,8 @@ 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
@@ -189,6 +193,9 @@ 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"))
@@ -314,6 +321,16 @@ 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)
{
@@ -357,7 +374,7 @@ run(const Ice::StringSeq& originalArgs, const Ice::CommunicatorPtr& communicator
if(inputFile.empty())
{
const string evictorKeyTypeName = "::Ice::Identity";
- const string evictorValueTypeName = "::Freeze::ObjectRecord";
+ const string evictorValueTypeName = (encoding == Ice::Encoding_1_0) ? "::Freeze::ObjectRecord" : "Object";
if((!keyTypeName.empty() && valueTypeName.empty()) || (keyTypeName.empty() && !valueTypeName.empty()))
{
diff --git a/cpp/src/FreezeScript/transformdb.cpp b/cpp/src/FreezeScript/transformdb.cpp
index 6a6bd5fe7f5..b9f6e9774ef 100755
--- a/cpp/src/FreezeScript/transformdb.cpp
+++ b/cpp/src/FreezeScript/transformdb.cpp
@@ -83,6 +83,10 @@ 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"
"-f FILE Execute the transformation descriptors in the file FILE.\n"
;
}
@@ -232,6 +236,8 @@ 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;
opts.addOpt("h", "help");
@@ -245,6 +251,7 @@ run(const Ice::StringSeq& originalArgs, const Ice::CommunicatorPtr& communicator
opts.addOpt("p");
opts.addOpt("c");
opts.addOpt("w");
+ opts.addOpt("", "encoding", IceUtilInternal::Options::NeedArg);
opts.addOpt("f", "", IceUtilInternal::Options::NeedArg);
opts.addOpt("", "include-old", IceUtilInternal::Options::NeedArg, "", IceUtilInternal::Options::Repeat);
opts.addOpt("", "include-new", IceUtilInternal::Options::NeedArg, "", IceUtilInternal::Options::Repeat);
@@ -308,6 +315,7 @@ run(const Ice::StringSeq& originalArgs, const Ice::CommunicatorPtr& communicator
purgeObjects = opts.isSet("p");
catastrophicRecover = opts.isSet("c");
suppress = opts.isSet("w");
+
if(opts.isSet("f"))
{
inputFile = opts.optArg("f");
@@ -432,6 +440,38 @@ 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(",");
+
+ if(pos == 0 || pos == encodingList.size())
+ {
+ 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);
@@ -490,7 +530,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 evictorValueName = "::Freeze::ObjectRecord";
+ const string oldEvictorValueTypeName = (oldEncoding == Ice::Encoding_1_0) ? "::Freeze::ObjectRecord" : "Object";
+ const string newEvictorValueTypeName = (newEncoding == Ice::Encoding_1_0) ? "::Freeze::ObjectRecord" : "Object";
if(allDb)
{
@@ -504,7 +545,7 @@ run(const Ice::StringSeq& originalArgs, const Ice::CommunicatorPtr& communicator
if(p->second.evictor)
{
keyName = evictorKeyName;
- valueName = evictorValueName;
+ valueName = oldEvictorValueTypeName;
}
else
{
@@ -533,7 +574,17 @@ run(const Ice::StringSeq& originalArgs, const Ice::CommunicatorPtr& communicator
cerr << appName << ": type `" << valueName << "' from database `" << p->first
<< "' not found in old Slice definitions" << endl;
}
- Slice::TypePtr newValueType = findType(newUnit, valueName);
+
+ Slice::TypePtr newValueType;
+ if(p->second.evictor)
+ {
+ newValueType = findType(newUnit, newEvictorValueTypeName);
+ }
+ else
+ {
+ newValueType = findType(newUnit, valueName);
+ }
+
if(!newValueType)
{
cerr << appName << ": type `" << valueName << "' from database `" << p->first
@@ -564,7 +615,8 @@ run(const Ice::StringSeq& originalArgs, const Ice::CommunicatorPtr& communicator
if(evictor)
{
oldKeyName = newKeyName = evictorKeyName;
- oldValueName = newValueName = evictorValueName;
+ oldValueName = oldEvictorValueTypeName;
+ newValueName = newEvictorValueTypeName;
}
else
{