From fbcb614a8d7f030472e26447dd1b54225cb3d625 Mon Sep 17 00:00:00 2001 From: "Sredny M." Date: Wed, 27 Nov 2024 11:37:55 -0300 Subject: [PATCH] TT-12780 prevent sql pump to panic when sharding enabled and skip api id is set (#860) * prevent sql pump to panic when sharding enabled and skip api id is set * revert doc change --------- Co-authored-by: sredny buitrago --- pumps/sql.go | 2 +- pumps/sql_test.go | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/pumps/sql.go b/pumps/sql.go index d9c74f5e5..db8025dcc 100644 --- a/pumps/sql.go +++ b/pumps/sql.go @@ -212,7 +212,7 @@ func (c *SQLPump) WriteData(ctx context.Context, data []interface{}) error { endIndex := dataLen // We iterate dataLen +1 times since we're writing the data after the date change on sharding_table:true for i := 0; i <= dataLen; i++ { - if c.SQLConf.TableSharding { + if c.SQLConf.TableSharding && startIndex < len(typedData) { recDate := typedData[startIndex].TimeStamp.Format("20060102") var nextRecDate string // if we're on i == dataLen iteration, it means that we're out of index range. We're going to use the last record date. diff --git a/pumps/sql_test.go b/pumps/sql_test.go index 2f31764f5..33e07e80d 100644 --- a/pumps/sql_test.go +++ b/pumps/sql_test.go @@ -146,6 +146,26 @@ func TestSQLWriteDataSharded(t *testing.T) { assert.Equal(t, data.RowsLen, len(dbRecords)) }) } + + t.Run("empty_keys", func(t *testing.T) { + emptyKeys := make([]interface{}, 0) + errWrite := pmp.WriteData(context.Background(), emptyKeys) + if errWrite != nil { + t.Fatal("SQL Pump couldn't write records with err:", errWrite) + } + + // Check if any table has been created for the empty input case + tables := []string{ + analytics.SQLTable + "_" + now.Format("20060102"), + analytics.SQLTable + "_" + nowPlus1.Format("20060102"), + analytics.SQLTable + "_" + nowPlus2.Format("20060102"), + } + for _, table := range tables { + t.Run("checking_"+table, func(t *testing.T) { + assert.Equal(t, false, pmp.db.Migrator().HasTable(table)) // No table should exist + }) + } + }) } func TestSQLWriteUptimeData(t *testing.T) {