예제 #1
0
파일: Util.cpp 프로젝트: xiaoyu-real/Test
void
MyUtil::__writeLong2IntMap(::IceInternal::BasicStream* __os, const ::MyUtil::Long2IntMap& v)
{
    __os->writeSize(::Ice::Int(v.size()));
    ::MyUtil::Long2IntMap::const_iterator p;
    for(p = v.begin(); p != v.end(); ++p)
    {
        __os->write(p->first);
        __os->write(p->second);
    }
}
예제 #2
0
파일: Util.cpp 프로젝트: xiaoyu-real/Test
void
MyUtil::__readLong2IntMap(::IceInternal::BasicStream* __is, ::MyUtil::Long2IntMap& v)
{
    ::Ice::Int sz;
    __is->readSize(sz);
    while(sz--)
    {
        ::std::pair<const  ::Ice::Long, ::Ice::Int> pair;
        __is->read(const_cast< ::Ice::Long&>(pair.first));
        ::MyUtil::Long2IntMap::iterator __i = v.insert(v.end(), pair);
        __is->read(__i->second);
    }
}
예제 #3
0
void DataNodeManager::putBatch(const FeedItem& feed, const MyUtil::Long2IntMap& usersWeight){
	static const unsigned int MAX_MSG_SIZE = 5000;
	map<int, vector<pair<bool, BlockInfo64Seq> > > blkInfoMap;
	Long2IntMap::const_iterator it = usersWeight.begin();
	//pair<bool, BlockInfoSeq> p = make_pair<bool, BlockInfoSeq>(false, BlockInfoSeq());
	for(; it!=usersWeight.end(); ++it){
		//if((it->first%10 > 5)){
		//	continue;
		//}
		if(it->first == 0){
			continue;
		}
		BlockInfo64Ptr blk = get(it->first, true);
		if(!blk){
			MCE_WARN("DataNodeManager::putBatch --> can not get a block " << it->first);
			continue;
		}
		if(blk->key==261947900 || blk->key==227805680){
			MCE_INFO("#put# userid:"<<it->first<<" file:"<<blk->fileId<<" index:"<<blk->blockIndex
                        <<" tc:"<<blk->totalCount<<" cc:"<<blk->curCount << " preF:" << blk->preFileId << " preB:" << blk->preBlockIndex
                        <<" -- " << " feed:" << feed.feed);
		}
		blk->weight = it->second;
		//MCE_INFO("@@get block " << userIds.at(i) << " " << blk->serverId);
		//Blk2FeedPtr tmp = new Blk2Feed;
		//tmp->blkInfo = blk;
		//tmp->feed = it->second;
		if(blkInfoMap[blk->serverId].empty() || blkInfoMap[blk->serverId].rbegin()->second.size() >= MAX_MSG_SIZE){
			blkInfoMap[blk->serverId].push_back(pair<bool, BlockInfo64Seq>(false, BlockInfo64Seq()));
		}
		if(blk->curCount == 1){
			blkInfoMap[blk->serverId].rbegin()->first = true;
		}
		blkInfoMap[blk->serverId].rbegin()->second.push_back(blk);
		//blkInfoMap[blk->serverId].push_back(blk);
	}
	map<int, vector<pair<bool, BlockInfo64Seq> > >::iterator tmpIt = blkInfoMap.begin();
	for(; tmpIt!=blkInfoMap.end(); ++tmpIt){
		for(size_t i=0; i<tmpIt->second.size(); i++){
			//最多重试10次
			//for(int j=0; j<10; j++){
				TimeStat t;
				try{
					MCE_INFO("DataNodeManager::putBatch --> invoke FeedDBData" << tmpIt->first << " size:" << tmpIt->second.at(i).second.size());
					FeedDBDataAdapter::instance().putBatchBinary(feed, tmpIt->second.at(i).second);
				}catch(Ice::Exception& e){
					MCE_WARN("DataNodeManager::putBatch --> invoke FeedDBData" << tmpIt->first << " err, " << e);
					RetryTimer::instance().push(feed, tmpIt->second.at(i).second);
					//string tmp = e.what();
					//if(tmp.find("TimeoutException") != string::npos){
					//	break;
					//}
					//if(!tmpIt->second.at(i).first){
					//	break;
					//}
				}
				PerformanceStat::instance().stat("CallData", t.getTime());
			//}
		}
	}
	//MCE_INFO("batch put --> " << usersWeight.size() << " " << blkInfoMap.size());

}