|
@@ -8,7 +8,6 @@ from sentry.models import Organization, OrganizationMapping
|
|
|
from sentry.silo import SiloMode
|
|
|
from sentry.silo.patches.silo_aware_transaction_patch import (
|
|
|
MismatchedSiloTransactionError,
|
|
|
- TransactionMissingDBException,
|
|
|
siloed_atomic,
|
|
|
)
|
|
|
from sentry.testutils import TestCase
|
|
@@ -19,16 +18,31 @@ def is_running_in_split_db_mode() -> bool:
|
|
|
|
|
|
|
|
|
class TestSiloAwareTransactionPatchInSingleDbMode(TestCase):
|
|
|
+ @pytest.mark.skipif(is_running_in_split_db_mode(), reason="only runs in single db mode")
|
|
|
+ def test_routes_to_correct_db_in_control_silo(self):
|
|
|
+ with override_settings(SILO_MODE=SiloMode.CONTROL):
|
|
|
+ transaction_in_test = siloed_atomic()
|
|
|
+ assert transaction_in_test.using == "default"
|
|
|
+
|
|
|
+ @pytest.mark.skipif(is_running_in_split_db_mode(), reason="only runs in single db mode")
|
|
|
+ def test_routes_to_correct_db_in_region_silo(self):
|
|
|
+
|
|
|
+ with override_settings(SILO_MODE=SiloMode.REGION):
|
|
|
+ transaction_in_test = siloed_atomic()
|
|
|
+ assert transaction_in_test.using == "default"
|
|
|
+
|
|
|
def test_correctly_accepts_using_for_atomic(self):
|
|
|
transaction_in_test = siloed_atomic(using="foobar")
|
|
|
assert transaction_in_test.using == "foobar"
|
|
|
|
|
|
- def test_accepts_cross_silo_atomics_in_monolith_mode(self):
|
|
|
- siloed_atomic(using=router.db_for_write(Organization))
|
|
|
- siloed_atomic(using=router.db_for_write(OrganizationMapping))
|
|
|
-
|
|
|
|
|
|
class TestSiloAwareTransactionPatchInSplitDbMode(TestCase):
|
|
|
+ @pytest.mark.skipif(not is_running_in_split_db_mode(), reason="only runs in split db mode")
|
|
|
+ def test_routes_to_correct_db_in_control_silo(self):
|
|
|
+ with override_settings(SILO_MODE=SiloMode.REGION):
|
|
|
+ transaction_in_test = siloed_atomic()
|
|
|
+ assert transaction_in_test.using == "default"
|
|
|
+
|
|
|
@pytest.mark.skipif(not is_running_in_split_db_mode(), reason="only runs in split db mode")
|
|
|
def test_fails_if_silo_mismatch_with_using_in_region_silo(self):
|
|
|
with override_settings(SILO_MODE=SiloMode.REGION), pytest.raises(
|
|
@@ -36,24 +50,15 @@ class TestSiloAwareTransactionPatchInSplitDbMode(TestCase):
|
|
|
):
|
|
|
siloed_atomic(using=router.db_for_write(OrganizationMapping))
|
|
|
|
|
|
+ @pytest.mark.skipif(not is_running_in_split_db_mode(), reason="only runs in split db mode")
|
|
|
+ def test_routes_to_correct_db_in_region_silo(self):
|
|
|
+ with override_settings(SILO_MODE=SiloMode.CONTROL):
|
|
|
+ transaction_in_test = siloed_atomic()
|
|
|
+ assert transaction_in_test.using == "control"
|
|
|
+
|
|
|
@pytest.mark.skipif(not is_running_in_split_db_mode(), reason="only runs in split db mode")
|
|
|
def test_fails_if_silo_mismatch_with_using_in_control_silo(self):
|
|
|
with override_settings(SILO_MODE=SiloMode.CONTROL), pytest.raises(
|
|
|
MismatchedSiloTransactionError
|
|
|
):
|
|
|
siloed_atomic(using=router.db_for_write(Organization))
|
|
|
-
|
|
|
- @pytest.mark.skipif(not is_running_in_split_db_mode(), reason="only runs in split db mode")
|
|
|
- def test_fails_if_no_using_provided(self):
|
|
|
- with pytest.raises(TransactionMissingDBException):
|
|
|
- siloed_atomic()
|
|
|
-
|
|
|
- @pytest.mark.skipif(not is_running_in_split_db_mode(), reason="only runs in split db mode")
|
|
|
- def test_accepts_control_silo_routing_in_control_silo(self):
|
|
|
- with override_settings(SILO_MODE=SiloMode.CONTROL):
|
|
|
- siloed_atomic(using=router.db_for_write(OrganizationMapping))
|
|
|
-
|
|
|
- @pytest.mark.skipif(not is_running_in_split_db_mode(), reason="only runs in split db mode")
|
|
|
- def test_accepts_control_silo_routing_in_region_silo(self):
|
|
|
- with override_settings(SILO_MODE=SiloMode.REGION):
|
|
|
- siloed_atomic(using=router.db_for_write(Organization))
|