mirror of
https://github.com/minio/minio.git
synced 2025-11-20 01:50:24 -05:00
Flush the records staging buffer periodically (#7193)
- Staging buffer is flushed every 500ms. In cases where the result records are slowly generated (e.g. when a where condition matches very few records), this change causes the server to send results even though the staging buffer is not full. - Refactor messageWriter code to use simpler channel based co-ordination instead of atomic variables.
This commit is contained in:
committed by
Nitish Tiwari
parent
3dfbe0f68c
commit
fd4e15c116
@@ -329,11 +329,11 @@ func (s3Select *S3Select) Evaluate(w http.ResponseWriter) {
|
||||
}
|
||||
|
||||
if len(data) > maxRecordSize {
|
||||
writer.SendError("OverMaxRecordSize", "The length of a record in the input or result is greater than maxCharsPerRecord of 1 MB.")
|
||||
writer.FinishWithError("OverMaxRecordSize", "The length of a record in the input or result is greater than maxCharsPerRecord of 1 MB.")
|
||||
return false
|
||||
}
|
||||
|
||||
if err = writer.SendRecords(data); err != nil {
|
||||
if err = writer.SendRecord(data); err != nil {
|
||||
// FIXME: log this error.
|
||||
err = nil
|
||||
return false
|
||||
@@ -344,13 +344,7 @@ func (s3Select *S3Select) Evaluate(w http.ResponseWriter) {
|
||||
|
||||
for {
|
||||
if s3Select.statement.LimitReached() {
|
||||
if err = writer.FlushRecords(); err != nil {
|
||||
// FIXME: log this error
|
||||
err = nil
|
||||
break
|
||||
}
|
||||
|
||||
if err = writer.SendStats(s3Select.getProgress()); err != nil {
|
||||
if err = writer.Finish(s3Select.getProgress()); err != nil {
|
||||
// FIXME: log this error.
|
||||
err = nil
|
||||
}
|
||||
@@ -373,17 +367,10 @@ func (s3Select *S3Select) Evaluate(w http.ResponseWriter) {
|
||||
}
|
||||
}
|
||||
|
||||
if err = writer.FlushRecords(); err != nil {
|
||||
// FIXME: log this error
|
||||
err = nil
|
||||
break
|
||||
}
|
||||
|
||||
if err = writer.SendStats(s3Select.getProgress()); err != nil {
|
||||
if err = writer.Finish(s3Select.getProgress()); err != nil {
|
||||
// FIXME: log this error.
|
||||
err = nil
|
||||
}
|
||||
|
||||
break
|
||||
}
|
||||
|
||||
@@ -404,8 +391,7 @@ func (s3Select *S3Select) Evaluate(w http.ResponseWriter) {
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
fmt.Printf("SQL Err: %#v\n", err)
|
||||
if serr := writer.SendError("InternalError", err.Error()); serr != nil {
|
||||
if serr := writer.FinishWithError("InternalError", err.Error()); serr != nil {
|
||||
// FIXME: log errors.
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user