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

[feat] tools-v2: add bs [list|query] scan-status #2361 #2481

Merged
merged 1 commit into from
Jun 6, 2023
Merged

[feat] tools-v2: add bs [list|query] scan-status #2361 #2481

merged 1 commit into from
Jun 6, 2023

Conversation

lianzhanbiao
Copy link

@lianzhanbiao lianzhanbiao commented May 14, 2023

Signed-off-by: lianzhanbiao lzbcs@outlook.com

What problem does this PR solve?

Issue Number: #2361

Problem Summary: support bs scan status command in curve tool

What is changed and how it works?

What's Changed:
add tools-v2/pkg/cli/command/curvebs/list/copyset/copyset.go
add tools-v2/pkg/cli/command/curvebs/list/scanstatus/scanstatus.go
add tools-v2/pkg/cli/command/curvebs/query/scanstatus/scanstatus.go
modify tools-v2/pkg/cli/command/curvebs/list/list.go
modify tools-v2/pkg/cli/command/curvebs/query/copyset.go
modify tools-v2/pkg/cli/command/curvebs/query/query.go
modify tools-v2/README.md
modify tools-v2/internal/utils/row.go
modify tools-v2/internal/error/error.go

How it Works:

Usage:  curve bs query scan-status [flags]

query the copyset info

Flags:
      --copysetid strings       copyset id[required]
  -f, --format string           output format (json|plain) (default "plain")
      --logicalpoolid strings   logical pool id[required]
      --mdsaddr string          mds address, should be like 127.0.0.1:6700,127.0.0.1:6701,127.0.0.1:6702
      --rpcretrytimes int32     rpc retry times (default 1)
      --rpctimeout duration     rpc timeout (default 10s)

Global Flags:
  -c, --conf string   config file (default is $HOME/.curve/curve.yaml or /etc/curve/curve.yaml)
  -h, --help          print help
      --showerror     display all errors in command
      --verbose       show some log

Examples:
$ curve bs query scan-status --copysetid 1 --logicalpoolid 1

command result

+-------------+-----------+-------+-------------+--------------------+
| LOGICALPOOL | COPYSETID | SCAN  | LASTSCANSEC | LASTSCANCONSISTENT |
+-------------+-----------+-------+-------------+--------------------+
| 1           | 1         | false | 1683736549  | true               |
+-------------+-----------+-------+-------------+--------------------+
curve bs list scan-status

command result

+-------------+-----------+
| LOGICALPOOL | COPYSETID |
+-------------+-----------+
| 1           | 1         |
+-------------+-----------+
| 1           | 10        |
+-------------+-----------+
| 1           | 100       |
+-------------+-----------+
| 1           | 11        |
+-------------+-----------+
| 1           | 12        |
+-------------+-----------+
| 1           | 13        |
+-------------+-----------+
| 1           | 14        |
+-------------+-----------+
| 1           | 15        |
+-------------+-----------+
| 1           | 16        |
+-------------+-----------+
| 1           | 17        |
+-------------+-----------+
| 1           | 18        |
+-------------+-----------+
| 1           | 19        |
+-------------+-----------+
| 1           | 2         |
+-------------+-----------+
| 1           | 20        |
+-------------+-----------+
| 1           | 21        |
+-------------+-----------+
| 1           | 22        |
+-------------+-----------+
| 1           | 23        |
+-------------+-----------+
| 1           | 24        |
+-------------+-----------+
| 1           | 25        |
+-------------+-----------+
| 1           | 26        |
+-------------+-----------+
| 1           | 27        |
+-------------+-----------+
| 1           | 28        |
+-------------+-----------+
| 1           | 29        |
+-------------+-----------+
| 1           | 3         |
+-------------+-----------+
| 1           | 30        |
+-------------+-----------+
| 1           | 31        |
+-------------+-----------+
| 1           | 32        |
+-------------+-----------+
| 1           | 33        |
+-------------+-----------+
| 1           | 34        |
+-------------+-----------+
| 1           | 35        |
+-------------+-----------+
| 1           | 36        |
+-------------+-----------+
| 1           | 37        |
+-------------+-----------+
| 1           | 38        |
+-------------+-----------+
| 1           | 39        |
+-------------+-----------+
| 1           | 4         |
+-------------+-----------+
| 1           | 40        |
+-------------+-----------+
| 1           | 41        |
+-------------+-----------+
| 1           | 42        |
+-------------+-----------+
| 1           | 43        |
+-------------+-----------+
| 1           | 44        |
+-------------+-----------+
| 1           | 45        |
+-------------+-----------+
| 1           | 46        |
+-------------+-----------+
| 1           | 47        |
+-------------+-----------+
| 1           | 48        |
+-------------+-----------+
| 1           | 49        |
+-------------+-----------+
| 1           | 5         |
+-------------+-----------+
| 1           | 50        |
+-------------+-----------+
| 1           | 51        |
+-------------+-----------+
| 1           | 52        |
+-------------+-----------+
| 1           | 53        |
+-------------+-----------+
| 1           | 54        |
+-------------+-----------+
| 1           | 55        |
+-------------+-----------+
| 1           | 56        |
+-------------+-----------+
| 1           | 57        |
+-------------+-----------+
| 1           | 58        |
+-------------+-----------+
| 1           | 59        |
+-------------+-----------+
| 1           | 6         |
+-------------+-----------+
| 1           | 60        |
+-------------+-----------+
| 1           | 61        |
+-------------+-----------+
| 1           | 62        |
+-------------+-----------+
| 1           | 63        |
+-------------+-----------+
| 1           | 64        |
+-------------+-----------+
| 1           | 65        |
+-------------+-----------+
| 1           | 66        |
+-------------+-----------+
| 1           | 67        |
+-------------+-----------+
| 1           | 68        |
+-------------+-----------+
| 1           | 69        |
+-------------+-----------+
| 1           | 7         |
+-------------+-----------+
| 1           | 70        |
+-------------+-----------+
| 1           | 71        |
+-------------+-----------+
| 1           | 72        |
+-------------+-----------+
| 1           | 73        |
+-------------+-----------+
| 1           | 74        |
+-------------+-----------+
| 1           | 75        |
+-------------+-----------+
| 1           | 76        |
+-------------+-----------+
| 1           | 77        |
+-------------+-----------+
| 1           | 78        |
+-------------+-----------+
| 1           | 79        |
+-------------+-----------+
| 1           | 8         |
+-------------+-----------+
| 1           | 80        |
+-------------+-----------+
| 1           | 81        |
+-------------+-----------+
| 1           | 82        |
+-------------+-----------+
| 1           | 83        |
+-------------+-----------+
| 1           | 84        |
+-------------+-----------+
| 1           | 85        |
+-------------+-----------+
| 1           | 86        |
+-------------+-----------+
| 1           | 87        |
+-------------+-----------+
| 1           | 88        |
+-------------+-----------+
| 1           | 89        |
+-------------+-----------+
| 1           | 9         |
+-------------+-----------+
| 1           | 90        |
+-------------+-----------+
| 1           | 91        |
+-------------+-----------+
| 1           | 92        |
+-------------+-----------+
| 1           | 93        |
+-------------+-----------+
| 1           | 94        |
+-------------+-----------+
| 1           | 95        |
+-------------+-----------+
| 1           | 96        |
+-------------+-----------+
| 1           | 97        |
+-------------+-----------+
| 1           | 98        |
+-------------+-----------+
| 1           | 99        |
+-------------+-----------+

Side effects(Breaking backward compatibility? Performance regression?):

Check List

  • Relevant documentation/comments is changed or added
  • I acknowledge that all my contributions will be made under the project's license

@lianzhanbiao lianzhanbiao changed the title [curve/toos-v2]: add scan-status #2361 [feat] tools-v2: add bs list copyset #2361 May 14, 2023
@zhanghuidinah
Copy link
Member

cicheck

@lianzhanbiao lianzhanbiao changed the title [feat] tools-v2: add bs list copyset #2361 [feat] tools-v2: add bs [list|query] scan-status #2361 May 19, 2023
@opencurveadmin
Copy link
Collaborator

@Cyber-SiKu @Xinlong-Chen PTAL

Comment on lines 65 to 66
- [status etcd](#status-etcd-1)
- [status mds](#status-mds-1)
Copy link
Contributor

Choose a reason for hiding this comment

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

repeat.
There are many mistakes in this reamdme, please correct them.

Copy link
Author

Choose a reason for hiding this comment

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

ok

timeout := config.GetFlagDuration(cCmd.Cmd, config.RPCTIMEOUT)
retrytimes := config.GetFlagInt32(cCmd.Cmd, config.RPCRETRYTIMES)

// FilterScanning 赋值 true
Copy link
Contributor

Choose a reason for hiding this comment

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

use English

Copy link
Author

Choose a reason for hiding this comment

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

done

@@ -0,0 +1,123 @@
/*
Copy link
Contributor

Choose a reason for hiding this comment

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

This command seems to have no output?

Copy link
Author

Choose a reason for hiding this comment

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

I use this image opencurvedocker/curvebs:v1.2.6, and I can get outout like above. I try to build image myself, but I meet some errors.

#0 3.178   404  Not Found
#0 3.194 Ign:5 http://httpredir.debian.org/debian stretch-backports InRelease
#0 3.234 Err:6 http://mirrors.163.com/debian stretch-updates Release
#0 3.234   404  Not Found
#0 3.281 Err:7 http://mirrors.163.com/debian-security stretch/updates Release
#0 3.281   404  Not Found
#0 3.535 Err:8 http://httpredir.debian.org/debian stretch-backports Release
#0 3.535   404  Not Found

What may I need do to solve this?

Copy link
Contributor

Choose a reason for hiding this comment

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

ROW_RECYCLE = "recycle"
ROW_RESULT = "result"
ROW_SCAN = "scan"
ROW_LASTSCANSEC = "lastScanSec"
Copy link
Contributor

Choose a reason for hiding this comment

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

Suggested change
ROW_LASTSCANSEC = "lastScanSec"
ROW_LASTSCAN = "last Scan"

Copy link
Author

Choose a reason for hiding this comment

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

done

ROW_RESULT = "result"
ROW_SCAN = "scan"
ROW_LASTSCANSEC = "lastScanSec"
ROW_LASTSCANCONSISTENT = "lastScanConsistent"
Copy link
Contributor

Choose a reason for hiding this comment

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

Suggested change
ROW_LASTSCANCONSISTENT = "lastScanConsistent"
ROW_LAST_SCAN_CONSISTENT = "last Scan Consistent"

Copy link
Author

Choose a reason for hiding this comment

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

done

row[cobrautil.ROW_LOGICALPOOL] = fmt.Sprintf("%d", info.GetLogicalPoolId())
row[cobrautil.ROW_COPYSET_ID] = fmt.Sprintf("%d", info.GetCopysetId())
row[cobrautil.ROW_SCAN] = fmt.Sprintf("%v", info.GetScaning())
row[cobrautil.ROW_LASTSCANSEC] = fmt.Sprintf("%v", info.GetLastScanSec())
Copy link
Contributor

Choose a reason for hiding this comment

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

This should be a Unix Timestamp, you can convert it.

Copy link
Author

Choose a reason for hiding this comment

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

I don't find convert in the old tools. seems the old tools just out the lastscansec?

Copy link
Contributor

Choose a reason for hiding this comment

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

I don't find convert in the old tools. seems the old tools just out the lastscansec?

There is no need to emulate old tools, you can implement it in time.go.

Copy link
Author

Choose a reason for hiding this comment

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

I don't find convert in the old tools. seems the old tools just out the lastscansec?

There is no need to emulate old tools, you can implement it in time.go.

done

Copy link
Contributor

@Xinlong-Chen Xinlong-Chen left a comment

Choose a reason for hiding this comment

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

good job!

tools-v2/pkg/cli/command/curvebs/query/copyset/copyset.go Outdated Show resolved Hide resolved
tools-v2/README.md Outdated Show resolved Hide resolved
@Xinlong-Chen
Copy link
Contributor

Xinlong-Chen commented May 24, 2023

hi, u can comment cicheck to trigger CI test(However, there is no ci test for tools-v2, but this action is necessary before merging).
Also, u can visit it to get more informations.

@Xinlong-Chen
Copy link
Contributor

cicheck

2 similar comments
@zhanghuidinah
Copy link
Member

cicheck

@zhanghuidinah
Copy link
Member

cicheck

@ilixiaocui
Copy link
Contributor

Below is my test result, it doesn't look right.
image

copysetid 、 logicalpoolid、timeout are int.
image

@lianzhanbiao
Copy link
Author

Below is my test result, it doesn't look right. image

copysetid 、 logicalpoolid、timeout are int. image

could you please tell me what image you test with?

@ilixiaocui
Copy link
Contributor

Test Guide

image: curveadm playground run --kind curvebs --container_image harbor.cloud.netease.com/curve/curvebs:playground

@lianzhanbiao
Copy link
Author

Test Guide

image: curveadm playground run --kind curvebs --container_image harbor.cloud.netease.com/curve/curvebs:playground

I cant pull this image,@ Cyber-SiKu said they are updating images from debian9 to debian11. I tried to build with opencurvedocker/curve-base:build-debian11. But I met some errors..
I test with opencurvedocker/curvebs:v1.2.6. I can get output with the list command, But this image seems not well either. Because when I type 'curve_ops_tools scan-status', it cant recognize the command.
When will the new image be able to test with?

@ilixiaocui
Copy link
Contributor

Test Guide
image: curveadm playground run --kind curvebs --container_image harbor.cloud.netease.com/curve/curvebs:playground

I cant pull this image,@ Cyber-SiKu said they are updating images from debian9 to debian11. I tried to build with opencurvedocker/curve-base:build-debian11. But I met some errors.. I test with opencurvedocker/curvebs:v1.2.6. I can get output with the list command, But this image seems not well either. Because when I type 'curve_ops_tools scan-status', it cant recognize the command. When will the new image be able to test with?

I will have a try with opencurvedocker/curvebs:v1.2.6.

@ilixiaocui
Copy link
Contributor

image

list output empty

@lianzhanbiao
Copy link
Author

curveadm playground run --kind curvebs --container_image

is it ok to use "curve_ops_tools scan-status"?

@ilixiaocui
Copy link
Contributor

ilixiaocui commented Jun 2, 2023

curveadm playground run --kind curvebs --container_image

is it ok to use "curve_ops_tools scan-status"?

I have try curve_ops_tools scan-status, output as following:

Scan status for copyset(1,6):
  scaning=0  lastScanSec=1685639514  lastScanConsistent=1

but curve bs list scan-status also get empty list.

curve bs query scan-status output as following:

+-------------+-----------+-------+-------------------------------+----------------------+
| LOGICALPOOL | COPYSETID | SCAN  |           LAST SCAN           | LAST SCAN CONSISTENT |
+-------------+-----------+-------+-------------------------------+----------------------+
| 1           | 6         | false | 2023-06-02 01:11:54 +0800 CST | true                 |
+-------------+-----------+-------+-------------------------------+----------------------+
image

curve bs query scan-status has get scan=true, it should be show in curve bs list scan-status

@lianzhanbiao
Copy link
Author

lianzhanbiao commented Jun 2, 2023

curveadm playground run --kind curvebs --container_image

is it ok to use "curve_ops_tools scan-status"?

I have try curve_ops_tools scan-status and also get empty list.

  • So I guess there is something wrong with the image...If everything well, when execute 'curve_ops_tools scan-status', it should have list output, am I right?

  • I add some log in the code, the rpc result is null. Maybe I have to try to build a test image myself before the official image being able to test with..(It's a little difiicult for me.. (_ _|||))

  • The strange thing is that when I use stand-alone deployment with v1.12.6 image, there is a list output, but it will not be recognized when I execute curve_ops_tools scan-status. The result is not the same.

@lianzhanbiao
Copy link
Author

lianzhanbiao commented Jun 2, 2023

curveadm playground run --kind curvebs --container_image

is it ok to use "curve_ops_tools scan-status"?

I have try curve_ops_tools scan-status and also get empty list.

  • So I guess there is something wrong with the image...If everything well, when execute 'curve_ops_tools scan-status', it should have list output, am I right?
  • I add some log in the code, the rpc result is null. Maybe I have to try to build a test image myself before the official image being able to test with..(It's a little difiicult for me.. (_ _|||))
  • The strange thing is that when I use stand-alone deployment with v1.12.6 image, there is a list output, but it will not be recognized when I execute curve_ops_tools scan-status. The result is not the same.

@lianzhanbiao lianzhanbiao reopened this Jun 2, 2023
@ilixiaocui
Copy link
Contributor

curveadm playground run --kind curvebs --container_image

is it ok to use "curve_ops_tools scan-status"?

I have try curve_ops_tools scan-status and also get empty list.

  • So I guess there is something wrong with the image...If everything well, when execute 'curve_ops_tools scan-status', it should have list output, am I right?
  • I add some log in the code, the rpc result is null. Maybe I have to try to build a test image myself before the official image being able to test with..(It's a little difiicult for me.. (_ _|||))
  • The strange thing is that when I use stand-alone deployment with v1.12.6 image, there is a list output, but it will not be recognized when I execute curve_ops_tools scan-status. The result is not the same.

updated the description above

@lianzhanbiao
Copy link
Author

lianzhanbiao commented Jun 2, 2023

curveadm playground run --kind curvebs --container_image

is it ok to use "curve_ops_tools scan-status"?

I have try curve_ops_tools scan-status, output as following:

Scan status for copyset(1,6):
  scaning=0  lastScanSec=1685639514  lastScanConsistent=1

but curve bs list scan-status also get empty list.

curve query scan-status output as following:

+-------------+-----------+-------+-------------------------------+----------------------+
| LOGICALPOOL | COPYSETID | SCAN  |           LAST SCAN           | LAST SCAN CONSISTENT |
+-------------+-----------+-------+-------------------------------+----------------------+
| 1           | 6         | false | 2023-06-02 01:11:54 +0800 CST | true                 |
+-------------+-----------+-------+-------------------------------+----------------------+
image `curve bs query scan-status` has get `scan=true`, it should be show in `curve bs list scan-status`

From your output, the command you use is 'curve_ops_tools scan-status --logicalpoolid 1 --copysetid 6'?
the command 'curve bs list scan-status' is equal to 'curve_ops_tools scan-status' without specified logicalpoolid and copysetid.
Is my understanding wrong?

@lianzhanbiao
Copy link
Author

lianzhanbiao commented Jun 2, 2023

curveadm playground run --kind curvebs --container_image

is it ok to use "curve_ops_tools scan-status"?

I have try curve_ops_tools scan-status, output as following:

Scan status for copyset(1,6):
  scaning=0  lastScanSec=1685639514  lastScanConsistent=1

but curve bs list scan-status also get empty list.
curve bs query scan-status output as following:

+-------------+-----------+-------+-------------------------------+----------------------+
| LOGICALPOOL | COPYSETID | SCAN  |           LAST SCAN           | LAST SCAN CONSISTENT |
+-------------+-----------+-------+-------------------------------+----------------------+
| 1           | 6         | false | 2023-06-02 01:11:54 +0800 CST | true                 |
+-------------+-----------+-------+-------------------------------+----------------------+
image `curve bs query scan-status` has get `scan=true`, it should be show in `curve bs list scan-status`

From your output, the command you use is 'curve_ops_tools scan-status --logicalpoolid 1 --copysetid 6'? the command 'curve bs list scan-status' is equal to 'curve_ops_tools scan-status' without specified logicalpoolid and copysetid. Is my understanding wrong?

the old tools code is below

int StatusTool::ScanStatusCmd() {
    if (FLAGS_logicalPoolId != 0 && FLAGS_copysetId != 0) {
        CopysetInfo copysetInfo;
        auto lpid = FLAGS_logicalPoolId;
        auto copysetId = FLAGS_copysetId;
        if (mdsClient_->GetCopyset(lpid, copysetId, &copysetInfo) != 0) {
            std::cout << "GetCopyset fail!" << std::endl;
            return -1;
        }

        std::cout
            << "Scan status for copyset("
            << lpid << "," << copysetId << "):" << std::endl
            << "  scaning=" << copysetInfo.scaning()
            << "  lastScanSec=" << copysetInfo.lastscansec()
            << "  lastScanConsistent=" << copysetInfo.lastscanconsistent()
            << std::endl;

        return 0;
    }

    std::vector<CopysetInfo> copysetInfos;
    if (mdsClient_->GetCopySetsInCluster(&copysetInfos, true) != 0) {
        std::cout << "GetCopySetsInCluster fail!" << std::endl;
        return -1;
    }

    int count = 0;
    std::cout << "Scaning copysets: " << copysetInfos.size();
    for (auto& copysetInfo : copysetInfos) {
        if (count % 5 == 0) {
            std::cout << std::endl;
        }
        std::cout << "  (" << copysetInfo.logicalpoolid()
                  << "," << copysetInfo.copysetid() << ")";
        count++;
    }

    std::cout << std::endl;

    return 0;
}

@ilixiaocui
Copy link
Contributor

curve bs qury is ok, but curve bs list is always empty (Sorry, the information I posted was incorrect. I have updated it now)

@lianzhanbiao
Copy link
Author

curve bs qury is ok, but curve bs list is always empty (Sorry, the information I posted was incorrect. I have updated it now)

I know your mean. Now my problem is when executingcurve_ops_tools scan-status without specified logicalpoolid and copysetid, it's output seems empty? If so,I dont konw whether my code has something wrong or the image.
I would appreciate it if you could try the command curve_ops_tools scan-status without arguments

@ilixiaocui
Copy link
Contributor

curve bs qury is ok, but curve bs list is always empty (Sorry, the information I posted was incorrect. I have updated it now)

I know your mean. Now my problem is when executingcurve_ops_tools scan-status without specified logicalpoolid and copysetid, it's output seems empty? If so,I dont konw whether my code has something wrong or the image. I would appreciate it if you could try the command curve_ops_tools scan-status without arguments

curve_ops_tools scan-status without arguments is also empty. So your new tool is consistent with old one.

@lianzhanbiao
Copy link
Author

curve bs qury is ok, but curve bs list is always empty (Sorry, the information I posted was incorrect. I have updated it now)

I know your mean. Now my problem is when executingcurve_ops_tools scan-status without specified logicalpoolid and copysetid, it's output seems empty? If so,I dont konw whether my code has something wrong or the image. I would appreciate it if you could try the command curve_ops_tools scan-status without arguments

curve_ops_tools scan-status without arguments is also empty. So your new tool is consistent with old one.

thanks, I'll try to build a image base debian11 or try something else..

@lianzhanbiao
Copy link
Author

Looks like it's because of this bug #2241

)

const (
scanStatusExample = `$ curve bs query scan-satus --copysetid 1 --logicalpoolid 1`
Copy link
Contributor

Choose a reason for hiding this comment

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

Suggested change
scanStatusExample = `$ curve bs query scan-satus --copysetid 1 --logicalpoolid 1`
scanStatusExample = `$ curve bs query scan-status --copysetid 1 --logicalpoolid 1`

Copy link
Author

Choose a reason for hiding this comment

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

done

@Cyber-SiKu
Copy link
Contributor

cicheck

Signed-off-by: lianzhanbiao <lzbcs@outlook.com>
@Cyber-SiKu
Copy link
Contributor

cicheck

3 similar comments
@Cyber-SiKu
Copy link
Contributor

cicheck

@zhanghuidinah
Copy link
Member

cicheck

@Cyber-SiKu
Copy link
Contributor

cicheck

@Cyber-SiKu
Copy link
Contributor

image

git --amend -s

@Cyber-SiKu Cyber-SiKu merged commit 4762448 into opencurve:master Jun 6, 2023
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

6 participants