Skip to content

Commit

Permalink
Update to compile with latest Rust (part 1)
Browse files Browse the repository at this point in the history
This change addresses the low-hanging fruit:

1. Update rust-toolchain to a recent nightly.
2. Remove feature flags for invalid features.
3. Update feature usage (mostly MaybeUnInit::get_{ref,mut} and
   Vec::drain_filter.
  • Loading branch information
msfroh committed Jan 31, 2024
1 parent 5b55f84 commit 9095098
Show file tree
Hide file tree
Showing 14 changed files with 57 additions and 60 deletions.
2 changes: 1 addition & 1 deletion rust-toolchain
Original file line number Diff line number Diff line change
@@ -1 +1 @@
nightly-2020-03-12
nightly-2024-01-30
16 changes: 8 additions & 8 deletions src/core/codec/postings/for_util.rs
Original file line number Diff line number Diff line change
Expand Up @@ -132,9 +132,9 @@ impl ForUtilInstance {
let format = Format::with_id(format_id);
encoded_sizes[bpv] = encoded_size(format, packed_ints_version, bits_per_value);
unsafe {
decoders.get_mut()[bpv] = get_decoder(format, packed_ints_version, bits_per_value)?;
encoders.get_mut()[bpv] = get_encoder(format, packed_ints_version, bits_per_value)?;
iterations[bpv] = compute_iterations(&decoders.get_ref()[bpv]);
decoders.assume_init_mut()[bpv] = get_decoder(format, packed_ints_version, bits_per_value)?;
encoders.assume_init_mut()[bpv] = get_encoder(format, packed_ints_version, bits_per_value)?;
iterations[bpv] = compute_iterations(&decoders.assume_init_ref()[bpv]);
}
}

Expand Down Expand Up @@ -168,9 +168,9 @@ impl ForUtilInstance {
debug_assert!(bits_per_value <= 32);
encoded_sizes[bpv - 1] = encoded_size(format, VERSION_CURRENT, bits_per_value);
unsafe {
decoders.get_mut()[bpv - 1] = get_decoder(format, VERSION_CURRENT, bits_per_value)?;
encoders.get_mut()[bpv - 1] = get_encoder(format, VERSION_CURRENT, bits_per_value)?;
iterations[bpv - 1] = compute_iterations(&decoders.get_ref()[bpv - 1]);
decoders.assume_init_mut()[bpv - 1] = get_decoder(format, VERSION_CURRENT, bits_per_value)?;
encoders.assume_init_mut()[bpv - 1] = get_encoder(format, VERSION_CURRENT, bits_per_value)?;
iterations[bpv - 1] = compute_iterations(&decoders.assume_init_ref()[bpv - 1]);
}

output.write_vint(format.get_id() << 5 | (bits_per_value - 1))?;
Expand Down Expand Up @@ -221,7 +221,7 @@ impl ForUtilInstance {
}

let encoded_size = self.encoded_sizes[num_bits - 1];
let decoder = unsafe { &self.decoders.get_ref()[num_bits - 1] };
let decoder = unsafe { &self.decoders.assume_init_ref()[num_bits - 1] };
if let Some(p) = partial_decoder {
let format = match decoder {
&BulkOperationEnum::Packed(_) => Format::Packed,
Expand Down Expand Up @@ -410,7 +410,7 @@ impl ForUtil {
assert!(num_bits > 0 && num_bits <= 32);

let iters = self.instance.iterations[num_bits - 1];
let encoder = unsafe { &self.instance.encoders.get_ref()[num_bits - 1] };
let encoder = unsafe { &self.instance.encoders.assume_init_ref()[num_bits - 1] };
assert!(iters * encoder.byte_value_count() as i32 >= BLOCK_SIZE);
let encoded_size = self.instance.encoded_sizes[num_bits - 1];
debug_assert!(iters * encoder.byte_block_count() as i32 >= encoded_size);
Expand Down
10 changes: 5 additions & 5 deletions src/core/codec/postings/terms_hash.rs
Original file line number Diff line number Diff line change
Expand Up @@ -262,7 +262,7 @@ where
let mut all_fields = Vec::with_capacity(field_to_flush.len());
for (_, f) in field_to_flush {
unsafe {
if !f.base().bytes_hash.get_ref().is_empty() {
if !f.base().bytes_hash.assume_init_ref().is_empty() {
// TODO: Hack logic, it's because it's hard to gain param `field_to_flush` as
// `HashMap<&str, &mut FreqProxTermsWriterPerField>`
// this should be fixed later
Expand Down Expand Up @@ -472,7 +472,7 @@ where
fn new(terms_writer: &FreqProxTermsWriterPerField<D, C, MS, MP>) -> Self {
FreqProxTermsIterator {
terms_writer,
num_terms: unsafe { terms_writer.base.bytes_hash.get_ref().len() },
num_terms: unsafe { terms_writer.base.bytes_hash.assume_init_ref().len() },
ord: -1,
scratch: BytesRef::default(),
}
Expand All @@ -487,7 +487,7 @@ where
}

fn set_bytes(&mut self, term_id: usize) {
let idx = unsafe { self.terms().base.bytes_hash.get_ref().ids[term_id] as usize };
let idx = unsafe { self.terms().base.bytes_hash.assume_init_ref().ids[term_id] as usize };
let text_start = self.terms().base.postings_array.base.text_starts[idx];
self.scratch = self
.terms()
Expand Down Expand Up @@ -589,7 +589,7 @@ where
let mut pos_iter = FreqProxPostingsIterator::new(self.terms());
unsafe {
pos_iter
.reset(self.terms().base.bytes_hash.get_ref().ids[self.ord as usize] as usize);
.reset(self.terms().base.bytes_hash.assume_init_ref().ids[self.ord as usize] as usize);
}
Ok(FreqProxPostingIterEnum::Postings(pos_iter))
} else {
Expand All @@ -604,7 +604,7 @@ where
let mut pos_iter = FreqProxDocsIterator::new(self.terms());
unsafe {
pos_iter
.reset(self.terms().base.bytes_hash.get_ref().ids[self.ord as usize] as usize);
.reset(self.terms().base.bytes_hash.assume_init_ref().ids[self.ord as usize] as usize);
}
Ok(FreqProxPostingIterEnum::Docs(pos_iter))
}
Expand Down
12 changes: 6 additions & 6 deletions src/core/codec/postings/terms_hash_per_field.rs
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ impl<T: PostingsArray + 'static> TermsHashPerFieldBase<T> {
self.byte_pool = &mut parent.byte_pool;
self.term_byte_pool = parent.term_byte_pool;
unsafe {
self.bytes_hash.get_mut().pool = parent.term_byte_pool;
self.bytes_hash.assume_init_mut().pool = parent.term_byte_pool;
}
}

Expand Down Expand Up @@ -215,7 +215,7 @@ impl<T: PostingsArray + 'static> TermsHashPerFieldBase<T> {
pub fn sort_postings(&mut self) {
debug_assert!(self.inited);
unsafe {
self.bytes_hash.get_mut().sort();
self.bytes_hash.assume_init_mut().sort();
}
}

Expand All @@ -240,7 +240,7 @@ pub trait TermsHashPerField: Ord + PartialOrd + Eq + PartialEq {

fn reset(&mut self) {
unsafe {
self.base_mut().bytes_hash.get_mut().clear(false);
self.base_mut().bytes_hash.assume_init_mut().clear(false);
}
}

Expand Down Expand Up @@ -269,7 +269,7 @@ pub trait TermsHashPerField: Ord + PartialOrd + Eq + PartialEq {
let term_id = unsafe {
self.base_mut()
.bytes_hash
.get_mut()
.assume_init_mut()
.add_by_pool_offset(text_start)
};
self.base_mut().add(term_id);
Expand All @@ -293,12 +293,12 @@ pub trait TermsHashPerField: Ord + PartialOrd + Eq + PartialEq {
// term text into text_start address
let bytes_ref = BytesRef::new(&token_stream.token().term);

let term_id = unsafe { self.base_mut().bytes_hash.get_mut().add(&bytes_ref) };
let term_id = unsafe { self.base_mut().bytes_hash.assume_init_mut().add(&bytes_ref) };
if term_id >= 0 {
unsafe {
self.base_mut()
.bytes_hash
.get_ref()
.assume_init_ref()
.byte_start(term_id as usize);
}
}
Expand Down
14 changes: 7 additions & 7 deletions src/core/codec/term_vectors/term_vector_consumer.rs
Original file line number Diff line number Diff line change
Expand Up @@ -641,13 +641,13 @@ where
}

self.do_vectors = false;
let num_postings = unsafe { self.base.bytes_hash.get_ref().len() };
let num_postings = unsafe { self.base.bytes_hash.assume_init_ref().len() };

// This is called once, after inverting all occurrences
// of a given field in the doc. At this point we flush
// our hash into the DocWriter.
unsafe {
self.base.bytes_hash.get_mut().sort();
self.base.bytes_hash.assume_init_mut().sort();
}
match &mut self.term_vectors_writer().0 {
TermVectorsConsumerEnum::Raw(r) => {
Expand All @@ -670,7 +670,7 @@ where
}
}
for j in 0..num_postings {
let term_id = unsafe { self.base.bytes_hash.get_ref().ids[j] as usize };
let term_id = unsafe { self.base.bytes_hash.assume_init_ref().ids[j] as usize };
let freq = self.base.postings_array.freqs[term_id];

// Get BytesPtr
Expand Down Expand Up @@ -702,7 +702,7 @@ where

fn reset(&mut self) {
unsafe {
self.base.bytes_hash.get_mut().clear(false);
self.base.bytes_hash.assume_init_mut().clear(false);
}
}

Expand Down Expand Up @@ -777,14 +777,14 @@ where
debug_assert_ne!(field.field_type().index_options(), IndexOptions::Null);
if first {
unsafe {
if !self.base.bytes_hash.get_ref().is_empty() {
if !self.base.bytes_hash.assume_init_ref().is_empty() {
// Only necessary if previous doc hit a
// non-aborting exception while writing vectors in
// this field:
self.reset();
}

self.base.bytes_hash.get_mut().reinit();
self.base.bytes_hash.assume_init_mut().reinit();
}
self.has_payloads = false;
self.do_vectors = field.field_type().store_term_vectors();
Expand Down Expand Up @@ -865,7 +865,7 @@ where
/// RAMOutputStream, which is then quickly flushed to
/// the real term vectors files in the Directory.
fn finish(&mut self, _field_state: &FieldInvertState) -> Result<()> {
if self.do_vectors && unsafe { !self.base.bytes_hash.get_ref().is_empty() } {
if self.do_vectors && unsafe { !self.base.bytes_hash.assume_init_ref().is_empty() } {
self.term_vectors_writer().add_field_to_flush(self);
}
Ok(())
Expand Down
2 changes: 1 addition & 1 deletion src/core/index/merge/merge_scheduler.rs
Original file line number Diff line number Diff line change
Expand Up @@ -493,7 +493,7 @@ impl<D: Directory + Send + Sync + 'static, C: Codec, MP: MergePolicy> MergeThrea
let scheduler_mut = unsafe { self.merge_scheduler.inner.scheduler_mut(&l) };
scheduler_mut
.merge_tasks
.drain_filter(|t| t.merge.id == one_merge.id);
.extract_if(|t| t.merge.id == one_merge.id);
scheduler_mut.update_merge_threads();
// In case we had stalled indexing, we can now wake up
// and possibly unstall:
Expand Down
16 changes: 8 additions & 8 deletions src/core/index/writer/doc_writer_per_thread.rs
Original file line number Diff line number Diff line change
Expand Up @@ -167,7 +167,7 @@ where
let consumer = DocConsumer::new(self, field_infos);
self.consumer.write(consumer);
unsafe {
self.consumer.get_mut().init();
self.consumer.assume_init_mut().init();
}

self.inited = true;
Expand Down Expand Up @@ -213,7 +213,7 @@ where
// vs non-aborting exceptions):
let res = unsafe {
self.consumer
.get_mut()
.assume_init_mut()
.process_document(&mut self.doc_state, &mut doc)
};
self.doc_state.clear();
Expand Down Expand Up @@ -273,7 +273,7 @@ where

let res = unsafe {
self.consumer
.get_mut()
.assume_init_mut()
.process_document(&mut self.doc_state, &mut doc)
};
if res.is_err() {
Expand Down Expand Up @@ -388,7 +388,7 @@ where
let mut flush_state = SegmentWriteState::new(
Arc::clone(&self.directory),
self.segment_info.clone(),
unsafe { self.consumer.get_ref().field_infos.finish()? },
unsafe { self.consumer.assume_init_ref().field_infos.finish()? },
Some(&self.pending_updates),
ctx,
"".into(),
Expand Down Expand Up @@ -438,11 +438,11 @@ where

// re-init
unsafe {
self.consumer.get_mut().reset_doc_writer(doc_writer);
self.consumer.get_mut().init();
self.consumer.assume_init_mut().reset_doc_writer(doc_writer);
self.consumer.assume_init_mut().init();
}

let sort_map = unsafe { self.consumer.get_mut().flush(&mut flush_state)? };
let sort_map = unsafe { self.consumer.assume_init_mut().flush(&mut flush_state)? };
self.pending_updates.deleted_terms.clear();
self.segment_info
.set_files(&self.directory.create_files())?;
Expand Down Expand Up @@ -596,7 +596,7 @@ where
debug!("DWPT: now abort");

unsafe {
if let Err(e) = self.consumer.get_mut().abort() {
if let Err(e) = self.consumer.assume_init_mut().abort() {
error!("DefaultIndexChain abort failed by error: '{:?}'", e);
}
}
Expand Down
2 changes: 1 addition & 1 deletion src/core/index/writer/flush_policy.rs
Original file line number Diff line number Diff line change
Expand Up @@ -183,7 +183,7 @@ impl<C1: Codec, MS1: MergeScheduler, MP1: MergePolicy> FlushPolicy
{
if (self.index_write_config.flush_on_doc_count()
&& state.dwpt().num_docs_in_ram >= self.index_write_config.max_buffered_docs())
|| unsafe { state.dwpt().consumer.get_ref().need_flush() }
|| unsafe { state.dwpt().consumer.assume_init_ref().need_flush() }
{
// Flush this state by num docs
control.set_flush_pending(state, lg);
Expand Down
4 changes: 2 additions & 2 deletions src/core/index/writer/index_file_deleter.rs
Original file line number Diff line number Diff line change
Expand Up @@ -488,7 +488,7 @@ impl<D: Directory> IndexFileDeleter<D> {

fn filter_dv_update_files(&self, candidates: &mut Vec<&String>) {
let dv_update_files: Vec<String> = candidates
.drain_filter(|f| -> bool {
.extract_if(|f| -> bool {
self.fnm_pattern.is_match(f) || self.dv_pattern.is_match(f)
})
.map(|f| f.clone())
Expand All @@ -502,7 +502,7 @@ impl<D: Directory> IndexFileDeleter<D> {
.unwrap()
.as_secs();
to_deletes = old_dv_update_files
.drain_filter(|(x, _)| -> bool { *x < tm_now })
.extract_if(|(x, _)| -> bool { *x < tm_now })
.map(|(_, y)| y)
.collect();
old_dv_update_files.push((tm_now + 60, dv_update_files));
Expand Down
4 changes: 2 additions & 2 deletions src/core/index/writer/index_writer.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2846,9 +2846,9 @@ where
self.segment_infos.remove(info);
self.pending_num_docs
.fetch_sub(info.info.max_doc as i64, Ordering::AcqRel);
if merge.segments.contains(info) {
if let Some(pos) = merge.segments.iter().position(|x| *x == *info) {
self.merging_segments.remove(&info.info.name);
merge.segments.remove_item(info);
merge.segments.remove(pos);
}
self.reader_pool.drop(info.as_ref())?;
}
Expand Down
22 changes: 11 additions & 11 deletions src/core/search/query/spans/span_near.rs
Original file line number Diff line number Diff line change
Expand Up @@ -418,11 +418,11 @@ impl<P: PostingIterator> NearSpansUnordered<P> {

impl<P: PostingIterator> ConjunctionSpans<P> for NearSpansUnordered<P> {
fn conjunction_span_base(&self) -> &ConjunctionSpanBase<P> {
unsafe { self.conjunction_span.get_ref() }
unsafe { self.conjunction_span.assume_init_ref() }
}

fn conjunction_span_base_mut(&mut self) -> &mut ConjunctionSpanBase<P> {
unsafe { self.conjunction_span.get_mut() }
unsafe { self.conjunction_span.assume_init_mut() }
}

fn two_phase_current_doc_matches(&mut self) -> Result<bool> {
Expand All @@ -431,8 +431,8 @@ impl<P: PostingIterator> ConjunctionSpans<P> for NearSpansUnordered<P> {
loop {
if self.at_match() {
unsafe {
self.conjunction_span.get_mut().first_in_current_doc = true;
self.conjunction_span.get_mut().one_exhausted_in_current_doc = false;
self.conjunction_span.assume_init_mut().first_in_current_doc = true;
self.conjunction_span.assume_init_mut().one_exhausted_in_current_doc = false;
}
return Ok(true);
}
Expand All @@ -450,8 +450,8 @@ impl<P: PostingIterator> ConjunctionSpans<P> for NearSpansUnordered<P> {
impl<P: PostingIterator> Spans for NearSpansUnordered<P> {
fn next_start_position(&mut self) -> Result<i32> {
unsafe {
if self.conjunction_span.get_ref().first_in_current_doc {
self.conjunction_span.get_mut().first_in_current_doc = false;
if self.conjunction_span.assume_init_ref().first_in_current_doc {
self.conjunction_span.assume_init_mut().first_in_current_doc = false;
return Ok(self.min_cell().start_position());
}
}
Expand All @@ -475,7 +475,7 @@ impl<P: PostingIterator> Spans for NearSpansUnordered<P> {
== NO_MORE_POSITIONS
{
unsafe {
self.conjunction_span.get_mut().one_exhausted_in_current_doc = true;
self.conjunction_span.assume_init_mut().one_exhausted_in_current_doc = true;
}
return Ok(NO_MORE_POSITIONS);
}
Expand All @@ -487,9 +487,9 @@ impl<P: PostingIterator> Spans for NearSpansUnordered<P> {

fn start_position(&self) -> i32 {
unsafe {
if self.conjunction_span.get_ref().first_in_current_doc {
if self.conjunction_span.assume_init_ref().first_in_current_doc {
-1
} else if self.conjunction_span.get_ref().one_exhausted_in_current_doc {
} else if self.conjunction_span.assume_init_ref().one_exhausted_in_current_doc {
NO_MORE_POSITIONS
} else {
self.min_cell().start_position()
Expand All @@ -499,9 +499,9 @@ impl<P: PostingIterator> Spans for NearSpansUnordered<P> {

fn end_position(&self) -> i32 {
unsafe {
if self.conjunction_span.get_ref().first_in_current_doc {
if self.conjunction_span.assume_init_ref().first_in_current_doc {
-1
} else if self.conjunction_span.get_ref().one_exhausted_in_current_doc {
} else if self.conjunction_span.assume_init_ref().one_exhausted_in_current_doc {
NO_MORE_POSITIONS
} else {
self.sub_span_cells[self.max_end_position_cell_idx].end_position()
Expand Down
3 changes: 2 additions & 1 deletion src/core/util/bits.rs
Original file line number Diff line number Diff line change
Expand Up @@ -418,7 +418,8 @@ impl<T: LongValues> Bits for SparseBits<T> {
impl<T: LongValues> BitsMut for SparseBits<T> {
fn get(&mut self, index: usize) -> Result<bool> {
unsafe {
let ctx = &self.ctx as *const _ as *mut _;
//let ctx = &self.ctx as *const _ as *mut _;
let ctx = &mut self.ctx as *mut _;
self.get64(&mut *ctx, index as i64)
}
}
Expand Down
2 changes: 1 addition & 1 deletion src/core/util/doc_id_set.rs
Original file line number Diff line number Diff line change
Expand Up @@ -361,7 +361,7 @@ impl<DI: DocIterator> DocIterator for NotDocIterator<DI> {

#[derive(Debug)]
pub struct EliasFanoDocIdSet {
ef_encoder: Arc<EliasFanoEncoder>,
ef_encoder:Arc<EliasFanoEncoder>,
}

impl EliasFanoDocIdSet {
Expand Down
Loading

0 comments on commit 9095098

Please sign in to comment.