Files
grafana/pkg/storage/legacysql/dualwrite/dualwriter_continue_token.go
T

34 lines
1.0 KiB
Go

package dualwrite
import (
"encoding/base64"
"fmt"
"strings"
)
// parseContinueTokens splits a dualwriter continue token (legacy, unified) if we received one.
// If we receive a single token not separated by a comma, we return the token as-is as a legacy
// token and an empty unified token. This is to ensure a smooth transition to the new token format.
func parseContinueTokens(token string) (string, string, error) {
if token == "" {
return "", "", nil
}
decodedToken, err := base64.StdEncoding.DecodeString(token)
if err != nil {
return "", "", fmt.Errorf("failed to decode dualwriter continue token: %w", err)
}
decodedTokens := strings.Split(string(decodedToken), ",")
if len(decodedTokens) > 1 {
return decodedTokens[0], decodedTokens[1], nil
}
return token, "", nil
}
func buildContinueToken(legacyToken, unifiedToken string) string {
if legacyToken == "" && unifiedToken == "" {
return ""
}
return base64.StdEncoding.EncodeToString([]byte(
strings.Join([]string{legacyToken, unifiedToken}, ",")))
}