#include "common.h"
-static memcached_return memcached_flush_binary(memcached_st *ptr,
- time_t expiration);
-static memcached_return memcached_flush_textual(memcached_st *ptr,
- time_t expiration);
+static memcached_return_t memcached_flush_binary(memcached_st *ptr,
+ time_t expiration);
+static memcached_return_t memcached_flush_textual(memcached_st *ptr,
+ time_t expiration);
-memcached_return memcached_flush(memcached_st *ptr, time_t expiration)
+memcached_return_t memcached_flush(memcached_st *ptr, time_t expiration)
{
- memcached_return rc;
+ memcached_return_t rc;
LIBMEMCACHED_MEMCACHED_FLUSH_START();
- if (ptr->flags & MEM_BINARY_PROTOCOL)
+ if (ptr->flags.binary_protocol)
rc= memcached_flush_binary(ptr, expiration);
else
rc= memcached_flush_textual(ptr, expiration);
return rc;
}
-static memcached_return memcached_flush_textual(memcached_st *ptr,
- time_t expiration)
+static memcached_return_t memcached_flush_textual(memcached_st *ptr,
+ time_t expiration)
{
unsigned int x;
size_t send_length;
- memcached_return rc;
+ memcached_return_t rc;
char buffer[MEMCACHED_DEFAULT_COMMAND_SIZE];
unlikely (ptr->number_of_hosts == 0)
for (x= 0; x < ptr->number_of_hosts; x++)
{
+ bool no_reply= ptr->flags.no_reply;
+
if (expiration)
- send_length= snprintf(buffer, MEMCACHED_DEFAULT_COMMAND_SIZE,
- "flush_all %llu\r\n", (unsigned long long)expiration);
+ send_length= (size_t) snprintf(buffer, MEMCACHED_DEFAULT_COMMAND_SIZE,
+ "flush_all %llu%s\r\n",
+ (unsigned long long)expiration, no_reply ? " noreply" : "");
else
- send_length= snprintf(buffer, MEMCACHED_DEFAULT_COMMAND_SIZE,
- "flush_all\r\n");
+ send_length= (size_t) snprintf(buffer, MEMCACHED_DEFAULT_COMMAND_SIZE,
+ "flush_all%s\r\n", no_reply ? " noreply" : "");
rc= memcached_do(&ptr->hosts[x], buffer, send_length, 1);
- if (rc == MEMCACHED_SUCCESS)
+ if (rc == MEMCACHED_SUCCESS && !no_reply)
(void)memcached_response(&ptr->hosts[x], buffer, MEMCACHED_DEFAULT_COMMAND_SIZE, NULL);
}
return MEMCACHED_SUCCESS;
}
-static memcached_return memcached_flush_binary(memcached_st *ptr,
- time_t expiration)
+static memcached_return_t memcached_flush_binary(memcached_st *ptr,
+ time_t expiration)
{
unsigned int x;
protocol_binary_request_flush request= {.bytes= {0}};
request.message.header.request.extlen= 4;
request.message.header.request.datatype= PROTOCOL_BINARY_RAW_BYTES;
request.message.header.request.bodylen= htonl(request.message.header.request.extlen);
- request.message.body.expiration= htonl(expiration);
+ request.message.body.expiration= htonl((uint32_t) expiration);
for (x= 0; x < ptr->number_of_hosts; x++)
{
+ if (ptr->flags.no_reply)
+ request.message.header.request.opcode= PROTOCOL_BINARY_CMD_FLUSHQ;
+ else
+ request.message.header.request.opcode= PROTOCOL_BINARY_CMD_FLUSH;
if (memcached_do(&ptr->hosts[x], request.bytes,
sizeof(request.bytes), 1) != MEMCACHED_SUCCESS)
{
for (x= 0; x < ptr->number_of_hosts; x++)
{
if (memcached_server_response_count(&ptr->hosts[x]) > 0)
- (void)memcached_response(&ptr->hosts[x], NULL, 0, NULL);
+ (void)memcached_response(&ptr->hosts[x], NULL, 0, NULL);
}
return MEMCACHED_SUCCESS;