You've already forked mariadb-columnstore-engine
							
							
				mirror of
				https://github.com/mariadb-corporation/mariadb-columnstore-engine.git
				synced 2025-10-31 18:30:33 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			196 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			196 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /* Copyright (C) 2014 InfiniDB, Inc.
 | |
| 
 | |
|    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 Street, Fifth Floor, Boston,
 | |
|    MA 02110-1301, USA. */
 | |
| 
 | |
| /******************************************************************************************
 | |
|  *
 | |
|  * $Id: primproc.h 2035 2013-01-21 14:12:19Z rdempsey $
 | |
|  *
 | |
|  ******************************************************************************************/
 | |
| /**
 | |
|  * @file
 | |
|  */
 | |
| #pragma once
 | |
| 
 | |
| #include <string>
 | |
| #include <sstream>
 | |
| #include <exception>
 | |
| #include <iostream>
 | |
| #include <unistd.h>
 | |
| #include <stdexcept>
 | |
| #include <boost/thread.hpp>
 | |
| #include <map>
 | |
| 
 | |
| #include "service.h"
 | |
| #include "fair_threadpool.h"
 | |
| #include "pp_logger.h"
 | |
| 
 | |
| namespace primitiveprocessor
 | |
| {
 | |
| #define SUMMARY_INFO(message)          \
 | |
|   if (isDebug(SUMMARY))                \
 | |
|   {                                    \
 | |
|     std::cout << message << std::endl; \
 | |
|   }
 | |
| 
 | |
| #define SUMMARY_INFO2(message1, message2)           \
 | |
|   if (isDebug(SUMMARY))                             \
 | |
|   {                                                 \
 | |
|     std::cout << message1 << message2 << std::endl; \
 | |
|   }
 | |
| 
 | |
| #define SUMMARY_INFO3(message1, message2, message3)             \
 | |
|   if (isDebug(SUMMARY))                                         \
 | |
|   {                                                             \
 | |
|     std::cout << message1 << message2 << message3 << std::endl; \
 | |
|   }
 | |
| 
 | |
| #define DETAIL_INFO(message)           \
 | |
|   if (isDebug(DETAIL))                 \
 | |
|   {                                    \
 | |
|     std::cout << message << std::endl; \
 | |
|   }
 | |
| 
 | |
| #define DETAIL_INFO2(message1, message2)            \
 | |
|   if (isDebug(DETAIL))                              \
 | |
|   {                                                 \
 | |
|     std::cout << message1 << message2 << std::endl; \
 | |
|   }
 | |
| 
 | |
| #define DETAIL_INFO3(message1, message2, message3)              \
 | |
|   if (isDebug(DETAIL))                                          \
 | |
|   {                                                             \
 | |
|     std::cout << message1 << message2 << message3 << std::endl; \
 | |
|   }
 | |
| 
 | |
| #define VERBOSE_INFO(message)          \
 | |
|   if (isDebug(VERBOSE))                \
 | |
|   {                                    \
 | |
|     std::cout << message << std::endl; \
 | |
|   }
 | |
| 
 | |
| #define VERBOSE_INFO2(message1, message2)           \
 | |
|   if (isDebug(VERBOSE))                             \
 | |
|   {                                                 \
 | |
|     std::cout << message1 << message2 << std::endl; \
 | |
|   }
 | |
| 
 | |
| #define VERBOSE_INFO3(message1, message2, message3)             \
 | |
|   if (isDebug(VERBOSE))                                         \
 | |
|   {                                                             \
 | |
|     std::cout << message1 << message2 << message3 << std::endl; \
 | |
|   }
 | |
| 
 | |
| enum DebugLevel /** @brief Debug level type enumeration */
 | |
| {
 | |
|   NONE = 0,    /** @brief No debug info */
 | |
|   STATS = 1,   /** @brief stats info */
 | |
|   SUMMARY = 2, /** @brief Summary level debug info */
 | |
|   DETAIL = 3,  /** @brief A little detail debug info */
 | |
|   VERBOSE = 4, /** @brief Detailed debug info */
 | |
| };
 | |
| 
 | |
| bool isDebug(const DebugLevel level);
 | |
| 
 | |
| const int MAX_BUFFER_SIZE = 32768 * 2;
 | |
| 
 | |
| // message log globals
 | |
| // const logging::LoggingID lid1(28);
 | |
| // extern logging::Message msg16;
 | |
| // extern logging::MessageLog ml1;
 | |
| // extern boost::mutex logLock;
 | |
| extern Logger* mlp;
 | |
| 
 | |
| }  // namespace primitiveprocessor
 | |
| 
 | |
| class Opt
 | |
| {
 | |
|  public:
 | |
|   int m_debug;
 | |
|   bool m_fg;
 | |
|   Opt(int m_debug, bool m_fg) : m_debug(m_debug), m_fg(m_fg)
 | |
|   {
 | |
|   }
 | |
| 
 | |
|   Opt(int argc, char* argv[]) : m_debug(0), m_fg(false)
 | |
|   {
 | |
|     int c;
 | |
| 
 | |
|     while ((c = getopt(argc, argv, "df")) != EOF)
 | |
|     {
 | |
|       switch (c)
 | |
|       {
 | |
|         case 'd': m_debug++; break;
 | |
|         case 'f': m_fg = true; break;
 | |
|         case '?':
 | |
|         default: break;
 | |
|       }
 | |
|     }
 | |
|   }
 | |
| };
 | |
| 
 | |
| class ServicePrimProc : public Service, public Opt
 | |
| {
 | |
|  public:
 | |
|   static ServicePrimProc* instance();
 | |
| 
 | |
|   void setOpt(const Opt& opt)
 | |
|   {
 | |
|     m_debug = opt.m_debug;
 | |
|     m_fg = opt.m_fg;
 | |
|   }
 | |
| 
 | |
|   void LogErrno() override
 | |
|   {
 | |
|     std::cerr << strerror(errno) << std::endl;
 | |
|   }
 | |
| 
 | |
|   void ParentLogChildMessage(const std::string& str) override
 | |
|   {
 | |
|     std::cout << str << std::endl;
 | |
|   }
 | |
|   int Child() override;
 | |
|   int Run()
 | |
|   {
 | |
|     return m_fg ? Child() : RunForking();
 | |
|   }
 | |
|   std::atomic_flag& getStartupRaceFlag()
 | |
|   {
 | |
|     return startupRaceFlag_;
 | |
|   }
 | |
| 
 | |
|   boost::shared_ptr<threadpool::FairThreadPool> getPrimitiveServerThreadPool()
 | |
|   {
 | |
|     return primServerThreadPool;
 | |
|   }
 | |
| 
 | |
|   boost::shared_ptr<threadpool::FairThreadPool> getOOBThreadPool()
 | |
|   {
 | |
|     return OOBThreadPool;
 | |
|   }
 | |
| 
 | |
|  private:
 | |
|   ServicePrimProc() : Service("PrimProc"), Opt(0, false)
 | |
|   {
 | |
|   }
 | |
| 
 | |
|   static ServicePrimProc* fInstance;
 | |
|   // Since C++20 flag's init value is false.
 | |
|   std::atomic_flag startupRaceFlag_{false};
 | |
|   boost::shared_ptr<threadpool::FairThreadPool> primServerThreadPool;
 | |
|   boost::shared_ptr<threadpool::FairThreadPool> OOBThreadPool;
 | |
| };
 |