From bc2bdee768786e4a1382be6b04efe4a29d2be463 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Philip=20Dub=C3=A9?= Date: Mon, 18 Dec 2023 07:25:59 +0000 Subject: [PATCH 1/6] git rm connectors/bigquery/qrecord_value_saver.go (#838) dead code also remove unused arg to BoundSelector & remove bad comment --- flow/concurrency/bound_selector.go | 2 +- .../bigquery/qrecord_value_saver.go | 203 ------------------ flow/workflows/snapshot_flow.go | 4 +- 3 files changed, 2 insertions(+), 207 deletions(-) delete mode 100644 flow/connectors/bigquery/qrecord_value_saver.go diff --git a/flow/concurrency/bound_selector.go b/flow/concurrency/bound_selector.go index 29735c09d6..75d6a5c983 100644 --- a/flow/concurrency/bound_selector.go +++ b/flow/concurrency/bound_selector.go @@ -13,7 +13,7 @@ type BoundSelector struct { ferrors []error } -func NewBoundSelector(limit int, total int, ctx workflow.Context) *BoundSelector { +func NewBoundSelector(limit int, ctx workflow.Context) *BoundSelector { return &BoundSelector{ ctx: ctx, limit: limit, diff --git a/flow/connectors/bigquery/qrecord_value_saver.go b/flow/connectors/bigquery/qrecord_value_saver.go deleted file mode 100644 index 202ac3df4d..0000000000 --- a/flow/connectors/bigquery/qrecord_value_saver.go +++ /dev/null @@ -1,203 +0,0 @@ -package connbigquery - -import ( - "fmt" - "math/big" - - "cloud.google.com/go/bigquery" - "github.com/PeerDB-io/peer-flow/model" - "github.com/PeerDB-io/peer-flow/model/qvalue" - "github.com/google/uuid" -) - -type QRecordValueSaver struct { - ColumnNames []string - Record *model.QRecord - PartitionID string - RunID int64 -} - -// RatToBigQueryNumeric converts a *big.Rat to a decimal string compatible with -// BigQuery's NUMERIC type. -// -// BigQuery's NUMERIC type supports large-scale fixed-point numbers with up to -// 38 digits of precision and 9 digits of scale. This function converts a *big.Rat -// to a decimal string that respects these limits. -// -// The function uses *big.Rat's FloatString method with 9 as the argument, which -// converts the *big.Rat to a string that represents a floating-point number with -// 9 digits after the decimal point. The resulting string can be inserted into a -// NUMERIC field in BigQuery. -// -// Parameters: -// rat: The *big.Rat to convert. This should represent a decimal number with up to -// -// 38 digits of precision and 9 digits of scale. -// -// Returns: -// A string representing the *big.Rat as a decimal number with up to 38 digits -// of precision and 9 digits of scale. This string can be inserted into a NUMERIC -// field in BigQuery. -func RatToBigQueryNumeric(rat *big.Rat) string { - // Convert the *big.Rat to a decimal string with 9 digits of scale - return rat.FloatString(9) // 9 is the scale of the NUMERIC type -} - -func (q QRecordValueSaver) Save() (map[string]bigquery.Value, string, error) { - bqValues := make(map[string]bigquery.Value, q.Record.NumEntries) - - for i, v := range q.Record.Entries { - k := q.ColumnNames[i] - if v.Value == nil { - if v.Kind.IsArray() { - bqValues[k] = make([]interface{}, 0) - } else { - bqValues[k] = nil - } - continue - } - - switch v.Kind { - case qvalue.QValueKindFloat32: - val, ok := v.Value.(float32) - if !ok { - return nil, "", fmt.Errorf("failed to convert %v to float64", v.Value) - } - bqValues[k] = val - - case qvalue.QValueKindFloat64: - val, ok := v.Value.(float64) - if !ok { - return nil, "", fmt.Errorf("failed to convert %v to float64", v.Value) - } - bqValues[k] = val - - case qvalue.QValueKindInt16: - switch v.Value.(type) { - case int16: - bqValues[k] = v.Value - case int32: - bqValues[k] = int16(v.Value.(int32)) - case int64: - bqValues[k] = int16(v.Value.(int64)) - default: - return nil, "", fmt.Errorf("failed to convert %v to int16", v.Value) - } - - case qvalue.QValueKindInt32: - val, ok := v.Value.(int32) - if !ok { - return nil, "", fmt.Errorf("failed to convert %v to int32", v.Value) - } - bqValues[k] = val - - case qvalue.QValueKindInt64: - val, ok := v.Value.(int64) - if !ok { - return nil, "", fmt.Errorf("failed to convert %v to int64", v.Value) - } - bqValues[k] = val - - case qvalue.QValueKindBoolean: - val, ok := v.Value.(bool) - if !ok { - return nil, "", fmt.Errorf("failed to convert %v to bool", v.Value) - } - bqValues[k] = val - - case qvalue.QValueKindString: - val, ok := v.Value.(string) - if !ok { - return nil, "", fmt.Errorf("failed to convert %v to string", v.Value) - } - bqValues[k] = val - - case qvalue.QValueKindTimestamp, qvalue.QValueKindDate, qvalue.QValueKindTime: - var err error - bqValues[k], err = v.GoTimeConvert() - if err != nil { - return nil, "", fmt.Errorf("failed to convert parse %v into time.Time", v) - } - - case qvalue.QValueKindNumeric: - val, ok := v.Value.(*big.Rat) - if !ok { - return nil, "", fmt.Errorf("failed to convert %v to *big.Rat", v.Value) - } - - bqValues[k] = RatToBigQueryNumeric(val) - - case qvalue.QValueKindBytes, qvalue.QValueKindBit: - val, ok := v.Value.([]byte) - if !ok { - return nil, "", fmt.Errorf("failed to convert %v to []byte", v.Value) - } - bqValues[k] = val - - case qvalue.QValueKindUUID: - val, ok := v.Value.([16]byte) - if !ok { - return nil, "", fmt.Errorf("failed to convert %v to string", v.Value) - } - uuidVal := uuid.UUID(val) - bqValues[k] = uuidVal.String() - - case qvalue.QValueKindJSON: - val, ok := v.Value.(string) - if !ok { - return nil, "", fmt.Errorf("failed to convert %v to string", v.Value) - } - bqValues[k] = val - - case qvalue.QValueKindArrayFloat32: - val, ok := v.Value.([]float32) - if !ok { - return nil, "", fmt.Errorf("failed to convert %v to []float32", v.Value) - } - bqValues[k] = val - - case qvalue.QValueKindArrayFloat64: - val, ok := v.Value.([]float64) - if !ok { - return nil, "", fmt.Errorf("failed to convert %v to []float64", v.Value) - } - bqValues[k] = val - - case qvalue.QValueKindArrayInt32: - val, ok := v.Value.([]int32) - if !ok { - return nil, "", fmt.Errorf("failed to convert %v to []int32", v.Value) - } - bqValues[k] = val - - case qvalue.QValueKindArrayInt64: - val, ok := v.Value.([]int64) - if !ok { - return nil, "", fmt.Errorf("failed to convert %v to []int64", v.Value) - } - bqValues[k] = val - - case qvalue.QValueKindArrayString: - val, ok := v.Value.([]string) - if !ok { - return nil, "", fmt.Errorf("failed to convert %v to []string", v.Value) - } - bqValues[k] = val - - default: - // Skip invalid QValueKind, but log the type for debugging - fmt.Printf("[bigquery] Invalid QValueKind: %v\n", v.Kind) - } - } - - // add partition id to the map - bqValues["PartitionID"] = q.PartitionID - - // add run id to the map - bqValues["RunID"] = q.RunID - - // log the bigquery values - // fmt.Printf("BigQuery Values: %v\n", bqValues) - - return bqValues, "", nil -} diff --git a/flow/workflows/snapshot_flow.go b/flow/workflows/snapshot_flow.go index d514a16646..8765bf7f6c 100644 --- a/flow/workflows/snapshot_flow.go +++ b/flow/workflows/snapshot_flow.go @@ -187,7 +187,6 @@ func (s *SnapshotFlowExecution) cloneTable( return nil } -// startChildQrepWorkflow starts a child workflow for query based replication. func (s *SnapshotFlowExecution) cloneTables( ctx workflow.Context, slotInfo *protos.SetupReplicationOutput, @@ -196,8 +195,7 @@ func (s *SnapshotFlowExecution) cloneTables( slog.Info(fmt.Sprintf("cloning tables for slot name %s and snapshotName %s", slotInfo.SlotName, slotInfo.SnapshotName)) - numTables := len(s.config.TableMappings) - boundSelector := concurrency.NewBoundSelector(maxParallelClones, numTables, ctx) + boundSelector := concurrency.NewBoundSelector(maxParallelClones, ctx) for _, v := range s.config.TableMappings { source := v.SourceTableIdentifier From 49b152e85b3e6f46a129973b3993c51e67d30731 Mon Sep 17 00:00:00 2001 From: pankaj-peerdb <149565017+pankaj-peerdb@users.noreply.github.com> Date: Mon, 18 Dec 2023 18:46:09 +0530 Subject: [PATCH 2/6] Improve loading: peers page (#840) Convert /peers page to client components, so that we dont have to do a round trip on every page visit. Converting it to client side rendering, caches the page once it is loaded and we can load data via api. When data is loading we show the loader. We also cache the data(via swr) and refresh the data in background. --- ui/app/peers/page.tsx | 32 ++++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/ui/app/peers/page.tsx b/ui/app/peers/page.tsx index c6baa73c0d..65182ae178 100644 --- a/ui/app/peers/page.tsx +++ b/ui/app/peers/page.tsx @@ -1,3 +1,4 @@ +'use client'; import { Button } from '@/lib/Button'; import { Icon } from '@/lib/Icon'; import { Label } from '@/lib/Label'; @@ -5,18 +6,18 @@ import { LayoutMain } from '@/lib/Layout'; import { Panel } from '@/lib/Panel'; import Link from 'next/link'; import { Header } from '../../lib/Header'; -import { getTruePeer } from '../api/peers/route'; -import prisma from '../utils/prisma'; import PeersTable from './peersTable'; export const dynamic = 'force-dynamic'; -async function fetchPeers() { - const peers = await prisma.peers.findMany({}); - return peers; -} +import { ProgressCircle } from '@/lib/ProgressCircle'; + +import useSWR from 'swr'; + +const fetcher = (...args: [any]) => fetch(...args).then((res) => res.json()); + +export default function Peers() { + const { data: peers, error, isLoading } = useSWR('/api/peers', fetcher); -export default async function Peers() { - let peers = await fetchPeers(); return ( @@ -41,10 +42,17 @@ export default async function Peers() { - getTruePeer(peer))} - /> + {isLoading && ( +
+ +
+ )} + {!isLoading && ( + peer)} + /> + )}
); From 6a8b9ce556e1c43de4e6bb70ac18e326de0689f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Philip=20Dub=C3=A9?= Date: Mon, 18 Dec 2023 15:06:43 +0000 Subject: [PATCH 3/6] chore: update dependencies (#839) Nothing semver major --- flow/go.mod | 37 +- flow/go.sum | 83 ++-- nexus/Cargo.lock | 148 +++--- nexus/peer-connections/Cargo.toml | 2 +- ui/package-lock.json | 777 +++++++++++++++--------------- ui/package.json | 26 +- 6 files changed, 547 insertions(+), 526 deletions(-) diff --git a/flow/go.mod b/flow/go.mod index 5dcb66e440..a3575510c5 100644 --- a/flow/go.mod +++ b/flow/go.mod @@ -5,14 +5,14 @@ go 1.21 require ( cloud.google.com/go v0.111.0 cloud.google.com/go/bigquery v1.57.1 - cloud.google.com/go/storage v1.35.1 + cloud.google.com/go/storage v1.36.0 github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.4.0 github.com/Azure/azure-sdk-for-go/sdk/messaging/azeventhubs v1.0.2 github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/eventhub/armeventhub v1.2.0 - github.com/aws/aws-sdk-go v1.48.16 + github.com/aws/aws-sdk-go v1.49.4 github.com/cenkalti/backoff/v4 v4.2.1 github.com/cockroachdb/pebble v0.0.0-20231210175914-b4d301aeb46a - github.com/google/uuid v1.4.0 + github.com/google/uuid v1.5.0 github.com/grafana/pyroscope-go v1.0.4 github.com/grpc-ecosystem/grpc-gateway/v2 v2.18.1 github.com/jackc/pglogrepl v0.0.0-20231111135425-1627ab1b5780 @@ -35,9 +35,9 @@ require ( go.uber.org/atomic v1.11.0 go.uber.org/automaxprocs v1.5.3 golang.org/x/sync v0.5.0 - google.golang.org/api v0.153.0 - google.golang.org/genproto/googleapis/api v0.0.0-20231127180814-3a041ad873d4 - google.golang.org/grpc v1.59.0 + google.golang.org/api v0.154.0 + google.golang.org/genproto/googleapis/api v0.0.0-20231212172506-995d672761c0 + google.golang.org/grpc v1.60.0 google.golang.org/protobuf v1.31.0 ) @@ -49,6 +49,7 @@ require ( github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b // indirect github.com/cockroachdb/redact v1.1.5 // indirect github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 // indirect + github.com/felixge/httpsnoop v1.0.4 // indirect github.com/getsentry/sentry-go v0.25.0 // indirect github.com/go-logr/logr v1.3.0 // indirect github.com/go-logr/stdr v1.2.2 // indirect @@ -60,9 +61,11 @@ require ( github.com/prometheus/client_model v0.5.0 // indirect github.com/prometheus/common v0.45.0 // indirect github.com/prometheus/procfs v0.12.0 // indirect - github.com/rogpeppe/go-internal v1.11.0 // indirect - github.com/sirupsen/logrus v1.9.0 // indirect + github.com/rogpeppe/go-internal v1.12.0 // indirect + github.com/sirupsen/logrus v1.9.3 // indirect github.com/ysmood/gop v0.2.0 // indirect + go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.46.1 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.1 // indirect go.opentelemetry.io/otel v1.21.0 // indirect go.opentelemetry.io/otel/metric v1.21.0 // indirect go.opentelemetry.io/otel/trace v1.21.0 // indirect @@ -74,9 +77,9 @@ require ( cloud.google.com/go/iam v1.1.5 // indirect github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect github.com/99designs/keyring v1.2.2 // indirect - github.com/Azure/azure-sdk-for-go/sdk/azcore v1.9.0 // indirect + github.com/Azure/azure-sdk-for-go/sdk/azcore v1.9.1 // indirect github.com/Azure/azure-sdk-for-go/sdk/internal v1.5.1 // indirect - github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.2.0 // indirect + github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.2.1 // indirect github.com/Azure/go-amqp v1.0.2 // indirect github.com/AzureAD/microsoft-authentication-library-for-go v1.2.0 // indirect github.com/JohnCGriffin/overflow v0.0.0-20211019200055-46fa312c352c // indirect @@ -97,7 +100,7 @@ require ( github.com/aws/aws-sdk-go-v2/service/s3 v1.47.5 // indirect github.com/aws/smithy-go v1.19.0 // indirect github.com/cpuguy83/go-md2man/v2 v2.0.3 // indirect - github.com/danieljoos/wincred v1.2.0 // indirect + github.com/danieljoos/wincred v1.2.1 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/dvsekhvalnov/jose2go v1.5.0 // indirect github.com/facebookgo/clock v0.0.0-20150410010913-600d898af40a // indirect @@ -119,7 +122,7 @@ require ( github.com/google/s2a-go v0.1.7 // indirect github.com/googleapis/enterprise-certificate-proxy v0.3.2 // indirect github.com/googleapis/gax-go/v2 v2.12.0 // indirect - github.com/grafana/pyroscope-go/godeltaprof v0.1.5 // indirect + github.com/grafana/pyroscope-go/godeltaprof v0.1.6 // indirect github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 // indirect github.com/grpc-ecosystem/grpc-gateway v1.16.0 // indirect github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c // indirect @@ -141,11 +144,11 @@ require ( github.com/robfig/cron v1.2.0 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect github.com/stretchr/objx v0.5.1 // indirect - github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 // indirect + github.com/xrash/smetrics v0.0.0-20231213231151-1d8dd44e695e // indirect github.com/zeebo/xxh3 v1.0.2 // indirect go.opencensus.io v0.24.0 // indirect golang.org/x/crypto v0.16.0 - golang.org/x/exp v0.0.0-20231206192017-f3f8817b8deb + golang.org/x/exp v0.0.0-20231214170342-aacd6d4b4611 golang.org/x/mod v0.14.0 // indirect golang.org/x/net v0.19.0 // indirect golang.org/x/oauth2 v0.15.0 // indirect @@ -153,10 +156,10 @@ require ( golang.org/x/term v0.15.0 // indirect golang.org/x/text v0.14.0 // indirect golang.org/x/time v0.5.0 // indirect - golang.org/x/tools v0.16.0 // indirect + golang.org/x/tools v0.16.1 // indirect golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 // indirect google.golang.org/appengine v1.6.8 // indirect - google.golang.org/genproto v0.0.0-20231127180814-3a041ad873d4 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20231127180814-3a041ad873d4 // indirect + google.golang.org/genproto v0.0.0-20231212172506-995d672761c0 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20231212172506-995d672761c0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/flow/go.sum b/flow/go.sum index c2145c93e2..cb1247fe0c 100644 --- a/flow/go.sum +++ b/flow/go.sum @@ -14,14 +14,14 @@ cloud.google.com/go/iam v1.1.5 h1:1jTsCu4bcsNsE4iiqNT5SHwrDRCfRmIaaaVFhRveTJI= cloud.google.com/go/iam v1.1.5/go.mod h1:rB6P/Ic3mykPbFio+vo7403drjlgvoWfYpJhMXEbzv8= cloud.google.com/go/longrunning v0.5.4 h1:w8xEcbZodnA2BbW6sVirkkoC+1gP8wS57EUUgGS0GVg= cloud.google.com/go/longrunning v0.5.4/go.mod h1:zqNVncI0BOP8ST6XQD1+VcvuShMmq7+xFSzOL++V0dI= -cloud.google.com/go/storage v1.35.1 h1:B59ahL//eDfx2IIKFBeT5Atm9wnNmj3+8xG/W4WB//w= -cloud.google.com/go/storage v1.35.1/go.mod h1:M6M/3V/D3KpzMTJyPOR/HU6n2Si5QdaXYEsng2xgOs8= +cloud.google.com/go/storage v1.36.0 h1:P0mOkAcaJxhCTvAkMhxMfrTKiNcub4YmmPBtlhAyTr8= +cloud.google.com/go/storage v1.36.0/go.mod h1:M6M/3V/D3KpzMTJyPOR/HU6n2Si5QdaXYEsng2xgOs8= github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 h1:/vQbFIOMbk2FiG/kXiLl8BRyzTWDw7gX/Hz7Dd5eDMs= github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4/go.mod h1:hN7oaIRCjzsZ2dE+yG5k+rsdt3qcwykqK6HVGcKwsw4= github.com/99designs/keyring v1.2.2 h1:pZd3neh/EmUzWONb35LxQfvuY7kiSXAq3HQd97+XBn0= github.com/99designs/keyring v1.2.2/go.mod h1:wes/FrByc8j7lFOAGLGSNEg8f/PaI3cgTBqhFkHUrPk= -github.com/Azure/azure-sdk-for-go/sdk/azcore v1.9.0 h1:fb8kj/Dh4CSwgsOzHeZY4Xh68cFVbzXx+ONXGMY//4w= -github.com/Azure/azure-sdk-for-go/sdk/azcore v1.9.0/go.mod h1:uReU2sSxZExRPBAg3qKzmAucSi51+SP1OhohieR821Q= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.9.1 h1:lGlwhPtrX6EVml1hO0ivjkUxsSyl4dsiw9qcA1k/3IQ= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.9.1/go.mod h1:RKUqNu35KJYcVG/fqTRqmuXJZYNhYkBrnC/hX7yGbTA= github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.4.0 h1:BMAjVKJM0U/CYF27gA0ZMmXGkOcvfFtD0oHVZ1TIPRI= github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.4.0/go.mod h1:1fXstnBMas5kzG+S3q8UoJcmyU6nUeunJcMDHcRYHhs= github.com/Azure/azure-sdk-for-go/sdk/internal v1.5.1 h1:6oNBlSdi1QqM1PNW7FPA6xOGA5UNsXnkaYZz9vdPGhA= @@ -34,14 +34,14 @@ github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/internal/v2 v2.0.0 h1:PTFG github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/internal/v2 v2.0.0/go.mod h1:LRr2FzBTQlONPPa5HREE5+RjSCTXl7BwOvYOaWTqCaI= github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources v1.1.1 h1:7CBQ+Ei8SP2c6ydQTGCCrS35bDxgTMfoP2miAwK++OU= github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources v1.1.1/go.mod h1:c/wcGeGx5FUPbM/JltUYHZcKmigwyVLJlDq+4HdtXaw= -github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/storage/armstorage v1.2.0 h1:Ma67P/GGprNwsslzEH6+Kb8nybI8jpDTm4Wmzu2ReK8= -github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/storage/armstorage v1.2.0/go.mod h1:c+Lifp3EDEamAkPVzMooRNOK6CZjNSdEnf1A7jsI9u4= +github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/storage/armstorage v1.5.0 h1:AifHbc4mg0x9zW52WOpKbsHaDKuRhlI7TVl47thgQ70= +github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/storage/armstorage v1.5.0/go.mod h1:T5RfihdXtBDxt1Ch2wobif3TvzTdumDy29kahv6AV9A= github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azkeys v1.0.0 h1:yfJe15aSwEQ6Oo6J+gdfdulPNoZ3TEhmbhLIoxZcA+U= github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azkeys v1.0.0/go.mod h1:Q28U+75mpCaSCDowNEmhIo/rmgdkqmkmzI7N6TGR4UY= github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/internal v0.8.0 h1:T028gtTPiYt/RMUfs8nVsAL7FDQrfLlrm/NnRG/zcC4= github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/internal v0.8.0/go.mod h1:cw4zVQgBby0Z5f2v0itn6se2dDP17nTjbZFXW5uPyHA= -github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.2.0 h1:gggzg0SUMs6SQbEw+3LoSsYf9YMjkupeAnHMX8O9mmY= -github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.2.0/go.mod h1:+6KLcKIVgxoBDMqMO/Nvy7bZ9a0nbU3I1DtFQK3YvB4= +github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.2.1 h1:AMf7YbZOZIW5b66cXNHMWWT/zkjhz5+a+k/3x40EO7E= +github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.2.1/go.mod h1:uwfk06ZBcvL/g4VHNjurPfVln9NMbsk2XIZxJ+hu81k= github.com/Azure/go-amqp v1.0.2 h1:zHCHId+kKC7fO8IkwyZJnWMvtRXhYC0VJtD0GYkHc6M= github.com/Azure/go-amqp v1.0.2/go.mod h1:vZAogwdrkbyK3Mla8m/CxSc/aKdnTZ4IbPxl51Y5WZE= github.com/AzureAD/microsoft-authentication-library-for-go v1.2.0 h1:hVeq+yCyUi+MsoO/CU95yqCIcdzra5ovzk8Q2BBpV2M= @@ -62,8 +62,8 @@ github.com/apache/arrow/go/v12 v12.0.1 h1:JsR2+hzYYjgSUkBSaahpqCetqZMr76djX80fF/ github.com/apache/arrow/go/v12 v12.0.1/go.mod h1:weuTY7JvTG/HDPtMQxEUp7pU73vkLWMLpY67QwZ/WWw= github.com/apache/thrift v0.19.0 h1:sOqkWPzMj7w6XaYbJQG7m4sGqVolaW/0D28Ln7yPzMk= github.com/apache/thrift v0.19.0/go.mod h1:SUALL216IiaOw2Oy+5Vs9lboJ/t9g40C+G07Dc0QC1I= -github.com/aws/aws-sdk-go v1.48.16 h1:mcj2/9J/MJ55Dov+ocMevhR8Jv6jW/fAxbrn4a1JFc8= -github.com/aws/aws-sdk-go v1.48.16/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk= +github.com/aws/aws-sdk-go v1.49.4 h1:qiXsqEeLLhdLgUIyfr5ot+N/dGPWALmtM1SetRmbUlY= +github.com/aws/aws-sdk-go v1.49.4/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk= github.com/aws/aws-sdk-go-v2 v1.24.0 h1:890+mqQ+hTpNuw0gGP6/4akolQkSToDJgHfQE7AwGuk= github.com/aws/aws-sdk-go-v2 v1.24.0/go.mod h1:LNh45Br1YAkEKaAqvmE1m8FUx6a5b/V0oAKV7of29b4= github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.5.4 h1:OCs21ST2LrepDfD3lwlQiOqIGp6JiEUqG84GzTDoyJs= @@ -112,6 +112,8 @@ github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/cncf/xds/go v0.0.0-20230607035331-e9ce68804cb4 h1:/inchEIKaYC1Akx+H+gqO04wryn5h75LSazbRlnya1k= +github.com/cncf/xds/go v0.0.0-20230607035331-e9ce68804cb4/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f h1:otljaYPt5hWxV3MUfO5dFPFiOXg9CyG5/kCfayTqsJ4= github.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f/go.mod h1:a9RdTaap04u637JoCzcUoIcDmvwSUtcUFtT/C3kJlTU= github.com/cockroachdb/errors v1.11.1 h1:xSEW75zKaKCWzR3OfxXUxgrk/NtT4G1MiOv5lWZazG8= @@ -129,8 +131,8 @@ github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06/go.mod h1: github.com/cpuguy83/go-md2man/v2 v2.0.3 h1:qMCsGGgs+MAzDFyp9LpAe1Lqy/fY/qCovCm0qnXZOBM= github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/danieljoos/wincred v1.2.0 h1:ozqKHaLK0W/ii4KVbbvluM91W2H3Sh0BncbUNPS7jLE= -github.com/danieljoos/wincred v1.2.0/go.mod h1:FzQLLMKBFdvu+osBrnFODiv32YGwCfx0SkRa/eYHgec= +github.com/danieljoos/wincred v1.2.1 h1:dl9cBrupW8+r5250DYkYxocLeZ1Y4vB1kxgtjxw8GQs= +github.com/danieljoos/wincred v1.2.1/go.mod h1:uGaFL9fDn3OLTvzCGulzE+SzjEe5NGlh5FdCcyfPwps= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -142,8 +144,12 @@ github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymF github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/envoyproxy/protoc-gen-validate v1.0.2 h1:QkIBuU5k+x7/QXPvPPnWXWlCdaBFApVqftFV6k087DA= +github.com/envoyproxy/protoc-gen-validate v1.0.2/go.mod h1:GpiZQP3dDbg4JouG/NNS7QWXpgx6x8QiMKdmN72jogE= github.com/facebookgo/clock v0.0.0-20150410010913-600d898af40a h1:yDWHCSQ40h88yih2JAcL6Ls/kVkSE8GFACTGVnMPruw= github.com/facebookgo/clock v0.0.0-20150410010913-600d898af40a/go.mod h1:7Ga40egUymuWXxAe151lTNnCv97MddSOVsjpPPkityA= +github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= +github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/form3tech-oss/jwt-go v3.2.5+incompatible h1:/l4kBbb4/vGSsdtB5nUe8L7B9mImVMaBPw9L/0TBHU8= github.com/form3tech-oss/jwt-go v3.2.5+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= @@ -223,16 +229,16 @@ github.com/google/s2a-go v0.1.7 h1:60BLSyTrOV4/haCDW4zb1guZItoSq8foHCXrAnjBo/o= github.com/google/s2a-go v0.1.7/go.mod h1:50CgR4k1jNlWBu4UfS4AcfhVe1r6pdZPygJ3R8F0Qdw= github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.4.0 h1:MtMxsa51/r9yyhkyLsVeVt0B+BGQZzpQiTQ4eHZ8bc4= -github.com/google/uuid v1.4.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.5.0 h1:1p67kYwdtXjb0gL0BPiP1Av9wiZPo5A8z2cWkTZ+eyU= +github.com/google/uuid v1.5.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/enterprise-certificate-proxy v0.3.2 h1:Vie5ybvEvT75RniqhfFxPRy3Bf7vr3h0cechB90XaQs= github.com/googleapis/enterprise-certificate-proxy v0.3.2/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0= github.com/googleapis/gax-go/v2 v2.12.0 h1:A+gCJKdRfqXkr+BIRGtZLibNXf0m1f9E4HG56etFpas= github.com/googleapis/gax-go/v2 v2.12.0/go.mod h1:y+aIqrI5eb1YGMVJfuV3185Ts/D7qKpsEkdD5+I6QGU= github.com/grafana/pyroscope-go v1.0.4 h1:oyQX0BOkL+iARXzHuCdIF5TQ7/sRSel1YFViMHC7Bm0= github.com/grafana/pyroscope-go v1.0.4/go.mod h1:0d7ftwSMBV/Awm7CCiYmHQEG8Y44Ma3YSjt+nWcWztY= -github.com/grafana/pyroscope-go/godeltaprof v0.1.5 h1:gkFVqihFRL1Nro2FCC0u6mW47jclef96Zu8I/ykq+4E= -github.com/grafana/pyroscope-go/godeltaprof v0.1.5/go.mod h1:1HSPtjU8vLG0jE9JrTdzjgFqdJ/VgN7fvxBNq3luJko= +github.com/grafana/pyroscope-go/godeltaprof v0.1.6 h1:nEdZ8louGAplSvIJi1HVp7kWvFvdiiYg3COLlTwJiFo= +github.com/grafana/pyroscope-go/godeltaprof v0.1.6/go.mod h1:Tk376Nbldo4Cha9RgiU7ik8WKFkNpfds98aUzS8omLE= github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 h1:UH//fgunKIs4JdUbpDl1VZCDaL56wXCB/5+wF6uHfaI= github.com/grpc-ecosystem/go-grpc-middleware v1.4.0/go.mod h1:g5qyo/la0ALbONm6Vbp88Yd8NsDy6rZz+RcrMPxvld8= github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo= @@ -270,6 +276,7 @@ github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/asmfmt v1.3.2 h1:4Ri7ox3EwapiOjCki+hw14RyKk201CN4rzyCJRFLpK4= github.com/klauspost/asmfmt v1.3.2/go.mod h1:AG8TuvYojzulgDAMCnYn50l/5QV3Bs/tp6j0HLHbNSE= +github.com/klauspost/compress v1.17.3/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM= github.com/klauspost/compress v1.17.4 h1:Ej5ixsIri7BrIjBkRZLTo6ghwrEtHFk7ijlczPW4fZ4= github.com/klauspost/compress v1.17.4/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM= github.com/klauspost/cpuid/v2 v2.2.6 h1:ndNyv040zDGIDh8thGkXYjnFtiN02M1PVVF+JE/48xc= @@ -337,13 +344,13 @@ github.com/robfig/cron v1.2.0/go.mod h1:JGuDeoQd7Z6yL4zQhZ3OPEVHB7fL6Ka6skscFHfm github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= -github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M= -github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA= +github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8= +github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= -github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0= -github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= +github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= +github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/snowflakedb/gosnowflake v1.7.1 h1:c9JjyjjDlvxex9ud71TwKL+Wu54Vfx+39h4DAwbIdqU= github.com/snowflakedb/gosnowflake v1.7.1/go.mod h1:JI3eRZL8CpimPek6CJO0aTbDQjDGOt7Rxv9A/ti4f5c= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= @@ -368,8 +375,8 @@ github.com/twpayne/go-geos v0.14.0 h1:yFPDj6EZq2rL74eOSn40tZA8zOnv6sRFFdtDWR7KpQ github.com/twpayne/go-geos v0.14.0/go.mod h1:K6llLdkCFVIrUgGFs5V/DRS1jpwAXq8xxm2uwtlFT40= github.com/urfave/cli/v2 v2.26.0 h1:3f3AMg3HpThFNT4I++TKOejZO8yU55t3JnnSr4S4QEI= github.com/urfave/cli/v2 v2.26.0/go.mod h1:8qnjx1vcq5s2/wpsqoZFndg2CE5tNFyrTvS6SinrnYQ= -github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 h1:bAn7/zixMGCfxrRTfdpNzjtPYqr8smhKouy9mxVdGPU= -github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673/go.mod h1:N3UwUGtsrSj3ccvlPHLoLsHnpR27oXr4ZE984MbSER8= +github.com/xrash/smetrics v0.0.0-20231213231151-1d8dd44e695e h1:+SOyEddqYF09QP7vr7CgJ1eti3pY9Fn3LHO1M1r/0sI= +github.com/xrash/smetrics v0.0.0-20231213231151-1d8dd44e695e/go.mod h1:N3UwUGtsrSj3ccvlPHLoLsHnpR27oXr4ZE984MbSER8= github.com/youmark/pkcs8 v0.0.0-20201027041543-1326539a0a0a h1:fZHgsYlfvtyqToslyjUt3VOPF4J7aK/3MPcK7xp3PDk= github.com/youmark/pkcs8 v0.0.0-20201027041543-1326539a0a0a/go.mod h1:ul22v+Nro/R083muKhosV54bj5niojjWZvU8xrevuH4= github.com/ysmood/gop v0.2.0 h1:+tFrG0TWPxT6p9ZaZs+VY+opCvHU8/3Fk6BaNv6kqKg= @@ -386,6 +393,10 @@ github.com/zeebo/xxh3 v1.0.2 h1:xZmwmqxHZA8AI603jOQ0tMqmBr9lPeFwGg6d+xy9DC0= github.com/zeebo/xxh3 v1.0.2/go.mod h1:5NWz9Sef7zIDm2JHfFlcQvNekmcEl9ekUZQQKCYaDcA= go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.46.1 h1:SpGay3w+nEwMpfVnbqOLH5gY52/foP8RE8UzTZ1pdSE= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.46.1/go.mod h1:4UoMYEZOC0yN/sPGH76KPkkU7zgiEWYWL9vwmbnTJPE= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.1 h1:aFJWCqJMNjENlcleuuOkGAPH82y0yULBScfXcIEdS24= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.1/go.mod h1:sEGXWArGqc3tVa+ekntsN65DmVbVeW+7lTKTjZF3/Fo= go.opentelemetry.io/otel v1.21.0 h1:hzLeKBZEL7Okw2mGzZ0cc4k/A7Fta0uoPgaJCr8fsFc= go.opentelemetry.io/otel v1.21.0/go.mod h1:QZzNPQPm1zLX4gZK4cMi+71eaorMSGT3A4znnUvNNEo= go.opentelemetry.io/otel/metric v1.21.0 h1:tlYWfeo+Bocx5kLEloTjbcDwBuELRrIFxwdQ36PlJu4= @@ -415,8 +426,8 @@ golang.org/x/crypto v0.0.0-20220829220503-c86fa9a7ed90/go.mod h1:IxCIyHEi3zRg3s0 golang.org/x/crypto v0.16.0 h1:mMMrFzRSCF0GvB7Ne27XVtVAaXLrPmgPC7/v0tkwHaY= golang.org/x/crypto v0.16.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20231206192017-f3f8817b8deb h1:c0vyKkb6yr3KR7jEfJaOSv4lG7xPkbN6r52aJz1d8a8= -golang.org/x/exp v0.0.0-20231206192017-f3f8817b8deb/go.mod h1:iRJReGqOEeBhDZGkGbynYwcHlctCvnjTYIamk7uXpHI= +golang.org/x/exp v0.0.0-20231214170342-aacd6d4b4611 h1:qCEDpW1G+vcj3Y7Fy52pEM1AWm3abj8WimGYejI3SC4= +golang.org/x/exp v0.0.0-20231214170342-aacd6d4b4611/go.mod h1:iRJReGqOEeBhDZGkGbynYwcHlctCvnjTYIamk7uXpHI= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= @@ -501,8 +512,8 @@ golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roY golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.16.0 h1:GO788SKMRunPIBCXiQyo2AaexLstOrVhuAL5YwsckQM= -golang.org/x/tools v0.16.0/go.mod h1:kYVVN6I1mBNoB1OX+noeBjbRk4IUEPa7JJ+TJMEooJ0= +golang.org/x/tools v0.16.1 h1:TLyB3WofjdOEepBHAU20JdNC1Zbg87elYofWYAY5oZA= +golang.org/x/tools v0.16.1/go.mod h1:kYVVN6I1mBNoB1OX+noeBjbRk4IUEPa7JJ+TJMEooJ0= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -511,8 +522,8 @@ golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 h1:+cNy6SZtPcJQH3LJVLOSm golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028/go.mod h1:NDW/Ps6MPRej6fsCIbMTohpP40sJ/P/vI1MoTEGwX90= gonum.org/v1/gonum v0.11.0 h1:f1IJhK4Km5tBJmaiJXtk/PkL4cdVX6J+tGiM187uT5E= gonum.org/v1/gonum v0.11.0/go.mod h1:fSG4YDCxxUZQJ7rKsQrj0gMOg00Il0Z96/qMA4bVQhA= -google.golang.org/api v0.153.0 h1:N1AwGhielyKFaUqH07/ZSIQR3uNPcV7NVw0vj+j4iR4= -google.golang.org/api v0.153.0/go.mod h1:3qNJX5eOmhiWYc67jRA/3GsDw97UFb5ivv7Y2PrriAY= +google.golang.org/api v0.154.0 h1:X7QkVKZBskztmpPKWQXgjJRPA2dJYrL6r+sYPRLj050= +google.golang.org/api v0.154.0/go.mod h1:qhSMkM85hgqiokIYsrRyKxrjfBeIhgl4Z2JmeRkYylc= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM= @@ -523,12 +534,12 @@ google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98 google.golang.org/genproto v0.0.0-20200423170343-7949de9c1215/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20231127180814-3a041ad873d4 h1:W12Pwm4urIbRdGhMEg2NM9O3TWKjNcxQhs46V0ypf/k= -google.golang.org/genproto v0.0.0-20231127180814-3a041ad873d4/go.mod h1:5RBcpGRxr25RbDzY5w+dmaqpSEvl8Gwl1x2CICf60ic= -google.golang.org/genproto/googleapis/api v0.0.0-20231127180814-3a041ad873d4 h1:ZcOkrmX74HbKFYnpPY8Qsw93fC29TbJXspYKaBkSXDQ= -google.golang.org/genproto/googleapis/api v0.0.0-20231127180814-3a041ad873d4/go.mod h1:k2dtGpRrbsSyKcNPKKI5sstZkrNCZwpU/ns96JoHbGg= -google.golang.org/genproto/googleapis/rpc v0.0.0-20231127180814-3a041ad873d4 h1:DC7wcm+i+P1rN3Ff07vL+OndGg5OhNddHyTA+ocPqYE= -google.golang.org/genproto/googleapis/rpc v0.0.0-20231127180814-3a041ad873d4/go.mod h1:eJVxU6o+4G1PSczBr85xmyvSNYAKvAYgkub40YGomFM= +google.golang.org/genproto v0.0.0-20231212172506-995d672761c0 h1:YJ5pD9rF8o9Qtta0Cmy9rdBwkSjrTCT6XTiUQVOtIos= +google.golang.org/genproto v0.0.0-20231212172506-995d672761c0/go.mod h1:l/k7rMz0vFTBPy+tFSGvXEd3z+BcoG1k7EHbqm+YBsY= +google.golang.org/genproto/googleapis/api v0.0.0-20231212172506-995d672761c0 h1:s1w3X6gQxwrLEpxnLd/qXTVLgQE2yXwaOaoa6IlY/+o= +google.golang.org/genproto/googleapis/api v0.0.0-20231212172506-995d672761c0/go.mod h1:CAny0tYF+0/9rmDB9fahA9YLzX3+AEVl1qXbv5hhj6c= +google.golang.org/genproto/googleapis/rpc v0.0.0-20231212172506-995d672761c0 h1:/jFB8jK5R3Sq3i/lmeZO0cATSzFfZaJq1J2Euan3XKU= +google.golang.org/genproto/googleapis/rpc v0.0.0-20231212172506-995d672761c0/go.mod h1:FUoWkonphQm3RhTS+kOEhF8h0iDpm4tdXolVCeZ9KKA= google.golang.org/grpc v1.12.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= @@ -537,8 +548,8 @@ google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8 google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= -google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk= -google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98= +google.golang.org/grpc v1.60.0 h1:6FQAR0kM31P6MRdeluor2w2gPaS4SVNrD/DNTxrQ15k= +google.golang.org/grpc v1.60.0/go.mod h1:OlCHIeLYqSSsLi6i49B5QGdzaMZK9+M7LXN2FKz4eGM= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= diff --git a/nexus/Cargo.lock b/nexus/Cargo.lock index 64f43557dc..3c243f2958 100644 --- a/nexus/Cargo.lock +++ b/nexus/Cargo.lock @@ -170,7 +170,7 @@ checksum = "5fd55a5ba1179988837d24ab4c7cc8ed6efdeff578ede0416b4225a5fca35bd0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.40", + "syn 2.0.41", ] [[package]] @@ -192,7 +192,7 @@ checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" dependencies = [ "proc-macro2", "quote", - "syn 2.0.40", + "syn 2.0.41", ] [[package]] @@ -203,7 +203,7 @@ checksum = "a66537f1bb974b254c98ed142ff995236e81b9d0fe4db0575f46612cb15eb0f9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.40", + "syn 2.0.41", ] [[package]] @@ -344,9 +344,9 @@ dependencies = [ [[package]] name = "borsh" -version = "1.2.1" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9897ef0f1bd2362169de6d7e436ea2237dc1085d7d1e4db75f4be34d86f309d1" +checksum = "26d4d6dafc1a3bb54687538972158f07b2c948bc57d5890df22c0739098b3028" dependencies = [ "borsh-derive", "cfg_aliases", @@ -354,15 +354,15 @@ dependencies = [ [[package]] name = "borsh-derive" -version = "1.2.1" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "478b41ff04256c5c8330f3dfdaaae2a5cc976a8e75088bafa4625b0d0208de8c" +checksum = "bf4918709cc4dd777ad2b6303ed03cb37f3ca0ccede8c1b0d28ac6db8f4710e0" dependencies = [ "once_cell", "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.40", + "syn 2.0.41", "syn_derive", ] @@ -436,9 +436,9 @@ dependencies = [ [[package]] name = "cargo_toml" -version = "0.17.1" +version = "0.17.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d1ece59890e746567b467253aea0adbe8a21784d0b025d8a306f66c391c2957" +checksum = "8a969e13a7589e9e3e4207e153bae624ade2b5622fb4684a4923b23ec3d57719" dependencies = [ "serde", "toml 0.8.2", @@ -548,7 +548,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.40", + "syn 2.0.41", ] [[package]] @@ -602,9 +602,9 @@ dependencies = [ [[package]] name = "const-oid" -version = "0.9.5" +version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28c122c3980598d243d63d9a704629a2d748d101f278052ff068be5a4423ab6f" +checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" [[package]] name = "core-foundation" @@ -642,9 +642,9 @@ dependencies = [ [[package]] name = "crossbeam-channel" -version = "0.5.8" +version = "0.5.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200" +checksum = "14c3242926edf34aec4ac3a77108ad4854bffaa2e4ddc1824124ce59231302d5" dependencies = [ "cfg-if", "crossbeam-utils", @@ -652,9 +652,9 @@ dependencies = [ [[package]] name = "crossbeam-deque" -version = "0.8.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef" +checksum = "fca89a0e215bab21874660c67903c5f143333cab1da83d041c7ded6053774751" dependencies = [ "cfg-if", "crossbeam-epoch", @@ -663,22 +663,21 @@ dependencies = [ [[package]] name = "crossbeam-epoch" -version = "0.9.15" +version = "0.9.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7" +checksum = "2d2fe95351b870527a5d09bf563ed3c97c0cffb87cf1c78a591bf48bb218d9aa" dependencies = [ "autocfg", "cfg-if", "crossbeam-utils", "memoffset", - "scopeguard", ] [[package]] name = "crossbeam-utils" -version = "0.8.16" +version = "0.8.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294" +checksum = "c06d96137f14f244c37f989d9fff8f95e6c18b918e71f36638f8c49112e4c78f" dependencies = [ "cfg-if", ] @@ -720,9 +719,9 @@ dependencies = [ [[package]] name = "deadpool-postgres" -version = "0.11.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40b75ba49590d27f677d3bebaf76cd15889ca8b308bc7ba99bfa25f1d7269c13" +checksum = "bda39fa1cfff190d8924d447ad04fd22772c250438ca5ce1dfb3c80621c05aaa" dependencies = [ "deadpool", "tokio", @@ -768,7 +767,7 @@ checksum = "d150dea618e920167e5973d70ae6ece4385b7164e0d799fe7c122dd0a5d912ad" dependencies = [ "proc-macro2", "quote", - "syn 2.0.40", + "syn 2.0.41", ] [[package]] @@ -1000,7 +999,7 @@ checksum = "53b153fd91e4b0147f4aced87be237c98248656bb01050b96bf3ee89220a8ddb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.40", + "syn 2.0.41", ] [[package]] @@ -1188,11 +1187,11 @@ dependencies = [ [[package]] name = "home" -version = "0.5.5" +version = "0.5.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5444c27eef6923071f7ebcc33e3444508466a76f7a2b93da00ed6e19f30c1ddb" +checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" dependencies = [ - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] @@ -1237,9 +1236,9 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" [[package]] name = "hyper" -version = "0.14.27" +version = "0.14.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffb1cfd654a8219eaef89881fdb3bb3b1cdc5fa75ded05d6933b2b382e395468" +checksum = "bf96e135eb83a2a8ddf766e426a841d8ddd7449d5f00d34ea02b41d2f19eef80" dependencies = [ "bytes", "futures-channel", @@ -1252,7 +1251,7 @@ dependencies = [ "httpdate", "itoa", "pin-project-lite", - "socket2 0.4.10", + "socket2", "tokio", "tower-service", "tracing", @@ -1729,7 +1728,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.40", + "syn 2.0.41", ] [[package]] @@ -2009,9 +2008,9 @@ dependencies = [ [[package]] name = "pem" -version = "3.0.2" +version = "3.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3163d2912b7c3b52d651a055f2c7eec9ba5cd22d26ef75b8dd3a59980b185923" +checksum = "1b8fcc794035347fb64beda2d3b462595dd2753e3f268d89c5aae77e8cf2c310" dependencies = [ "base64 0.21.5", "serde", @@ -2112,7 +2111,7 @@ checksum = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405" dependencies = [ "proc-macro2", "quote", - "syn 2.0.40", + "syn 2.0.41", ] [[package]] @@ -2275,7 +2274,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ae005bd773ab59b4725093fd7df83fd7892f7d8eafb48dbd7de6e024e4215f9d" dependencies = [ "proc-macro2", - "syn 2.0.40", + "syn 2.0.41", ] [[package]] @@ -2348,7 +2347,7 @@ dependencies = [ "prost", "prost-types", "regex", - "syn 2.0.40", + "syn 2.0.41", "tempfile", "which", ] @@ -2363,7 +2362,7 @@ dependencies = [ "itertools 0.11.0", "proc-macro2", "quote", - "syn 2.0.40", + "syn 2.0.41", ] [[package]] @@ -2533,7 +2532,7 @@ dependencies = [ "quote", "refinery-core", "regex", - "syn 2.0.40", + "syn 2.0.41", ] [[package]] @@ -2650,12 +2649,13 @@ dependencies = [ [[package]] name = "rkyv" -version = "0.7.42" +version = "0.7.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0200c8230b013893c0b2d6213d6ec64ed2b9be2e0e016682b7224ff82cff5c58" +checksum = "527a97cdfef66f65998b5f3b637c26f5a5ec09cc52a3f9932313ac645f4190f5" dependencies = [ "bitvec", "bytecheck", + "bytes", "hashbrown 0.12.3", "ptr_meta", "rend", @@ -2667,9 +2667,9 @@ dependencies = [ [[package]] name = "rkyv_derive" -version = "0.7.42" +version = "0.7.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2e06b915b5c230a17d7a736d1e2e63ee753c256a8614ef3f5147b13a4f5541d" +checksum = "b5c462a1328c8e67e4d6dbad1eb0355dd43e8ab432c6e227a43657f16ade5033" dependencies = [ "proc-macro2", "quote", @@ -2937,7 +2937,7 @@ checksum = "43576ca501357b9b071ac53cdc7da8ef0cbd9493d8df094cd821777ea6e894d3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.40", + "syn 2.0.41", ] [[package]] @@ -3111,16 +3111,6 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "socket2" -version = "0.4.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d" -dependencies = [ - "libc", - "winapi", -] - [[package]] name = "socket2" version = "0.5.5" @@ -3169,7 +3159,7 @@ source = "git+https://github.com/peerdb-io/sqlparser-rs.git#e2a651ace85013fca48b dependencies = [ "proc-macro2", "quote", - "syn 2.0.40", + "syn 2.0.41", ] [[package]] @@ -3208,9 +3198,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.40" +version = "2.0.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13fa70a4ee923979ffb522cacce59d34421ebdea5625e1073c4326ef9d2dd42e" +checksum = "44c8b28c477cc3bf0e7966561e3460130e1255f7a1cf71931075f1c5e7a7e269" dependencies = [ "proc-macro2", "quote", @@ -3226,7 +3216,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.40", + "syn 2.0.41", ] [[package]] @@ -3297,22 +3287,22 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.50" +version = "1.0.51" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9a7210f5c9a7156bb50aa36aed4c95afb51df0df00713949448cf9e97d382d2" +checksum = "f11c217e1416d6f036b870f14e0413d480dbf28edbee1f877abaf0206af43bb7" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.50" +version = "1.0.51" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "266b2e40bc00e5a6c09c3584011e08b06f123c00362c92b975ba9843aaaa14b8" +checksum = "01742297787513b79cf8e29d1056ede1313e2420b7b3b15d0a768b4921f549df" dependencies = [ "proc-macro2", "quote", - "syn 2.0.40", + "syn 2.0.41", ] [[package]] @@ -3385,7 +3375,7 @@ dependencies = [ "parking_lot", "pin-project-lite", "signal-hook-registry", - "socket2 0.5.5", + "socket2", "tokio-macros", "tracing", "windows-sys 0.48.0", @@ -3409,7 +3399,7 @@ checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.40", + "syn 2.0.41", ] [[package]] @@ -3424,9 +3414,9 @@ dependencies = [ [[package]] name = "tokio-openssl" -version = "0.6.3" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08f9ffb7809f1b20c1b398d92acf4cc719874b3b2b2d9ea2f09b4a80350878a" +checksum = "6ffab79df67727f6acf57f1ff743091873c24c579b1e2ce4d8f53e47ded4d63d" dependencies = [ "futures-util", "openssl", @@ -3454,7 +3444,7 @@ dependencies = [ "postgres-protocol", "postgres-types", "rand", - "socket2 0.5.5", + "socket2", "tokio", "tokio-util", "whoami", @@ -3681,7 +3671,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.40", + "syn 2.0.41", ] [[package]] @@ -3770,9 +3760,9 @@ checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85" [[package]] name = "unsafe-libyaml" -version = "0.2.9" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f28467d3e1d3c6586d8f25fa243f544f5800fec42d97032474e17222c2b75cfa" +checksum = "ab4c90930b95a82d00dc9e9ac071b4991924390d46cbd0dfe566148667605e4b" [[package]] name = "untrusted" @@ -3914,7 +3904,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.40", + "syn 2.0.41", "wasm-bindgen-shared", ] @@ -3948,7 +3938,7 @@ checksum = "f0eb82fcb7930ae6219a7ecfd55b217f5f0893484b7a13022ebb2b2bf20b5283" dependencies = [ "proc-macro2", "quote", - "syn 2.0.40", + "syn 2.0.41", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -4171,9 +4161,9 @@ checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" [[package]] name = "winnow" -version = "0.5.27" +version = "0.5.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb877ca3232bec99a6472ed63f7241de2a250165260908b2d24c09d867907a85" +checksum = "6c830786f7720c2fd27a1a0e27a709dbd3c4d009b56d098fc742d4f4eab91fe2" dependencies = [ "memchr", ] @@ -4218,9 +4208,9 @@ dependencies = [ [[package]] name = "xattr" -version = "1.1.2" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d367426ae76bdfce3d8eaea6e94422afd6def7d46f9c89e2980309115b3c2c41" +checksum = "a7dae5072fe1f8db8f8d29059189ac175196e410e40ba42d5d4684ae2f750995" dependencies = [ "libc", "linux-raw-sys", @@ -4280,7 +4270,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.40", + "syn 2.0.41", ] [[package]] diff --git a/nexus/peer-connections/Cargo.toml b/nexus/peer-connections/Cargo.toml index d701471256..f74b1bf9b4 100644 --- a/nexus/peer-connections/Cargo.toml +++ b/nexus/peer-connections/Cargo.toml @@ -8,7 +8,7 @@ edition = "2021" [dependencies] anyhow = "1.0" chrono = { version = "0.4" } -deadpool-postgres = { version = "0.11", features = ["rt_tokio_1"] } +deadpool-postgres = { version = "0.12", features = ["rt_tokio_1"] } tokio = { version = "1", features = ["full"] } tokio-postgres = { version = "0.7.6", features = [ "with-chrono-0_4", diff --git a/ui/package-lock.json b/ui/package-lock.json index 2609bdd65d..a9ace2b05d 100644 --- a/ui/package-lock.json +++ b/ui/package-lock.json @@ -8,7 +8,7 @@ "name": "peerdb-ui", "version": "0.1.0", "dependencies": { - "@grpc/grpc-js": "^1.9.12", + "@grpc/grpc-js": "^1.9.13", "@monaco-editor/react": "^4.6.0", "@prisma/client": "^5.7.0", "@radix-ui/react-checkbox": "^1.0.4", @@ -25,15 +25,15 @@ "@radix-ui/react-toggle": "^1.0.3", "@radix-ui/react-toggle-group": "^1.0.4", "@radix-ui/react-tooltip": "^1.0.7", - "@tremor/react": "^3.11.1", - "@types/node": "^20.10.4", - "@types/react": "^18.2.43", - "@types/react-dom": "^18.2.17", + "@tremor/react": "^3.12.1", + "@types/node": "^20.10.5", + "@types/react": "^18.2.45", + "@types/react-dom": "^18.2.18", "classnames": "^2.3.2", "clsx": "^2.0.0", "long": "^5.2.3", - "lucide-react": "^0.294.0", - "material-symbols": "^0.14.2", + "lucide-react": "^0.298.0", + "material-symbols": "^0.14.3", "moment": "^2.29.4", "moment-timezone": "^0.5.43", "next": "^14.0.4", @@ -49,17 +49,17 @@ "zustand": "^4.4.7" }, "devDependencies": { - "@storybook/addon-essentials": "^7.6.4", - "@storybook/addon-interactions": "^7.6.4", - "@storybook/addon-links": "^7.6.4", + "@storybook/addon-essentials": "^7.6.5", + "@storybook/addon-interactions": "^7.6.5", + "@storybook/addon-links": "^7.6.5", "@storybook/addon-styling": "^1.3.7", "@storybook/blocks": "^7.3.0", - "@storybook/nextjs": "^7.6.4", + "@storybook/nextjs": "^7.6.5", "@storybook/react": "^7.3.0", "@storybook/testing-library": "^0.2.2", "autoprefixer": "^10.4.16", "copy-webpack-plugin": "^11.0.0", - "eslint": "^8.55.0", + "eslint": "^8.56.0", "eslint-config-next": "^14.0.4", "eslint-config-prettier": "^9.1.0", "eslint-plugin-storybook": "^0.6.15", @@ -69,7 +69,7 @@ "prettier": "^3.1.1", "prettier-plugin-organize-imports": "^3.2.4", "prisma": "^5.7.0", - "storybook": "^7.6.4", + "storybook": "^7.6.5", "string-width": "^7.0.0", "tailwindcss": "^3.3.6", "tailwindcss-animate": "^1.0.7", @@ -2861,9 +2861,9 @@ } }, "node_modules/@eslint/js": { - "version": "8.55.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.55.0.tgz", - "integrity": "sha512-qQfo2mxH5yVom1kacMtZZJFVdW+E70mqHMJvVg6WTLo+VBuQJ4TojZlfWBjK0ve5BdEeNAVxOsl/nvNMpJOaJA==", + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz", + "integrity": "sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -2936,9 +2936,9 @@ "integrity": "sha512-OfX7E2oUDYxtBvsuS4e/jSn4Q9Qb6DzgeYtsAdkPZ47znpoNsMgZw0+tVijiv3uGNR6dgNlty6r9rzIzHjtd/A==" }, "node_modules/@grpc/grpc-js": { - "version": "1.9.12", - "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.9.12.tgz", - "integrity": "sha512-Um5MBuge32TS3lAKX02PGCnFM4xPT996yLgZNb5H03pn6NyJ4Iwn5YcPq6Jj9yxGRk7WOgaZFtVRH5iTdYBeUg==", + "version": "1.9.13", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.9.13.tgz", + "integrity": "sha512-OEZZu9v9AA+7/tghMDE8o5DAMD5THVnwSqDWuh7PPYO5287rTyqy0xEHT6/e4pbqSrhyLPdQFsam4TwFQVVIIw==", "dependencies": { "@grpc/proto-loader": "^0.7.8", "@types/node": ">=12.12.47" @@ -4914,9 +4914,9 @@ } }, "node_modules/@rushstack/eslint-patch": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.6.0.tgz", - "integrity": "sha512-2/U3GXA6YiPYQDLGwtGlnNgKYBSwCFIHf8Y9LUY5VATHdtbLlU0Y1R3QoBnT0aB4qv/BEiVVsj7LJXoQCgJ2vA==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.6.1.tgz", + "integrity": "sha512-UY+FGM/2jjMkzQLn8pxcHGMaVLh9aEitG3zY2CiY7XHdLiz3bZOwa6oDxNqEMv7zZkV+cj5DOdz0cQ1BP5Hjgw==", "dev": true }, "node_modules/@sinclair/typebox": { @@ -4926,12 +4926,12 @@ "dev": true }, "node_modules/@storybook/addon-actions": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-7.6.4.tgz", - "integrity": "sha512-91UD5KPDik74VKVioPMcbwwvDXN/non8p1wArYAHCHCmd/Pts5MJRiFueSdfomSpNjUtjtn6eSXtwpIL3XVOfQ==", + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-7.6.5.tgz", + "integrity": "sha512-lW/m9YcaNfBZk+TZLxyzHdd563mBWpsUIveOKYjcPdl/q0FblWWZrRsFHqwLK1ldZ4AZXs8J/47G8CBr6Ew2uQ==", "dev": true, "dependencies": { - "@storybook/core-events": "7.6.4", + "@storybook/core-events": "7.6.5", "@storybook/global": "^5.0.0", "@types/uuid": "^9.0.1", "dequal": "^2.0.2", @@ -4944,9 +4944,9 @@ } }, "node_modules/@storybook/addon-backgrounds": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/addon-backgrounds/-/addon-backgrounds-7.6.4.tgz", - "integrity": "sha512-gNy3kIkHSr+Lg/jVDHwbZjIe1po5SDGZNVe39vrJwnqGz8T1clWes9WHCL6zk/uaCDA3yUna2Nt/KlOFAWDSoQ==", + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/@storybook/addon-backgrounds/-/addon-backgrounds-7.6.5.tgz", + "integrity": "sha512-wZZOL19vg4TTRtOTl71XKqPe5hQx3XUh9Fle0wOi91FiFrBdqusrppnyS89wPS8RQG5lXEOFEUvYcMmdCcdZfw==", "dev": true, "dependencies": { "@storybook/global": "^5.0.0", @@ -4959,12 +4959,12 @@ } }, "node_modules/@storybook/addon-controls": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/addon-controls/-/addon-controls-7.6.4.tgz", - "integrity": "sha512-k4AtZfazmD/nL3JAtLGAB7raPhkhUo0jWnaZWrahd9h1Fm13mBU/RW+JzTRhCw3Mp2HPERD7NI5Qcd2fUP6WDA==", + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/@storybook/addon-controls/-/addon-controls-7.6.5.tgz", + "integrity": "sha512-EdSZ2pYf74mOXZGGJ22lrDvdvL0YKc95iWv9FFEhUFOloMy/0OZPB2ybYmd2KVCy3SeIE4Zfeiw8pDXdCUniOQ==", "dev": true, "dependencies": { - "@storybook/blocks": "7.6.4", + "@storybook/blocks": "7.6.5", "lodash": "^4.17.21", "ts-dedent": "^2.0.0" }, @@ -4974,26 +4974,26 @@ } }, "node_modules/@storybook/addon-docs": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-7.6.4.tgz", - "integrity": "sha512-PbFMbvC9sK3sGdMhwmagXs9TqopTp9FySji+L8O7W9SHRC6wSmdwoWWPWybkOYxr/z/wXi7EM0azSAX7yQxLbw==", + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-7.6.5.tgz", + "integrity": "sha512-D9tZyD41IujCHiPYdfS2bKtZRJPNwO4EydzyqODXppomluhFbY3uTEaf0H1UFnJLQxWNXZ7rr3aS0V3O6yu8pA==", "dev": true, "dependencies": { "@jest/transform": "^29.3.1", "@mdx-js/react": "^2.1.5", - "@storybook/blocks": "7.6.4", - "@storybook/client-logger": "7.6.4", - "@storybook/components": "7.6.4", - "@storybook/csf-plugin": "7.6.4", - "@storybook/csf-tools": "7.6.4", + "@storybook/blocks": "7.6.5", + "@storybook/client-logger": "7.6.5", + "@storybook/components": "7.6.5", + "@storybook/csf-plugin": "7.6.5", + "@storybook/csf-tools": "7.6.5", "@storybook/global": "^5.0.0", "@storybook/mdx2-csf": "^1.0.0", - "@storybook/node-logger": "7.6.4", - "@storybook/postinstall": "7.6.4", - "@storybook/preview-api": "7.6.4", - "@storybook/react-dom-shim": "7.6.4", - "@storybook/theming": "7.6.4", - "@storybook/types": "7.6.4", + "@storybook/node-logger": "7.6.5", + "@storybook/postinstall": "7.6.5", + "@storybook/preview-api": "7.6.5", + "@storybook/react-dom-shim": "7.6.5", + "@storybook/theming": "7.6.5", + "@storybook/types": "7.6.5", "fs-extra": "^11.1.0", "remark-external-links": "^8.0.0", "remark-slug": "^6.0.0", @@ -5009,24 +5009,24 @@ } }, "node_modules/@storybook/addon-essentials": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/addon-essentials/-/addon-essentials-7.6.4.tgz", - "integrity": "sha512-J+zPmP4pbuuFxQ3pjLRYQRnxEtp7jF3xRXGFO8brVnEqtqoxwJ6j3euUrRLe0rpGAU3AD7dYfaaFjd3xkENgTw==", - "dev": true, - "dependencies": { - "@storybook/addon-actions": "7.6.4", - "@storybook/addon-backgrounds": "7.6.4", - "@storybook/addon-controls": "7.6.4", - "@storybook/addon-docs": "7.6.4", - "@storybook/addon-highlight": "7.6.4", - "@storybook/addon-measure": "7.6.4", - "@storybook/addon-outline": "7.6.4", - "@storybook/addon-toolbars": "7.6.4", - "@storybook/addon-viewport": "7.6.4", - "@storybook/core-common": "7.6.4", - "@storybook/manager-api": "7.6.4", - "@storybook/node-logger": "7.6.4", - "@storybook/preview-api": "7.6.4", + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/@storybook/addon-essentials/-/addon-essentials-7.6.5.tgz", + "integrity": "sha512-VCLj1JAEpGoqF5iFJOo1CZFFck/tg4m/98DLdQuNuXvxT6jqaF0NI9UUQuJLIGteDCR7NKRbTFc1hV3/Ev+Ziw==", + "dev": true, + "dependencies": { + "@storybook/addon-actions": "7.6.5", + "@storybook/addon-backgrounds": "7.6.5", + "@storybook/addon-controls": "7.6.5", + "@storybook/addon-docs": "7.6.5", + "@storybook/addon-highlight": "7.6.5", + "@storybook/addon-measure": "7.6.5", + "@storybook/addon-outline": "7.6.5", + "@storybook/addon-toolbars": "7.6.5", + "@storybook/addon-viewport": "7.6.5", + "@storybook/core-common": "7.6.5", + "@storybook/manager-api": "7.6.5", + "@storybook/node-logger": "7.6.5", + "@storybook/preview-api": "7.6.5", "ts-dedent": "^2.0.0" }, "funding": { @@ -5039,9 +5039,9 @@ } }, "node_modules/@storybook/addon-highlight": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/addon-highlight/-/addon-highlight-7.6.4.tgz", - "integrity": "sha512-0kvjDzquoPwWWU61QYmEtcSGWXufnV7Z/bfBTYh132uxvV/X9YzDFcXXrxGL7sBJkK32gNUUBDuiTOxs5NxyOQ==", + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/@storybook/addon-highlight/-/addon-highlight-7.6.5.tgz", + "integrity": "sha512-CxzmIb30F9nLPQwT0lCPYhOAwGlGF4IkgkO8hYA7VfGCGUkJZEyyN/YkP/ZCUSdCIRChDBouR3KiFFd4mDFKzg==", "dev": true, "dependencies": { "@storybook/global": "^5.0.0" @@ -5052,13 +5052,13 @@ } }, "node_modules/@storybook/addon-interactions": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/addon-interactions/-/addon-interactions-7.6.4.tgz", - "integrity": "sha512-LjK9uhkgnbGyDwwa7pQhLptDEHeTIFmy+KurfJs9T08DpvRFfuuzyW4mj/hA63R1W5yjFSAhRiZj26+D7kBIyw==", + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/@storybook/addon-interactions/-/addon-interactions-7.6.5.tgz", + "integrity": "sha512-8Hzt9u1DQzFvtGER/hCGIvGpCoVwzVoqpM98f2KAIVx/NMFmRW7UyKihXzw1j2t4q2ZaF2jZDYWCBqlP+iwILA==", "dev": true, "dependencies": { "@storybook/global": "^5.0.0", - "@storybook/types": "7.6.4", + "@storybook/types": "7.6.5", "jest-mock": "^27.0.6", "polished": "^4.2.2", "ts-dedent": "^2.2.0" @@ -5069,9 +5069,9 @@ } }, "node_modules/@storybook/addon-links": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/addon-links/-/addon-links-7.6.4.tgz", - "integrity": "sha512-TEhxYdMhJO28gD84ej1FCwLv9oLuCPt77bRXip9ndaNPRTdHYdWv6IP94dhbuDi8eHux7Z4A/mllciFuDFrnCw==", + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/@storybook/addon-links/-/addon-links-7.6.5.tgz", + "integrity": "sha512-Lx4Ng+iXt0YpIrKGr+nOZlpN9ypOoEDoP/7bZ6m7GXuVAkDm3JrRCBp7e2ZKSKcTxPdjPuO9HVKkIjtqjINlpw==", "dev": true, "dependencies": { "@storybook/csf": "^0.1.2", @@ -5092,9 +5092,9 @@ } }, "node_modules/@storybook/addon-measure": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/addon-measure/-/addon-measure-7.6.4.tgz", - "integrity": "sha512-73wsJ8PALsgWniR3MA/cmxcFuU6cRruWdIyYzOMgM8ife2Jm3xSkV7cTTXAqXt2H9Uuki4PGnuMHWWFLpPeyVA==", + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/@storybook/addon-measure/-/addon-measure-7.6.5.tgz", + "integrity": "sha512-tlUudVQSrA+bwI4dhO8J7nYHtYdylcBZ86ybnqMmdTthsnyc7jnaFVQwbb6bbQJpPxvEvoNds5bVGUFocuvymQ==", "dev": true, "dependencies": { "@storybook/global": "^5.0.0", @@ -5106,9 +5106,9 @@ } }, "node_modules/@storybook/addon-outline": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/addon-outline/-/addon-outline-7.6.4.tgz", - "integrity": "sha512-CFxGASRse/qeFocetDKFNeWZ3Aa2wapVtRciDNa4Zx7k1wCnTjEsPIm54waOuCaNVcrvO+nJUAZG5WyiorQvcg==", + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/@storybook/addon-outline/-/addon-outline-7.6.5.tgz", + "integrity": "sha512-P7X4+Z9L/l/RZW9UvvM+iuK2SUHD22KPc+dbYOifRXDovUqhfmcKVh1CUqTDMyZrg2ZAbropehMz1eI9BlQfxg==", "dev": true, "dependencies": { "@storybook/global": "^5.0.0", @@ -5188,9 +5188,9 @@ } }, "node_modules/@storybook/addon-toolbars": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/addon-toolbars/-/addon-toolbars-7.6.4.tgz", - "integrity": "sha512-ENMQJgU4sRCLLDVXYfa+P3cQVV9PC0ZxwVAKeM3NPYPNH/ODoryGNtq+Q68LwHlM4ObCE2oc9MzaQqPxloFcCw==", + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/@storybook/addon-toolbars/-/addon-toolbars-7.6.5.tgz", + "integrity": "sha512-/zqWbVNE/SHc8I5Prnd2Q8U57RGEIYvHfeXjfkuLcE2Quc4Iss4x/9eU7SKu4jm+IOO2s0wlN6HcqI3XEf2XxA==", "dev": true, "funding": { "type": "opencollective", @@ -5198,9 +5198,9 @@ } }, "node_modules/@storybook/addon-viewport": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/addon-viewport/-/addon-viewport-7.6.4.tgz", - "integrity": "sha512-SoTcHIoqybhYD28v7QExF1EZnl7FfxuP74VDhtze5LyMd2CbqmVnUfwewLCz/3IvCNce0GqdNyg1m6QJ7Eq1uw==", + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/@storybook/addon-viewport/-/addon-viewport-7.6.5.tgz", + "integrity": "sha512-9ghKTaduIUvQ6oShmWLuwMeTjtMR4RgKeKHrTJ7THMqvE/ydDPCYeL7ugF65ocXZSEz/QmxdK7uL686ZMKsqNA==", "dev": true, "dependencies": { "memoizerific": "^1.11.3" @@ -5211,13 +5211,13 @@ } }, "node_modules/@storybook/api": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/api/-/api-7.6.4.tgz", - "integrity": "sha512-iY/ZejLmVHctT6WcCiVCXBY84g/wMP7Amb+J3xTBM6jZHAJoHpM3ZeYlR5eZu4QfbGZh608TQDTmdQ7irDo3ZA==", + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/@storybook/api/-/api-7.6.5.tgz", + "integrity": "sha512-o1RH47iIgG4ie4hjJP1HgsCiuTKlGW0egaAy6E6Np3bDmujy5udWEf8vnXbcaBerc5ZSrQs45kfSWugHy2a4FA==", "dev": true, "dependencies": { - "@storybook/client-logger": "7.6.4", - "@storybook/manager-api": "7.6.4" + "@storybook/client-logger": "7.6.5", + "@storybook/manager-api": "7.6.5" }, "funding": { "type": "opencollective", @@ -5225,22 +5225,22 @@ } }, "node_modules/@storybook/blocks": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/blocks/-/blocks-7.6.4.tgz", - "integrity": "sha512-iXinXXhTUBtReREP1Jifpu35DnGg7FidehjvCM8sM4E4aymfb8czdg9DdvG46T2UFUPUct36nnjIdMLWOya8Bw==", + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/@storybook/blocks/-/blocks-7.6.5.tgz", + "integrity": "sha512-/NjuYkPks5w9lKn47KLgVC5cBkwfc+ERAp0CY0Xe//BQJkP+bcI8lE8d9Qc9IXFbOTvYEULeQrFgCkesk5BmLg==", "dev": true, "dependencies": { - "@storybook/channels": "7.6.4", - "@storybook/client-logger": "7.6.4", - "@storybook/components": "7.6.4", - "@storybook/core-events": "7.6.4", + "@storybook/channels": "7.6.5", + "@storybook/client-logger": "7.6.5", + "@storybook/components": "7.6.5", + "@storybook/core-events": "7.6.5", "@storybook/csf": "^0.1.2", - "@storybook/docs-tools": "7.6.4", + "@storybook/docs-tools": "7.6.5", "@storybook/global": "^5.0.0", - "@storybook/manager-api": "7.6.4", - "@storybook/preview-api": "7.6.4", - "@storybook/theming": "7.6.4", - "@storybook/types": "7.6.4", + "@storybook/manager-api": "7.6.5", + "@storybook/preview-api": "7.6.5", + "@storybook/theming": "7.6.5", + "@storybook/types": "7.6.5", "@types/lodash": "^4.14.167", "color-convert": "^2.0.1", "dequal": "^2.0.2", @@ -5264,15 +5264,15 @@ } }, "node_modules/@storybook/builder-manager": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/builder-manager/-/builder-manager-7.6.4.tgz", - "integrity": "sha512-k5+D3fXw7LdMOWd5tF7cIq8L3irrdW6/vmcEHLaJj1EXZ+DvsNCH9xSsLS+6zfrUcxug4oSfRqvF87w6Oz3DtA==", + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/@storybook/builder-manager/-/builder-manager-7.6.5.tgz", + "integrity": "sha512-FQyI+tfzMam2XKXq7k921YVafIJs9Vqvos5qx8vyRnRffo55UU8tgunwjGn0PswtbMm6sThVqE0C0ZzVr7RG8A==", "dev": true, "dependencies": { "@fal-works/esbuild-plugin-global-externals": "^2.1.2", - "@storybook/core-common": "7.6.4", - "@storybook/manager": "7.6.4", - "@storybook/node-logger": "7.6.4", + "@storybook/core-common": "7.6.5", + "@storybook/manager": "7.6.5", + "@storybook/node-logger": "7.6.5", "@types/ejs": "^3.1.1", "@types/find-cache-dir": "^3.2.1", "@yarnpkg/esbuild-plugin-pnp": "^3.0.0-rc.10", @@ -5292,20 +5292,20 @@ } }, "node_modules/@storybook/builder-webpack5": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/builder-webpack5/-/builder-webpack5-7.6.4.tgz", - "integrity": "sha512-J5wzPn/rsowlur5A7W9pAfN3a5fMapOoHaZsDKUklGRud/JUeabAIVdL1P/eX+yE3xaJk9auYivEWbglSx2Kpg==", + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/@storybook/builder-webpack5/-/builder-webpack5-7.6.5.tgz", + "integrity": "sha512-Lf4jVHGTQRSLIcgXHG2webiFlNwEV8uo2CmDucU2IDV9p3NdloyOmCou40G6Du1hobBTflx8Zj2j9n3A5/+0GA==", "dev": true, "dependencies": { "@babel/core": "^7.23.2", - "@storybook/channels": "7.6.4", - "@storybook/client-logger": "7.6.4", - "@storybook/core-common": "7.6.4", - "@storybook/core-events": "7.6.4", - "@storybook/core-webpack": "7.6.4", - "@storybook/node-logger": "7.6.4", - "@storybook/preview": "7.6.4", - "@storybook/preview-api": "7.6.4", + "@storybook/channels": "7.6.5", + "@storybook/client-logger": "7.6.5", + "@storybook/core-common": "7.6.5", + "@storybook/core-events": "7.6.5", + "@storybook/core-webpack": "7.6.5", + "@storybook/node-logger": "7.6.5", + "@storybook/preview": "7.6.5", + "@storybook/preview-api": "7.6.5", "@swc/core": "^1.3.82", "@types/node": "^18.0.0", "@types/semver": "^7.3.4", @@ -5388,13 +5388,13 @@ "dev": true }, "node_modules/@storybook/channels": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.6.4.tgz", - "integrity": "sha512-Z4PY09/Czl70ap4ObmZ4bgin+EQhPaA3HdrEDNwpnH7A9ttfEO5u5KThytIjMq6kApCCihmEPDaYltoVrfYJJA==", + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.6.5.tgz", + "integrity": "sha512-FIlNkyfQy9uHoJfAFL2/wO3ASGJELFvBzURBE2rcEF/TS7GcUiqWnBfiDxAbwSEjSOm2F0eEq3UXhaZEjpJHDw==", "dev": true, "dependencies": { - "@storybook/client-logger": "7.6.4", - "@storybook/core-events": "7.6.4", + "@storybook/client-logger": "7.6.5", + "@storybook/core-events": "7.6.5", "@storybook/global": "^5.0.0", "qs": "^6.10.0", "telejson": "^7.2.0", @@ -5406,23 +5406,23 @@ } }, "node_modules/@storybook/cli": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/cli/-/cli-7.6.4.tgz", - "integrity": "sha512-GqvaFdkkBMJOdnrVe82XY0V3b+qFMhRNyVoTv2nqB87iMUXZHqh4Pu4LqwaJBsBpuNregvCvVOPe9LGgoOzy4A==", + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/@storybook/cli/-/cli-7.6.5.tgz", + "integrity": "sha512-w+Y8dx5oCLQVESOVmpsQuFksr/ewARKrnSKl9kwnVMN4sMgjOgoZ3zmV66J7SKexvwyuwlOjf840pmEglGdPPg==", "dev": true, "dependencies": { "@babel/core": "^7.23.2", "@babel/preset-env": "^7.23.2", "@babel/types": "^7.23.0", "@ndelangen/get-tarball": "^3.0.7", - "@storybook/codemod": "7.6.4", - "@storybook/core-common": "7.6.4", - "@storybook/core-events": "7.6.4", - "@storybook/core-server": "7.6.4", - "@storybook/csf-tools": "7.6.4", - "@storybook/node-logger": "7.6.4", - "@storybook/telemetry": "7.6.4", - "@storybook/types": "7.6.4", + "@storybook/codemod": "7.6.5", + "@storybook/core-common": "7.6.5", + "@storybook/core-events": "7.6.5", + "@storybook/core-server": "7.6.5", + "@storybook/csf-tools": "7.6.5", + "@storybook/node-logger": "7.6.5", + "@storybook/telemetry": "7.6.5", + "@storybook/types": "7.6.5", "@types/semver": "^7.3.4", "@yarnpkg/fslib": "2.10.3", "@yarnpkg/libzip": "2.3.0", @@ -5540,9 +5540,9 @@ "dev": true }, "node_modules/@storybook/client-logger": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.6.4.tgz", - "integrity": "sha512-vJwMShC98tcoFruRVQ4FphmFqvAZX1FqZqjFyk6IxtFumPKTVSnXJjlU1SnUIkSK2x97rgdUMqkdI+wAv/tugQ==", + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.6.5.tgz", + "integrity": "sha512-S5aROWgssqg7tcs9lgW5wmCAz4SxMAtioiyVj5oFecmPCbQtFVIAREYzeoxE4GfJL+plrfRkum4BzziANn8EhQ==", "dev": true, "dependencies": { "@storybook/global": "^5.0.0" @@ -5553,18 +5553,18 @@ } }, "node_modules/@storybook/codemod": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/codemod/-/codemod-7.6.4.tgz", - "integrity": "sha512-q4rZVOfozxzbDRH/LzuFDoIGBdXs+orAm18fi6iAx8PeMHe8J/MOXKccNV1zdkm/h7mTQowuRo45KwJHw8vX+g==", + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/@storybook/codemod/-/codemod-7.6.5.tgz", + "integrity": "sha512-K5C9ltBClZ0aSyujGt3RJFtRicrUZy8nzhHrcADUj27rrQD26jH/p+Y05jWKj9JcI8SyMg978GN5X/1aw2Y31A==", "dev": true, "dependencies": { "@babel/core": "^7.23.2", "@babel/preset-env": "^7.23.2", "@babel/types": "^7.23.0", "@storybook/csf": "^0.1.2", - "@storybook/csf-tools": "7.6.4", - "@storybook/node-logger": "7.6.4", - "@storybook/types": "7.6.4", + "@storybook/csf-tools": "7.6.5", + "@storybook/node-logger": "7.6.5", + "@storybook/types": "7.6.5", "@types/cross-spawn": "^6.0.2", "cross-spawn": "^7.0.3", "globby": "^11.0.2", @@ -5614,18 +5614,18 @@ } }, "node_modules/@storybook/components": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/components/-/components-7.6.4.tgz", - "integrity": "sha512-K5RvEObJAnX+SbGJbkM1qrZEk+VR2cUhRCSrFnlfMwsn8/60T3qoH7U8bCXf8krDgbquhMwqev5WzDB+T1VV8g==", + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/@storybook/components/-/components-7.6.5.tgz", + "integrity": "sha512-w4ZucbBBZ+NKMWlJKVj2I/bMBBq7gzDp9lzc4+8QaQ3vUPXKqc1ilIPYo/7UR5oxwDVMZocmMSgl9L8lvf7+Mw==", "dev": true, "dependencies": { "@radix-ui/react-select": "^1.2.2", "@radix-ui/react-toolbar": "^1.0.4", - "@storybook/client-logger": "7.6.4", + "@storybook/client-logger": "7.6.5", "@storybook/csf": "^0.1.2", "@storybook/global": "^5.0.0", - "@storybook/theming": "7.6.4", - "@storybook/types": "7.6.4", + "@storybook/theming": "7.6.5", + "@storybook/types": "7.6.5", "memoizerific": "^1.11.3", "use-resize-observer": "^9.1.0", "util-deprecate": "^1.0.2" @@ -5640,13 +5640,13 @@ } }, "node_modules/@storybook/core-client": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/core-client/-/core-client-7.6.4.tgz", - "integrity": "sha512-0msqdGd+VYD1dRgAJ2StTu4d543Wveb7LVVujX3PwD/QCxmCaVUHuAoZrekM/H7jZLw546ZIbLZo0xWrADAUMw==", + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/@storybook/core-client/-/core-client-7.6.5.tgz", + "integrity": "sha512-6FtyJcz8MSl+JYwNJZ53FM6rkT27pFHWcJPdtw/9229Ec8as9RpkNeZ/NBZjRTeDkn9Ki0VOiVAefNie9tZ/8Q==", "dev": true, "dependencies": { - "@storybook/client-logger": "7.6.4", - "@storybook/preview-api": "7.6.4" + "@storybook/client-logger": "7.6.5", + "@storybook/preview-api": "7.6.5" }, "funding": { "type": "opencollective", @@ -5654,14 +5654,14 @@ } }, "node_modules/@storybook/core-common": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/core-common/-/core-common-7.6.4.tgz", - "integrity": "sha512-qes4+mXqINu0kCgSMFjk++GZokmYjb71esId0zyJsk0pcIPkAiEjnhbSEQkMhbUfcvO1lztoaQTBW2P7Rd1tag==", + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/@storybook/core-common/-/core-common-7.6.5.tgz", + "integrity": "sha512-z4EgzZSIVbID6Ib0jhh3jimKeaDWU8OOhoZYfn3galFmgQWowWOv1oMgipWiXfRLWw9DaLFQiCHIdLANH+VO2g==", "dev": true, "dependencies": { - "@storybook/core-events": "7.6.4", - "@storybook/node-logger": "7.6.4", - "@storybook/types": "7.6.4", + "@storybook/core-events": "7.6.5", + "@storybook/node-logger": "7.6.5", + "@storybook/types": "7.6.5", "@types/find-cache-dir": "^3.2.1", "@types/node": "^18.0.0", "@types/node-fetch": "^2.6.4", @@ -5698,9 +5698,9 @@ } }, "node_modules/@storybook/core-events": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.6.4.tgz", - "integrity": "sha512-i3xzcJ19ILSy4oJL5Dz9y0IlyApynn5RsGhAMIsW+mcfri+hGfeakq1stNCo0o7jW4Y3A7oluFTtIoK8DOxQdQ==", + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.6.5.tgz", + "integrity": "sha512-zk2q/qicYXAzHA4oV3GDbIql+Kd4TOHUgDE8e4jPCOPp856z2ScqEKUAbiJizs6eEJOH4nW9Db1kuzgrBVEykQ==", "dev": true, "dependencies": { "ts-dedent": "^2.0.0" @@ -5711,26 +5711,26 @@ } }, "node_modules/@storybook/core-server": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/core-server/-/core-server-7.6.4.tgz", - "integrity": "sha512-mXxZMpCwOhjEPPRjqrTHdiCpFdkc47f46vlgTj02SX+9xKHxslmZ2D3JG/8O4Ab9tG+bBl6lBm3RIrIzaiCu9Q==", + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/@storybook/core-server/-/core-server-7.6.5.tgz", + "integrity": "sha512-BfKzK/ObTjUcPvE5/r1pogCifM/4nLRhOUYJl7XekwHkOQwn19e6H3/ku1W3jDoYXBu642Dc9X7l/ERjKTqxFg==", "dev": true, "dependencies": { "@aw-web-design/x-default-browser": "1.4.126", "@discoveryjs/json-ext": "^0.5.3", - "@storybook/builder-manager": "7.6.4", - "@storybook/channels": "7.6.4", - "@storybook/core-common": "7.6.4", - "@storybook/core-events": "7.6.4", + "@storybook/builder-manager": "7.6.5", + "@storybook/channels": "7.6.5", + "@storybook/core-common": "7.6.5", + "@storybook/core-events": "7.6.5", "@storybook/csf": "^0.1.2", - "@storybook/csf-tools": "7.6.4", + "@storybook/csf-tools": "7.6.5", "@storybook/docs-mdx": "^0.1.0", "@storybook/global": "^5.0.0", - "@storybook/manager": "7.6.4", - "@storybook/node-logger": "7.6.4", - "@storybook/preview-api": "7.6.4", - "@storybook/telemetry": "7.6.4", - "@storybook/types": "7.6.4", + "@storybook/manager": "7.6.5", + "@storybook/node-logger": "7.6.5", + "@storybook/preview-api": "7.6.5", + "@storybook/telemetry": "7.6.5", + "@storybook/types": "7.6.5", "@types/detect-port": "^1.3.0", "@types/node": "^18.0.0", "@types/pretty-hrtime": "^1.0.0", @@ -5826,14 +5826,14 @@ "dev": true }, "node_modules/@storybook/core-webpack": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/core-webpack/-/core-webpack-7.6.4.tgz", - "integrity": "sha512-+C2YddhOhO0Lp9KngzX9XYJZKzCzo4vjXA3IMXxSA7Vo7gFhaa8uQTAXnUx7xCrvFXM/iiHUY1SN+VppB0eBdA==", + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/@storybook/core-webpack/-/core-webpack-7.6.5.tgz", + "integrity": "sha512-if5ixN2W3e8vwYvgFHq+k0FOSVwgolbPRLDeOToPXHAJjH/TmgGEANZLFAVVwEzsS4KOfRGJQ48KzF0knTsqzA==", "dev": true, "dependencies": { - "@storybook/core-common": "7.6.4", - "@storybook/node-logger": "7.6.4", - "@storybook/types": "7.6.4", + "@storybook/core-common": "7.6.5", + "@storybook/node-logger": "7.6.5", + "@storybook/types": "7.6.5", "@types/node": "^18.0.0", "ts-dedent": "^2.0.0" }, @@ -5861,12 +5861,12 @@ } }, "node_modules/@storybook/csf-plugin": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/csf-plugin/-/csf-plugin-7.6.4.tgz", - "integrity": "sha512-7g9p8s2ITX+Z9iThK5CehPhJOcusVN7JcUEEW+gVF5PlYT+uk/x+66gmQno+scQuNkV9+8UJD6RLFjP+zg2uCA==", + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/@storybook/csf-plugin/-/csf-plugin-7.6.5.tgz", + "integrity": "sha512-iQ8Y/Qq1IUhHRddjDVicWJA2sM7OZA1FR97OvWUT2240WjCuQSCfy32JD8TQlYjqXgEolJeLPv3zW4qH5om4LQ==", "dev": true, "dependencies": { - "@storybook/csf-tools": "7.6.4", + "@storybook/csf-tools": "7.6.5", "unplugin": "^1.3.1" }, "funding": { @@ -5875,9 +5875,9 @@ } }, "node_modules/@storybook/csf-tools": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/csf-tools/-/csf-tools-7.6.4.tgz", - "integrity": "sha512-6sLayuhgReIK3/QauNj5BW4o4ZfEMJmKf+EWANPEM/xEOXXqrog6Un8sjtBuJS9N1DwyhHY6xfkEiPAwdttwqw==", + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/@storybook/csf-tools/-/csf-tools-7.6.5.tgz", + "integrity": "sha512-1iaCh7nt+WE7Q5UwRhLLc5flMNoAV/vBr0tvDSCKiHaO+D3dZzlZOe/U+S6wegdyN2QNcvT2xs179CcrX6Qp6w==", "dev": true, "dependencies": { "@babel/generator": "^7.23.0", @@ -5885,7 +5885,7 @@ "@babel/traverse": "^7.23.2", "@babel/types": "^7.23.0", "@storybook/csf": "^0.1.2", - "@storybook/types": "7.6.4", + "@storybook/types": "7.6.5", "fs-extra": "^11.1.0", "recast": "^0.23.1", "ts-dedent": "^2.0.0" @@ -5902,14 +5902,14 @@ "dev": true }, "node_modules/@storybook/docs-tools": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/docs-tools/-/docs-tools-7.6.4.tgz", - "integrity": "sha512-2eGam43aD7O3cocA72Z63kRi7t/ziMSpst0qB218QwBWAeZjT4EYDh8V6j/Xhv6zVQL3msW7AglrQP5kCKPvPA==", + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/@storybook/docs-tools/-/docs-tools-7.6.5.tgz", + "integrity": "sha512-UyHkHu5Af6jMpYsR4lZ69D32GQGeA0pLAn7jaBbQndgAjBdK1ykZcifiUC7Wz1hG7+YpuYspEGuDEddOh+X8FQ==", "dev": true, "dependencies": { - "@storybook/core-common": "7.6.4", - "@storybook/preview-api": "7.6.4", - "@storybook/types": "7.6.4", + "@storybook/core-common": "7.6.5", + "@storybook/preview-api": "7.6.5", + "@storybook/types": "7.6.5", "@types/doctrine": "^0.0.3", "assert": "^2.1.0", "doctrine": "^3.0.0", @@ -5927,9 +5927,9 @@ "dev": true }, "node_modules/@storybook/manager": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/manager/-/manager-7.6.4.tgz", - "integrity": "sha512-Ug2ejfKgKre8h/RJbkumukwAA44TbvTPEjDcJmyFdAI+kHYhOYdKPEC2UNmVYz8/4HjwMTJQ3M7t/esK8HHY4A==", + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/@storybook/manager/-/manager-7.6.5.tgz", + "integrity": "sha512-y1KLH0O1PGPyMxGMvOhppzFSO7r4ibjTve5iqsI0JZwxUjNuBKRLYbrhXdAyC2iacvxYNrHgevae1k9XdD+FQw==", "dev": true, "funding": { "type": "opencollective", @@ -5937,19 +5937,19 @@ } }, "node_modules/@storybook/manager-api": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/manager-api/-/manager-api-7.6.4.tgz", - "integrity": "sha512-RFb/iaBJfXygSgXkINPRq8dXu7AxBicTGX7MxqKXbz5FU7ANwV7abH6ONBYURkSDOH9//TQhRlVkF5u8zWg3bw==", + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/@storybook/manager-api/-/manager-api-7.6.5.tgz", + "integrity": "sha512-tE3OShOcs6A3XtI3NJd6hYQOZLaP++Fn0dCtowBwYh/vS1EN/AyroVmL97tsxn1DZTyoRt0GidwbB6dvLMBOwA==", "dev": true, "dependencies": { - "@storybook/channels": "7.6.4", - "@storybook/client-logger": "7.6.4", - "@storybook/core-events": "7.6.4", + "@storybook/channels": "7.6.5", + "@storybook/client-logger": "7.6.5", + "@storybook/core-events": "7.6.5", "@storybook/csf": "^0.1.2", "@storybook/global": "^5.0.0", - "@storybook/router": "7.6.4", - "@storybook/theming": "7.6.4", - "@storybook/types": "7.6.4", + "@storybook/router": "7.6.5", + "@storybook/theming": "7.6.5", + "@storybook/types": "7.6.5", "dequal": "^2.0.2", "lodash": "^4.17.21", "memoizerific": "^1.11.3", @@ -6003,9 +6003,9 @@ "dev": true }, "node_modules/@storybook/nextjs": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/nextjs/-/nextjs-7.6.4.tgz", - "integrity": "sha512-cKGsumJcWmFdGrlVyxtbcp1DzXd+P6yUtVNMWUtPR5mDTV8TmQ6Y12Tm18mmVANo4aTNssEfKpOWiFTnakVnyg==", + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/@storybook/nextjs/-/nextjs-7.6.5.tgz", + "integrity": "sha512-IZomWGALmcCdW4hgFQZnp6VZ2jBW7lPFKOA+ug3jORmlD7zA4deYXqLKnOr7yx0/MJYR1/nfd+pz5NCAtdAlQA==", "dev": true, "dependencies": { "@babel/core": "^7.23.2", @@ -6021,14 +6021,14 @@ "@babel/preset-react": "^7.22.15", "@babel/preset-typescript": "^7.23.2", "@babel/runtime": "^7.23.2", - "@storybook/addon-actions": "7.6.4", - "@storybook/builder-webpack5": "7.6.4", - "@storybook/core-common": "7.6.4", - "@storybook/core-events": "7.6.4", - "@storybook/node-logger": "7.6.4", - "@storybook/preset-react-webpack": "7.6.4", - "@storybook/preview-api": "7.6.4", - "@storybook/react": "7.6.4", + "@storybook/addon-actions": "7.6.5", + "@storybook/builder-webpack5": "7.6.5", + "@storybook/core-common": "7.6.5", + "@storybook/core-events": "7.6.5", + "@storybook/node-logger": "7.6.5", + "@storybook/preset-react-webpack": "7.6.5", + "@storybook/preview-api": "7.6.5", + "@storybook/react": "7.6.5", "@types/node": "^18.0.0", "css-loader": "^6.7.3", "find-up": "^5.0.0", @@ -6156,9 +6156,9 @@ "dev": true }, "node_modules/@storybook/node-logger": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-7.6.4.tgz", - "integrity": "sha512-GDkEnnDj4Op+PExs8ZY/P6ox3wg453CdEIaR8PR9TxF/H/T2fBL6puzma3hN2CMam6yzfAL8U+VeIIDLQ5BZdQ==", + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-7.6.5.tgz", + "integrity": "sha512-xKw6IH1wLkIssekdBv3bd13xYKUF1t8EwqDR8BYcN8AVjZlqJMTifssqG4bYV+G/B7J3tz4ugJ5nmtWg6RQ0Qw==", "dev": true, "funding": { "type": "opencollective", @@ -6166,9 +6166,9 @@ } }, "node_modules/@storybook/postinstall": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/postinstall/-/postinstall-7.6.4.tgz", - "integrity": "sha512-7uoB82hSzlFSdDMS3hKQD+AaeSvPit/fAMvXCBxn0/D0UGJUZcq4M9JcKBwEHkZJcbuDROgOTJ6TUeXi/FWO0w==", + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/@storybook/postinstall/-/postinstall-7.6.5.tgz", + "integrity": "sha512-12WxfpqGKsk7GQ3KWiZSbamsYK8vtRmhOTkavZ9IQkcJ/zuVfmqK80/Mds+njJMudUPzuREuSFGWACczo17EDA==", "dev": true, "funding": { "type": "opencollective", @@ -6176,18 +6176,18 @@ } }, "node_modules/@storybook/preset-react-webpack": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/preset-react-webpack/-/preset-react-webpack-7.6.4.tgz", - "integrity": "sha512-rQ3hqehGUvmbwUosNdh1jnXevaHQ9ezqc4v8YlX5TELp1oz+qhRe0gnQOdsQ98SsdjA24EHfgc331dp9F3up6Q==", + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/@storybook/preset-react-webpack/-/preset-react-webpack-7.6.5.tgz", + "integrity": "sha512-Lf9bYUkH1DoWjgptkNgMtA0IkRqGhWE/EnmOvq4otV+Cr/BaVQw3/sfKQ76qdpTQZ4Qg4dG+nBWrwaDkfqxKDA==", "dev": true, "dependencies": { "@babel/preset-flow": "^7.22.15", "@babel/preset-react": "^7.22.15", "@pmmmwh/react-refresh-webpack-plugin": "^0.5.11", - "@storybook/core-webpack": "7.6.4", - "@storybook/docs-tools": "7.6.4", - "@storybook/node-logger": "7.6.4", - "@storybook/react": "7.6.4", + "@storybook/core-webpack": "7.6.5", + "@storybook/docs-tools": "7.6.5", + "@storybook/node-logger": "7.6.5", + "@storybook/react": "7.6.5", "@storybook/react-docgen-typescript-plugin": "1.0.6--canary.9.0c3f3b7.0", "@types/node": "^18.0.0", "@types/semver": "^7.3.4", @@ -6263,9 +6263,9 @@ "dev": true }, "node_modules/@storybook/preview": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/preview/-/preview-7.6.4.tgz", - "integrity": "sha512-p9xIvNkgXgTpSRphOMV9KpIiNdkymH61jBg3B0XyoF6IfM1S2/mQGvC89lCVz1dMGk2SrH4g87/WcOapkU5ArA==", + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/@storybook/preview/-/preview-7.6.5.tgz", + "integrity": "sha512-zmLa7C7yFGTYhgGZXoecdww9rx0Z5HpNi/GDBRWoNSK+FEdE8Jj2jF5NJ2ncldtYIyegz9ku29JFMKbhMj9K5Q==", "dev": true, "funding": { "type": "opencollective", @@ -6273,17 +6273,17 @@ } }, "node_modules/@storybook/preview-api": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-7.6.4.tgz", - "integrity": "sha512-KhisNdQX5NdfAln+spLU4B82d804GJQp/CnI5M1mm/taTnjvMgs/wTH9AmR89OPoq+tFZVW0vhy2zgPS3ar71A==", + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-7.6.5.tgz", + "integrity": "sha512-9XzuDXXgNuA6dDZ3DXsUwEG6ElxeTbzLuYuzcjtS1FusSICZ2iYmxfS0GfSud9MjPPYOJYoSOvMdIHjorjgByA==", "dev": true, "dependencies": { - "@storybook/channels": "7.6.4", - "@storybook/client-logger": "7.6.4", - "@storybook/core-events": "7.6.4", + "@storybook/channels": "7.6.5", + "@storybook/client-logger": "7.6.5", + "@storybook/core-events": "7.6.5", "@storybook/csf": "^0.1.2", "@storybook/global": "^5.0.0", - "@storybook/types": "7.6.4", + "@storybook/types": "7.6.5", "@types/qs": "^6.9.5", "dequal": "^2.0.2", "lodash": "^4.17.21", @@ -6299,18 +6299,18 @@ } }, "node_modules/@storybook/react": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/react/-/react-7.6.4.tgz", - "integrity": "sha512-XYRP+eylH3JqkCuziwtQGY5vOCeDreOibRYJmj5na6k4QbURjGVB44WCIW04gWVlmBXM9SqLAmserUi3HP890Q==", + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/@storybook/react/-/react-7.6.5.tgz", + "integrity": "sha512-z0l5T+gL//VekMXnHi+lW5qr7OQ8X7WoeIRMk38e62ppSpGUZRfoxRmmhU/9YcIFAlCgMaoLSYmhOceKGRZuVw==", "dev": true, "dependencies": { - "@storybook/client-logger": "7.6.4", - "@storybook/core-client": "7.6.4", - "@storybook/docs-tools": "7.6.4", + "@storybook/client-logger": "7.6.5", + "@storybook/core-client": "7.6.5", + "@storybook/docs-tools": "7.6.5", "@storybook/global": "^5.0.0", - "@storybook/preview-api": "7.6.4", - "@storybook/react-dom-shim": "7.6.4", - "@storybook/types": "7.6.4", + "@storybook/preview-api": "7.6.5", + "@storybook/react-dom-shim": "7.6.5", + "@storybook/types": "7.6.5", "@types/escodegen": "^0.0.6", "@types/estree": "^0.0.51", "@types/node": "^18.0.0", @@ -6364,9 +6364,9 @@ } }, "node_modules/@storybook/react-dom-shim": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-7.6.4.tgz", - "integrity": "sha512-wGJfomlDEBnowNmhmumWDu/AcUInxSoPqUUJPgk2f5oL0EW17fR9fDP/juG3XOEdieMDM0jDX48GML7lyvL2fg==", + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-7.6.5.tgz", + "integrity": "sha512-Qp3N3zENdvx20ikHmz5yI03z+mAWF8bUAwUofqXarVtZUkBNtvfTfUwgAezOAF0eClClH+ktIziIKd976tLSPw==", "dev": true, "funding": { "type": "opencollective", @@ -6387,12 +6387,12 @@ } }, "node_modules/@storybook/router": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/router/-/router-7.6.4.tgz", - "integrity": "sha512-5MQ7Z4D7XNPN2yhFgjey7hXOYd6s8CggUqeAwhzGTex90SMCkKHSz1hfkcXn1ZqBPaall2b53uK553OvPLp9KQ==", + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/@storybook/router/-/router-7.6.5.tgz", + "integrity": "sha512-QiTC86gRuoepzzmS6HNJZTwfz/n27NcqtaVEIxJi1Yvsx2/kLa9NkRhylNkfTuZ1gEry9stAlKWanMsB2aKyjQ==", "dev": true, "dependencies": { - "@storybook/client-logger": "7.6.4", + "@storybook/client-logger": "7.6.5", "memoizerific": "^1.11.3", "qs": "^6.10.0" }, @@ -6402,14 +6402,14 @@ } }, "node_modules/@storybook/telemetry": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/telemetry/-/telemetry-7.6.4.tgz", - "integrity": "sha512-Q4QpvcgloHUEqC9PGo7tgqkUH91/PjX+74/0Hi9orLo8QmLMgdYS5fweFwgSKoTwDGNg2PaHp/jqvhhw7UmnJA==", + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/@storybook/telemetry/-/telemetry-7.6.5.tgz", + "integrity": "sha512-FiLRh9k9LoGphqgBqPYySWdGqplihiZyDwqdo+Qs19RcQ/eiKg0W7fdA09nStcdcsHmDl/1cMfRhz9KUiMtwOw==", "dev": true, "dependencies": { - "@storybook/client-logger": "7.6.4", - "@storybook/core-common": "7.6.4", - "@storybook/csf-tools": "7.6.4", + "@storybook/client-logger": "7.6.5", + "@storybook/core-common": "7.6.5", + "@storybook/csf-tools": "7.6.5", "chalk": "^4.1.0", "detect-package-manager": "^2.0.1", "fetch-retry": "^5.0.2", @@ -6433,13 +6433,13 @@ } }, "node_modules/@storybook/theming": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-7.6.4.tgz", - "integrity": "sha512-Z/dcC5EpkIXelYCkt9ojnX6D7qGOng8YHxV/OWlVE9TrEGYVGPOEfwQryR0RhmGpDha1TYESLYrsDb4A8nJ1EA==", + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-7.6.5.tgz", + "integrity": "sha512-RpcWT0YEgiobO41McVPDfQQHHFnjyr1sJnNTPJIvOUgSfURdgSj17mQVxtD5xcXcPWUdle5UhIOrCixHbL/NNw==", "dev": true, "dependencies": { "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", - "@storybook/client-logger": "7.6.4", + "@storybook/client-logger": "7.6.5", "@storybook/global": "^5.0.0", "memoizerific": "^1.11.3" }, @@ -6453,12 +6453,12 @@ } }, "node_modules/@storybook/types": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@storybook/types/-/types-7.6.4.tgz", - "integrity": "sha512-qyiiXPCvol5uVgfubcIMzJBA0awAyFPU+TyUP1mkPYyiTHnsHYel/mKlSdPjc8a97N3SlJXHOCx41Hde4IyJgg==", + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/@storybook/types/-/types-7.6.5.tgz", + "integrity": "sha512-Q757v+fYZZSaEpks/zDL5YgXRozxkgKakXFc+BoQHK5q5sVhJ+0jvpLJiAQAniIIaMIkqY/G24Kd6Uo6UdKBCg==", "dev": true, "dependencies": { - "@storybook/channels": "7.6.4", + "@storybook/channels": "7.6.5", "@types/babel__core": "^7.0.0", "@types/express": "^4.7.0", "file-system-cache": "2.3.0" @@ -6469,9 +6469,9 @@ } }, "node_modules/@swc/core": { - "version": "1.3.100", - "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.3.100.tgz", - "integrity": "sha512-7dKgTyxJjlrMwFZYb1auj3Xq0D8ZBe+5oeIgfMlRU05doXZypYJe0LAk0yjj3WdbwYzpF+T1PLxwTWizI0pckw==", + "version": "1.3.101", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.3.101.tgz", + "integrity": "sha512-w5aQ9qYsd/IYmXADAnkXPGDMTqkQalIi+kfFf/MHRKTpaOL7DHjMXwPp/n8hJ0qNjRvchzmPtOqtPBiER50d8A==", "dev": true, "hasInstallScript": true, "dependencies": { @@ -6486,15 +6486,16 @@ "url": "https://opencollective.com/swc" }, "optionalDependencies": { - "@swc/core-darwin-arm64": "1.3.100", - "@swc/core-darwin-x64": "1.3.100", - "@swc/core-linux-arm64-gnu": "1.3.100", - "@swc/core-linux-arm64-musl": "1.3.100", - "@swc/core-linux-x64-gnu": "1.3.100", - "@swc/core-linux-x64-musl": "1.3.100", - "@swc/core-win32-arm64-msvc": "1.3.100", - "@swc/core-win32-ia32-msvc": "1.3.100", - "@swc/core-win32-x64-msvc": "1.3.100" + "@swc/core-darwin-arm64": "1.3.101", + "@swc/core-darwin-x64": "1.3.101", + "@swc/core-linux-arm-gnueabihf": "1.3.101", + "@swc/core-linux-arm64-gnu": "1.3.101", + "@swc/core-linux-arm64-musl": "1.3.101", + "@swc/core-linux-x64-gnu": "1.3.101", + "@swc/core-linux-x64-musl": "1.3.101", + "@swc/core-win32-arm64-msvc": "1.3.101", + "@swc/core-win32-ia32-msvc": "1.3.101", + "@swc/core-win32-x64-msvc": "1.3.101" }, "peerDependencies": { "@swc/helpers": "^0.5.0" @@ -6506,9 +6507,9 @@ } }, "node_modules/@swc/core-darwin-arm64": { - "version": "1.3.100", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.100.tgz", - "integrity": "sha512-XVWFsKe6ei+SsDbwmsuRkYck1SXRpO60Hioa4hoLwR8fxbA9eVp6enZtMxzVVMBi8ej5seZ4HZQeAWepbukiBw==", + "version": "1.3.101", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.101.tgz", + "integrity": "sha512-mNFK+uHNPRXSnfTOG34zJOeMl2waM4hF4a2NY7dkMXrPqw9CoJn4MwTXJcyMiSz1/BnNjjTCHF3Yhj0jPxmkzQ==", "cpu": [ "arm64" ], @@ -6522,9 +6523,9 @@ } }, "node_modules/@swc/core-darwin-x64": { - "version": "1.3.100", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.3.100.tgz", - "integrity": "sha512-KF/MXrnH1nakm1wbt4XV8FS7kvqD9TGmVxeJ0U4bbvxXMvzeYUurzg3AJUTXYmXDhH/VXOYJE5N5RkwZZPs5iA==", + "version": "1.3.101", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.3.101.tgz", + "integrity": "sha512-B085j8XOx73Fg15KsHvzYWG262bRweGr3JooO1aW5ec5pYbz5Ew9VS5JKYS03w2UBSxf2maWdbPz2UFAxg0whw==", "cpu": [ "x64" ], @@ -6537,10 +6538,26 @@ "node": ">=10" } }, + "node_modules/@swc/core-linux-arm-gnueabihf": { + "version": "1.3.101", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.101.tgz", + "integrity": "sha512-9xLKRb6zSzRGPqdz52Hy5GuB1lSjmLqa0lST6MTFads3apmx4Vgs8Y5NuGhx/h2I8QM4jXdLbpqQlifpzTlSSw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, "node_modules/@swc/core-linux-arm64-gnu": { - "version": "1.3.100", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.100.tgz", - "integrity": "sha512-p8hikNnAEJrw5vHCtKiFT4hdlQxk1V7vqPmvUDgL/qe2menQDK/i12tbz7/3BEQ4UqUPnvwpmVn2d19RdEMNxw==", + "version": "1.3.101", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.101.tgz", + "integrity": "sha512-oE+r1lo7g/vs96Weh2R5l971dt+ZLuhaUX+n3BfDdPxNHfObXgKMjO7E+QS5RbGjv/AwiPCxQmbdCp/xN5ICJA==", "cpu": [ "arm64" ], @@ -6554,9 +6571,9 @@ } }, "node_modules/@swc/core-linux-arm64-musl": { - "version": "1.3.100", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.100.tgz", - "integrity": "sha512-BWx/0EeY89WC4q3AaIaBSGfQxkYxIlS3mX19dwy2FWJs/O+fMvF9oLk/CyJPOZzbp+1DjGeeoGFuDYpiNO91JA==", + "version": "1.3.101", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.101.tgz", + "integrity": "sha512-OGjYG3H4BMOTnJWJyBIovCez6KiHF30zMIu4+lGJTCrxRI2fAjGLml3PEXj8tC3FMcud7U2WUn6TdG0/te2k6g==", "cpu": [ "arm64" ], @@ -6570,9 +6587,9 @@ } }, "node_modules/@swc/core-linux-x64-gnu": { - "version": "1.3.100", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.100.tgz", - "integrity": "sha512-XUdGu3dxAkjsahLYnm8WijPfKebo+jHgHphDxaW0ovI6sTdmEGFDew7QzKZRlbYL2jRkUuuKuDGvD6lO5frmhA==", + "version": "1.3.101", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.101.tgz", + "integrity": "sha512-/kBMcoF12PRO/lwa8Z7w4YyiKDcXQEiLvM+S3G9EvkoKYGgkkz4Q6PSNhF5rwg/E3+Hq5/9D2R+6nrkF287ihg==", "cpu": [ "x64" ], @@ -6586,9 +6603,9 @@ } }, "node_modules/@swc/core-linux-x64-musl": { - "version": "1.3.100", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.100.tgz", - "integrity": "sha512-PhoXKf+f0OaNW/GCuXjJ0/KfK9EJX7z2gko+7nVnEA0p3aaPtbP6cq1Ubbl6CMoPL+Ci3gZ7nYumDqXNc3CtLQ==", + "version": "1.3.101", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.101.tgz", + "integrity": "sha512-kDN8lm4Eew0u1p+h1l3JzoeGgZPQ05qDE0czngnjmfpsH2sOZxVj1hdiCwS5lArpy7ktaLu5JdRnx70MkUzhXw==", "cpu": [ "x64" ], @@ -6602,9 +6619,9 @@ } }, "node_modules/@swc/core-win32-arm64-msvc": { - "version": "1.3.100", - "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.100.tgz", - "integrity": "sha512-PwLADZN6F9cXn4Jw52FeP/MCLVHm8vwouZZSOoOScDtihjY495SSjdPnlosMaRSR4wJQssGwiD/4MbpgQPqbAw==", + "version": "1.3.101", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.101.tgz", + "integrity": "sha512-9Wn8TTLWwJKw63K/S+jjrZb9yoJfJwCE2RV5vPCCWmlMf3U1AXj5XuWOLUX+Rp2sGKau7wZKsvywhheWm+qndQ==", "cpu": [ "arm64" ], @@ -6618,9 +6635,9 @@ } }, "node_modules/@swc/core-win32-ia32-msvc": { - "version": "1.3.100", - "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.100.tgz", - "integrity": "sha512-0f6nicKSLlDKlyPRl2JEmkpBV4aeDfRQg6n8mPqgL7bliZIcDahG0ej+HxgNjZfS3e0yjDxsNRa6sAqWU2Z60A==", + "version": "1.3.101", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.101.tgz", + "integrity": "sha512-onO5KvICRVlu2xmr4//V2je9O2XgS1SGKpbX206KmmjcJhXN5EYLSxW9qgg+kgV5mip+sKTHTAu7IkzkAtElYA==", "cpu": [ "ia32" ], @@ -6634,9 +6651,9 @@ } }, "node_modules/@swc/core-win32-x64-msvc": { - "version": "1.3.100", - "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.100.tgz", - "integrity": "sha512-b7J0rPoMkRTa3XyUGt8PwCaIBuYWsL2DqbirrQKRESzgCvif5iNpqaM6kjIjI/5y5q1Ycv564CB51YDpiS8EtQ==", + "version": "1.3.101", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.101.tgz", + "integrity": "sha512-T3GeJtNQV00YmiVw/88/nxJ/H43CJvFnpvBHCVn17xbahiVUOPOduh3rc9LgAkKiNt/aV8vU3OJR+6PhfMR7UQ==", "cpu": [ "x64" ], @@ -6702,18 +6719,18 @@ } }, "node_modules/@tremor/react": { - "version": "3.11.1", - "resolved": "https://registry.npmjs.org/@tremor/react/-/react-3.11.1.tgz", - "integrity": "sha512-oiBm8vFe0+05RFIHlriSmfZX7BMwgAIFGdvz5kAEbN6G/cGOh2oPkTGG+NPbbk8eyo68f13IT6KfTiMVSEhRSA==", + "version": "3.12.1", + "resolved": "https://registry.npmjs.org/@tremor/react/-/react-3.12.1.tgz", + "integrity": "sha512-SkwNPKB3Z64HMHsm1uR7prqAPWNE0SEatIv8eG/PmktlRayoqZkNdGF/mPpUdzdIcYfPHAYcSYJIuKXmR3/UjQ==", "dependencies": { - "@floating-ui/react": "^0.19.1", - "@headlessui/react": "^1.7.14", + "@floating-ui/react": "^0.19.2", + "@headlessui/react": "^1.7.17", "@headlessui/tailwindcss": "^0.1.3", - "date-fns": "^2.28.0", - "react-day-picker": "^8.7.1", + "date-fns": "^2.30.0", + "react-day-picker": "^8.9.1", "react-transition-group": "^4.4.5", - "recharts": "^2.9.0", - "tailwind-merge": "^1.9.1" + "recharts": "^2.10.3", + "tailwind-merge": "^1.14.0" }, "peerDependencies": { "react": "^18.0.0", @@ -6740,9 +6757,9 @@ } }, "node_modules/@types/babel__generator": { - "version": "7.6.7", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.7.tgz", - "integrity": "sha512-6Sfsq+EaaLrw4RmdFWE9Onp63TOUue71AWb4Gpa6JxzgTYtimbM086WnYTy2U67AofR++QKCo08ZP6pwx8YFHQ==", + "version": "7.6.8", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", + "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", "dev": true, "dependencies": { "@babel/types": "^7.0.0" @@ -6880,9 +6897,9 @@ "dev": true }, "node_modules/@types/eslint": { - "version": "8.44.8", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.8.tgz", - "integrity": "sha512-4K8GavROwhrYl2QXDXm0Rv9epkA8GBFu0EI+XrrnnuCl7u8CWBRusX7fXJfanhZTDWSAL24gDI/UqXyUM0Injw==", + "version": "8.44.9", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.9.tgz", + "integrity": "sha512-6yBxcvwnnYoYT1Uk2d+jvIfsuP4mb2EdIxFnrPABj5a/838qe5bGkNLFOiipX4ULQ7XVQvTxOh7jO+BTAiqsEw==", "dev": true, "dependencies": { "@types/estree": "*", @@ -7017,9 +7034,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.10.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.10.4.tgz", - "integrity": "sha512-D08YG6rr8X90YB56tSIuBaddy/UXAA9RKJoFvrsnogAum/0pmjkgi4+2nx96A330FmioegBWmEYQ+syqCFaveg==", + "version": "20.10.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.10.5.tgz", + "integrity": "sha512-nNPsNE65wjMxEKI93yOP+NPGGBJz/PoN3kZsVLee0XMiJolxSekEVD8wRwBUBqkwc7UWop0edW50yrCQW4CyRw==", "dependencies": { "undici-types": "~5.26.4" } @@ -7069,9 +7086,9 @@ "dev": true }, "node_modules/@types/react": { - "version": "18.2.43", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.43.tgz", - "integrity": "sha512-nvOV01ZdBdd/KW6FahSbcNplt2jCJfyWdTos61RYHV+FVv5L/g9AOX1bmbVcWcLFL8+KHQfh1zVIQrud6ihyQA==", + "version": "18.2.45", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.45.tgz", + "integrity": "sha512-TtAxCNrlrBp8GoeEp1npd5g+d/OejJHFxS3OWmrPBMFaVQMSN0OFySozJio5BHxTuTeug00AVXVAjfDSfk+lUg==", "dependencies": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -7079,9 +7096,9 @@ } }, "node_modules/@types/react-dom": { - "version": "18.2.17", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.17.tgz", - "integrity": "sha512-rvrT/M7Df5eykWFxn6MYt5Pem/Dbyc1N8Y0S9Mrkw2WFCRiqUgw9P7ul2NpwsXCSM1DVdENzdG9J5SreqfAIWg==", + "version": "18.2.18", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.18.tgz", + "integrity": "sha512-TJxDm6OfAX2KJWJdMEVTwWke5Sc/E/RlnPGvGfS0W7+6ocy2xhDVQVh/KvC2Uf7kACs+gDytdusDSdWfWkaNzw==", "dependencies": { "@types/react": "*" } @@ -9025,9 +9042,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001568", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001568.tgz", - "integrity": "sha512-vSUkH84HontZJ88MiNrOau1EBrCqEQYgkC5gIySiDlpsm8sGVrhU7Kx4V6h0tnqaHzIHZv08HlJIwPbL4XL9+A==", + "version": "1.0.30001570", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001570.tgz", + "integrity": "sha512-+3e0ASu4sw1SWaoCtvPeyXp+5PsjigkSt8OXZbF9StH5pQWbxEjLAZE3n8Aup5udop1uRiKA7a4utUk/uoSpUw==", "funding": [ { "type": "opencollective", @@ -10619,9 +10636,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.610", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.610.tgz", - "integrity": "sha512-mqi2oL1mfeHYtOdCxbPQYV/PL7YrQlxbvFEZ0Ee8GbDdShimqt2/S6z2RWqysuvlwdOrQdqvE0KZrBTipAeJzg==", + "version": "1.4.614", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.614.tgz", + "integrity": "sha512-X4ze/9Sc3QWs6h92yerwqv7aB/uU8vCjZcrMjA8N9R1pjMFRe44dLsck5FzLilOYvcXuDn93B+bpGYyufc70gQ==", "dev": true }, "node_modules/elliptic": { @@ -11012,15 +11029,15 @@ } }, "node_modules/eslint": { - "version": "8.55.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.55.0.tgz", - "integrity": "sha512-iyUUAM0PCKj5QpwGfmCAG9XXbZCWsqP/eWAWrG/W0umvjuLRBECwSFdt+rCntju0xEH7teIABPwXpahftIaTdA==", + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz", + "integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.55.0", + "@eslint/js": "8.56.0", "@humanwhocodes/config-array": "^0.11.13", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", @@ -11176,9 +11193,9 @@ } }, "node_modules/eslint-plugin-import": { - "version": "2.29.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.0.tgz", - "integrity": "sha512-QPOO5NO6Odv5lpoTkddtutccQjysJuFxoPS7fAHO+9m9udNHvTCPSAMW9zGAYj8lAIdr40I8yPCdUYrncXtrwg==", + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", + "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", "dev": true, "dependencies": { "array-includes": "^3.1.7", @@ -11197,7 +11214,7 @@ "object.groupby": "^1.0.1", "object.values": "^1.1.7", "semver": "^6.3.1", - "tsconfig-paths": "^3.14.2" + "tsconfig-paths": "^3.15.0" }, "engines": { "node": ">=4" @@ -11240,9 +11257,9 @@ } }, "node_modules/eslint-plugin-import/node_modules/tsconfig-paths": { - "version": "3.14.2", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz", - "integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==", + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", "dev": true, "dependencies": { "@types/json5": "^0.0.29", @@ -12097,9 +12114,9 @@ "dev": true }, "node_modules/flow-parser": { - "version": "0.223.3", - "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.223.3.tgz", - "integrity": "sha512-9KxxDKSB22ovMpSULbOL/QAQGPN6M0YMS3PubQvB0jVc4W7QP6VhasIVic7MzKcJSh0BAVs4J6SZjoH0lDDNlg==", + "version": "0.224.0", + "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.224.0.tgz", + "integrity": "sha512-S1P78o0VLB1FZvkoGSIpaRiiTUQ3xDhm9I4Z1qc3lglmkjehfR2sjM0vhwKS7UC1G12VT4Leb/GGV/KlactqjA==", "dev": true, "engines": { "node": ">=0.4.0" @@ -14411,9 +14428,9 @@ } }, "node_modules/lucide-react": { - "version": "0.294.0", - "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.294.0.tgz", - "integrity": "sha512-V7o0/VECSGbLHn3/1O67FUgBwWB+hmzshrgDVRJQhMh8uj5D3HBuIvhuAmQTtlupILSplwIZg5FTc4tTKMA2SA==", + "version": "0.298.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.298.0.tgz", + "integrity": "sha512-tWoxZ663Zf/n8VxXTHnTJsU/w1ysWT1LORnIL1pzqElFdSqBhWbZeJ3sLdCZ5FpzpbkpkYEtluhuTyG2BTDYNQ==", "peerDependencies": { "react": "^16.5.1 || ^17.0.0 || ^18.0.0" } @@ -14482,9 +14499,9 @@ } }, "node_modules/material-symbols": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/material-symbols/-/material-symbols-0.14.2.tgz", - "integrity": "sha512-liWnRpINHzpP/V7jgBLKXhE9lFany8Y9rzBAHr1CSA1NAjTCAct3FGG3d+GXxOfoWUzK/8qPpiQrtXhPXbzIfA==" + "version": "0.14.3", + "resolved": "https://registry.npmjs.org/material-symbols/-/material-symbols-0.14.3.tgz", + "integrity": "sha512-oys7SbIaPz1sfUCMVYlEE5HJGzh0GMoUK0jCGH7hAqO9iW/b9dnSAeYgOQp2s1ifQP5Y+Q4+Fcujay/ASzvy2w==" }, "node_modules/md5.js": { "version": "1.3.5", @@ -14848,9 +14865,9 @@ "dev": true }, "node_modules/needle": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/needle/-/needle-3.3.0.tgz", - "integrity": "sha512-Kaq820952NOrLY/LVbIhPZeXtCGDBAPVgT0BYnoT3p/Nr3nkGXdvWXXA3zgy7wpAgqRULu9p/NvKiFo6f/12fw==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/needle/-/needle-3.3.1.tgz", + "integrity": "sha512-6k0YULvhpw+RoLNiQCRKOl09Rv1dPLr8hHnVjHqdolKwDrdNyk+Hmrthi4lIGPPz3r39dLx0hsF5s40sZ3Us4Q==", "dev": true, "optional": true, "dependencies": { @@ -17037,9 +17054,9 @@ } }, "node_modules/readable-stream": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.4.2.tgz", - "integrity": "sha512-Lk/fICSyIhodxy1IDK2HazkeGjSmezAWX2egdtJnYhtzKEsBPJowlI6F6LPb5tqIQILrMbx22S5o3GuJavPusA==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.0.tgz", + "integrity": "sha512-AeYh93VyUwnNI/HCB4XdAaP4N/yGgg3rci3ISEUSM0jN95yWpbL9tSuRIwHzCq7e6TzYwJ6Vn7viUYTsfIxBlQ==", "dev": true, "dependencies": { "abort-controller": "^3.0.0", @@ -17163,9 +17180,9 @@ } }, "node_modules/regenerator-runtime": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", - "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==" + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" }, "node_modules/regenerator-transform": { "version": "0.15.2", @@ -18114,12 +18131,12 @@ "dev": true }, "node_modules/storybook": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/storybook/-/storybook-7.6.4.tgz", - "integrity": "sha512-nQhs9XkrroxjqMoBnnToyc6M8ndbmpkOb1qmULO4chtfMy4k0p9Un3K4TJvDaP8c3wPUFGd4ZaJ1hZNVmIl56Q==", + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/storybook/-/storybook-7.6.5.tgz", + "integrity": "sha512-uHPrL+g/0v6iIVtDA8J0uWd3jDZcdr51lCR/vPXTkrCY1uVaFjswzl8EMy5PR05I7jMpKUzkJWZtFbgbh9e1Bw==", "dev": true, "dependencies": { - "@storybook/cli": "7.6.4" + "@storybook/cli": "7.6.5" }, "bin": { "sb": "index.js", @@ -20246,9 +20263,9 @@ "dev": true }, "node_modules/ws": { - "version": "8.15.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.15.0.tgz", - "integrity": "sha512-H/Z3H55mrcrgjFwI+5jKavgXvwQLtfPCUEp6pi35VhoB0pfcHnSoyuTzkBEZpzq49g1193CUEwIvmsjcotenYw==", + "version": "8.15.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.15.1.tgz", + "integrity": "sha512-W5OZiCjXEmk0yZ66ZN82beM5Sz7l7coYxpRkzS+p9PP+ToQry8szKh+61eNktr7EA9DOwvFGhfC605jDHbP6QQ==", "dev": true, "engines": { "node": ">=10.0.0" diff --git a/ui/package.json b/ui/package.json index 4844448845..35fdd5f17d 100644 --- a/ui/package.json +++ b/ui/package.json @@ -14,7 +14,7 @@ "storybook:deploy": "storybook build && touch storybook-static/.nojekyll && rm storybook-static/.gitignore && gh-pages -t -d storybook-static && rm -rf ./storybook-static" }, "dependencies": { - "@grpc/grpc-js": "^1.9.12", + "@grpc/grpc-js": "^1.9.13", "@monaco-editor/react": "^4.6.0", "@prisma/client": "^5.7.0", "@radix-ui/react-checkbox": "^1.0.4", @@ -31,15 +31,15 @@ "@radix-ui/react-toggle": "^1.0.3", "@radix-ui/react-toggle-group": "^1.0.4", "@radix-ui/react-tooltip": "^1.0.7", - "@tremor/react": "^3.11.1", - "@types/node": "^20.10.4", - "@types/react": "^18.2.43", - "@types/react-dom": "^18.2.17", + "@tremor/react": "^3.12.1", + "@types/node": "^20.10.5", + "@types/react": "^18.2.45", + "@types/react-dom": "^18.2.18", "classnames": "^2.3.2", "clsx": "^2.0.0", "long": "^5.2.3", - "lucide-react": "^0.294.0", - "material-symbols": "^0.14.2", + "lucide-react": "^0.298.0", + "material-symbols": "^0.14.3", "moment": "^2.29.4", "moment-timezone": "^0.5.43", "next": "^14.0.4", @@ -55,17 +55,17 @@ "zustand": "^4.4.7" }, "devDependencies": { - "@storybook/addon-essentials": "^7.6.4", - "@storybook/addon-interactions": "^7.6.4", - "@storybook/addon-links": "^7.6.4", + "@storybook/addon-essentials": "^7.6.5", + "@storybook/addon-interactions": "^7.6.5", + "@storybook/addon-links": "^7.6.5", "@storybook/addon-styling": "^1.3.7", "@storybook/blocks": "^7.3.0", - "@storybook/nextjs": "^7.6.4", + "@storybook/nextjs": "^7.6.5", "@storybook/react": "^7.3.0", "@storybook/testing-library": "^0.2.2", "autoprefixer": "^10.4.16", "copy-webpack-plugin": "^11.0.0", - "eslint": "^8.55.0", + "eslint": "^8.56.0", "eslint-config-next": "^14.0.4", "eslint-config-prettier": "^9.1.0", "eslint-plugin-storybook": "^0.6.15", @@ -75,7 +75,7 @@ "prettier": "^3.1.1", "prettier-plugin-organize-imports": "^3.2.4", "prisma": "^5.7.0", - "storybook": "^7.6.4", + "storybook": "^7.6.5", "string-width": "^7.0.0", "tailwindcss": "^3.3.6", "tailwindcss-animate": "^1.0.7", From 860d0a52441b1d8370de7d82d89cf9930bef4466 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Philip=20Dub=C3=A9?= Date: Mon, 18 Dec 2023 15:17:04 +0000 Subject: [PATCH 4/6] Replace gofmt with gofumpt (#835) gofumpt is a stricter superset of gofmt --- .github/workflows/golang-lint.yml | 2 +- flow/.golangci.yml | 2 +- flow/activities/flowable.go | 18 ++++++++---- flow/cmd/api.go | 4 +-- flow/cmd/handler.go | 13 +++++---- flow/cmd/worker.go | 1 - flow/connectors/bigquery/bigquery.go | 17 +++++++---- .../bigquery/merge_statement_generator.go | 2 +- flow/connectors/bigquery/qrep.go | 3 +- flow/connectors/bigquery/qrep_avro_sync.go | 6 ++-- flow/connectors/core.go | 6 ++-- flow/connectors/eventhub/eventhub.go | 3 +- flow/connectors/eventhub/hubmanager.go | 6 ++-- flow/connectors/external_metadata/store.go | 4 +-- flow/connectors/postgres/cdc.go | 4 +-- flow/connectors/postgres/client.go | 21 +++++++++----- flow/connectors/postgres/postgres.go | 18 ++++++++---- .../connectors/postgres/postgres_repl_test.go | 1 - flow/connectors/postgres/qrep.go | 6 ++-- .../postgres/qrep_query_executor.go | 9 ++++-- flow/connectors/postgres/qvalue_convert.go | 6 ++-- flow/connectors/s3/s3.go | 6 ++-- flow/connectors/snowflake/qrep_avro_sync.go | 6 ++-- flow/connectors/snowflake/snowflake.go | 28 +++++++++++++------ flow/connectors/sql/query_executor.go | 9 ++++-- flow/connectors/sqlserver/qrep.go | 6 ++-- flow/connectors/utils/avro/avro_writer.go | 7 +++-- flow/connectors/utils/catalog/env.go | 6 ++-- .../connectors/utils/monitoring/monitoring.go | 24 ++++++++++------ flow/connectors/utils/partition/partition.go | 2 +- flow/e2e/bigquery/peer_flow_bq_test.go | 11 ++++---- flow/e2e/congen.go | 3 +- flow/e2e/s3/cdc_s3_test.go | 4 +-- flow/e2e/s3/s3_helper.go | 1 - flow/e2e/snowflake/peer_flow_sf_test.go | 10 ++++--- flow/e2e/snowflake/qrep_flow_sf_test.go | 1 - flow/e2e/test_utils.go | 6 ++-- flow/shared/constants.go | 6 ++-- flow/shared/random.go | 2 +- flow/shared/signals.go | 3 +- flow/workflows/cdc_flow.go | 3 +- flow/workflows/heartbeat_flow.go | 1 - flow/workflows/qrep_flow.go | 9 ++++-- flow/workflows/setup_flow.go | 6 ++-- flow/workflows/snapshot_flow.go | 3 +- 45 files changed, 197 insertions(+), 118 deletions(-) diff --git a/.github/workflows/golang-lint.yml b/.github/workflows/golang-lint.yml index 803a9e09b2..48a0510b20 100644 --- a/.github/workflows/golang-lint.yml +++ b/.github/workflows/golang-lint.yml @@ -13,7 +13,7 @@ jobs: pull-requests: write strategy: matrix: - runner: [ubicloud-standard-2-ubuntu-2204-arm] + runner: [ubicloud-standard-4-ubuntu-2204-arm] runs-on: ${{ matrix.runner }} steps: - name: checkout diff --git a/flow/.golangci.yml b/flow/.golangci.yml index a359e70310..fa679ccf56 100644 --- a/flow/.golangci.yml +++ b/flow/.golangci.yml @@ -5,7 +5,7 @@ linters: enable: - dogsled - dupl - - gofmt + - gofumpt - gosec - misspell - nakedret diff --git a/flow/activities/flowable.go b/flow/activities/flowable.go index a4a8b21205..69628c28d5 100644 --- a/flow/activities/flowable.go +++ b/flow/activities/flowable.go @@ -211,7 +211,8 @@ func (a *FlowableActivity) recordSlotSizePeriodically( // StartFlow implements StartFlow. func (a *FlowableActivity) StartFlow(ctx context.Context, - input *protos.StartFlowInput) (*model.SyncResponse, error) { + input *protos.StartFlowInput, +) (*model.SyncResponse, error) { activity.RecordHeartbeat(ctx, "starting flow...") conn := input.FlowConnectionConfigs dstConn, err := connectors.GetCDCSyncConnector(ctx, conn.Destination) @@ -658,7 +659,8 @@ func (a *FlowableActivity) replicateQRepPartition(ctx context.Context, } func (a *FlowableActivity) ConsolidateQRepPartitions(ctx context.Context, config *protos.QRepConfig, - runUUID string) error { + runUUID string, +) error { dstConn, err := connectors.GetQRepConsolidateConnector(ctx, config.DestinationPeer) if errors.Is(err, connectors.ErrUnsupportedFunctionality) { return monitoring.UpdateEndTimeForQRepRun(ctx, a.CatalogPool, runUUID) @@ -802,7 +804,8 @@ func (a *FlowableActivity) SendWALHeartbeat(ctx context.Context) error { } func (a *FlowableActivity) QRepWaitUntilNewRows(ctx context.Context, - config *protos.QRepConfig, last *protos.QRepPartition) error { + config *protos.QRepConfig, last *protos.QRepPartition, +) error { if config.SourcePeer.Type != protos.DBType_POSTGRES || last.Range == nil { return nil } @@ -838,7 +841,8 @@ func (a *FlowableActivity) QRepWaitUntilNewRows(ctx context.Context, } func (a *FlowableActivity) RenameTables(ctx context.Context, config *protos.RenameTablesInput) ( - *protos.RenameTablesOutput, error) { + *protos.RenameTablesOutput, error, +) { dstConn, err := connectors.GetCDCSyncConnector(ctx, config.Peer) if err != nil { return nil, fmt.Errorf("failed to get connector: %w", err) @@ -862,7 +866,8 @@ func (a *FlowableActivity) RenameTables(ctx context.Context, config *protos.Rena } func (a *FlowableActivity) CreateTablesFromExisting(ctx context.Context, req *protos.CreateTablesFromExistingInput) ( - *protos.CreateTablesFromExistingOutput, error) { + *protos.CreateTablesFromExistingOutput, error, +) { dstConn, err := connectors.GetCDCSyncConnector(ctx, req.Peer) if err != nil { return nil, fmt.Errorf("failed to get connector: %w", err) @@ -932,7 +937,8 @@ func (a *FlowableActivity) ReplicateXminPartition(ctx context.Context, Range: &protos.PartitionRange{ Range: &protos.PartitionRange_IntRange{ IntRange: &protos.IntPartitionRange{Start: 0, End: int64(numRecords)}, - }}, + }, + }, } } updateErr := monitoring.InitializeQRepRun(ctx, a.CatalogPool, config, runUUID, []*protos.QRepPartition{partitionForMetrics}) diff --git a/flow/cmd/api.go b/flow/cmd/api.go index e008299109..09185a0fc1 100644 --- a/flow/cmd/api.go +++ b/flow/cmd/api.go @@ -45,7 +45,6 @@ func setupGRPCGatewayServer(args *APIServerParams) (*http.Server, error) { grpc.WithBlock(), grpc.WithTransportCredentials(insecure.NewCredentials()), ) - if err != nil { return nil, fmt.Errorf("unable to dial grpc server: %w", err) } @@ -68,7 +67,8 @@ func killExistingHeartbeatFlows( ctx context.Context, tc client.Client, namespace string, - taskQueue string) error { + taskQueue string, +) error { listRes, err := tc.ListWorkflow(ctx, &workflowservice.ListWorkflowExecutionsRequest{ Namespace: namespace, diff --git a/flow/cmd/handler.go b/flow/cmd/handler.go index b12623ec55..9efdc59fb5 100644 --- a/flow/cmd/handler.go +++ b/flow/cmd/handler.go @@ -55,7 +55,8 @@ func schemaForTableIdentifier(tableIdentifier string, peerDBType int32) string { } func (h *FlowRequestHandler) createCdcJobEntry(ctx context.Context, - req *protos.CreateCDCFlowRequest, workflowID string) error { + req *protos.CreateCDCFlowRequest, workflowID string, +) error { sourcePeerID, sourePeerType, srcErr := h.getPeerID(ctx, req.ConnectionConfigs.Source.Name) if srcErr != nil { return fmt.Errorf("unable to get peer id for source peer %s: %w", @@ -86,7 +87,8 @@ func (h *FlowRequestHandler) createCdcJobEntry(ctx context.Context, } func (h *FlowRequestHandler) createQrepJobEntry(ctx context.Context, - req *protos.CreateQRepFlowRequest, workflowID string) error { + req *protos.CreateQRepFlowRequest, workflowID string, +) error { sourcePeerName := req.QrepConfig.SourcePeer.Name sourcePeerID, _, srcErr := h.getPeerID(ctx, sourcePeerName) if srcErr != nil { @@ -117,7 +119,8 @@ func (h *FlowRequestHandler) createQrepJobEntry(ctx context.Context, } func (h *FlowRequestHandler) CreateCDCFlow( - ctx context.Context, req *protos.CreateCDCFlowRequest) (*protos.CreateCDCFlowResponse, error) { + ctx context.Context, req *protos.CreateCDCFlowRequest, +) (*protos.CreateCDCFlowResponse, error) { cfg := req.ConnectionConfigs workflowID := fmt.Sprintf("%s-peerflow-%s", cfg.FlowJobName, uuid.New()) workflowOptions := client.StartWorkflowOptions{ @@ -224,7 +227,8 @@ func (h *FlowRequestHandler) removeFlowEntryInCatalog( } func (h *FlowRequestHandler) CreateQRepFlow( - ctx context.Context, req *protos.CreateQRepFlowRequest) (*protos.CreateQRepFlowResponse, error) { + ctx context.Context, req *protos.CreateQRepFlowRequest, +) (*protos.CreateQRepFlowResponse, error) { cfg := req.QrepConfig workflowID := fmt.Sprintf("%s-qrepflow-%s", cfg.FlowJobName, uuid.New()) workflowOptions := client.StartWorkflowOptions{ @@ -697,5 +701,4 @@ func (h *FlowRequestHandler) DropPeer( return &protos.DropPeerResponse{ Ok: true, }, nil - } diff --git a/flow/cmd/worker.go b/flow/cmd/worker.go index 40d2486277..ba6e0d0e18 100644 --- a/flow/cmd/worker.go +++ b/flow/cmd/worker.go @@ -66,7 +66,6 @@ func setupPyroscope(opts *WorkerOptions) { pyroscope.ProfileBlockDuration, }, }) - if err != nil { log.Fatal(err) } diff --git a/flow/connectors/bigquery/bigquery.go b/flow/connectors/bigquery/bigquery.go index 9b32e30b43..233f319a02 100644 --- a/flow/connectors/bigquery/bigquery.go +++ b/flow/connectors/bigquery/bigquery.go @@ -259,7 +259,8 @@ func (c *BigQueryConnector) WaitForTableReady(tblName string) error { // ReplayTableSchemaDeltas changes a destination table to match the schema at source // This could involve adding or dropping multiple columns. func (c *BigQueryConnector) ReplayTableSchemaDeltas(flowJobName string, - schemaDeltas []*protos.TableSchemaDelta) error { + schemaDeltas []*protos.TableSchemaDelta, +) error { for _, schemaDelta := range schemaDeltas { if schemaDelta == nil || len(schemaDelta.AddedColumns) == 0 { continue @@ -390,7 +391,8 @@ func (c *BigQueryConnector) GetLastNormalizeBatchID(jobName string) (int64, erro } func (c *BigQueryConnector) getDistinctTableNamesInBatch(flowJobName string, syncBatchID int64, - normalizeBatchID int64) ([]string, error) { + normalizeBatchID int64, +) ([]string, error) { rawTableName := c.getRawTableName(flowJobName) // Prepare the query to retrieve distinct tables in that batch @@ -426,7 +428,8 @@ func (c *BigQueryConnector) getDistinctTableNamesInBatch(flowJobName string, syn } func (c *BigQueryConnector) getTableNametoUnchangedCols(flowJobName string, syncBatchID int64, - normalizeBatchID int64) (map[string][]string, error) { + normalizeBatchID int64, +) (map[string][]string, error) { rawTableName := c.getRawTableName(flowJobName) // Prepare the query to retrieve distinct tables in that batch @@ -795,7 +798,7 @@ func (c *BigQueryConnector) NormalizeRecords(req *model.NormalizeRecordsRequest) mergeStmts := mergeGen.generateMergeStmts() stmts = append(stmts, mergeStmts...) } - //update metadata to make the last normalized batch id to the recent last sync batch id. + // update metadata to make the last normalized batch id to the recent last sync batch id. updateMetadataStmt := fmt.Sprintf( "UPDATE %s.%s SET normalize_batch_id=%d WHERE mirror_job_name = '%s';", c.datasetID, MirrorJobsTable, syncBatchID, req.FlowJobName) @@ -894,7 +897,8 @@ func (c *BigQueryConnector) CreateRawTable(req *protos.CreateRawTableInput) (*pr // getUpdateMetadataStmt updates the metadata tables for a given job. func (c *BigQueryConnector) getUpdateMetadataStmt(jobName string, lastSyncedCheckpointID int64, - batchID int64) (string, error) { + batchID int64, +) (string, error) { hasJob, err := c.metadataHasJob(jobName) if err != nil { return "", fmt.Errorf("failed to check if job exists: %w", err) @@ -1089,7 +1093,8 @@ func (c *BigQueryConnector) RenameTables(req *protos.RenameTablesInput) (*protos } func (c *BigQueryConnector) CreateTablesFromExisting(req *protos.CreateTablesFromExistingInput) ( - *protos.CreateTablesFromExistingOutput, error) { + *protos.CreateTablesFromExistingOutput, error, +) { for newTable, existingTable := range req.NewToExistingTableMapping { c.logger.Info(fmt.Sprintf("creating table '%s' similar to '%s'", newTable, existingTable)) diff --git a/flow/connectors/bigquery/merge_statement_generator.go b/flow/connectors/bigquery/merge_statement_generator.go index 7e35aadc44..2a37ef5ecb 100644 --- a/flow/connectors/bigquery/merge_statement_generator.go +++ b/flow/connectors/bigquery/merge_statement_generator.go @@ -61,7 +61,7 @@ func (m *mergeStmtGenerator) generateFlattenedCTE() string { switch qvalue.QValueKind(colType) { case qvalue.QValueKindJSON: - //if the type is JSON, then just extract JSON + // if the type is JSON, then just extract JSON castStmt = fmt.Sprintf("CAST(JSON_VALUE(_peerdb_data, '$.%s') AS %s) AS `%s`", colName, bqType, colName) // expecting data in BASE64 format diff --git a/flow/connectors/bigquery/qrep.go b/flow/connectors/bigquery/qrep.go index 90bb871a75..a353d432eb 100644 --- a/flow/connectors/bigquery/qrep.go +++ b/flow/connectors/bigquery/qrep.go @@ -50,7 +50,8 @@ func (c *BigQueryConnector) SyncQRepRecords( } func (c *BigQueryConnector) replayTableSchemaDeltasQRep(config *protos.QRepConfig, partition *protos.QRepPartition, - srcSchema *model.QRecordSchema) (*bigquery.TableMetadata, error) { + srcSchema *model.QRecordSchema, +) (*bigquery.TableMetadata, error) { destTable := config.DestinationTableIdentifier bqTable := c.client.Dataset(c.datasetID).Table(destTable) dstTableMetadata, err := bqTable.Metadata(c.ctx) diff --git a/flow/connectors/bigquery/qrep_avro_sync.go b/flow/connectors/bigquery/qrep_avro_sync.go index d60577ec74..9bb01157fe 100644 --- a/flow/connectors/bigquery/qrep_avro_sync.go +++ b/flow/connectors/bigquery/qrep_avro_sync.go @@ -25,7 +25,8 @@ type QRepAvroSyncMethod struct { } func NewQRepAvroSyncMethod(connector *BigQueryConnector, gcsBucket string, - flowJobName string) *QRepAvroSyncMethod { + flowJobName string, +) *QRepAvroSyncMethod { return &QRepAvroSyncMethod{ connector: connector, gcsBucket: gcsBucket, @@ -179,7 +180,8 @@ type AvroSchema struct { } func DefineAvroSchema(dstTableName string, - dstTableMetadata *bigquery.TableMetadata) (*model.QRecordAvroSchemaDefinition, error) { + dstTableMetadata *bigquery.TableMetadata, +) (*model.QRecordAvroSchemaDefinition, error) { avroFields := []AvroField{} nullableFields := make(map[string]struct{}) diff --git a/flow/connectors/core.go b/flow/connectors/core.go index f7a518a6a5..707a7f0b11 100644 --- a/flow/connectors/core.go +++ b/flow/connectors/core.go @@ -161,7 +161,8 @@ func GetCDCSyncConnector(ctx context.Context, config *protos.Peer) (CDCSyncConne } func GetCDCNormalizeConnector(ctx context.Context, - config *protos.Peer) (CDCNormalizeConnector, error) { + config *protos.Peer, +) (CDCNormalizeConnector, error) { inner := config.Config switch inner.(type) { case *protos.Peer_PostgresConfig: @@ -246,7 +247,8 @@ func GetConnector(ctx context.Context, peer *protos.Peer) (Connector, error) { } func GetQRepConsolidateConnector(ctx context.Context, - config *protos.Peer) (QRepConsolidateConnector, error) { + config *protos.Peer, +) (QRepConsolidateConnector, error) { inner := config.Config switch inner.(type) { case *protos.Peer_SnowflakeConfig: diff --git a/flow/connectors/eventhub/eventhub.go b/flow/connectors/eventhub/eventhub.go index 01b8510e42..4be57309f2 100644 --- a/flow/connectors/eventhub/eventhub.go +++ b/flow/connectors/eventhub/eventhub.go @@ -281,7 +281,8 @@ func (c *EventHubConnector) CreateRawTable(req *protos.CreateRawTableInput) (*pr func (c *EventHubConnector) SetupNormalizedTables( req *protos.SetupNormalizedTableBatchInput) ( - *protos.SetupNormalizedTableBatchOutput, error) { + *protos.SetupNormalizedTableBatchOutput, error, +) { c.logger.Info("normalization for event hub is a no-op") return &protos.SetupNormalizedTableBatchOutput{ TableExistsMapping: nil, diff --git a/flow/connectors/eventhub/hubmanager.go b/flow/connectors/eventhub/hubmanager.go index 725414b287..803816b819 100644 --- a/flow/connectors/eventhub/hubmanager.go +++ b/flow/connectors/eventhub/hubmanager.go @@ -42,7 +42,8 @@ func NewEventHubManager( } func (m *EventHubManager) GetOrCreateHubClient(ctx context.Context, name ScopedEventhub) ( - *azeventhubs.ProducerClient, error) { + *azeventhubs.ProducerClient, error, +) { ehConfig, ok := m.peerConfig.Get(name.PeerName) if !ok { return nil, fmt.Errorf("eventhub '%s' not configured", name) @@ -118,7 +119,8 @@ func (m *EventHubManager) Close(ctx context.Context) error { } func (m *EventHubManager) CreateEventDataBatch(ctx context.Context, name ScopedEventhub) ( - *azeventhubs.EventDataBatch, error) { + *azeventhubs.EventDataBatch, error, +) { hub, err := m.GetOrCreateHubClient(ctx, name) if err != nil { return nil, err diff --git a/flow/connectors/external_metadata/store.go b/flow/connectors/external_metadata/store.go index e2127b3099..ef2cf5e45b 100644 --- a/flow/connectors/external_metadata/store.go +++ b/flow/connectors/external_metadata/store.go @@ -26,7 +26,8 @@ type PostgresMetadataStore struct { } func NewPostgresMetadataStore(ctx context.Context, pgConfig *protos.PostgresConfig, - schemaName string) (*PostgresMetadataStore, error) { + schemaName string, +) (*PostgresMetadataStore, error) { var storePool *pgxpool.Pool var poolErr error if pgConfig == nil { @@ -222,7 +223,6 @@ func (p *PostgresMetadataStore) IncrementID(jobName string) error { UPDATE `+p.schemaName+`.`+lastSyncStateTableName+` SET sync_batch_id=sync_batch_id+1 WHERE job_name=$1 `, jobName) - if err != nil { p.logger.Error("failed to increment sync batch id", slog.Any("error", err)) return err diff --git a/flow/connectors/postgres/cdc.go b/flow/connectors/postgres/cdc.go index 20b5a2f2e5..031ae5a8e3 100644 --- a/flow/connectors/postgres/cdc.go +++ b/flow/connectors/postgres/cdc.go @@ -349,7 +349,6 @@ func (p *PostgresCDCSource) consumeStream( p.logger.Debug(fmt.Sprintf("XLogData => WALStart %s ServerWALEnd %s ServerTime %s\n", xld.WALStart, xld.ServerWALEnd, xld.ServerTime)) rec, err := p.processMessage(records, xld) - if err != nil { return fmt.Errorf("error processing message: %w", err) } @@ -812,7 +811,8 @@ func (p *PostgresCDCSource) processRelationMessage( } func (p *PostgresCDCSource) recToTablePKey(req *model.PullRecordsRequest, - rec model.Record) (*model.TableWithPkey, error) { + rec model.Record, +) (*model.TableWithPkey, error) { tableName := rec.GetTableName() pkeyColsMerged := make([]byte, 0) diff --git a/flow/connectors/postgres/client.go b/flow/connectors/postgres/client.go index 1eec3c5bf7..dbae60b9e6 100644 --- a/flow/connectors/postgres/client.go +++ b/flow/connectors/postgres/client.go @@ -347,7 +347,8 @@ func getRawTableIdentifier(jobName string) string { } func generateCreateTableSQLForNormalizedTable(sourceTableIdentifier string, - sourceTableSchema *protos.TableSchema) string { + sourceTableSchema *protos.TableSchema, +) string { createTableSQLArray := make([]string, 0, len(sourceTableSchema.Columns)) for columnName, genericColumnType := range sourceTableSchema.Columns { createTableSQLArray = append(createTableSQLArray, fmt.Sprintf("\"%s\" %s,", columnName, @@ -443,7 +444,8 @@ func (c *PostgresConnector) majorVersionCheck(majorVersion int) (bool, error) { } func (c *PostgresConnector) updateSyncMetadata(flowJobName string, lastCP int64, syncBatchID int64, - syncRecordsTx pgx.Tx) error { + syncRecordsTx pgx.Tx, +) error { jobMetadataExists, err := c.jobMetadataExistsTx(syncRecordsTx, flowJobName) if err != nil { return fmt.Errorf("failed to get sync status for flow job: %w", err) @@ -469,7 +471,8 @@ func (c *PostgresConnector) updateSyncMetadata(flowJobName string, lastCP int64, } func (c *PostgresConnector) updateNormalizeMetadata(flowJobName string, normalizeBatchID int64, - normalizeRecordsTx pgx.Tx) error { + normalizeRecordsTx pgx.Tx, +) error { jobMetadataExists, err := c.jobMetadataExistsTx(normalizeRecordsTx, flowJobName) if err != nil { return fmt.Errorf("failed to get sync status for flow job: %w", err) @@ -489,7 +492,8 @@ func (c *PostgresConnector) updateNormalizeMetadata(flowJobName string, normaliz } func (c *PostgresConnector) getTableNametoUnchangedCols(flowJobName string, syncBatchID int64, - normalizeBatchID int64) (map[string][]string, error) { + normalizeBatchID int64, +) (map[string][]string, error) { rawTableIdentifier := getRawTableIdentifier(flowJobName) rows, err := c.pool.Query(c.ctx, fmt.Sprintf(getTableNameToUnchangedToastColsSQL, c.metadataSchema, @@ -518,7 +522,8 @@ func (c *PostgresConnector) getTableNametoUnchangedCols(flowJobName string, sync } func (c *PostgresConnector) generateNormalizeStatements(destinationTableIdentifier string, - unchangedToastColumns []string, rawTableIdentifier string, supportsMerge bool) []string { + unchangedToastColumns []string, rawTableIdentifier string, supportsMerge bool, +) []string { if supportsMerge { return []string{c.generateMergeStatement(destinationTableIdentifier, unchangedToastColumns, rawTableIdentifier)} } @@ -528,7 +533,8 @@ func (c *PostgresConnector) generateNormalizeStatements(destinationTableIdentifi } func (c *PostgresConnector) generateFallbackStatements(destinationTableIdentifier string, - rawTableIdentifier string) []string { + rawTableIdentifier string, +) []string { normalizedTableSchema := c.tableSchemaMapping[destinationTableIdentifier] columnNames := make([]string, 0, len(normalizedTableSchema.Columns)) flattenedCastsSQLArray := make([]string, 0, len(normalizedTableSchema.Columns)) @@ -576,7 +582,8 @@ func (c *PostgresConnector) generateFallbackStatements(destinationTableIdentifie } func (c *PostgresConnector) generateMergeStatement(destinationTableIdentifier string, unchangedToastColumns []string, - rawTableIdentifier string) string { + rawTableIdentifier string, +) string { normalizedTableSchema := c.tableSchemaMapping[destinationTableIdentifier] columnNames := maps.Keys(normalizedTableSchema.Columns) for i, columnName := range columnNames { diff --git a/flow/connectors/postgres/postgres.go b/flow/connectors/postgres/postgres.go index cf2a92b5b2..da65b09c0d 100644 --- a/flow/connectors/postgres/postgres.go +++ b/flow/connectors/postgres/postgres.go @@ -352,8 +352,10 @@ func (c *PostgresConnector) SyncRecords(req *model.SyncRecordsRequest) (*model.S }() syncedRecordsCount, err := syncRecordsTx.CopyFrom(c.ctx, pgx.Identifier{c.metadataSchema, rawTableIdentifier}, - []string{"_peerdb_uid", "_peerdb_timestamp", "_peerdb_destination_table_name", "_peerdb_data", - "_peerdb_record_type", "_peerdb_match_data", "_peerdb_batch_id", "_peerdb_unchanged_toast_columns"}, + []string{ + "_peerdb_uid", "_peerdb_timestamp", "_peerdb_destination_table_name", "_peerdb_data", + "_peerdb_record_type", "_peerdb_match_data", "_peerdb_batch_id", "_peerdb_unchanged_toast_columns", + }, pgx.CopyFromRows(records)) if err != nil { return nil, fmt.Errorf("error syncing records: %w", err) @@ -523,7 +525,8 @@ func (c *PostgresConnector) CreateRawTable(req *protos.CreateRawTableInput) (*pr // GetTableSchema returns the schema for a table, implementing the Connector interface. func (c *PostgresConnector) GetTableSchema( - req *protos.GetTableSchemaBatchInput) (*protos.GetTableSchemaBatchOutput, error) { + req *protos.GetTableSchemaBatchInput, +) (*protos.GetTableSchemaBatchOutput, error) { res := make(map[string]*protos.TableSchema) for _, tableName := range req.TableIdentifiers { tableSchema, err := c.getTableSchemaForTable(tableName) @@ -596,7 +599,8 @@ func (c *PostgresConnector) getTableSchemaForTable( // SetupNormalizedTable sets up a normalized table, implementing the Connector interface. func (c *PostgresConnector) SetupNormalizedTables(req *protos.SetupNormalizedTableBatchInput) ( - *protos.SetupNormalizedTableBatchOutput, error) { + *protos.SetupNormalizedTableBatchOutput, error, +) { tableExistsMapping := make(map[string]bool) // Postgres is cool and supports transactional DDL. So we use a transaction. createNormalizedTablesTx, err := c.pool.Begin(c.ctx) @@ -657,7 +661,8 @@ func (c *PostgresConnector) InitializeTableSchema(req map[string]*protos.TableSc // ReplayTableSchemaDelta changes a destination table to match the schema at source // This could involve adding or dropping multiple columns. func (c *PostgresConnector) ReplayTableSchemaDeltas(flowJobName string, - schemaDeltas []*protos.TableSchemaDelta) error { + schemaDeltas []*protos.TableSchemaDelta, +) error { // Postgres is cool and supports transactional DDL. So we use a transaction. tableSchemaModifyTx, err := c.pool.Begin(c.ctx) if err != nil { @@ -736,7 +741,8 @@ func (c *PostgresConnector) EnsurePullability(req *protos.EnsurePullabilityBatch tableIdentifierMapping[tableName] = &protos.TableIdentifier{ TableIdentifier: &protos.TableIdentifier_PostgresTableIdentifier{ PostgresTableIdentifier: &protos.PostgresTableIdentifier{ - RelId: relID}, + RelId: relID, + }, }, } utils.RecordHeartbeatWithRecover(c.ctx, fmt.Sprintf("ensured pullability table %s", tableName)) diff --git a/flow/connectors/postgres/postgres_repl_test.go b/flow/connectors/postgres/postgres_repl_test.go index 07ddd2743c..b50a1f89fc 100644 --- a/flow/connectors/postgres/postgres_repl_test.go +++ b/flow/connectors/postgres/postgres_repl_test.go @@ -105,7 +105,6 @@ func (suite *PostgresReplicationSnapshotTestSuite) TearDownSuite() { } func (suite *PostgresReplicationSnapshotTestSuite) TestSimpleSlotCreation() { - tables := map[string]string{ "pgpeer_repl_test.test_1": "test_1_dst", } diff --git a/flow/connectors/postgres/qrep.go b/flow/connectors/postgres/qrep.go index 69641a7415..be8daa903d 100644 --- a/flow/connectors/postgres/qrep.go +++ b/flow/connectors/postgres/qrep.go @@ -268,7 +268,8 @@ func (c *PostgresConnector) getMinMaxValues( } func (c *PostgresConnector) CheckForUpdatedMaxValue(config *protos.QRepConfig, - last *protos.QRepPartition) (bool, error) { + last *protos.QRepPartition, +) (bool, error) { tx, err := c.pool.Begin(c.ctx) if err != nil { return false, fmt.Errorf("unable to begin transaction for getting max value: %w", err) @@ -303,7 +304,8 @@ func (c *PostgresConnector) CheckForUpdatedMaxValue(config *protos.QRepConfig, func (c *PostgresConnector) PullQRepRecords( config *protos.QRepConfig, - partition *protos.QRepPartition) (*model.QRecordBatch, error) { + partition *protos.QRepPartition, +) (*model.QRecordBatch, error) { partitionIdLog := slog.String(string(shared.PartitionIDKey), partition.PartitionId) if partition.FullTablePartition { c.logger.Info("pulling full table partition", partitionIdLog) diff --git a/flow/connectors/postgres/qrep_query_executor.go b/flow/connectors/postgres/qrep_query_executor.go index 08f9f93488..2118cec70a 100644 --- a/flow/connectors/postgres/qrep_query_executor.go +++ b/flow/connectors/postgres/qrep_query_executor.go @@ -30,7 +30,8 @@ type QRepQueryExecutor struct { } func NewQRepQueryExecutor(pool *pgxpool.Pool, ctx context.Context, - flowJobName string, partitionID string) *QRepQueryExecutor { + flowJobName string, partitionID string, +) *QRepQueryExecutor { return &QRepQueryExecutor{ pool: pool, ctx: ctx, @@ -44,7 +45,8 @@ func NewQRepQueryExecutor(pool *pgxpool.Pool, ctx context.Context, } func NewQRepQueryExecutorSnapshot(pool *pgxpool.Pool, ctx context.Context, snapshot string, - flowJobName string, partitionID string) (*QRepQueryExecutor, error) { + flowJobName string, partitionID string, +) (*QRepQueryExecutor, error) { qrepLog := slog.Group("qrep-metadata", slog.String(string(shared.FlowNameKey), flowJobName), slog.String(string(shared.PartitionIDKey), partitionID)) slog.Info("Declared new qrep executor for snapshot", qrepLog) @@ -421,7 +423,8 @@ func (qe *QRepQueryExecutor) ExecuteAndProcessQueryStreamWithTx( } func mapRowToQRecord(row pgx.Rows, fds []pgconn.FieldDescription, - customTypeMap map[uint32]string) (*model.QRecord, error) { + customTypeMap map[uint32]string, +) (*model.QRecord, error) { // make vals an empty array of QValue of size len(fds) record := model.NewQRecord(len(fds)) diff --git a/flow/connectors/postgres/qvalue_convert.go b/flow/connectors/postgres/qvalue_convert.go index c4f2931e06..4b27f9c689 100644 --- a/flow/connectors/postgres/qvalue_convert.go +++ b/flow/connectors/postgres/qvalue_convert.go @@ -348,8 +348,10 @@ func parseFieldFromQValueKind(qvalueKind qvalue.QValueKind, value interface{}) ( case qvalue.QValueKindPoint: xCoord := value.(pgtype.Point).P.X yCoord := value.(pgtype.Point).P.Y - val = qvalue.QValue{Kind: qvalue.QValueKindPoint, - Value: fmt.Sprintf("POINT(%f %f)", xCoord, yCoord)} + val = qvalue.QValue{ + Kind: qvalue.QValueKindPoint, + Value: fmt.Sprintf("POINT(%f %f)", xCoord, yCoord), + } default: // log.Warnf("unhandled QValueKind => %v, parsing as string", qvalueKind) textVal, ok := value.(string) diff --git a/flow/connectors/s3/s3.go b/flow/connectors/s3/s3.go index 6707d96200..96d16930cc 100644 --- a/flow/connectors/s3/s3.go +++ b/flow/connectors/s3/s3.go @@ -30,7 +30,8 @@ type S3Connector struct { } func NewS3Connector(ctx context.Context, - config *protos.S3Config) (*S3Connector, error) { + config *protos.S3Config, +) (*S3Connector, error) { keyID := "" if config.AccessKeyId != nil { keyID = *config.AccessKeyId @@ -237,7 +238,8 @@ func (c *S3Connector) SyncRecords(req *model.SyncRecordsRequest) (*model.SyncRes func (c *S3Connector) SetupNormalizedTables(req *protos.SetupNormalizedTableBatchInput) ( *protos.SetupNormalizedTableBatchOutput, - error) { + error, +) { c.logger.Info("SetupNormalizedTables for S3 is a no-op") return nil, nil } diff --git a/flow/connectors/snowflake/qrep_avro_sync.go b/flow/connectors/snowflake/qrep_avro_sync.go index a765ac9e60..8c926acb94 100644 --- a/flow/connectors/snowflake/qrep_avro_sync.go +++ b/flow/connectors/snowflake/qrep_avro_sync.go @@ -30,7 +30,8 @@ type SnowflakeAvroSyncMethod struct { func NewSnowflakeAvroSyncMethod( config *protos.QRepConfig, - connector *SnowflakeConnector) *SnowflakeAvroSyncMethod { + connector *SnowflakeConnector, +) *SnowflakeAvroSyncMethod { return &SnowflakeAvroSyncMethod{ config: config, connector: connector, @@ -422,7 +423,8 @@ func NewSnowflakeAvroWriteHandler( } func (s *SnowflakeAvroWriteHandler) HandleAppendMode( - copyInfo *CopyInfo) error { + copyInfo *CopyInfo, +) error { //nolint:gosec copyCmd := fmt.Sprintf("COPY INTO %s(%s) FROM (SELECT %s FROM @%s) %s", s.dstTableName, copyInfo.columnsSQL, copyInfo.transformationSQL, s.stage, strings.Join(s.copyOpts, ",")) diff --git a/flow/connectors/snowflake/snowflake.go b/flow/connectors/snowflake/snowflake.go index 9920cdad36..90b29e4765 100644 --- a/flow/connectors/snowflake/snowflake.go +++ b/flow/connectors/snowflake/snowflake.go @@ -113,7 +113,8 @@ type UnchangedToastColumnResult struct { } func NewSnowflakeConnector(ctx context.Context, - snowflakeProtoConfig *protos.SnowflakeConfig) (*SnowflakeConnector, error) { + snowflakeProtoConfig *protos.SnowflakeConfig, +) (*SnowflakeConnector, error) { PrivateKeyRSA, err := shared.DecodePKCS8PrivateKey([]byte(snowflakeProtoConfig.PrivateKey), snowflakeProtoConfig.Password) if err != nil { @@ -225,7 +226,8 @@ func (c *SnowflakeConnector) SetupMetadataTables() error { // only used for testing atm. doesn't return info about pkey or ReplicaIdentity [which is PG specific anyway]. func (c *SnowflakeConnector) GetTableSchema( - req *protos.GetTableSchemaBatchInput) (*protos.GetTableSchemaBatchOutput, error) { + req *protos.GetTableSchemaBatchInput, +) (*protos.GetTableSchemaBatchOutput, error) { res := make(map[string]*protos.TableSchema) for _, tableName := range req.TableIdentifiers { tableSchema, err := c.getTableSchemaForTable(strings.ToUpper(tableName)) @@ -352,7 +354,8 @@ func (c *SnowflakeConnector) GetLastNormalizeBatchID(jobName string) (int64, err } func (c *SnowflakeConnector) getDistinctTableNamesInBatch(flowJobName string, syncBatchID int64, - normalizeBatchID int64) ([]string, error) { + normalizeBatchID int64, +) ([]string, error) { rawTableIdentifier := getRawTableIdentifier(flowJobName) rows, err := c.database.QueryContext(c.ctx, fmt.Sprintf(getDistinctDestinationTableNames, c.metadataSchema, @@ -374,7 +377,8 @@ func (c *SnowflakeConnector) getDistinctTableNamesInBatch(flowJobName string, sy } func (c *SnowflakeConnector) getTableNametoUnchangedCols(flowJobName string, syncBatchID int64, - normalizeBatchID int64) (map[string][]string, error) { + normalizeBatchID int64, +) (map[string][]string, error) { rawTableIdentifier := getRawTableIdentifier(flowJobName) rows, err := c.database.QueryContext(c.ctx, fmt.Sprintf(getTableNametoUnchangedColsSQL, c.metadataSchema, @@ -400,7 +404,8 @@ func (c *SnowflakeConnector) getTableNametoUnchangedCols(flowJobName string, syn } func (c *SnowflakeConnector) SetupNormalizedTables( - req *protos.SetupNormalizedTableBatchInput) (*protos.SetupNormalizedTableBatchOutput, error) { + req *protos.SetupNormalizedTableBatchInput, +) (*protos.SetupNormalizedTableBatchOutput, error) { tableExistsMapping := make(map[string]bool) for tableIdentifier, tableSchema := range req.TableNameSchemaMapping { normalizedTableNameComponents, err := parseTableName(tableIdentifier) @@ -439,7 +444,8 @@ func (c *SnowflakeConnector) InitializeTableSchema(req map[string]*protos.TableS // ReplayTableSchemaDeltas changes a destination table to match the schema at source // This could involve adding or dropping multiple columns. func (c *SnowflakeConnector) ReplayTableSchemaDeltas(flowJobName string, - schemaDeltas []*protos.TableSchemaDelta) error { + schemaDeltas []*protos.TableSchemaDelta, +) error { tableSchemaModifyTx, err := c.database.Begin() if err != nil { return fmt.Errorf("error starting transaction for schema modification: %w", @@ -927,6 +933,7 @@ func (c *SnowflakeConnector) jobMetadataExists(jobName string) (bool, error) { } return result.Bool, nil } + func (c *SnowflakeConnector) jobMetadataExistsTx(tx *sql.Tx, jobName string) (bool, error) { var result pgtype.Bool err := tx.QueryRowContext(c.ctx, @@ -938,7 +945,8 @@ func (c *SnowflakeConnector) jobMetadataExistsTx(tx *sql.Tx, jobName string) (bo } func (c *SnowflakeConnector) updateSyncMetadata(flowJobName string, lastCP int64, - syncBatchID int64, syncRecordsTx *sql.Tx) error { + syncBatchID int64, syncRecordsTx *sql.Tx, +) error { jobMetadataExists, err := c.jobMetadataExistsTx(syncRecordsTx, flowJobName) if err != nil { return fmt.Errorf("failed to get sync status for flow job: %w", err) @@ -1015,7 +1023,8 @@ and updating the other columns. */ func (c *SnowflakeConnector) generateUpdateStatements( syncedAtCol string, softDeleteCol string, softDelete bool, - allCols []string, unchangedToastCols []string) []string { + allCols []string, unchangedToastCols []string, +) []string { updateStmts := make([]string, 0, len(unchangedToastCols)) for _, cols := range unchangedToastCols { @@ -1138,7 +1147,8 @@ func (c *SnowflakeConnector) RenameTables(req *protos.RenameTablesInput) (*proto } func (c *SnowflakeConnector) CreateTablesFromExisting(req *protos.CreateTablesFromExistingInput) ( - *protos.CreateTablesFromExistingOutput, error) { + *protos.CreateTablesFromExistingOutput, error, +) { createTablesFromExistingTx, err := c.database.BeginTx(c.ctx, nil) if err != nil { return nil, fmt.Errorf("unable to begin transaction for rename tables: %w", err) diff --git a/flow/connectors/sql/query_executor.go b/flow/connectors/sql/query_executor.go index 02bc14bbfa..82a13b691f 100644 --- a/flow/connectors/sql/query_executor.go +++ b/flow/connectors/sql/query_executor.go @@ -133,7 +133,8 @@ func (g *GenericSQLQueryExecutor) CountRows(schemaName string, tableName string) func (g *GenericSQLQueryExecutor) CountNonNullRows( schemaName string, tableName string, - columnName string) (int64, error) { + columnName string, +) (int64, error) { var count pgtype.Int8 err := g.db.QueryRowx("SELECT COUNT(CASE WHEN " + columnName + " IS NOT NULL THEN 1 END) AS non_null_count FROM " + schemaName + "." + tableName).Scan(&count) @@ -265,7 +266,8 @@ func (g *GenericSQLQueryExecutor) processRows(rows *sqlx.Rows) (*model.QRecordBa } func (g *GenericSQLQueryExecutor) ExecuteAndProcessQuery( - query string, args ...interface{}) (*model.QRecordBatch, error) { + query string, args ...interface{}, +) (*model.QRecordBatch, error) { rows, err := g.db.QueryxContext(g.ctx, query, args...) if err != nil { return nil, err @@ -276,7 +278,8 @@ func (g *GenericSQLQueryExecutor) ExecuteAndProcessQuery( } func (g *GenericSQLQueryExecutor) NamedExecuteAndProcessQuery( - query string, arg interface{}) (*model.QRecordBatch, error) { + query string, arg interface{}, +) (*model.QRecordBatch, error) { rows, err := g.db.NamedQueryContext(g.ctx, query, arg) if err != nil { return nil, err diff --git a/flow/connectors/sqlserver/qrep.go b/flow/connectors/sqlserver/qrep.go index fbebd4f201..cd91b1fc9a 100644 --- a/flow/connectors/sqlserver/qrep.go +++ b/flow/connectors/sqlserver/qrep.go @@ -15,7 +15,8 @@ import ( ) func (c *SQLServerConnector) GetQRepPartitions( - config *protos.QRepConfig, last *protos.QRepPartition) ([]*protos.QRepPartition, error) { + config *protos.QRepConfig, last *protos.QRepPartition, +) ([]*protos.QRepPartition, error) { if config.WatermarkTable == "" { c.logger.Info("watermark table is empty, doing full table refresh") return []*protos.QRepPartition{ @@ -152,7 +153,8 @@ func (c *SQLServerConnector) GetQRepPartitions( } func (c *SQLServerConnector) PullQRepRecords( - config *protos.QRepConfig, partition *protos.QRepPartition) (*model.QRecordBatch, error) { + config *protos.QRepConfig, partition *protos.QRepPartition, +) (*model.QRecordBatch, error) { // Build the query to pull records within the range from the source table // Be sure to order the results by the watermark column to ensure consistency across pulls query, err := BuildQuery(config.Query) diff --git a/flow/connectors/utils/avro/avro_writer.go b/flow/connectors/utils/avro/avro_writer.go index 1f44f4b7ae..ce70801658 100644 --- a/flow/connectors/utils/avro/avro_writer.go +++ b/flow/connectors/utils/avro/avro_writer.go @@ -22,8 +22,10 @@ import ( uber_atomic "go.uber.org/atomic" ) -type AvroCompressionCodec int64 -type AvroStorageLocation int64 +type ( + AvroCompressionCodec int64 + AvroStorageLocation int64 +) const ( CompressNone AvroCompressionCodec = iota @@ -214,7 +216,6 @@ func (p *peerDBOCFWriter) WriteRecordsToS3(bucketName, key string, s3Creds utils Key: aws.String(key), Body: r, }) - if err != nil { slog.Error("failed to upload file: ", slog.Any("error", err)) return nil, fmt.Errorf("failed to upload file: %w", err) diff --git a/flow/connectors/utils/catalog/env.go b/flow/connectors/utils/catalog/env.go index ec99905092..cdd85535b9 100644 --- a/flow/connectors/utils/catalog/env.go +++ b/flow/connectors/utils/catalog/env.go @@ -11,8 +11,10 @@ import ( "github.com/jackc/pgx/v5/pgxpool" ) -var poolMutex = &sync.Mutex{} -var pool *pgxpool.Pool +var ( + poolMutex = &sync.Mutex{} + pool *pgxpool.Pool +) func GetCatalogConnectionPoolFromEnv() (*pgxpool.Pool, error) { var err error diff --git a/flow/connectors/utils/monitoring/monitoring.go b/flow/connectors/utils/monitoring/monitoring.go index 857a33c398..7815372277 100644 --- a/flow/connectors/utils/monitoring/monitoring.go +++ b/flow/connectors/utils/monitoring/monitoring.go @@ -34,7 +34,8 @@ func InitializeCDCFlow(ctx context.Context, pool *pgxpool.Pool, flowJobName stri } func UpdateLatestLSNAtSourceForCDCFlow(ctx context.Context, pool *pgxpool.Pool, flowJobName string, - latestLSNAtSource pglogrepl.LSN) error { + latestLSNAtSource pglogrepl.LSN, +) error { _, err := pool.Exec(ctx, "UPDATE peerdb_stats.cdc_flows SET latest_lsn_at_source=$1 WHERE flow_name=$2", uint64(latestLSNAtSource), flowJobName) @@ -45,7 +46,8 @@ func UpdateLatestLSNAtSourceForCDCFlow(ctx context.Context, pool *pgxpool.Pool, } func UpdateLatestLSNAtTargetForCDCFlow(ctx context.Context, pool *pgxpool.Pool, flowJobName string, - latestLSNAtTarget pglogrepl.LSN) error { + latestLSNAtTarget pglogrepl.LSN, +) error { _, err := pool.Exec(ctx, "UPDATE peerdb_stats.cdc_flows SET latest_lsn_at_target=$1 WHERE flow_name=$2", uint64(latestLSNAtTarget), flowJobName) @@ -56,7 +58,8 @@ func UpdateLatestLSNAtTargetForCDCFlow(ctx context.Context, pool *pgxpool.Pool, } func AddCDCBatchForFlow(ctx context.Context, pool *pgxpool.Pool, flowJobName string, - batchInfo CDCBatchInfo) error { + batchInfo CDCBatchInfo, +) error { _, err := pool.Exec(ctx, `INSERT INTO peerdb_stats.cdc_batches(flow_name,batch_id,rows_in_batch,batch_start_lsn,batch_end_lsn, start_time) VALUES($1,$2,$3,$4,$5,$6) ON CONFLICT DO NOTHING`, @@ -102,7 +105,8 @@ func UpdateEndTimeForCDCBatch( } func AddCDCBatchTablesForFlow(ctx context.Context, pool *pgxpool.Pool, flowJobName string, - batchID int64, tableNameRowsMapping map[string]uint32) error { + batchID int64, tableNameRowsMapping map[string]uint32, +) error { insertBatchTablesTx, err := pool.Begin(ctx) if err != nil { return fmt.Errorf("error while beginning transaction for inserting statistics into cdc_batch_table: %w", err) @@ -217,7 +221,8 @@ func AppendSlotSizeInfo( } func addPartitionToQRepRun(ctx context.Context, pool *pgxpool.Pool, flowJobName string, - runUUID string, partition *protos.QRepPartition) error { + runUUID string, partition *protos.QRepPartition, +) error { if partition.Range == nil && partition.FullTablePartition { slog.Info("partition"+partition.PartitionId+ " is a full table partition. Metrics logging is skipped.", @@ -286,7 +291,8 @@ func UpdateStartTimeForPartition( } func UpdatePullEndTimeAndRowsForPartition(ctx context.Context, pool *pgxpool.Pool, runUUID string, - partition *protos.QRepPartition, rowsInPartition int64) error { + partition *protos.QRepPartition, rowsInPartition int64, +) error { _, err := pool.Exec(ctx, `UPDATE peerdb_stats.qrep_partitions SET pull_end_time=$1,rows_in_partition=$2 WHERE run_uuid=$3 AND partition_uuid=$4`, time.Now(), rowsInPartition, runUUID, partition.PartitionId) if err != nil { @@ -296,7 +302,8 @@ func UpdatePullEndTimeAndRowsForPartition(ctx context.Context, pool *pgxpool.Poo } func UpdateEndTimeForPartition(ctx context.Context, pool *pgxpool.Pool, runUUID string, - partition *protos.QRepPartition) error { + partition *protos.QRepPartition, +) error { _, err := pool.Exec(ctx, `UPDATE peerdb_stats.qrep_partitions SET end_time=$1 WHERE run_uuid=$2 AND partition_uuid=$3`, time.Now(), runUUID, partition.PartitionId) if err != nil { @@ -306,7 +313,8 @@ func UpdateEndTimeForPartition(ctx context.Context, pool *pgxpool.Pool, runUUID } func UpdateRowsSyncedForPartition(ctx context.Context, pool *pgxpool.Pool, rowsSynced int, runUUID string, - partition *protos.QRepPartition) error { + partition *protos.QRepPartition, +) error { _, err := pool.Exec(ctx, `UPDATE peerdb_stats.qrep_partitions SET rows_synced=$1 WHERE run_uuid=$2 AND partition_uuid=$3`, rowsSynced, runUUID, partition.PartitionId) if err != nil { diff --git a/flow/connectors/utils/partition/partition.go b/flow/connectors/utils/partition/partition.go index 1c4f4381aa..cb2f326a66 100644 --- a/flow/connectors/utils/partition/partition.go +++ b/flow/connectors/utils/partition/partition.go @@ -54,7 +54,7 @@ func compareValues(prevEnd interface{}, start interface{}) int { return 0 } } - case uint32: //xmin + case uint32: // xmin if prevEnd.(uint32) < v { return -1 } else if prevEnd.(uint32) > v { diff --git a/flow/e2e/bigquery/peer_flow_bq_test.go b/flow/e2e/bigquery/peer_flow_bq_test.go index 70a27b52da..de3ddae7e5 100644 --- a/flow/e2e/bigquery/peer_flow_bq_test.go +++ b/flow/e2e/bigquery/peer_flow_bq_test.go @@ -461,7 +461,7 @@ func (s PeerFlowE2ETestSuiteBQ) Test_Toast_Advance_1_BQ() { // and execute a transaction touching toast columns go func() { e2e.SetupCDCFlowStatusQuery(env, connectionGen) - //complex transaction with random DMLs on a table with toast columns + // complex transaction with random DMLs on a table with toast columns _, err = s.pool.Exec(context.Background(), fmt.Sprintf(` BEGIN; INSERT INTO %s(t1,t2,k) SELECT random_string(9000),random_string(9000), @@ -534,7 +534,7 @@ func (s PeerFlowE2ETestSuiteBQ) Test_Toast_Advance_2_BQ() { // and execute a transaction touching toast columns go func() { e2e.SetupCDCFlowStatusQuery(env, connectionGen) - //complex transaction with random DMLs on a table with toast columns + // complex transaction with random DMLs on a table with toast columns _, err = s.pool.Exec(context.Background(), fmt.Sprintf(` BEGIN; INSERT INTO %s(t1,k) SELECT random_string(9000), @@ -661,7 +661,6 @@ func (s PeerFlowE2ETestSuiteBQ) Test_Types_BQ() { require.NoError(s.t, err) limits := peerflow.CDCFlowLimits{ - ExitAfterRecords: 1, MaxBatchSize: 100, } @@ -697,10 +696,12 @@ func (s PeerFlowE2ETestSuiteBQ) Test_Types_BQ() { // allow only continue as new error require.Contains(s.t, err.Error(), "continue as new") - noNulls, err := s.bqHelper.CheckNull(dstTableName, []string{"c41", "c1", "c2", "c3", "c4", + noNulls, err := s.bqHelper.CheckNull(dstTableName, []string{ + "c41", "c1", "c2", "c3", "c4", "c6", "c39", "c40", "id", "c9", "c11", "c12", "c13", "c14", "c15", "c16", "c17", "c18", "c21", "c22", "c23", "c24", "c28", "c29", "c30", "c31", "c33", "c34", "c35", "c36", - "c37", "c38", "c7", "c8", "c32", "c42", "c43", "c44"}) + "c37", "c38", "c7", "c8", "c32", "c42", "c43", "c44", + }) if err != nil { fmt.Println("error %w", err) } diff --git a/flow/e2e/congen.go b/flow/e2e/congen.go index 3355571057..ac28879f45 100644 --- a/flow/e2e/congen.go +++ b/flow/e2e/congen.go @@ -217,7 +217,8 @@ type QRepFlowConnectionGenerationConfig struct { // GenerateQRepConfig generates a qrep config for testing. func (c *QRepFlowConnectionGenerationConfig) GenerateQRepConfig( - query string, watermark string) (*protos.QRepConfig, error) { + query string, watermark string, +) (*protos.QRepConfig, error) { ret := &protos.QRepConfig{} ret.FlowJobName = c.FlowJobName ret.WatermarkTable = c.WatermarkTable diff --git a/flow/e2e/s3/cdc_s3_test.go b/flow/e2e/s3/cdc_s3_test.go index 478877ef4b..bfa19f866b 100644 --- a/flow/e2e/s3/cdc_s3_test.go +++ b/flow/e2e/s3/cdc_s3_test.go @@ -52,7 +52,7 @@ func (s *PeerFlowE2ETestSuiteS3) Test_Complete_Simple_Flow_S3() { go func() { e2e.SetupCDCFlowStatusQuery(env, connectionGen) s.NoError(err) - //insert 20 rows + // insert 20 rows for i := 1; i <= 20; i++ { testKey := fmt.Sprintf("test_key_%d", i) testValue := fmt.Sprintf("test_value_%d", i) @@ -124,7 +124,7 @@ func (s *PeerFlowE2ETestSuiteS3) Test_Complete_Simple_Flow_GCS_Interop() { go func() { e2e.SetupCDCFlowStatusQuery(env, connectionGen) s.NoError(err) - //insert 20 rows + // insert 20 rows for i := 1; i <= 20; i++ { testKey := fmt.Sprintf("test_key_%d", i) testValue := fmt.Sprintf("test_value_%d", i) diff --git a/flow/e2e/s3/s3_helper.go b/flow/e2e/s3/s3_helper.go index e6a4fc7ad7..249745dd3c 100644 --- a/flow/e2e/s3/s3_helper.go +++ b/flow/e2e/s3/s3_helper.go @@ -90,7 +90,6 @@ func (h *S3TestHelper) ListAllFiles( ctx context.Context, jobName string, ) ([]*s3.Object, error) { - Bucket := h.bucketName Prefix := fmt.Sprintf("%s/%s/", h.prefix, jobName) files, err := h.client.ListObjects(&s3.ListObjectsInput{ diff --git a/flow/e2e/snowflake/peer_flow_sf_test.go b/flow/e2e/snowflake/peer_flow_sf_test.go index 037bd10eda..3e6f0c2bc0 100644 --- a/flow/e2e/snowflake/peer_flow_sf_test.go +++ b/flow/e2e/snowflake/peer_flow_sf_test.go @@ -455,7 +455,7 @@ func (s PeerFlowE2ETestSuiteSF) Test_Toast_Advance_1_SF() { // and execute a transaction touching toast columns go func() { e2e.SetupCDCFlowStatusQuery(env, connectionGen) - //complex transaction with random DMLs on a table with toast columns + // complex transaction with random DMLs on a table with toast columns _, err = s.pool.Exec(context.Background(), fmt.Sprintf(` BEGIN; INSERT INTO %s (t1,t2,k) SELECT random_string(9000),random_string(9000), @@ -527,7 +527,7 @@ func (s PeerFlowE2ETestSuiteSF) Test_Toast_Advance_2_SF() { // and execute a transaction touching toast columns go func() { e2e.SetupCDCFlowStatusQuery(env, connectionGen) - //complex transaction with random DMLs on a table with toast columns + // complex transaction with random DMLs on a table with toast columns _, err = s.pool.Exec(context.Background(), fmt.Sprintf(` BEGIN; INSERT INTO %s (t1,k) SELECT random_string(9000), @@ -688,10 +688,12 @@ func (s PeerFlowE2ETestSuiteSF) Test_Types_SF() { // allow only continue as new error require.Contains(s.t, err.Error(), "continue as new") - noNulls, err := s.sfHelper.CheckNull("test_types_sf", []string{"c41", "c1", "c2", "c3", "c4", + noNulls, err := s.sfHelper.CheckNull("test_types_sf", []string{ + "c41", "c1", "c2", "c3", "c4", "c6", "c39", "c40", "id", "c9", "c11", "c12", "c13", "c14", "c15", "c16", "c17", "c18", "c21", "c22", "c23", "c24", "c28", "c29", "c30", "c31", "c33", "c34", "c35", "c36", - "c37", "c38", "c7", "c8", "c32", "c42", "c43", "c44", "c45", "c46"}) + "c37", "c38", "c7", "c8", "c32", "c42", "c43", "c44", "c45", "c46", + }) if err != nil { fmt.Println("error %w", err) } diff --git a/flow/e2e/snowflake/qrep_flow_sf_test.go b/flow/e2e/snowflake/qrep_flow_sf_test.go index 456541e2ca..49ed3614b9 100644 --- a/flow/e2e/snowflake/qrep_flow_sf_test.go +++ b/flow/e2e/snowflake/qrep_flow_sf_test.go @@ -22,7 +22,6 @@ func (s PeerFlowE2ETestSuiteSF) setupSourceTable(tableName string, numRows int) func (s PeerFlowE2ETestSuiteSF) setupSFDestinationTable(dstTable string) { schema := e2e.GetOwnersSchema() err := s.sfHelper.CreateTable(dstTable, schema) - // fail if table creation fails if err != nil { require.FailNow(s.t, "unable to create table on snowflake", err) diff --git a/flow/e2e/test_utils.go b/flow/e2e/test_utils.go index 0d6e434457..fea19ab808 100644 --- a/flow/e2e/test_utils.go +++ b/flow/e2e/test_utils.go @@ -64,7 +64,8 @@ func RegisterWorkflowsAndActivities(env *testsuite.TestWorkflowEnvironment, t *t } func SetupCDCFlowStatusQuery(env *testsuite.TestWorkflowEnvironment, - connectionGen FlowConnectionGenerationConfig) { + connectionGen FlowConnectionGenerationConfig, +) { // wait for PeerFlowStatusQuery to finish setup // sleep for 5 second to allow the workflow to start time.Sleep(5 * time.Second) @@ -93,7 +94,8 @@ func SetupCDCFlowStatusQuery(env *testsuite.TestWorkflowEnvironment, func NormalizeFlowCountQuery(env *testsuite.TestWorkflowEnvironment, connectionGen FlowConnectionGenerationConfig, - minCount int) { + minCount int, +) { // wait for PeerFlowStatusQuery to finish setup // sleep for 5 second to allow the workflow to start time.Sleep(5 * time.Second) diff --git a/flow/shared/constants.go b/flow/shared/constants.go index 8379b6718f..8589b55487 100644 --- a/flow/shared/constants.go +++ b/flow/shared/constants.go @@ -15,8 +15,10 @@ const ( const MirrorNameSearchAttribute = "MirrorName" -type CDCFlowSignal int64 -type ContextKey string +type ( + CDCFlowSignal int64 + ContextKey string +) const ( NoopSignal CDCFlowSignal = iota diff --git a/flow/shared/random.go b/flow/shared/random.go index 9565c34c4d..7ef3c8e5dc 100644 --- a/flow/shared/random.go +++ b/flow/shared/random.go @@ -30,7 +30,7 @@ func RandomUInt64() (uint64, error) { func RandomString(n int) string { const alphanum = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" - var bytes = make([]byte, n) + bytes := make([]byte, n) _, err := rand.Read(bytes) if err != nil { return "temp" diff --git a/flow/shared/signals.go b/flow/shared/signals.go index 91e6303e90..2097ba95c5 100644 --- a/flow/shared/signals.go +++ b/flow/shared/signals.go @@ -5,7 +5,8 @@ import ( ) func FlowSignalHandler(activeSignal CDCFlowSignal, - v CDCFlowSignal, logger log.Logger) CDCFlowSignal { + v CDCFlowSignal, logger log.Logger, +) CDCFlowSignal { if v == ShutdownSignal { logger.Info("received shutdown signal") return v diff --git a/flow/workflows/cdc_flow.go b/flow/workflows/cdc_flow.go index 3e6cce1030..a2cb9a388e 100644 --- a/flow/workflows/cdc_flow.go +++ b/flow/workflows/cdc_flow.go @@ -428,8 +428,7 @@ func CDCFlowWorkflowWithConfig( state.SyncFlowErrors = append(state.SyncFlowErrors, err.Error()) } else { for i := range modifiedSrcTables { - cfg.TableNameSchemaMapping[modifiedDstTables[i]] = - getModifiedSchemaRes.TableNameSchemaMapping[modifiedSrcTables[i]] + cfg.TableNameSchemaMapping[modifiedDstTables[i]] = getModifiedSchemaRes.TableNameSchemaMapping[modifiedSrcTables[i]] } } } diff --git a/flow/workflows/heartbeat_flow.go b/flow/workflows/heartbeat_flow.go index 80e89745d9..1c99900b71 100644 --- a/flow/workflows/heartbeat_flow.go +++ b/flow/workflows/heartbeat_flow.go @@ -8,7 +8,6 @@ import ( // HeartbeatFlowWorkflow is the workflow that sets up heartbeat sending. func HeartbeatFlowWorkflow(ctx workflow.Context) error { - ctx = workflow.WithActivityOptions(ctx, workflow.ActivityOptions{ StartToCloseTimeout: 7 * 24 * time.Hour, }) diff --git a/flow/workflows/qrep_flow.go b/flow/workflows/qrep_flow.go index 5f267079e1..2373427c8e 100644 --- a/flow/workflows/qrep_flow.go +++ b/flow/workflows/qrep_flow.go @@ -72,7 +72,8 @@ func NewQRepFlowExecution(ctx workflow.Context, config *protos.QRepConfig, runUU // NewQRepFlowExecution creates a new instance of QRepFlowExecution. func NewQRepPartitionFlowExecution(ctx workflow.Context, - config *protos.QRepConfig, runUUID string) *QRepPartitionFlowExecution { + config *protos.QRepConfig, runUUID string, +) *QRepPartitionFlowExecution { return &QRepPartitionFlowExecution{ config: config, flowExecutionID: workflow.GetInfo(ctx).WorkflowExecution.ID, @@ -161,7 +162,8 @@ func (q *QRepFlowExecution) GetPartitions( // ReplicatePartitions replicates the partition batch. func (q *QRepPartitionFlowExecution) ReplicatePartitions(ctx workflow.Context, - partitions *protos.QRepPartitionBatch) error { + partitions *protos.QRepPartitionBatch, +) error { ctx = workflow.WithActivityOptions(ctx, workflow.ActivityOptions{ StartToCloseTimeout: 24 * 5 * time.Hour, HeartbeatTimeout: 5 * time.Minute, @@ -194,7 +196,8 @@ func (q *QRepFlowExecution) getPartitionWorkflowID(ctx workflow.Context) (string // startChildWorkflow starts a single child workflow. func (q *QRepFlowExecution) startChildWorkflow( ctx workflow.Context, - partitions *protos.QRepPartitionBatch) (workflow.ChildWorkflowFuture, error) { + partitions *protos.QRepPartitionBatch, +) (workflow.ChildWorkflowFuture, error) { wid, err := q.getPartitionWorkflowID(ctx) if err != nil { return nil, fmt.Errorf("failed to get child workflow ID: %w", err) diff --git a/flow/workflows/setup_flow.go b/flow/workflows/setup_flow.go index 9604efd0fa..ab8168191c 100644 --- a/flow/workflows/setup_flow.go +++ b/flow/workflows/setup_flow.go @@ -164,7 +164,8 @@ func (s *SetupFlowExecution) createRawTable( // fetchTableSchemaAndSetupNormalizedTables fetches the table schema for the source table and // sets up the normalized tables on the destination peer. func (s *SetupFlowExecution) fetchTableSchemaAndSetupNormalizedTables( - ctx workflow.Context, flowConnectionConfigs *protos.FlowConnectionConfigs) (map[string]*protos.TableSchema, error) { + ctx workflow.Context, flowConnectionConfigs *protos.FlowConnectionConfigs, +) (map[string]*protos.TableSchema, error) { s.logger.Info("fetching table schema for peer flow - ", s.CDCFlowName) ctx = workflow.WithActivityOptions(ctx, workflow.ActivityOptions{ @@ -270,7 +271,8 @@ func (s *SetupFlowExecution) executeSetupFlow( // SetupFlowWorkflow is the workflow that sets up the flow. func SetupFlowWorkflow(ctx workflow.Context, - config *protos.FlowConnectionConfigs) (*protos.FlowConnectionConfigs, error) { + config *protos.FlowConnectionConfigs, +) (*protos.FlowConnectionConfigs, error) { tblNameMapping := make(map[string]string) for _, v := range config.TableMappings { tblNameMapping[v.SourceTableIdentifier] = v.DestinationTableIdentifier diff --git a/flow/workflows/snapshot_flow.go b/flow/workflows/snapshot_flow.go index 8765bf7f6c..527fde5720 100644 --- a/flow/workflows/snapshot_flow.go +++ b/flow/workflows/snapshot_flow.go @@ -88,7 +88,6 @@ func (s *SnapshotFlowExecution) cloneTable( snapshotName string, mapping *protos.TableMapping, ) error { - flowName := s.config.FlowJobName cloneLog := slog.Group("clone-log", slog.String(string(shared.FlowNameKey), flowName), @@ -229,7 +228,7 @@ func SnapshotFlowWorkflow(ctx workflow.Context, config *protos.FlowConnectionCon logger: logger, } - var replCtx = ctx + replCtx := ctx replCtx = workflow.WithValue(replCtx, shared.FlowNameKey, config.FlowJobName) if config.DoInitialCopy { sessionOpts := &workflow.SessionOptions{ From 5fc57e6d2f18706067057ac5b0fb32670d2631af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Philip=20Dub=C3=A9?= Date: Mon, 18 Dec 2023 15:26:45 +0000 Subject: [PATCH 5/6] Flatten QRecordSchema Fields (#836) Reduces pointer indirection --- flow/connectors/bigquery/bigquery.go | 2 +- flow/connectors/postgres/qrep_query_executor.go | 4 ++-- flow/connectors/snowflake/avro_file_writer_test.go | 4 ++-- flow/connectors/sql/query_executor.go | 8 ++++---- flow/connectors/utils/stream.go | 2 +- flow/e2e/bigquery/bigquery_helper.go | 8 ++++---- flow/e2e/sqlserver/qrep_flow_sqlserver_test.go | 2 +- flow/e2e/test_utils.go | 2 +- flow/model/qschema.go | 4 ++-- 9 files changed, 18 insertions(+), 18 deletions(-) diff --git a/flow/connectors/bigquery/bigquery.go b/flow/connectors/bigquery/bigquery.go index 233f319a02..7c2d37a489 100644 --- a/flow/connectors/bigquery/bigquery.go +++ b/flow/connectors/bigquery/bigquery.go @@ -515,7 +515,7 @@ func (c *BigQueryConnector) syncRecordsViaAvro( tableNameRowsMapping := make(map[string]uint32) recordStream := model.NewQRecordStream(1 << 20) err := recordStream.SetSchema(&model.QRecordSchema{ - Fields: []*model.QField{ + Fields: []model.QField{ { Name: "_peerdb_uid", Type: qvalue.QValueKindString, diff --git a/flow/connectors/postgres/qrep_query_executor.go b/flow/connectors/postgres/qrep_query_executor.go index 2118cec70a..e25ceef09f 100644 --- a/flow/connectors/postgres/qrep_query_executor.go +++ b/flow/connectors/postgres/qrep_query_executor.go @@ -101,7 +101,7 @@ func (qe *QRepQueryExecutor) executeQueryInTx(tx pgx.Tx, cursorName string, fetc // FieldDescriptionsToSchema converts a slice of pgconn.FieldDescription to a QRecordSchema. func (qe *QRepQueryExecutor) fieldDescriptionsToSchema(fds []pgconn.FieldDescription) *model.QRecordSchema { - qfields := make([]*model.QField, len(fds)) + qfields := make([]model.QField, len(fds)) for i, fd := range fds { cname := fd.Name ctype := postgresOIDToQValueKind(fd.DataTypeOID) @@ -119,7 +119,7 @@ func (qe *QRepQueryExecutor) fieldDescriptionsToSchema(fds []pgconn.FieldDescrip // there isn't a way to know if a column is nullable or not // TODO fix this. cnullable := true - qfields[i] = &model.QField{ + qfields[i] = model.QField{ Name: cname, Type: ctype, Nullable: cnullable, diff --git a/flow/connectors/snowflake/avro_file_writer_test.go b/flow/connectors/snowflake/avro_file_writer_test.go index 76b70f478f..e4733cebec 100644 --- a/flow/connectors/snowflake/avro_file_writer_test.go +++ b/flow/connectors/snowflake/avro_file_writer_test.go @@ -86,7 +86,7 @@ func generateRecords( numKinds := len(allQValueKinds) schema := &model.QRecordSchema{ - Fields: make([]*model.QField, numKinds), + Fields: make([]model.QField, numKinds), } // Create sample records @@ -97,7 +97,7 @@ func generateRecords( } for i, kind := range allQValueKinds { - schema.Fields[i] = &model.QField{ + schema.Fields[i] = model.QField{ Name: string(kind), Type: kind, Nullable: nullable, diff --git a/flow/connectors/sql/query_executor.go b/flow/connectors/sql/query_executor.go index 82a13b691f..0d7fd177d2 100644 --- a/flow/connectors/sql/query_executor.go +++ b/flow/connectors/sql/query_executor.go @@ -141,15 +141,15 @@ func (g *GenericSQLQueryExecutor) CountNonNullRows( return count.Int64, err } -func (g *GenericSQLQueryExecutor) columnTypeToQField(ct *sql.ColumnType) (*model.QField, error) { +func (g *GenericSQLQueryExecutor) columnTypeToQField(ct *sql.ColumnType) (model.QField, error) { qvKind, ok := g.dbtypeToQValueKind[ct.DatabaseTypeName()] if !ok { - return nil, fmt.Errorf("unsupported database type %s", ct.DatabaseTypeName()) + return model.QField{}, fmt.Errorf("unsupported database type %s", ct.DatabaseTypeName()) } nullable, ok := ct.Nullable() - return &model.QField{ + return model.QField{ Name: ct.Name(), Type: qvKind, Nullable: ok && nullable, @@ -163,7 +163,7 @@ func (g *GenericSQLQueryExecutor) processRows(rows *sqlx.Rows) (*model.QRecordBa } // Convert dbColTypes to QFields - qfields := make([]*model.QField, len(dbColTypes)) + qfields := make([]model.QField, len(dbColTypes)) for i, ct := range dbColTypes { qfield, err := g.columnTypeToQField(ct) if err != nil { diff --git a/flow/connectors/utils/stream.go b/flow/connectors/utils/stream.go index 2ef78d33ce..e753001934 100644 --- a/flow/connectors/utils/stream.go +++ b/flow/connectors/utils/stream.go @@ -12,7 +12,7 @@ import ( func RecordsToRawTableStream(req *model.RecordsToStreamRequest) (*model.RecordsToStreamResponse, error) { recordStream := model.NewQRecordStream(1 << 16) err := recordStream.SetSchema(&model.QRecordSchema{ - Fields: []*model.QField{ + Fields: []model.QField{ { Name: "_peerdb_uid", Type: qvalue.QValueKindString, diff --git a/flow/e2e/bigquery/bigquery_helper.go b/flow/e2e/bigquery/bigquery_helper.go index f3508d033e..a89de8dfc3 100644 --- a/flow/e2e/bigquery/bigquery_helper.go +++ b/flow/e2e/bigquery/bigquery_helper.go @@ -270,13 +270,13 @@ func toQValue(bqValue bigquery.Value) (qvalue.QValue, error) { } } -func bqFieldSchemaToQField(fieldSchema *bigquery.FieldSchema) (*model.QField, error) { +func bqFieldSchemaToQField(fieldSchema *bigquery.FieldSchema) (model.QField, error) { qValueKind, err := peer_bq.BigQueryTypeToQValueKind(fieldSchema.Type) if err != nil { - return nil, err + return model.QField{}, err } - return &model.QField{ + return model.QField{ Name: fieldSchema.Name, Type: qValueKind, Nullable: !fieldSchema.Required, @@ -285,7 +285,7 @@ func bqFieldSchemaToQField(fieldSchema *bigquery.FieldSchema) (*model.QField, er // bqSchemaToQRecordSchema converts a bigquery schema to a QRecordSchema. func bqSchemaToQRecordSchema(schema bigquery.Schema) (*model.QRecordSchema, error) { - var fields []*model.QField + var fields []model.QField for _, fieldSchema := range schema { qField, err := bqFieldSchemaToQField(fieldSchema) if err != nil { diff --git a/flow/e2e/sqlserver/qrep_flow_sqlserver_test.go b/flow/e2e/sqlserver/qrep_flow_sqlserver_test.go index ab15c0862d..2d327458af 100644 --- a/flow/e2e/sqlserver/qrep_flow_sqlserver_test.go +++ b/flow/e2e/sqlserver/qrep_flow_sqlserver_test.go @@ -120,7 +120,7 @@ func (s *PeerFlowE2ETestSuiteSQLServer) setupPGDestinationTable(tableName string func getSimpleTableSchema() *model.QRecordSchema { return &model.QRecordSchema{ - Fields: []*model.QField{ + Fields: []model.QField{ {Name: "id", Type: qvalue.QValueKindString, Nullable: true}, {Name: "card_id", Type: qvalue.QValueKindString, Nullable: true}, {Name: "v_from", Type: qvalue.QValueKindTimestamp, Nullable: true}, diff --git a/flow/e2e/test_utils.go b/flow/e2e/test_utils.go index fea19ab808..abd0076d54 100644 --- a/flow/e2e/test_utils.go +++ b/flow/e2e/test_utils.go @@ -323,7 +323,7 @@ func RunXminFlowWorkflow(env *testsuite.TestWorkflowEnvironment, config *protos. func GetOwnersSchema() *model.QRecordSchema { return &model.QRecordSchema{ - Fields: []*model.QField{ + Fields: []model.QField{ {Name: "id", Type: qvalue.QValueKindString, Nullable: true}, {Name: "card_id", Type: qvalue.QValueKindString, Nullable: true}, {Name: "from", Type: qvalue.QValueKindTimestamp, Nullable: true}, diff --git a/flow/model/qschema.go b/flow/model/qschema.go index 10de9664a9..5081b10d12 100644 --- a/flow/model/qschema.go +++ b/flow/model/qschema.go @@ -13,11 +13,11 @@ type QField struct { } type QRecordSchema struct { - Fields []*QField + Fields []QField } // NewQRecordSchema creates a new QRecordSchema. -func NewQRecordSchema(fields []*QField) *QRecordSchema { +func NewQRecordSchema(fields []QField) *QRecordSchema { return &QRecordSchema{ Fields: fields, } From 52a013c2ee21e2ac97f97a4e9d9ddc3e92e8f8dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Philip=20Dub=C3=A9?= Date: Mon, 18 Dec 2023 15:36:20 +0000 Subject: [PATCH 6/6] Pass QRecord around by value (#837) A QRecord is 3 integers & a pointer, mostly held in slices for QRecordBatch --- flow/connectors/bigquery/bigquery.go | 4 +-- .../postgres/qrep_query_executor.go | 26 +++++++++---------- .../snowflake/avro_file_writer_test.go | 4 +-- flow/connectors/sql/query_executor.go | 2 +- flow/connectors/utils/avro/avro_writer.go | 3 +-- flow/connectors/utils/stream.go | 16 ++++++------ flow/e2e/bigquery/bigquery_helper.go | 2 +- flow/model/conversion_avro.go | 4 +-- flow/model/qrecord.go | 6 ++--- flow/model/qrecord_batch.go | 10 +++---- flow/model/qrecord_stream.go | 14 +++++----- flow/model/qrecord_test.go | 20 +++++++------- 12 files changed, 55 insertions(+), 56 deletions(-) diff --git a/flow/connectors/bigquery/bigquery.go b/flow/connectors/bigquery/bigquery.go index 7c2d37a489..6806445f3d 100644 --- a/flow/connectors/bigquery/bigquery.go +++ b/flow/connectors/bigquery/bigquery.go @@ -690,8 +690,8 @@ func (c *BigQueryConnector) syncRecordsViaAvro( Kind: qvalue.QValueKindInt64, Value: syncBatchID, } - recordStream.Records <- &model.QRecordOrError{ - Record: &model.QRecord{ + recordStream.Records <- model.QRecordOrError{ + Record: model.QRecord{ NumEntries: 10, Entries: entries[:], }, diff --git a/flow/connectors/postgres/qrep_query_executor.go b/flow/connectors/postgres/qrep_query_executor.go index e25ceef09f..75e258e70d 100644 --- a/flow/connectors/postgres/qrep_query_executor.go +++ b/flow/connectors/postgres/qrep_query_executor.go @@ -133,7 +133,7 @@ func (qe *QRepQueryExecutor) ProcessRows( fieldDescriptions []pgconn.FieldDescription, ) (*model.QRecordBatch, error) { // Initialize the record slice - records := make([]*model.QRecord, 0) + records := make([]model.QRecord, 0) qe.logger.Info("Processing rows") // Iterate over the rows for rows.Next() { @@ -173,13 +173,13 @@ func (qe *QRepQueryExecutor) processRowsStream( for rows.Next() { record, err := mapRowToQRecord(rows, fieldDescriptions, qe.customTypeMap) if err != nil { - stream.Records <- &model.QRecordOrError{ + stream.Records <- model.QRecordOrError{ Err: fmt.Errorf("failed to map row to QRecord: %w", err), } return 0, fmt.Errorf("failed to map row to QRecord: %w", err) } - stream.Records <- &model.QRecordOrError{ + stream.Records <- model.QRecordOrError{ Record: record, Err: nil, } @@ -214,7 +214,7 @@ func (qe *QRepQueryExecutor) processFetchedRows( ) (int, error) { rows, err := qe.executeQueryInTx(tx, cursorName, fetchSize) if err != nil { - stream.Records <- &model.QRecordOrError{ + stream.Records <- model.QRecordOrError{ Err: err, } qe.logger.Error("[pg_query_executor] failed to execute query in tx", @@ -239,7 +239,7 @@ func (qe *QRepQueryExecutor) processFetchedRows( rows.Close() if rows.Err() != nil { - stream.Records <- &model.QRecordOrError{ + stream.Records <- model.QRecordOrError{ Err: rows.Err(), } qe.logger.Error("[pg_query_executor] row iteration failed", @@ -275,7 +275,7 @@ func (qe *QRepQueryExecutor) ExecuteAndProcessQuery( } batch := &model.QRecordBatch{ NumRecords: 0, - Records: make([]*model.QRecord, 0), + Records: make([]model.QRecord, 0), Schema: schema.Schema, } for record := range stream.Records { @@ -356,7 +356,7 @@ func (qe *QRepQueryExecutor) ExecuteAndProcessQueryStreamWithTx( if qe.snapshot != "" { _, err = tx.Exec(qe.ctx, fmt.Sprintf("SET TRANSACTION SNAPSHOT '%s'", qe.snapshot)) if err != nil { - stream.Records <- &model.QRecordOrError{ + stream.Records <- model.QRecordOrError{ Err: fmt.Errorf("failed to set snapshot: %w", err), } qe.logger.Error("[pg_query_executor] failed to set snapshot", @@ -367,7 +367,7 @@ func (qe *QRepQueryExecutor) ExecuteAndProcessQueryStreamWithTx( randomUint, err := shared.RandomUInt64() if err != nil { - stream.Records <- &model.QRecordOrError{ + stream.Records <- model.QRecordOrError{ Err: fmt.Errorf("failed to generate random uint: %w", err), } return 0, fmt.Errorf("[pg_query_executor] failed to generate random uint: %w", err) @@ -379,7 +379,7 @@ func (qe *QRepQueryExecutor) ExecuteAndProcessQueryStreamWithTx( qe.logger.Info(fmt.Sprintf("[pg_query_executor] executing cursor declaration for %v with args %v", cursorQuery, args)) _, err = tx.Exec(qe.ctx, cursorQuery, args...) if err != nil { - stream.Records <- &model.QRecordOrError{ + stream.Records <- model.QRecordOrError{ Err: fmt.Errorf("failed to declare cursor: %w", err), } qe.logger.Info("[pg_query_executor] failed to declare cursor", @@ -411,7 +411,7 @@ func (qe *QRepQueryExecutor) ExecuteAndProcessQueryStreamWithTx( qe.logger.Info("Committing transaction") err = tx.Commit(qe.ctx) if err != nil { - stream.Records <- &model.QRecordOrError{ + stream.Records <- model.QRecordOrError{ Err: fmt.Errorf("failed to commit transaction: %w", err), } return 0, fmt.Errorf("[pg_query_executor] failed to commit transaction: %w", err) @@ -424,13 +424,13 @@ func (qe *QRepQueryExecutor) ExecuteAndProcessQueryStreamWithTx( func mapRowToQRecord(row pgx.Rows, fds []pgconn.FieldDescription, customTypeMap map[uint32]string, -) (*model.QRecord, error) { +) (model.QRecord, error) { // make vals an empty array of QValue of size len(fds) record := model.NewQRecord(len(fds)) values, err := row.Values() if err != nil { - return nil, fmt.Errorf("failed to scan row: %w", err) + return model.QRecord{}, fmt.Errorf("failed to scan row: %w", err) } for i, fd := range fds { @@ -439,7 +439,7 @@ func mapRowToQRecord(row pgx.Rows, fds []pgconn.FieldDescription, if !ok { tmp, err := parseFieldFromPostgresOID(fd.DataTypeOID, values[i]) if err != nil { - return nil, fmt.Errorf("failed to parse field: %w", err) + return model.QRecord{}, fmt.Errorf("failed to parse field: %w", err) } record.Set(i, tmp) } else { diff --git a/flow/connectors/snowflake/avro_file_writer_test.go b/flow/connectors/snowflake/avro_file_writer_test.go index e4733cebec..46f18aaa3f 100644 --- a/flow/connectors/snowflake/avro_file_writer_test.go +++ b/flow/connectors/snowflake/avro_file_writer_test.go @@ -92,7 +92,7 @@ func generateRecords( // Create sample records records := &model.QRecordBatch{ NumRecords: numRows, - Records: make([]*model.QRecord, numRows), + Records: make([]model.QRecord, numRows), Schema: schema, } @@ -115,7 +115,7 @@ func generateRecords( } } - records.Records[row] = &model.QRecord{ + records.Records[row] = model.QRecord{ Entries: entries, } } diff --git a/flow/connectors/sql/query_executor.go b/flow/connectors/sql/query_executor.go index 0d7fd177d2..729e86b64b 100644 --- a/flow/connectors/sql/query_executor.go +++ b/flow/connectors/sql/query_executor.go @@ -174,7 +174,7 @@ func (g *GenericSQLQueryExecutor) processRows(rows *sqlx.Rows) (*model.QRecordBa qfields[i] = qfield } - var records []*model.QRecord + var records []model.QRecord totalRowsProcessed := 0 const heartBeatNumRows = 25000 diff --git a/flow/connectors/utils/avro/avro_writer.go b/flow/connectors/utils/avro/avro_writer.go index ce70801658..7e194f2d34 100644 --- a/flow/connectors/utils/avro/avro_writer.go +++ b/flow/connectors/utils/avro/avro_writer.go @@ -148,9 +148,8 @@ func (p *peerDBOCFWriter) writeRecordsToOCFWriter(ocfWriter *goavro.OCFWriter) ( return 0, fmt.Errorf("[avro] failed to get record from stream: %w", qRecordOrErr.Err) } - qRecord := qRecordOrErr.Record avroConverter := model.NewQRecordAvroConverter( - qRecord, + qRecordOrErr.Record, p.targetDWH, p.avroSchema.NullableFields, colNames, diff --git a/flow/connectors/utils/stream.go b/flow/connectors/utils/stream.go index e753001934..7cd8ae8391 100644 --- a/flow/connectors/utils/stream.go +++ b/flow/connectors/utils/stream.go @@ -73,14 +73,14 @@ func RecordsToRawTableStream(req *model.RecordsToStreamRequest) (*model.RecordsT }, nil } -func recordToQRecordOrError(tableMapping map[string]uint32, batchID int64, record model.Record) *model.QRecordOrError { +func recordToQRecordOrError(tableMapping map[string]uint32, batchID int64, record model.Record) model.QRecordOrError { var entries [8]qvalue.QValue switch typedRecord := record.(type) { case *model.InsertRecord: // json.Marshal converts bytes in Hex automatically to BASE64 string. itemsJSON, err := typedRecord.Items.ToJSON() if err != nil { - return &model.QRecordOrError{ + return model.QRecordOrError{ Err: fmt.Errorf("failed to serialize insert record items to JSON: %w", err), } } @@ -110,13 +110,13 @@ func recordToQRecordOrError(tableMapping map[string]uint32, batchID int64, recor case *model.UpdateRecord: newItemsJSON, err := typedRecord.NewItems.ToJSON() if err != nil { - return &model.QRecordOrError{ + return model.QRecordOrError{ Err: fmt.Errorf("failed to serialize update record new items to JSON: %w", err), } } oldItemsJSON, err := typedRecord.OldItems.ToJSON() if err != nil { - return &model.QRecordOrError{ + return model.QRecordOrError{ Err: fmt.Errorf("failed to serialize update record old items to JSON: %w", err), } } @@ -145,7 +145,7 @@ func recordToQRecordOrError(tableMapping map[string]uint32, batchID int64, recor case *model.DeleteRecord: itemsJSON, err := typedRecord.Items.ToJSON() if err != nil { - return &model.QRecordOrError{ + return model.QRecordOrError{ Err: fmt.Errorf("failed to serialize delete record items to JSON: %w", err), } } @@ -173,7 +173,7 @@ func recordToQRecordOrError(tableMapping map[string]uint32, batchID int64, recor } tableMapping[typedRecord.DestinationTableName] += 1 default: - return &model.QRecordOrError{ + return model.QRecordOrError{ Err: fmt.Errorf("unknown record type: %T", typedRecord), } } @@ -191,8 +191,8 @@ func recordToQRecordOrError(tableMapping map[string]uint32, batchID int64, recor Value: batchID, } - return &model.QRecordOrError{ - Record: &model.QRecord{ + return model.QRecordOrError{ + Record: model.QRecord{ NumEntries: 8, Entries: entries[:], }, diff --git a/flow/e2e/bigquery/bigquery_helper.go b/flow/e2e/bigquery/bigquery_helper.go index a89de8dfc3..54b3a180c1 100644 --- a/flow/e2e/bigquery/bigquery_helper.go +++ b/flow/e2e/bigquery/bigquery_helper.go @@ -306,7 +306,7 @@ func (b *BigQueryTestHelper) ExecuteAndProcessQuery(query string) (*model.QRecor return nil, fmt.Errorf("failed to run command: %w", err) } - var records []*model.QRecord + var records []model.QRecord for { var row []bigquery.Value err := it.Next(&row) diff --git a/flow/model/conversion_avro.go b/flow/model/conversion_avro.go index db58610e6b..6818299073 100644 --- a/flow/model/conversion_avro.go +++ b/flow/model/conversion_avro.go @@ -8,14 +8,14 @@ import ( ) type QRecordAvroConverter struct { - QRecord *QRecord + QRecord QRecord TargetDWH qvalue.QDWHType NullableFields map[string]struct{} ColNames []string } func NewQRecordAvroConverter( - q *QRecord, + q QRecord, targetDWH qvalue.QDWHType, nullableFields map[string]struct{}, colNames []string, diff --git a/flow/model/qrecord.go b/flow/model/qrecord.go index 5b44808be7..bc2f7f84ff 100644 --- a/flow/model/qrecord.go +++ b/flow/model/qrecord.go @@ -12,8 +12,8 @@ type QRecord struct { } // create a new QRecord with n values -func NewQRecord(n int) *QRecord { - return &QRecord{ +func NewQRecord(n int) QRecord { + return QRecord{ NumEntries: n, Entries: make([]qvalue.QValue, n), } @@ -25,7 +25,7 @@ func (q *QRecord) Set(idx int, value qvalue.QValue) { } // equals checks if two QRecords are identical. -func (q *QRecord) equals(other *QRecord) bool { +func (q QRecord) equals(other QRecord) bool { // First check simple attributes if q.NumEntries != other.NumEntries { return false diff --git a/flow/model/qrecord_batch.go b/flow/model/qrecord_batch.go index e2990a28ae..c0fd76b643 100644 --- a/flow/model/qrecord_batch.go +++ b/flow/model/qrecord_batch.go @@ -13,8 +13,8 @@ import ( // QRecordBatch holds a batch of QRecord objects. type QRecordBatch struct { - NumRecords uint32 // NumRecords represents the number of records in the batch. - Records []*QRecord // Records is a slice of pointers to QRecord objects. + NumRecords uint32 // NumRecords represents the number of records in the batch. + Records []QRecord Schema *QRecordSchema } @@ -66,7 +66,7 @@ func (q *QRecordBatch) ToQRecordStream(buffer int) (*QRecordStream, error) { } for _, record := range q.Records { - stream.Records <- &QRecordOrError{ + stream.Records <- QRecordOrError{ Record: record, } } @@ -79,7 +79,7 @@ func (q *QRecordBatch) ToQRecordStream(buffer int) (*QRecordStream, error) { type QRecordBatchCopyFromSource struct { numRecords int stream *QRecordStream - currentRecord *QRecordOrError + currentRecord QRecordOrError err error } @@ -89,7 +89,7 @@ func NewQRecordBatchCopyFromSource( return &QRecordBatchCopyFromSource{ numRecords: 0, stream: stream, - currentRecord: nil, + currentRecord: QRecordOrError{}, err: nil, } } diff --git a/flow/model/qrecord_stream.go b/flow/model/qrecord_stream.go index 721ab58c6c..af8346d633 100644 --- a/flow/model/qrecord_stream.go +++ b/flow/model/qrecord_stream.go @@ -3,7 +3,7 @@ package model import "fmt" type QRecordOrError struct { - Record *QRecord + Record QRecord Err error } @@ -13,8 +13,8 @@ type QRecordSchemaOrError struct { } type QRecordStream struct { - schema chan *QRecordSchemaOrError - Records chan *QRecordOrError + schema chan QRecordSchemaOrError + Records chan QRecordOrError schemaSet bool schemaCache *QRecordSchema } @@ -47,8 +47,8 @@ type RecordsToStreamResponse struct { func NewQRecordStream(buffer int) *QRecordStream { return &QRecordStream{ - schema: make(chan *QRecordSchemaOrError, 1), - Records: make(chan *QRecordOrError, buffer), + schema: make(chan QRecordSchemaOrError, 1), + Records: make(chan QRecordOrError, buffer), schemaSet: false, schemaCache: nil, } @@ -69,7 +69,7 @@ func (s *QRecordStream) SetSchema(schema *QRecordSchema) error { return fmt.Errorf("Schema already set") } - s.schema <- &QRecordSchemaOrError{ + s.schema <- QRecordSchemaOrError{ Schema: schema, } s.schemaSet = true @@ -80,6 +80,6 @@ func (s *QRecordStream) IsSchemaSet() bool { return s.schemaSet } -func (s *QRecordStream) SchemaChan() chan *QRecordSchemaOrError { +func (s *QRecordStream) SchemaChan() chan QRecordSchemaOrError { return s.schema } diff --git a/flow/model/qrecord_test.go b/flow/model/qrecord_test.go index 50ca08a6a7..5d46d61541 100644 --- a/flow/model/qrecord_test.go +++ b/flow/model/qrecord_test.go @@ -15,17 +15,17 @@ func TestEquals(t *testing.T) { tests := []struct { name string - q1 *QRecord - q2 *QRecord + q1 QRecord + q2 QRecord want bool }{ { name: "Equal - Same UUID", - q1: &QRecord{ + q1: QRecord{ NumEntries: 1, Entries: []qvalue.QValue{{Kind: qvalue.QValueKindUUID, Value: uuidVal1}}, }, - q2: &QRecord{ + q2: QRecord{ NumEntries: 1, Entries: []qvalue.QValue{ {Kind: qvalue.QValueKindString, Value: uuidVal1.String()}, @@ -35,11 +35,11 @@ func TestEquals(t *testing.T) { }, { name: "Not Equal - Different UUID", - q1: &QRecord{ + q1: QRecord{ NumEntries: 1, Entries: []qvalue.QValue{{Kind: qvalue.QValueKindUUID, Value: uuidVal1}}, }, - q2: &QRecord{ + q2: QRecord{ NumEntries: 1, Entries: []qvalue.QValue{{Kind: qvalue.QValueKindUUID, Value: uuidVal2}}, }, @@ -47,13 +47,13 @@ func TestEquals(t *testing.T) { }, { name: "Equal - Same numeric", - q1: &QRecord{ + q1: QRecord{ NumEntries: 1, Entries: []qvalue.QValue{ {Kind: qvalue.QValueKindNumeric, Value: big.NewRat(10, 2)}, }, }, - q2: &QRecord{ + q2: QRecord{ NumEntries: 1, Entries: []qvalue.QValue{{Kind: qvalue.QValueKindString, Value: "5"}}, }, @@ -61,13 +61,13 @@ func TestEquals(t *testing.T) { }, { name: "Not Equal - Different numeric", - q1: &QRecord{ + q1: QRecord{ NumEntries: 1, Entries: []qvalue.QValue{ {Kind: qvalue.QValueKindNumeric, Value: big.NewRat(10, 2)}, }, }, - q2: &QRecord{ + q2: QRecord{ NumEntries: 1, Entries: []qvalue.QValue{{Kind: qvalue.QValueKindNumeric, Value: "4.99"}}, },