Question about choose_acting

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi, everyone.


When I read the source code of PG::calc_replicated_acting method, I found the following code really confusing:



		// select replicas that have log contiguity with primary.
	// prefer up, then acting, then any peer_info osds
	for (vector<int>::const_iterator i = up.begin(); i != up.end(); ++i) {
		pg_shard_t up_cand = pg_shard_t(*i, shard_id_t::NO_SHARD);
		if (up_cand == primary->first)
			continue;
		const pg_info_t &cur_info = all_info.find(up_cand)->second;
		if (cur_info.is_incomplete() ||
		cur_info.last_update < MIN(
				primary->second.log_tail,
				auth_log_shard->second.log_tail)) {
			/* We include auth_log_shard->second.log_tail because in GetLog,
			 * we will request logs back to the min last_update over our
			 * acting_backfill set, which will result in our log being extended
			 * as far backwards as necessary to pick up any peers which can
			 * be log recovered by auth_log_shard's log */
			ss << " shard " << up_cand << " (up) backfill " << cur_info
					<< std::endl;
			if (compat_mode) {
				if (backfill->empty()) {
					backfill->insert(up_cand);
					want->push_back(*i);
					acting_backfill->insert(up_cand);
				}
			} else {
				backfill->insert(up_cand);
				acting_backfill->insert(up_cand);
			}
		} else {
			want->push_back(*i);
			acting_backfill->insert(up_cand);
			usable++;
			ss << " osd." << *i << " (up) accepted " << cur_info << std::endl;
		}
	}


It seems that only when the "backfill" set is empty will an OSD in up set whose pg log can not be linked up with the pg log of auth_log_shard or primary be added into "backfill" set, which means only one OSD can be "backfilled".
What if there are two or more OSD in up set that needs to be "backfilled"? 


Please help me. Thank you.��.n��������+%������w��{.n����z��u���ܨ}���Ơz�j:+v�����w����ޙ��&�)ߡ�a����z�ޗ���ݢj��w�f




[Index of Archives]     [CEPH Users]     [Ceph Large]     [Information on CEPH]     [Linux BTRFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]
  Powered by Linux