Skip to content

fix(trino): shadowing of http_scheme argument#25726

Merged
TeddyCr merged 5 commits intoopen-metadata:mainfrom
TeddyCr:MINOR-Trino-http-scheme
Feb 7, 2026
Merged

fix(trino): shadowing of http_scheme argument#25726
TeddyCr merged 5 commits intoopen-metadata:mainfrom
TeddyCr:MINOR-Trino-http-scheme

Conversation

@TeddyCr
Copy link
Collaborator

@TeddyCr TeddyCr commented Feb 6, 2026

fix(trino): shadowing of http_scheme argument

Describe your changes:

Fixes

I worked on ... because ...

Type of change:

  • Bug fix
  • Improvement
  • New feature
  • Breaking change (fix or feature that would cause existing functionality to not work as expected)
  • Documentation

Checklist:

  • I have read the CONTRIBUTING document.
  • My PR title is Fixes <issue-number>: <short explanation>
  • I have commented on my code, particularly in hard-to-understand areas.
  • For JSON Schema changes: I updated the migration scripts or explained why it is not needed.

Bug fix

  • I have added a test that covers the exact scenario we are fixing. For complex issues, comment the issue number in the test for future reference.

Summary by Gitar

  • Fixed parameter shadowing:
    • http_scheme argument in connection.py was unconditionally overwritten to https, preventing users from configuring HTTP connections
  • Connection handling update:
    • Modified set_basic_auth, set_jwt_auth, set_azure_auth, and set_oauth2_auth to conditionally set http_scheme only when not explicitly provided
  • Test coverage:
    • Added test_connection.py with 11 pytest-style unit tests validating both default HTTPS behavior and explicit http_scheme preservation across all auth methods
  • Test infrastructure:
    • Added __init__.py files to establish proper Python package structure
    • Removed module-level mocking to prevent test interference
    • Note: Minor typo remains in ingestion/tests/unit/source/__init__.ppy (should be .py)

This will update automatically on new commits.


@github-actions
Copy link
Contributor

github-actions bot commented Feb 6, 2026

🛡️ TRIVY SCAN RESULT 🛡️

Target: openmetadata-ingestion-base-slim:trivy (debian 12.13)

No Vulnerabilities Found

🛡️ TRIVY SCAN RESULT 🛡️

Target: Java

Vulnerabilities (33)

Package Vulnerability ID Severity Installed Version Fixed Version
com.fasterxml.jackson.core:jackson-core CVE-2025-52999 🚨 HIGH 2.12.7 2.15.0
com.fasterxml.jackson.core:jackson-core CVE-2025-52999 🚨 HIGH 2.13.4 2.15.0
com.fasterxml.jackson.core:jackson-databind CVE-2022-42003 🚨 HIGH 2.12.7 2.12.7.1, 2.13.4.2
com.fasterxml.jackson.core:jackson-databind CVE-2022-42004 🚨 HIGH 2.12.7 2.12.7.1, 2.13.4
com.google.code.gson:gson CVE-2022-25647 🚨 HIGH 2.2.4 2.8.9
com.google.protobuf:protobuf-java CVE-2021-22569 🚨 HIGH 3.3.0 3.16.1, 3.18.2, 3.19.2
com.google.protobuf:protobuf-java CVE-2022-3509 🚨 HIGH 3.3.0 3.16.3, 3.19.6, 3.20.3, 3.21.7
com.google.protobuf:protobuf-java CVE-2022-3510 🚨 HIGH 3.3.0 3.16.3, 3.19.6, 3.20.3, 3.21.7
com.google.protobuf:protobuf-java CVE-2024-7254 🚨 HIGH 3.3.0 3.25.5, 4.27.5, 4.28.2
com.google.protobuf:protobuf-java CVE-2021-22569 🚨 HIGH 3.7.1 3.16.1, 3.18.2, 3.19.2
com.google.protobuf:protobuf-java CVE-2022-3509 🚨 HIGH 3.7.1 3.16.3, 3.19.6, 3.20.3, 3.21.7
com.google.protobuf:protobuf-java CVE-2022-3510 🚨 HIGH 3.7.1 3.16.3, 3.19.6, 3.20.3, 3.21.7
com.google.protobuf:protobuf-java CVE-2024-7254 🚨 HIGH 3.7.1 3.25.5, 4.27.5, 4.28.2
com.nimbusds:nimbus-jose-jwt CVE-2023-52428 🚨 HIGH 9.8.1 9.37.2
com.squareup.okhttp3:okhttp CVE-2021-0341 🚨 HIGH 3.12.12 4.9.2
commons-beanutils:commons-beanutils CVE-2025-48734 🚨 HIGH 1.9.4 1.11.0
commons-io:commons-io CVE-2024-47554 🚨 HIGH 2.8.0 2.14.0
dnsjava:dnsjava CVE-2024-25638 🚨 HIGH 2.1.7 3.6.0
io.netty:netty-codec-http2 CVE-2025-55163 🚨 HIGH 4.1.96.Final 4.2.4.Final, 4.1.124.Final
io.netty:netty-codec-http2 GHSA-xpw8-rcwv-8f8p 🚨 HIGH 4.1.96.Final 4.1.100.Final
io.netty:netty-handler CVE-2025-24970 🚨 HIGH 4.1.96.Final 4.1.118.Final
net.minidev:json-smart CVE-2021-31684 🚨 HIGH 1.3.2 1.3.3, 2.4.4
net.minidev:json-smart CVE-2023-1370 🚨 HIGH 1.3.2 2.4.9
org.apache.avro:avro CVE-2024-47561 🔥 CRITICAL 1.7.7 1.11.4
org.apache.avro:avro CVE-2023-39410 🚨 HIGH 1.7.7 1.11.3
org.apache.derby:derby CVE-2022-46337 🔥 CRITICAL 10.14.2.0 10.14.3, 10.15.2.1, 10.16.1.2, 10.17.1.0
org.apache.ivy:ivy CVE-2022-46751 🚨 HIGH 2.5.1 2.5.2
org.apache.mesos:mesos CVE-2018-1330 🚨 HIGH 1.4.3 1.6.0
org.apache.thrift:libthrift CVE-2019-0205 🚨 HIGH 0.12.0 0.13.0
org.apache.thrift:libthrift CVE-2020-13949 🚨 HIGH 0.12.0 0.14.0
org.apache.zookeeper:zookeeper CVE-2023-44981 🔥 CRITICAL 3.6.3 3.7.2, 3.8.3, 3.9.1
org.eclipse.jetty:jetty-server CVE-2024-13009 🚨 HIGH 9.4.56.v20240826 9.4.57.v20241219
org.lz4:lz4-java CVE-2025-12183 🚨 HIGH 1.8.0 1.8.1

🛡️ TRIVY SCAN RESULT 🛡️

Target: Node.js

No Vulnerabilities Found

🛡️ TRIVY SCAN RESULT 🛡️

Target: Python

Vulnerabilities (10)

Package Vulnerability ID Severity Installed Version Fixed Version
apache-airflow CVE-2025-68438 🚨 HIGH 3.1.5 3.1.6
apache-airflow CVE-2025-68675 🚨 HIGH 3.1.5 3.1.6
jaraco.context CVE-2026-23949 🚨 HIGH 5.3.0 6.1.0
jaraco.context CVE-2026-23949 🚨 HIGH 6.0.1 6.1.0
starlette CVE-2025-62727 🚨 HIGH 0.48.0 0.49.1
urllib3 CVE-2025-66418 🚨 HIGH 1.26.20 2.6.0
urllib3 CVE-2025-66471 🚨 HIGH 1.26.20 2.6.0
urllib3 CVE-2026-21441 🚨 HIGH 1.26.20 2.6.3
wheel CVE-2026-24049 🚨 HIGH 0.45.1 0.46.2
wheel CVE-2026-24049 🚨 HIGH 0.45.1 0.46.2

🛡️ TRIVY SCAN RESULT 🛡️

Target: /etc/ssl/private/ssl-cert-snakeoil.key

No Vulnerabilities Found

🛡️ TRIVY SCAN RESULT 🛡️

Target: /ingestion/pipelines/extended_sample_data.yaml

No Vulnerabilities Found

🛡️ TRIVY SCAN RESULT 🛡️

Target: /ingestion/pipelines/lineage.yaml

No Vulnerabilities Found

🛡️ TRIVY SCAN RESULT 🛡️

Target: /ingestion/pipelines/sample_data.json

No Vulnerabilities Found

🛡️ TRIVY SCAN RESULT 🛡️

Target: /ingestion/pipelines/sample_data.yaml

No Vulnerabilities Found

🛡️ TRIVY SCAN RESULT 🛡️

Target: /ingestion/pipelines/sample_data_aut.yaml

No Vulnerabilities Found

🛡️ TRIVY SCAN RESULT 🛡️

Target: /ingestion/pipelines/sample_usage.json

No Vulnerabilities Found

🛡️ TRIVY SCAN RESULT 🛡️

Target: /ingestion/pipelines/sample_usage.yaml

No Vulnerabilities Found

🛡️ TRIVY SCAN RESULT 🛡️

Target: /ingestion/pipelines/sample_usage_aut.yaml

No Vulnerabilities Found

@github-actions
Copy link
Contributor

github-actions bot commented Feb 6, 2026

🛡️ TRIVY SCAN RESULT 🛡️

Target: openmetadata-ingestion:trivy (debian 12.12)

Vulnerabilities (4)

Package Vulnerability ID Severity Installed Version Fixed Version
libpam-modules CVE-2025-6020 🚨 HIGH 1.5.2-6+deb12u1 1.5.2-6+deb12u2
libpam-modules-bin CVE-2025-6020 🚨 HIGH 1.5.2-6+deb12u1 1.5.2-6+deb12u2
libpam-runtime CVE-2025-6020 🚨 HIGH 1.5.2-6+deb12u1 1.5.2-6+deb12u2
libpam0g CVE-2025-6020 🚨 HIGH 1.5.2-6+deb12u1 1.5.2-6+deb12u2

🛡️ TRIVY SCAN RESULT 🛡️

Target: Java

Vulnerabilities (33)

Package Vulnerability ID Severity Installed Version Fixed Version
com.fasterxml.jackson.core:jackson-core CVE-2025-52999 🚨 HIGH 2.12.7 2.15.0
com.fasterxml.jackson.core:jackson-core CVE-2025-52999 🚨 HIGH 2.13.4 2.15.0
com.fasterxml.jackson.core:jackson-databind CVE-2022-42003 🚨 HIGH 2.12.7 2.12.7.1, 2.13.4.2
com.fasterxml.jackson.core:jackson-databind CVE-2022-42004 🚨 HIGH 2.12.7 2.12.7.1, 2.13.4
com.google.code.gson:gson CVE-2022-25647 🚨 HIGH 2.2.4 2.8.9
com.google.protobuf:protobuf-java CVE-2021-22569 🚨 HIGH 3.3.0 3.16.1, 3.18.2, 3.19.2
com.google.protobuf:protobuf-java CVE-2022-3509 🚨 HIGH 3.3.0 3.16.3, 3.19.6, 3.20.3, 3.21.7
com.google.protobuf:protobuf-java CVE-2022-3510 🚨 HIGH 3.3.0 3.16.3, 3.19.6, 3.20.3, 3.21.7
com.google.protobuf:protobuf-java CVE-2024-7254 🚨 HIGH 3.3.0 3.25.5, 4.27.5, 4.28.2
com.google.protobuf:protobuf-java CVE-2021-22569 🚨 HIGH 3.7.1 3.16.1, 3.18.2, 3.19.2
com.google.protobuf:protobuf-java CVE-2022-3509 🚨 HIGH 3.7.1 3.16.3, 3.19.6, 3.20.3, 3.21.7
com.google.protobuf:protobuf-java CVE-2022-3510 🚨 HIGH 3.7.1 3.16.3, 3.19.6, 3.20.3, 3.21.7
com.google.protobuf:protobuf-java CVE-2024-7254 🚨 HIGH 3.7.1 3.25.5, 4.27.5, 4.28.2
com.nimbusds:nimbus-jose-jwt CVE-2023-52428 🚨 HIGH 9.8.1 9.37.2
com.squareup.okhttp3:okhttp CVE-2021-0341 🚨 HIGH 3.12.12 4.9.2
commons-beanutils:commons-beanutils CVE-2025-48734 🚨 HIGH 1.9.4 1.11.0
commons-io:commons-io CVE-2024-47554 🚨 HIGH 2.8.0 2.14.0
dnsjava:dnsjava CVE-2024-25638 🚨 HIGH 2.1.7 3.6.0
io.netty:netty-codec-http2 CVE-2025-55163 🚨 HIGH 4.1.96.Final 4.2.4.Final, 4.1.124.Final
io.netty:netty-codec-http2 GHSA-xpw8-rcwv-8f8p 🚨 HIGH 4.1.96.Final 4.1.100.Final
io.netty:netty-handler CVE-2025-24970 🚨 HIGH 4.1.96.Final 4.1.118.Final
net.minidev:json-smart CVE-2021-31684 🚨 HIGH 1.3.2 1.3.3, 2.4.4
net.minidev:json-smart CVE-2023-1370 🚨 HIGH 1.3.2 2.4.9
org.apache.avro:avro CVE-2024-47561 🔥 CRITICAL 1.7.7 1.11.4
org.apache.avro:avro CVE-2023-39410 🚨 HIGH 1.7.7 1.11.3
org.apache.derby:derby CVE-2022-46337 🔥 CRITICAL 10.14.2.0 10.14.3, 10.15.2.1, 10.16.1.2, 10.17.1.0
org.apache.ivy:ivy CVE-2022-46751 🚨 HIGH 2.5.1 2.5.2
org.apache.mesos:mesos CVE-2018-1330 🚨 HIGH 1.4.3 1.6.0
org.apache.thrift:libthrift CVE-2019-0205 🚨 HIGH 0.12.0 0.13.0
org.apache.thrift:libthrift CVE-2020-13949 🚨 HIGH 0.12.0 0.14.0
org.apache.zookeeper:zookeeper CVE-2023-44981 🔥 CRITICAL 3.6.3 3.7.2, 3.8.3, 3.9.1
org.eclipse.jetty:jetty-server CVE-2024-13009 🚨 HIGH 9.4.56.v20240826 9.4.57.v20241219
org.lz4:lz4-java CVE-2025-12183 🚨 HIGH 1.8.0 1.8.1

🛡️ TRIVY SCAN RESULT 🛡️

Target: Node.js

No Vulnerabilities Found

🛡️ TRIVY SCAN RESULT 🛡️

Target: Python

Vulnerabilities (20)

Package Vulnerability ID Severity Installed Version Fixed Version
Werkzeug CVE-2024-34069 🚨 HIGH 2.2.3 3.0.3
aiohttp CVE-2025-69223 🚨 HIGH 3.12.12 3.13.3
aiohttp CVE-2025-69223 🚨 HIGH 3.13.2 3.13.3
apache-airflow CVE-2025-68438 🚨 HIGH 3.1.5 3.1.6
apache-airflow CVE-2025-68675 🚨 HIGH 3.1.5 3.1.6
azure-core CVE-2026-21226 🚨 HIGH 1.37.0 1.38.0
jaraco.context CVE-2026-23949 🚨 HIGH 5.3.0 6.1.0
jaraco.context CVE-2026-23949 🚨 HIGH 5.3.0 6.1.0
jaraco.context CVE-2026-23949 🚨 HIGH 6.0.1 6.1.0
protobuf CVE-2026-0994 🚨 HIGH 4.25.8 6.33.5, 5.29.6
pyasn1 CVE-2026-23490 🚨 HIGH 0.6.1 0.6.2
python-multipart CVE-2026-24486 🚨 HIGH 0.0.20 0.0.22
ray CVE-2025-62593 🔥 CRITICAL 2.47.1 2.52.0
starlette CVE-2025-62727 🚨 HIGH 0.48.0 0.49.1
urllib3 CVE-2025-66418 🚨 HIGH 1.26.20 2.6.0
urllib3 CVE-2025-66471 🚨 HIGH 1.26.20 2.6.0
urllib3 CVE-2026-21441 🚨 HIGH 1.26.20 2.6.3
wheel CVE-2026-24049 🚨 HIGH 0.45.1 0.46.2
wheel CVE-2026-24049 🚨 HIGH 0.45.1 0.46.2
wheel CVE-2026-24049 🚨 HIGH 0.45.1 0.46.2

🛡️ TRIVY SCAN RESULT 🛡️

Target: /etc/ssl/private/ssl-cert-snakeoil.key

No Vulnerabilities Found

🛡️ TRIVY SCAN RESULT 🛡️

Target: /home/airflow/openmetadata-airflow-apis/openmetadata_managed_apis.egg-info/PKG-INFO

No Vulnerabilities Found

ulixius9
ulixius9 previously approved these changes Feb 6, 2026
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This pull request fixes a bug in the Trino connection handling where the http_scheme argument was being unconditionally overwritten to https, preventing users from configuring HTTP connections. The fix modifies four authentication methods (set_basic_auth, set_jwt_auth, set_azure_auth, and set_oauth2_auth) to only set http_scheme to https as a default when it hasn't been explicitly provided by the user.

Changes:

  • Fixed parameter shadowing in set_basic_auth, set_jwt_auth, set_azure_auth, and set_oauth2_auth methods to conditionally set http_scheme only when not already specified
  • Added comprehensive unit tests validating both default HTTPS behavior and explicit http_scheme preservation across all modified authentication methods

Reviewed changes

Copilot reviewed 2 out of 3 changed files in this pull request and generated 1 comment.

File Description
ingestion/src/metadata/ingestion/source/database/trino/connection.py Modified four authentication methods to check if http_scheme is already set before defaulting to https, preserving user-specified values
ingestion/tests/unit/source/database/trino/test_connection.py Added comprehensive test suite with 11 tests covering default and explicit http_scheme behavior for BasicAuth, JwtAuth, and OAuth2 authentication
ingestion/tests/unit/source/database/trino/init.py Added empty package initialization file (standard Python practice)

@gitar-bot
Copy link

gitar-bot bot commented Feb 6, 2026

🔍 CI failure analysis for 86aa7be: Frontend Playwright E2E test failure (1 failed + 1 flaky) - unrelated to backend Trino changes

Frontend Playwright Test Failure (NOT Related to PR)

Playwright E2E test failure with page closure and element visibility issues.

Affected Job

  • playwright-ci-postgresql (2, 6) - Job ID: 62791340574

Failures

  • 1 failed test: Right Entity Panel - Data Consumer User Flow - Custom Properties Tab
  • 1 flaky test: KPI Widget

Error Patterns

  • Page/context closure: Target page, context or browser has been closed
  • Element visibility issues

Analysis

This PR only modifies Python backend code:

  • ingestion/src/metadata/ingestion/source/database/trino/connection.py (Trino http_scheme fix)
  • Test files in ingestion/tests/unit/source/database/trino/

Note: The merge commit also brought in MySQL/PSQL profiler changes from main, but those are separate from this PR's Trino focus.

The Playwright failure is in frontend E2E tests and is NOT caused by this PR's backend changes.

This appears to be environmental/infrastructure issues or pre-existing flaky tests.

Code Review ⚠️ Changes requested 0 resolved / 5 findings

Good fix for the Trino http_scheme shadowing bug with solid test coverage. However, the MySQL InnoDB row count correction was inadvertently removed (regression), and the Postgres metric computer should handle reltuples = -1 for unanalyzed tables. The .ppy file extension typo and missing Azure auth test from previous review are still unresolved.

🚨 Bug: File extension typo: __init__.ppy should be __init__.py

📄 ingestion/tests/unit/source/init.ppy

The file ingestion/tests/unit/source/__init__.ppy has the extension .ppy instead of .py. Python will not recognize this as a package __init__ file, which means the ingestion/tests/unit/source/ directory won't be treated as a Python package. This will likely break test discovery for all tests under this path, including the new test_connection.py added in this PR.

Fix: Rename the file to ingestion/tests/unit/source/__init__.py.

⚠️ Bug: MySQL InnoDB row count correction logic was removed

📄 ingestion/src/metadata/profiler/orm/functions/table_metric_computer.py:409

The diff removes the MySQL-specific InnoDB row count patching logic that corrected the estimated reltuples value with an accurate COUNT(*). The original code had a comment explaining this:

# innodb row count is an estimate we need to patch the row count with COUNT(*)
# https://dev.mysql.com/doc/refman/8.3/en/information-schema-innodb-tablestats-table.html

This was an intentional correction because InnoDB's information_schema row counts are estimates that can be significantly inaccurate (sometimes off by 40-50%). Removing these lines means MySQL/InnoDB tables will now report estimated row counts instead of accurate ones, which is a regression in data quality for MySQL profiling.

Suggested fix: Restore the InnoDB row count correction logic after the compute() call:

        if not res:
            return None
        ...
            return super().compute()
        res = res._asdict()
        row_count = self.runner.select_first_from_table(metrics.ROW_COUNT().fn())
        res.update({ROW_COUNT: row_count.rowCount})
        return res
⚠️ Bug: Integration test uses deprecated engine.execute() (SQLAlchemy 2.0)

📄 ingestion/tests/integration/postgres/test_table_metric_computer.py:54

The pg_engine fixture calls engine.execute() directly, which was deprecated in SQLAlchemy 1.4 and removed in SQLAlchemy 2.0. If the project uses or upgrades to SQLAlchemy 2.0, these tests will fail with AttributeError.

engine.execute("CREATE TABLE IF NOT EXISTS ...")
engine.execute("INSERT INTO ...")
engine.execute("ANALYZE ...")
engine.execute("DROP TABLE IF EXISTS ...")

Suggested fix: Use engine.connect() context manager with connection.execute():

from sqlalchemy import text

with engine.connect() as conn:
    conn.execute(text("CREATE TABLE IF NOT EXISTS ..."))
    conn.execute(text("INSERT INTO ..."))
    conn.execute(text("ANALYZE ..."))
    conn.commit()

And similarly for teardown:

with engine.connect() as conn:
    conn.execute(text("DROP TABLE IF EXISTS ..."))
    conn.commit()
💡 Edge Case: PostgreSQL reltuples can be -1 for unanalyzed tables

📄 ingestion/src/metadata/profiler/orm/functions/table_metric_computer.py:445 🔗 PostgreSQL pg_class documentation

In PostgreSQL, pg_class.reltuples is set to -1 for tables that have never been analyzed (since PostgreSQL 12+). The current code casts this to BigInteger and checks for rowCount == 0 (for views) or rowCount is None, but does not handle the -1 case. This would result in reporting a row count of -1 to users for tables that haven't been analyzed yet.

Suggested fix: Add a check for negative reltuples values and fall back to super().compute():

if res.rowCount is None or res.rowCount < 0 or (
    res.rowCount == 0 and self._entity.tableType == TableType.View
):
    return super().compute()
💡 Quality: Missing test coverage for Azure auth http_scheme fix

📄 ingestion/tests/unit/source/database/trino/test_connection.py 📄 ingestion/src/metadata/ingestion/source/database/trino/connection.py:327

The PR modifies set_azure_auth (in connection.py) to conditionally set http_scheme, but the test file only covers set_basic_auth, set_jwt_auth, and set_oauth2_auth. There are no tests for Azure authentication's http_scheme handling.

Since the PR claims test coverage for the fix ("I have added a test that covers the exact scenario we are fixing"), adding tests for test_azure_auth_defaults_to_https and test_azure_auth_preserves_explicit_http_scheme would complete the coverage for all four modified auth methods. Azure auth involves an additional get_azure_token call which may need mocking, but it's worth covering to ensure consistency.

Tip

Comment Gitar fix CI or enable auto-apply: gitar auto-apply:on

Options

Auto-apply is off → Gitar will not commit updates to this branch.
Display: compact → Showing less information.

Comment with these commands to change:

Auto-apply Compact
gitar auto-apply:on         
gitar display:verbose         

Was this helpful? React with 👍 / 👎 | Gitar

@sonarqubecloud
Copy link

sonarqubecloud bot commented Feb 6, 2026

@TeddyCr TeddyCr merged commit 29f2fc8 into open-metadata:main Feb 7, 2026
19 of 20 checks passed
TeddyCr added a commit that referenced this pull request Feb 7, 2026
* fix(trino): shadowing of http_scheme argument

* fix: import chain

* fix: remove mock trino library

(cherry picked from commit 29f2fc8)
TeddyCr added a commit that referenced this pull request Feb 7, 2026
* fix(trino): shadowing of http_scheme argument

* fix: import chain

* fix: remove mock trino library

(cherry picked from commit 29f2fc8)
(cherry picked from commit 2d58ef7)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Ingestion safe to test Add this label to run secure Github workflows on PRs

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants