Browse Source

fix(grouping): Do not consider _dispatch_client_callout as threadbase (#61675)

When investigating issues for a customer we noticed that marking
_dispatch_client_callout as threadbase would remove all frames before as
not considered for grouping.

Removing the rule can cause new groups to be generated if any of the
frames discarded are now considered for grouping.
Armen Zambrano G 1 year ago
parent
commit
9d73f36728

+ 0 - 1
src/sentry/grouping/enhancer/enhancement-configs/newstyle@2023-01-11.txt

@@ -165,7 +165,6 @@ family:native function:_pthread_start category=threadbase
 family:native function:__pthread_start category=threadbase
 family:native function:_pthread_body category=threadbase
 family:native function:_dispatch_worker_thread2 category=threadbase
-family:native function:_dispatch_client_callout category=threadbase
 family:native function:start_wqthread category=threadbase
 family:native function:_pthread_wqthread category=threadbase
 family:native function:boost::*::thread_proxy category=threadbase

+ 114 - 0
tests/sentry/grouping/grouping_inputs/cocoa_dispatch_client_callout.json

@@ -0,0 +1,114 @@
+{
+  "platform": "cocoa",
+  "message": "Foo",
+  "threads": {
+    "values": [
+      {
+        "stacktrace": {
+          "frames": [
+            {
+              "function": "unicorn",
+              "package": "/private/var/containers/Bundle/Application/9B2E1C43-8839-4525-9586-FC58F0534940/Foobar.app/Foobar",
+              "in_app": false,
+              "data": {
+                "orig_in_app": 1
+              }
+            },
+            {
+              "function": "UIApplicationMain",
+              "package": "/System/Library/PrivateFrameworks/UIKitCore.framework/UIKitCore",
+              "in_app": false,
+              "data": {}
+            },
+            {
+              "function": "-[UIApplication _run]",
+              "package": "/System/Library/PrivateFrameworks/UIKitCore.framework/UIKitCore",
+              "in_app": false,
+              "data": {}
+            },
+            {
+              "function": "_dispatch_main_queue_drain",
+              "package": "/usr/lib/system/libdispatch.dylib",
+              "in_app": false,
+              "data": {}
+            },
+            {
+              "function": "_dispatch_client_callout",
+              "package": "/usr/lib/system/libdispatch.dylib",
+              "in_app": false,
+              "data": {}
+            },
+            {
+              "function": "_dispatch_block_async_invoke2",
+              "package": "/usr/lib/system/libdispatch.dylib",
+              "in_app": false,
+              "data": {}
+            },
+            {
+              "function": "-[NSBlockOperation main]",
+              "package": "/System/Library/Frameworks/Foundation.framework/Foundation",
+              "in_app": false,
+              "data": {}
+            },
+            {
+              "function": "__NSBLOCKOPERATION_IS_CALLING_OUT_TO_A_BLOCK__",
+              "package": "/System/Library/Frameworks/Foundation.framework/Foundation",
+              "in_app": false,
+              "data": {}
+            },
+            {
+              "function": "__46+[FudgeGlobalHandler setupGlobalHandlersIfNeeded]_block_invoke_2",
+              "package": "/private/var/containers/Bundle/Application/9B2E1C43-8839-4525-9586-FC58F0534940/Foobar.app/Foobar",
+              "in_app": true,
+              "data": {}
+            },
+            {
+              "function": "FudgeLogTaggedError",
+              "package": "/private/var/containers/Bundle/Application/9B2E1C43-8839-4525-9586-FC58F0534940/Foobar.app/Foobar",
+              "in_app": false,
+              "data": {
+                "orig_in_app": 1
+              }
+            },
+            {
+              "function": "thunk for closure",
+              "package": "/private/var/containers/Bundle/Application/9B2E1C43-8839-4525-9586-FC58F0534940/Foobar.app/Foobar",
+              "in_app": false,
+              "data": {
+                "orig_in_app": 1
+              }
+            },
+            {
+              "function": "SentrySetupInteractor.setupSentry",
+              "package": "/private/var/containers/Bundle/Application/9B2E1C43-8839-4525-9586-FC58F0534940/Foobar.app/Foobar",
+              "in_app": false,
+              "data": {
+                "orig_in_app": 1
+              }
+            },
+            {
+              "function": "_dispatch_lane_barrier_sync_invoke_and_complete",
+              "package": "/usr/lib/system/libdispatch.dylib",
+              "in_app": false,
+              "data": {}
+            },
+            {
+              "function": "_dispatch_client_callout",
+              "package": "/usr/lib/system/libdispatch.dylib",
+              "in_app": false,
+              "data": {}
+            },
+            {
+              "function": "thunk for closure",
+              "package": "/private/var/containers/Bundle/Application/9B2E1C43-8839-4525-9586-FC58F0534940/Foobar.app/Foobar",
+              "in_app": false,
+              "data": {
+                "orig_in_app": 1
+              }
+            }
+          ]
+        }
+      }
+    ]
+  }
+}

+ 115 - 0
tests/sentry/grouping/snapshots/test_variants/test_event_hash_variant/legacy@2019_03_12/cocoa_dispatch_client_callout.pysnap

@@ -0,0 +1,115 @@
+---
+created: '2023-12-13T15:30:06.680639Z'
+creator: sentry
+source: tests/sentry/grouping/test_variants.py
+---
+app:
+  hash: null
+  component:
+    app (logentry takes precedence)
+      threads
+        stacktrace
+          frame
+            function (function name is not used if module or filename are available)
+              "unicorn"
+          frame (non app frame)
+            function (function name is not used if module or filename are available)
+              "UIApplicationMain"
+          frame (non app frame)
+            function (function name is not used if module or filename are available)
+              "-[UIApplication _run]"
+          frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app))
+            function (function name is not used if module or filename are available)
+              "_dispatch_main_queue_drain"
+          frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app))
+            function (function name is not used if module or filename are available)
+              "_dispatch_client_callout"
+          frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app))
+            function (function name is not used if module or filename are available)
+              "_dispatch_block_async_invoke2"
+          frame (non app frame)
+            function (function name is not used if module or filename are available)
+              "-[NSBlockOperation main]"
+          frame (non app frame)
+            function (function name is not used if module or filename are available)
+              "__NSBLOCKOPERATION_IS_CALLING_OUT_TO_A_BLOCK__"
+          frame
+            function (function name is not used if module or filename are available)
+              "__46+[FudgeGlobalHandler setupGlobalHandlersIfNeeded]_block_invoke_2"
+          frame
+            function (function name is not used if module or filename are available)
+              "FudgeLogTaggedError"
+          frame
+            function (function name is not used if module or filename are available)
+              "thunk for closure"
+          frame
+            function (function name is not used if module or filename are available)
+              "SentrySetupInteractor.setupSentry"
+          frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app))
+            function (function name is not used if module or filename are available)
+              "_dispatch_lane_barrier_sync_invoke_and_complete"
+          frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app))
+            function (function name is not used if module or filename are available)
+              "_dispatch_client_callout"
+          frame
+            function (function name is not used if module or filename are available)
+              "thunk for closure"
+--------------------------------------------------------------------------
+default:
+  hash: "1356c67d7ad1638d816bfb822dd2c25d"
+  component:
+    default*
+      message*
+        "Foo"
+--------------------------------------------------------------------------
+system:
+  hash: null
+  component:
+    system (logentry takes precedence)
+      threads
+        stacktrace
+          frame
+            function (function name is not used if module or filename are available)
+              "unicorn"
+          frame
+            function (function name is not used if module or filename are available)
+              "UIApplicationMain"
+          frame
+            function (function name is not used if module or filename are available)
+              "-[UIApplication _run]"
+          frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app))
+            function (function name is not used if module or filename are available)
+              "_dispatch_main_queue_drain"
+          frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app))
+            function (function name is not used if module or filename are available)
+              "_dispatch_client_callout"
+          frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app))
+            function (function name is not used if module or filename are available)
+              "_dispatch_block_async_invoke2"
+          frame
+            function (function name is not used if module or filename are available)
+              "-[NSBlockOperation main]"
+          frame
+            function (function name is not used if module or filename are available)
+              "__NSBLOCKOPERATION_IS_CALLING_OUT_TO_A_BLOCK__"
+          frame
+            function (function name is not used if module or filename are available)
+              "__46+[FudgeGlobalHandler setupGlobalHandlersIfNeeded]_block_invoke_2"
+          frame
+            function (function name is not used if module or filename are available)
+              "FudgeLogTaggedError"
+          frame
+            function (function name is not used if module or filename are available)
+              "thunk for closure"
+          frame
+            function (function name is not used if module or filename are available)
+              "SentrySetupInteractor.setupSentry"
+          frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app))
+            function (function name is not used if module or filename are available)
+              "_dispatch_lane_barrier_sync_invoke_and_complete"
+          frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app))
+            function (function name is not used if module or filename are available)
+              "_dispatch_client_callout"
+          frame
+            function (function name is not used if module or filename are available)
+              "thunk for closure"

+ 83 - 0
tests/sentry/grouping/snapshots/test_variants/test_event_hash_variant/mobile@2021_02_12/cocoa_dispatch_client_callout.pysnap

@@ -0,0 +1,83 @@
+---
+created: '2023-12-13T15:30:28.512896Z'
+creator: sentry
+source: tests/sentry/grouping/test_variants.py
+---
+app-depth-1:
+  hash: null
+  component:
+    app-depth-1 (logentry takes precedence)
+      threads
+        stacktrace
+          frame (ignored by stack trace rule (category:internals -group))
+            function*
+              "closure"
+--------------------------------------------------------------------------
+app-depth-max:
+  hash: null
+  component:
+    app-depth-max (logentry takes precedence)
+      threads
+        stacktrace
+          frame (ignored by stack trace rule (category:internals -group))
+            function*
+              "closure"
+--------------------------------------------------------------------------
+default:
+  hash: "1356c67d7ad1638d816bfb822dd2c25d"
+  component:
+    default*
+      message*
+        "Foo"
+--------------------------------------------------------------------------
+system:
+  hash: null
+  component:
+    system (logentry takes precedence)
+      threads
+        stacktrace
+          frame (ignored by stack trace rule (category:threadbase -group v-group))
+            function*
+              "unicorn"
+          frame (ignored by stack trace rule (category:threadbase -group v-group))
+            function*
+              "UIApplicationMain"
+          frame (ignored by stack trace rule (category:threadbase -group v-group))
+            function*
+              "-[UIApplication _run]"
+          frame (ignored by stack trace rule (category:threadbase -group v-group))
+            function*
+              "_dispatch_main_queue_drain"
+          frame (ignored by stack trace rule (category:threadbase -group v-group))
+            function*
+              "_dispatch_client_callout"
+          frame (ignored by stack trace rule (category:threadbase -group v-group))
+            function*
+              "_dispatch_block_async_invoke2"
+          frame (ignored by stack trace rule (category:threadbase -group v-group))
+            function*
+              "-[NSBlockOperation main]"
+          frame (ignored by stack trace rule (category:threadbase -group v-group))
+            function*
+              "__NSBLOCKOPERATION_IS_CALLING_OUT_TO_A_BLOCK__"
+          frame (ignored by stack trace rule (category:threadbase -group v-group))
+            function*
+              "__46+[FudgeGlobalHandler setupGlobalHandlersIfNeeded]_block_invoke_2"
+          frame (ignored by stack trace rule (category:threadbase -group v-group))
+            function*
+              "FudgeLogTaggedError"
+          frame (ignored by stack trace rule (category:threadbase -group v-group))
+            function*
+              "closure"
+          frame (ignored by stack trace rule (category:threadbase -group v-group))
+            function*
+              "SentrySetupInteractor.setupSentry"
+          frame (ignored by stack trace rule (category:threadbase -group v-group))
+            function*
+              "_dispatch_lane_barrier_sync_invoke_and_complete"
+          frame (ignored by stack trace rule (category:threadbase -group v-group))
+            function*
+              "_dispatch_client_callout"
+          frame (ignored by stack trace rule (category:internals -group))
+            function*
+              "closure"

+ 115 - 0
tests/sentry/grouping/snapshots/test_variants/test_event_hash_variant/newstyle@2019_04_05/cocoa_dispatch_client_callout.pysnap

@@ -0,0 +1,115 @@
+---
+created: '2023-12-13T15:30:44.361778Z'
+creator: sentry
+source: tests/sentry/grouping/test_variants.py
+---
+app:
+  hash: "7b230a2bb8a040d3e337c6205147e990"
+  component:
+    app*
+      threads*
+        stacktrace*
+          frame*
+            function*
+              "unicorn"
+          frame (non app frame)
+            function*
+              "UIApplicationMain"
+          frame (non app frame)
+            function*
+              "-[UIApplication _run]"
+          frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app))
+            function*
+              "_dispatch_main_queue_drain"
+          frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app))
+            function*
+              "_dispatch_client_callout"
+          frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app))
+            function*
+              "_dispatch_block_async_invoke2"
+          frame (non app frame)
+            function*
+              "-[NSBlockOperation main]"
+          frame (non app frame)
+            function*
+              "__NSBLOCKOPERATION_IS_CALLING_OUT_TO_A_BLOCK__"
+          frame* (marked in-app by stack trace rule (family:native package:**/containers/bundle/application/** +app))
+            function*
+              "__46+[FudgeGlobalHandler setupGlobalHandlersIfNeeded]_block_invoke_2"
+          frame*
+            function*
+              "FudgeLogTaggedError"
+          frame*
+            function* (isolated function)
+              "closure"
+          frame*
+            function*
+              "SentrySetupInteractor.setupSentry"
+          frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app))
+            function*
+              "_dispatch_lane_barrier_sync_invoke_and_complete"
+          frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app))
+            function*
+              "_dispatch_client_callout"
+          frame*
+            function* (isolated function)
+              "closure"
+--------------------------------------------------------------------------
+default:
+  hash: null
+  component:
+    default (threads of app/system take precedence)
+      message (threads of app/system take precedence)
+        "Foo"
+--------------------------------------------------------------------------
+system:
+  hash: "96df2174dd7e0ad3c31948a9de020fba"
+  component:
+    system*
+      threads*
+        stacktrace*
+          frame*
+            function*
+              "unicorn"
+          frame*
+            function*
+              "UIApplicationMain"
+          frame*
+            function*
+              "-[UIApplication _run]"
+          frame*
+            function*
+              "_dispatch_main_queue_drain"
+          frame*
+            function*
+              "_dispatch_client_callout"
+          frame*
+            function*
+              "_dispatch_block_async_invoke2"
+          frame*
+            function*
+              "-[NSBlockOperation main]"
+          frame*
+            function*
+              "__NSBLOCKOPERATION_IS_CALLING_OUT_TO_A_BLOCK__"
+          frame* (marked in-app by stack trace rule (family:native package:**/containers/bundle/application/** +app))
+            function*
+              "__46+[FudgeGlobalHandler setupGlobalHandlersIfNeeded]_block_invoke_2"
+          frame*
+            function*
+              "FudgeLogTaggedError"
+          frame*
+            function* (isolated function)
+              "closure"
+          frame*
+            function*
+              "SentrySetupInteractor.setupSentry"
+          frame*
+            function*
+              "_dispatch_lane_barrier_sync_invoke_and_complete"
+          frame*
+            function*
+              "_dispatch_client_callout"
+          frame*
+            function* (isolated function)
+              "closure"

+ 115 - 0
tests/sentry/grouping/snapshots/test_variants/test_event_hash_variant/newstyle@2019_04_17/cocoa_dispatch_client_callout.pysnap

@@ -0,0 +1,115 @@
+---
+created: '2023-12-13T15:30:50.637947Z'
+creator: sentry
+source: tests/sentry/grouping/test_variants.py
+---
+app:
+  hash: "7b230a2bb8a040d3e337c6205147e990"
+  component:
+    app*
+      threads*
+        stacktrace*
+          frame*
+            function*
+              "unicorn"
+          frame (non app frame)
+            function*
+              "UIApplicationMain"
+          frame (non app frame)
+            function*
+              "-[UIApplication _run]"
+          frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app))
+            function*
+              "_dispatch_main_queue_drain"
+          frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app))
+            function*
+              "_dispatch_client_callout"
+          frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app))
+            function*
+              "_dispatch_block_async_invoke2"
+          frame (non app frame)
+            function*
+              "-[NSBlockOperation main]"
+          frame (non app frame)
+            function*
+              "__NSBLOCKOPERATION_IS_CALLING_OUT_TO_A_BLOCK__"
+          frame* (marked in-app by stack trace rule (family:native package:**/containers/bundle/application/** +app))
+            function*
+              "__46+[FudgeGlobalHandler setupGlobalHandlersIfNeeded]_block_invoke_2"
+          frame*
+            function*
+              "FudgeLogTaggedError"
+          frame*
+            function*
+              "closure"
+          frame*
+            function*
+              "SentrySetupInteractor.setupSentry"
+          frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app))
+            function*
+              "_dispatch_lane_barrier_sync_invoke_and_complete"
+          frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app))
+            function*
+              "_dispatch_client_callout"
+          frame*
+            function*
+              "closure"
+--------------------------------------------------------------------------
+default:
+  hash: null
+  component:
+    default (threads of app/system take precedence)
+      message (threads of app/system take precedence)
+        "Foo"
+--------------------------------------------------------------------------
+system:
+  hash: "96df2174dd7e0ad3c31948a9de020fba"
+  component:
+    system*
+      threads*
+        stacktrace*
+          frame*
+            function*
+              "unicorn"
+          frame*
+            function*
+              "UIApplicationMain"
+          frame*
+            function*
+              "-[UIApplication _run]"
+          frame*
+            function*
+              "_dispatch_main_queue_drain"
+          frame*
+            function*
+              "_dispatch_client_callout"
+          frame*
+            function*
+              "_dispatch_block_async_invoke2"
+          frame*
+            function*
+              "-[NSBlockOperation main]"
+          frame*
+            function*
+              "__NSBLOCKOPERATION_IS_CALLING_OUT_TO_A_BLOCK__"
+          frame* (marked in-app by stack trace rule (family:native package:**/containers/bundle/application/** +app))
+            function*
+              "__46+[FudgeGlobalHandler setupGlobalHandlersIfNeeded]_block_invoke_2"
+          frame*
+            function*
+              "FudgeLogTaggedError"
+          frame*
+            function*
+              "closure"
+          frame*
+            function*
+              "SentrySetupInteractor.setupSentry"
+          frame*
+            function*
+              "_dispatch_lane_barrier_sync_invoke_and_complete"
+          frame*
+            function*
+              "_dispatch_client_callout"
+          frame*
+            function*
+              "closure"

+ 115 - 0
tests/sentry/grouping/snapshots/test_variants/test_event_hash_variant/newstyle@2019_05_08/cocoa_dispatch_client_callout.pysnap

@@ -0,0 +1,115 @@
+---
+created: '2023-12-13T15:30:12.623334Z'
+creator: sentry
+source: tests/sentry/grouping/test_variants.py
+---
+app:
+  hash: "7b230a2bb8a040d3e337c6205147e990"
+  component:
+    app*
+      threads*
+        stacktrace*
+          frame*
+            function*
+              "unicorn"
+          frame (non app frame)
+            function*
+              "UIApplicationMain"
+          frame (non app frame)
+            function*
+              "-[UIApplication _run]"
+          frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app))
+            function*
+              "_dispatch_main_queue_drain"
+          frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app))
+            function*
+              "_dispatch_client_callout"
+          frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app))
+            function*
+              "_dispatch_block_async_invoke2"
+          frame (non app frame)
+            function*
+              "-[NSBlockOperation main]"
+          frame (non app frame)
+            function*
+              "__NSBLOCKOPERATION_IS_CALLING_OUT_TO_A_BLOCK__"
+          frame* (marked in-app by stack trace rule (family:native package:**/containers/bundle/application/** +app))
+            function*
+              "__46+[FudgeGlobalHandler setupGlobalHandlersIfNeeded]_block_invoke_2"
+          frame*
+            function*
+              "FudgeLogTaggedError"
+          frame*
+            function*
+              "closure"
+          frame*
+            function*
+              "SentrySetupInteractor.setupSentry"
+          frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app))
+            function*
+              "_dispatch_lane_barrier_sync_invoke_and_complete"
+          frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app))
+            function*
+              "_dispatch_client_callout"
+          frame*
+            function*
+              "closure"
+--------------------------------------------------------------------------
+default:
+  hash: null
+  component:
+    default (threads of app/system take precedence)
+      message (threads of app/system take precedence)
+        "Foo"
+--------------------------------------------------------------------------
+system:
+  hash: "96df2174dd7e0ad3c31948a9de020fba"
+  component:
+    system*
+      threads*
+        stacktrace*
+          frame*
+            function*
+              "unicorn"
+          frame*
+            function*
+              "UIApplicationMain"
+          frame*
+            function*
+              "-[UIApplication _run]"
+          frame*
+            function*
+              "_dispatch_main_queue_drain"
+          frame*
+            function*
+              "_dispatch_client_callout"
+          frame*
+            function*
+              "_dispatch_block_async_invoke2"
+          frame*
+            function*
+              "-[NSBlockOperation main]"
+          frame*
+            function*
+              "__NSBLOCKOPERATION_IS_CALLING_OUT_TO_A_BLOCK__"
+          frame* (marked in-app by stack trace rule (family:native package:**/containers/bundle/application/** +app))
+            function*
+              "__46+[FudgeGlobalHandler setupGlobalHandlersIfNeeded]_block_invoke_2"
+          frame*
+            function*
+              "FudgeLogTaggedError"
+          frame*
+            function*
+              "closure"
+          frame*
+            function*
+              "SentrySetupInteractor.setupSentry"
+          frame*
+            function*
+              "_dispatch_lane_barrier_sync_invoke_and_complete"
+          frame*
+            function*
+              "_dispatch_client_callout"
+          frame*
+            function*
+              "closure"

+ 115 - 0
tests/sentry/grouping/snapshots/test_variants/test_event_hash_variant/newstyle@2019_10_29/cocoa_dispatch_client_callout.pysnap

@@ -0,0 +1,115 @@
+---
+created: '2023-12-13T15:30:20.019431Z'
+creator: sentry
+source: tests/sentry/grouping/test_variants.py
+---
+app:
+  hash: "7b230a2bb8a040d3e337c6205147e990"
+  component:
+    app*
+      threads*
+        stacktrace*
+          frame*
+            function*
+              "unicorn"
+          frame (non app frame)
+            function*
+              "UIApplicationMain"
+          frame (non app frame)
+            function*
+              "-[UIApplication _run]"
+          frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app))
+            function*
+              "_dispatch_main_queue_drain"
+          frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app))
+            function*
+              "_dispatch_client_callout"
+          frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app))
+            function*
+              "_dispatch_block_async_invoke2"
+          frame (non app frame)
+            function*
+              "-[NSBlockOperation main]"
+          frame (non app frame)
+            function*
+              "__NSBLOCKOPERATION_IS_CALLING_OUT_TO_A_BLOCK__"
+          frame* (marked in-app by stack trace rule (family:native package:**/containers/bundle/application/** +app))
+            function*
+              "__46+[FudgeGlobalHandler setupGlobalHandlersIfNeeded]_block_invoke_2"
+          frame*
+            function*
+              "FudgeLogTaggedError"
+          frame*
+            function*
+              "closure"
+          frame*
+            function*
+              "SentrySetupInteractor.setupSentry"
+          frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app))
+            function*
+              "_dispatch_lane_barrier_sync_invoke_and_complete"
+          frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app))
+            function*
+              "_dispatch_client_callout"
+          frame*
+            function*
+              "closure"
+--------------------------------------------------------------------------
+default:
+  hash: null
+  component:
+    default (threads of app/system take precedence)
+      message (threads of app/system take precedence)
+        "Foo"
+--------------------------------------------------------------------------
+system:
+  hash: "96df2174dd7e0ad3c31948a9de020fba"
+  component:
+    system*
+      threads*
+        stacktrace*
+          frame*
+            function*
+              "unicorn"
+          frame*
+            function*
+              "UIApplicationMain"
+          frame*
+            function*
+              "-[UIApplication _run]"
+          frame*
+            function*
+              "_dispatch_main_queue_drain"
+          frame*
+            function*
+              "_dispatch_client_callout"
+          frame*
+            function*
+              "_dispatch_block_async_invoke2"
+          frame*
+            function*
+              "-[NSBlockOperation main]"
+          frame*
+            function*
+              "__NSBLOCKOPERATION_IS_CALLING_OUT_TO_A_BLOCK__"
+          frame* (marked in-app by stack trace rule (family:native package:**/containers/bundle/application/** +app))
+            function*
+              "__46+[FudgeGlobalHandler setupGlobalHandlersIfNeeded]_block_invoke_2"
+          frame*
+            function*
+              "FudgeLogTaggedError"
+          frame*
+            function*
+              "closure"
+          frame*
+            function*
+              "SentrySetupInteractor.setupSentry"
+          frame*
+            function*
+              "_dispatch_lane_barrier_sync_invoke_and_complete"
+          frame*
+            function*
+              "_dispatch_client_callout"
+          frame*
+            function*
+              "closure"

+ 9 - 9
tests/sentry/grouping/snapshots/test_variants/test_event_hash_variant/newstyle@2023_01_11/callee_guaranteed.pysnap

@@ -1,5 +1,5 @@
 ---
-created: '2023-12-12T13:53:16.104124Z'
+created: '2023-12-13T13:53:31.871275Z'
 creator: sentry
 source: tests/sentry/grouping/test_variants.py
 ---
@@ -127,7 +127,7 @@ app:
           2
 --------------------------------------------------------------------------
 system:
-  hash: "0211daaed35e19ba74b4d6f08cd00fef"
+  hash: "47481871aa8d5ab5729cf2db78ce3032"
   component:
     system*
       exception*
@@ -141,25 +141,25 @@ system:
           frame (ignored by stack trace rule (category:threadbase -group v-group))
             function*
               "UIApplicationMain"
-          frame (ignored by stack trace rule (category:threadbase -group v-group))
+          frame*
             function*
               "-[UIApplication _run]"
-          frame (ignored by stack trace rule (category:threadbase -group v-group))
+          frame (ignored by stack trace rule (category:internals -group))
             function*
               "GSEventRunModal"
-          frame (ignored by stack trace rule (category:threadbase -group v-group))
+          frame (ignored by stack trace rule (category:indirection -group))
             function*
               "CFRunLoopRunSpecific"
-          frame (ignored by stack trace rule (category:threadbase -group v-group))
+          frame (ignored by stack trace rule (category:internals -group))
             function*
               "__CFRunLoopRun"
-          frame (ignored by stack trace rule (category:threadbase -group v-group))
+          frame (ignored by stack trace rule (category:internals -group))
             function*
               "__CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__"
-          frame (ignored by stack trace rule (category:threadbase -group v-group))
+          frame (ignored by stack trace rule (category:internals -group))
             function*
               "_dispatch_main_queue_callback_4CF"
-          frame (ignored by stack trace rule (category:threadbase -group v-group))
+          frame (ignored by stack trace rule (category:internals -group))
             function*
               "_dispatch_client_callout"
           frame (ignored by stack trace rule (category:internals -group))

+ 115 - 0
tests/sentry/grouping/snapshots/test_variants/test_event_hash_variant/newstyle@2023_01_11/cocoa_dispatch_client_callout.pysnap

@@ -0,0 +1,115 @@
+---
+created: '2023-12-13T15:30:38.097957Z'
+creator: sentry
+source: tests/sentry/grouping/test_variants.py
+---
+app:
+  hash: "7c8a196d16b94be382add324be2605ee"
+  component:
+    app*
+      threads*
+        stacktrace*
+          frame*
+            function*
+              "unicorn"
+          frame (non app frame)
+            function*
+              "UIApplicationMain"
+          frame (non app frame)
+            function*
+              "-[UIApplication _run]"
+          frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app))
+            function*
+              "_dispatch_main_queue_drain"
+          frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app))
+            function*
+              "_dispatch_client_callout"
+          frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app))
+            function*
+              "_dispatch_block_async_invoke2"
+          frame (non app frame)
+            function*
+              "-[NSBlockOperation main]"
+          frame (non app frame)
+            function*
+              "__NSBLOCKOPERATION_IS_CALLING_OUT_TO_A_BLOCK__"
+          frame* (marked in-app by stack trace rule (family:native package:**/containers/bundle/application/** +app))
+            function*
+              "__46+[FudgeGlobalHandler setupGlobalHandlersIfNeeded]_block_invoke_2"
+          frame*
+            function*
+              "FudgeLogTaggedError"
+          frame (ignored by stack trace rule (category:internals -group))
+            function*
+              "closure"
+          frame*
+            function*
+              "SentrySetupInteractor.setupSentry"
+          frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app))
+            function*
+              "_dispatch_lane_barrier_sync_invoke_and_complete"
+          frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app))
+            function*
+              "_dispatch_client_callout"
+          frame (ignored by stack trace rule (category:internals -group))
+            function*
+              "closure"
+--------------------------------------------------------------------------
+default:
+  hash: null
+  component:
+    default (threads of app/system take precedence)
+      message (threads of app/system take precedence)
+        "Foo"
+--------------------------------------------------------------------------
+system:
+  hash: "cd7f51d716fd57adc1a5ce1c112e538f"
+  component:
+    system*
+      threads*
+        stacktrace*
+          frame*
+            function*
+              "unicorn"
+          frame*
+            function*
+              "UIApplicationMain"
+          frame (ignored by stack trace rule (category:internals -group))
+            function*
+              "-[UIApplication _run]"
+          frame (ignored by stack trace rule (category:internals -group))
+            function*
+              "_dispatch_main_queue_drain"
+          frame (ignored by stack trace rule (category:internals -group))
+            function*
+              "_dispatch_client_callout"
+          frame (ignored by stack trace rule (category:internals -group))
+            function*
+              "_dispatch_block_async_invoke2"
+          frame (ignored by stack trace rule (category:indirection -group))
+            function*
+              "-[NSBlockOperation main]"
+          frame (ignored by stack trace rule (category:internals -group))
+            function*
+              "__NSBLOCKOPERATION_IS_CALLING_OUT_TO_A_BLOCK__"
+          frame* (marked in-app by stack trace rule (family:native package:**/containers/bundle/application/** +app))
+            function*
+              "__46+[FudgeGlobalHandler setupGlobalHandlersIfNeeded]_block_invoke_2"
+          frame*
+            function*
+              "FudgeLogTaggedError"
+          frame (ignored by stack trace rule (category:internals -group))
+            function*
+              "closure"
+          frame*
+            function*
+              "SentrySetupInteractor.setupSentry"
+          frame (ignored by stack trace rule (category:internals -group))
+            function*
+              "_dispatch_lane_barrier_sync_invoke_and_complete"
+          frame (ignored by stack trace rule (category:internals -group))
+            function*
+              "_dispatch_client_callout"
+          frame (ignored by stack trace rule (category:internals -group))
+            function*
+              "closure"

Some files were not shown because too many files changed in this diff