Merge "Add a function to allow statslog failure."

This commit is contained in:
Treehugger Robot 2018-10-04 21:02:47 +00:00 committed by Gerrit Code Review
commit ed673c967d
4 changed files with 20 additions and 9 deletions

View File

@ -24,6 +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();
#ifdef __cplusplus
}

View File

@ -119,6 +119,10 @@ int write_to_logger(android_log_context ctx, log_id_t id) {
return retValue;
}
void note_log_drop() {
statsdLoggerWrite.noteDrop();
}
/* log_init_lock assumed */
static int __write_to_statsd_initialize_locked() {
if (!statsdLoggerWrite.open || ((*statsdLoggerWrite.open)() < 0)) {

View File

@ -38,6 +38,7 @@
#define min(x, y) ((y) ^ (((x) ^ (y)) & -((x) < (y))))
static pthread_mutex_t log_init_lock = PTHREAD_MUTEX_INITIALIZER;
static atomic_int dropped = 0;
void statsd_writer_init_lock() {
/*
@ -59,14 +60,16 @@ static int statsdAvailable();
static int statsdOpen();
static void statsdClose();
static int statsdWrite(struct timespec* ts, struct iovec* vec, size_t nr);
static void statsdNoteDrop();
struct android_log_transport_write statsdLoggerWrite = {
.name = "statsd",
.sock = -EBADF,
.available = statsdAvailable,
.open = statsdOpen,
.close = statsdClose,
.write = statsdWrite,
.name = "statsd",
.sock = -EBADF,
.available = statsdAvailable,
.open = statsdOpen,
.close = statsdClose,
.write = statsdWrite,
.noteDrop = statsdNoteDrop,
};
/* log_init_lock assumed */
@ -131,6 +134,10 @@ static int statsdAvailable() {
return 1;
}
static void statsdNoteDrop() {
atomic_fetch_add_explicit(&dropped, 1, memory_order_relaxed);
}
static int statsdWrite(struct timespec* ts, struct iovec* vec, size_t nr) {
ssize_t ret;
int sock;
@ -138,7 +145,6 @@ static int statsdWrite(struct timespec* ts, struct iovec* vec, size_t nr) {
struct iovec newVec[nr + headerLength];
android_log_header_t header;
size_t i, payloadSize;
static atomic_int dropped;
sock = atomic_load(&statsdLoggerWrite.sock);
if (sock < 0) switch (sock) {
@ -252,8 +258,6 @@ static int statsdWrite(struct timespec* ts, struct iovec* vec, size_t nr) {
if (ret > (ssize_t)sizeof(header)) {
ret -= sizeof(header);
} else if (ret == -EAGAIN) {
atomic_fetch_add_explicit(&dropped, 1, memory_order_relaxed);
}
return ret;

View File

@ -38,6 +38,8 @@ struct android_log_transport_write {
void (*close)(); /* free up resources */
/* 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)();
};
#endif // ANDROID_STATS_LOG_STATS_WRITER_H