Skip to content

Commit e0de3a2

Browse files
committed
fix
1 parent 7a3d6de commit e0de3a2

File tree

1 file changed

+15
-3
lines changed

1 file changed

+15
-3
lines changed

src/query/service/src/servers/http/v1/query/sized_spsc.rs

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ use databend_common_base::base::tokio;
2626
use databend_common_base::base::tokio::sync::Notify;
2727
use databend_common_base::base::WatchNotify;
2828
use databend_common_exception::Result;
29+
use databend_common_expression::BlockEntry;
2930
use databend_common_expression::DataBlock;
3031
use databend_common_io::prelude::FormatSettings;
3132
use databend_common_pipeline_transforms::traits::DataBlockSpill;
@@ -65,7 +66,17 @@ impl PageBuilder {
6566
self.collector.append_block(block);
6667
}
6768

68-
fn calculate_take_rows(&self, block_rows: usize, memory_size: usize) -> usize {
69+
fn calculate_take_rows(&self, block: &DataBlock) -> usize {
70+
let block_rows = block.num_rows();
71+
let memory_size = block
72+
.columns()
73+
.iter()
74+
.map(|entry| match entry {
75+
BlockEntry::Const(scalar, _, n) => *n * scalar.as_ref().memory_size(),
76+
BlockEntry::Column(column) => column.memory_size(),
77+
})
78+
.sum::<usize>();
79+
6980
min(
7081
self.remain_rows,
7182
if memory_size > self.remain_size {
@@ -157,7 +168,7 @@ impl SizedChannelBuffer {
157168
return Err(block.location.clone().unwrap());
158169
};
159170

160-
let take_rows = builder.calculate_take_rows(data.num_rows(), data.memory_size());
171+
let take_rows = builder.calculate_take_rows(&data);
161172
if take_rows < data.num_rows() {
162173
builder.remain_rows = 0;
163174
builder.collector.append_block(block.slice(take_rows));
@@ -303,7 +314,8 @@ impl<S> SizedChannelReceiver<S>
303314
where S: DataBlockSpill
304315
{
305316
pub fn close(&self) {
306-
self.chan.stop_recv()
317+
self.chan.stop_recv();
318+
self.chan.spiller.lock().unwrap().take(); // release session
307319
}
308320

309321
#[async_backtrace::framed]

0 commit comments

Comments
 (0)