1
0
Fork 0

Optimize Requests

master
Philip O'Toole 8 months ago
parent 039e907e3f
commit 9df4c0527c

@ -1164,16 +1164,28 @@ func (s *Store) Request(eqr *proto.ExecuteQueryRequest) ([]*proto.ExecuteQueryRe
defer s.queryTxMu.RUnlock() defer s.queryTxMu.RUnlock()
} }
convertFn := func(qr []*proto.QueryRows) []*proto.ExecuteQueryResponse {
resp := make([]*proto.ExecuteQueryResponse, len(qr))
for i := range qr {
resp[i] = &proto.ExecuteQueryResponse{
Result: &proto.ExecuteQueryResponse_Q{Q: qr[i]},
}
}
return resp
}
if eqr.Level == proto.QueryRequest_QUERY_REQUEST_LEVEL_NONE { if eqr.Level == proto.QueryRequest_QUERY_REQUEST_LEVEL_NONE {
if eqr.Freshness > 0 && time.Since(s.raft.LastContact()).Nanoseconds() > eqr.Freshness { if eqr.Freshness > 0 && time.Since(s.raft.LastContact()).Nanoseconds() > eqr.Freshness {
return nil, ErrStaleRead return nil, ErrStaleRead
} }
return s.db.Request(eqr.Request, eqr.Timings) qr, err := s.db.Query(eqr.Request, eqr.Timings)
return convertFn(qr), err
} else if eqr.Level == proto.QueryRequest_QUERY_REQUEST_LEVEL_WEAK { } else if eqr.Level == proto.QueryRequest_QUERY_REQUEST_LEVEL_WEAK {
if s.raft.State() != raft.Leader { if s.raft.State() != raft.Leader {
return nil, ErrNotLeader return nil, ErrNotLeader
} }
return s.db.Request(eqr.Request, eqr.Timings) qr, err := s.db.Query(eqr.Request, eqr.Timings)
return convertFn(qr), err
} }
} }
@ -1652,10 +1664,9 @@ func (s *Store) QueriesOnly(eqr *proto.ExecuteQueryRequest) bool {
continue continue
} }
ro, err := s.db.StmtReadOnly(sql) ro, err := s.db.StmtReadOnly(sql)
if ro && err == nil { if err != nil || !ro {
continue return false
} }
return false
} }
return true return true
} }

Loading…
Cancel
Save