summaryrefslogtreecommitdiffstats
path: root/libstats
diff options
context:
space:
mode:
authorYao Chen <yaochen@google.com>2018-11-08 15:43:08 -0800
committerYao Chen <yaochen@google.com>2018-12-07 11:02:08 -0800
commit1d35761c67c7d5f0d4cb570d2064e3ac5702d98c (patch)
tree8046eb5da0d948272e1c9dc652055378e9fdc21f /libstats
parentbcc2d60826635870e1f53856f81f941378e199e0 (diff)
downloadsystem_core-1d35761c67c7d5f0d4cb570d2064e3ac5702d98c.tar.gz
system_core-1d35761c67c7d5f0d4cb570d2064e3ac5702d98c.tar.bz2
system_core-1d35761c67c7d5f0d4cb570d2064e3ac5702d98c.zip
Log the last error code of StatsLog failures
Test: builds and manual test Bug: 80538532 Change-Id: I7f9d0e22b7ad4295dd787f6cb409bfb3342a7b27 Merged-In: I7f9d0e22b7ad4295dd787f6cb409bfb3342a7b27 (cherry picked from commit cb3527794cadfb828589e338602a08f464e40f83)
Diffstat (limited to 'libstats')
-rw-r--r--libstats/include/stats_event_list.h2
-rw-r--r--libstats/stats_event_list.c4
-rw-r--r--libstats/statsd_writer.c7
-rw-r--r--libstats/statsd_writer.h2
4 files changed, 9 insertions, 6 deletions
diff --git a/libstats/include/stats_event_list.h b/libstats/include/stats_event_list.h
index 41ca79bcd..162d1cfeb 100644
--- a/libstats/include/stats_event_list.h
+++ b/libstats/include/stats_event_list.h
@@ -24,7 +24,7 @@ extern "C" {
#endif
void reset_log_context(android_log_context ctx);
int write_to_logger(android_log_context context, log_id_t id);
-void note_log_drop();
+void note_log_drop(int error);
void stats_log_close();
int android_log_write_char_array(android_log_context ctx, const char* value, size_t len);
#ifdef __cplusplus
diff --git a/libstats/stats_event_list.c b/libstats/stats_event_list.c
index f4a7e9405..5b9036108 100644
--- a/libstats/stats_event_list.c
+++ b/libstats/stats_event_list.c
@@ -120,8 +120,8 @@ int write_to_logger(android_log_context ctx, log_id_t id) {
return retValue;
}
-void note_log_drop() {
- statsdLoggerWrite.noteDrop();
+void note_log_drop(int error) {
+ statsdLoggerWrite.noteDrop(error);
}
void stats_log_close() {
diff --git a/libstats/statsd_writer.c b/libstats/statsd_writer.c
index 88f7d443a..f00fc2d89 100644
--- a/libstats/statsd_writer.c
+++ b/libstats/statsd_writer.c
@@ -48,6 +48,7 @@
static pthread_mutex_t log_init_lock = PTHREAD_MUTEX_INITIALIZER;
static atomic_int dropped = 0;
+static atomic_int log_error = 0;
void statsd_writer_init_lock() {
/*
@@ -150,8 +151,9 @@ static int statsdAvailable() {
return 1;
}
-static void statsdNoteDrop() {
+static void statsdNoteDrop(int error) {
atomic_fetch_add_explicit(&dropped, 1, memory_order_relaxed);
+ atomic_exchange_explicit(&log_error, error, memory_order_relaxed);
}
static int statsdWrite(struct timespec* ts, struct iovec* vec, size_t nr) {
@@ -202,7 +204,8 @@ static int statsdWrite(struct timespec* ts, struct iovec* vec, size_t nr) {
if (snapshot) {
android_log_event_int_t buffer;
header.id = LOG_ID_STATS;
- buffer.header.tag = htole32(LIBLOG_LOG_TAG);
+ // store the last log error in the tag field. This tag field is not used by statsd.
+ buffer.header.tag = htole32(atomic_load(&log_error));
buffer.payload.type = EVENT_TYPE_INT;
buffer.payload.data = htole32(snapshot);
diff --git a/libstats/statsd_writer.h b/libstats/statsd_writer.h
index 728944153..4fc3f8bc2 100644
--- a/libstats/statsd_writer.h
+++ b/libstats/statsd_writer.h
@@ -39,7 +39,7 @@ struct android_log_transport_write {
/* write log to transport, returns number of bytes propagated, or -errno */
int (*write)(struct timespec* ts, struct iovec* vec, size_t nr);
/* note one log drop */
- void (*noteDrop)();
+ void (*noteDrop)(int error);
};
#endif // ANDROID_STATS_LOG_STATS_WRITER_H