diff options
author | Yao Chen <yaochen@google.com> | 2018-11-08 15:43:08 -0800 |
---|---|---|
committer | Yao Chen <yaochen@google.com> | 2018-12-07 11:02:08 -0800 |
commit | 1d35761c67c7d5f0d4cb570d2064e3ac5702d98c (patch) | |
tree | 8046eb5da0d948272e1c9dc652055378e9fdc21f /libstats | |
parent | bcc2d60826635870e1f53856f81f941378e199e0 (diff) | |
download | system_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.h | 2 | ||||
-rw-r--r-- | libstats/stats_event_list.c | 4 | ||||
-rw-r--r-- | libstats/statsd_writer.c | 7 | ||||
-rw-r--r-- | libstats/statsd_writer.h | 2 |
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 |