diff options
author | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2023-06-13 23:20:59 +0000 |
---|---|---|
committer | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2023-06-13 23:20:59 +0000 |
commit | 21a6c0c4d9de7bc22d4b7772c3bd5837ba3069c1 (patch) | |
tree | ebb7fcee34e42f473bf2a4147f2becbe3a475b1f | |
parent | b2423dd3163520c75696072b402d2e69f3986eb6 (diff) | |
parent | a908af90eaa544259e3c1533e5ba4f05386412c6 (diff) | |
download | StatsD-android14-s1-release.tar.gz |
Snap for 10314561 from a908af90eaa544259e3c1533e5ba4f05386412c6 to udc-releaseandroid-vts-14.0_r1android-security-14.0.0_r1android-cts-14.0_r1android-14.0.0_r2android-14.0.0_r1android14-s1-release
Change-Id: I5804d7ec2073fd620b6dee4636f144d2fe678261
-rw-r--r-- | service/java/com/android/server/stats/StatsCompanionService.java | 1 | ||||
-rw-r--r-- | statsd/src/guardrail/StatsdStats.cpp | 9 | ||||
-rw-r--r-- | statsd/src/guardrail/StatsdStats.h | 1 | ||||
-rw-r--r-- | statsd/src/stats_log.proto | 1 | ||||
-rw-r--r-- | statsd/src/utils/ShardOffsetProvider.cpp | 20 | ||||
-rw-r--r-- | statsd/src/utils/ShardOffsetProvider.h | 9 | ||||
-rw-r--r-- | statsd/tests/guardrail/StatsdStats_test.cpp | 11 |
7 files changed, 46 insertions, 6 deletions
diff --git a/service/java/com/android/server/stats/StatsCompanionService.java b/service/java/com/android/server/stats/StatsCompanionService.java index fd987c21..367bfddb 100644 --- a/service/java/com/android/server/stats/StatsCompanionService.java +++ b/service/java/com/android/server/stats/StatsCompanionService.java @@ -279,6 +279,7 @@ public class StatsCompanionService extends IStatsCompanionService.Stub { } } finally { if (DEBUG) Log.d(TAG, "End thread for sending uid map data."); + FileUtils.closeQuietly(fout); backgroundThread.quit(); } }); diff --git a/statsd/src/guardrail/StatsdStats.cpp b/statsd/src/guardrail/StatsdStats.cpp index 3fded0a2..7dd6d9ad 100644 --- a/statsd/src/guardrail/StatsdStats.cpp +++ b/statsd/src/guardrail/StatsdStats.cpp @@ -19,9 +19,11 @@ #include "StatsdStats.h" #include <android/util/ProtoOutputStream.h> + #include "../stats_log_util.h" #include "statslog_statsd.h" #include "storage/StorageManager.h" +#include "utils/ShardOffsetProvider.h" namespace android { namespace os { @@ -35,6 +37,7 @@ using android::util::FIELD_TYPE_INT32; using android::util::FIELD_TYPE_INT64; using android::util::FIELD_TYPE_MESSAGE; using android::util::FIELD_TYPE_STRING; +using android::util::FIELD_TYPE_UINT32; using android::util::ProtoOutputStream; using std::lock_guard; using std::shared_ptr; @@ -54,6 +57,7 @@ const int FIELD_ID_LOGGER_ERROR_STATS = 16; const int FIELD_ID_OVERFLOW = 18; const int FIELD_ID_ACTIVATION_BROADCAST_GUARDRAIL = 19; const int FIELD_ID_RESTRICTED_METRIC_QUERY_STATS = 20; +const int FIELD_ID_SHARD_OFFSET = 21; const int FIELD_ID_RESTRICTED_METRIC_QUERY_STATS_CALLING_UID = 1; const int FIELD_ID_RESTRICTED_METRIC_QUERY_STATS_CONFIG_ID = 2; @@ -1149,6 +1153,8 @@ void StatsdStats::dumpStats(int out) const { } } } + dprintf(out, "********Shard Offset Provider stats***********\n"); + dprintf(out, "Shard Offset: %u\n", ShardOffsetProvider::getInstance().getShardOffset()); } void addConfigStatsToProto(const ConfigStats& configStats, ProtoOutputStream* proto) { @@ -1491,6 +1497,9 @@ void StatsdStats::dumpStats(std::vector<uint8_t>* output, bool reset) { proto.end(token); } + proto.write(FIELD_TYPE_UINT32 | FIELD_ID_SHARD_OFFSET, + static_cast<long>(ShardOffsetProvider::getInstance().getShardOffset())); + output->clear(); size_t bufferSize = proto.size(); output->resize(bufferSize); diff --git a/statsd/src/guardrail/StatsdStats.h b/statsd/src/guardrail/StatsdStats.h index d33e4b01..4bf6ffdb 100644 --- a/statsd/src/guardrail/StatsdStats.h +++ b/statsd/src/guardrail/StatsdStats.h @@ -866,6 +866,7 @@ private: FRIEND_TEST(StatsdStatsTest, TestAtomDroppedStats); FRIEND_TEST(StatsdStatsTest, TestAtomLoggedAndDroppedStats); FRIEND_TEST(StatsdStatsTest, TestAtomLoggedAndDroppedAndSkippedStats); + FRIEND_TEST(StatsdStatsTest, TestShardOffsetProvider); FRIEND_TEST(StatsLogProcessorTest, InvalidConfigRemoved); }; diff --git a/statsd/src/stats_log.proto b/statsd/src/stats_log.proto index ebd2ad54..44add932 100644 --- a/statsd/src/stats_log.proto +++ b/statsd/src/stats_log.proto @@ -664,6 +664,7 @@ message StatsdStatsReport { optional int64 query_latency_ns = 9; } repeated RestrictedMetricQueryStats restricted_metric_query_stats = 20; + optional uint32 shard_offset = 21; } message AlertTriggerDetails { diff --git a/statsd/src/utils/ShardOffsetProvider.cpp b/statsd/src/utils/ShardOffsetProvider.cpp index 6d847dff..4a0df977 100644 --- a/statsd/src/utils/ShardOffsetProvider.cpp +++ b/statsd/src/utils/ShardOffsetProvider.cpp @@ -16,15 +16,31 @@ #include "ShardOffsetProvider.h" +#include <errno.h> +#include <sys/random.h> +#include <unistd.h> + +#include <chrono> + namespace android { namespace os { namespace statsd { -ShardOffsetProvider::ShardOffsetProvider(const int shardOffset) : mShardOffset(shardOffset) { +ShardOffsetProvider::ShardOffsetProvider() { + unsigned int seed = 0; + // getrandom() reads bytes from urandom source into buf. If getrandom() + // is unable to read from urandom source, then it returns -1 and we set + // our seed to be time(nullptr) as a fallback. + if (TEMP_FAILURE_RETRY( + getrandom(static_cast<void*>(&seed), sizeof(unsigned int), GRND_NONBLOCK)) < 0) { + seed = time(nullptr); + } + srand(seed); + mShardOffset = rand(); } ShardOffsetProvider& ShardOffsetProvider::getInstance() { - static ShardOffsetProvider sShardOffsetProvider(rand()); + static ShardOffsetProvider sShardOffsetProvider; return sShardOffsetProvider; } diff --git a/statsd/src/utils/ShardOffsetProvider.h b/statsd/src/utils/ShardOffsetProvider.h index 0623e0f2..dd6a5a7d 100644 --- a/statsd/src/utils/ShardOffsetProvider.h +++ b/statsd/src/utils/ShardOffsetProvider.h @@ -32,21 +32,21 @@ class ShardOffsetProvider final { public: ~ShardOffsetProvider(){}; - int getShardOffset() const { + uint32_t getShardOffset() const { return mShardOffset; } static ShardOffsetProvider& getInstance(); private: - ShardOffsetProvider(const int shardOffset); + ShardOffsetProvider(); // Only used for testing. - void setShardOffset(const int shardOffset) { + void setShardOffset(const uint32_t shardOffset) { mShardOffset = shardOffset; } - int mShardOffset; + uint32_t mShardOffset; FRIEND_TEST(CountMetricE2eTest, TestDimensionalSampling); FRIEND_TEST(DurationMetricE2eTest, TestDimensionalSampling); @@ -54,6 +54,7 @@ private: FRIEND_TEST(GaugeMetricProducerTest, TestPullDimensionalSampling); FRIEND_TEST(KllMetricE2eTest, TestDimensionalSampling); FRIEND_TEST(NumericValueMetricProducerTest, TestDimensionalSampling); + FRIEND_TEST(StatsdStatsTest, TestShardOffsetProvider); }; } // namespace statsd diff --git a/statsd/tests/guardrail/StatsdStats_test.cpp b/statsd/tests/guardrail/StatsdStats_test.cpp index 0c816007..a2f32805 100644 --- a/statsd/tests/guardrail/StatsdStats_test.cpp +++ b/statsd/tests/guardrail/StatsdStats_test.cpp @@ -889,6 +889,17 @@ TEST(StatsdStatsTest, TestAtomLoggedAndDroppedAndSkippedStats) { EXPECT_FALSE(nonPlatformPushedAtomStats.has_error_count()); } +TEST(StatsdStatsTest, TestShardOffsetProvider) { + StatsdStats stats; + ShardOffsetProvider::getInstance().setShardOffset(15); + vector<uint8_t> output; + stats.dumpStats(&output, false); + + StatsdStatsReport report; + EXPECT_TRUE(report.ParseFromArray(&output[0], output.size())); + EXPECT_EQ(report.shard_offset(), 15); +} + } // namespace statsd } // namespace os } // namespace android |