Merge lp:~493pocbrcycmdw7yksonho9o2qzz-o18bz-d18ecat4t1b76tkfi3vttrkfngli/libmemcached/libmemcached into lp:libmemcached

Proposed by Massive Media
Status: Merged
Merged at revision: 1111
Proposed branch: lp:~493pocbrcycmdw7yksonho9o2qzz-o18bz-d18ecat4t1b76tkfi3vttrkfngli/libmemcached/libmemcached
Merge into: lp:libmemcached
Diff against target: 89 lines (+27/-3)
3 files modified
libmemcached-1.2/server.h (+3/-0)
libmemcached/io.cc (+6/-3)
libmemcached/server.cc (+18/-0)
To merge this branch: bzr merge lp:~493pocbrcycmdw7yksonho9o2qzz-o18bz-d18ecat4t1b76tkfi3vttrkfngli/libmemcached/libmemcached
Reviewer Review Type Date Requested Status
Tangent Trunk Pending
Review via email: mp+195877@code.launchpad.net

Description of the change

Added the ability to get the local port of a memcache_instance_st.
Sometimes when you're hunting bugs on a production webserver (with multiple workers) you want to tcpdump and see what's going on.
This patch adds the memcached_server_srcport method to the library which returns the local sourceport of the connection (if there's a connection).
We use it a lot.

To post a comment you must log in.
1174. By nicolas

Small bugfixes for errno (since memcached_quit_server() modifies errno)

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'libmemcached-1.2/server.h'
--- libmemcached-1.2/server.h 2013-04-03 13:14:23 +0000
+++ libmemcached-1.2/server.h 2013-11-20 14:41:50 +0000
@@ -104,6 +104,9 @@
104in_port_t memcached_server_port(const memcached_instance_st * self);104in_port_t memcached_server_port(const memcached_instance_st * self);
105105
106LIBMEMCACHED_API106LIBMEMCACHED_API
107in_port_t memcached_server_srcport(const memcached_instance_st * self);
108
109LIBMEMCACHED_API
107void memcached_instance_next_retry(const memcached_instance_st * self, const time_t absolute_time);110void memcached_instance_next_retry(const memcached_instance_st * self, const time_t absolute_time);
108111
109LIBMEMCACHED_API112LIBMEMCACHED_API
110113
=== modified file 'libmemcached/io.cc'
--- libmemcached/io.cc 2013-11-04 11:17:45 +0000
+++ libmemcached/io.cc 2013-11-20 14:41:50 +0000
@@ -342,6 +342,7 @@
342 }342 }
343343
344 ssize_t sent_length= ::send(instance->fd, local_write_ptr, write_length, flags);344 ssize_t sent_length= ::send(instance->fd, local_write_ptr, write_length, flags);
345 int local_errno= get_socket_errno(); // We cache in case memcached_quit_server() modifies errno
345346
346 if (sent_length == SOCKET_ERROR)347 if (sent_length == SOCKET_ERROR)
347 {348 {
@@ -381,14 +382,14 @@
381 }382 }
382383
383 memcached_quit_server(instance, true);384 memcached_quit_server(instance, true);
384 error= memcached_set_errno(*instance, get_socket_errno(), MEMCACHED_AT);385 error= memcached_set_errno(*instance, local_errno, MEMCACHED_AT);
385 return false;386 return false;
386 }387 }
387 case ENOTCONN:388 case ENOTCONN:
388 case EPIPE:389 case EPIPE:
389 default:390 default:
390 memcached_quit_server(instance, true);391 memcached_quit_server(instance, true);
391 error= memcached_set_errno(*instance, get_socket_errno(), MEMCACHED_AT);392 error= memcached_set_errno(*instance, local_errno, MEMCACHED_AT);
392 WATCHPOINT_ASSERT(instance->fd == INVALID_SOCKET);393 WATCHPOINT_ASSERT(instance->fd == INVALID_SOCKET);
393 return false;394 return false;
394 }395 }
@@ -422,6 +423,8 @@
422 do423 do
423 {424 {
424 data_read= ::recv(instance->fd, instance->read_buffer, MEMCACHED_MAX_BUFFER, MSG_NOSIGNAL);425 data_read= ::recv(instance->fd, instance->read_buffer, MEMCACHED_MAX_BUFFER, MSG_NOSIGNAL);
426 int local_errno= get_socket_errno(); // We cache in case memcached_quit_server() modifies errno
427
425 if (data_read == SOCKET_ERROR)428 if (data_read == SOCKET_ERROR)
426 {429 {
427 switch (get_socket_errno())430 switch (get_socket_errno())
@@ -460,7 +463,7 @@
460 case ECONNREFUSED:463 case ECONNREFUSED:
461 default:464 default:
462 memcached_quit_server(instance, true);465 memcached_quit_server(instance, true);
463 memcached_set_errno(*instance, get_socket_errno(), MEMCACHED_AT);466 memcached_set_errno(*instance, local_errno, MEMCACHED_AT);
464 break;467 break;
465 }468 }
466469
467470
=== modified file 'libmemcached/server.cc'
--- libmemcached/server.cc 2013-03-31 23:24:29 +0000
+++ libmemcached/server.cc 2013-11-20 14:41:50 +0000
@@ -213,6 +213,24 @@
213 return self->port();213 return self->port();
214}214}
215215
216in_port_t memcached_server_srcport(const memcached_instance_st * self)
217{
218 WATCHPOINT_ASSERT(self);
219 if (self == NULL || self->fd == INVALID_SOCKET || (self->type != MEMCACHED_CONNECTION_TCP && self->type != MEMCACHED_CONNECTION_UDP))
220 {
221 return 0;
222 }
223
224 struct sockaddr_in sin;
225 socklen_t addrlen= sizeof(sin);
226 if (getsockname(self->fd, (struct sockaddr*)&sin, &addrlen) != -1)
227 {
228 return ntohs(sin.sin_port);
229 }
230
231 return -1;
232}
233
216uint32_t memcached_server_response_count(const memcached_instance_st * self)234uint32_t memcached_server_response_count(const memcached_instance_st * self)
217{235{
218 WATCHPOINT_ASSERT(self);236 WATCHPOINT_ASSERT(self);

Subscribers

People subscribed via source and target branches

to all changes: