From dd6df2939d86a2163c6318aa7ff51c348ded8d65 Mon Sep 17 00:00:00 2001 From: Siim Sammul Date: Fri, 26 Aug 2022 11:54:17 +0100 Subject: [PATCH] Add the ability to reset dropbox rate limiter with a shell command. Cherry picked from internal master Bug: 242671309 Test: atest ErrorsTest Change-Id: I87b8c6e49c809d94a036ccac5d4381dba691e727 Merged-In: I87b8c6e49c809d94a036ccac5d4381dba691e727 --- .../com/android/server/am/ActivityManagerService.java | 7 +++++++ .../server/am/ActivityManagerShellCommand.java | 7 +++++++ .../com/android/server/am/DropboxRateLimiter.java | 11 +++++++++++ 3 files changed, 25 insertions(+) diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index 8856147b3aea9..bc065d17e8aa9 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -17793,6 +17793,13 @@ public class ActivityManagerService extends IActivityManager.Stub mCoreSettingsObserver.onChange(true); } + /** + * Reset the dropbox rate limiter + */ + void resetDropboxRateLimiter() { + mDropboxRateLimiter.reset(); + } + /** * Kill processes for the user with id userId and that depend on the package named packageName */ diff --git a/services/core/java/com/android/server/am/ActivityManagerShellCommand.java b/services/core/java/com/android/server/am/ActivityManagerShellCommand.java index 570a1578a3048..82d0b67d5018d 100644 --- a/services/core/java/com/android/server/am/ActivityManagerShellCommand.java +++ b/services/core/java/com/android/server/am/ActivityManagerShellCommand.java @@ -350,6 +350,8 @@ final class ActivityManagerShellCommand extends ShellCommand { return runSetBgAbusiveUids(pw); case "list-bg-exemptions-config": return runListBgExemptionsConfig(pw); + case "reset-dropbox-rate-limiter": + return runResetDropboxRateLimiter(); default: return handleDefaultCommands(cmd); } @@ -3374,6 +3376,11 @@ final class ActivityManagerShellCommand extends ShellCommand { return 0; } + int runResetDropboxRateLimiter() throws RemoteException { + mInternal.resetDropboxRateLimiter(); + return 0; + } + private Resources getResources(PrintWriter pw) throws RemoteException { // system resources does not contain all the device configuration, construct it manually. Configuration config = mInterface.getConfiguration(); diff --git a/services/core/java/com/android/server/am/DropboxRateLimiter.java b/services/core/java/com/android/server/am/DropboxRateLimiter.java index baf062d284577..6087f76687bf6 100644 --- a/services/core/java/com/android/server/am/DropboxRateLimiter.java +++ b/services/core/java/com/android/server/am/DropboxRateLimiter.java @@ -19,11 +19,13 @@ package com.android.server.am; import android.os.SystemClock; import android.text.format.DateUtils; import android.util.ArrayMap; +import android.util.Slog; import com.android.internal.annotations.GuardedBy; /** Rate limiter for adding errors into dropbox. */ public class DropboxRateLimiter { + private static final String TAG = "DropboxRateLimiter"; // After RATE_LIMIT_ALLOWED_ENTRIES have been collected (for a single breakdown of // process/eventType) further entries will be rejected until RATE_LIMIT_BUFFER_DURATION has // elapsed, after which the current count for this breakdown will be reset. @@ -105,6 +107,15 @@ public class DropboxRateLimiter { mLastMapCleanUp = now; } + /** Resets the rate limiter memory. */ + void reset() { + synchronized (mErrorClusterRecords) { + mErrorClusterRecords.clear(); + } + mLastMapCleanUp = 0L; + Slog.i(TAG, "Rate limiter reset."); + } + String errorKey(String eventType, String processName) { return eventType + processName; }