MySQL 5.6.14 Source Code Document
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
pfs_instr-oom-t.cc
1 /* Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved.
2 
3  This program is free software; you can redistribute it and/or modify
4  it under the terms of the GNU General Public License as published by
5  the Free Software Foundation; version 2 of the License.
6 
7  This program is distributed in the hope that it will be useful,
8  but WITHOUT ANY WARRANTY; without even the implied warranty of
9  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10  GNU General Public License for more details.
11 
12  You should have received a copy of the GNU General Public License
13  along with this program; if not, write to the Free Software Foundation,
14  51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA */
15 
16 #include <my_global.h>
17 #include <my_pthread.h>
18 #include <pfs_instr.h>
19 #include <pfs_stat.h>
20 #include <pfs_global.h>
21 #include <pfs_instr_class.h>
22 #include <tap.h>
23 
24 #include "stub_pfs_global.h"
25 #include "stub_server_misc.h"
26 
27 #include <string.h> /* memset */
28 
29 void test_oom()
30 {
31  int rc;
32  PFS_global_param param;
33 
34  stub_alloc_always_fails= true;
35 
36  memset(& param, 0xFF, sizeof(param));
37  param.m_enabled= true;
38  param.m_mutex_class_sizing= 10;
39  param.m_rwlock_class_sizing= 0;
40  param.m_cond_class_sizing= 0;
41  param.m_thread_class_sizing= 0;
42  param.m_table_share_sizing= 0;
43  param.m_file_class_sizing= 0;
44  param.m_socket_class_sizing= 0;
45  param.m_mutex_sizing= 1000;
46  param.m_rwlock_sizing= 0;
47  param.m_cond_sizing= 0;
48  param.m_thread_sizing= 0;
49  param.m_table_sizing= 0;
50  param.m_file_sizing= 0;
51  param.m_file_handle_sizing= 0;
52  param.m_socket_sizing= 0;
55  param.m_setup_actor_sizing= 0;
56  param.m_setup_object_sizing= 0;
57  param.m_host_sizing= 0;
58  param.m_user_sizing= 0;
59  param.m_account_sizing= 0;
60  param.m_stage_class_sizing= 0;
63  param.m_statement_class_sizing= 0;
67 
68  init_event_name_sizing(& param);
69  rc= init_instruments(& param);
70  ok(rc == 1, "oom (mutex)");
72 
73  param.m_enabled= true;
74  param.m_mutex_class_sizing= 0;
75  param.m_rwlock_class_sizing= 10;
76  param.m_cond_class_sizing= 0;
77  param.m_thread_class_sizing= 0;
78  param.m_table_share_sizing= 0;
79  param.m_file_class_sizing= 0;
80  param.m_socket_class_sizing= 0;
81  param.m_mutex_sizing= 0;
82  param.m_rwlock_sizing= 1000;
83  param.m_cond_sizing= 0;
84  param.m_thread_sizing= 0;
85  param.m_table_sizing= 0;
86  param.m_file_sizing= 0;
87  param.m_file_handle_sizing= 0;
88  param.m_socket_sizing= 0;
91  param.m_setup_actor_sizing= 0;
92  param.m_setup_object_sizing= 0;
93  param.m_host_sizing= 0;
94  param.m_user_sizing= 0;
95  param.m_account_sizing= 0;
96  param.m_stage_class_sizing= 0;
99  param.m_statement_class_sizing= 0;
103 
104  init_event_name_sizing(& param);
105  rc= init_instruments(& param);
106  ok(rc == 1, "oom (rwlock)");
108 
109  param.m_enabled= true;
110  param.m_mutex_class_sizing= 0;
111  param.m_rwlock_class_sizing= 0;
112  param.m_cond_class_sizing= 10;
113  param.m_thread_class_sizing= 0;
114  param.m_table_share_sizing= 0;
115  param.m_file_class_sizing= 0;
116  param.m_socket_class_sizing= 0;
117  param.m_mutex_sizing= 0;
118  param.m_rwlock_sizing= 0;
119  param.m_cond_sizing= 1000;
120  param.m_thread_sizing= 0;
121  param.m_table_sizing= 0;
122  param.m_file_sizing= 0;
123  param.m_file_handle_sizing= 0;
124  param.m_socket_sizing= 0;
127  param.m_setup_actor_sizing= 0;
128  param.m_setup_object_sizing= 0;
129  param.m_host_sizing= 0;
130  param.m_user_sizing= 0;
131  param.m_account_sizing= 0;
132  param.m_stage_class_sizing= 0;
135  param.m_statement_class_sizing= 0;
139 
140  init_event_name_sizing(& param);
141  rc= init_instruments(& param);
142  ok(rc == 1, "oom (cond)");
144 
145  param.m_enabled= true;
146  param.m_mutex_class_sizing= 0;
147  param.m_rwlock_class_sizing= 0;
148  param.m_cond_class_sizing= 0;
149  param.m_thread_class_sizing= 0;
150  param.m_table_share_sizing= 0;
151  param.m_file_class_sizing= 10;
152  param.m_socket_class_sizing= 0;
153  param.m_mutex_sizing= 0;
154  param.m_rwlock_sizing= 0;
155  param.m_cond_sizing= 0;
156  param.m_thread_sizing= 0;
157  param.m_table_sizing= 0;
158  param.m_file_sizing= 1000;
159  param.m_file_handle_sizing= 1000;
160  param.m_socket_sizing= 0;
163  param.m_setup_actor_sizing= 0;
164  param.m_setup_object_sizing= 0;
165  param.m_host_sizing= 0;
166  param.m_user_sizing= 0;
167  param.m_account_sizing= 0;
168  param.m_stage_class_sizing= 0;
171  param.m_statement_class_sizing= 0;
175 
176  init_event_name_sizing(& param);
177  rc= init_instruments(& param);
178  ok(rc == 1, "oom (file)");
180 
181  param.m_enabled= true;
182  param.m_mutex_class_sizing= 0;
183  param.m_rwlock_class_sizing= 0;
184  param.m_cond_class_sizing= 0;
185  param.m_thread_class_sizing= 0;
186  param.m_table_share_sizing= 0;
187  param.m_file_class_sizing= 0;
188  param.m_mutex_sizing= 0;
189  param.m_rwlock_sizing= 0;
190  param.m_cond_sizing= 0;
191  param.m_thread_sizing= 0;
192  param.m_table_sizing= 0;
193  param.m_file_sizing= 0;
194  param.m_file_handle_sizing= 1000;
197  param.m_setup_actor_sizing= 0;
198  param.m_setup_object_sizing= 0;
199  param.m_host_sizing= 0;
200  param.m_user_sizing= 0;
201  param.m_account_sizing= 0;
202  param.m_stage_class_sizing= 0;
205  param.m_statement_class_sizing= 0;
209 
210  init_event_name_sizing(& param);
211  rc= init_instruments(& param);
212  ok(rc == 1, "oom (file handle)");
214 
215  param.m_enabled= true;
216  param.m_mutex_class_sizing= 0;
217  param.m_rwlock_class_sizing= 0;
218  param.m_cond_class_sizing= 0;
219  param.m_thread_class_sizing= 0;
220  param.m_table_share_sizing= 10;
221  param.m_file_class_sizing= 0;
222  param.m_socket_class_sizing= 0;
223  param.m_mutex_sizing= 0;
224  param.m_rwlock_sizing= 0;
225  param.m_cond_sizing= 0;
226  param.m_thread_sizing= 0;
227  param.m_table_sizing= 1000;
228  param.m_file_sizing= 0;
229  param.m_file_handle_sizing= 0;
230  param.m_socket_sizing= 0;
233  param.m_setup_actor_sizing= 0;
234  param.m_setup_object_sizing= 0;
235  param.m_host_sizing= 0;
236  param.m_user_sizing= 0;
237  param.m_account_sizing= 0;
238  param.m_stage_class_sizing= 0;
241  param.m_statement_class_sizing= 0;
245 
246  init_event_name_sizing(& param);
247  rc= init_instruments(& param);
248  ok(rc == 1, "oom (table)");
250 
251  param.m_enabled= true;
252  param.m_mutex_class_sizing= 0;
253  param.m_rwlock_class_sizing= 0;
254  param.m_cond_class_sizing= 0;
255  param.m_thread_class_sizing= 10;
256  param.m_table_share_sizing= 0;
257  param.m_file_class_sizing= 0;
258  param.m_socket_class_sizing= 0;
259  param.m_mutex_sizing= 0;
260  param.m_rwlock_sizing= 0;
261  param.m_cond_sizing= 0;
262  param.m_thread_sizing= 1000;
263  param.m_table_sizing= 0;
264  param.m_file_sizing= 0;
265  param.m_file_handle_sizing= 0;
266  param.m_socket_sizing= 0;
269  param.m_setup_actor_sizing= 0;
270  param.m_setup_object_sizing= 0;
271  param.m_host_sizing= 0;
272  param.m_user_sizing= 0;
273  param.m_account_sizing= 0;
274  param.m_stage_class_sizing= 0;
277  param.m_statement_class_sizing= 0;
281 
282  init_event_name_sizing(& param);
283  rc= init_instruments(& param);
284  ok(rc == 1, "oom (thread)");
286 
287  stub_alloc_always_fails= false;
288 
289  param.m_enabled= true;
290  param.m_mutex_class_sizing= 0;
291  param.m_rwlock_class_sizing= 0;
292  param.m_cond_class_sizing= 0;
293  param.m_thread_class_sizing= 10;
294  param.m_table_share_sizing= 0;
295  param.m_file_class_sizing= 0;
296  param.m_socket_class_sizing= 0;
297  param.m_mutex_sizing= 0;
298  param.m_rwlock_sizing= 0;
299  param.m_cond_sizing= 0;
300  param.m_thread_sizing= 1000;
301  param.m_table_sizing= 0;
302  param.m_file_sizing= 0;
303  param.m_file_handle_sizing= 0;
304  param.m_socket_sizing= 0;
307  param.m_setup_actor_sizing= 0;
308  param.m_setup_object_sizing= 0;
309  param.m_host_sizing= 0;
310  param.m_user_sizing= 0;
311  param.m_account_sizing= 0;
312  param.m_stage_class_sizing= 0;
315  param.m_statement_class_sizing= 0;
319 
320  stub_alloc_fails_after_count= 2;
321  init_event_name_sizing(& param);
322  rc= init_instruments(& param);
323  ok(rc == 1, "oom (thread waits history sizing)");
325 
326  param.m_enabled= true;
327  param.m_mutex_class_sizing= 50;
328  param.m_rwlock_class_sizing= 50;
329  param.m_cond_class_sizing= 50;
330  param.m_thread_class_sizing= 10;
331  param.m_table_share_sizing= 0;
332  param.m_file_class_sizing= 50;
333  param.m_socket_class_sizing= 0;
334  param.m_mutex_sizing= 0;
335  param.m_rwlock_sizing= 0;
336  param.m_cond_sizing= 0;
337  param.m_thread_sizing= 1000;
338  param.m_table_sizing= 0;
339  param.m_file_sizing= 0;
340  param.m_file_handle_sizing= 0;
341  param.m_socket_sizing= 0;
344  param.m_setup_actor_sizing= 0;
345  param.m_setup_object_sizing= 0;
346  param.m_stage_class_sizing= 0;
349  param.m_statement_class_sizing= 0;
353 
354  stub_alloc_fails_after_count= 2;
355  init_event_name_sizing(& param);
356  rc= init_instruments(& param);
357  ok(rc == 1, "oom (per thread wait)");
358 
359  param.m_enabled= true;
360  param.m_mutex_class_sizing= 0;
361  param.m_rwlock_class_sizing= 0;
362  param.m_cond_class_sizing= 0;
363  param.m_thread_class_sizing= 0;
364  param.m_table_share_sizing= 0;
365  param.m_file_class_sizing= 0;
366  param.m_socket_class_sizing= 10;
367  param.m_mutex_sizing= 0;
368  param.m_rwlock_sizing= 0;
369  param.m_cond_sizing= 0;
370  param.m_thread_sizing= 0;
371  param.m_table_sizing= 0;
372  param.m_file_sizing= 0;
373  param.m_file_handle_sizing= 0;
374  param.m_socket_sizing= 1000;
377  param.m_setup_actor_sizing= 0;
378  param.m_setup_object_sizing= 0;
379 
380  init_event_name_sizing(& param);
381  rc= init_instruments(& param);
382  ok(rc == 1, "oom (socket)");
383 
385 
386  param.m_host_sizing= 0;
387  param.m_user_sizing= 0;
388  param.m_account_sizing= 0;
389  param.m_stage_class_sizing= 0;
392  param.m_statement_class_sizing= 0;
396 
397  stub_alloc_fails_after_count= 1;
398  init_event_name_sizing(& param);
399  rc= init_instruments(& param);
400  ok(rc == 1, "oom (per thread waits)");
402 
403  param.m_enabled= true;
404  param.m_mutex_class_sizing= 0;
405  param.m_rwlock_class_sizing= 0;
406  param.m_cond_class_sizing= 0;
407  param.m_thread_class_sizing= 10;
408  param.m_table_share_sizing= 0;
409  param.m_file_class_sizing= 0;
410  param.m_mutex_sizing= 0;
411  param.m_rwlock_sizing= 0;
412  param.m_cond_sizing= 0;
413  param.m_thread_sizing= 1000;
414  param.m_table_sizing= 0;
415  param.m_file_sizing= 0;
416  param.m_file_handle_sizing= 0;
419  param.m_setup_actor_sizing= 0;
420  param.m_setup_object_sizing= 0;
421  param.m_host_sizing= 0;
422  param.m_user_sizing= 0;
423  param.m_account_sizing= 0;
424  param.m_stage_class_sizing= 0;
427  param.m_statement_class_sizing= 0;
431 
432  stub_alloc_fails_after_count= 3;
433  init_event_name_sizing(& param);
434  rc= init_instruments(& param);
435  ok(rc == 1, "oom (thread stages history sizing)");
437 
438  param.m_enabled= true;
439  param.m_mutex_class_sizing= 0;
440  param.m_rwlock_class_sizing= 0;
441  param.m_cond_class_sizing= 0;
442  param.m_thread_class_sizing= 10;
443  param.m_table_share_sizing= 0;
444  param.m_file_class_sizing= 0;
445  param.m_mutex_sizing= 0;
446  param.m_rwlock_sizing= 0;
447  param.m_cond_sizing= 0;
448  param.m_thread_sizing= 1000;
449  param.m_table_sizing= 0;
450  param.m_file_sizing= 0;
451  param.m_file_handle_sizing= 0;
454  param.m_setup_actor_sizing= 0;
455  param.m_setup_object_sizing= 0;
456  param.m_host_sizing= 0;
457  param.m_user_sizing= 0;
458  param.m_account_sizing= 0;
459  param.m_stage_class_sizing= 50;
462  param.m_statement_class_sizing= 0;
466 
467  stub_alloc_fails_after_count= 2;
468  init_event_name_sizing(& param);
469  rc= init_instruments(& param);
470  ok(rc == 1, "oom (per thread stages)");
472 
473  param.m_enabled= true;
474  param.m_mutex_class_sizing= 0;
475  param.m_rwlock_class_sizing= 0;
476  param.m_cond_class_sizing= 0;
477  param.m_thread_class_sizing= 10;
478  param.m_table_share_sizing= 0;
479  param.m_file_class_sizing= 0;
480  param.m_mutex_sizing= 0;
481  param.m_rwlock_sizing= 0;
482  param.m_cond_sizing= 0;
483  param.m_thread_sizing= 1000;
484  param.m_table_sizing= 0;
485  param.m_file_sizing= 0;
486  param.m_file_handle_sizing= 0;
489  param.m_setup_actor_sizing= 0;
490  param.m_setup_object_sizing= 0;
491  param.m_host_sizing= 0;
492  param.m_user_sizing= 0;
493  param.m_account_sizing= 0;
494  param.m_stage_class_sizing= 0;
497  param.m_statement_class_sizing= 0;
501 
502  stub_alloc_fails_after_count= 2;
503  init_event_name_sizing(& param);
504  rc= init_instruments(& param);
505  ok(rc == 1, "oom (thread statements history sizing)");
507 
508  param.m_enabled= true;
509  param.m_mutex_class_sizing= 0;
510  param.m_rwlock_class_sizing= 0;
511  param.m_cond_class_sizing= 0;
512  param.m_thread_class_sizing= 10;
513  param.m_table_share_sizing= 0;
514  param.m_file_class_sizing= 0;
515  param.m_mutex_sizing= 0;
516  param.m_rwlock_sizing= 0;
517  param.m_cond_sizing= 0;
518  param.m_thread_sizing= 1000;
519  param.m_table_sizing= 0;
520  param.m_file_sizing= 0;
521  param.m_file_handle_sizing= 0;
524  param.m_setup_actor_sizing= 0;
525  param.m_setup_object_sizing= 0;
526  param.m_host_sizing= 0;
527  param.m_user_sizing= 0;
528  param.m_account_sizing= 0;
529  param.m_stage_class_sizing= 0;
532  param.m_statement_class_sizing= 50;
536 
537  stub_alloc_fails_after_count= 2;
538  init_event_name_sizing(& param);
539  rc= init_instruments(& param);
540  ok(rc == 1, "oom (per thread statements)");
542 
543  param.m_enabled= true;
544  param.m_mutex_class_sizing= 10;
545  param.m_rwlock_class_sizing= 0;
546  param.m_cond_class_sizing= 0;
547  param.m_thread_class_sizing= 0;
548  param.m_table_share_sizing= 0;
549  param.m_file_class_sizing= 0;
550  param.m_mutex_sizing= 0;
551  param.m_rwlock_sizing= 0;
552  param.m_cond_sizing= 0;
553  param.m_thread_sizing= 0;
554  param.m_table_sizing= 0;
555  param.m_file_sizing= 0;
556  param.m_file_handle_sizing= 0;
559  param.m_setup_actor_sizing= 0;
560  param.m_setup_object_sizing= 0;
561  param.m_host_sizing= 0;
562  param.m_user_sizing= 0;
563  param.m_account_sizing= 0;
564  param.m_stage_class_sizing= 0;
567  param.m_statement_class_sizing= 0;
571 
572  stub_alloc_fails_after_count= 1;
573  init_event_name_sizing(& param);
574  rc= init_instruments(& param);
575  ok(rc == 1, "oom (global waits)");
577 
578  param.m_enabled= true;
579  param.m_mutex_class_sizing= 10;
580  param.m_rwlock_class_sizing= 0;
581  param.m_cond_class_sizing= 0;
582  param.m_thread_class_sizing= 0;
583  param.m_table_share_sizing= 0;
584  param.m_file_class_sizing= 0;
585  param.m_mutex_sizing= 0;
586  param.m_rwlock_sizing= 0;
587  param.m_cond_sizing= 0;
588  param.m_thread_sizing= 0;
589  param.m_table_sizing= 0;
590  param.m_file_sizing= 0;
591  param.m_file_handle_sizing= 0;
594  param.m_setup_actor_sizing= 0;
595  param.m_setup_object_sizing= 0;
596  param.m_host_sizing= 0;
597  param.m_user_sizing= 0;
598  param.m_account_sizing= 0;
599  param.m_stage_class_sizing= 20;
602  param.m_statement_class_sizing= 0;
606 
607  stub_alloc_fails_after_count= 3;
608  init_event_name_sizing(& param);
610  ok(rc == 0, "init stage class");
611  rc= init_instruments(& param);
612  ok(rc == 1, "oom (global stages)");
615 
616  param.m_enabled= true;
617  param.m_mutex_class_sizing= 10;
618  param.m_rwlock_class_sizing= 0;
619  param.m_cond_class_sizing= 0;
620  param.m_thread_class_sizing= 0;
621  param.m_table_share_sizing= 0;
622  param.m_file_class_sizing= 0;
623  param.m_mutex_sizing= 0;
624  param.m_rwlock_sizing= 0;
625  param.m_cond_sizing= 0;
626  param.m_thread_sizing= 0;
627  param.m_table_sizing= 0;
628  param.m_file_sizing= 0;
629  param.m_file_handle_sizing= 0;
632  param.m_setup_actor_sizing= 0;
633  param.m_setup_object_sizing= 0;
634  param.m_host_sizing= 0;
635  param.m_user_sizing= 0;
636  param.m_account_sizing= 0;
637  param.m_stage_class_sizing= 0;
640  param.m_statement_class_sizing= 20;
644 
645  stub_alloc_fails_after_count= 3;
646  init_event_name_sizing(& param);
648  ok(rc == 0, "init statement class");
649  rc= init_instruments(& param);
650  ok(rc == 1, "oom (global statements)");
653 }
654 
655 void do_all_tests()
656 {
658 
659  test_oom();
660 
662 }
663 
664 int main(int, char **)
665 {
666  plan(20);
667  MY_INIT("pfs_instr-oom-t");
668  do_all_tests();
669  return 0;
670 }
671