168 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			168 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
#pragma once
 | 
						|
/*
 | 
						|
 * Copyright (c) 2016 MariaDB Corporation Ab
 | 
						|
 *
 | 
						|
 * Use of this software is governed by the Business Source License included
 | 
						|
 * in the LICENSE.TXT file and at www.mariadb.com/bsl11.
 | 
						|
 *
 | 
						|
 * Change Date: 2020-01-01
 | 
						|
 *
 | 
						|
 * On the date above, in accordance with the Business Source License, use
 | 
						|
 * of this software will be governed by version 2 or later of the General
 | 
						|
 * Public License.
 | 
						|
 */
 | 
						|
 | 
						|
#include <maxscale/cdefs.h>
 | 
						|
#include <maxscale/poll.h>
 | 
						|
#include <maxscale/thread.h>
 | 
						|
#include <maxscale/jansson.h>
 | 
						|
 | 
						|
MXS_BEGIN_DECLS
 | 
						|
 | 
						|
typedef struct mxs_worker
 | 
						|
{
 | 
						|
} MXS_WORKER;
 | 
						|
 | 
						|
enum mxs_worker_msg_id
 | 
						|
{
 | 
						|
    /**
 | 
						|
     * Ping message.
 | 
						|
     *
 | 
						|
     * arg1: 0
 | 
						|
     * arg2: NULL or pointer to dynamically allocated NULL-terminated string,
 | 
						|
     *       to be freed by worker.
 | 
						|
     */
 | 
						|
    MXS_WORKER_MSG_PING,
 | 
						|
 | 
						|
    /**
 | 
						|
     * Shutdown message.
 | 
						|
     *
 | 
						|
     * arg1: 0
 | 
						|
     * arg2: NULL
 | 
						|
     */
 | 
						|
    MXS_WORKER_MSG_SHUTDOWN,
 | 
						|
 | 
						|
    /**
 | 
						|
     * Function call message.
 | 
						|
     *
 | 
						|
     * arg1: Pointer to function with the prototype: void (*)(int thread_id, void* arg2);
 | 
						|
     * arg2: Second argument for the function passed in arg1.
 | 
						|
     */
 | 
						|
    MXS_WORKER_MSG_CALL
 | 
						|
};
 | 
						|
 | 
						|
/**
 | 
						|
 * Return the worker associated with the provided worker id.
 | 
						|
 *
 | 
						|
 * @param worker_id  A worker id.
 | 
						|
 *
 | 
						|
 * @return The corresponding worker instance, or NULL if the id does
 | 
						|
 *         not correspond to a worker.
 | 
						|
 */
 | 
						|
MXS_WORKER* mxs_worker_get(int worker_id);
 | 
						|
 | 
						|
/**
 | 
						|
 * Return the id of the worker.
 | 
						|
 *
 | 
						|
 * @param worker  A worker.
 | 
						|
 *
 | 
						|
 * @return The id of the worker.
 | 
						|
 */
 | 
						|
int mxs_worker_id(MXS_WORKER* pWorker);
 | 
						|
 | 
						|
/**
 | 
						|
 * Return the id of the worker.
 | 
						|
 *
 | 
						|
 * @return The id of the worker.
 | 
						|
 *
 | 
						|
 * @attention If there is no current worker, then -1 will be returned.
 | 
						|
 */
 | 
						|
int mxs_worker_get_current_id();
 | 
						|
 | 
						|
/**
 | 
						|
 * Post a message to a worker.
 | 
						|
 *
 | 
						|
 * @param worker  The worker to whom the message should be sent.
 | 
						|
 * @param msg_id  The message id.
 | 
						|
 * @param arg1    Message specific first argument.
 | 
						|
 * @param arg2    Message specific second argument.
 | 
						|
 *
 | 
						|
 * @return True if the message could be sent, false otherwise. If the message
 | 
						|
 *         posting fails, errno is set appropriately.
 | 
						|
 *
 | 
						|
 * @attention The return value tells *only* whether the message could be sent,
 | 
						|
 *            *not* that it has reached the worker.
 | 
						|
 *
 | 
						|
 * @attention This function is signal safe.
 | 
						|
 */
 | 
						|
bool mxs_worker_post_message(MXS_WORKER* worker, uint32_t msg_id, intptr_t arg1, intptr_t arg2);
 | 
						|
 | 
						|
/**
 | 
						|
 * Broadcast a message to all worker.
 | 
						|
 *
 | 
						|
 * @param msg_id  The message id.
 | 
						|
 * @param arg1    Message specific first argument.
 | 
						|
 * @param arg2    Message specific second argument.
 | 
						|
 *
 | 
						|
 * @return The number of messages posted; if less that ne number of workers
 | 
						|
 *         then some postings failed.
 | 
						|
 *
 | 
						|
 * @attention The return value tells *only* whether message could be posted,
 | 
						|
 *            *not* that it has reached the worker.
 | 
						|
 *
 | 
						|
 * @attentsion Exactly the same arguments are passed to all workers. Take that
 | 
						|
 *             into account if the passed data must be freed.
 | 
						|
 *
 | 
						|
 * @attention This function is signal safe.
 | 
						|
 */
 | 
						|
size_t mxs_worker_broadcast_message(uint32_t msg_id, intptr_t arg1, intptr_t arg2);
 | 
						|
 | 
						|
/**
 | 
						|
 * Add a session to the current worker's session container. Currently only
 | 
						|
 * required for some special commands e.g. "KILL <process_id>" to work.
 | 
						|
 *
 | 
						|
 * @param session Session to add.
 | 
						|
 * @return true if successful, false if id already existed in map.
 | 
						|
 */
 | 
						|
bool mxs_worker_register_session(MXS_SESSION* session);
 | 
						|
 | 
						|
/**
 | 
						|
 * Remove a session from the current worker's session container. Does not actually
 | 
						|
 * remove anything from an epoll-set or affect the session in any way.
 | 
						|
 *
 | 
						|
 * @param id Which id to remove.
 | 
						|
 * @return The removed session or NULL if not found.
 | 
						|
 */
 | 
						|
bool mxs_worker_deregister_session(uint64_t id);
 | 
						|
 | 
						|
/**
 | 
						|
 * Find a session in the current worker's session container.
 | 
						|
 *
 | 
						|
 * @param id Which id to find.
 | 
						|
 * @return The found session or NULL if not found.
 | 
						|
 */
 | 
						|
MXS_SESSION* mxs_worker_find_session(uint64_t id);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief Convert a worker to JSON format
 | 
						|
 *
 | 
						|
 * @param host Hostname of this server
 | 
						|
 * @param id   ID of the worker
 | 
						|
 *
 | 
						|
 * @return JSON resource representing the worker
 | 
						|
 */
 | 
						|
json_t* mxs_worker_to_json(const char* host, int id);
 | 
						|
 | 
						|
/**
 | 
						|
 * Convert workers into JSON format
 | 
						|
 *
 | 
						|
 * @param host Hostname of this server
 | 
						|
 *
 | 
						|
 * @return A JSON resource collection of workers
 | 
						|
 *
 | 
						|
 * @see mxs_json_resource()
 | 
						|
 */
 | 
						|
json_t* mxs_worker_list_to_json(const char* host);
 | 
						|
 | 
						|
MXS_END_DECLS
 |