summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsr2012-09-05 18:32:59 +0200
committersr2012-09-05 18:32:59 +0200
commitcb80529f645f86d50745d63e37754a611e34baef (patch)
treebbd46b4ff34ca0d3ba77514ef7f26d3728918aad
parent[SERVER] Automatically add and remove alt servers from images depending on we... (diff)
downloaddnbd3-cb80529f645f86d50745d63e37754a611e34baef.tar.gz
dnbd3-cb80529f645f86d50745d63e37754a611e34baef.tar.xz
dnbd3-cb80529f645f86d50745d63e37754a611e34baef.zip
make things actually work as promised in last commit
-rw-r--r--src/server/job.c3
-rw-r--r--src/server/saveload.c49
-rw-r--r--src/server/server.c5
3 files changed, 45 insertions, 12 deletions
diff --git a/src/server/job.c b/src/server/job.c
index 6386423..799e69e 100644
--- a/src/server/job.c
+++ b/src/server/job.c
@@ -80,6 +80,7 @@ void *dnbd3_job_thread(void *data)
++j;
}
}
+ memlogf("[INFO] %d available dnbd3 devices for proxy mode", j);
//
time_t next_delete_invocation = 0;
//
@@ -152,7 +153,7 @@ static void query_servers()
pthread_spin_unlock(&_spinlock);
break; // Done
}
- memcpy(&host, &server->host, sizeof(host));
+ host = server->host;
pthread_spin_unlock(&_spinlock);
// Connect
if (host.type != AF_INET)
diff --git a/src/server/saveload.c b/src/server/saveload.c
index 365934b..2aaa1f3 100644
--- a/src/server/saveload.c
+++ b/src/server/saveload.c
@@ -166,9 +166,10 @@ int dnbd3_add_image(dnbd3_image_t *image)
// Adding image was successful, write config file
g_key_file_set_integer(_config_handle, newimage->config_group, "rid", newimage->rid);
- g_key_file_set_string(_config_handle, newimage->config_group, "file", newimage->file);
- //g_key_file_set_string(_config_handle, image->name, "servers", image->serverss); // TODO: Save servers as string
- g_key_file_set_string(_config_handle, newimage->config_group, "cache", newimage->cache_file);
+ if (newimage->file)
+ g_key_file_set_string(_config_handle, newimage->config_group, "file", newimage->file);
+ if (newimage->cache_file)
+ g_key_file_set_string(_config_handle, newimage->config_group, "cache", newimage->cache_file);
pthread_spin_unlock(&_spinlock);
@@ -304,16 +305,37 @@ static dnbd3_image_t *prepare_image(char *image_name, int rid, char *image_file,
memlogf("[ERROR] Null Image-Name");
return NULL;
}
- if (!is_valid_imagename(image_name))
+
+ char *slash = strrchr(image_name, '/');
+
+ if (slash == NULL)
{
- memlogf("[ERROR] Invalid image name: '%s'", image_name);
- return NULL;
+ if (!is_valid_imagename(image_name))
+ {
+ memlogf("[ERROR] Invalid image name: '%s'", image_name);
+ return NULL;
+ }
+ if (_local_namespace == NULL)
+ {
+ memlogf("[ERROR] Image '%s' has local name and no default namespace is defined; entry ignored.", image_name);
+ return NULL;
+ }
}
-
- if (strchr(image_name, '/') == NULL && _local_namespace == NULL)
+ else
{
- memlogf("[ERROR] Image '%s' has local name and no default namespace is defined; entry ignored.", image_name);
- return NULL;
+ *slash = '\0';
+ if (!is_valid_imagename(slash+1))
+ {
+ memlogf("[ERROR] Invalid image name: '%s'", slash+1);
+ return NULL;
+ }
+ if (!is_valid_namespace(image_name))
+ {
+ memlogf("[ERROR] Invalid namespace: '%s'", image_name);
+ *slash = '/';
+ return NULL;
+ }
+ *slash = '/';
}
// Allocate image struct and zero it out by using g_new0
@@ -324,7 +346,7 @@ static dnbd3_image_t *prepare_image(char *image_name, int rid, char *image_file,
return NULL;
}
- if (strchr(image_name, '/') == NULL)
+ if (slash == NULL)
{
// Local image, build global name
image->low_name = calloc(strlen(_local_namespace) + strlen(image_name) + 2, sizeof(char));
@@ -562,6 +584,11 @@ dnbd3_trusted_server_t *dnbd3_get_trusted_server(char *address, char create_if_n
memlogf("[WARNING] Could not parse address '%s' of trusted server", address);
return NULL;
}
+ if (server.host.type == AF_INET6)
+ {
+ printf("[DEBUG] Ignoring IPv6 trusted server.\n");
+ return NULL;
+ }
GSList *iterator;
for (iterator = _trusted_servers; iterator; iterator = iterator->next)
{
diff --git a/src/server/server.c b/src/server/server.c
index 2b8828d..e248a2b 100644
--- a/src/server/server.c
+++ b/src/server/server.c
@@ -32,6 +32,7 @@
#include "server.h"
#include "saveload.h"
+#include "job.h"
#include "net.h"
#include "ipc.h"
#include "memlog.h"
@@ -81,6 +82,7 @@ void dnbd3_cleanup()
sock = -1;
dnbd3_ipc_shutdown();
+ dnbd3_job_shutdown();
pthread_spin_lock(&_spinlock);
GSList *iterator = NULL;
@@ -221,6 +223,9 @@ int main(int argc, char *argv[])
pthread_t thread_ipc;
pthread_create(&(thread_ipc), NULL, &dnbd3_ipc_mainloop, NULL);
+ pthread_t thread_job;
+ pthread_create(&(thread_job), NULL, &dnbd3_job_thread, NULL);
+
memlogf("[INFO] Server is ready...");
// main loop