summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohann Latocha2012-01-30 14:54:49 +0100
committerJohann Latocha2012-01-30 14:54:49 +0100
commit7436b3d1517e69bc4f83f1f4060a1765d6b4dd19 (patch)
treeff2fd1f939f61c7e8bcd9350b19f3388b11879d7
parent[KERNEL] Change server at runtime (diff)
downloaddnbd3-7436b3d1517e69bc4f83f1f4060a1765d6b4dd19.tar.gz
dnbd3-7436b3d1517e69bc4f83f1f4060a1765d6b4dd19.tar.xz
dnbd3-7436b3d1517e69bc4f83f1f4060a1765d6b4dd19.zip
[SERVER] Some refactoring
-rw-r--r--src/client/client.c2
-rw-r--r--src/server/hashtable.c8
-rw-r--r--src/server/hashtable.h8
-rw-r--r--src/server/server.c29
-rw-r--r--src/server/utils.c24
-rw-r--r--src/server/utils.h12
6 files changed, 43 insertions, 40 deletions
diff --git a/src/client/client.c b/src/client/client.c
index 54535a3..814c5d0 100644
--- a/src/client/client.c
+++ b/src/client/client.c
@@ -60,7 +60,7 @@ int main(int argc, char *argv[])
int opt = 0;
int longIndex = 0;
- static const char *optString = "H:p:i:d:D:c:hv?";
+ static const char *optString = "H:p:i:d:c:hv?";
static const struct option longOpts[] =
{
{ "host", required_argument, NULL, 'H' },
diff --git a/src/server/hashtable.c b/src/server/hashtable.c
index b6272f2..423e7d2 100644
--- a/src/server/hashtable.c
+++ b/src/server/hashtable.c
@@ -30,19 +30,19 @@ char value_buf[MAX_NUMBER_IMAGES * MAX_FILE_NAME];
char *key_ptr = key_buf;
char *val_ptr = value_buf;
-void ht_create()
+void dnbd3_ht_create()
{
(void) hcreate(MAX_NUMBER_IMAGES);
}
-void ht_destroy()
+void dnbd3_ht_destroy()
{
key_ptr = key_buf;
val_ptr = value_buf;
hdestroy();
}
-int ht_insert(char* key, char* value)
+int dnbd3_ht_insert(char* key, char* value)
{
if (strlen(key) > MAX_FILE_ID) return -1;
if (strlen(value) > MAX_FILE_NAME) return -2;
@@ -62,7 +62,7 @@ int ht_insert(char* key, char* value)
return 0;
}
-char* ht_search(char* key)
+char* dnbd3_ht_search(char* key)
{
ENTRY *result;
diff --git a/src/server/hashtable.h b/src/server/hashtable.h
index 3851d96..2483bbe 100644
--- a/src/server/hashtable.h
+++ b/src/server/hashtable.h
@@ -21,12 +21,12 @@
#ifndef HASHTABLE_H_
#define HASHTABLE_H_
-void ht_create ();
+void dnbd3_ht_create ();
-void ht_destroy();
+void dnbd3_ht_destroy();
-int ht_insert(char* key, char* value);
+int dnbd3_ht_insert(char* key, char* value);
-char* ht_search(char* key);
+char* dnbd3_ht_search(char* key);
#endif /* HASHTABLE_H_ */
diff --git a/src/server/server.c b/src/server/server.c
index 4dbeb7f..33e93f1 100644
--- a/src/server/server.c
+++ b/src/server/server.c
@@ -66,6 +66,13 @@ void print_version()
exit(0);
}
+void cleanup()
+{
+ close(_sock);
+ dnbd3_delete_pid_file();
+ exit(EXIT_SUCCESS);
+}
+
void handle_sigpipe(int signum)
{
printf("ERROR: Received signal SIGPIPE, Broken pipe (errno: %i)\n", errno);
@@ -77,16 +84,14 @@ void handle_sighup(int signum)
printf("INFO: SIGHUP received!\n");
printf("INFO: Reloading configuration...\n");
pthread_spin_lock(&spinlock);
- reload_config(config_file_name);
+ dnbd3_reload_config(config_file_name);
pthread_spin_unlock(&spinlock);
}
void handle_sigterm(int signum)
{
printf("INFO: SIGTERM or SIGINT received!\n");
- close(_sock);
- delete_pid_file();
- exit(EXIT_SUCCESS);
+ cleanup();
}
void *handle_query(void *client_socket)
@@ -105,7 +110,7 @@ void *handle_query(void *client_socket)
{
case CMD_GET_SIZE:
pthread_spin_lock(&spinlock); // because of reloading config
- image_file = open(ht_search(request.image_id), O_RDONLY);
+ image_file = open(dnbd3_ht_search(request.image_id), O_RDONLY);
pthread_spin_unlock(&spinlock);
if (image_file < 0)
{
@@ -145,7 +150,7 @@ void *handle_query(void *client_socket)
}
close(sock);
- printf("Client exit.\n");
+ printf("INFO: Client exit.\n");
pthread_exit((void *) 0);
}
@@ -178,11 +183,11 @@ int main(int argc, char* argv[])
break;
case 'r':
printf("INFO: Reloading configuration file...\n");
- send_signal(SIGHUP);
+ dnbd3_send_signal(SIGHUP);
return EXIT_SUCCESS;
case 's':
printf("INFO: Stopping running server...\n");
- send_signal(SIGTERM);
+ dnbd3_send_signal(SIGTERM);
return EXIT_SUCCESS;
case 'h':
print_help(argv[0]);
@@ -200,7 +205,7 @@ int main(int argc, char* argv[])
daemon(1,0);
pthread_spin_init(&spinlock, PTHREAD_PROCESS_PRIVATE);
- load_config(config_file_name);
+ dnbd3_load_config(config_file_name);
// setup signal handler
signal(SIGPIPE, handle_sigpipe);
@@ -241,7 +246,7 @@ int main(int argc, char* argv[])
exit(EXIT_FAILURE);
}
- write_pid_file(getpid());
+ dnbd3_write_pid_file(getpid());
printf("INFO: Server is ready...\n");
while (1)
@@ -261,7 +266,5 @@ int main(int argc, char* argv[])
pthread_detach(thread);
}
- close(_sock);
- delete_pid_file();
- return EXIT_SUCCESS;
+ cleanup();
}
diff --git a/src/server/utils.c b/src/server/utils.c
index e0bbecf..ab0d29d 100644
--- a/src/server/utils.c
+++ b/src/server/utils.c
@@ -25,7 +25,7 @@
#include <stdlib.h>
#include <signal.h>
-void write_pid_file(pid_t pid)
+void dnbd3_write_pid_file(pid_t pid)
{
FILE *f = fopen(SERVER_PID_FILE, "w");
if(f != NULL)
@@ -39,7 +39,7 @@ void write_pid_file(pid_t pid)
}
}
-pid_t read_pid_file()
+pid_t dnbd3_read_pid_file()
{
pid_t pid = 0;
@@ -57,7 +57,7 @@ pid_t read_pid_file()
return pid;
}
-void delete_pid_file()
+void dnbd3_delete_pid_file()
{
if (unlink(SERVER_PID_FILE) != 0)
{
@@ -66,9 +66,9 @@ void delete_pid_file()
}
-void load_config(char* config_file_name)
+void dnbd3_load_config(char* config_file_name)
{
- ht_create();
+ dnbd3_ht_create();
FILE *config_file = fopen(config_file_name, "r");
if (config_file == NULL)
@@ -84,7 +84,7 @@ void load_config(char* config_file_name)
while (fgets(line, sizeof(line), config_file) != NULL)
{
sscanf(line, "%as %as", &image_name, &image_id);
- if (ht_insert(image_id, image_name) < 0)
+ if (dnbd3_ht_insert(image_id, image_name) < 0)
{
printf("ERROR: Image name or ID is too big\n");
exit(EXIT_FAILURE);
@@ -93,21 +93,21 @@ void load_config(char* config_file_name)
fclose(config_file);
}
-void reload_config(char* config_file_name)
+void dnbd3_reload_config(char* config_file_name)
{
- ht_destroy();
- load_config(config_file_name);
+ dnbd3_ht_destroy();
+ dnbd3_load_config(config_file_name);
}
-void send_signal(int signum)
+void dnbd3_send_signal(int signum)
{
- pid_t pid = read_pid_file();
+ pid_t pid = dnbd3_read_pid_file();
if (pid != 0)
{
if (kill(pid, signum) != 0)
{
printf("ERROR: dnbd3-server is not running\n");
- delete_pid_file();
+ dnbd3_delete_pid_file();
}
}
else
diff --git a/src/server/utils.h b/src/server/utils.h
index f9d6896..67a5444 100644
--- a/src/server/utils.h
+++ b/src/server/utils.h
@@ -26,13 +26,13 @@
#ifndef UTILS_H_
#define UTILS_H_
-void write_pid_file(pid_t pid);
-pid_t read_pid_file();
-void delete_pid_file();
+void dnbd3_write_pid_file(pid_t pid);
+pid_t dnbd3_read_pid_file();
+void dnbd3_delete_pid_file();
-void load_config(char* config_file_name);
-void reload_config(char* config_file_name);
+void dnbd3_load_config(char* config_file_name);
+void dnbd3_reload_config(char* config_file_name);
-void send_signal(int signum);
+void dnbd3_send_signal(int signum);
#endif /* UTILS_H_ */