summaryrefslogtreecommitdiffstats
path: root/sql/scheduler.h
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--sql/scheduler.h97
1 files changed, 97 insertions, 0 deletions
diff --git a/sql/scheduler.h b/sql/scheduler.h
new file mode 100644
index 00000000..ebf8d6e9
--- /dev/null
+++ b/sql/scheduler.h
@@ -0,0 +1,97 @@
+#ifndef SCHEDULER_INCLUDED
+#define SCHEDULER_INCLUDED
+
+/* Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved.
+ Copyright (c) 2012, Monty Program Ab
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; version 2 of the License.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA */
+
+/*
+ Classes for the thread scheduler
+*/
+
+#ifdef USE_PRAGMA_INTERFACE
+#pragma interface
+#endif
+
+class THD;
+
+/* Functions used when manipulating threads */
+
+struct scheduler_functions
+{
+ uint max_threads;
+ Atomic_counter<uint> *connection_count;
+ ulong *max_connections;
+ bool (*init)(void);
+ void (*add_connection)(CONNECT *connect);
+ void (*thd_wait_begin)(THD *thd, int wait_type);
+ void (*thd_wait_end)(THD *thd);
+ void (*post_kill_notification)(THD *thd);
+ void (*end)(void);
+};
+
+
+/**
+ Scheduler types enumeration.
+
+ The default of --thread-handling is the first one in the
+ thread_handling_names array, this array has to be consistent with
+ the order in this array, so to change default one has to change the
+ first entry in this enum and the first entry in the
+ thread_handling_names array.
+
+ @note The last entry of the enumeration is also used to mark the
+ thread handling as dynamic. In this case the name of the thread
+ handling is fetched from the name of the plugin that implements it.
+*/
+enum scheduler_types
+{
+ /*
+ The default of --thread-handling is the first one in the
+ thread_handling_names array, this array has to be consistent with
+ the order in this array, so to change default one has to change
+ the first entry in this enum and the first entry in the
+ thread_handling_names array.
+ */
+ SCHEDULER_ONE_THREAD_PER_CONNECTION=0,
+ SCHEDULER_NO_THREADS,
+ SCHEDULER_TYPES_COUNT
+};
+
+void one_thread_per_connection_scheduler(scheduler_functions *func,
+ ulong *arg_max_connections, Atomic_counter<uint> *arg_connection_count);
+void one_thread_scheduler(scheduler_functions *func);
+
+extern void scheduler_init();
+extern void post_kill_notification(THD *);
+/*
+ To be used for pool-of-threads (implemeneted differently on various OSs)
+*/
+struct thd_scheduler
+{
+public:
+ void *data; /* scheduler-specific data structure */
+};
+
+#ifdef HAVE_POOL_OF_THREADS
+void pool_of_threads_scheduler(scheduler_functions* func,
+ ulong *arg_max_connections,
+ Atomic_counter<uint> *arg_connection_count);
+#else
+#define pool_of_threads_scheduler(A,B,C) \
+ one_thread_per_connection_scheduler(A, B, C)
+#endif /*HAVE_POOL_OF_THREADS*/
+
+#endif /* SCHEDULER_INCLUDED */