Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 78c3f992 authored by Richard Gaywood's avatar Richard Gaywood
Browse files

Add shard ID to statsd atom for procstats collection

Without this, RANDOM_ONE_SAMPLE would result in statsd dropping all bar the
first shard. Adding the shard id as a dimension field preserves all the
data.

Bug: 158294266
Test: manual build & test
Change-Id: I94ffb610ef3651f460600e3df6b32c87fc430594
parent b204ade3
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -6131,6 +6131,10 @@ message ProcessStatsAvailablePagesProto {
 */
message ProcStats {
    optional ProcessStatsSectionProto proc_stats_section = 1;
    // Data pulled from device into this is sometimes sharded across multiple atoms to work around
    // a size limit. When this happens, this shard ID will contain an increasing 1-indexed integer
    // with the number of this shard.
    optional int32 shard_id = 2;
}

/**
+9 −3
Original line number Diff line number Diff line
@@ -2575,11 +2575,17 @@ public class StatsPullAtomService extends SystemService {
                    lastHighWaterMark, section, true, statsFiles, procStats);
            procStats.dumpAggregatedProtoForStatsd(protoStreams, MAX_PROCSTATS_RAW_SHARD_SIZE);

            for (ProtoOutputStream proto : protoStreams) {
                if (proto.getBytes().length > 0) {
            for (int i = 0; i < protoStreams.length; i++) {
                byte[] bytes = protoStreams[i].getBytes(); // cache the value
                if (bytes.length > 0) {
                    StatsEvent e = StatsEvent.newBuilder()
                            .setAtomId(atomTag)
                            .writeByteArray(proto.getBytes())
                            .writeByteArray(bytes)
                            // This is a shard ID, and is specified in the metric definition to be
                            // a dimension. This will result in statsd using RANDOM_ONE_SAMPLE to
                            // keep all the shards, as it thinks each shard is a different dimension
                            // of data.
                            .writeInt(i)
                            .build();
                    pulledData.add(e);
                }