7 #include "utilities/engine_loader.h"
8 #include <memcached/types.h>
10 static const char *
const feature_descriptions[] = {
21 bool load_engine(
const char *soname,
31 } my_create = {.create = NULL };
33 handle = dlopen(soname, RTLD_NOW | RTLD_LOCAL);
35 const char *
msg = dlerror();
36 logger->
log(EXTENSION_LOG_WARNING, NULL,
37 "Failed to open library \"%s\": %s\n",
38 soname ? soname :
"self",
39 msg ? msg :
"unknown error");
43 void *symbol = dlsym(handle,
"create_instance");
45 logger->
log(EXTENSION_LOG_WARNING, NULL,
46 "Could not find symbol \"create_instance\" in %s: %s\n",
47 soname ? soname :
"self",
51 my_create.voidptr = symbol;
54 ENGINE_ERROR_CODE error = (*my_create.create)(1, get_server_api, &engine);
56 if (error != ENGINE_SUCCESS || engine == NULL) {
57 logger->
log(EXTENSION_LOG_WARNING, NULL,
58 "Failed to create instance. Error code: %d\n", error);
62 *engine_handle = engine;
67 const char *config_str,
73 logger->
log(EXTENSION_LOG_WARNING, NULL,
74 "Failed to initialize engine, engine must fist be loaded.");
85 engine_v1->
get == NULL || engine_v1->
store == NULL ||
86 engine_v1->
flush == NULL ||
91 logger->
log(EXTENSION_LOG_WARNING, NULL,
92 "Failed to initialize engine; it does not implement the engine interface.");
96 ENGINE_ERROR_CODE error = engine_v1->
initialize(engine,config_str);
97 if (error != ENGINE_SUCCESS) {
98 engine_v1->
destroy(engine,
false);
99 logger->
log(EXTENSION_LOG_WARNING, NULL,
100 "Failed to initialize instance. Error code: %d\n",
106 logger->
log(EXTENSION_LOG_WARNING, NULL,
107 "Unsupported interface level\n");
122 ssize_t nw = snprintf(message,
sizeof(message),
"Loaded engine: %s\n",
132 nw = snprintf(message + offset,
sizeof(message) - offset,
133 "Supplying the following features: ");
140 nw = snprintf(message + offset,
sizeof(message) - offset,
141 "%s%s", comma ?
", " :
"",
145 nw = snprintf(message + offset,
sizeof(message) - offset,
146 "%s%s", comma ?
", " :
"",
149 nw = snprintf(message + offset,
sizeof(message) - offset,
150 "%sUnknown feature: %d", comma ?
", " :
"",
161 logger->
log(EXTENSION_LOG_INFO, NULL,
"%s\n", message);
163 logger->
log(EXTENSION_LOG_INFO, NULL,
164 "Loaded engine: Unknown\n");