@@ -89,16 +89,121 @@ func TestInitializeTargetSequences(t *testing.T) {
8989 },
9090 }
9191
92+ << << << < HEAD
9293 env .tmc .expectVRQuery (200 , "/select max.*" , sqltypes .MakeTestResult (sqltypes .MakeTestFields ("maxval" , "int64" ), "34" ))
9394 // Expect the insert query to be executed with 35 as a params, since we provide a maxID of 34 in the last query
9495 env .tmc .expectVRQuery (100 , "/insert into.*35.*" , & sqltypes.Result {RowsAffected : 1 })
96+ == == == =
97+ type testCase struct {
98+ name string
99+ maxValueRequest * getMaxValueForSequencesRequestResponse
100+ updateSeqTableRequest * tabletmanagerdatapb.UpdateSequenceTablesRequest
101+ }
95102
96- err = sw .initializeTargetSequences (ctx , sequencesByBackingTable )
97- assert .NoError (t , err )
103+ testCases := []testCase {
104+ {
105+ name : "initialize sequences" ,
106+ maxValueRequest : & getMaxValueForSequencesRequestResponse {
107+ req : & tabletmanagerdatapb.GetMaxValueForSequencesRequest {
108+ Sequences : []* tabletmanagerdatapb.GetMaxValueForSequencesRequest_SequenceMetadata {
109+ {
110+ BackingTableName : "my-seq1" ,
111+ UsingColEscaped : "`my-col`" ,
112+ UsingTableNameEscaped : fmt .Sprintf ("`%s`" , tableName ),
113+ UsingTableDbNameEscaped : "`vt_targetks`" ,
114+ },
115+ {
116+ BackingTableName : "my-seq2" ,
117+ UsingColEscaped : "`my-col-2`" ,
118+ UsingTableNameEscaped : fmt .Sprintf ("`%s`" , tableName2 ),
119+ UsingTableDbNameEscaped : "`vt_targetks`" ,
120+ },
121+ },
122+ },
123+ res : & tabletmanagerdatapb.GetMaxValueForSequencesResponse {
124+ MaxValuesBySequenceTable : map [string ]int64 {
125+ "my-seq1" : 34 ,
126+ "my-seq2" : 10 ,
127+ },
128+ },
129+ },
130+ updateSeqTableRequest : & tabletmanagerdatapb.UpdateSequenceTablesRequest {
131+ Sequences : []* tabletmanagerdatapb.UpdateSequenceTablesRequest_SequenceMetadata {
132+ {
133+ BackingTableName : "my-seq1" ,
134+ BackingTableDbName : "vt_" + sourceKeyspaceName ,
135+ MaxValue : 34 ,
136+ },
137+ {
138+ BackingTableName : "my-seq2" ,
139+ BackingTableDbName : "vt_" + sourceKeyspaceName ,
140+ MaxValue : 10 ,
141+ },
142+ },
143+ },
144+ },
145+ {
146+ name : "initialize sequences for empty tables" ,
147+ maxValueRequest : & getMaxValueForSequencesRequestResponse {
148+ req : & tabletmanagerdatapb.GetMaxValueForSequencesRequest {
149+ Sequences : []* tabletmanagerdatapb.GetMaxValueForSequencesRequest_SequenceMetadata {
150+ {
151+ BackingTableName : "my-seq1" ,
152+ UsingColEscaped : "`my-col`" ,
153+ UsingTableNameEscaped : fmt .Sprintf ("`%s`" , tableName ),
154+ UsingTableDbNameEscaped : "`vt_targetks`" ,
155+ },
156+ {
157+ BackingTableName : "my-seq2" ,
158+ UsingColEscaped : "`my-col-2`" ,
159+ UsingTableNameEscaped : fmt .Sprintf ("`%s`" , tableName2 ),
160+ UsingTableDbNameEscaped : "`vt_targetks`" ,
161+ },
162+ },
163+ },
164+ res : & tabletmanagerdatapb.GetMaxValueForSequencesResponse {
165+ MaxValuesBySequenceTable : map [string ]int64 {},
166+ },
167+ },
168+ updateSeqTableRequest : & tabletmanagerdatapb.UpdateSequenceTablesRequest {
169+ Sequences : []* tabletmanagerdatapb.UpdateSequenceTablesRequest_SequenceMetadata {
170+ {
171+ BackingTableName : "my-seq1" ,
172+ BackingTableDbName : "vt_" + sourceKeyspaceName ,
173+ MaxValue : 0 ,
174+ },
175+ {
176+ BackingTableName : "my-seq2" ,
177+ BackingTableDbName : "vt_" + sourceKeyspaceName ,
178+ MaxValue : 0 ,
179+ },
180+ },
181+ },
182+ },
183+ }
184+ >> >> >> > 81356 abde1 (VReplication : Properly Handle Sequence Table Initialization For Empty Tables (#19226 ))
185+
186+ for _ , tc := range testCases {
187+ t .Run (tc .name , func (t * testing.T ) {
188+ require .NotNil (t , tc .maxValueRequest )
189+ require .NotNil (t , tc .updateSeqTableRequest )
190+ env .tmc .expectGetMaxValueForSequencesRequest (200 , tc .maxValueRequest )
191+ env .tmc .expectUpdateSequenceTablesRequest (100 , tc .updateSeqTableRequest )
98192
193+ << << << < HEAD
99194 // Expect the queries to be cleared
100195 assert .Emptyf (t , env .tmc .vrQueries [100 ], "expected no queries to be executed, found: %q" , env .tmc .vrQueries [100 ])
101196 assert .Empty (t , env .tmc .vrQueries [200 ], "expected no queries to be executed, found: %q" , env .tmc .vrQueries [200 ])
197+ == == == =
198+ err = sw .initializeTargetSequences (ctx , sequencesByBackingTable )
199+ assert .NoError (t , err )
200+
201+ // Expect the requests to be cleared.
202+ assert .Emptyf (t , env .tmc .updateSequenceTablesRequests , "expected no remaining UpdateSequenceTables requests" )
203+ assert .Emptyf (t , env .tmc .getMaxValueForSequencesRequests , "expected no remaining GetMaxValueForSequences requests" )
204+ })
205+ }
206+ >> >> >> > 81356 abde1 (VReplication : Properly Handle Sequence Table Initialization For Empty Tables (#19226 ))
102207}
103208
104209func TestGetTargetSequenceMetadata (t * testing.T ) {
0 commit comments