Move init connection to receive thread

Based on @hzxuzhonghu suggestion, clean up the connection init.
[ ] Configuration Infrastructure
[ ] Docs
[ ] Installation
[ ] Networking
[ ] Performance and Scalability
[ ] Policies and Telemetry
[ ] Security
[ ] Test and Release
[ ] User Experience
[ ] Developer Infrastructure

This is on top of https://github.com/istio/istio/pull/25090  - split to keep the size small.

@costinm: The following test failed, say /retest to rerun all failed tests:

Test name
Commit
Details
Rerun command

release-test_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test release-test_istio

Instructions for interacting with me using PR comments are available here.  If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository. I understand the commands that are listed here.

@costinm: The following tests failed, say /retest to rerun all failed tests:

Test name
Commit
Details
Rerun command

release-test_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test release-test_istio

integ-ipv6-k8s-tests_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test integ-ipv6-k8s-tests_istio

Instructions for interacting with me using PR comments are available here.  If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository. I understand the commands that are listed here.

@costinm: The following tests failed, say /retest to rerun all failed tests:

Test name
Commit
Details
Rerun command

release-test_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test release-test_istio

integ-ipv6-k8s-tests_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test integ-ipv6-k8s-tests_istio

unit-tests_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test unit-tests_istio

Instructions for interacting with me using PR comments are available here.  If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository. I understand the commands that are listed here.

@costinm: The following tests failed, say /retest to rerun all failed tests:

Test name
Commit
Details
Rerun command

release-test_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test release-test_istio

integ-ipv6-k8s-tests_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test integ-ipv6-k8s-tests_istio

unit-tests_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test unit-tests_istio

integ-security-k8s-tests_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test integ-security-k8s-tests_istio

Instructions for interacting with me using PR comments are available here.  If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository. I understand the commands that are listed here.

@costinm: The following tests failed, say /retest to rerun all failed tests:

Test name
Commit
Details
Rerun command

release-test_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test release-test_istio

integ-ipv6-k8s-tests_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test integ-ipv6-k8s-tests_istio

unit-tests_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test unit-tests_istio

integ-security-k8s-tests_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test integ-security-k8s-tests_istio

lint_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test lint_istio

Instructions for interacting with me using PR comments are available here.  If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository. I understand the commands that are listed here.

@costinm: The following tests failed, say /retest to rerun all failed tests:

Test name
Commit
Details
Rerun command

release-test_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test release-test_istio

integ-ipv6-k8s-tests_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test integ-ipv6-k8s-tests_istio

unit-tests_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test unit-tests_istio

integ-security-k8s-tests_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test integ-security-k8s-tests_istio

lint_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test lint_istio

integ-galley-k8s-tests_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test integ-galley-k8s-tests_istio

Instructions for interacting with me using PR comments are available here.  If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository. I understand the commands that are listed here.

@costinm: The following tests failed, say /retest to rerun all failed tests:

Test name
Commit
Details
Rerun command

release-test_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test release-test_istio

integ-ipv6-k8s-tests_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test integ-ipv6-k8s-tests_istio

unit-tests_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test unit-tests_istio

integ-security-k8s-tests_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test integ-security-k8s-tests_istio

lint_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test lint_istio

integ-galley-k8s-tests_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test integ-galley-k8s-tests_istio

integ-pilot-k8s-tests_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test integ-pilot-k8s-tests_istio

Instructions for interacting with me using PR comments are available here.  If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository. I understand the commands that are listed here.

@costinm: The following tests failed, say /retest to rerun all failed tests:

Test name
Commit
Details
Rerun command

release-test_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test release-test_istio

integ-ipv6-k8s-tests_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test integ-ipv6-k8s-tests_istio

unit-tests_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test unit-tests_istio

integ-security-k8s-tests_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test integ-security-k8s-tests_istio

lint_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test lint_istio

integ-galley-k8s-tests_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test integ-galley-k8s-tests_istio

integ-pilot-k8s-tests_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test integ-pilot-k8s-tests_istio

integ-mixer-k8s-tests_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test integ-mixer-k8s-tests_istio

Instructions for interacting with me using PR comments are available here.  If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository. I understand the commands that are listed here.

@costinm: The following tests failed, say /retest to rerun all failed tests:

Test name
Commit
Details
Rerun command

release-test_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test release-test_istio

integ-ipv6-k8s-tests_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test integ-ipv6-k8s-tests_istio

unit-tests_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test unit-tests_istio

integ-security-k8s-tests_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test integ-security-k8s-tests_istio

lint_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test lint_istio

integ-galley-k8s-tests_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test integ-galley-k8s-tests_istio

integ-pilot-k8s-tests_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test integ-pilot-k8s-tests_istio

integ-mixer-k8s-tests_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test integ-mixer-k8s-tests_istio

integ-multicluster-k8s-tests_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test integ-multicluster-k8s-tests_istio

Instructions for interacting with me using PR comments are available here.  If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository. I understand the commands that are listed here.

@costinm: The following tests failed, say /retest to rerun all failed tests:

Test name
Commit
Details
Rerun command

release-test_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test release-test_istio

integ-ipv6-k8s-tests_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test integ-ipv6-k8s-tests_istio

unit-tests_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test unit-tests_istio

integ-security-k8s-tests_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test integ-security-k8s-tests_istio

lint_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test lint_istio

integ-galley-k8s-tests_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test integ-galley-k8s-tests_istio

integ-pilot-k8s-tests_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test integ-pilot-k8s-tests_istio

integ-mixer-k8s-tests_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test integ-mixer-k8s-tests_istio

integ-multicluster-k8s-tests_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test integ-multicluster-k8s-tests_istio

gencheck_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test gencheck_istio

Instructions for interacting with me using PR comments are available here.  If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository. I understand the commands that are listed here.

@costinm: The following tests failed, say /retest to rerun all failed tests:

Test name
Commit
Details
Rerun command

release-test_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test release-test_istio

integ-ipv6-k8s-tests_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test integ-ipv6-k8s-tests_istio

unit-tests_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test unit-tests_istio

integ-security-k8s-tests_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test integ-security-k8s-tests_istio

lint_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test lint_istio

integ-galley-k8s-tests_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test integ-galley-k8s-tests_istio

integ-pilot-k8s-tests_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test integ-pilot-k8s-tests_istio

integ-mixer-k8s-tests_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test integ-mixer-k8s-tests_istio

integ-multicluster-k8s-tests_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test integ-multicluster-k8s-tests_istio

gencheck_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test gencheck_istio

integ-distroless-k8s-tests_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test integ-distroless-k8s-tests_istio

Instructions for interacting with me using PR comments are available here.  If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository. I understand the commands that are listed here.

@costinm: The following tests failed, say /retest to rerun all failed tests:

Test name
Commit
Details
Rerun command

release-test_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test release-test_istio

integ-ipv6-k8s-tests_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test integ-ipv6-k8s-tests_istio

unit-tests_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test unit-tests_istio

integ-security-k8s-tests_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test integ-security-k8s-tests_istio

lint_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test lint_istio

integ-galley-k8s-tests_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test integ-galley-k8s-tests_istio

integ-pilot-k8s-tests_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test integ-pilot-k8s-tests_istio

integ-mixer-k8s-tests_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test integ-mixer-k8s-tests_istio

integ-multicluster-k8s-tests_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test integ-multicluster-k8s-tests_istio

gencheck_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test gencheck_istio

integ-distroless-k8s-tests_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test integ-distroless-k8s-tests_istio

integ-operator-controller-tests_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test integ-operator-controller-tests_istio

Instructions for interacting with me using PR comments are available here.  If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository. I understand the commands that are listed here.

@costinm: The following tests failed, say /retest to rerun all failed tests:

Test name
Commit
Details
Rerun command

release-test_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test release-test_istio

integ-ipv6-k8s-tests_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test integ-ipv6-k8s-tests_istio

unit-tests_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test unit-tests_istio

integ-security-k8s-tests_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test integ-security-k8s-tests_istio

lint_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test lint_istio

integ-galley-k8s-tests_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test integ-galley-k8s-tests_istio

integ-pilot-k8s-tests_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test integ-pilot-k8s-tests_istio

integ-mixer-k8s-tests_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test integ-mixer-k8s-tests_istio

integ-multicluster-k8s-tests_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test integ-multicluster-k8s-tests_istio

gencheck_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test gencheck_istio

integ-distroless-k8s-tests_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test integ-distroless-k8s-tests_istio

integ-operator-controller-tests_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test integ-operator-controller-tests_istio

integ-telemetry-k8s-tests_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test integ-telemetry-k8s-tests_istio

Instructions for interacting with me using PR comments are available here.  If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository. I understand the commands that are listed here.

@costinm: The following tests failed, say /retest to rerun all failed tests:

Test name
Commit
Details
Rerun command

release-test_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test release-test_istio

integ-ipv6-k8s-tests_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test integ-ipv6-k8s-tests_istio

unit-tests_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test unit-tests_istio

integ-security-k8s-tests_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test integ-security-k8s-tests_istio

integ-galley-k8s-tests_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test integ-galley-k8s-tests_istio

integ-pilot-k8s-tests_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test integ-pilot-k8s-tests_istio

integ-mixer-k8s-tests_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test integ-mixer-k8s-tests_istio

integ-multicluster-k8s-tests_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test integ-multicluster-k8s-tests_istio

gencheck_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test gencheck_istio

integ-distroless-k8s-tests_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test integ-distroless-k8s-tests_istio

integ-operator-controller-tests_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test integ-operator-controller-tests_istio

integ-telemetry-k8s-tests_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test integ-telemetry-k8s-tests_istio

lint_istio
38f8ded9fac69aee451de44cb84baee9228e1c63
link
/test lint_istio

Instructions for interacting with me using PR comments are available here.  If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository. I understand the commands that are listed here.

@costinm: The following tests failed, say /retest to rerun all failed tests:

Test name
Commit
Details
Rerun command

release-test_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test release-test_istio

integ-ipv6-k8s-tests_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test integ-ipv6-k8s-tests_istio

unit-tests_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test unit-tests_istio

integ-security-k8s-tests_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test integ-security-k8s-tests_istio

integ-galley-k8s-tests_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test integ-galley-k8s-tests_istio

integ-pilot-k8s-tests_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test integ-pilot-k8s-tests_istio

integ-mixer-k8s-tests_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test integ-mixer-k8s-tests_istio

integ-multicluster-k8s-tests_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test integ-multicluster-k8s-tests_istio

integ-distroless-k8s-tests_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test integ-distroless-k8s-tests_istio

integ-operator-controller-tests_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test integ-operator-controller-tests_istio

integ-telemetry-k8s-tests_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test integ-telemetry-k8s-tests_istio

lint_istio
38f8ded9fac69aee451de44cb84baee9228e1c63
link
/test lint_istio

gencheck_istio
38f8ded9fac69aee451de44cb84baee9228e1c63
link
/test gencheck_istio

Instructions for interacting with me using PR comments are available here.  If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository. I understand the commands that are listed here.

@costinm: The following tests failed, say /retest to rerun all failed tests:

Test name
Commit
Details
Rerun command

integ-mixer-k8s-tests_istio
779663efae79c2e2850fe14dbe6c0afbed3dd68b
link
/test integ-mixer-k8s-tests_istio

lint_istio
38f8ded9fac69aee451de44cb84baee9228e1c63
link
/test lint_istio

gencheck_istio
38f8ded9fac69aee451de44cb84baee9228e1c63
link
/test gencheck_istio

unit-tests_istio
38f8ded9fac69aee451de44cb84baee9228e1c63
link
/test unit-tests_istio

Instructions for interacting with me using PR comments are available here.  If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository. I understand the commands that are listed here.

@costinm: The following tests failed, say /retest to rerun all failed tests:

Test name
Commit
Details
Rerun command

lint_istio
38f8ded9fac69aee451de44cb84baee9228e1c63
link
/test lint_istio

gencheck_istio
38f8ded9fac69aee451de44cb84baee9228e1c63
link
/test gencheck_istio

unit-tests_istio
38f8ded9fac69aee451de44cb84baee9228e1c63
link
/test unit-tests_istio

analyze-tests_istio
38f8ded9fac69aee451de44cb84baee9228e1c63
link
/test analyze-tests_istio

Instructions for interacting with me using PR comments are available here.  If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository. I understand the commands that are listed here.

@costinm: The following tests failed, say /retest to rerun all failed tests:

Test name
Commit
Details
Rerun command

unit-tests_istio
38f8ded9fac69aee451de44cb84baee9228e1c63
link
/test unit-tests_istio

analyze-tests_istio
bb8b053f141251a2edb61edf610d339d16f3214d
link
/test analyze-tests_istio

Instructions for interacting with me using PR comments are available here.  If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository. I understand the commands that are listed here.

@costinm: The following tests failed, say /retest to rerun all failed tests:

Test name
Commit
Details
Rerun command

analyze-tests_istio
bb8b053f141251a2edb61edf610d339d16f3214d
link
/test analyze-tests_istio

integ-pilot-k8s-tests_istio
bb8b053f141251a2edb61edf610d339d16f3214d
link
/test integ-pilot-k8s-tests_istio

Instructions for interacting with me using PR comments are available here.  If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository. I understand the commands that are listed here.

@costinm: The following tests failed, say /retest to rerun all failed tests:

Test name
Commit
Details
Rerun command

analyze-tests_istio
bb8b053f141251a2edb61edf610d339d16f3214d
link
/test analyze-tests_istio

integ-pilot-k8s-tests_istio
bb8b053f141251a2edb61edf610d339d16f3214d
link
/test integ-pilot-k8s-tests_istio

gencheck_istio
d758073c4743f74ff6af0413fea5204fc1a6d527
link
/test gencheck_istio

Instructions for interacting with me using PR comments are available here.  If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository. I understand the commands that are listed here.

@costinm: The following tests failed, say /retest to rerun all failed tests:

Test name
Commit
Details
Rerun command

analyze-tests_istio
bb8b053f141251a2edb61edf610d339d16f3214d
link
/test analyze-tests_istio

integ-pilot-k8s-tests_istio
bb8b053f141251a2edb61edf610d339d16f3214d
link
/test integ-pilot-k8s-tests_istio

gencheck_istio
d758073c4743f74ff6af0413fea5204fc1a6d527
link
/test gencheck_istio

lint_istio
d758073c4743f74ff6af0413fea5204fc1a6d527
link
/test lint_istio

Instructions for interacting with me using PR comments are available here.  If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository. I understand the commands that are listed here.


在type: module Error: Dynamic require of "path" is not supported

file:///D:/workspace/github/ly/node_modules/.pnpm/registry.npmmirror.com+unplugin-vue-define-options@0.1.2/node_modules/unplugin-vue-define-options/dist/chunk-WNNTV2HR.mjs:30
throw new Error('Dynamic require of "' + x + '" is not supported');

Please provide a minimum reproduction repo

Please try 0.3.0.

try 0.3.1 is ok


Support vector table relocation?

Hi Jorge and friends,
For various reasons I'm trying to use cortex-m-rt on a stm32l151 with a bootloader at 0x0800_0000.
This means my memory.x looks like this:
MEMORY
{
  FLASH : ORIGIN = 0x08004000, LENGTH = 48K
  RAM : ORIGIN = 0x20000000, LENGTH = 16K
}

so my user code plus the vector table starts at 0x0800_4000.
On startup the bootloader runs first, and once it's done it jumps to the reset handler at *0x0800_4004.
So far this works, and my main (well actually RTFMs init and idle) runs as expected.
However, none of the interrupts work, as the stm32 still uses the bootloader vector table at 0x0800_0000.
To fix that I'm currently running unsafe { p.core.SCB.vtor.write(0x4000) }; in init, after which everything runs just fine again.
Would it make sense to handle this vector table relocation in cortex-m-rt or should we consider this a bug of the bootloader?
If we want to fix it in cortex-m-rt, how could the fix look like? We'd need to write the relative offset from start of flash to where the vector table ends up, but as far as I can tell we don't know anymore that the original start of FLASH was at 0x8000_0000.

should we consider this a bug of the bootloader?

I would say yes; bootloaders should either set VTOR or copy the application vector table to RAM and remap it appropriately (e.g. on thumbv6 without VTOR), before jumping to application code. See for example this article from ARM/Keil. The bootloader has all the information it needs to do this properly, while cortex-m-rt doesn't in general.

Can this be closed, or is there a use case where cortex-m-rt needs to be involved?

I vote for closing; this is definitely behaviour the bootloader itself should take care of, and if it doesn't, chip/board support code can also take care of it. Doesn't need any special help from cortex-m-rt AFAIK.

Okay, closing then. If some use case comes up we can always reopen.


Support for tls and certificate authentication

Hi,
Currently, the plugin supports password authentication. I wanted to request support for certificate authentication

Hi @Amar-C,
tls Authentication is part of enterprise couchbase. Currently, cannot be implemented.

Hi,
I can see its available in gocb - https://github.com/couchbase/gocb/blob/fcf55fc858b306ab6b96aff2c0b861b5e70aa0b9/auth.go#L80

Sure, Will check on this and update


Add collect supportconfig to ardana (SOC-8460)

Collect supportconfig files as Jenkins artifacts by default in all
periodic and gating Ardana jobs in case of failure.
This also requires setting up passwordless SSH access for the root
account on the Ardana cloud nodes. This is needed by the SSH jump-host
feature used to collect supportconfig files.

Testing with: https://ci.suse.de/view/Cloud/view/Cloud 9 Ardana/job/cloud-ardana9-job-std-3cp-x86_64/


equal

requested icon
equal
(not equal はいらない)

released in v2
https://github.com/CyCraft/pepicons/releases/tag/v2.0.0


Carro Ceiling Fan

I have a Carro Ceiling Fan (https://carrousa.com/collections/smart-ceiling-fan/products/akron-52-inch-3-blade-smart-ceiling-fan-with-led-light-kit-remote-silver-red-wood)  which is supposedly compatible with Tuya (https://community.home-assistant.io/t/carro-smart-home/377349).
I tried the compatibility test script, and it did seem like the AP rebooted after about 60 seconds, although there were no other external signs of "freezing" (it still responded to the remote, albeit that may be a different chip than the one that is being exploited?)
Are there any more checks I should do to make sure it will be compatible before I try to go ahead and exploit it? The fan is mounted on my ceiling so it will be quite annoying to physically tinker with it.

The compatibility script is hit-and-miss with TuyaMCU devices (as you noticed, the MCU handles some functionality on it's own), and the AP has a natural timeout in most cases anyway, you should specifically be looking for the freeze of the status light, or a network drop.
But either way, that script only signifies potential, you'll need a valid profile in order to move forward.  https://github.com/tuya-cloudcutter/tuya-cloudcutter/wiki/FAQ#how-do-i-find-out-what-firmware-version-my-device-has finding the firmware version installed is usually the easiest step forward when there isn't a profile for you exact device.

What does "network drop" mean in this context? There is no internet access through the AP so I'm not sure how to check that other than seeing the AP disappear and reappear (which did happen).
I checked the BSSID is "Tuya Smart Inc".  I paired it in the app and it said "Main Module: V2.1.6 MCU Module: V1.0.0"

You connect to the AP to send the exploit, a drop when it goes away from crashing may be visible, depending on client logging (but is subject to timeout variables).
Yes, 2.1.6 TuyaMCU is exploitable, you can choose the by firmware version and name option and select 2.1.6 - BK7231N / bk7231n_common_user_config_ty and then whatever device it presents, select it, and it should work.
You'll be on your own for finding an mapping datapoints, but TuyaMCU fans are pretty easy generally.

Okay thanks.  I'm reading through the docs, and I'm trying to understand what state it will be in after the exploit.  If I don't flash new firmware, it will basically be the original firmware, except it will have a privately generated local key and it won't phone home to the cloud -- so I could use tinytuya, localtuya, or tuya-local?
Also, is this the right place to ask questions, or is there somewhere else I should post if I encounter difficulties?

You don't want to do cut when you don't have an exact device profile, as cutting sends the DPIDs of whatever device that profile belongs to.  Cut is really only for exact device matches or known compatible ones.  The firmware exploit is not the same as device compatibility.
You'd need to specifically find a profile for a fan with 2.1.6 firmware and hope it's compatible, or create a new one (no guide on how to do that).
Here is fine for general support, though it will be limited, as we don't really support device functionality here.

If you want to try cutting, I guess I'd probably recommend you try as the Treatlife DS03 fan and light switch, as that should have at least the core matching DPIDs.

I see. Since it's a TuyaMCU device, I should expect that flashing the ESP chip won't actually affect the usage of the remote control, right?  I am thinking I would probably just flash ESPHome since that seems to be the biggest community of users.  I would still need to figure out the DPID stuff, but I would feel less worried about bricking something.

That is the most likely assumption, but not a guarantee.
I fully expect the fan/light to share DPIDs with the Treatlife DS03, so https://devices.esphome.io/devices/TreatLife-DS03 would be a good example for the TuyaMCU/fan/light part of it.

Okay, just want to double check I have this right.  If I just want to install ESPHome, I can use the bk7231n firmware included in the repo?   ESPHome-Kickstart-v23.08.29_bk7231n_app.ota.ug.bin  And then from there I can OTA update to my final configuration?
When I'm actually doing the flashing, since it's custom firmware I just use "By firmware version and name" but only the firmware version actually matters?

Okay, just want to double check I have this right. If I just want to install ESPHome, I can use the bk7231n firmware included in the repo? ESPHome-Kickstart-v23.08.29_bk7231n_app.ota.ug.bin And then from there I can OTA update to my final configuration?
When I'm actually doing the flashing, since it's custom firmware I just use "By firmware version and name" but only the firmware version actually matters?

That is all correct.

Okay, I gave it a go... it said "The profile you selected did not result in a successful exploit".  I'm not 100% sure what happened, because again, it's a ceiling fan without any status LED, so literally no feedback about what's happening except checking the appearance/disappearance of APs.

It told me to "power cycle and put my device in AP mode again", but before I could power cycle it(which involves flipping a circuit breaker in my basement), it already told me it failed.  Does the lack of power cycling mean it wasn't properly done?  Or does the fact that it was able to connect to the AP anyways mean that it's moot?
For a while after the exploit, I could see a GLAMP_<random_chars> access point.  I think this was just the exploit's access point, not anything generated by the device?
The CarroHome- still existed after the failed exploit and I could pair with it using the Carro app -- I'm assuming this confirms nothing was exploited?
The only other instructions which I'm aware I didn't follow is that I didn't have /etc/dhcpd.conf so I didn't edit it at all.

If the fan does have an LED to indicate AP mode, it is hidden when the fan is installed on my ceiling.  I know how to put it in AP mode (hold down the button on the remote for 5 seconds), the manual also doesn't mention any LED etc for feedback on the fan: https://images.thdstatic.com/catalog/pdfImages/cc/cca37fab-c76d-44ed-b5c4-a02ae3c68ffe.pdf (it does mention an LED on the smart remote).

It definitely connected to the right AP, I could see in the CLI output that it connected to CarroHome-77CA both times

I realized GLAMP is probably the Google Lamp AP.  I think I triggered it by accidentally trying to bluetooth connect to it from the Carro app, but otherwise it didn't show up in the logs of cloudcutter.
What full log would you want, beyond the screenshot I sent?

When I say LED light in this case, I mean the actual light on the fan, not a status LED.
The screenshot shows most of what I'd be looking for (verifying what AP was being connected to, that it reconnected to the correct one, and that the exploit ran but didn't work), but doesn't verify which profile you actually chose.
It is possible your device has a firmware version of 2.1.6 but isn't a TuyaMCU device, or has a custom-compiled device-specific firmware based on the standard TuyaMCU firmware and they just didn't give a unique version to it.
It seems like that could be the case being the LED light doesn't give any mode indication.
If that is the case, it would require a firmware dump for support to be added.  You could try LightLeak if you have an android phone and a dev board.

I'd be happy to try dumping with LightLeak, but I'm not sure what you mean by a dev board.

A programmable device, something like a NodeMCU you can install custom firmware to that also has wifi.  LightLeak has pre-compiled binaries for ESP8266, ESP32, Beken (BK7231T/BK7231N), and Realteak RTL8710B.

Would an orange pi 5 pro work?

It's not supported natively.  If there is a PlatformIO target for it, it might technically be possible, but you'd have to figure it out on your own (or supply a patch).

Okay, I didn't realize how cheap a NodeMCU board is, I think I will just buy one.  If LightLeak doesn't work, I assume there is no other way to attempt an OTA exploit, and the next step would be to take the fan off my ceiling, and solder a serial connection to it, etc?

Correct, LightLeak is the only OTA dump method, and direct serial would be the only other option.

I am not sure if this is the right place to discuss it, but it seems like the lightleak android app is broken and so I am unable to dump the firmware.  I am getting the symptoms exactly described here, which has been an open issue since january: https://github.com/tuya-cloudcutter/lightleak/issues/23

If I select Unconfigured state, it connects to the CustomAP but then says "the device" doesn't respond to pings (confusingly, since it never even told me to put the device in AP mode, nevermind tried to connect to it!)
If I select the "Configured to join CustomAP" state, it connects to the devices AP, but then gives the same error about the device not responding to pings.

I pretty much never use anything except the Unconfigured state option, the rest are a bit confusing.
It should connect to the CustomAP, then scan for and connect to a Device AP, before it even attempts to check pings.  It doesn't instruct you when to put the device into AP mode, it just expects it to be in AP mode most of the time (whenever it says Establish a connection with the device).  It states what AP/device name it connected to before it does any ping checks.
LightLeak isn't an easy to use or polished app, but it also isn't really under active development, so if it doesn't work for you, that is what it is.  You would need to serial dump instead.

It should connect to the CustomAP, then scan for and connect to a Device AP, before it even attempts to check pings.

Yes, exactly -- it's failing to do this, which indicates something is severely wrong with the app.  Forget about the other options, just following exactly the instructions in the guide and selecting Unconfigured:  It connects to LightLeakIdle and then fails the ping check immediately:

This indicates a bug, right?

Possibly a lack of permissions or incompatible with an Android version.  That shows it's not even configuring LightLeakCustom, just that it connected to LightLeakIdle, then fails
Reminder that permissions must be explicitly set manually for side-loaded apps.  I've only used LightLeak on Android 11, not sure if there are requirements around android version.
I guess I wasn't correct on step names
Establish connection with the device is for connecting to LightLeakIdle and setting up LightLeakCustom
Connect to smart device WiFi is where it expects the target device to be in AP mode.

Ok thanks! I think it was due to incompatibility with Android 9.   Using a phone with Android 14 worked (and it asked for permissions on its own!)  Well, by worked, I mean the app was functional, sadly the Carro ceiling fan did not seem to be vulnerable to any of the Lightleak BK7231N profiles.
I will try a serial dump next (once I figure out how to get it powered when off the ceiling). Thanks for the help so far.

Ah so it looks like the chip is a WBR3?  Which means it is not supported?  I'm surprised it was dropping off the network when I was testing it.

Realtek has the same software flaw/vulnerability, which is why it freezes the same way, however, the exploit pattern has not been researched, and there is no 3rd party firmware available for RTL87x0C yet (LibreTiny has partial, but incomplete support).
Closing this, as there is currently nothing further to pursue in regards to Tuya-CloudCutter.


Added code to search in a row wise and column wise sorted matrix.

Search a key in a row wise and column wise sorted matrix, in linear time.

Issues have been fixed.


AggregateId disconnection between aggregate and state

This trips me several times, and smells duplication:

I have to compute the aggregate id in application service handlers,
Then again in the When method in aggregate state

Also, if I don't set the Id explicit on my state object, at least on the very first event, then my aggregate has no id.
I can see why the service need me to compute the id from incoming command, but the id is known at the time When runs. Which means it's known to the aggregate. Is it really necessary to keep the id in the aggregate state?

It's a good idea to do it so you can create behaviour tests based only on events, without involving the command service.

But is it really necessary to keep the aggregate id in the state object?
If it is, why can’t the aggregate set it for us?
If that’s not possible, the library should throw a very obvious exception which tells us explicitly what we forgot to do.

When we persist an object somewhere, we always have the id. Say, I want to store the state using Entity Framework, where does the identity come from? In my world, it's a part of the state.
And, if it's a part of the state, why should it be treated differently than any other property of the state? I'd say it should be possible to set the state id on instantiating/loading, the question is if it is consistent behaviour.
I need to dig a bit more to see how the issue can be prevented.

Say, I want to store the state using Entity Framework

Careful on those analogies!
As you've seen me regularly mention in other places, I'm on the side of explicit mapping from inputs to a stream identifier. i.e. there might be a tenantid, an explicit aggregate id and an extra sharding context key that all feed into where it's going to live. Not all of those are even relevant to the aggregate.
If you're going to look stuff up in a cache, this routing info/context might feed into that too.
Within the store you might not keep all of those things as it does not make sense.
Within the aggregate state, it also rarely makes sense either.
I find the primary reason people end up embedding this envelope/routing context into the state is to enable code within the logic to use those values in generating events. i.e. Created bears the id, which goes into the state, which is then used to include the Id in the Updated. (I'm not a huge fan of the redundant inclusion of id information in events either, but that should be a separate matter)
So I would say that

you have a set of inputs which might be a single thing, but can also be tuples or records etc.
a selection of those feed into how you generate a streamname (e.g. I might redundantly include a Fulfilment Center Id even if I know that an OrderId is globally unique, but the tenantid has driven which database I am working in)
I do not want to have to track the orderid or the FC in my fold state
when I generate events I might need some context like the tenantid (in addition to the orderid and the fulfilment center id which I might choose to keep)

For me, the implications are:

having a canonical id management mechanism coupled into things is not possible in the general case
letting it leak into the state is also not helpful

My conclusion was to:

as a first step, resolve an aggregate based on those id ingredients - that can decide the db, shard and streamname
have the state/folding/caching not be aware of ids or stream names
if you need to include context from step 1 when generating new events, provide that some other way (e.g. you could include it in the command, or as an extra arg)

I'm not a huge fan of the redundant inclusion of id information in events either, but that should be a separate matter

How would you route events in projections if you don't have the id? It could be possible to use the stream name for that purpose, but if you use some middleware between the event store and the projector, this information is lost, unless it's implicitly placed in the meta.

How would you route events in projections if you don't have the id? It could be possible to use the stream name for that purpose, but if you use some middleware between the event store and the projector, this information is lost, unless it's implicitly placed in the meta.

That's a separate concern; I agree it needs to pass somewhere, and there is no single perfect solution (I tend to use stream name parsing a lot for routing of internal reactions processing, but that may or not work and/or be a clean solution in a given context).
If we imagine that we have a tenantid, an FC id and the actual strictly absolutely necessary id they might come from any mix of:

reader metadata (tenantid might be inferred based on the container name in my doc store)
the event body itself (if I want to get into parsing it to achieve that)
the metadata of the event
the stream name, as you mention.

In other words, I'd say that mapping from an event being projected to an aggregate is in a similar way a thing that should not be baked in and/or coupled to any one specific thing.
In idiomatic Equinox+Propulsion code, this is represented by having a streamName function which maps from e.g. (tenantId, fcId, orderId) -> StreamName (string), and a parse function that can take Order-FC001_{orderId} and tell you that this event pertains to an Order (and/or you might be taking out the FC001 to map it to a database for that 'tenant'. There is no intrinsic big win to it being in the event body (even if that's not a reason to include it from a modelling perspective or a pedagogical perspective).
The important thing is that neither Equinox or Propulsion demand you to provide such a function and/or expect there to be some magic id, marker interface or other conventions - the mapping lives in your domain and/or composition root.
Ultimately you can often do stuff like:

start off without a tenantid
define all event schemas to have only the order id
realize you want/need to introduce a tenantid

Now you have a decision as to whether to rewrite all events to put in the default tenantid as you said all events must be able to provide all context (and have to touch lots of code to thread through and/or default the tenantid), or you can not play that game and consider it to be part of the routing.
(Can go on even more tangents about how for me routing or reactions/projections should be based on envelope and/or stream name or the event metadata more than stuff inside the core event data, but my main goal was to convey that I think baking an id into the state is an antipattern as it does not generalize well in more complex cases, regardless of the fact that managing that it is clearly a central concern that needs to be catered for in some manner.)

realize you want/need to introduce a tenantid

that's what I mentioned in another issue, I got the same thought when discussing the shared store scenario. Not sure already where to find it, but apart from the tenant id, I can see the following.
Event type conflict:

one context
one store
two aggregates
same event type

It's not an issue when loading the aggregate, but it will be a problem for deserializing events in subscriptions.
Another scenario:

Two contexts
One store
Two aggregate types with the same name, one per context

Here comes the stream name conflict.
Of course, if we say "context is tenant" - we get to the same tenant id discussion. Still, the tenant id might be something else (customer id, deployment id, etc), so these can be even composed.
In EventStoreDB we discuss introducing namespace, tenant, and category as first-class discriminators. But, I'd like to keep those things abstracted out on the library level.
So, my current understanding that both event type mapping and StreamName<T> aren't good enough.

So, my current understanding that both event type mapping and StreamName aren't good enough.

Yeah, the main thing is obviously to bake in / couple to any specific approach. Sometimes the way to achieve that is to abstract it and provide an extension point, other times its a matter of finding a way to push a given aspect of the routing jsut far enough out that it becomes a non-issue from the point of view of your infra / library.
And so it begins...
(I find lots of uses for multiple aggregations/deciders per stream. While they inevitably share some event body contracts, the sets involved can vary. I don't have any great clean examples I can convey here, but that only matters if a lib is going to paint me into a corner by assuming a stream name or an aggregate i a single thing. Having event types not be contextual to an aggregate type makes debugging/versioning and reasoning way harder too (beyond very simple demo systems that).)

but that only matters if a lib is going to paint me into a corner by assuming a stream name or an aggregate is a single thing.

Well, there will never be a possibility to handle every possible scenario.
The way Eventuous develops is demand-based and mostly based on the demand of the sponsors and paid users (in any form, like working hours). As I am personally not convinced about things like multi-stream aggregates, or multi-aggregate streams (would be nice to have an example, as I struggle to understand this concept), I won't be doing that, so, someone else should :) Again, if it's a thing.
For this particular issue, I plan to make some extensions for configuring the stream name resolution. Maybe, also add some configurable defaults (i.e. static namespace). I also think about adding some default meta propagation for the aggregate store, based on such configuration that would be bound to the aggregate type. It will allow resolving things on the other side, and it will be quite generic.

Well, there will never be a possibility to handle every possible scenario.

My point here is that IMO the lib should not get involved; then it never constrains anything. Of course, abstracting around it is not without value, so doing that does have negatives too.
Cant think of a multiple streams scenario myself.
Most multi aggregate scenarios I have implemented are things like using a bespoke state format to allow efficient concurrent ingestion, while letting the bulk of other decisions use a different fold without having to merge the two. It is critical to reduce complexity in some cases, but obviously having two of anything is never without its costs either. (they ca be especially relevant where caching and/or snapshots are involved, which is another hint that it's definitely on the rare side).
What you are describing sounds good - my intention in putting my thoughts here is definitely only to suggests ways of looking at things - you're balancing a different set of forces and I definitely don't understand your overall choices enough to be concrete about any suggestion.
As you're well aware, of course the best way to design it for real is when a real use case in a system that's already employing the library makes it clear that it's worth expanding the surface area in a given direction...

Looking at the code now, it is easy to add a custom mapping, or even a custom stream name resolve function.
But, the only things that the store knows when reading the stream is the aggregate type and its id. Let's say we want something dynamic in the stream name as a tenant, and the tenant id is context-specific. So, we know the tenant id from the command execution context, but passing it over to the store Load function seems like overkill. Any thought?

In Equinox, there is a StoreCategory singleton, a Decider instance per call, and (under the covers) a Stream instance per call.
Command Handlers etc get passed a Func that resolves to a Decider:
type Service(resolve : TenantId * OrderId -> Decider<Events.Event, Fold.State>) =

    member _.Query(tenant, order, f : Fold.State -> T) : Async<T> =
        let decider = resolve (tenant, order)
        decider.Query(f)

    member _.Execute(tenant, order, command) : Async<T> =
        let decider = resolve (tenant, order)
        decider.Transact(decide command)

And there is some wiring over the top:
module Config =

    let private resolveStream = function
        | Config.Store.Memory store ->
            let cat = Config.Memory.create Events.codec Fold.initial Fold.fold store
            fun streamName -> cat.Resolve streamName
        | Config.Store.Cosmos (context, cache) ->
            let cat = Config.Cosmos.createSnapshotted Events.codec Fold.initial Fold.fold (Fold.isOrigin, Fold.toSnapshot) (context, cache)
            fun streamName -> cat.Resolve streamName
    let private resolveDecider store = streamName >> resolveStream store >> Config.createDecider
    let create = resolveDecider >> Service

The Decider:

talks to a Stream (which knows the composed stream name)
can ask it to Load (it does the rest, passing the stream name)
can ask it to Sync events to the store (including doing a reload/resync if there was a conflict)

The StoreCategory:
-> can make a Stream instance via Resolve (passing the StreamName, and an optional per-call Context)
-> knows the codec we want to use (and passes it the Context, e.g. if you want to put some tenant or auth info into the event metadata)
The streamName function lives up at the top of the aggregate impl:-
let [<Literal>] private Category = "Order"
let streamName = OrderId.toString >> FsCodec.StreamName.create Category

where OrderId is a lightweight wrapper over a string or a guid, and toString renders that in canonical form

Don't see how can I fit something like that to the current set of abstractions without breaking everything tbh.

You're probably right. I'd say the main point is to bear these sorts of things in mind as factors to use in deciding 50/50 calls as to where things should live. My high level heuristic for all these thing is TL;DR  not in the state ;)
Off the top of my head, things that should not leak into the state unless they are relevant to actual decision making:

assumptions re count of events applied to the state implying a version (if you upconvert events and/or ignore legacy events)
versions (that can become etags and/or any other form of context for storage roundtrips) should be managed by the infra (and optionally made available so you can render the final version and/or session key when producing the final response after any WrongExpectedVersion conflicts have been resolved)
stuff that's used to generate/derive the stream name (pass that when resolving a stream)
stuff that you need to generate event metadata (pass that contextual stuff when getting the stream)

Obviously you'll have met the bulk of these and more in various guises. The thing that makes them not just side notes in Equinox is that any given operation against the store (Query / Transact) has all of these things resolveable, as you are never doing individual explicit Load vs Save vs Render events vs Render result phases, i.e.

StoreCategory has the codec
StoreCategory has Batch sizes for event queries when loading
-StoreCategory has isOrigin function to short circuit loading if a Reset/Clear event is encountered when loading events
StreamName was calculated at the start and is held on the Stream instance (and passed to the StoreCategory)
Context for rendering events is held on the Stream instance (to supply to the codec)

Translating that directly to C# without a lot of juggling and refactoring just results in Func soup that nobody would wish on anyone!

I want to keep the id and version in the state. Everything else, as you said, should be elsewhere (meta, code).
Btw I like the idea of caching the state, but it would increase the complexity too much, considering by-default load-balanced applications (our prod). I think I have a better solution for it. I haven't started working on it, but we have a similar thing in prod (it is related to #1).

In Equinox, if you have a Cache, the Token is stashed alongside the state (as a tuple).
So for Cosmos, it holds an etag, ESDB it's the version
The StreamName is used as the cache key
In Cosmos, the cache is pretty much a no-brainer as there's a big difference between paying 1RU to validate your cache has the latest, vs paying 1 RU/K to re-read events or a snapshot (aside from the latency induced by redundant network traffic and deserialization time).
On Dynamo I also use an etag instead of a version to implement RollingState mode so again the Version is not relevant.
Another reason not to put the token in the state and/or require it to be a Version is that in Cosmos and Dynamo, instead of and/or in addition to emitting a Version number, one may wish may wish to emit the Session Token in a response, which lets you manage reading your writes with session consistency (without having to talk to the write leader all the time) - Having a Version alongside the state would not help with that (some notes in https://github.com/jet/equinox/issues/192)
Exposing the Version (which needs to stay in sync with the state) alongside the SessionKey (which can change even if the state for a given stream has not) makes sense in that scenario.
I realize you and the the bulk of the planet don't care about this (I have also not fully implemented it, see https://github.com/jet/equinox/pull/195), but the point here is that for me there are multiple reasons not to put the Version in/alongside the state in the aggregate

Its not always a Version (and it can vary by store)
The domain should rarely need to understand/depend on versions numbers as a general principle

I've road tested this a lot and am confident it works and is a better solution in practical terms in the context of Equinox and F# - definitely not saying that its the best choice in all contexts.

I merged #78 and realised that when the stream name is provided by the app service, there's no knowledge about the aggregate id in the app service.
Here is the service from a test:
        OnNew<Commands.BookRoom>(
            cmd => GetStreamName(cmd.BookingId),
            (booking, cmd)
                => booking.BookRoom(
                    new BookingId(cmd.BookingId),
                    cmd.RoomId,
                    new StayPeriod(cmd.CheckIn, cmd.CheckOut),
                    cmd.Price
                )
        );

Here, the app service has no id value to use for setting it implicitly in the aggregate state. I would suggest leaving this as it is now. I can add a check of the state Id property when the aggregate instance is available for storing the changes in the app service, and return an error when the Id is not set. It would expose the issue when the id is not explicitly set in the When.

Another option is to refactor the app service again. Right now, all the On overloads have two versions - one with the stream name function, and the other one with the id function. The alternative would be something like:
    protected void OnExisting<TCommand>(
        GetIdFromCommand<TId, TCommand>      getId,
        ActOnAggregate<TAggregate, TCommand> action,
        GetStreamFromId<TCommand>       getStream = null
    ) where TCommand : class

In this case, the app service can call SetId on the state object when it's instantiated. The getStream would not be using the command data, but the id that is created by the getId function. The drawback here is that you lose access to all the other command properties. However, it can be mitigated by including more properties to the identity record itself.
record PaymentId : AggregateId {
    public PaymentId(string id, string tenant) : base(id) => Tenant = tenant;

    public string Tenant { get; }
}

OnNew<RegisterPayment>(
    cmd => new PaymentId(cmd.PaymentId, cmd.TenantId),
    (payment, cmd)
        => payment.RegisterPayment(
            cmd.BookingId,
            new Money(cmd.AmountPaid, cmd.Currency)
        ),
    id => GetStreamName(id.Value, id.Tenant)
);

https://github.com/Eventuous/eventuous/blob/93cbb3b1f62432052793f8ba63fdf3df8f925393/src/Core/test/Eventuous.Tests/StoringEventsWithCustomStream.cs#L10-L15

In Cosmos, the cache is pretty much a no-brainer as there's a big difference between paying 1RU to validate your cache has the latest, vs paying 1 RU/K to re-read events or a snapshot (aside from the latency induced by redundant network traffic and deserialization time).

We must clearly separate systems with intensive load, where you run your services continuously, and can use the cache at the cost of the cache being out of sync, and managing, for example, LB session stickiness to increase the cache hit rate. And the other type of system is where you can run in a serverless workload and must give up the cache idea entirely as it just increases complexity without providing any value whatsoever due to low load.
It's also my reservation against pay per use databases in some scenarios as you start getting punished if you do simple things, so you have to make your code more complex just to reduce the database costs. It's really interesting that usage-based pricing is very attractive on low load, where optimisation is unnecessary. When you get to a higher load, you'd benefit from instance-based pricing since it's more predictable, and then you start optimising for performance.
But, getting back to the unnecessary state restore, I have a much simpler way to deal with it without any caching and nodes getting out of sync on the cache, and all that complexity. And, I want to do it outside the basic library scope, as I don't want to introduce these extra bits to people that don't really need it.

So, here's what I made, and some explanation:

I have to compute the aggregate id in application service handlers,

Yes, but only for OnExisting as we need to load events from the stream

Then again in the When method in aggregate state

Yes, but only for events that come first in the stream (after OnNew). Often, it's just one event
So, it is not really a repetitive thing. It's one or another, depending on what state you are in (new or existing).

Also, if I don't set the Id explicit on my state object, at least on the very first event, then my aggregate has no id.

After #79 it won't be able to calculate the stream name from the id if the id is not set. So, it will return ErrorResult.
I hope it's good enough.

Re the caching aspect, sounds like we are on the same page. Absolutely agree a cache needs to earn its keep either in real latency reductions (which are not that easy to achieve against ESDB and/or may not be relevant with a SQL store), and that's not a given (with a lot of nodes, large states and/or a large active dataset a good hit rate is also harder to attain esp considering the cost of adding RAM in various hosting contexts).
Being able to opt in or out of caching as a config thing that does not impact app logic is definitely what you want. There's also a big benefit from not having to traverse optimisation discussions when learning. But for certain workloads, it's critical. They're definitely rare, but the design validation/nudges from seeing where it fits in your design is definitely valuable IME.=

Ok, I want to close this one. I feel that I explained enough here https://github.com/Eventuous/eventuous/issues/75#issuecomment-1091655259
Now if you try to persist an aggregate without an id, it will throw. It's a good enough guard rail.
Any improvements in terms of code are of course welcome, but I have to focus on other things.

Seems like I am solving it here https://github.com/Eventuous/eventuous/issues/111 https://github.com/Eventuous/eventuous/discussions/114


Resource not found

I've followed your guide and I am using the system without the Redis database.
Then, my .params consists of:
{
"ASSISTANT_IAM_APIKEY": "",
"ASSISTANT_IAM_URL": "",
"WORKSPACE_ID": "",
"WEATHER_URL": ""
}
I've double checked all those parameters and they're okay. However, when I am calling the Watson Assistant skill by typing "Ask weather channel what do you know about me" it returns "There was a problem with the requested skill's response". If try the same in the Watson Assistant try out, everything works fine. The endpoint to IBM Cloud Action is correctly inserted into the Amazon Developer Console.
By inspecting the log from the IBM Cloud Functions, this is what I get:
"logs": [
"2019-08-20T20:00:52.308924Z    stdout: Begin action",
"2019-08-20T20:00:52.308940Z    stdout: Alexa attributes:",
"2019-08-20T20:00:52.308944Z    stdout: undefined",
"2019-08-20T20:00:52.313028Z    stdout: Connected to Watson Assistant",
"2019-08-20T20:00:52.313038Z    stdout: Missing REDIS_URI Will use session attributes instead of Redis.",
"2019-08-20T20:00:52.313042Z    stdout: Alexa sessionId: amzn1.echo-api.session.96d29f76-16a7-42fb-969f-2a56c365446f",
"2019-08-20T20:00:52.313045Z    stdout: WORKSPACE_ID: c9d171f0-fef7-4a06-b338-0cab3d62b023",
"2019-08-20T20:00:52.313047Z    stdout: Input text: start skill",
"2019-08-20T20:00:53.407930Z    stderr: { Not Found: Resource not found",
"2019-08-20T20:00:53.407971Z    stderr: at RequestWrapper.formatError (/nodejsAction/6mYD7bOa/node_modules/ibm-cloud-sdk-core/lib/requestwrapper.js:218:21)",
"2019-08-20T20:00:53.407975Z    stderr: at /nodejsAction/6mYD7bOa/node_modules/ibm-cloud-sdk-core/lib/requestwrapper.js:206:29",
"2019-08-20T20:00:53.407978Z    stderr: at ",
"2019-08-20T20:00:53.407980Z    stderr: at process._tickCallback (internal/process/next_tick.js:189:7)",
"2019-08-20T20:00:53.407983Z    stderr: name: 'Not Found',",
"2019-08-20T20:00:53.407986Z    stderr: code: 404,",
"2019-08-20T20:00:53.407989Z    stderr: message: 'Resource not found',",
"2019-08-20T20:00:53.407991Z    stderr: body: '{"error":"Resource not found","code":404}',",
"2019-08-20T20:00:53.407994Z    stderr: headers:",
"2019-08-20T20:00:53.407997Z    stderr: { 'content-type': 'application/json; charset=utf-8',",
"2019-08-20T20:00:53.408000Z    stderr: 'content-length': '41',",
"2019-08-20T20:00:53.408003Z    stderr: 'access-control-allow-origin': '*',",
"2019-08-20T20:00:53.408005Z    stderr: 'access-control-allow-methods': 'GET, POST, PUT, DELETE, PATCH, HEAD, OPTIONS',",
"2019-08-20T20:00:53.408008Z    stderr: 'access-control-allow-headers': 'Content-Type, Content-Length, Authorization, X-Watson-Authorization-Token, X-WDC-PL-OPT-OUT, X-Watson-UserInfo, X-Watson-Learning-Opt-Out, X-Watson-Metadata',",
"2019-08-20T20:00:53.408011Z    stderr: 'access-control-max-age': '3600',",
"2019-08-20T20:00:53.408014Z    stderr: 'content-security-policy': 'default-src \'none\'',",
"2019-08-20T20:00:53.408016Z    stderr: 'x-dns-prefetch-control': 'off',",
"2019-08-20T20:00:53.408019Z    stderr: 'x-frame-options': 'SAMEORIGIN',",
"2019-08-20T20:00:53.408021Z    stderr: 'strict-transport-security': 'max-age=15552000; includeSubDomains',",
"2019-08-20T20:00:53.408037Z    stderr: 'x-download-options': 'noopen',",
"2019-08-20T20:00:53.408040Z    stderr: 'x-content-type-options': 'nosniff',",
"2019-08-20T20:00:53.408042Z    stderr: 'x-xss-protection': '1; mode=block',",
"2019-08-20T20:00:53.408045Z    stderr: 'x-global-transaction-id': '134256d06524db272f02ad85861aa9f2',",
"2019-08-20T20:00:53.408048Z    stderr: 'x-dp-watson-tran-id': '134256d06524db272f02ad85861aa9f2',",
"2019-08-20T20:00:53.408050Z    stderr: 'x-edgeconnect-midmile-rtt': '88',",
"2019-08-20T20:00:53.408053Z    stderr: 'x-edgeconnect-origin-mex-latency': '112',",
"2019-08-20T20:00:53.408056Z    stderr: date: 'Tue, 20 Aug 2019 20:00:53 GMT',",
"2019-08-20T20:00:53.408058Z    stderr: connection: 'close' } }",
"2019-08-20T20:00:53.408061Z    stderr: Caught error:",
"2019-08-20T20:00:53.408082Z    stdout: Error: Error talking to Watson.",
PS: I've already seen issue #39 which seems related to mine.

It does look the same as the other issue. Never heard back on that one. It is trying to call assistant.message and getting a 404.  This usually means the URL is wrong (I guess it could also be a temporary failure, so retry of course).  The wrong URL would come from your .params  ASSISTANT_IAM_URL and possibly WORKSPACE_ID. Your workspace looks ok in the log, so just make sure skill is still there with the matching ID. I know you double-checked but not sure what else to suggest. Maybe you didn't use a full URL or something. It should look like this:
{
"ASSISTANT_IAM_APIKEY": "aKK7imqIVSqeOAcT_x-0sCPAjHtmzg7xznABC-Z2a9Hi",
"ASSISTANT_IAM_URL": "https://gateway.watsonplatform.net/assistant/api",
"WORKSPACE_ID": "26a00ca0-c4b3-4e9b-b4e9-fcc7ab9e0045",
... and so on
I don't know if the APIKEY can result in a 404 (vs forbidden) but maybe. My guess is one of the other 2 are wrong (or temporarily not available).  Also make sure you aren't getting confused by updating one function but using a different one.

@markstur thank you for the support. Yes, you were right I was using the full url URL for the ASSISTANT_IAM_URL. That was my mistake, but I wasn't clear to me from the README. Anyway, thank you again you can close this issue.

Hello,
I have the same problem and still cannot manage it.
I followed the guide as is, the only thing different so far is to put the URL as this message was and add the parameter "WORKSPACE_ID", What else should I modify?, Thanks :)


[BUG] [GameTest] Structure command fails

An issue occurs with spawning structures, the error output is unknown
I suspect it may be a command origin issue. The exact same command works when ran in console and in game, it still fails when the user is in game and the chunks are loaded.
  try {
    Commands.run("structure load my:structure 0 4 0");
  } catch (error) {
    console.log("Problem with command: " + error);
  }

Out: {"statusCode":-2147352576,"statusMessage":"An unknown error occurred while attempting to perform this command"}

Workaround is to put the commands into a function and execute that instead

Looking to fix this soon with Commands.run that takes a Dimension - this should unblock a number of commands.

Should be fixed in beta builds with the addition of a Dimension parameter.

Should be fixed in beta builds with the addition of a Dimension parameter.

thanks Mike!

Closing as we've added Dimension into the mix.


Feature: ability to apply screen shader per monitor

I have two monitors; one has washed-out colors and the other doesn't. I can fix the washed-out monitor by modifying the gamma using a custom screen shader. However, the shader applies to all monitors so this makes the normal monitor look bad.
Would it be possible to make the monitor number (or global pixel position) accessible in the fragment shader so that color modifications can be applied conditionally?

7932e425072bd9f57af323d15265b66b2cf139f3
uniform int output will contain the monitor id

Thanks! Unfortunately I couldn't get it to work though. I've found that the shader->output > 0  condition is preventing output from being updated.
https://github.com/hyprwm/Hyprland/blob/10fd75c8335736b1a0dcb3830a5b8c2367a02e61/src/render/OpenGL.cpp#L609-L610
Changing it to shader->output != -1 fixes it.


feat(certsmonitor): add configurable interval

Closes https://github.com/jlesage/docker-avidemux/issues/7

Thanks, I will integrate this in the next version of the baseimage.

This is now supported with version 4.0.0 of the images.


Deployment: Cannot rerun deploy.yml due to file permissions changes

Attempting to re-run the deployment/deploy.yml playbook after already installing causes an issue.
$ ansible-playbook deployment/deploy.yml -i deployment/inventory.ini

PLAY [gbm-server] **************************************************************

TASK [setup] *******************************************************************
ok: [gbm-server]

TASK [clone grand-bargain-monitoring git repository] ***************************
fatal: [gbm-server]: FAILED! => {"before": "2dce75cec5f852e689134fd6ac297400d15e8f24", "changed": false, "failed": true, "msg": "Local modifications exist in repository (force=no).", "warnings": []}
	to retry, use: --limit @/Users/dalepotter/Documents/grand-bargain-monitoring/deployment/deploy.retry

PLAY RECAP *********************************************************************
gbm-server                 : ok=1    changed=0    unreachable=0    failed=1

This appears to be due to the fact that file permissions in /var/www when the playbook is first run - i.e.
here: https://github.com/devinit/grand-bargain-monitoring/blob/deployment/deployment/deploy.yml#L67-L68
This change on the remote machine prevents git from attempting to re-clone the repo.
Suggestions

Change the file permissions on the offending file and commit to git. This will mean that there is no mismatch between the files under git and the file permissions after change.
Resolving #39 may help, as after this there may no longer be a need to change file permissions of this repository.

Just stumbled into this issue today as well, although it did not seem to cause any troubles


Valgrind issue with json_object_get when compiling with cmake

Hi,
I've compiled Jansson with cmake. using: cmake ../jansson
When i look at hashlittle it should work with GCC 4.8.x. I'm using GCC 4.8.2. Also when compiling with automake it works fine.
Can someone fix this?
The valgrind error with the 'test_object'-test (with -DCMAKE_BUILD_TYPE=Debug):
==6363== Invalid read of size 4
==6363==    at 0x40BB3E: hashlittle (lookup3.h:254)
==6363==    by 0x40CA9D: hashtable_get (hashtable.c:267)
==6363==    by 0x406059: json_object_get (value.c:101)
==6363==    by 0x4090EB: do_dump (dump.c:341)
==6363==    by 0x40963A: json_dump_callback (dump.c:461)
==6363==    by 0x4094FA: json_dumps (dump.c:426)
==6363==    by 0x405B8E: test_preserve_order (test_object.c:487)
==6363==    by 0x405E02: run_tests (test_object.c:525)
==6363==    by 0x4026EA: main (util.h:70)
==6363==  Address 0x51ff450 is 48 bytes inside a block of size 51 alloc'd
==6363==    at 0x4C2AB80: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==6363==    by 0x40CDC6: jsonp_malloc (memory.c:28)
==6363==    by 0x40C9CE: hashtable_set (hashtable.c:244)
==6363==    by 0x4060EC: json_object_set_new_nocheck (value.c:118)
==6363==    by 0x406171: json_object_set_new (value.c:135)
==6363==    by 0x405B7D: test_preserve_order (test_object.c:485)
==6363==    by 0x405E02: run_tests (test_object.c:525)
==6363==    by 0x4026EA: main (util.h:70)

You need to use -DJANSSON_TEST_WITH_VALGRIND=1 CMake option to disable lookup3's masking trick and make Valgrind happy.

Why isn't this default behaviour?

I suppose most people want to run the test suite without Valgrind. If you pass -DJANSSON_TEST_WITH_VALGRIND=1, all the tests are run through Valgrind by CMake.

Then this is not a solution to my original issue. When I compile libjansson.a with cmake and GCC 4.8.2 my application also suffers from the above error.
I also found out that when I compile with -DCMAKE_BUILD_TYPE=Release with cmake the error is gone. But why does Release and Debug have different behaviour in the hashlittle function. That doesn't make sense. Why is the 'valgrind'-sensitive trick even there? Can't it be removed?

A comment starting at lookup3.h:239 explains it:
/*
 * "k[2]&0xffffff" actually reads beyond the end of the string, but
 * then masks off the part it's not allowed to read.  Because the
 * string is aligned, the masked-off tail is in the same word as the
 * rest of the string.  Every machine with memory protection I've seen
 * does it on word boundaries, so is OK with this.  But VALGRIND will
 * still catch it and complain.  The masking trick does make the hash
 * noticably faster for short strings (like English words).
 */

I can reproduce what you're experiencing on your machine: When built with autotools, valgrind doesn't catch errors, when built with CMake, it does. I'm not sure why this happens, but it has something to do with compiler's optimizations. When built with autotools after CFLAGS=-O0 ./configure, valgrind sees the error.

Still it is weird to create a workaround to satisfy valgrind. The best is to test on different compilers and with different options. E.g clang (llvm), gcc (different version) and see what valgrind has to say.

The -DJANSSON_TEST_WITH_VALGRIND=1 CMake option enables running the test suite through valgrind when invoking make test. The masking trick and valgrind workaround are there in the original lookup3 source, see http://www.burtleburtle.net/bob/c/lookup3.c.
In my opinion it's convenient to be able to run Jansson's test suite through Valgrind to check for memory issues. I also think it's good to have a fast path, because string hashing is a very common operation and most of the time the code is not run through Valgrind or other memory checking tools.
The only missing thing is a flag to enable #define VALGRIND 1 when compiling with autotools.


config_error.html: Use render_markdown_path for error content.

Continuation of #6047.

Automated message from Dropbox CLA bot
@vaidap, it looks like you've already signed the Dropbox CLA. Thanks!

Merged!  Thanks @vaidap!


carla.WalkerBoneControl() -- AttributeError: module 'carla' has no attribute 'WalkerBoneControl'

 Following the PythonAPI documentation on controlling walker bones found here:
https://carla.readthedocs.io/en/latest/tuto_G_control_walker_skeletons/
I run into the following issue when copying the example code listed above:
control = carla.WalkerBoneControl()
-- AttributeError: module 'carla' has no attribute 'WalkerBoneControl'
Has anyone run into this error or can provide a small code snippet on how to implement bone movement in walkers?
I'm trying to make a walker turn their head to look at a target position, where the head angle is obtained by calculating the relative angle between the walker and the target, then applying the appropriate yaw angle in  first_tuple = ('crl_Head__C', carla.Transform(rotation=carla.Rotation(yaw = angle_to_target)))
Thanks for any suggestions or solutions

Encountering the same problem.

Same problem.


Update dependencies

Updating dependencies currently causes some unit tests to fail:
[INFO] Results:
[INFO]
[ERROR] Failures:
[ERROR]   CodeChecksTest.allChecksPass:16
Expecting actual:
  Result{compilation=CompilationResult{errors=[CompilationErrorInfo{fileName='/tmp/1635282971973-0/delft/Solution.java', lineNumber=5, message='cannot find symbol
  symbol:   class Matchers
  location: package org.mockito'}], configurationError=false, wasExecuted=true}, tests=UnitTestsResult{testsFound=0, testsRan=0, testsSucceeded=0, failures=[], console='null', wasExecuted=false}, mutationTesting=MutationTestingResult{wasExecuted=false, killedMutants=0, totalNumberOfMutants=0}, codeChecks=CodeChecksResult{wasExecuted=false, checkResults=[]}, coverage=CoverageResult{wasExecuted=false, totalCoveredLines=0, totalLines=0, totalCoveredInstructions=0, totalInstructions=0, totalCoveredBranches=0, totalBranches=0, coverageLineByLine=CoverageLineByLine{fullyCoveredLines=[], partiallyCoveredLines=[], notCoveredLines=[]}}, metaTests=MetaTestsResult{wasExecuted=false, score=0, totalTests=0, metaTestResults=[]}, finalGrade=0, genericFailure='null', timeInSeconds=0.172052704, weights=null}
to have
[ERROR]   CodeChecksTest.someChecksFail:27
Expecting actual:
  Result{compilation=CompilationResult{errors=[CompilationErrorInfo{fileName='/tmp/1635282972311-0/delft/Solution.java', lineNumber=5, message='cannot find symbol
  symbol:   class Matchers
  location: package org.mockito'}], configurationError=false, wasExecuted=true}, tests=UnitTestsResult{testsFound=0, testsRan=0, testsSucceeded=0, failures=[], console='null', wasExecuted=false}, mutationTesting=MutationTestingResult{wasExecuted=false, killedMutants=0, totalNumberOfMutants=0}, codeChecks=CodeChecksResult{wasExecuted=false, checkResults=[]}, coverage=CoverageResult{wasExecuted=false, totalCoveredLines=0, totalLines=0, totalCoveredInstructions=0, totalInstructions=0, totalCoveredBranches=0, totalBranches=0, coverageLineByLine=CoverageLineByLine{fullyCoveredLines=[], partiallyCoveredLines=[], notCoveredLines=[]}}, metaTests=MetaTestsResult{wasExecuted=false, score=0, totalTests=0, metaTestResults=[]}, finalGrade=0, genericFailure='null', timeInSeconds=0.114486576, weights=null}
to have
[ERROR]   JUnitTestsTest$GeneralMistakes.mockitoAssertionFailing:205
expected: 2
 but was: 0
[ERROR]   JUnitTestsTest$GeneralMistakes.stubbingNonMockClass:218
expected: 2
 but was: 0
[ERROR]   JUnitTestsTest$Mockito.mocksWork:77
expected: 3
 but was: 0
[ERROR]   JacocoTest.differentCoverages:24
Expecting value to be true but was false
[ERROR]   MetaTestsTest.testMetaWhenMultipleClassesInLibrary:58
expected: 4
 but was: 0
[ERROR]   ModesAndActionsTest.gradingModeShouldRunEverything:74
expected: 2
 but was: 0
[ERROR]   ModesAndActionsTest.gradingModeShouldRunEverything:74
expected: 2
 but was: 0
[ERROR]   ModesAndActionsTest.gradingModeShouldRunEverything:74
expected: 2
 but was: 0
[ERROR]   ModesAndActionsTest.practiceModeRunsEverything:19
expected: 2
 but was: 0
[ERROR]   ModesAndActionsTest.runOnlyTests:38
Expecting value to be true but was false
[ERROR]   ModesAndActionsTest.runOnlyTestsAndCoverageToolsDuringExam:53
Expecting value to be true but was false
[ERROR]   PitestTest.allMutantsButOneKilled:19
expected: 32
 but was: 0
[ERROR]   PitestTest.mutantsSurvived:30
expected: 7
 but was: 0
[INFO]
[ERROR] Tests run: 290, Failures: 15, Errors: 0, Skipped: 0

Selenium has been updated to version 4 in our fix-selenium branch AFAIK. Are any of these updates mission critical? Otherwise, I suggest we close this, for now, and then reconsider updating all non-critical dependencies once Andy has shown stability with the many changes we have made recently.

I do not think any of these are mission critical. Updating JUnit also means pitest needs to update, so we are bounded by their version anyways. Mockito and JDT are the only ones I can think of that would be nice to bump.

I do not think any of these are mission critical. Updating JUnit also means pitest needs to update, so we are bounded by their version anyways. Mockito and JDT are the only ones I can think of that would be nice to bump.

I think we need Selenium 4.0.0 for our fancy petclinic to work but you are right. Let's close this for now and then bump Mockito and JDT later?

Oh yeah, I meant besides Selenium 4. Bumping Mockito and JDT should not break anything, so we might as well just bump them now. Leave the others for the future.

Okay, I will bump these on the Selenium branch and close this, for now.

I said Mockito would not break anything, but I actually don't know if pitest shadows it too. We have to try :/

Upgrading to Mockito 4 (which should not break) caused 13 tests to fail. Similarly, the latest version 3 also failed 13. I fear you may be right, I can debug it later but for now I don't think that should be a priority. Sticking with the current version for now!


feat(tree): Include list of properties that changed in nodeChanged event

Description
Updated version of https://github.com/microsoft/FluidFramework/pull/22043 .
See changeset for details.
Reviewer Guidance
The review process is outlined on this wiki page.

A usability issue with this APi has been reported:
Lack of strong typing of the keys least to string names for keys in code easily getting out of date (or having typos) with no compile errors.
There are two ways this could be improved:

strong types on the keys in the set (ex: derive them from the object node or nodes provided)
a way to refer to property key strings that is strongly typed to the object they are on and refactors properly. For example Foo.fields.bar.key possible leveraging a "FieldSchemaContextual" subclass which has the key as s strongly typed property.

A usability issue with this APi has been reported:
Lack of strong typing of the keys least to string names for keys in code easily getting out of date (or having typos) with no compile errors.
There are two ways this could be improved:

strong types on the keys in the set (ex: derive them from the object node or nodes provided)
a way to refer to property key strings that is strongly typed to the object they are on and refactors properly. For example Foo.fields.bar.key possible leveraging a "FieldSchemaContextual" subclass which has the key as s strongly typed property.

Fixed. Also moved API to beta incase there are more such issues.


Change Babbage block header encoding

While all other eras have the header use basic encoding for the operational cert + protocol version (i.e. inline the fields inside), the babbage blocks we've seen seem to not follow the CDDL spec and instead treat them as if they were not basic groups but instead array groups.

I made an issue for the CDDL difference here input-output-hk/cardano-ledger#3559


How Debug your Plugin?

Hi! I forked your module to add some feature, but my patch works partially. So how can I debug a module? pdb give me an error, do you have some tips?

@drdran Thank you for your interest in STProjectMaker.
This issue is more than 4 years old by now, hence I'll close it. In case this is still relevant to you, feel free to reopen it and I will help you debugging.


Fix deprecation for this.pickFiles.

Fix deprecation for this.pickFiles by using broccoli-funnel.

Thanks @charlatan154


Fix handling of root directory as parentPath

Fixes #14
Before this PR:
isPathInside('/foo', '/');  // false

After this PR:
isPathInside('/foo', '/');  // true

Note: commit https://github.com/sindresorhus/is-path-inside/pull/15/commits/b2bc9ea6c888aeb1fa913bb66aab9baf5a94e46f attempts to simplify the code by using path.relative(), which handles path resolution and case sensitivity internally. This change can be reverted safely and the original bug will still be fixed, if desired (e.g. for stylistic reasons).

Note: commit b2bc9ea attempts to simplify the code by using path.relative(), which handles path resolution and case sensitivity internally. This change can be reverted safely and the original bug will still be fixed, if desired (e.g. for stylistic reasons).

I like the change. I'm just paranoid that it will cause some unforeseen issues. For example, with some cases we haven't tested. Would you be able to add some more tests maybe?

Would you be able to add some more tests maybe?

Sure, what did you have in mind? Did you see the assertions I added in the first commit, https://github.com/sindresorhus/is-path-inside/pull/15/commits/bde790ba081d36751d5b8332ec1b2481fc650dfd? I tried to add all of the relevant permutations I could think of for this module.

Maybe some longer paths and some variations of ../../, foo/../../bar.

@sholladay Friendly bump :)

Doesn't work on windows.  Try the following instead:

module.exports = (childPath, parentPath) => {
	const p = process.platform === 'win32' ? path.win32 : path.posix;
	const relation = p.relative(parentPath, childPath);
	return Boolean(relation) && relation !== '..' && !relation.startsWith('..' + p.sep) && relation !== p.resolve(childPath);
};

I started looking into this repo for the following windows case:
t.true(isPathInside('\\\\?\\A:\\GitHub\\sindresorhus\\is-path-inside\\node_modules\\array-includes', 'a:\\github\\sindresorhus\\is-path-inside\\node_modules'));
t.true(isPathInside('\\\\?\\a:\\github\\sindresorhus\\is-path-inside\\node_modules\\array-includes', 'A:\\GitHub\\sindresorhus\\is-path-inside\\node_modules'));

I hoped the module would be able to handle win32 extended-length paths (it doesn't).

Your win32 check is not necessary, the path module does that automatically when using path.relative(). I'll add some more Windows tests soon.

Bump :)

I've added some more assertions. IMO, the tests are in good shape, but I can add some more if necessary.

Thanks :)


Use G1GC to simplify JVM options example in kyuubi-env for KYUUBI_JAVA_OPTS and KYUUBI_BEELINE_OPTS, and for better production deployment usage of higher Java version users out of box.

use G1 for garbage collector
Remove CMS and ParNew related options
Reorder options in resources, GC mechanism, GC printing/logging

Types of changes :bookmark:

[ ] Bugfix (non-breaking change which fixes an issue)
[ ] New feature (non-breaking change which adds functionality)
[ ] Breaking change (fix or feature that would cause existing functionality to change)

Test Plan 🧪
Behavior Without This Pull Request :coffin:
No behavior change.
Behavior With This Pull Request :tada:
Related Unit Tests

Checklists
📝 Author Self Checklist

[ ] My code follows the style guidelines of this project
[x] I have performed a self-review
[ ] I have commented my code, particularly in hard-to-understand areas
[ ] I have made corresponding changes to the documentation
[x] My changes generate no new warnings
[ ] I have added tests that prove my fix is effective or that my feature works
[ ] New and existing unit tests pass locally with my changes
[ ] This patch was not authored or co-authored using Generative Tooling

📝 Committer Pre-Merge Checklist

[ ] Pull request title is okay.
[ ] No license issues.
[ ] Milestone correctly set?
[ ] Test coverage is ok
[ ] Assignees are selected.
[ ] Minimum number of approvals
[ ] No changes are requested

Be nice. Be informative.

Instead of changing CMS to G1 in examples.
How about writing a tuning guide in docs? FYI, https://spark.apache.org/docs/latest/tuning.html#garbage-collection-tuning

Changing CMS to G1 in examples is necessary, considering many users may use examples out of the box for deployment. G1 works fine with Java 8+.
As for the GC tuning guide, we could do it later. Unlike Spark as a computing engine, Kyuubi's tuning guide should be more focused in comprehensive resource control, including threads, memory and related metrics.

Codecov Report
All modified and coverable lines are covered by tests :white_check_mark:

Comparison is base (3478fc9) 61.37% compared to head (73a687d) 61.31%.
Report is 3 commits behind head on master.

Additional details and impacted files
@@             Coverage Diff              @@
##             master    #5729      +/-   ##
============================================
- Coverage     61.37%   61.31%   -0.07%
  Complexity       23       23
============================================
  Files           607      607
  Lines         35820    35834      +14
  Branches       4914     4917       +3
============================================
- Hits          21983    21970      -13
- Misses        11456    11476      +20
- Partials       2381     2388       +7

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.

OK, thanks.
BTW -- For now, fulfilling the PR description checklist is a required step.

OK, thanks. BTW -- For now, fulfilling the PR description checklist is a required step.

Sure.
I have already described the changes in detail in the PR descriptsion and reviewed the Author Self Checklist, by ticking the appropriate options. Is that sufficient? Or should the Committer Pre-Merge Checklist also be checked and ticked by the submitter?

It would be great if you could provide the Test Plan by verifying the related bash scripts locally.

Updated the test plan and the screenshot for using Java options as suggested in the template.
Could you have a check on it?  @yaooqinn

thanks, merged to master


Add deprecation guidelines

Adds guidelines on how to deprecate a module.

Looks like this when run:
$ nextflow run main.nf
N E X T F L O W  ~  version 23.10.1
Launching `main.nf` [friendly_goldberg] DSL2 - revision: f5ac28c9ad
[-        ] process > TASK -
ERROR ~ Error executing process > 'TASK'

Caused by:

WARNING: This module has been deprecated. Please use nf-core/modules/path/to/new/module

Reason:
This module is no longer fit for purpose because ...

. Expression: false -- Check script 'main.nf' at line: 18

Source block:
  assert false: deprecation_message
  """
      """

Tip: you can replicate the issue by changing to the process work dir and entering the command `bash .command.run`

 -- Check '.nextflow.log' file for details


exp/keystore: update spec

We decided to encrypt all users' public keys in case the keystore gets
hacked. As a result, each user will only have one row in the database of
the keystore, and all keys belonging to a user will be stored in the same blob.
This means the /update-key endpoint will be implemented on the client
side such that it will call /load-keys endpoint, decrypt the blob,
modified the blob, re-encrypt the blob, and finally call /store-keys
endpoint. Similar logic applies to /remove-key endpoint.

We were leaning toward having CRUD endpoints before. However, given the design change, it doesn’t really give us too much of advantages of having an update endpoint since update/delete a single key becomes impossible for the backend. The only safety of an update endpoint is that the users will have to know whether they have an existing blob in our db.
I thought about allowing users to have multiple encrypters, but I think @tomquisel is leaning toward to making it simple for the MVP given that we don’t have such user case yet. And that’s something we can open up later.

Great discussion guys! Here's my take:

encrypterName is a field that describes how the blob is encrypted, and is necessary to know how to decrypt it. The data model is one blob per user. If you did want to extend the data model to multiple blobs per user, you'd still want to support multiple of those blobs being encrypted with the same method, and having the same encrypterName. So, it's not really the kind of field to index/key on.
I think it would be good to be REST compliant. As Howard points out, we moved away from CRUD since we're storing a compound blob that stores a list of key entries that can be added or removed, but to the server it all looks like storing the entire blob repeatedly. As as result, I think the best mapping of our use case onto rest would be GET /keys PUT /keys DELETE /keys. I'd probably prefer that over the proposal here.

@howardtw, is the idea behind this proposal that calling GET /delete-keys would delete the keys?

I was actually thinking about POST everything for simplicity on both the client side and server side implementation. i.e. POST store-keys, POST load-keys, and POST delete-keys. But I’m open to other options.

Gotcha. It seems like it'll be more intuitive if we follow REST conventions, so I'd advocate for that.

Ok get, put, delete on keys sounds good to me

@tomquisel @accordeiro updated the spec in https://github.com/stellar/go/pull/1351/commits/410d3c81de83b845c6ff3c0a2c5a8af7aa56c209

Looks great to me! 🎉


e2e test for elasticsearch token propagation

Which problem is this PR solving?

Short description of the changes

Codecov Report

:exclamation: No coverage uploaded for pull request base (master@815ad51). Click here to learn what that means.
The diff coverage is n/a.

@@            Coverage Diff            @@
##             master       #3   +/-   ##
=========================================
  Coverage          ?   98.49%
=========================================
  Files             ?      193
  Lines             ?     9291
  Branches          ?        0
=========================================
  Hits              ?     9151
  Misses            ?      111
  Partials          ?       29

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 815ad51...8918ead. Read the comment docs.


CMakeLists.txt : incorrect variable name

In CMakeLists.txt, lines 257, 258, 262 and 280, the variable names is OIIO_BUILD_CPP11, OIIO_BUILD_CPP14 and "-DOIIO_NO_SSE = 1" instead of OSL_BUILD_CPP11, OSL_BUILD_CPP14 and "-DOSL_NO_SSE = 1"
Thank you for your work and for reading

Oops, you are quite right!
A typo obviously resulting from carelessness in copying those sections of code between OIIO and OSL.
Fix in #573

The OIIO_NO_SSE part, I believe, is correct, because that's just straight-up using the simd.h from OIIO.


Better pre-processing for sentences that contain abbreviations or end in other symbols.

Was having trouble with over 10% of my Whisper transcriptions getting through successfully.  Problems with unicode encoding, or periods were included and considered end-of-sentence markers,  when they shouldn't be (see below.)
Run-on sentences seem to throw off the whole process. Is there a max number of words in a sentence, after which will cause the process to halt?  Is that something I can easily increase?
Am having trouble with abbreviations being considered end-of-sentence but they should not be.
Example sentences such as "The A. B. Dick Company (later stylized as ABDick) was a major American manufacturer of copy machines and office supplies in the late 19th century and 20th centuries." or "John C. Stetson was president of A. B. Dick when he was appointed Secretary of the Air Force in 1978." or "XYZ Inc. and A. Inc. merged in 1811 to form XYZ & A Corp. by 1820." or 'She said, "What do you think?", to which I replied, "I do think." and then I sat down.'
Also I think sentences ending in question marks and exclamation marks are not being considered as potential end of sentences, when they usually should be. Typically a question mark or exclamation mark, followed by a space, should be a end of sentence. Perhaps the only exceptions should be hardcoded list of brand names (Yum! Foods, Wham! UK) or whenever the potential end of sentence marker is not followed by a space and then a capital letter, which would indicate the sentence continues.

Thanks for the risen issue! I updated the repository, now it uses pysbd package for sentence splitting, which improve quality a lot.
import pysbd
seg = pysbd.Segmenter(language="en", clean=False)
sentences = seg.segment(text)


+ Operator for creating sequence of actions

Resolves #172
As I proposed in #172, I also made SequenceAction.then(Action) consistant with Action.then(Action) by never mutating the reciever.

Ok, I updated the code (and tests) and it nows always extract action from sequence.

Thanks.


CSS selector or XPath value of a text

Hi guys,
Thank you spending time on my query.
I want to know is possible to get the CSS or XPath of a text in Selenium VBA.
That is, to click a button we use "driver.findelementbycss("#checkout-button")".
However I know the text as "Checkout" is possible return CSS or XPath of the text.
Thank you

Hi balajisekar,
You mean returning the full CSS or xPath to the element?
Florent once created the the following XPath for me, see issue #38

If you question was to find an element by text then:
Set ele = driver.FindElementByLinkText("Checkout")

And to find an element by text with an XPath:
Set ele = driver.FindElementsByXPath("//*[contains(text(),'Checkout')]")

Example, go to http://form.timeform.betfair.com/daypage?date=20150816
I want to know what is the CSS selector path of the text "Southwell" using Excel VBA macro.
Like this I am having some hundred texts which are needed CSS selector path of the text from different websites.
Could you able to get what I said.

To get the CSS and XPATH locators from the "Southwell" element:
Private Const JS_BUILD_CSS = _
  "var e=this,p=[],h=function(a,s){if(!a||!s)return 0;for(var i=0,l=a.length;i<l;i" & _
  "++){if(s.indexOf(a[i])==-1)return 0};return 1;};for(;e&&e.nodeType==1&&e.nodeNa" & _
  "me!='HTML';e=e.parentNode){if(e.id){p.unshift('#'+e.id);break;}var i=1,u=1,t=e."  & _
  "id){p.unshift('*[@id=\''+e.id+'\']');break;}var i=1,u=1,t=e.localName,c=e.class" & _
  "Name;for(var s=e.previousSibling;s;s=s.previousSibling){if(s.nodeType!=10&&s.no" & _
  "deName==e.nodeName){if(c==s.className)c=null;u=0;++i;}}for(var s=e.nextSibling;" & _
  "s;s=s.nextSibling){if(s.nodeName==e.nodeName){if(c==s.className)c=null;u=0;}}p." & _
  "unshift(u?t:(t+(c?'[@class=\''+c+'\']':'['+i+']')));}return '//'+p.join('/');"

Private Sub Build_Locators()
  Dim drv As New FirefoxDriver
  drv.Get "http://form.timeform.betfair.com/daypage?date=20150816"

  Debug.Print "Css: " & drv.FindElementByLinkText("Southwell") _
                           .ExecuteScript(JS_BUILD_CSS)

  Debug.Print "XPath: " & drv.FindElementByLinkText("Southwell") _
                             .ExecuteScript(JS_BUILD_XPATH)

  driver.Quit
End Sub