void CassandraObjectFactory::generate(const String& timestamp) { CassandraDBPtr db = Cassandra::getSingleton().open(mDBHost, mDBPort); std::vector<Column> Columns; try{ SliceRange range; range.count=1000000; // set large enough to get all the objects of the object host Columns = db->db()->getColumns(mOHostID, CF_NAME, timestamp, range); } catch(...){ std::cout <<"Exception Caught when get object lists"<<std::endl; return; } for (std::vector<Column>::iterator it= Columns.begin(); it != Columns.end(); ++it) { String object_str((*it).name); //current value format is <"#type#"+script_type+"#args#"+script_args+"#contents#"+script_contents> String script_value((*it).value); String script_type=script_value.substr(6,script_value.find("#args#")-6); String script_args=script_value.substr(script_value.find("#args#")+6,script_value.find("#contents#")-script_value.find("#args#")-6); String script_contents=script_value.substr(script_value.find("#contents#")+10); if (!script_type.empty()) { ObjectInfo info; info.id = UUID(object_str, UUID::HexString()); info.scriptType = script_type; info.scriptArgs = script_args; info.scriptContents = script_contents; mIncompleteObjects.push(info); } } connectObjects(); }
bool CassandraStorage::CassandraCommit(CassandraDBPtr db, const Bucket& bucket, Columns* columns, Keys* eraseKeys, Keys* readKeys, ReadSet* rs, const String& timestamp) { if((*readKeys).size()>0){ try{ *rs=db->db()->getColumnsValues(bucket.rawHexData(),CF_NAME, timestamp, *readKeys); // batch read } catch(...){ return false; } } if((*columns).size()>0 || (*eraseKeys).size()>0){ try{ batchTuple tuple=batchTuple(CF_NAME, bucket.rawHexData(), timestamp, *columns, *eraseKeys); db->db()->batchMutate(tuple); } catch(...){ std::cout <<"Exception Caught when Batch Write/Erase"<<std::endl; return false; } } delete columns; delete eraseKeys; delete readKeys; return true; }