You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@apr.apache.org by ji...@apache.org on 2016/11/02 20:10:54 UTC
svn commit: r1767775 - in /apr/apr-util/branches/1.6.x: include/apr_redis.h
redis/apr_redis.c
Author: jim
Date: Wed Nov 2 20:10:53 2016
New Revision: 1767775
URL: http://svn.apache.org/viewvc?rev=1767775&view=rev
Log:
Provide INFO which is then used for both version and stats
Modified:
apr/apr-util/branches/1.6.x/include/apr_redis.h
apr/apr-util/branches/1.6.x/redis/apr_redis.c
Modified: apr/apr-util/branches/1.6.x/include/apr_redis.h
URL: http://svn.apache.org/viewvc/apr/apr-util/branches/1.6.x/include/apr_redis.h?rev=1767775&r1=1767774&r2=1767775&view=diff
==============================================================================
--- apr/apr-util/branches/1.6.x/include/apr_redis.h (original)
+++ apr/apr-util/branches/1.6.x/include/apr_redis.h Wed Nov 2 20:10:53 2016
@@ -310,12 +310,21 @@ APU_DECLARE(apr_status_t) apr_redis_dele
* @param rs server to query
* @param p Pool to allocate answer from
* @param baton location to store server version string
- * @param len length of the server version string
*/
APU_DECLARE(apr_status_t) apr_redis_version(apr_redis_server_t *rs,
apr_pool_t *p,
char **baton);
+/**
+ * Query a server's INFO
+ * @param rs server to query
+ * @param p Pool to allocate answer from
+ * @param baton location to store server INFO response string
+ */
+APU_DECLARE(apr_status_t) apr_redis_info(apr_redis_server_t *rs,
+ apr_pool_t *p,
+ char **baton);
+
typedef struct
{
/** Version string of this server */
Modified: apr/apr-util/branches/1.6.x/redis/apr_redis.c
URL: http://svn.apache.org/viewvc/apr/apr-util/branches/1.6.x/redis/apr_redis.c?rev=1767775&r1=1767774&r2=1767775&view=diff
==============================================================================
--- apr/apr-util/branches/1.6.x/redis/apr_redis.c (original)
+++ apr/apr-util/branches/1.6.x/redis/apr_redis.c Wed Nov 2 20:10:53 2016
@@ -646,19 +646,16 @@ APU_DECLARE(apr_status_t) apr_redis_set(
apr_status_t rv;
apr_size_t written;
struct iovec vec[9];
- int index = 0;
char keysize_str[INT_64_LEN];
- char expire_str[INT_64_LEN];
- char expiresize_str[INT_64_LEN];
char datasize_str[BUFFER_SIZE];
- apr_size_t len, klen, expire_len;
+ apr_size_t len, klen;
if (data_size >= BUFFER_SIZE) {
return APR_NOTFOUND;
}
-
+ klen = strlen(key);
hash = apr_redis_hash(rc, key, klen);
rs = apr_redis_find_server_hash(rc, hash);
@@ -673,7 +670,6 @@ APU_DECLARE(apr_status_t) apr_redis_set(
return rv;
}
- klen = strlen(key);
/*
* RESP Command:
* *3
@@ -757,7 +753,6 @@ APU_DECLARE(apr_status_t) apr_redis_sete
apr_status_t rv;
apr_size_t written;
struct iovec vec[11];
- int index = 0;
char keysize_str[INT_64_LEN];
char expire_str[INT_64_LEN];
char expiresize_str[INT_64_LEN];
@@ -769,7 +764,7 @@ APU_DECLARE(apr_status_t) apr_redis_sete
return APR_NOTFOUND;
}
-
+ klen = strlen(key);
hash = apr_redis_hash(rc, key, klen);
rs = apr_redis_find_server_hash(rc, hash);
@@ -784,7 +779,6 @@ APU_DECLARE(apr_status_t) apr_redis_sete
return rv;
}
- klen = strlen(key);
/*
* RESP Command:
* *4
@@ -882,6 +876,7 @@ APU_DECLARE(apr_status_t) apr_redis_getp
struct iovec vec[6];
char keysize_str[INT_64_LEN];
+ klen = strlen(key);
hash = apr_redis_hash(rc, key, klen);
rs = apr_redis_find_server_hash(rc, hash);
if (rs == NULL)
@@ -894,7 +889,6 @@ APU_DECLARE(apr_status_t) apr_redis_getp
return rv;
}
- klen = strlen(key);
/*
* RESP Command:
* *2
@@ -1013,6 +1007,7 @@ APU_DECLARE(apr_status_t)
apr_size_t len, klen;
char keysize_str[INT_64_LEN];
+ klen = strlen(key);
hash = apr_redis_hash(rc, key, klen);
rs = apr_redis_find_server_hash(rc, hash);
if (rs == NULL)
@@ -1025,7 +1020,6 @@ APU_DECLARE(apr_status_t)
return rv;
}
- klen = strlen(key);
/*
* RESP Command:
* *2
@@ -1088,10 +1082,8 @@ apr_status_t rc_ping(apr_redis_server_t
{
apr_status_t rv;
apr_size_t written;
- const int VEC_SIZE = 3;
struct iovec vec[3];
apr_redis_conn_t *conn;
- int index = 0;
rv = rs_find_conn(rs, &conn);
@@ -1126,22 +1118,14 @@ apr_status_t rc_ping(apr_redis_server_t
return rv;
}
-#define RV_FIELD "redis_version:"
APU_DECLARE(apr_status_t)
-apr_redis_version(apr_redis_server_t *rs,
- apr_pool_t *p,
- char **baton)
+apr_redis_info(apr_redis_server_t *rs, apr_pool_t *p, char **baton)
{
apr_status_t rv;
apr_redis_conn_t *conn;
apr_size_t written;
struct iovec vec[3];
- /* Have we already obtained the version number? */
- if (rs->version.number != 0) {
- *baton = apr_pstrdup(p, rs->version.number);
- return APR_SUCCESS;
- }
rv = rs_find_conn(rs, &conn);
if (rv != APR_SUCCESS) {
@@ -1177,67 +1161,93 @@ apr_redis_version(apr_redis_server_t *rs
}
if (strncmp(RS_TYPE_STRING, conn->buffer, RS_TYPE_STRING_LEN) == 0) {
- char *length;
- char *last;
- char *ptr, *eptr, **resp;
- apr_size_t len = 0;
- apr_size_t new_length = 0;
-
- length = apr_strtok(conn->buffer + 1, " ", &last);
- if (length) {
- len = strtol(length, (char **) NULL, 10);
+ char *length;
+ char *last;
+ apr_size_t len = 0;
+
+ length = apr_strtok(conn->buffer + 1, " ", &last);
+ if (length) {
+ len = strtol(length, (char **) NULL, 10);
+ }
+
+ if (len == 0) {
+ /* Huh? */
+ *baton = NULL;
+ } else {
+ apr_bucket_brigade *bbb;
+ apr_bucket *e;
+
+ /* eat the trailing \r\n */
+ rv = apr_brigade_partition(conn->bb, len + 2, &e);
+
+ if (rv != APR_SUCCESS) {
+ rs_bad_conn(rs, conn);
+ return rv;
}
- if (len != 0) {
- apr_bucket_brigade *bbb;
- apr_bucket *e;
-
- /* eat the trailing \r\n */
- rv = apr_brigade_partition(conn->bb, len + 2, &e);
-
- if (rv != APR_SUCCESS) {
- rs_bad_conn(rs, conn);
- return rv;
- }
-
- bbb = apr_brigade_split(conn->bb, e);
-
- rv = apr_brigade_pflatten(conn->bb, resp, &len, p);
-
- if (rv != APR_SUCCESS) {
- rs_bad_conn(rs, conn);
- return rv;
- }
-
- rv = apr_brigade_destroy(conn->bb);
- if (rv != APR_SUCCESS) {
- rs_bad_conn(rs, conn);
- return rv;
- }
-
- conn->bb = bbb;
-
- new_length = len - 2;
- (*resp)[new_length] = '\0';
- ptr = strstr(*resp, RV_FIELD);
- rs->version.major = strtol(ptr + sizeof(RV_FIELD) - 1, &eptr, 10);
- ptr = eptr + 1;
- rs->version.minor = strtol(ptr, &eptr, 10);
- ptr = eptr + 1;
- rs->version.patch = strtol(ptr, &eptr, 10);
- rs->version.number = apr_psprintf(rs->p, "%d.%d.%d",
- rs->version.major, rs->version.minor,
- rs->version.patch);
- *baton = apr_pstrdup(p, rs->version.number);
+ bbb = apr_brigade_split(conn->bb, e);
- }
- }
- else {
- rs_bad_conn(rs, conn);
- return (APR_EGENERAL);
+ rv = apr_brigade_pflatten(conn->bb, baton, &len, p);
+
+ if (rv != APR_SUCCESS) {
+ rs_bad_conn(rs, conn);
+ return rv;
+ }
+
+ rv = apr_brigade_destroy(conn->bb);
+ if (rv != APR_SUCCESS) {
+ rs_bad_conn(rs, conn);
+ return rv;
+ }
+
+ conn->bb = bbb;
+ (*baton)[len - 2] = '\0';
}
+ } else {
+ rs_bad_conn(rs, conn);
+ return (APR_EGENERAL);
+ }
rs_release_conn(rs, conn);
return rv;
}
+
+#define RV_FIELD "redis_version:"
+APU_DECLARE(apr_status_t)
+apr_redis_version(apr_redis_server_t *rs, apr_pool_t *p, char **baton)
+{
+ apr_status_t rv;
+ char *ptr, *eptr;
+ apr_pool_t *subpool;
+
+ /* Have we already obtained the version number? */
+ if (rs->version.number != 0) {
+ *baton = apr_pstrdup(p, rs->version.number);
+ return APR_SUCCESS;
+ }
+ if (apr_pool_create(&subpool, p) != APR_SUCCESS) {
+ /* well, we tried */
+ subpool = p;
+ }
+ rv = apr_redis_info(rs, subpool, baton);
+
+ if (rv != APR_SUCCESS) {
+ return rv;
+ }
+
+ ptr = strstr(*baton, RV_FIELD);
+ rs->version.major = strtol(ptr + sizeof(RV_FIELD) - 1, &eptr, 10);
+ ptr = eptr + 1;
+ rs->version.minor = strtol(ptr, &eptr, 10);
+ ptr = eptr + 1;
+ rs->version.patch = strtol(ptr, &eptr, 10);
+ rs->version.number = apr_psprintf(rs->p, "%d.%d.%d",
+ rs->version.major, rs->version.minor,
+ rs->version.patch);
+ *baton = apr_pstrdup(p, rs->version.number);
+ if (subpool != p) {
+ apr_pool_destroy(subpool);
+ }
+ return APR_SUCCESS;
+}