@@ -167,20 +167,7 @@ func (t *Tester) Run() error {
167
167
168
168
t .vexplain = strs [1 ]
169
169
case Q_WAIT_FOR_AUTHORITATIVE :
170
- strs := strings .Split (q .Query , " " )
171
- if len (strs ) != 3 {
172
- t .reporter .AddFailure (t .vschema , fmt .Errorf ("expected table name and keyspace for wait_authoritative in: %v" , q .Query ))
173
- continue
174
- }
175
-
176
- tblName := strs [1 ]
177
- ksName := strs [2 ]
178
- log .Infof ("Waiting for authoritative schema for table %s" , tblName )
179
- err := utils .WaitForAuthoritative (t , ksName , tblName , t .clusterInstance .VtgateProcess .ReadVSchema )
180
- if err != nil {
181
- t .reporter .AddFailure (t .vschema , fmt .Errorf ("failed to wait for authoritative schema for table %s: %v" , tblName , err ))
182
- continue
183
- }
170
+ t .waitAuthoritative (q .Query )
184
171
case Q_QUERY :
185
172
if t .skipNext {
186
173
t .skipNext = false
@@ -224,6 +211,50 @@ func (t *Tester) Run() error {
224
211
return nil
225
212
}
226
213
214
+ func (t * Tester ) findTable (name string ) (ks string , err error ) {
215
+ for ksName , ksSchema := range t .vschema .Keyspaces {
216
+ for _ , table := range ksSchema .Tables {
217
+ if table .Name .String () == name {
218
+ if ks != "" {
219
+ return "" , fmt .Errorf ("table %s found in multiple keyspaces" , name )
220
+ }
221
+ ks = ksName
222
+ }
223
+ }
224
+ }
225
+ if ks == "" {
226
+ return "" , fmt .Errorf ("table %s not found in any keyspace" , name )
227
+ }
228
+ return ks , nil
229
+ }
230
+
231
+ func (t * Tester ) waitAuthoritative (query string ) {
232
+ var tblName , ksName string
233
+ strs := strings .Split (query , " " )
234
+ switch len (strs ) {
235
+ case 2 :
236
+ tblName = strs [1 ]
237
+ var err error
238
+ ksName , err = t .findTable (tblName )
239
+ if err != nil {
240
+ t .reporter .AddFailure (t .vschema , err )
241
+ return
242
+ }
243
+ case 3 :
244
+ tblName = strs [1 ]
245
+ ksName = strs [2 ]
246
+
247
+ default :
248
+ t .reporter .AddFailure (t .vschema , fmt .Errorf ("expected table name and keyspace for wait_authoritative in: %v" , query ))
249
+ }
250
+
251
+ log .Infof ("Waiting for authoritative schema for table %s" , tblName )
252
+ err := utils .WaitForAuthoritative (t , ksName , tblName , t .clusterInstance .VtgateProcess .ReadVSchema )
253
+ if err != nil {
254
+ t .reporter .AddFailure (t .vschema , fmt .Errorf ("failed to wait for authoritative schema for table %s: %v" , tblName , err ))
255
+ }
256
+ }
257
+
227
258
func (t * Tester ) loadQueries () ([]query , error ) {
228
259
data , err := t .readData ()
229
260
if err != nil {
0 commit comments