Skip to content

Commit

Permalink
Revert "Don't cache non success responses" (#111)
Browse files Browse the repository at this point in the history
Revert "Don't cache non success responses (#109)"

This reverts commit ff7d6b9.
  • Loading branch information
mtoader authored and rickr-sigma committed May 10, 2023
1 parent e2bfc88 commit d0dd743
Showing 1 changed file with 9 additions and 26 deletions.
35 changes: 9 additions & 26 deletions monitoring.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,10 @@
package gosnowflake

import (
"bytes"
"context"
"database/sql/driver"
"encoding/json"
"fmt"
"io"
"net/url"
"runtime"
"strconv"
Expand Down Expand Up @@ -209,13 +207,14 @@ func (sc *snowflakeConn) getQueryResultResp(
resultPath string,
) (*execResponse, error) {
var cachedResponse *execResponse
if res, ok := sc.execRespCache.load(resultPath); ok {
cachedResponse = nil
if respd, ok := sc.execRespCache.load(resultPath); ok {
cachedResponse = respd
// return the cached response, unless we pass the flag saying to
// bypass the cache
if res.Success && !shouldSkipCache(ctx) {
return res, nil
if !shouldSkipCache(ctx) {
return respd, nil
}
cachedResponse = res
}

headers := getHeaders()
Expand All @@ -238,32 +237,20 @@ func (sc *snowflakeConn) getQueryResultResp(
logger.WithContext(ctx).Errorf("failed to get response. err: %v", err)
return nil, err
}
if res.Body != nil {
defer func() { _ = res.Body.Close() }()
}

bodyBytes, err := io.ReadAll(res.Body)
if err != nil {
return nil, err
}

var respd *execResponse
if err = json.NewDecoder(bytes.NewReader(bodyBytes)).Decode(&respd); err != nil {
if err = json.NewDecoder(res.Body).Decode(&respd); err != nil {
logger.WithContext(ctx).Errorf("failed to decode JSON. err: %v", err)
return nil, err
}

if !respd.Success && respd.Code == "" && respd.Message == "" {
logger.WithContext(ctx).Errorf("failed to build a proper exec response. received body: %s", string(bodyBytes))
}

// if we are skipping the cache, log difference between cached and non cached result
if shouldSkipCache(ctx) {
qid := respd.Data.QueryID

// if there was no response in the cache anyway, log that and dont try to log anything else
if cachedResponse == nil {
logger.WithContext(ctx).Errorf("cached queryId: %v did not use cache", qid)

} else {
// log if there are any differences in the arrow encooded first chunk
arrowCached := cachedResponse.Data.RowSetBase64
Expand Down Expand Up @@ -297,10 +284,7 @@ func (sc *snowflakeConn) getQueryResultResp(
}
}

if respd.Success {
sc.execRespCache.store(resultPath, respd)
}

sc.execRespCache.store(resultPath, respd)
return respd, nil
}

Expand Down Expand Up @@ -355,10 +339,9 @@ func (sc *snowflakeConn) waitForCompletedQueryResultResp(

if !response.Success {
logEverything(ctx, qid, response, startTime)
} else {
sc.execRespCache.store(resultPath, response)
}

sc.execRespCache.store(resultPath, response)
return response, nil
}

Expand Down

0 comments on commit d0dd743

Please sign in to comment.