You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@druid.apache.org by GitBox <gi...@apache.org> on 2021/07/09 11:13:34 UTC
[GitHub] [druid] n4j commented on issue #11422: Scan query gracefully closing connections which results in partial data read from datasource
n4j commented on issue #11422:
URL: https://github.com/apache/druid/issues/11422#issuecomment-877109433
Bit of a context, I work with @bharadwajrembar and we are experiencing this issue in Production.
We pull all the rows falling for a given time range (typically a day) via `ScanQuery` with `array` as response format.
What we have noticed is the connection closes before all the rows for a given day are fetched and since this is "graceful" no exception is thrown while parsing the response and we experience inconsistent data pull.
We have noticed the above behaviour for a datasource which has about 200 columns and data in tune of 3 million rows for a given day (we have 365 days worth of data), for our other less heavy datasources it's not an issue
To validate our hypothesis I wrote below two scripts, one of them counts the number of rows scanned from the datasource and then compares it against the total number of rows present obtained via `count(1)`
```bash
# Driver script
#!/bin/bash
for (( i=1; i<=$N; i++ ))
do
#echo $i
nohup sh -c "time ./sql.sh" > log_$i.log &
done
sleep 3
tail -f log_*.log | grep Consumed
```
```bash
# Executes query agains datasource and counts the number of rows returned and compares it against number of rows actually present
#!/bin/bash
LINES=$(curl --location --request POST 'druid-router.io/druid/v2/sql' \
--header 'Content-Type: application/json' \
--data-raw '
{
"query": "select col1, col2, col3, col4, col200 from \"large-datasource\" where __time in (?)",
"resultFormat": "arrayLines",
"header": "false",
"parameters":
[
{
"type": "TIMESTAMP",
"value": "2021-05-01"
}
]
}' | wc -l)
EXPECTED_LINES=$(curl --location --request POST 'druid-router.io/druid/v2/sql' \
--header 'Content-Type: application/json' \
--data-raw '
{
"query": "select count(1) from \"large-datasource\" where __time in (?)",
"resultFormat": "arrayLines",
"header": "false",
"parameters":
[
{
"type": "TIMESTAMP",
"value": "2021-05-01"
}
]
}' | tail -n 2)
echo "Consumed [$LINES] rows out of [$EXPECTED_LINES] rows for time range 2021-05-01"
```
Below is the output of the above script
```
nohup: redirecting stderr to stdout
nohup: redirecting stderr to stdout
Consumed [3697000] rows out of [[3696999]] rows for time range 2021-05-01
Consumed [3697000] rows out of [[3696999]] rows for time range 2021-05-01
Consumed [3697000] rows out of [[3696999]] rows for time range 2021-05-01
Consumed [3697000] rows out of [[3696999]] rows for time range 2021-05-01
Consumed [3697000] rows out of [[3696999]] rows for time range 2021-05-01
Consumed [3697000] rows out of [[3696999]] rows for time range 2021-05-01
Consumed [3697000] rows out of [[3696999]] rows for time range 2021-05-01
Consumed [3697000] rows out of [[3696999]] rows for time range 2021-05-01
Consumed [3697000] rows out of [[3696999]] rows for time range 2021-05-01
Consumed [3697000] rows out of [[3696999]] rows for time range 2021-05-01
Consumed [3697000] rows out of [[3696999]] rows for time range 2021-05-01
Consumed [3697000] rows out of [[3696999]] rows for time range 2021-05-01
Consumed [3697000] rows out of [[3696999]] rows for time range 2021-05-01
Consumed [3697000] rows out of [[3696999]] rows for time range 2021-05-01
Consumed [3697000] rows out of [[3696999]] rows for time range 2021-05-01
========
Consumed [3697000] rows out of [[3696999]] rows for time range 2021-05-01
Consumed [3697000] rows out of [[3696999]] rows for time range 2021-05-01
**Consumed [3435173] rows out of [[3696999]] rows for time range 2021-05-01**
Consumed [3697000] rows out of [[3696999]] rows for time range 2021-05-01
Consumed [3697000] rows out of [[3696999]] rows for time range 2021-05-01
**Consumed [3435173] rows out of [[3696999]] rows for time range 2021-05-01**
Consumed [3697000] rows out of [[3696999]] rows for time range 2021-05-01
**Consumed [3435173] rows out of [[3696999]] rows for time range 2021-05-01**
Consumed [3697000] rows out of [[3696999]] rows for time range 2021-05-01
Consumed [3697000] rows out of [[3696999]] rows for time range 2021-05-01
Consumed [3697000] rows out of [[3696999]] rows for time range 2021-05-01
Consumed [3697000] rows out of [[3696999]] rows for time range 2021-05-01
Consumed [3697000] rows out of [[3696999]] rows for time range 2021-05-01
Consumed [3697000] rows out of [[3696999]] rows for time range 2021-05-01
Consumed [3697000] rows out of [[3696999]] rows for time range 2021-05-01
```
As you can see from the above we receive less number of rows then present via `ScanQuery` and since Druid terminates the connection gracefully, we have no way of knowing if we were able to read all the rows.
We have checked our logs and tweaked all timeout parameters but the root cause of this issue remains elusive.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@druid.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@druid.apache.org
For additional commands, e-mail: commits-help@druid.apache.org