@@ -288,3 +288,119 @@ func checkData(t *testing.T, path string, client *testserverclient.TestServerCli
288
288
require .Equal (t , int64 (4 ), count )
289
289
require .NoError (t , rows .Close ())
290
290
}
291
+ << << << < HEAD
292
+ == == == =
293
+
294
+ func TestStatsPriorityQueueAPI (t * testing.T ) {
295
+ store := testkit .CreateMockStore (t )
296
+ driver := server2 .NewTiDBDriver (store )
297
+ client := testserverclient .NewTestServerClient ()
298
+ cfg := util .NewTestConfig ()
299
+ cfg .Port = client .Port
300
+ cfg .Status .StatusPort = client .StatusPort
301
+ cfg .Status .ReportStatus = true
302
+ cfg .Socket = fmt .Sprintf ("/tmp/tidb-mock-%d.sock" , time .Now ().UnixNano ())
303
+
304
+ server , err := server2 .NewServer (cfg , driver )
305
+ require .NoError (t , err )
306
+ defer server .Close ()
307
+
308
+ dom , err := session .GetDomain (store )
309
+ require .NoError (t , err )
310
+ server .SetDomain (dom )
311
+ go func () {
312
+ err := server .Run (nil )
313
+ require .NoError (t , err )
314
+ }()
315
+ <- server2 .RunInGoTestChan
316
+ client .Port = testutil .GetPortFromTCPAddr (server .ListenAddr ())
317
+ client .StatusPort = testutil .GetPortFromTCPAddr (server .StatusListenerAddr ())
318
+ client .WaitUntilServerOnline ()
319
+
320
+ router := mux .NewRouter ()
321
+ handler := optimizor .NewStatsPriorityQueueHandler (dom )
322
+ router .Handle ("/stats/priority-queue" , handler )
323
+
324
+ resp , err := client .FetchStatus ("/stats/priority-queue" )
325
+ require .NoError (t , err )
326
+ defer resp .Body .Close ()
327
+
328
+ js , err := io .ReadAll (resp .Body )
329
+ require .NoError (t , err )
330
+ require .Equal (t , "priority queue not initialized" , string (js ))
331
+
332
+ // Init the queue.
333
+ handle := dom .StatsHandle ()
334
+ require .False (t , handle .HandleAutoAnalyze ())
335
+
336
+ resp , err = client .FetchStatus ("/stats/priority-queue" )
337
+ require .NoError (t , err )
338
+ defer resp .Body .Close ()
339
+
340
+ js , err = io .ReadAll (resp .Body )
341
+ require .NoError (t , err )
342
+ var snapshot types.PriorityQueueSnapshot
343
+ err = json .Unmarshal (js , & snapshot )
344
+ require .NoError (t , err )
345
+ require .Empty (t , snapshot .CurrentJobs )
346
+ require .Empty (t , snapshot .MustRetryTables )
347
+ }
348
+
349
+ // fix issue 53966
350
+ func TestLoadNullStatsFile (t * testing.T ) {
351
+ // Setting up the mock store
352
+ store := testkit .CreateMockStore (t )
353
+
354
+ // Creating a new TiDB driver and client
355
+ driver := server2 .NewTiDBDriver (store )
356
+ client := testserverclient .NewTestServerClient ()
357
+ cfg := util .NewTestConfig ()
358
+ cfg .Port = client .Port
359
+ cfg .Status .StatusPort = client .StatusPort
360
+ cfg .Status .ReportStatus = true
361
+ cfg .Socket = fmt .Sprintf ("/tmp/tidb-mock-%d.sock" , time .Now ().UnixNano ())
362
+
363
+ // Creating and running the server
364
+ server , err := server2 .NewServer (cfg , driver )
365
+ require .NoError (t , err )
366
+ defer server .Close ()
367
+
368
+ dom , err := session .GetDomain (store )
369
+ require .NoError (t , err )
370
+ server .SetDomain (dom )
371
+ go func () {
372
+ err := server .Run (nil )
373
+ require .NoError (t , err )
374
+ }()
375
+ <- server2 .RunInGoTestChan
376
+ client .Port = testutil .GetPortFromTCPAddr (server .ListenAddr ())
377
+ client .StatusPort = testutil .GetPortFromTCPAddr (server .StatusListenerAddr ())
378
+ client .WaitUntilServerOnline ()
379
+
380
+ // Creating the stats file
381
+ path := "/tmp/stats.json"
382
+ fp , err := os .Create (path )
383
+ require .NoError (t , err )
384
+ require .NotNil (t , fp )
385
+ defer func () {
386
+ require .NoError (t , fp .Close ())
387
+ require .NoError (t , os .Remove (path ))
388
+ }()
389
+ fp .Write ([]byte ("null" ))
390
+ require .NoError (t , err )
391
+
392
+ // Connecting to the database and executing SQL commands
393
+ db , err := sql .Open ("mysql" , client .GetDSN (func (config * mysql.Config ) {
394
+ config .AllowAllFiles = true
395
+ config .Params ["sql_mode" ] = "''"
396
+ }))
397
+ require .NoError (t , err , "Error connecting" )
398
+ tk := testkit .NewDBTestKit (t , db )
399
+ defer func () {
400
+ err := db .Close ()
401
+ require .NoError (t , err )
402
+ }()
403
+ tk .MustExec ("use test" )
404
+ tk .MustExec (fmt .Sprintf ("load stats '%s'" , path ))
405
+ }
406
+ >> >> >> > 64 dd762fde7 (planner : Fix load stats failure when stats file contains with `null` (#57818 ))
0 commit comments