Use a constant for unlocked header uid (#20048)
Instead of just a literal `0` for UID when the header is unlocked, make a constant to give additional context.
This commit is contained in:
		| @@ -1,7 +1,7 @@ | |||||||
| use crate::bucket_item::BucketItem; | use crate::bucket_item::BucketItem; | ||||||
| use crate::bucket_map::BucketMapError; | use crate::bucket_map::BucketMapError; | ||||||
| use crate::bucket_stats::BucketMapStats; | use crate::bucket_stats::BucketMapStats; | ||||||
| use crate::bucket_storage::BucketStorage; | use crate::bucket_storage::{BucketStorage, UID_UNLOCKED}; | ||||||
| use crate::index_entry::IndexEntry; | use crate::index_entry::IndexEntry; | ||||||
| use crate::{MaxSearch, RefCount}; | use crate::{MaxSearch, RefCount}; | ||||||
| use rand::thread_rng; | use rand::thread_rng; | ||||||
| @@ -59,7 +59,7 @@ impl<T: Clone + Copy> Bucket<T> { | |||||||
|     pub fn keys(&self) -> Vec<Pubkey> { |     pub fn keys(&self) -> Vec<Pubkey> { | ||||||
|         let mut rv = vec![]; |         let mut rv = vec![]; | ||||||
|         for i in 0..self.index.num_cells() { |         for i in 0..self.index.num_cells() { | ||||||
|             if self.index.uid(i) == 0 { |             if self.index.uid(i) == UID_UNLOCKED { | ||||||
|                 continue; |                 continue; | ||||||
|             } |             } | ||||||
|             let ix: &IndexEntry = self.index.get(i); |             let ix: &IndexEntry = self.index.get(i); | ||||||
| @@ -75,7 +75,7 @@ impl<T: Clone + Copy> Bucket<T> { | |||||||
|         let mut result = Vec::with_capacity(self.index.used.load(Ordering::Relaxed) as usize); |         let mut result = Vec::with_capacity(self.index.used.load(Ordering::Relaxed) as usize); | ||||||
|         for i in 0..self.index.num_cells() { |         for i in 0..self.index.num_cells() { | ||||||
|             let ii = i % self.index.num_cells(); |             let ii = i % self.index.num_cells(); | ||||||
|             if self.index.uid(ii) == 0 { |             if self.index.uid(ii) == UID_UNLOCKED { | ||||||
|                 continue; |                 continue; | ||||||
|             } |             } | ||||||
|             let ix: &IndexEntry = self.index.get(ii); |             let ix: &IndexEntry = self.index.get(ii); | ||||||
| @@ -108,7 +108,7 @@ impl<T: Clone + Copy> Bucket<T> { | |||||||
|         let ix = Self::bucket_index_ix(index, key, random); |         let ix = Self::bucket_index_ix(index, key, random); | ||||||
|         for i in ix..ix + index.max_search() { |         for i in ix..ix + index.max_search() { | ||||||
|             let ii = i % index.num_cells(); |             let ii = i % index.num_cells(); | ||||||
|             if index.uid(ii) == 0 { |             if index.uid(ii) == UID_UNLOCKED { | ||||||
|                 continue; |                 continue; | ||||||
|             } |             } | ||||||
|             let elem: &mut IndexEntry = index.get_mut(ii); |             let elem: &mut IndexEntry = index.get_mut(ii); | ||||||
| @@ -127,7 +127,7 @@ impl<T: Clone + Copy> Bucket<T> { | |||||||
|         let ix = Self::bucket_index_ix(index, key, random); |         let ix = Self::bucket_index_ix(index, key, random); | ||||||
|         for i in ix..ix + index.max_search() { |         for i in ix..ix + index.max_search() { | ||||||
|             let ii = i % index.num_cells(); |             let ii = i % index.num_cells(); | ||||||
|             if index.uid(ii) == 0 { |             if index.uid(ii) == UID_UNLOCKED { | ||||||
|                 continue; |                 continue; | ||||||
|             } |             } | ||||||
|             let elem: &IndexEntry = index.get(ii); |             let elem: &IndexEntry = index.get(ii); | ||||||
| @@ -148,7 +148,7 @@ impl<T: Clone + Copy> Bucket<T> { | |||||||
|         let ix = Self::bucket_index_ix(index, key, random); |         let ix = Self::bucket_index_ix(index, key, random); | ||||||
|         for i in ix..ix + index.max_search() { |         for i in ix..ix + index.max_search() { | ||||||
|             let ii = i as u64 % index.num_cells(); |             let ii = i as u64 % index.num_cells(); | ||||||
|             if index.uid(ii) != 0 { |             if index.uid(ii) != UID_UNLOCKED { | ||||||
|                 continue; |                 continue; | ||||||
|             } |             } | ||||||
|             index.allocate(ii, elem_uid).unwrap(); |             index.allocate(ii, elem_uid).unwrap(); | ||||||
| @@ -237,7 +237,7 @@ impl<T: Clone + Copy> Bucket<T> { | |||||||
|             let pos = thread_rng().gen_range(0, cap); |             let pos = thread_rng().gen_range(0, cap); | ||||||
|             for i in pos..pos + self.index.max_search() { |             for i in pos..pos + self.index.max_search() { | ||||||
|                 let ix = i % cap; |                 let ix = i % cap; | ||||||
|                 if best_bucket.uid(ix) == 0 { |                 if best_bucket.uid(ix) == UID_UNLOCKED { | ||||||
|                     let elem_loc = elem.data_loc(current_bucket); |                     let elem_loc = elem.data_loc(current_bucket); | ||||||
|                     if elem.num_slots > 0 { |                     if elem.num_slots > 0 { | ||||||
|                         current_bucket.free(elem_loc, elem_uid); |                         current_bucket.free(elem_loc, elem_uid); | ||||||
| @@ -294,7 +294,7 @@ impl<T: Clone + Copy> Bucket<T> { | |||||||
|                 let mut valid = true; |                 let mut valid = true; | ||||||
|                 for ix in 0..self.index.num_cells() { |                 for ix in 0..self.index.num_cells() { | ||||||
|                     let uid = self.index.uid(ix); |                     let uid = self.index.uid(ix); | ||||||
|                     if 0 != uid { |                     if UID_UNLOCKED != uid { | ||||||
|                         let elem: &IndexEntry = self.index.get(ix); |                         let elem: &IndexEntry = self.index.get(ix); | ||||||
|                         let ref_count = 0; // ??? TODO |                         let ref_count = 0; // ??? TODO | ||||||
|                         let new_ix = |                         let new_ix = | ||||||
|   | |||||||
| @@ -36,15 +36,18 @@ struct Header { | |||||||
|     lock: AtomicU64, |     lock: AtomicU64, | ||||||
| } | } | ||||||
|  |  | ||||||
|  | /// A Header UID of 0 indicates that the header is unlocked | ||||||
|  | pub(crate) const UID_UNLOCKED: u64 = 0; | ||||||
|  |  | ||||||
| impl Header { | impl Header { | ||||||
|     fn try_lock(&self, uid: u64) -> bool { |     fn try_lock(&self, uid: u64) -> bool { | ||||||
|         Ok(0) |         Ok(UID_UNLOCKED) | ||||||
|             == self |             == self | ||||||
|                 .lock |                 .lock | ||||||
|                 .compare_exchange(0, uid, Ordering::Acquire, Ordering::Relaxed) |                 .compare_exchange(UID_UNLOCKED, uid, Ordering::Acquire, Ordering::Relaxed) | ||||||
|     } |     } | ||||||
|     fn unlock(&self) -> u64 { |     fn unlock(&self) -> u64 { | ||||||
|         self.lock.swap(0, Ordering::Release) |         self.lock.swap(UID_UNLOCKED, Ordering::Release) | ||||||
|     } |     } | ||||||
|     fn uid(&self) -> u64 { |     fn uid(&self) -> u64 { | ||||||
|         self.lock.load(Ordering::Relaxed) |         self.lock.load(Ordering::Relaxed) | ||||||
| @@ -133,7 +136,7 @@ impl BucketStorage { | |||||||
|         if ix >= self.num_cells() { |         if ix >= self.num_cells() { | ||||||
|             panic!("allocate: bad index size"); |             panic!("allocate: bad index size"); | ||||||
|         } |         } | ||||||
|         if 0 == uid { |         if UID_UNLOCKED == uid { | ||||||
|             panic!("allocate: bad uid"); |             panic!("allocate: bad uid"); | ||||||
|         } |         } | ||||||
|         let mut e = Err(BucketStorageError::AlreadyAllocated); |         let mut e = Err(BucketStorageError::AlreadyAllocated); | ||||||
| @@ -154,7 +157,7 @@ impl BucketStorage { | |||||||
|         if ix >= self.num_cells() { |         if ix >= self.num_cells() { | ||||||
|             panic!("free: bad index size"); |             panic!("free: bad index size"); | ||||||
|         } |         } | ||||||
|         if 0 == uid { |         if UID_UNLOCKED == uid { | ||||||
|             panic!("free: bad uid"); |             panic!("free: bad uid"); | ||||||
|         } |         } | ||||||
|         let ix = (ix * self.cell_size) as usize; |         let ix = (ix * self.cell_size) as usize; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user