~avsej/libmemcached/touch-command

« back to all changes in this revision

Viewing changes to libmemcached/auto.cc

  • Committer: Brian Aker
  • Date: 2011-05-24 20:43:14 UTC
  • mfrom: (929.1.110 libmemcached-build)
  • Revision ID: brian@tangent.org-20110524204314-9ag1kkk4c1a6b3z3
Merge in local trunk

Show diffs side-by-side

added added

removed removed

Lines of Context:
44
44
                                         uint64_t offset,
45
45
                                         uint64_t *value)
46
46
{
47
 
  memcached_return_t rc;
48
47
  char buffer[MEMCACHED_DEFAULT_COMMAND_SIZE];
49
48
  uint32_t server_key;
50
49
  memcached_server_write_instance_st instance;
51
50
  bool no_reply= ptr->flags.no_reply;
52
51
 
53
52
  if (ptr->flags.verify_key && (memcached_key_test((const char **)&key, &key_length, 1) == MEMCACHED_BAD_KEY_PROVIDED))
54
 
    return MEMCACHED_BAD_KEY_PROVIDED;
 
53
    return memcached_set_error(*ptr, MEMCACHED_BAD_KEY_PROVIDED, MEMCACHED_AT);
55
54
 
56
55
  server_key= memcached_generate_hash_with_redistribution(ptr, group_key, group_key_length);
57
56
  instance= memcached_server_instance_fetch(ptr, server_key);
63
62
                        (int)key_length, key,
64
63
                        offset, no_reply ? " noreply" : "");
65
64
  if (send_length >= MEMCACHED_DEFAULT_COMMAND_SIZE || send_length < 0)
66
 
    return MEMCACHED_WRITE_FAILURE;
 
65
  {
 
66
    return memcached_set_error(*ptr, MEMCACHED_MEMORY_ALLOCATION_FAILURE, MEMCACHED_AT, 
 
67
                               memcached_literal_param("snprintf(MEMCACHED_DEFAULT_COMMAND_SIZE)"));
 
68
  }
67
69
 
68
 
  rc= memcached_do(instance, buffer, (size_t)send_length, true);
69
 
  if (no_reply || rc != MEMCACHED_SUCCESS)
 
70
  memcached_return_t rc= memcached_do(instance, buffer, (size_t)send_length, true);
 
71
  if (no_reply or memcached_failed(rc))
70
72
    return rc;
71
73
 
72
74
  rc= memcached_response(instance, buffer, MEMCACHED_DEFAULT_COMMAND_SIZE, NULL);
78
80
    use it. We still called memcached_response() though since it
79
81
    worked its magic for non-blocking IO.
80
82
  */
81
 
  if (! strncmp(buffer, "ERROR\r\n", 7))
82
 
  {
83
 
    *value= 0;
84
 
    rc= MEMCACHED_PROTOCOL_ERROR;
85
 
  }
86
 
  else if (! strncmp(buffer, "CLIENT_ERROR\r\n", 14))
87
 
  {
88
 
    *value= 0;
89
 
    rc= MEMCACHED_PROTOCOL_ERROR;
90
 
  }
91
 
  else if (!strncmp(buffer, "NOT_FOUND\r\n", 11))
 
83
  if (not strncmp(buffer, memcached_literal_param("ERROR\r\n")))
 
84
  {
 
85
    *value= 0;
 
86
    rc= MEMCACHED_PROTOCOL_ERROR;
 
87
  }
 
88
  else if (not strncmp(buffer, memcached_literal_param("CLIENT_ERROR\r\n")))
 
89
  {
 
90
    *value= 0;
 
91
    rc= MEMCACHED_PROTOCOL_ERROR;
 
92
  }
 
93
  else if (not strncmp(buffer, memcached_literal_param("NOT_FOUND\r\n")))
92
94
  {
93
95
    *value= 0;
94
96
    rc= MEMCACHED_NOTFOUND;
99
101
    rc= MEMCACHED_SUCCESS;
100
102
  }
101
103
 
102
 
  return rc;
 
104
  return memcached_set_error(*instance, rc, MEMCACHED_AT);
103
105
}
104
106
 
105
107
static memcached_return_t binary_incr_decr(memcached_st *ptr, uint8_t cmd,
114
116
  bool no_reply= ptr->flags.no_reply;
115
117
 
116
118
  if (memcached_server_count(ptr) == 0)
117
 
    return memcached_set_error(ptr, MEMCACHED_NO_SERVERS, NULL);
 
119
    return memcached_set_error(*ptr, MEMCACHED_NO_SERVERS, MEMCACHED_AT);
118
120
 
119
121
  server_key= memcached_generate_hash_with_redistribution(ptr, group_key, group_key_length);
120
122
  instance= memcached_server_instance_fetch(ptr, server_key);
123
125
  {
124
126
    if(cmd == PROTOCOL_BINARY_CMD_DECREMENT)
125
127
      cmd= PROTOCOL_BINARY_CMD_DECREMENTQ;
 
128
 
126
129
    if(cmd == PROTOCOL_BINARY_CMD_INCREMENT)
127
130
      cmd= PROTOCOL_BINARY_CMD_INCREMENTQ;
128
131
  }