~brianaker/libmemcached/1164440

« back to all changes in this revision

Viewing changes to libmemcached/memcached_delete.c

  • Committer: patg@patg.net
  • Date: 2008-05-05 03:32:10 UTC
  • mfrom: (317.1.71)
  • Revision ID: patg@patg.net-20080505033210-yxv0us02t8lb44dy
Merge 477:75823cad36b7 with -r 476

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#include "common.h"
 
2
 
 
3
memcached_return memcached_delete(memcached_st *ptr, char *key, size_t key_length,
 
4
                                  time_t expiration)
 
5
{
 
6
  return memcached_delete_by_key(ptr, key, key_length,
 
7
                                 key, key_length, expiration);
 
8
}
 
9
 
 
10
memcached_return memcached_delete_by_key(memcached_st *ptr, 
 
11
                                         char *master_key, size_t master_key_length,
 
12
                                         char *key, size_t key_length,
 
13
                                         time_t expiration)
 
14
{
 
15
  char to_write;
 
16
  size_t send_length;
 
17
  memcached_return rc;
 
18
  char buffer[MEMCACHED_DEFAULT_COMMAND_SIZE];
 
19
  unsigned int server_key;
 
20
 
 
21
  LIBMEMCACHED_MEMCACHED_DELETE_START();
 
22
 
 
23
  unlikely (key_length == 0)
 
24
    return MEMCACHED_NO_KEY_PROVIDED;
 
25
 
 
26
  unlikely (ptr->hosts == NULL || ptr->number_of_hosts == 0)
 
27
    return MEMCACHED_NO_SERVERS;
 
28
 
 
29
  server_key= memcached_generate_hash(ptr, master_key, master_key_length);
 
30
 
 
31
  if (expiration)
 
32
    send_length= snprintf(buffer, MEMCACHED_DEFAULT_COMMAND_SIZE, 
 
33
                          "delete %.*s %llu\r\n", (int)key_length, key, 
 
34
                          (unsigned long long)expiration);
 
35
  else
 
36
    send_length= snprintf(buffer, MEMCACHED_DEFAULT_COMMAND_SIZE, 
 
37
                          "delete %.*s\r\n", (int)key_length, key);
 
38
 
 
39
  if (send_length >= MEMCACHED_DEFAULT_COMMAND_SIZE)
 
40
  {
 
41
    rc= MEMCACHED_WRITE_FAILURE;
 
42
    goto error;
 
43
  }
 
44
 
 
45
  to_write= (ptr->flags & MEM_BUFFER_REQUESTS) ? 0 : 1;
 
46
 
 
47
  rc= memcached_do(&ptr->hosts[server_key], buffer, send_length, to_write);
 
48
  if (rc != MEMCACHED_SUCCESS)
 
49
    goto error;
 
50
 
 
51
  if ((ptr->flags & MEM_BUFFER_REQUESTS))
 
52
  {
 
53
    rc= MEMCACHED_BUFFERED;
 
54
  }
 
55
  else
 
56
  {
 
57
    rc= memcached_response(&ptr->hosts[server_key], buffer, MEMCACHED_DEFAULT_COMMAND_SIZE, NULL);
 
58
    if (rc == MEMCACHED_DELETED)
 
59
      rc= MEMCACHED_SUCCESS;
 
60
  }
 
61
 
 
62
  if (rc == MEMCACHED_SUCCESS && ptr->delete_trigger)
 
63
    ptr->delete_trigger(ptr, key, key_length);
 
64
 
 
65
error:
 
66
  LIBMEMCACHED_MEMCACHED_DELETE_END();
 
67
  return rc;
 
68
}