Hi all,
this exception happens when Apache Druid Avatica protobuf endpoint is used:
"Druid can only fetch forward. Requested offset”.
I tried to debug that and saw that any simple query fails if it triggers
fetching of multiple frames. I speculate that when the first ExucuteRequest is
sent
msg := &message.ExecuteRequest{
StatementHandle: s.handle,
ParameterValues: s.parametersToTypedValues(args),
FirstFrameMaxSize: s.conn.config.frameMaxSize,
HasParameterValues: true,
}
and the result set is created after
rsets = append(rsets, &resultSet{
columns: columns,
done: frame.Done,
offset: frame.Offset,
data: data,
})
then for the next frame FetchRequest is sent but it uses the same 0 offset (the
data for that offset was returned with the ExecuteRequest)
res, err := r.conn.httpClient.post(context.Background(),
&message.FetchRequest{
ConnectionId: r.conn.connectionId,
StatementId: r.statementID,
Offset: resultSet.offset,
FrameMaxSize: r.conn.config.frameMaxSize,
})
So, in short, I think Avatica-Go sends 2 requests with the same offset that
makes Druid to fail.
I wonder if anyone with more experience could confirm that?
The implementation I mentioned is here:
go/pkg/mod/github.com/rilldata/calcite-avatica-go/[email protected]/rows.go
Thanks