Commit d27bdbc4 authored by lw's avatar lw

*** empty log message ***

parent 9add1965
...@@ -52,7 +52,8 @@ public: ...@@ -52,7 +52,8 @@ public:
~wb_attribute(); ~wb_attribute();
wb_attribute& operator=(const wb_attribute&); wb_attribute& operator=(const wb_attribute&);
operator bool() const { return oddSts();} operator bool() const { return oddSts();}
operator wb_orep*() const; operator wb_orep*() const { return m_orep;}
bool operator==(const wb_attribute&) const; bool operator==(const wb_attribute&) const;
//wb_object& operator=(const wb_orep&); //wb_object& operator=(const wb_orep&);
......
...@@ -229,7 +229,7 @@ wb_db_ohead &wb_db_ohead::get(wb_db_txn *txn) ...@@ -229,7 +229,7 @@ wb_db_ohead &wb_db_ohead::get(wb_db_txn *txn)
m_data.set_ulen(sizeof(m_o)); m_data.set_ulen(sizeof(m_o));
m_data.set_flags(DB_DBT_USERMEM); m_data.set_flags(DB_DBT_USERMEM);
int ret = m_db->m_t_ohead->get(txn, &m_key, &m_data, 0); m_db->m_t_ohead->get(txn, &m_key, &m_data, 0);
return *this; return *this;
} }
...@@ -244,7 +244,7 @@ wb_db_ohead &wb_db_ohead::get(wb_db_txn *txn, pwr_tOid oid) ...@@ -244,7 +244,7 @@ wb_db_ohead &wb_db_ohead::get(wb_db_txn *txn, pwr_tOid oid)
m_data.set_ulen(sizeof(m_o)); m_data.set_ulen(sizeof(m_o));
m_data.set_flags(DB_DBT_USERMEM); m_data.set_flags(DB_DBT_USERMEM);
int ret = m_db->m_t_ohead->get(txn, &m_key, &m_data, 0); m_db->m_t_ohead->get(txn, &m_key, &m_data, 0);
return *this; return *this;
} }
...@@ -279,6 +279,16 @@ void wb_db_rbody::put(wb_db_txn *txn) ...@@ -279,6 +279,16 @@ void wb_db_rbody::put(wb_db_txn *txn)
m_db->m_t_rbody->put(txn, &m_key, &m_data, 0); m_db->m_t_rbody->put(txn, &m_key, &m_data, 0);
} }
void wb_db_rbody::put(wb_db_txn *txn, size_t offset, size_t size, void *p)
{
m_data.set_doff(offset);
m_data.set_dlen(size);
m_data.set_data(p);
m_data.set_ulen(size);
m_data.set_flags(DB_DBT_PARTIAL);
m_db->m_t_rbody->get(txn, &m_key, &m_data, 0);
}
void wb_db_rbody::get(wb_db_txn *txn, size_t offset, size_t size, void *p) void wb_db_rbody::get(wb_db_txn *txn, size_t offset, size_t size, void *p)
{ {
...@@ -306,15 +316,26 @@ void wb_db_dbody::put(wb_db_txn *txn) ...@@ -306,15 +316,26 @@ void wb_db_dbody::put(wb_db_txn *txn)
m_db->m_t_dbody->put(txn, &m_key, &m_data, 0); m_db->m_t_dbody->put(txn, &m_key, &m_data, 0);
} }
void wb_db_dbody::put(wb_db_txn *txn, size_t offset, size_t size, void *p)
{
m_data.set_doff(offset);
m_data.set_dlen(size);
m_data.set_data(p);
m_data.set_ulen(size);
m_data.set_flags(DB_DBT_PARTIAL);
m_db->m_t_dbody->put(txn, &m_key, &m_data, 0);
}
void wb_db_dbody::get(wb_db_txn *txn, size_t offset, size_t size, void *p) void wb_db_dbody::get(wb_db_txn *txn, size_t offset, size_t size, void *p)
{ {
m_data.set_doff(offset); m_data.set_doff(offset);
m_data.set_dlen(size); m_data.set_dlen(size);
m_data.set_data(p); m_data.set_data(p);
m_data.set_ulen(size); m_data.set_ulen(size);
m_data.set_flags(DB_DBT_USERMEM); m_data.set_flags(DB_DBT_USERMEM|DB_DBT_PARTIAL);
m_db->m_t_dbody->get(txn, &m_key, &m_data, DB_DBT_PARTIAL); m_db->m_t_dbody->get(txn, &m_key, &m_data, 0);
} }
...@@ -372,6 +393,34 @@ void wb_db::open(const char *fileName) ...@@ -372,6 +393,34 @@ void wb_db::open(const char *fileName)
strcpy(m_volumeName, i.name()); strcpy(m_volumeName, i.name());
} }
static void printstat(DbEnv *ep, char *s)
{
DB_LOCK_STAT *lp;
ep->lock_stat(&lp, 0);
printf("DbEnv loc statistics, %s:\n", s);
printf(" lastid.......: %d\n", lp->st_lastid);
printf(" nmodes.......: %d\n", lp->st_nmodes);
printf(" maxlocks:....: %d\n", lp->st_maxlocks);
printf(" maxlockers...: %d\n", lp->st_maxlockers);
printf(" maxobjects...: %d\n", lp->st_maxobjects);
printf(" nlocks.......: %d\n", lp->st_nlocks);
printf(" maxnlocks....: %d\n", lp->st_maxnlocks);
printf(" nlockers.....: %d\n", lp->st_nlockers);
printf(" maxnlockers..: %d\n", lp->st_maxnlockers);
printf(" nobjects.....: %d\n", lp->st_nobjects);
printf(" maxnobjects..: %d\n", lp->st_maxnobjects);
printf(" nrequests....: %d\n", lp->st_nrequests);
printf(" nreleases....: %d\n", lp->st_nreleases);
printf(" nnowaits.....: %d\n", lp->st_nnowaits);
printf(" nconflicts...: %d\n", lp->st_nconflicts);
printf(" ndeadlocks...: %d\n", lp->st_ndeadlocks);
printf(" regsize......: %d\n", lp->st_regsize);
printf(" region_wait..: %d\n", lp->st_region_wait);
printf(" region_nowait: %d\n", lp->st_region_nowait);
printf("\n");
}
void wb_db::openDb() void wb_db::openDb()
{ {
struct stat sb; struct stat sb;
...@@ -388,7 +437,9 @@ void wb_db::openDb() ...@@ -388,7 +437,9 @@ void wb_db::openDb()
m_env = new DbEnv(0/*DB_CXX_NO_EXCEPTIONS*/); m_env = new DbEnv(0/*DB_CXX_NO_EXCEPTIONS*/);
m_env->set_errpfx("PWR db"); m_env->set_errpfx("PWR db");
//m_env->set_cachesize(0, 256 * 1024 * 1024, 0); //m_env->set_cachesize(0, 256 * 1024 * 1024, 0);
m_env->set_lk_max_locks(200000);
m_env->set_lk_max_objects(20000);
#if 1 #if 1
m_env->open(m_fileName, m_env->open(m_fileName,
DB_CREATE | DB_INIT_LOCK | DB_INIT_LOG | DB_INIT_MPOOL | DB_INIT_TXN | DB_RECOVER, DB_CREATE | DB_INIT_LOCK | DB_INIT_LOG | DB_INIT_MPOOL | DB_INIT_TXN | DB_RECOVER,
...@@ -398,6 +449,8 @@ void wb_db::openDb() ...@@ -398,6 +449,8 @@ void wb_db::openDb()
DB_CREATE | DB_INIT_MPOOL, DB_CREATE | DB_INIT_MPOOL,
S_IRUSR | S_IWUSR); S_IRUSR | S_IWUSR);
#endif #endif
printstat(m_env, "after open env");
m_t_ohead = new Db(m_env, 0); m_t_ohead = new Db(m_env, 0);
m_t_rbody = new Db(m_env, 0); m_t_rbody = new Db(m_env, 0);
m_t_dbody = new Db(m_env, 0); m_t_dbody = new Db(m_env, 0);
...@@ -411,6 +464,7 @@ void wb_db::openDb() ...@@ -411,6 +464,7 @@ void wb_db::openDb()
m_t_class->open("class", NULL, DB_BTREE, DB_CREATE, S_IRUSR | S_IWUSR); m_t_class->open("class", NULL, DB_BTREE, DB_CREATE, S_IRUSR | S_IWUSR);
m_t_name->open("name", NULL, DB_BTREE, DB_CREATE, S_IRUSR | S_IWUSR); m_t_name->open("name", NULL, DB_BTREE, DB_CREATE, S_IRUSR | S_IWUSR);
m_t_info->open("info", NULL, DB_BTREE, DB_CREATE, S_IRUSR | S_IWUSR); m_t_info->open("info", NULL, DB_BTREE, DB_CREATE, S_IRUSR | S_IWUSR);
printstat(m_env, "after open databases");
} }
...@@ -536,21 +590,30 @@ bool wb_db::deleteOset(pwr_tStatus *sts, wb_oset *o) ...@@ -536,21 +590,30 @@ bool wb_db::deleteOset(pwr_tStatus *sts, wb_oset *o)
bool wb_db::importVolume(wb_export &e) bool wb_db::importVolume(wb_export &e)
{ {
try { try {
// m_env->txn_begin(0, (DbTxn **)&m_txn, 0); m_env->txn_begin(0, (DbTxn **)&m_txn, 0);
m_txn = 0; // m_txn = 0;
printstat(m_env, "importVolume");
e.exportHead(*this); e.exportHead(*this);
printstat(m_env, "after head");
e.exportRbody(*this); e.exportRbody(*this);
printstat(m_env, "after rbody");
e.exportDbody(*this); e.exportDbody(*this);
printstat(m_env, "after dbody");
e.exportMeta(*this); e.exportMeta(*this);
printstat(m_env, "after meta");
//m_txn->commit(0); m_txn->commit(0);
//m_env->txn_checkpoint(0, 0, 0); printstat(m_env, "after commit");
m_env->txn_checkpoint(0, 0, 0);
printstat(m_env, "after checkpoint");
return true; return true;
} }
catch (DbException &e) { catch (DbException &e) {
//m_txn->abort(); printstat(m_env, "after exception");
m_txn->abort();
printf("exeption: %s\n", e.what()); printf("exeption: %s\n", e.what());
printstat(m_env, "after abort");
return false; return false;
} }
} }
...@@ -564,7 +627,7 @@ bool wb_db::importHead(pwr_tOid oid, pwr_tCid cid, pwr_tOid poid, ...@@ -564,7 +627,7 @@ bool wb_db::importHead(pwr_tOid oid, pwr_tCid cid, pwr_tOid poid,
{ {
wb_db_ohead o(this, oid, cid, poid, boid, aoid, foid, loid, name, normname, ohTime, rbTime, dbTime, rbSize, dbSize); wb_db_ohead o(this, oid, cid, poid, boid, aoid, foid, loid, name, normname, ohTime, rbTime, dbTime, rbSize, dbSize);
o.put(m_txn); o.put(m_txn);
printf("head put: %d.%d %s\n", oid.vid, oid.oix, name); //printf("head put: %d.%d %s\n", oid.vid, oid.oix, name);
wb_db_name n(this, oid, poid, normname); wb_db_name n(this, oid, poid, normname);
n.put(m_txn); n.put(m_txn);
wb_db_class c(this, cid, oid); wb_db_class c(this, cid, oid);
...@@ -584,7 +647,7 @@ bool wb_db::importHead(pwr_tOid oid, pwr_tCid cid, pwr_tOid poid, ...@@ -584,7 +647,7 @@ bool wb_db::importHead(pwr_tOid oid, pwr_tCid cid, pwr_tOid poid,
bool wb_db::importRbody(pwr_tOid oid, size_t size, void *body) bool wb_db::importRbody(pwr_tOid oid, size_t size, void *body)
{ {
wb_db_rbody rb(this, oid, size, body); wb_db_rbody rb(this, oid, size, body);
printf("rbody size: %d.%d %d\n", oid.vid, oid.oix, size); //printf("rbody size: %d.%d %d\n", oid.vid, oid.oix, size);
rb.put(m_txn); rb.put(m_txn);
return true; return true;
} }
...@@ -592,7 +655,7 @@ bool wb_db::importRbody(pwr_tOid oid, size_t size, void *body) ...@@ -592,7 +655,7 @@ bool wb_db::importRbody(pwr_tOid oid, size_t size, void *body)
bool wb_db::importDbody(pwr_tOid oid, size_t size, void *body) bool wb_db::importDbody(pwr_tOid oid, size_t size, void *body)
{ {
wb_db_dbody db(this, oid, size, body); wb_db_dbody db(this, oid, size, body);
printf("dbody size: %d.%d %d\n", oid.vid, oid.oix, size); //printf("dbody size: %d.%d %d\n", oid.vid, oid.oix, size);
db.put(m_txn); db.put(m_txn);
return true; return true;
} }
......
...@@ -258,7 +258,7 @@ public: ...@@ -258,7 +258,7 @@ public:
}; };
class wb_db_body class wb_db_dbody
{ {
public: public:
wb_db *m_db; wb_db *m_db;
...@@ -270,9 +270,12 @@ public: ...@@ -270,9 +270,12 @@ public:
Dbt m_key; Dbt m_key;
Dbt m_data; Dbt m_data;
wb_db_body(wb_db *db, pwr_tOid oid, size_t size, void *p); wb_db_dbody(wb_db *db, pwr_tOid oid);
wb_db_dbody(wb_db *db, pwr_tOid oid, size_t size, void *p);
void get(wb_db_txn *txn, size_t offset, size_t size, void *p);
void put(wb_db_txn *txn); void put(wb_db_txn *txn);
void put(wb_db_txn *txn, size_t offset, size_t size, void *p);
}; };
class wb_db_rbody class wb_db_rbody
...@@ -290,27 +293,9 @@ public: ...@@ -290,27 +293,9 @@ public:
wb_db_rbody(wb_db *db, pwr_tOid oid); wb_db_rbody(wb_db *db, pwr_tOid oid);
wb_db_rbody(wb_db *db, pwr_tOid oid, size_t size, void *p); wb_db_rbody(wb_db *db, pwr_tOid oid, size_t size, void *p);
void put(wb_db_txn *txn);
void get(wb_db_txn *txn, size_t offset, size_t size, void *p); void get(wb_db_txn *txn, size_t offset, size_t size, void *p);
};
class wb_db_dbody
{
public:
wb_db *m_db;
pwr_tOid m_oid;
size_t m_size;
void *m_p;
Dbt m_key;
Dbt m_data;
wb_db_dbody(wb_db *db, pwr_tOid oid);
wb_db_dbody(wb_db *db, pwr_tOid oid, size_t size, void *p);
void put(wb_db_txn *txn); void put(wb_db_txn *txn);
void get(wb_db_txn *txn, size_t offset, size_t size, void *p); void put(wb_db_txn *txn, size_t offset, size_t size, void *p);
}; };
class wb_db_txn : public DbTxn class wb_db_txn : public DbTxn
......
...@@ -1228,7 +1228,7 @@ ldh_SetObjectBuffer(ldh_tSession session, pwr_tOid oid, char *bname, char *aname ...@@ -1228,7 +1228,7 @@ ldh_SetObjectBuffer(ldh_tSession session, pwr_tOid oid, char *bname, char *aname
wb_attribute a = o.attribute(bname, aname); wb_attribute a = o.attribute(bname, aname);
if (!a) return a.sts(); if (!a) return a.sts();
sp->writeAttribute(/*a, value*/); sp->writeAttribute(a, value);
return sp->sts(); return sp->sts();
} }
...@@ -1240,14 +1240,13 @@ pwr_tStatus ...@@ -1240,14 +1240,13 @@ pwr_tStatus
ldh_SetObjectName(ldh_tSession session, pwr_tOid oid, char *name) ldh_SetObjectName(ldh_tSession session, pwr_tOid oid, char *name)
{ {
wb_session *sp = (wb_session*)session; wb_session *sp = (wb_session*)session;
wb_object o = sp->object(oid); wb_object o = sp->object(oid);
if (!o) return o.sts(); if (!o) return o.sts();
wb_name n(name); wb_name n(name);
pwr_tStatus sts = sp->renameObject(o, n); sp->renameObject(o, n);
return sts; return sp->sts();
} }
pwr_tStatus pwr_tStatus
...@@ -1258,18 +1257,22 @@ ldh_SetObjectPar(ldh_tSession session, pwr_tOid oid, char *bname, ...@@ -1258,18 +1257,22 @@ ldh_SetObjectPar(ldh_tSession session, pwr_tOid oid, char *bname,
wb_object o = sp->object(oid); wb_object o = sp->object(oid);
if (!o) return o.sts(); if (!o) return o.sts();
wb_attribute a = o.attribute(bname, aname); wb_attribute a = o.attribute(bname, aname);
if (!a) return a.sts(); if (!a) return a.sts();
return sp->writeAttribute(/*a, value, size*/); sp->writeAttribute(a, value, size);
return sp->sts();
} }
pwr_tStatus pwr_tStatus
ldh_SetSession(ldh_tSession session, ldh_eAccess access) ldh_SetSession(ldh_tSession session, ldh_eAccess access)
{ {
wb_session *sp = (wb_session*)session; wb_session *sp = (wb_session*)session;
sp->access(access);
return sp->access(access); return sp->sts();
} }
pwr_tStatus pwr_tStatus
......
...@@ -123,6 +123,22 @@ bool wb_session::deleteFamily(wb_object o) ...@@ -123,6 +123,22 @@ bool wb_session::deleteFamily(wb_object o)
return m_vrep->deleteFamily(&m_sts, (wb_orep*)o); return m_vrep->deleteFamily(&m_sts, (wb_orep*)o);
} }
bool wb_session::writeAttribute(wb_attribute &a, void *p, size_t size)
{
if (isReadonly())
throw wb_error_str("ReadOnlySession");
return m_vrep->writeAttribute(&m_sts, (wb_orep*)a, a.bix(), a.offset(), a.size(), p);
}
bool wb_session::writeAttribute(wb_attribute &a, void *p)
{
if (isReadonly())
throw wb_error_str("ReadOnlySession");
return m_vrep->writeAttribute(&m_sts, (wb_orep*)a, a.bix(), a.offset(), a.size(), p);
}
pwr_tStatus wb_session::getMenu( ldh_sMenuCall *ip) pwr_tStatus wb_session::getMenu( ldh_sMenuCall *ip)
{ {
pwr_tStatus sts; pwr_tStatus sts;
...@@ -355,7 +371,6 @@ void wb_session::getAllMenuItems( ldh_sMenuCall *ip, ldh_sMenuItem **Item, wb_cd ...@@ -355,7 +371,6 @@ void wb_session::getAllMenuItems( ldh_sMenuCall *ip, ldh_sMenuItem **Item, wb_cd
} }
} }
pwr_tStatus wb_session::callMenuMethod( ldh_sMenuCall *mcp, int Index) pwr_tStatus wb_session::callMenuMethod( ldh_sMenuCall *mcp, int Index)
{ {
pwr_tStatus sts = LDH__SUCCESS; pwr_tStatus sts = LDH__SUCCESS;
......
...@@ -68,7 +68,8 @@ public: ...@@ -68,7 +68,8 @@ public:
bool deleteObject(wb_object o); bool deleteObject(wb_object o);
bool deleteFamily(wb_object o); bool deleteFamily(wb_object o);
bool writeAttribute() {return false;} // Fix bool writeAttribute(wb_attribute &a, void *p, size_t size);
bool writeAttribute(wb_attribute &a, void *p);
bool writeBody() {return false;} // Fix bool writeBody() {return false;} // Fix
void getAllMenuItems( ldh_sMenuCall *ip, ldh_sMenuItem **Item, wb_cdrep *cdrep, void getAllMenuItems( ldh_sMenuCall *ip, ldh_sMenuItem **Item, wb_cdrep *cdrep,
......
...@@ -272,7 +272,7 @@ wb_attribute wb_volume::attribute(const pwr_sAttrRef* arp) const ...@@ -272,7 +272,7 @@ wb_attribute wb_volume::attribute(const pwr_sAttrRef* arp) const
// We have found a matching attribute // We have found a matching attribute
if (ODD(sts)) { if (ODD(sts)) {
if (arp->Size == 0 || arp->Size > (adrep->size() / adrep->nElement())) { if (arp->Size == 0 || arp->Size > (adrep->size() / adrep->nElement())) {
// Map whole atribute // Map whole atribute
idx = (adrep->nElement() > 1) ? -1 : 0; idx = (adrep->nElement() > 1) ? -1 : 0;
......
...@@ -364,21 +364,38 @@ bool wb_vrepdb::renameObject(pwr_tStatus *sts, wb_orep *orp, wb_name &name) ...@@ -364,21 +364,38 @@ bool wb_vrepdb::renameObject(pwr_tStatus *sts, wb_orep *orp, wb_name &name)
} }
} }
bool wb_vrepdb::writeAttribute(pwr_tStatus *sts, wb_orep *o, pwr_eBix bix, size_t offset, size_t size, void *p) bool wb_vrepdb::writeAttribute(pwr_tStatus *sts, wb_orep *orp, pwr_eBix bix, size_t offset, size_t size, void *p)
{ {
*sts = LDH__NYI; try {
//body.oid = ?; m_ohead.get(m_txn, orp->oid());
//body.bix = ?; *sts = LDH__SUCCESS;
//key.data = &body;
//key.len = sizeof(body); switch (bix) {
case pwr_eBix_rt:
{
//data.data = ?; wb_db_rbody rb(m_db, m_ohead.oid());
//data.offset = ?; rb.put(m_txn, offset, size, p);
//data.size = ?; break;
}
case pwr_eBix_dev:
{
//update(body-tab) wb_db_dbody db(m_db, m_ohead.oid());
db.put(m_txn, offset, size, p);
break;
}
default:
break;
}
return true; return true;
}
catch (DbException &e) {
*sts = LDH__NOSUCHOBJ;
printf("vrepdb: %s\n", e.what());
return false;
}
} }
void *wb_vrepdb::readAttribute(pwr_tStatus *sts, const wb_orep *orp, pwr_eBix bix, size_t offset, size_t size, void *p) void *wb_vrepdb::readAttribute(pwr_tStatus *sts, const wb_orep *orp, pwr_eBix bix, size_t offset, size_t size, void *p)
...@@ -398,7 +415,7 @@ void *wb_vrepdb::readAttribute(pwr_tStatus *sts, const wb_orep *orp, pwr_eBix bi ...@@ -398,7 +415,7 @@ void *wb_vrepdb::readAttribute(pwr_tStatus *sts, const wb_orep *orp, pwr_eBix bi
case pwr_eBix_dev: case pwr_eBix_dev:
{ {
wb_db_rbody db(m_db, m_ohead.oid()); wb_db_dbody db(m_db, m_ohead.oid());
db.get(m_txn, offset, size, p); db.get(m_txn, offset, size, p);
break; break;
} }
...@@ -430,7 +447,7 @@ void *wb_vrepdb::readBody(pwr_tStatus *sts, const wb_orep *orp, pwr_eBix bix, vo ...@@ -430,7 +447,7 @@ void *wb_vrepdb::readBody(pwr_tStatus *sts, const wb_orep *orp, pwr_eBix bix, vo
} }
case pwr_eBix_dev: case pwr_eBix_dev:
{ {
wb_db_rbody db(m_db, m_ohead.oid()); wb_db_dbody db(m_db, m_ohead.oid());
db.get(m_txn, 0, m_ohead.dbSize(), p); db.get(m_txn, 0, m_ohead.dbSize(), p);
break; break;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment