projects
/
awesomized
/
libmemcached
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
|
github
raw
|
patch
|
inline
| side by side (from parent 1:
0137152
)
MEMCACHED_BEHAVIOR_RETRY_TIMEOUT added for timeout
author
<brian@gir-2.local>
<>
Thu, 6 Mar 2008 04:22:39 +0000
(23:22 -0500)
committer
<brian@gir-2.local>
<>
Thu, 6 Mar 2008 04:22:39 +0000
(23:22 -0500)
ChangeLog
patch
|
blob
|
history
include/memcached.h
patch
|
blob
|
history
lib/memcached_behavior.c
patch
|
blob
|
history
lib/memcached_connect.c
patch
|
blob
|
history
lib/memcached_hosts.c
patch
|
blob
|
history
diff --git
a/ChangeLog
b/ChangeLog
index a4579804aac64805c4b861ba891556633b1e9ab7..ff863160a5da6c7229e83ef424c3ff3e06a14021 100644
(file)
--- a/
ChangeLog
+++ b/
ChangeLog
@@
-3,6
+3,8
@@
non-block mode.
* Fix plus tests for non-zero value objects and flags.
* MEMCACHED_HASH_MURMUR added for murmur algorithm provided.
non-block mode.
* Fix plus tests for non-zero value objects and flags.
* MEMCACHED_HASH_MURMUR added for murmur algorithm provided.
+ * MEMCACHED_BEHAVIOR_RETRY_TIMEOUT added to keep connecting from looping
+ on timeout.
0.16 Mon Feb 18 00:30:25 PST 2008
* Work on the UDP protocol
0.16 Mon Feb 18 00:30:25 PST 2008
* Work on the UDP protocol
diff --git
a/include/memcached.h
b/include/memcached.h
index 7fd94e7d70abb674b33b5556ed0680b59e32260e..afd43b41ca84146adff3f4887f4b94cc830e4844 100644
(file)
--- a/
include/memcached.h
+++ b/
include/memcached.h
@@
-105,6
+105,7
@@
typedef enum {
MEMCACHED_BEHAVIOR_SORT_HOSTS,
MEMCACHED_BEHAVIOR_VERIFY_KEY,
MEMCACHED_BEHAVIOR_CONNECT_TIMEOUT,
MEMCACHED_BEHAVIOR_SORT_HOSTS,
MEMCACHED_BEHAVIOR_VERIFY_KEY,
MEMCACHED_BEHAVIOR_CONNECT_TIMEOUT,
+ MEMCACHED_BEHAVIOR_RETRY_TIMEOUT,
} memcached_behavior;
typedef enum {
} memcached_behavior;
typedef enum {
@@
-161,6
+162,7
@@
struct memcached_server_st {
uint8_t minor_version;
uint8_t micro_version;
uint16_t count;
uint8_t minor_version;
uint8_t micro_version;
uint16_t count;
+ time_t next_retry;
memcached_st *root;
};
memcached_st *root;
};
@@
-222,6
+224,7
@@
struct memcached_st {
int recv_size;
int32_t poll_timeout;
int32_t connect_timeout;
int recv_size;
int32_t poll_timeout;
int32_t connect_timeout;
+ int32_t retry_timeout;
memcached_result_st result;
memcached_hash hash;
memcached_server_distribution distribution;
memcached_result_st result;
memcached_hash hash;
memcached_server_distribution distribution;
diff --git
a/lib/memcached_behavior.c
b/lib/memcached_behavior.c
index 15ee08c9eaaf5a49749624eb13ab5dbdc467e18d..ce598fc069db6e0fd39dcfedd8aa5a08f5501082 100644
(file)
--- a/
lib/memcached_behavior.c
+++ b/
lib/memcached_behavior.c
@@
-80,6
+80,11
@@
memcached_return memcached_behavior_set(memcached_st *ptr,
ptr->connect_timeout= timeout;
break;
}
ptr->connect_timeout= timeout;
break;
}
+ case MEMCACHED_BEHAVIOR_RETRY_TIMEOUT:
+ {
+ ptr->retry_timeout= (int32_t)data;
+ break;
+ }
case MEMCACHED_BEHAVIOR_SOCKET_SEND_SIZE:
{
ptr->send_size= (*((int *)data));
case MEMCACHED_BEHAVIOR_SOCKET_SEND_SIZE:
{
ptr->send_size= (*((int *)data));
@@
-144,6
+149,10
@@
unsigned long long memcached_behavior_get(memcached_st *ptr,
{
return (unsigned long long)ptr->connect_timeout;
}
{
return (unsigned long long)ptr->connect_timeout;
}
+ case MEMCACHED_BEHAVIOR_RETRY_TIMEOUT:
+ {
+ return (unsigned long long)ptr->retry_timeout;
+ }
case MEMCACHED_BEHAVIOR_SOCKET_SEND_SIZE:
{
int sock_size;
case MEMCACHED_BEHAVIOR_SOCKET_SEND_SIZE:
{
int sock_size;
diff --git
a/lib/memcached_connect.c
b/lib/memcached_connect.c
index 50c6fa62acacd3e40823909343586735cce5d093..4bfc710fa23e9c1543de27c46da52bbfa37d6116 100644
(file)
--- a/
lib/memcached_connect.c
+++ b/
lib/memcached_connect.c
@@
-246,6
+246,13
@@
test_connect:
WATCHPOINT_ERRNO(ptr->cached_errno);
close(ptr->fd);
ptr->fd= -1;
WATCHPOINT_ERRNO(ptr->cached_errno);
close(ptr->fd);
ptr->fd= -1;
+ if (ptr->root->retry_timeout)
+ {
+ struct timeval next_time;
+
+ gettimeofday(&next_time, NULL);
+ ptr->next_retry= next_time.tv_sec + ptr->root->retry_timeout;
+ }
}
}
else
}
}
else
@@
-269,6
+276,14
@@
memcached_return memcached_connect(memcached_server_st *ptr)
memcached_return rc= MEMCACHED_NO_SERVERS;
LIBMEMCACHED_MEMCACHED_CONNECT_START();
memcached_return rc= MEMCACHED_NO_SERVERS;
LIBMEMCACHED_MEMCACHED_CONNECT_START();
+ if (ptr->root->retry_timeout)
+ {
+ struct timeval next_time;
+
+ gettimeofday(&next_time, NULL);
+ if (next_time.tv_sec < ptr->next_retry)
+ return MEMCACHED_TIMEOUT;
+ }
/* We need to clean up the multi startup piece */
switch (ptr->type)
{
/* We need to clean up the multi startup piece */
switch (ptr->type)
{
diff --git
a/lib/memcached_hosts.c
b/lib/memcached_hosts.c
index de006dd6794b6b5125583e24dfa2bd10e5786d78..fb53fa229c9f471a35a1e6b004bb22a60e9a12dd 100644
(file)
--- a/
lib/memcached_hosts.c
+++ b/
lib/memcached_hosts.c
@@
-61,6
+61,8
@@
static void host_reset(memcached_st *ptr, memcached_server_st *host,
host->fd= -1;
host->type= type;
host->read_ptr= host->read_buffer;
host->fd= -1;
host->type= type;
host->read_ptr= host->read_buffer;
+ if (ptr)
+ host->next_retry= ptr->retry_timeout;
host->sockaddr_inited= MEMCACHED_NOT_ALLOCATED;
}
host->sockaddr_inited= MEMCACHED_NOT_ALLOCATED;
}