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();
}
Esempio n. 2
0
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;
}