summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorantirez <antirez@gmail.com>2012-11-29 14:20:08 +0100
committerantirez <antirez@gmail.com>2012-11-29 14:20:08 +0100
commit2f62c9663ca48b647d71f21d0cdf499346457f0f (patch)
treec783d2cf7653eccfb108521eae0b3c6ab5ae780d
parentb1b602a92887f271db3101d67e0319ce31fa68b3 (diff)
downloadredis-2f62c9663ca48b647d71f21d0cdf499346457f0f.tar.gz
Introduced the Build ID in INFO and --version output.
The idea is to be able to identify a build in a unique way, so for instance after a bug report we can recognize that the build is the one of a popular Linux distribution and perform the debugging in the same environment.
-rw-r--r--src/Makefile2
-rw-r--r--src/crc64.h8
-rw-r--r--src/debug.c2
-rwxr-xr-xsrc/mkreleasehdr.sh2
-rw-r--r--src/redis-check-dump.c4
-rw-r--r--src/redis.c7
-rw-r--r--src/redis.h1
-rw-r--r--src/release.c10
-rw-r--r--src/rio.c3
9 files changed, 30 insertions, 9 deletions
diff --git a/src/Makefile b/src/Makefile
index 358b4cbac..d4b6aad8c 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -101,7 +101,7 @@ REDIS_SERVER_NAME= redis-server
REDIS_SENTINEL_NAME= redis-sentinel
REDIS_SERVER_OBJ= adlist.o ae.o anet.o dict.o redis.o sds.o zmalloc.o lzf_c.o lzf_d.o pqsort.o zipmap.o sha1.o ziplist.o release.o networking.o util.o object.o db.o replication.o rdb.o t_string.o t_list.o t_set.o t_zset.o t_hash.o config.o aof.o pubsub.o multi.o debug.o sort.o intset.o syncio.o cluster.o crc16.o endianconv.o slowlog.o scripting.o bio.o rio.o rand.o memtest.o crc64.o bitops.o sentinel.o
REDIS_CLI_NAME= redis-cli
-REDIS_CLI_OBJ= anet.o sds.o adlist.o redis-cli.o zmalloc.o release.o anet.o ae.o
+REDIS_CLI_OBJ= anet.o sds.o adlist.o redis-cli.o zmalloc.o release.o anet.o ae.o crc64.o
REDIS_BENCHMARK_NAME= redis-benchmark
REDIS_BENCHMARK_OBJ= ae.o anet.o redis-benchmark.o sds.o adlist.o zmalloc.o redis-benchmark.o
REDIS_CHECK_DUMP_NAME= redis-check-dump
diff --git a/src/crc64.h b/src/crc64.h
new file mode 100644
index 000000000..ab375d3f4
--- /dev/null
+++ b/src/crc64.h
@@ -0,0 +1,8 @@
+#ifndef CRC64_H
+#define CRC64_H
+
+#include <stdint.h>
+
+uint64_t crc64(uint64_t crc, const unsigned char *s, uint64_t l);
+
+#endif
diff --git a/src/debug.c b/src/debug.c
index 31cfac65e..7d6fdf97d 100644
--- a/src/debug.c
+++ b/src/debug.c
@@ -29,6 +29,7 @@
#include "redis.h"
#include "sha1.h" /* SHA1 is used for DEBUG DIGEST */
+#include "crc64.h"
#include <arpa/inet.h>
#include <signal.h>
@@ -667,7 +668,6 @@ void logCurrentClient(void) {
}
#if defined(HAVE_PROC_MAPS)
-uint64_t crc64(uint64_t crc, const unsigned char *s, uint64_t l);
void memtest_non_destructive_invert(void *addr, size_t size);
void memtest_non_destructive_swap(void *addr, size_t size);
#define MEMTEST_MAX_REGIONS 128
diff --git a/src/mkreleasehdr.sh b/src/mkreleasehdr.sh
index 30984160e..d07cf6ae0 100755
--- a/src/mkreleasehdr.sh
+++ b/src/mkreleasehdr.sh
@@ -1,9 +1,11 @@
#!/bin/sh
GIT_SHA1=`(git show-ref --head --hash=8 2> /dev/null || echo 00000000) | head -n1`
GIT_DIRTY=`git diff 2> /dev/null | wc -l`
+BUILD_ID=`uname -n`"-"`date +%s`
test -f release.h || touch release.h
(cat release.h | grep SHA1 | grep $GIT_SHA1) && \
(cat release.h | grep DIRTY | grep $GIT_DIRTY) && exit 0 # Already uptodate
echo "#define REDIS_GIT_SHA1 \"$GIT_SHA1\"" > release.h
echo "#define REDIS_GIT_DIRTY \"$GIT_DIRTY\"" >> release.h
+echo "#define REDIS_BUILD_ID \"$BUILD_ID\"" >> release.h
touch release.c # Force recompile of release.c
diff --git a/src/redis-check-dump.c b/src/redis-check-dump.c
index 7efecb1a3..950655a02 100644
--- a/src/redis-check-dump.c
+++ b/src/redis-check-dump.c
@@ -40,6 +40,7 @@
#include <stdint.h>
#include <limits.h>
#include "lzf.h"
+#include "crc64.h"
/* Object types */
#define REDIS_STRING 0
@@ -140,9 +141,6 @@ static double R_Zero, R_PosInf, R_NegInf, R_Nan;
/* store string types for output */
static char types[256][16];
-/* Prototypes */
-uint64_t crc64(uint64_t crc, const unsigned char *s, uint64_t l);
-
/* Return true if 't' is a valid object type. */
int checkType(unsigned char t) {
/* In case a new object type is added, update the following
diff --git a/src/redis.c b/src/redis.c
index e3db30f75..4d1da27c9 100644
--- a/src/redis.c
+++ b/src/redis.c
@@ -1929,6 +1929,7 @@ sds genRedisInfoString(char *section) {
"redis_version:%s\r\n"
"redis_git_sha1:%s\r\n"
"redis_git_dirty:%d\r\n"
+ "redis_build_id:%llx\r\n"
"redis_mode:%s\r\n"
"os:%s %s %s\r\n"
"arch_bits:%d\r\n"
@@ -1943,6 +1944,7 @@ sds genRedisInfoString(char *section) {
REDIS_VERSION,
redisGitSHA1(),
strtol(redisGitDirty(),NULL,10) > 0,
+ redisBuildId(),
mode,
name.sysname, name.release, name.machine,
server.arch_bits,
@@ -2489,12 +2491,13 @@ void daemonize(void) {
}
void version() {
- printf("Redis server v=%s sha=%s:%d malloc=%s bits=%d\n",
+ printf("Redis server v=%s sha=%s:%d malloc=%s bits=%d build=%llx\n",
REDIS_VERSION,
redisGitSHA1(),
atoi(redisGitDirty()) > 0,
ZMALLOC_LIB,
- sizeof(long) == 4 ? 32 : 64);
+ sizeof(long) == 4 ? 32 : 64,
+ redisBuildId());
exit(0);
}
diff --git a/src/redis.h b/src/redis.h
index b51a482fd..c091f653d 100644
--- a/src/redis.h
+++ b/src/redis.h
@@ -1192,6 +1192,7 @@ void scriptingInit(void);
/* Git SHA1 */
char *redisGitSHA1(void);
char *redisGitDirty(void);
+uint64_t redisBuildId(void);
/* Commands prototypes */
void authCommand(redisClient *c);
diff --git a/src/release.c b/src/release.c
index 46761448c..34c3d813c 100644
--- a/src/release.c
+++ b/src/release.c
@@ -31,7 +31,11 @@
* small file is recompiled, as we access this information in all the other
* files using this functions. */
+#include <string.h>
+
#include "release.h"
+#include "version.h"
+#include "crc64.h"
char *redisGitSHA1(void) {
return REDIS_GIT_SHA1;
@@ -40,3 +44,9 @@ char *redisGitSHA1(void) {
char *redisGitDirty(void) {
return REDIS_GIT_DIRTY;
}
+
+uint64_t redisBuildId(void) {
+ char *buildid = REDIS_VERSION REDIS_BUILD_ID REDIS_GIT_DIRTY REDIS_GIT_SHA1;
+
+ return crc64(0,(unsigned char*)buildid,strlen(buildid));
+}
diff --git a/src/rio.c b/src/rio.c
index 45bb89896..d87d62fd7 100644
--- a/src/rio.c
+++ b/src/rio.c
@@ -50,8 +50,7 @@
#include <stdio.h>
#include "rio.h"
#include "util.h"
-
-uint64_t crc64(uint64_t crc, const unsigned char *s, uint64_t l);
+#include "crc64.h"
/* Returns 1 or 0 for success/failure. */
static size_t rioBufferWrite(rio *r, const void *buf, size_t len) {