X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;ds=sidebyside;f=lib%2Fmemcached_get.c;h=80b9de378327935e648d4dbd9580beb98a490e53;hb=1bd637f6eccc1064a4e19e40b14a340818d1ccf3;hp=1224d8ab49e402f8b01f1cdbfc77a48c7ad6f7a9;hpb=96cdb1bc8279c9c0cef602b8b536228ead9f1154;p=m6w6%2Flibmemcached diff --git a/lib/memcached_get.c b/lib/memcached_get.c index 1224d8ab..80b9de37 100644 --- a/lib/memcached_get.c +++ b/lib/memcached_get.c @@ -125,6 +125,9 @@ read_error: return NULL; } +/* + What happens if no servers exist? +*/ char *memcached_get(memcached_st *ptr, char *key, size_t key_length, size_t *value_length, uint16_t *flags, @@ -133,7 +136,7 @@ char *memcached_get(memcached_st *ptr, char *key, size_t key_length, char buffer[MEMCACHED_DEFAULT_COMMAND_SIZE]; char *buf_ptr= buffer; unsigned int server_key; - char *value; + char *value= NULL; LIBMEMCACHED_MEMCACHED_GET_START(); server_key= memcached_generate_hash(ptr, key, key_length); @@ -165,7 +168,9 @@ char *memcached_get(memcached_st *ptr, char *key, size_t key_length, goto error; } else if (*error == MEMCACHED_END) - assert(0); /* If this happens we have somehow messed up the fetch */ + { + WATCHPOINT_ASSERT(0); /* If this happens we have somehow messed up the fetch */ + } else if (*error == MEMCACHED_SUCCESS) { memcached_return rc; @@ -198,18 +203,17 @@ memcached_return memcached_mget(memcached_st *ptr, char **keys, size_t *key_length, unsigned int number_of_keys) { - char buffer[HUGE_STRING_LEN]; unsigned int x; - memcached_return rc; - memcached_string_st **cursor_key_exec; + memcached_return rc= MEMCACHED_NOTFOUND; + char *cursor_key_exec; LIBMEMCACHED_MEMCACHED_MGET_START(); - ptr->cursor_server= 0; - memset(buffer, 0, HUGE_STRING_LEN); - cursor_key_exec= (memcached_string_st **)malloc(sizeof(memcached_string_st *) * ptr->number_of_hosts); - memset(cursor_key_exec, 0, sizeof(memcached_string_st *) * ptr->number_of_hosts); + if (number_of_keys == 0) + return MEMCACHED_NOTFOUND; + cursor_key_exec= (char *)malloc(sizeof(char) * ptr->number_of_hosts); + memset(cursor_key_exec, 0, sizeof(char) * ptr->number_of_hosts); for (x= 0; x < number_of_keys; x++) { @@ -217,38 +221,32 @@ memcached_return memcached_mget(memcached_st *ptr, server_key= memcached_generate_hash(ptr, keys[x], key_length[x]); - if (cursor_key_exec[server_key]) + if (cursor_key_exec[server_key] == 0) { - memcached_string_st *string= cursor_key_exec[server_key]; - - rc= memcached_string_append_character(ptr, string, ' '); - - if (rc != MEMCACHED_SUCCESS) - assert(0); - - rc= memcached_string_append(ptr, string, keys[x], key_length[x]); + rc= memcached_connect(ptr, server_key); - if (rc != MEMCACHED_SUCCESS) - assert(0); + if ((memcached_io_write(ptr, server_key, "get ", 4, 0)) == -1) + { + memcached_quit(ptr); + rc= MEMCACHED_SOME_ERRORS; + break; + } } - else - { - memcached_string_st *string= memcached_string_create(ptr, SMALL_STRING_LEN); - /* We need to figure out the correct way to error in case of this failure */ - if (!string) - assert(0); - - rc= memcached_string_append(ptr, string, "get ", 4); - if (rc != MEMCACHED_SUCCESS) - assert(0); - - rc= memcached_string_append(ptr, string, keys[x], key_length[x]); - if (rc != MEMCACHED_SUCCESS) - assert(0); + if ((memcached_io_write(ptr, server_key, keys[x], key_length[x], 0)) == -1) + { + memcached_quit(ptr); + rc= MEMCACHED_SOME_ERRORS; + break; + } - cursor_key_exec[server_key]= string; + if ((memcached_io_write(ptr, server_key, " ", 1, 0)) == -1) + { + memcached_quit(ptr); + rc= MEMCACHED_SOME_ERRORS; + break; } + cursor_key_exec[server_key]= 1; } @@ -260,22 +258,13 @@ memcached_return memcached_mget(memcached_st *ptr, if (cursor_key_exec[x]) { /* We need to doo something about non-connnected hosts in the future */ - rc= memcached_connect(ptr, x); - - memcached_string_st *string= cursor_key_exec[x]; - - rc= memcached_string_append(ptr, string, "\r\n", 2); - if (rc != MEMCACHED_SUCCESS) - assert(0); - - if ((memcached_io_write(ptr, x, string->string, - memcached_string_length(ptr, string), 1)) == -1) + if ((memcached_io_write(ptr, x, "\r\n", 2, 1)) == -1) { memcached_quit(ptr); rc= MEMCACHED_SOME_ERRORS; + break; } - memcached_string_free(ptr, string); - cursor_key_exec[x]= NULL; /* Remove warning */ + ptr->hosts[x].cursor_active= 1; } else @@ -311,7 +300,9 @@ char *memcached_fetch(memcached_st *ptr, char *key, size_t *key_length, else if (*error == MEMCACHED_END && *value_length == 0) return NULL; else if (*error == MEMCACHED_END) - assert(0); /* If this happens we have somehow messed up the fetch */ + { + WATCHPOINT_ASSERT(0); /* If this happens we have somehow messed up the fetch */ + } else if (*error != MEMCACHED_SUCCESS) return NULL; else