summaryrefslogtreecommitdiff
path: root/cpp/src
diff options
context:
space:
mode:
authorBernard Normier <bernard@zeroc.com>2007-10-12 15:48:24 -0400
committerBernard Normier <bernard@zeroc.com>2007-10-12 15:48:24 -0400
commitf038c925c49876569efcaf28c185b20bc4a939d2 (patch)
treef6e2874b9a0c8014ab81df05360658535838ec19 /cpp/src
parentFurther fix for bug 2502. (diff)
downloadice-f038c925c49876569efcaf28c185b20bc4a939d2.tar.bz2
ice-f038c925c49876569efcaf28c185b20bc4a939d2.tar.xz
ice-f038c925c49876569efcaf28c185b20bc4a939d2.zip
Fixed bug #702
Diffstat (limited to 'cpp/src')
-rw-r--r--cpp/src/Freeze/IndexI.cpp32
-rw-r--r--cpp/src/Freeze/MapI.cpp41
-rw-r--r--cpp/src/Freeze/ObjectStore.cpp41
-rw-r--r--cpp/src/Freeze/SharedDb.cpp91
-rw-r--r--cpp/src/Ice/PropertyNames.cpp13
-rw-r--r--cpp/src/Ice/PropertyNames.h2
6 files changed, 207 insertions, 13 deletions
diff --git a/cpp/src/Freeze/IndexI.cpp b/cpp/src/Freeze/IndexI.cpp
index 11ea57a6db4..29b89cffcdb 100644
--- a/cpp/src/Freeze/IndexI.cpp
+++ b/cpp/src/Freeze/IndexI.cpp
@@ -318,14 +318,42 @@ Freeze::IndexI::associate(ObjectStoreBase* store, DbTxn* txn,
_db->set_flags(DB_DUP | DB_DUPSORT);
_db->set_app_private(this);
+ _dbName = EvictorIBase::indexPrefix + store->dbName() + "." + _index.name();
+
+ Ice::PropertiesPtr properties = store->communicator()->getProperties();
+ string propPrefix = "Freeze.Evictor." + store->evictor()->filename() + ".";
+
+ int btreeMinKey = properties->getPropertyAsInt(propPrefix + _dbName + ".BtreeMinKey");
+ if(btreeMinKey > 2)
+ {
+ if(store->evictor()->trace() >= 1)
+ {
+ Trace out(store->evictor()->communicator()->getLogger(), "Freeze.Evictor");
+ out << "Setting \"" << store->evictor()->filename() + "." + _dbName << "\"'s btree minkey to " << btreeMinKey;
+ }
+ _db->set_bt_minkey(btreeMinKey);
+ }
+
+ bool checksum = properties->getPropertyAsInt(propPrefix + "Checksum") > 0;
+ if(checksum)
+ {
+ //
+ // No tracing on purpose
+ //
+
+ _db->set_flags(DB_CHKSUM);
+ }
+
+ //
+ // pagesize can't change
+ //
+
u_int32_t flags = 0;
if(createDb)
{
flags = DB_CREATE;
}
- _dbName = EvictorIBase::indexPrefix + store->dbName() + "." + _index.name();
-
_db->open(txn, store->evictor()->filename().c_str(), _dbName.c_str(), DB_BTREE, flags, FREEZE_DB_MODE);
flags = 0;
diff --git a/cpp/src/Freeze/MapI.cpp b/cpp/src/Freeze/MapI.cpp
index 57728bc8f0e..ff8ffb916ee 100644
--- a/cpp/src/Freeze/MapI.cpp
+++ b/cpp/src/Freeze/MapI.cpp
@@ -1385,8 +1385,7 @@ Freeze::MapIndexI::MapIndexI(const ConnectionIPtr& connection, SharedDb& db,
_db.reset(new Db(connection->dbEnv()->getEnv(), 0));
_db->set_flags(DB_DUP | DB_DUPSORT);
- _db->set_app_private(this);
-
+
u_int32_t flags = 0;
if(createDb)
{
@@ -1402,6 +1401,44 @@ Freeze::MapIndexI::MapIndexI(const ConnectionIPtr& connection, SharedDb& db,
_db->set_bt_compare(&customIndexCompare);
}
+ Ice::PropertiesPtr properties = connection->communicator()->getProperties();
+ string propPrefix = "Freeze.Map." + _dbName + ".";
+ int btreeMinKey = properties->getPropertyAsInt(propPrefix + "BtreeMinKey");
+ if(btreeMinKey > 2)
+ {
+ if(connection->trace() >= 1)
+ {
+ Trace out(connection->communicator()->getLogger(), "Freeze.Map");
+ out << "Setting \"" << _dbName << "\"'s btree minkey to " << btreeMinKey;
+ }
+
+ _db->set_bt_minkey(btreeMinKey);
+ }
+
+ bool checksum = properties->getPropertyAsInt(propPrefix + "Checksum") > 0;
+ if(checksum)
+ {
+ if(connection->trace() >= 1)
+ {
+ Trace out(connection->communicator()->getLogger(), "Freeze.Map");
+ out << "Turning checksum on for \"" << _dbName << "\"";
+ }
+
+ _db->set_flags(DB_CHKSUM);
+ }
+
+ int pageSize = properties->getPropertyAsInt(propPrefix + "PageSize");
+ if(pageSize > 0)
+ {
+ if(connection->trace() >= 1)
+ {
+ Trace out(connection->communicator()->getLogger(), "Freeze.Map");
+ out << "Setting \"" << _dbName << "\"'s pagesize to " << pageSize;
+ }
+
+ _db->set_pagesize(pageSize);
+ }
+
_db->open(txn, _dbName.c_str(), 0, DB_BTREE, flags, FREEZE_DB_MODE);
//
diff --git a/cpp/src/Freeze/ObjectStore.cpp b/cpp/src/Freeze/ObjectStore.cpp
index f472cba7614..1d554c6bc2a 100644
--- a/cpp/src/Freeze/ObjectStore.cpp
+++ b/cpp/src/Freeze/ObjectStore.cpp
@@ -71,6 +71,46 @@ Freeze::ObjectStoreBase::ObjectStoreBase(const string& facet, const string& face
{
_db.reset(new Db(dbEnv, 0));
+ Ice::PropertiesPtr properties = evictor->communicator()->getProperties();
+ string propPrefix = "Freeze.Evictor." + evictor->filename() + ".";
+
+ int btreeMinKey = properties->getPropertyAsInt(propPrefix + _dbName + ".BtreeMinKey");
+ if(btreeMinKey > 2)
+ {
+ if(evictor->trace() >= 1)
+ {
+ Trace out(evictor->communicator()->getLogger(), "Freeze.Evictor");
+ out << "Setting \"" << evictor->filename() + "." + _dbName << "\"'s btree minkey to " << btreeMinKey;
+ }
+
+ _db->set_bt_minkey(btreeMinKey);
+ }
+
+ bool checksum = properties->getPropertyAsInt(propPrefix + "Checksum") > 0;
+ if(checksum)
+ {
+ if(evictor->trace() >= 1)
+ {
+ Trace out(evictor->communicator()->getLogger(), "Freeze.Evictor");
+ out << "Turning checksum on for \"" << evictor->filename() << "\"";
+ }
+
+ _db->set_flags(DB_CHKSUM);
+ }
+
+ int pageSize = properties->getPropertyAsInt(propPrefix + "PageSize");
+ if(pageSize > 0)
+ {
+ if(evictor->trace() >= 1)
+ {
+ Trace out(evictor->communicator()->getLogger(), "Freeze.Evictor");
+ out << "Setting \"" << evictor->filename() << "\"'s pagesize to " << pageSize;
+ }
+
+ _db->set_pagesize(pageSize);
+ }
+
+
TransactionPtr tx = catalogConnection->beginTransaction();
DbTxn* txn = getTxn(tx);
@@ -79,6 +119,7 @@ Freeze::ObjectStoreBase::ObjectStoreBase(const string& facet, const string& face
{
flags |= DB_CREATE;
}
+
_db->open(txn, evictor->filename().c_str(), _dbName.c_str(), DB_BTREE, flags, FREEZE_DB_MODE);
for(size_t i = 0; i < _indices.size(); ++i)
diff --git a/cpp/src/Freeze/SharedDb.cpp b/cpp/src/Freeze/SharedDb.cpp
index 6ba8bed8a50..62756d57115 100644
--- a/cpp/src/Freeze/SharedDb.cpp
+++ b/cpp/src/Freeze/SharedDb.cpp
@@ -276,13 +276,57 @@ Freeze::SharedDb::SharedDb(const MapKey& mapKey,
_key = key;
_value = value;
}
+
+ try
+ {
+ set_app_private(this);
+ if(_keyCompare->compareEnabled())
+ {
+ set_bt_compare(&customCompare);
+ }
+
+ Ice::PropertiesPtr properties = _mapKey.communicator->getProperties();
+ string propPrefix = "Freeze.Map." + _mapKey.dbName + ".";
+
+ int btreeMinKey = properties->getPropertyAsInt(propPrefix + "BtreeMinKey");
+ if(btreeMinKey > 2)
+ {
+ if(_trace >= 1)
+ {
+ Trace out(_mapKey.communicator->getLogger(), "Freeze.Map");
+ out << "Setting \"" << _mapKey.dbName << "\"'s btree minkey to " << btreeMinKey;
+ }
+ set_bt_minkey(btreeMinKey);
+ }
+
+ bool checksum = properties->getPropertyAsInt(propPrefix + "Checksum") > 0;
+ if(checksum)
+ {
+ if(_trace >= 1)
+ {
+ Trace out(_mapKey.communicator->getLogger(), "Freeze.Map");
+ out << "Turning checksum on for \"" << _mapKey.dbName << "\"";
+ }
- set_app_private(this);
- if(_keyCompare->compareEnabled())
+ set_flags(DB_CHKSUM);
+ }
+
+ int pageSize = properties->getPropertyAsInt(propPrefix + "PageSize");
+ if(pageSize > 0)
+ {
+ if(_trace >= 1)
+ {
+ Trace out(_mapKey.communicator->getLogger(), "Freeze.Map");
+ out << "Setting \"" << _mapKey.dbName << "\"'s pagesize to " << pageSize;
+ }
+ set_pagesize(pageSize);
+ }
+ }
+ catch(const ::DbException& dx)
{
- set_bt_compare(&customCompare);
+ throw DatabaseException(__FILE__, __LINE__, dx.what());
}
-
+
try
{
TransactionPtr tx = catalogConnection->beginTransaction();
@@ -385,12 +429,49 @@ Freeze::SharedDb::SharedDb(const MapKey& mapKey, DbEnv* env) :
if(_trace >= 1)
{
- Trace out(_mapKey.communicator->getLogger(), "Freeze.Db");
+ Trace out(_mapKey.communicator->getLogger(), "Freeze.Map");
out << "opening Db \"" << _mapKey.dbName << "\"";
}
try
{
+ Ice::PropertiesPtr properties = _mapKey.communicator->getProperties();
+ string propPrefix = "Freeze.Map." + _mapKey.dbName + ".";
+
+ int btreeMinKey = properties->getPropertyAsInt(propPrefix + "BtreeMinKey");
+ if(btreeMinKey > 2)
+ {
+ if(_trace >= 1)
+ {
+ Trace out(_mapKey.communicator->getLogger(), "Freeze.Map");
+ out << "Setting \"" << _mapKey.dbName << "\"'s btree minkey to " << btreeMinKey;
+ }
+ set_bt_minkey(btreeMinKey);
+ }
+
+ bool checksum = properties->getPropertyAsInt(propPrefix + "Checksum") > 0;
+ if(checksum)
+ {
+ if(_trace >= 1)
+ {
+ Trace out(_mapKey.communicator->getLogger(), "Freeze.Map");
+ out << "Turning checksum on for \"" << _mapKey.dbName << "\"";
+ }
+
+ set_flags(DB_CHKSUM);
+ }
+
+ int pageSize = properties->getPropertyAsInt(propPrefix + "PageSize");
+ if(pageSize > 0)
+ {
+ if(_trace >= 1)
+ {
+ Trace out(_mapKey.communicator->getLogger(), "Freeze.Map");
+ out << "Setting \"" << _mapKey.dbName << "\"'s pagesize to " << pageSize;
+ }
+ set_pagesize(pageSize);
+ }
+
u_int32_t flags = DB_THREAD | DB_CREATE | DB_AUTO_COMMIT;
open(0, _mapKey.dbName.c_str(), 0, DB_BTREE, flags, FREEZE_DB_MODE);
}
diff --git a/cpp/src/Ice/PropertyNames.cpp b/cpp/src/Ice/PropertyNames.cpp
index 2f19712e53a..cb5e8ce95fc 100644
--- a/cpp/src/Ice/PropertyNames.cpp
+++ b/cpp/src/Ice/PropertyNames.cpp
@@ -7,7 +7,7 @@
//
// **********************************************************************
//
-// Generated by makeprops.py from file ../config/PropertyNames.xml, Thu Sep 27 10:37:22 2007
+// Generated by makeprops.py from file ../config/PropertyNames.xml, Fri Oct 12 15:45:46 2007
// IMPORTANT: Do not edit this file -- any edits made here will be lost!
@@ -116,6 +116,7 @@ const IceInternal::Property IcePropsData[] =
IceInternal::Property("Ice.Warn.Dispatch", false, 0),
IceInternal::Property("Ice.Warn.Endpoints", false, 0),
IceInternal::Property("Ice.Warn.UnknownProperties", false, 0),
+ IceInternal::Property("Ice.Warn.UnusedProperties", false, 0),
IceInternal::Property("Ice.CacheMessageBuffers", false, 0),
};
@@ -613,13 +614,19 @@ const IceInternal::Property FreezePropsData[] =
IceInternal::Property("Freeze.DbEnv.*.DbRecoverFatal", false, 0),
IceInternal::Property("Freeze.DbEnv.*.OldLogsAutoDelete", false, 0),
IceInternal::Property("Freeze.DbEnv.*.PeriodicCheckpointMinSize", false, 0),
+ IceInternal::Property("Freeze.Evictor.*.BtreeMinKey", false, 0),
+ IceInternal::Property("Freeze.Evictor.*.Checksum", false, 0),
IceInternal::Property("Freeze.Evictor.*.MaxTxSize", false, 0),
+ IceInternal::Property("Freeze.Evictor.*.PageSize", false, 0),
+ IceInternal::Property("Freeze.Evictor.*.PopulateEmptyIndices", false, 0),
+ IceInternal::Property("Freeze.Evictor.*.RollbackOnUserException", false, 0),
IceInternal::Property("Freeze.Evictor.*.SavePeriod", false, 0),
IceInternal::Property("Freeze.Evictor.*.SaveSizeTrigger", false, 0),
IceInternal::Property("Freeze.Evictor.*.StreamTimeout", false, 0),
- IceInternal::Property("Freeze.Evictor.*.PopulateEmptyIndices", false, 0),
- IceInternal::Property("Freeze.Evictor.*.RollbackOnUserException", false, 0),
IceInternal::Property("Freeze.Evictor.UseNonmutating", false, 0),
+ IceInternal::Property("Freeze.Map.*.BtreeMinKey", false, 0),
+ IceInternal::Property("Freeze.Map.*.Checksum", false, 0),
+ IceInternal::Property("Freeze.Map.*.PageSize", false, 0),
IceInternal::Property("Freeze.Trace.DbEnv", false, 0),
IceInternal::Property("Freeze.Trace.Evictor", false, 0),
IceInternal::Property("Freeze.Trace.Map", false, 0),
diff --git a/cpp/src/Ice/PropertyNames.h b/cpp/src/Ice/PropertyNames.h
index 0f445c67928..9896f908a5a 100644
--- a/cpp/src/Ice/PropertyNames.h
+++ b/cpp/src/Ice/PropertyNames.h
@@ -7,7 +7,7 @@
//
// **********************************************************************
//
-// Generated by makeprops.py from file ../config/PropertyNames.xml, Thu Sep 27 10:37:22 2007
+// Generated by makeprops.py from file ../config/PropertyNames.xml, Fri Oct 12 15:45:46 2007
// IMPORTANT: Do not edit this file -- any edits made here will be lost!