Bug 1211599 - Only allow whitelisted histograms to have > 100 buckets. r=nfroyd

This commit is contained in:
Chris H-C 2015-10-28 07:09:00 +01:00
parent ac8a5113c6
commit 44f8f7d17c
2 changed files with 206 additions and 0 deletions

View File

@ -0,0 +1,189 @@
[
"MEMORY_RESIDENT",
"MEMORY_JS_MAIN_RUNTIME_TEMPORARY_PEAK",
"MEMORY_JS_GC_HEAP",
"MEMORY_HEAP_ALLOCATED",
"SYSTEM_FONT_FALLBACK_SCRIPT",
"HTTP_REQUEST_PER_PAGE_FROM_CACHE",
"SSL_TIME_UNTIL_READY",
"SSL_TIME_UNTIL_HANDSHAKE_FINISHED",
"CERT_VALIDATION_HTTP_REQUEST_CANCELED_TIME",
"CERT_VALIDATION_HTTP_REQUEST_SUCCEEDED_TIME",
"CERT_VALIDATION_HTTP_REQUEST_FAILED_TIME",
"SSL_OBSERVED_END_ENTITY_CERTIFICATE_LIFETIME",
"SPDY_SERVER_INITIATED_STREAMS",
"STS_POLL_AND_EVENTS_CYCLE",
"STS_POLL_CYCLE",
"STS_POLL_AND_EVENT_THE_LAST_CYCLE",
"STS_POLL_BLOCK_TIME",
"PRCONNECT_BLOCKING_TIME_NORMAL",
"PRCONNECT_BLOCKING_TIME_SHUTDOWN",
"PRCONNECT_BLOCKING_TIME_CONNECTIVITY_CHANGE",
"PRCONNECT_BLOCKING_TIME_LINK_CHANGE",
"PRCONNECT_BLOCKING_TIME_OFFLINE",
"PRCONNECTCONTINUE_BLOCKING_TIME_NORMAL",
"PRCONNECTCONTINUE_BLOCKING_TIME_SHUTDOWN",
"PRCONNECTCONTINUE_BLOCKING_TIME_CONNECTIVITY_CHANGE",
"PRCONNECTCONTINUE_BLOCKING_TIME_LINK_CHANGE",
"PRCONNECTCONTINUE_BLOCKING_TIME_OFFLINE",
"PRCLOSE_TCP_BLOCKING_TIME_NORMAL",
"PRCLOSE_TCP_BLOCKING_TIME_SHUTDOWN",
"PRCLOSE_TCP_BLOCKING_TIME_CONNECTIVITY_CHANGE",
"PRCLOSE_TCP_BLOCKING_TIME_LINK_CHANGE",
"PRCLOSE_TCP_BLOCKING_TIME_OFFLINE",
"PRCLOSE_UDP_BLOCKING_TIME_NORMAL",
"PRCLOSE_UDP_BLOCKING_TIME_SHUTDOWN",
"PRCLOSE_UDP_BLOCKING_TIME_CONNECTIVITY_CHANGE",
"PRCLOSE_UDP_BLOCKING_TIME_LINK_CHANGE",
"PRCLOSE_UDP_BLOCKING_TIME_OFFLINE",
"UPDATE_PREF_UPDATE_CANCELATIONS_EXTERNAL",
"UPDATE_PREF_UPDATE_CANCELATIONS_NOTIFY",
"UPDATE_STATUS_ERROR_CODE_COMPLETE_STARTUP",
"UPDATE_STATUS_ERROR_CODE_PARTIAL_STARTUP",
"UPDATE_STATUS_ERROR_CODE_UNKNOWN_STARTUP",
"UPDATE_STATUS_ERROR_CODE_COMPLETE_STAGE",
"UPDATE_STATUS_ERROR_CODE_PARTIAL_STAGE",
"UPDATE_STATUS_ERROR_CODE_UNKNOWN_STAGE",
"SECURITY_UI",
"HEALTHREPORT_PAYLOAD_UNCOMPRESSED_BYTES",
"HEALTHREPORT_PAYLOAD_COMPRESSED_BYTES",
"CRASH_STORE_COMPRESSED_BYTES",
"SHUMWAY_FEATURE_USED",
"DEVTOOLS_DEBUGGER_RDP_LOCAL_RELOAD_MS",
"DEVTOOLS_DEBUGGER_RDP_REMOTE_RELOAD_MS",
"DEVTOOLS_DEBUGGER_RDP_LOCAL_NAVIGATETO_MS",
"DEVTOOLS_DEBUGGER_RDP_REMOTE_NAVIGATETO_MS",
"DEVTOOLS_DEBUGGER_RDP_LOCAL_EVENTLISTENERS_MS",
"DEVTOOLS_DEBUGGER_RDP_REMOTE_EVENTLISTENERS_MS",
"DEVTOOLS_DEBUGGER_RDP_LOCAL_DETACH_MS",
"DEVTOOLS_DEBUGGER_RDP_REMOTE_DETACH_MS",
"DEVTOOLS_DEBUGGER_RDP_LOCAL_RESUME_MS",
"DEVTOOLS_DEBUGGER_RDP_REMOTE_RESUME_MS",
"DEVTOOLS_DEBUGGER_RDP_LOCAL_INTERRUPT_MS",
"DEVTOOLS_DEBUGGER_RDP_REMOTE_INTERRUPT_MS",
"DEVTOOLS_DEBUGGER_RDP_LOCAL_CLIENTEVALUATE_MS",
"DEVTOOLS_DEBUGGER_RDP_REMOTE_CLIENTEVALUATE_MS",
"DEVTOOLS_DEBUGGER_RDP_LOCAL_RELEASEMANY_MS",
"DEVTOOLS_DEBUGGER_RDP_REMOTE_RELEASEMANY_MS",
"DEVTOOLS_DEBUGGER_RDP_LOCAL_THREADGRIPS_MS",
"DEVTOOLS_DEBUGGER_RDP_REMOTE_THREADGRIPS_MS",
"DEVTOOLS_DEBUGGER_RDP_LOCAL_SOURCES_MS",
"DEVTOOLS_DEBUGGER_RDP_REMOTE_SOURCES_MS",
"DEVTOOLS_DEBUGGER_RDP_LOCAL_FRAMES_MS",
"DEVTOOLS_DEBUGGER_RDP_REMOTE_FRAMES_MS",
"DEVTOOLS_DEBUGGER_RDP_LOCAL_PARAMETERNAMES_MS",
"DEVTOOLS_DEBUGGER_RDP_REMOTE_PARAMETERNAMES_MS",
"DEVTOOLS_DEBUGGER_RDP_LOCAL_OWNPROPERTYNAMES_MS",
"DEVTOOLS_DEBUGGER_RDP_REMOTE_OWNPROPERTYNAMES_MS",
"DEVTOOLS_DEBUGGER_RDP_LOCAL_PROTOTYPEANDPROPERTIES_MS",
"DEVTOOLS_DEBUGGER_RDP_REMOTE_PROTOTYPEANDPROPERTIES_MS",
"DEVTOOLS_DEBUGGER_RDP_LOCAL_ENUMPROPERTIES_MS",
"DEVTOOLS_DEBUGGER_RDP_REMOTE_ENUMPROPERTIES_MS",
"DEVTOOLS_DEBUGGER_RDP_LOCAL_PROTOTYPESANDPROPERTIES_MS",
"DEVTOOLS_DEBUGGER_RDP_REMOTE_PROTOTYPESANDPROPERTIES_MS",
"DEVTOOLS_DEBUGGER_RDP_LOCAL_PROPERTY_MS",
"DEVTOOLS_DEBUGGER_RDP_REMOTE_PROPERTY_MS",
"DEVTOOLS_DEBUGGER_RDP_LOCAL_PROTOTYPE_MS",
"DEVTOOLS_DEBUGGER_RDP_REMOTE_PROTOTYPE_MS",
"DEVTOOLS_DEBUGGER_RDP_REMOTE_DISPLAYSTRING_MS",
"DEVTOOLS_DEBUGGER_RDP_LOCAL_DISPLAYSTRING_MS",
"DEVTOOLS_DEBUGGER_RDP_LOCAL_SUBSTRING_MS",
"DEVTOOLS_DEBUGGER_RDP_REMOTE_SUBSTRING_MS",
"DEVTOOLS_DEBUGGER_RDP_LOCAL_RELEASE_MS",
"DEVTOOLS_DEBUGGER_RDP_REMOTE_RELEASE_MS",
"DEVTOOLS_DEBUGGER_RDP_LOCAL_LISTTABS_MS",
"DEVTOOLS_DEBUGGER_RDP_REMOTE_LISTTABS_MS",
"DEVTOOLS_DEBUGGER_RDP_LOCAL_PROTOCOLDESCRIPTION_MS",
"DEVTOOLS_DEBUGGER_RDP_REMOTE_PROTOCOLDESCRIPTION_MS",
"DEVTOOLS_DEBUGGER_RDP_LOCAL_LISTADDONS_MS",
"DEVTOOLS_DEBUGGER_RDP_REMOTE_LISTADDONS_MS",
"DEVTOOLS_DEBUGGER_RDP_LOCAL_LISTWORKERS_MS",
"DEVTOOLS_DEBUGGER_RDP_REMOTE_LISTWORKERS_MS",
"DEVTOOLS_DEBUGGER_RDP_LOCAL_LISTPROCESSES_MS",
"DEVTOOLS_DEBUGGER_RDP_REMOTE_LISTPROCESSES_MS",
"DEVTOOLS_DEBUGGER_RDP_LOCAL_DELETE_MS",
"DEVTOOLS_DEBUGGER_RDP_REMOTE_DELETE_MS",
"DEVTOOLS_DEBUGGER_RDP_LOCAL_THREADDETACH_MS",
"DEVTOOLS_DEBUGGER_RDP_REMOTE_THREADDETACH_MS",
"DEVTOOLS_DEBUGGER_RDP_LOCAL_ADDONDETACH_MS",
"DEVTOOLS_DEBUGGER_RDP_REMOTE_ADDONDETACH_MS",
"DEVTOOLS_DEBUGGER_RDP_LOCAL_TABDETACH_MS",
"DEVTOOLS_DEBUGGER_RDP_REMOTE_TABDETACH_MS",
"DEVTOOLS_DEBUGGER_RDP_LOCAL_WORKERDETACH_MS",
"DEVTOOLS_DEBUGGER_RDP_REMOTE_WORKERDETACH_MS",
"DEVTOOLS_DEBUGGER_DISPLAY_SOURCE_LOCAL_MS",
"DEVTOOLS_DEBUGGER_DISPLAY_SOURCE_REMOTE_MS",
"DEVTOOLS_DEBUGGER_RDP_LOCAL_RECONFIGURETAB_MS",
"DEVTOOLS_DEBUGGER_RDP_REMOTE_RECONFIGURETAB_MS",
"DEVTOOLS_DEBUGGER_RDP_LOCAL_RECONFIGURETHREAD_MS",
"DEVTOOLS_DEBUGGER_RDP_REMOTE_RECONFIGURETHREAD_MS",
"MEDIA_WMF_DECODE_ERROR",
"VIDEO_CANPLAYTYPE_H264_CONSTRAINT_SET_FLAG",
"VIDEO_CANPLAYTYPE_H264_PROFILE",
"VIDEO_DECODED_H264_SPS_CONSTRAINT_SET_FLAG",
"VIDEO_DECODED_H264_SPS_PROFILE",
"WEBRTC_CANDIDATE_TYPES_GIVEN_SUCCESS",
"WEBRTC_CANDIDATE_TYPES_GIVEN_FAILURE",
"WEBRTC_AVSYNC_WHEN_AUDIO_LAGS_VIDEO_MS",
"WEBRTC_AVSYNC_WHEN_VIDEO_LAGS_AUDIO_MS",
"WEBRTC_VIDEO_QUALITY_INBOUND_BANDWIDTH_KBITS",
"WEBRTC_AUDIO_QUALITY_INBOUND_BANDWIDTH_KBITS",
"WEBRTC_VIDEO_QUALITY_OUTBOUND_BANDWIDTH_KBITS",
"WEBRTC_AUDIO_QUALITY_OUTBOUND_BANDWIDTH_KBITS",
"WEBRTC_AUDIO_QUALITY_INBOUND_JITTER",
"WEBRTC_VIDEO_QUALITY_OUTBOUND_JITTER",
"WEBRTC_AUDIO_QUALITY_OUTBOUND_JITTER",
"WEBRTC_VIDEO_ERROR_RECOVERY_MS",
"WEBRTC_VIDEO_RECOVERY_BEFORE_ERROR_PER_MIN",
"WEBRTC_VIDEO_RECOVERY_AFTER_ERROR_PER_MIN",
"WEBRTC_VIDEO_QUALITY_OUTBOUND_RTT",
"WEBRTC_AUDIO_QUALITY_OUTBOUND_RTT",
"WEBRTC_CALL_DURATION",
"DEVTOOLS_DEBUGGER_RDP_LOCAL_TRACERDETACH_MS",
"DEVTOOLS_DEBUGGER_RDP_REMOTE_TRACERDETACH_MS",
"DEVTOOLS_DEBUGGER_RDP_LOCAL_STARTTRACE_MS",
"DEVTOOLS_DEBUGGER_RDP_REMOTE_STARTTRACE_MS",
"DEVTOOLS_DEBUGGER_RDP_LOCAL_STOPTRACE_MS",
"DEVTOOLS_DEBUGGER_RDP_REMOTE_STOPTRACE_MS",
"DEVTOOLS_DEBUGGER_RDP_LOCAL_GET_EXECUTABLE_LINES_MS",
"DEVTOOLS_DEBUGGER_RDP_REMOTE_GET_EXECUTABLE_LINES_MS",
"DEVTOOLS_DEBUGGER_RDP_LOCAL_BLACKBOX_MS",
"DEVTOOLS_DEBUGGER_RDP_REMOTE_BLACKBOX_MS",
"DEVTOOLS_DEBUGGER_RDP_LOCAL_UNBLACKBOX_MS",
"DEVTOOLS_DEBUGGER_RDP_REMOTE_UNBLACKBOX_MS",
"DEVTOOLS_DEBUGGER_RDP_LOCAL_SCOPE_MS",
"DEVTOOLS_DEBUGGER_RDP_REMOTE_SCOPE_MS",
"DEVTOOLS_DEBUGGER_RDP_LOCAL_BINDINGS_MS",
"DEVTOOLS_DEBUGGER_RDP_REMOTE_BINDINGS_MS",
"DEVTOOLS_DEBUGGER_RDP_LOCAL_ASSIGN_MS",
"DEVTOOLS_DEBUGGER_RDP_REMOTE_ASSIGN_MS",
"DEVTOOLS_SAVE_HEAP_SNAPSHOT_MS",
"DEVTOOLS_READ_HEAP_SNAPSHOT_MS",
"DEVTOOLS_HEAP_SNAPSHOT_NODE_COUNT",
"DEVTOOLS_HEAP_SNAPSHOT_EDGE_COUNT",
"NETWORK_CACHE_HIT_RATE_PER_CACHE_SIZE",
"NETWORK_CACHE_METADATA_FIRST_READ_SIZE",
"NETWORK_CACHE_METADATA_SIZE",
"NETWORK_CACHE_HASH_STATS",
"SSL_CIPHER_SUITE_FULL",
"SSL_CIPHER_SUITE_RESUMED",
"SSL_REASONS_FOR_NOT_FALSE_STARTING",
"SSL_CERT_VERIFICATION_ERRORS",
"CERT_VALIDATION_SUCCESS_BY_CA",
"CERT_PINNING_FAILURES_BY_CA",
"CERT_PINNING_MOZ_RESULTS_BY_HOST",
"CERT_PINNING_MOZ_TEST_RESULTS_BY_HOST",
"LOOP_CANDIDATE_TYPES_GIVEN_SUCCESS",
"LOOP_CANDIDATE_TYPES_GIVEN_FAILURE",
"LOOP_VIDEO_QUALITY_INBOUND_BANDWIDTH_KBITS",
"LOOP_AUDIO_QUALITY_INBOUND_BANDWIDTH_KBITS",
"LOOP_VIDEO_QUALITY_OUTBOUND_BANDWIDTH_KBITS",
"LOOP_AUDIO_QUALITY_OUTBOUND_BANDWIDTH_KBITS",
"LOOP_VIDEO_ERROR_RECOVERY_MS",
"LOOP_VIDEO_RECOVERY_BEFORE_ERROR_PER_MIN",
"LOOP_VIDEO_RECOVERY_AFTER_ERROR_PER_MIN",
"LOOP_VIDEO_QUALITY_OUTBOUND_RTT",
"LOOP_AUDIO_QUALITY_OUTBOUND_RTT",
"LOOP_CALL_DURATION",
"GFX_CRASH"
]

View File

@ -77,6 +77,18 @@ def exponential_buckets(dmin, dmax, n_buckets):
always_allowed_keys = ['kind', 'description', 'cpp_guard', 'expires_in_version',
'alert_emails', 'keyed', 'releaseChannelCollection']
n_buckets_whitelist = None;
try:
whitelist_path = os.path.join(os.path.abspath(os.path.realpath(os.path.dirname(__file__))), 'bucket-whitelist.json')
with open(whitelist_path, 'r') as f:
try:
n_buckets_whitelist = set(json.load(f))
except ValueError, e:
raise BaseException, 'error parsing bucket whitelist (%s)' % whitelist_path
except IOError:
n_buckets_whitelist = None
print 'Unable to parse whitelist (%s). Assuming all histograms are acceptable.' % whitelist_path
class Histogram:
"""A class for representing a histogram definition."""
@ -243,6 +255,11 @@ is enabled."""
self._low = try_to_coerce_to_number(low)
self._high = try_to_coerce_to_number(high)
self._n_buckets = try_to_coerce_to_number(n_buckets)
if n_buckets_whitelist is not None and self._n_buckets > 100 and type(self._n_buckets) is int:
if self._name not in n_buckets_whitelist:
raise KeyError, ('New histogram %s is not permitted to have more than 100 buckets. '
'Histograms with large numbers of buckets use disproportionately high amounts of resources. '
'Contact :vladan or the Perf team if you think an exception ought to be made.' % self._name)
@staticmethod
def boolean_flag_bucket_parameters(definition):