Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Improve Liveness/Readiness health indicators and probes configuration #22107

Closed
FlinnBurgess opened this issue Jun 25, 2020 · 6 comments
Closed
Assignees
Labels
Milestone

Comments

@FlinnBurgess
Copy link

Hello, I've tested the following issue with both Spring Boot 2.3.0 and 2.3.1

I am trying to override the default health check behaviour by setting it to check the DB connection only, but when I include those configuration parameters I get a 404 from the probing endpoints locally.

For example, with the following configuration:

management:
  server:
    port: 10102
  health:
    probes:
      enabled: true
    defaults:
      enabled: false
    db:
      enabled: true

I cannot access http://localhost:10102/actuator/health/liveness or http://localhost:10102/actuator/health/readiness, both return a 404. However, the response from http://localhost:10102/actuator/health lists both liveness and readiness as groups.

If I remove the default override, like this:

management:
  server:
    port: 10102
  health:
    probes:
      enabled: true

Then both endpoints work fine.

I am not getting any errors or exceptions when running the application.

@spring-projects-issues spring-projects-issues added the status: waiting-for-triage An issue we've not yet triaged label Jun 25, 2020
@mbhave
Copy link
Contributor

mbhave commented Jun 29, 2020

It seems to be because the auto-configuration checks for a @ConditionalOnEnabledHealthIndicator("livenessState") and @ConditionalOnEnabledHealthIndicator("readinessState") for determining whether to configure liveness and readiness indicators respectively, but the property we use to enable probes is management.health.probes.enabled.

@mbhave mbhave added type: bug A general bug and removed status: waiting-for-triage An issue we've not yet triaged labels Jun 29, 2020
@mbhave mbhave added this to the 2.3.x milestone Jun 29, 2020
@wagnerluis1982
Copy link
Contributor

Hello, I am interested in contribute and code a solution if possible.

That's said, I see the label type:bug, but I did not really get why, that's because management.health.defaults.enabled value overrode the other values compulsorily?

@mbhave
Copy link
Contributor

mbhave commented Jun 30, 2020

@wagnerluis1982 Thanks for offering to help but I'm not sure what the solution will look like. Unlike other health indicators, where the value used in the condition(

) matches the flag used to enable the indicator, management.health.diskspace.enabled, the probes one does not. This causes the condition to check the value of management.health.defaults.enabled. I will mark this for team attention to discuss it with the rest of the team and update the issue based on the result of that discussion.

@mbhave mbhave added the for: team-attention An issue we'd like other members of the team to review label Jun 30, 2020
@FlinnBurgess
Copy link
Author

Hi, thanks for taking a look at this. On further investigation it seems that I have been using the configuration incorrectly.

A colleague suggested the following implementation which seems to work as expected.

management:
  server:
    port: 10102
  endpoint:
    health:
      group:
        readiness:
          include:
            - readinessState
            - db
      show-details: always
  health:
    probes:
      enabled: true

I don't know if this means that my original post is not actually a bug? I'm afraid I don't quite understand it well enough.

@philwebb
Copy link
Member

philwebb commented Jul 1, 2020

I think we need to refine the conditions in AvailabilityProbesAutoConfiguration.

@philwebb philwebb added status: pending-design-work Needs design work before any code can be developed and removed for: team-attention An issue we'd like other members of the team to review labels Jul 1, 2020
@bclozel
Copy link
Member

bclozel commented Jul 3, 2020

I think the confusion comes from several points:

  1. the management.health.probes.enabled configuration is not aligned with other management.health.*.enabled, which are only about enabling specific health indicators. management.health.probes.enabled is about enabling the livenessState and readinessState health indicators and the related liveness and readiness health groups
  2. readinessState and livenessState are health indicators but they don't have their own management.health.*.enabled configuration property documented even if it's available. Also, enabling this property since right now the AvailabilityProbesAutoConfiguration is guarded by a ProbesCondition
  3. the ProbesCondition first checks for the management.health.probes.enabled property, then the cloud environment (k8s); this is a bit unusual compared to other properties in that same space

Here are a few ideas to improve the situation.

Move the management.health.probes.enabled configuration key

Move the management.health.probes.enabled configuration key to management.endpoint.health.probes.enabled; this makes it clear that this is not a health indicator and that this is about enabling a specific feature on the health endpoint.

Add configuration metadata for the probes health checks

Add configuration metadata for management.health.livenessState.enabled and management.health.readinessState.enabled so that developers can enable those.

Arguably we could also change their name since we don't usually have case sensitive names. liveness-state is not a good canditate since this would imply a "-" within a key prefix: management.health.liveness-state.enabled. liveness is not really an option either, or we would get configurations like:

management:
  endpoint:
    health:
      group:
        liveness:
          include:
            - liveness
            - db

Improve the AvailabilityProbesAutoConfiguration

Right now the whole auto-configuration class is guarded by @Conditional(ProbesCondition.class).

We could ensure that:

  • LivenessStateHealthIndicator is created if @ConditionalOnEnabledHealthIndicator("livenessState") OR @Conditional(ProbesCondition.class)
  • ReadinessStateHealthIndicator is created if @ConditionalOnEnabledHealthIndicator("readinessState") OR @Conditional(ProbesCondition.class)
  • AvailabilityProbesHealthEndpointGroupsPostProcessor is created if @Conditional(ProbesCondition.class)

Note that it's actually more complex than that since we can't enable the livenessState or readinessState health checks by default because this would be a breaking change: the global health endpoint would now take those checks into account and applications might report failures where they didn't in the past.

Maybe we should use @ConditionalOnProperty here instead with the help of AnyNestedCondition?

In any case, we should consider switching those defaults for the next major version (turning on the health checks and the health group).

@bclozel bclozel added the for: team-attention An issue we'd like other members of the team to review label Jul 3, 2020
@philwebb philwebb removed the for: team-attention An issue we'd like other members of the team to review label Jul 6, 2020
@bclozel bclozel modified the milestones: 2.3.x, 2.3.2 Jul 21, 2020
@bclozel bclozel added type: enhancement A general enhancement theme: kubernetes and removed status: pending-design-work Needs design work before any code can be developed type: bug A general bug labels Jul 21, 2020
@bclozel bclozel changed the title Liveness/Readiness probes returning 404 when health defaults are overriden Improve Liveness/Readiness health indicators and probes configuration Jul 21, 2020
sorin-iovita pushed a commit to corona-warn-app/cwa-server that referenced this issue Jul 30, 2020
sorin-iovita pushed a commit to corona-warn-app/cwa-server that referenced this issue Jul 30, 2020
* Bump spring parent version

* Liveness health indicator according to. spring-projects/spring-boot#22107
sorin-iovita pushed a commit to corona-warn-app/cwa-server that referenced this issue Aug 5, 2020
* Revert "Usage of postgres in test environment for database consistency (#686)" (#688)

This reverts commit 932a61f.

* Mitigate CVE-2020-13935 (#690)

* Bump spring parent version

* Liveness health indicator according to. spring-projects/spring-boot#22107

Co-authored-by: Frederico <fred.rbittencourt@gmail.com>
fredrb added a commit to corona-warn-app/cwa-server that referenced this issue Aug 27, 2020
* Revert "Usage of postgres in test environment for database consistency (#686)" (#688)

This reverts commit 932a61f.

* Mitigate CVE-2020-13935 (#690)

* Bump spring parent version

* Liveness health indicator according to. spring-projects/spring-boot#22107

* Revert to test postgresql docker image using test-containers. (#694)

* Test cases and debug support.for submission (#698)

* Add integration test for future submission payload debugging

* Added more test cases around invalid temp key parameter scenarios

* Add support for printing the submission payload during tests

* Enhance debug test with sql statements generation

* Update services/submission/src/test/java/app/coronawarn/server/services/submission/integration/SubmissionPersistenceIT.java

Co-authored-by: Michael Frey <michael.frey@gmx.ch>

Co-authored-by: Hilmar Falkenberg <hilmar.falkenberg@sap.com>
Co-authored-by: Michael Frey <michael.frey@gmx.ch>

* Update maven.config with current version 1.4.0-SNAPSHOT (#697)

Set current version to 1.3.0-SNAPSHOT

Co-authored-by: Hilmar Falkenberg <hilmar.falkenberg@sap.com>

* -fix invalid test and name refactoring (#703)

* Add app-features as external configuration (#704)

* Add app features in configuration file
Adjust tests

* Rename env variable for plausible deniability active.
Remove env name for app feature label.

* Adjust test application.yaml

* Change active type from boolean to integer

* Change app feature 'active' property to 'value'

* use same version for spring-boot-starter-parent accross all components (#709)

* Fix/700 retention policy (#711)

* fix retention policy of stored diagnosis keys

* fix typo

* fix failing test case due to previously injected time

* refactor method names

* Submission Service - updated documentation (#713)

* Updated the validation for the submission service in SUMBISSION.md to match the new rules for TEK's

* markdownlint fixes

* Update docs/SUBMISSION.md

Co-authored-by: Sorin Stefan Iovita <sorin.stefan.iovita@sap.com>

Co-authored-by: Ioan Gut <ioan.gut@sap.com>
Co-authored-by: ioangut <67064882+ioangut@users.noreply.github.com>
Co-authored-by: Sorin Stefan Iovita <sorin.stefan.iovita@sap.com>

* Submission Service - Enhance TEK's  (#712)

* -initial draft commit

* updated checkDuplicateStartIntervalNumberLimit wip

* updated checkDuplicateStartIntervalNumberLimit

* -fix test broke after solved conflict

* changed checkDuplicateStartIntervalNumberLimit to use HashMap

* -fix checklist reports

* add env variables for submission service

* review update add more tests

* solved code smells

* rename attribute maxRollingPeriod

* renamed getter getMaxRollingPeriod

* Update ValidSubmissionPayload.java

* refactor implementation for consistency

* fix checkstyle errors

modify the Violation text accordingly

* fix code smell

* Update ValidSubmissionPayload.java

* Change validation for payloads based on rolling period

* Capture more test scenarios

* add checkstyle indentation

* create test data generation class

* add header to the new class

* resolved review conversation

* fixed checkstyle errors

* resolved code smell

* fix compile error

* create valid TEK, fix test failing

Co-authored-by: Emmet <emmet.power@sap.com>
Co-authored-by: Eugen M <eugen.madean@sap.com>
Co-authored-by: Pit Humke <pithumke@users.noreply.github.com>

* Feature/enrich app config (#726)

* Added supported countries to app config with application.yaml parameter

* Fixed Test failures

* Remove unused code

* Added app version parameters to application.yaml

* Added tests for app version parameters

* Refacted country list implementation

Co-authored-by: Hilmar Falkenberg <hilmar.falkenberg@sap.com>

* fix errors after merging master

* add review fixes

* fix code smells reported

* build submission payload  data added

* build SubmissionPayload for tests

* add diagnosis key test data time creation

* add surefire plugin to common and submission build

Co-authored-by: Frederico <fred.rbittencourt@gmail.com>
Co-authored-by: Sorin Stefan Iovita <sorin.stefan.iovita@sap.com>
Co-authored-by: EugenM-SAP <67458405+EugenM-SAP@users.noreply.github.com>
Co-authored-by: Hilmar Falkenberg <hilmar.falkenberg@sap.com>
Co-authored-by: Michael Frey <michael.frey@gmx.ch>
Co-authored-by: Evgenii Skrebtcov <67064767+EvgeniiSkrebtcov@users.noreply.github.com>
Co-authored-by: ioangut <67064882+ioangut@users.noreply.github.com>
Co-authored-by: emmetsap <emmet.power@sap.com>
Co-authored-by: Ioan Gut <ioan.gut@sap.com>
Co-authored-by: Eugen M <eugen.madean@sap.com>
Co-authored-by: Pit Humke <pithumke@users.noreply.github.com>
yansto pushed a commit to yansto/cwa-server that referenced this issue Aug 31, 2020
* Bump spring parent version

* Liveness health indicator according to. spring-projects/spring-boot#22107
yansto pushed a commit to yansto/cwa-server that referenced this issue Aug 31, 2020
* Bump spring parent version

* Liveness health indicator according to. spring-projects/spring-boot#22107
sorin-iovita pushed a commit to corona-warn-app/cwa-server that referenced this issue Sep 15, 2020
* Revert "Usage of postgres in test environment for database consistency (#686)" (#688)

This reverts commit 932a61f.

* Mitigate CVE-2020-13935 (#690)

* Bump spring parent version

* Liveness health indicator according to. spring-projects/spring-boot#22107

* Revert to test postgresql docker image using test-containers. (#694)

* Test cases and debug support.for submission (#698)

* Add integration test for future submission payload debugging

* Added more test cases around invalid temp key parameter scenarios

* Add support for printing the submission payload during tests

* Enhance debug test with sql statements generation

* Update services/submission/src/test/java/app/coronawarn/server/services/submission/integration/SubmissionPersistenceIT.java

Co-authored-by: Michael Frey <michael.frey@gmx.ch>

Co-authored-by: Hilmar Falkenberg <hilmar.falkenberg@sap.com>
Co-authored-by: Michael Frey <michael.frey@gmx.ch>

* Update maven.config with current version 1.4.0-SNAPSHOT (#697)

Set current version to 1.3.0-SNAPSHOT

Co-authored-by: Hilmar Falkenberg <hilmar.falkenberg@sap.com>

* -fix invalid test and name refactoring (#703)

* Add app-features as external configuration (#704)

* Add app features in configuration file
Adjust tests

* Rename env variable for plausible deniability active.
Remove env name for app feature label.

* Adjust test application.yaml

* Change active type from boolean to integer

* Change app feature 'active' property to 'value'

* use same version for spring-boot-starter-parent accross all components (#709)

* Fix/700 retention policy (#711)

* fix retention policy of stored diagnosis keys

* fix typo

* fix failing test case due to previously injected time

* refactor method names

* Submission Service - updated documentation (#713)

* Updated the validation for the submission service in SUMBISSION.md to match the new rules for TEK's

* markdownlint fixes

* Update docs/SUBMISSION.md

Co-authored-by: Sorin Stefan Iovita <sorin.stefan.iovita@sap.com>

Co-authored-by: Ioan Gut <ioan.gut@sap.com>
Co-authored-by: ioangut <67064882+ioangut@users.noreply.github.com>
Co-authored-by: Sorin Stefan Iovita <sorin.stefan.iovita@sap.com>

* Submission Service - Enhance TEK's  (#712)

* -initial draft commit

* updated checkDuplicateStartIntervalNumberLimit wip

* updated checkDuplicateStartIntervalNumberLimit

* -fix test broke after solved conflict

* changed checkDuplicateStartIntervalNumberLimit to use HashMap

* -fix checklist reports

* add env variables for submission service

* review update add more tests

* solved code smells

* rename attribute maxRollingPeriod

* renamed getter getMaxRollingPeriod

* Update ValidSubmissionPayload.java

* refactor implementation for consistency

* fix checkstyle errors

modify the Violation text accordingly

* fix code smell

* Update ValidSubmissionPayload.java

* Change validation for payloads based on rolling period

* Capture more test scenarios

* add checkstyle indentation

* create test data generation class

* add header to the new class

* resolved review conversation

* fixed checkstyle errors

* resolved code smell

* fix compile error

* create valid TEK, fix test failing

Co-authored-by: Emmet <emmet.power@sap.com>
Co-authored-by: Eugen M <eugen.madean@sap.com>
Co-authored-by: Pit Humke <pithumke@users.noreply.github.com>

* Feature/enrich app config (#726)

* Added supported countries to app config with application.yaml parameter

* Fixed Test failures

* Remove unused code

* Added app version parameters to application.yaml

* Added tests for app version parameters

* Refacted country list implementation

Co-authored-by: Hilmar Falkenberg <hilmar.falkenberg@sap.com>

* Fix Sonar issues (#754)

* Bugfix/submission tek rolling period (#752)

* Replaced possible variable rolling period with constant value

* Add tests for flexible rolling period

* apply sugested review changes

* Add javaDoc comments for changed getExpiryDateTime

* Fix midnight check in SubmissionPayload Validator

Co-authored-by: Michael Burwig <michael.burwig@sap.com>

* Feature/update risk score master (#758)

* Update risk-score-classification.yaml

Problem in iOS 13.7 --> Unbekanntes Risiko bei Risikobegegnung

* Adjust tests

Co-authored-by: Hilmar Falkenberg <hilmar.falkenberg@sap.com>
Co-authored-by: Michael Burwig <michael.burwig@sap.com>

* Update exposure-config.yaml (#765)

patch transmission as requested by Thomas Augsten

Co-authored-by: Hilmar Falkenberg <hilmar.falkenberg@sap.com>

* Resolve merge conflicts

* Resolve github comments

Co-authored-by: Frederico <fred.rbittencourt@gmail.com>
Co-authored-by: EugenM-SAP <67458405+EugenM-SAP@users.noreply.github.com>
Co-authored-by: Hilmar Falkenberg <hilmar.falkenberg@sap.com>
Co-authored-by: Michael Frey <michael.frey@gmx.ch>
Co-authored-by: Evgenii Skrebtcov <67064767+EvgeniiSkrebtcov@users.noreply.github.com>
Co-authored-by: ioangut <67064882+ioangut@users.noreply.github.com>
Co-authored-by: emmetsap <emmet.power@sap.com>
Co-authored-by: Ioan Gut <ioan.gut@sap.com>
Co-authored-by: Eugen M <eugen.madean@sap.com>
Co-authored-by: Pit Humke <pithumke@users.noreply.github.com>
Co-authored-by: KevponSAP <66735382+KevponSAP@users.noreply.github.com>
Co-authored-by: Michael Burwig <michael.burwig@sap.com>
hilmarf added a commit to corona-warn-app/cwa-server that referenced this issue Oct 1, 2020
* Revert "Usage of postgres in test environment for database consistency (#686)" (#688)

This reverts commit 932a61f.

* Mitigate CVE-2020-13935 (#690)

* Bump spring parent version

* Liveness health indicator according to. spring-projects/spring-boot#22107

* Revert to test postgresql docker image using test-containers. (#694)

* Test cases and debug support.for submission (#698)

* Add integration test for future submission payload debugging

* Added more test cases around invalid temp key parameter scenarios

* Add support for printing the submission payload during tests

* Enhance debug test with sql statements generation

* Update services/submission/src/test/java/app/coronawarn/server/services/submission/integration/SubmissionPersistenceIT.java

Co-authored-by: Michael Frey <michael.frey@gmx.ch>

Co-authored-by: Hilmar Falkenberg <hilmar.falkenberg@sap.com>
Co-authored-by: Michael Frey <michael.frey@gmx.ch>

* Update maven.config with current version 1.4.0-SNAPSHOT (#697)

Set current version to 1.3.0-SNAPSHOT

Co-authored-by: Hilmar Falkenberg <hilmar.falkenberg@sap.com>

* -fix invalid test and name refactoring (#703)

* Add app-features as external configuration (#704)

* Add app features in configuration file
Adjust tests

* Rename env variable for plausible deniability active.
Remove env name for app feature label.

* Adjust test application.yaml

* Change active type from boolean to integer

* Change app feature 'active' property to 'value'

* use same version for spring-boot-starter-parent accross all components (#709)

* Fix/700 retention policy (#711)

* fix retention policy of stored diagnosis keys

* fix typo

* fix failing test case due to previously injected time

* refactor method names

* Submission Service - updated documentation (#713)

* Updated the validation for the submission service in SUMBISSION.md to match the new rules for TEK's

* markdownlint fixes

* Update docs/SUBMISSION.md

Co-authored-by: Sorin Stefan Iovita <sorin.stefan.iovita@sap.com>

Co-authored-by: Ioan Gut <ioan.gut@sap.com>
Co-authored-by: ioangut <67064882+ioangut@users.noreply.github.com>
Co-authored-by: Sorin Stefan Iovita <sorin.stefan.iovita@sap.com>

* Submission Service - Enhance TEK's  (#712)

* -initial draft commit

* updated checkDuplicateStartIntervalNumberLimit wip

* updated checkDuplicateStartIntervalNumberLimit

* -fix test broke after solved conflict

* changed checkDuplicateStartIntervalNumberLimit to use HashMap

* -fix checklist reports

* add env variables for submission service

* review update add more tests

* solved code smells

* rename attribute maxRollingPeriod

* renamed getter getMaxRollingPeriod

* Update ValidSubmissionPayload.java

* refactor implementation for consistency

* fix checkstyle errors

modify the Violation text accordingly

* fix code smell

* Update ValidSubmissionPayload.java

* Change validation for payloads based on rolling period

* Capture more test scenarios

* add checkstyle indentation

* create test data generation class

* add header to the new class

* resolved review conversation

* fixed checkstyle errors

* resolved code smell

* fix compile error

* create valid TEK, fix test failing

Co-authored-by: Emmet <emmet.power@sap.com>
Co-authored-by: Eugen M <eugen.madean@sap.com>
Co-authored-by: Pit Humke <pithumke@users.noreply.github.com>

* Feature/enrich app config (#726)

* Added supported countries to app config with application.yaml parameter

* Fixed Test failures

* Remove unused code

* Added app version parameters to application.yaml

* Added tests for app version parameters

* Refacted country list implementation

Co-authored-by: Hilmar Falkenberg <hilmar.falkenberg@sap.com>

* Fix Sonar issues (#754)

* Bugfix/submission tek rolling period (#752)

* Replaced possible variable rolling period with constant value

* Add tests for flexible rolling period

* apply sugested review changes

* Add javaDoc comments for changed getExpiryDateTime

* Fix midnight check in SubmissionPayload Validator

Co-authored-by: Michael Burwig <michael.burwig@sap.com>

* Feature/update risk score master (#758)

* Update risk-score-classification.yaml

Problem in iOS 13.7 --> Unbekanntes Risiko bei Risikobegegnung

* Adjust tests

Co-authored-by: Hilmar Falkenberg <hilmar.falkenberg@sap.com>
Co-authored-by: Michael Burwig <michael.burwig@sap.com>

* Update exposure-config.yaml (#765)

patch transmission as requested by Thomas Augsten

Co-authored-by: Hilmar Falkenberg <hilmar.falkenberg@sap.com>

* Update attenuation-duration.yaml (#775) (#776)

* Update attenuation-duration.yaml

* Update exposure-config.yaml

attenuation array = 2

Co-authored-by: Hilmar Falkenberg <hilmar.falkenberg@sap.com>

* prepare release 1.5.0 (#793)

* Fix sping web guava (#808)

* RC 1.4.0

* mitigate CVE-2020-5421 by switching to newer spring-boot-starter-parent (#796)

* Release/1.4 log submission keys (#797)

* Implement the changes from PR #783

* Add check and logs for missing key with TRL 6 or having a key TRL 6 from today midnight

* Fix code smell

* ensure usage of latest guava version 29.0-jre (#806)

Co-authored-by: Michael <66735191+mibrasap@users.noreply.github.com>

* Update CODEOWNERS file (#817)

* Admin/update codeowners (#818)

* Update CODEOWNERS file

* Add additional team members to codeowners file

Co-authored-by: Michael Burwig <michael.burwig@sap.com>

* Add hot fix for submission payload validation (#822) (#825)

* Add hot fix for submission payload validation (#822)

* Fixed code smell

* fix branch after merge conflicts

* Adjustments after code review

* removed unused getExpiryDateTime method

* removed unused import code smell

* Adjust submission payload validation checks in Master(#832) f (#834)

* Adjust submission payload validation checks (#832)

* remove unused import code smell

* Removed unused duplicated methods

Co-authored-by: Frederico <fred.rbittencourt@gmail.com>
Co-authored-by: Sorin Stefan Iovita <sorin.stefan.iovita@sap.com>
Co-authored-by: EugenM-SAP <67458405+EugenM-SAP@users.noreply.github.com>
Co-authored-by: Hilmar Falkenberg <hilmar.falkenberg@sap.com>
Co-authored-by: Michael Frey <michael.frey@gmx.ch>
Co-authored-by: Evgenii Skrebtcov <67064767+EvgeniiSkrebtcov@users.noreply.github.com>
Co-authored-by: emmetsap <emmet.power@sap.com>
Co-authored-by: Eugen M <eugen.madean@sap.com>
Co-authored-by: Pit Humke <pithumke@users.noreply.github.com>
Co-authored-by: KevponSAP <66735382+KevponSAP@users.noreply.github.com>
Co-authored-by: Michael Burwig <michael.burwig@sap.com>
Co-authored-by: Michael <66735191+mibrasap@users.noreply.github.com>
Co-authored-by: Michael Burwig <64439292+michael-burwig@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

6 participants