Skip to content

Commit 28803f4

Browse files
fix master conflict
Signed-off-by: Little-Wallace <[email protected]>
1 parent 63f18e5 commit 28803f4

File tree

4 files changed

+29
-27
lines changed

4 files changed

+29
-27
lines changed

Diff for: src/cache_evict.rs

+5-3
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ impl CacheSubmitor {
6464
self.block_on_full = false;
6565
}
6666

67-
pub fn get_cache_tracker(&mut self, file_num: u64, offset: u64) -> Option<Arc<AtomicUsize>> {
67+
pub fn get_cache_tracker(&mut self, file_num: u64, offset: u64) -> Option<CacheTracker> {
6868
if self.cache_limit == 0 {
6969
return None;
7070
}
@@ -104,13 +104,15 @@ impl CacheSubmitor {
104104
}
105105
}
106106

107-
Some(self.size_tracker.clone())
107+
Some(CacheTracker::new(
108+
self.global_stats.clone(),
109+
self.size_tracker.clone(),
110+
))
108111
}
109112

110113
pub fn fill_chunk(&mut self, size: usize) {
111114
self.chunk_size += size;
112115
self.size_tracker.fetch_add(size, Ordering::Release);
113-
self.global_stats.add_mem_change(size);
114116
}
115117

116118
fn reset(&mut self, file_num: u64, offset: u64) {

Diff for: src/engine.rs

+3-6
Original file line numberDiff line numberDiff line change
@@ -195,15 +195,14 @@ where
195195
log_batch: &mut LogBatch<E, W>,
196196
sync: bool,
197197
) -> BoxFuture<'static, Result<usize>> {
198-
let mut entries_size = 0;
199198
let now = Instant::now();
200-
if let Some(content) = log_batch.encode_to_bytes(&mut entries_size) {
199+
if let Some(content) = log_batch.encode_to_bytes() {
201200
let (sender, r) = future_channel::oneshot::channel();
202201
let bytes = content.len();
203202
let task = WriteTask {
204203
content,
205204
sync,
206-
entries_size,
205+
entries_size: log_batch.entries_size(),
207206
sender,
208207
};
209208
if let Err(_) = self.wal_sender.send(LogMsg::Write(task)) {
@@ -378,14 +377,12 @@ where
378377
if let Some(tracker) =
379378
cache_submitor.get_cache_tracker(file_num, offset)
380379
{
381-
let mut encoded_size = 0;
382380
for item in log_batch.items.iter_mut() {
383381
if let LogItemContent::Entries(entries) = &mut item.content {
384382
entries.attach_cache_tracker(tracker.clone());
385-
encoded_size += entries.encoded_size;
386383
}
387384
}
388-
cache_submitor.fill_chunk(encoded_size);
385+
cache_submitor.fill_chunk(log_batch.entries_size());
389386
}
390387
}
391388
self.apply_to_memtable(&mut log_batch, queue, file_num);

Diff for: src/log_batch.rs

+19-14
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ impl<E: Message + PartialEq> PartialEq for Entries<E> {
139139

140140
impl<E: Message> Entries<E> {
141141
pub fn new(entries: Vec<E>, entries_index: Option<Vec<EntryIndex>>) -> Entries<E> {
142-
let entries_index =
142+
let entries_index =
143143
entries_index.unwrap_or_else(|| vec![EntryIndex::default(); entries.len()]);
144144
Entries {
145145
entries,
@@ -202,7 +202,7 @@ impl<E: Message> Entries<E> {
202202
// This offset doesn't count the header.
203203
self.entries_index[i].offset = vec.len() as u64;
204204
self.entries_index[i].len = content.len() as u64;
205-
*entries_size += entries_index[i].len as usize;
205+
*entries_size += self.entries_index[i].len as usize;
206206
}
207207

208208
vec.extend_from_slice(&content);
@@ -232,12 +232,12 @@ impl<E: Message> Entries<E> {
232232
}
233233
}
234234

235-
pub fn attach_cache_tracker(&mut self, chunk_size: Arc<AtomicUsize>) {
235+
pub fn attach_cache_tracker(&mut self, tracker: CacheTracker) {
236236
for idx in self.entries_index.iter_mut() {
237-
idx.cache_tracker = Some(CacheTracker {
238-
chunk_size: chunk_size.clone(),
239-
sub_on_drop: idx.len as usize,
240-
});
237+
let mut tkr = tracker.clone();
238+
tkr.global_stats.add_mem_change(idx.len as usize);
239+
tkr.sub_on_drop = idx.len as usize;
240+
idx.cache_tracker = Some(tkr);
241241
}
242242
}
243243

@@ -466,7 +466,7 @@ where
466466
W: EntryExt<E>,
467467
{
468468
pub items: Vec<LogItem<E>>,
469-
entries_size: RefCell<usize>,
469+
entries_size: usize,
470470
_phantom: PhantomData<W>,
471471
}
472472

@@ -478,7 +478,7 @@ where
478478
fn default() -> Self {
479479
Self {
480480
items: Vec::with_capacity(16),
481-
entries_size: RefCell::new(0),
481+
entries_size: 0,
482482
_phantom: PhantomData,
483483
}
484484
}
@@ -496,7 +496,7 @@ where
496496
pub fn with_capacity(cap: usize) -> Self {
497497
Self {
498498
items: Vec::with_capacity(cap),
499-
entries_size: RefCell::new(0),
499+
entries_size: 0,
500500
_phantom: PhantomData,
501501
}
502502
}
@@ -576,7 +576,7 @@ where
576576
file_num,
577577
base_offset,
578578
content_offset,
579-
&mut log_batch.entries_size.borrow_mut(),
579+
&mut log_batch.entries_size,
580580
)?;
581581
log_batch.items.push(item);
582582
items_count -= 1;
@@ -603,12 +603,17 @@ where
603603
let mut vec = Vec::with_capacity(4096);
604604
vec.encode_u64(0).unwrap();
605605
vec.encode_var_u64(self.items.len() as u64).unwrap();
606-
for item in &self.items {
607-
item.encode_to::<W>(&mut vec, &mut *self.entries_size.borrow_mut())
606+
for item in self.items.iter_mut() {
607+
item.encode_to::<W>(&mut vec, &mut self.entries_size)
608608
.unwrap();
609609
}
610610

611-
let compression_type = CompressionType::None;
611+
let compression_type = if vec.len() > COMPRESSION_SIZE {
612+
vec = lz4::encode_block(&vec[HEADER_LEN..], HEADER_LEN, 4);
613+
CompressionType::Lz4
614+
} else {
615+
CompressionType::None
616+
};
612617

613618
let checksum = crc32(&vec[8..]);
614619
vec.encode_u32_le(checksum).unwrap();

Diff for: src/wal.rs

+2-4
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
use futures::channel::oneshot::Sender;
2-
use std::sync::atomic::AtomicUsize;
32
use std::sync::mpsc::Receiver;
4-
use std::sync::Arc;
53

6-
use crate::cache_evict::CacheSubmitor;
4+
use crate::cache_evict::{CacheSubmitor, CacheTracker};
75
use crate::errors::Result;
86
use crate::pipe_log::{GenericPipeLog, LogQueue};
97
use crate::util::Statistic;
@@ -14,7 +12,7 @@ pub struct WriteTask {
1412
pub content: Vec<u8>,
1513
pub entries_size: usize,
1614
pub sync: bool,
17-
pub sender: Sender<(u64, u64, Option<Arc<AtomicUsize>>)>,
15+
pub sender: Sender<(u64, u64, Option<CacheTracker>)>,
1816
}
1917

2018
pub enum LogMsg {

0 commit comments

Comments
 (0)