Skip to content
New issue

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

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

Already on GitHub? Sign in to your account

Redis: remove deprecated fields #27948

Closed
wants to merge 3 commits into from
Closed

Redis: remove deprecated fields #27948

wants to merge 3 commits into from

Conversation

aspacca
Copy link
Contributor

@aspacca aspacca commented Sep 15, 2021

What does this PR do?

This PR removes deprecated fields from Redis Metricbeat module.

Why is it important?

We don't want these fields to be present in 8.0 distribution.

Checklist

  • My code follows the style guidelines of this project
    - [ ] I have commented my code, particularly in hard-to-understand areas
    - [ ] I have made corresponding changes to the documentation
    - [ ] I have made corresponding change to the default configuration files
    - [ ] I have added tests that prove my fix is effective or that my feature works
  • I have added an entry in CHANGELOG.next.asciidoc or CHANGELOG-developer.next.asciidoc.

Related issues

@botelastic botelastic bot added the needs_team Indicates that the issue/PR needs a Team:* label label Sep 15, 2021
@botelastic
Copy link

botelastic bot commented Sep 15, 2021

This pull request doesn't have a Team:<team> label.

@elasticmachine
Copy link
Collaborator

elasticmachine commented Sep 15, 2021

💔 Tests Failed

the below badges are clickable and redirect to their specific view in the CI or DOCS
Pipeline View Test View Changes Artifacts preview preview

Expand to view the summary

Build stats

  • Start Time: 2021-09-15T17:30:07.260+0000

  • Duration: 66 min 54 sec

  • Commit: 6d48345

Test stats 🧪

Test Results
Failed 4
Passed 20056
Skipped 1386
Total 21446

Trends 🧪

Image of Build Times

Image of Tests

Test errors 4

Expand to view the tests failures

Build&Test / metricbeat-pythonIntegTest / test_info – metricbeat.module.redis.test_redis.Test_0
    Expand to view the error details

     AssertionError: Element counts were not equal:
    First has 1, Second has 0:  'max_input_buffer'
    First has 1, Second has 0:  'max_output_buffer' 
    

    Expand to view the stacktrace

     self = <test_redis.Test_0 testMethod=test_info>
    
        @unittest.skipUnless(metricbeat.INTEGRATION_TESTS, "integration test")
        @pytest.mark.tag('integration')
        def test_info(self):
            """
            Test redis info metricset
            """
        
            self.render_config_template(modules=[{
                "name": "redis",
                "metricsets": ["info"],
                "hosts": self.get_hosts(),
                "period": "5s"
            }])
            proc = self.start_beat()
            self.wait_until(lambda: self.output_lines() > 0)
            proc.check_kill_and_wait()
            self.assert_no_logged_warnings()
        
            output = self.read_output_json()
            self.assertEqual(len(output), 1)
            evt = output[0]
        
            fields = REDIS_FIELDS + ["process", "os"]
            self.assertCountEqual(self.de_dot(fields), evt.keys())
            redis_info = evt["redis"]["info"]
            self.assertCountEqual(self.de_dot(REDIS_INFO_FIELDS), redis_info.keys())
    >       self.assertCountEqual(self.de_dot(CLIENTS_FIELDS), redis_info["clients"].keys())
    E       AssertionError: Element counts were not equal:
    E       First has 1, Second has 0:  'max_input_buffer'
    E       First has 1, Second has 0:  'max_output_buffer'
    
    module/redis/test_redis.py:54: AssertionError 
    

Build&Test / metricbeat-pythonIntegTest / test_module_processors – metricbeat.module.redis.test_redis.Test_0
    Expand to view the error details

     AssertionError: Element counts were not equal:
    First has 1, Second has 0:  'max_input_buffer'
    First has 1, Second has 0:  'max_output_buffer' 
    

    Expand to view the stacktrace

     self = <test_redis.Test_0 testMethod=test_module_processors>
    
        @unittest.skipUnless(metricbeat.INTEGRATION_TESTS, "integration test")
        @pytest.mark.tag('integration')
        def test_module_processors(self):
            """
            Test local processors for Redis info event.
            """
        
            fields = ["clients", "cpu"]
            eventFields = ['beat', 'metricset', 'service', 'event']
            eventFields += ['redis.info.' + f for f in fields]
            self.render_config_template(modules=[{
                "name": "redis",
                "metricsets": ["info"],
                "hosts": self.get_hosts(),
                "period": "5s",
                "processors": [{
                    "include_fields": eventFields,
                }],
            }])
            proc = self.start_beat()
            self.wait_until(lambda: self.output_lines() > 0)
            proc.check_kill_and_wait()
            self.assert_no_logged_warnings()
        
            output = self.read_output_json()
            self.assertEqual(len(output), 1)
            evt = output[0]
        
            self.assertCountEqual(self.de_dot(REDIS_FIELDS), evt.keys())
            redis_info = evt["redis"]["info"]
            print(redis_info)
            self.assertCountEqual(fields, redis_info.keys())
    >       self.assertCountEqual(self.de_dot(CLIENTS_FIELDS), redis_info["clients"].keys())
    E       AssertionError: Element counts were not equal:
    E       First has 1, Second has 0:  'max_input_buffer'
    E       First has 1, Second has 0:  'max_output_buffer'
    
    module/redis/test_redis.py:164: AssertionError 
    

Build&Test / metricbeat-pythonIntegTest / test_info – metricbeat.module.redis.test_redis.Test_1
    Expand to view the error details

     AssertionError: Element counts were not equal:
    First has 1, Second has 0:  'max_input_buffer'
    First has 1, Second has 0:  'max_output_buffer' 
    

    Expand to view the stacktrace

     self = <test_redis.Test_1 testMethod=test_info>
    
        @unittest.skipUnless(metricbeat.INTEGRATION_TESTS, "integration test")
        @pytest.mark.tag('integration')
        def test_info(self):
            """
            Test redis info metricset
            """
        
            self.render_config_template(modules=[{
                "name": "redis",
                "metricsets": ["info"],
                "hosts": self.get_hosts(),
                "period": "5s"
            }])
            proc = self.start_beat()
            self.wait_until(lambda: self.output_lines() > 0)
            proc.check_kill_and_wait()
            self.assert_no_logged_warnings()
        
            output = self.read_output_json()
            self.assertEqual(len(output), 1)
            evt = output[0]
        
            fields = REDIS_FIELDS + ["process", "os"]
            self.assertCountEqual(self.de_dot(fields), evt.keys())
            redis_info = evt["redis"]["info"]
            self.assertCountEqual(self.de_dot(REDIS_INFO_FIELDS), redis_info.keys())
    >       self.assertCountEqual(self.de_dot(CLIENTS_FIELDS), redis_info["clients"].keys())
    E       AssertionError: Element counts were not equal:
    E       First has 1, Second has 0:  'max_input_buffer'
    E       First has 1, Second has 0:  'max_output_buffer'
    
    module/redis/test_redis.py:54: AssertionError 
    

Build&Test / metricbeat-pythonIntegTest / test_module_processors – metricbeat.module.redis.test_redis.Test_1
    Expand to view the error details

     AssertionError: Element counts were not equal:
    First has 1, Second has 0:  'max_input_buffer'
    First has 1, Second has 0:  'max_output_buffer' 
    

    Expand to view the stacktrace

     self = <test_redis.Test_1 testMethod=test_module_processors>
    
        @unittest.skipUnless(metricbeat.INTEGRATION_TESTS, "integration test")
        @pytest.mark.tag('integration')
        def test_module_processors(self):
            """
            Test local processors for Redis info event.
            """
        
            fields = ["clients", "cpu"]
            eventFields = ['beat', 'metricset', 'service', 'event']
            eventFields += ['redis.info.' + f for f in fields]
            self.render_config_template(modules=[{
                "name": "redis",
                "metricsets": ["info"],
                "hosts": self.get_hosts(),
                "period": "5s",
                "processors": [{
                    "include_fields": eventFields,
                }],
            }])
            proc = self.start_beat()
            self.wait_until(lambda: self.output_lines() > 0)
            proc.check_kill_and_wait()
            self.assert_no_logged_warnings()
        
            output = self.read_output_json()
            self.assertEqual(len(output), 1)
            evt = output[0]
        
            self.assertCountEqual(self.de_dot(REDIS_FIELDS), evt.keys())
            redis_info = evt["redis"]["info"]
            print(redis_info)
            self.assertCountEqual(fields, redis_info.keys())
    >       self.assertCountEqual(self.de_dot(CLIENTS_FIELDS), redis_info["clients"].keys())
    E       AssertionError: Element counts were not equal:
    E       First has 1, Second has 0:  'max_input_buffer'
    E       First has 1, Second has 0:  'max_output_buffer'
    
    module/redis/test_redis.py:164: AssertionError 
    

Steps errors 5

Expand to view the steps failures

metricbeat-pythonIntegTest - mage pythonIntegTest
  • Took 5 min 47 sec . View more details here
  • Description: mage pythonIntegTest
metricbeat-pythonIntegTest - mage pythonIntegTest
  • Took 1 min 29 sec . View more details here
  • Description: mage pythonIntegTest
metricbeat-pythonIntegTest - mage pythonIntegTest
  • Took 2 min 20 sec . View more details here
  • Description: mage pythonIntegTest
List files to upload
  • Took 0 min 0 sec . View more details here
  • Description: ls -l src/github.com/elastic/beats/build/system-tests-*.tar.gz
Error signal
  • Took 0 min 0 sec . View more details here
  • Description: Error 'hudson.AbortException: script returned exit code 1'

Log output

Expand to view the last 100 lines of log output

[2021-09-15T18:34:01.362Z] Recording test results
[2021-09-15T18:34:03.604Z] [Checks API] No suitable checks publisher found.
[2021-09-15T18:34:03.966Z] + go clean -modcache
[2021-09-15T18:34:07.303Z] Timeout set to expire in 5 min 0 sec
[2021-09-15T18:34:07.602Z] Cleaning up /var/lib/jenkins/workspace/PR-27948-3-7ad44aef-5070-450e-a6d4-908194719f60
[2021-09-15T18:34:07.602Z] Change ownership of all files inside the specific folder from root/root to current user/group
[2021-09-15T18:34:07.602Z] ++ id -u
[2021-09-15T18:34:07.602Z] ++ id -g
[2021-09-15T18:34:07.602Z] + docker run -v /var/lib/jenkins/workspace/PR-27948-3-7ad44aef-5070-450e-a6d4-908194719f60:/beat alpine:3.4 sh -c 'find /beat -user 0 -exec chown -h 1171:1172 {} \;'
[2021-09-15T18:34:18.752Z] + set -e
[2021-09-15T18:34:18.752Z] + echo 'Change permissions with write access of all files inside the specific folder'
[2021-09-15T18:34:18.752Z] Change permissions with write access of all files inside the specific folder
[2021-09-15T18:34:18.752Z] + chmod -R +w /var/lib/jenkins/workspace/PR-27948-3-7ad44aef-5070-450e-a6d4-908194719f60
[2021-09-15T18:34:18.797Z] Running in /var/lib/jenkins/workspace/PR-27948-3-7ad44aef-5070-450e-a6d4-908194719f60
[2021-09-15T18:34:22.679Z] + gsutil --version
[2021-09-15T18:34:24.103Z] Masking supported pattern matches of $FILE_CREDENTIAL
[2021-09-15T18:34:24.432Z] + gcloud auth activate-service-account --key-file ****
[2021-09-15T18:34:25.002Z] Activated service account credentials for: [[email protected]]
[2021-09-15T18:34:25.584Z] + gsutil -m -q cp eC1wYWNrL2ZpbGViZWF0LXB5dGhvbkludGVnVGVzdDZkNDgzNDUwZDhjZTk3MmMzODYwMWRjZDc4OTU5NTM2NDZmYjIxZWQ gs://beats-ci-temp/ci/cache/
[2021-09-15T18:34:30.960Z] ........................................................................ [ 97%]
[2021-09-15T18:35:22.971Z] .........                                                                [100%]
[2021-09-15T18:35:22.971Z] 
[2021-09-15T18:35:22.971Z] - generated xml file: /go/src/github.com/elastic/beats/x-pack/filebeat/build/TEST-python-integration.xml -
[2021-09-15T18:35:22.971Z] ============================= slowest 20 durations =============================
[2021-09-15T18:35:22.971Z] 39.94s call     x-pack/filebeat/tests/system/test_xpack_modules.py::XPackTest::test_fileset_file_257_checkpoint
[2021-09-15T18:35:22.971Z] 26.76s call     x-pack/filebeat/tests/system/test_xpack_modules.py::XPackTest::test_fileset_file_000_rabbitmq
[2021-09-15T18:35:22.971Z] 18.62s call     x-pack/filebeat/tests/system/test_xpack_modules.py::XPackTest::test_fileset_file_356_o365
[2021-09-15T18:35:22.971Z] 16.68s call     x-pack/filebeat/tests/system/test_xpack_modules.py::XPackTest::test_fileset_file_350_o365
[2021-09-15T18:35:22.972Z] 16.68s call     x-pack/filebeat/tests/system/test_xpack_modules.py::XPackTest::test_fileset_file_188_snort
[2021-09-15T18:35:22.972Z] 14.58s call     x-pack/filebeat/tests/system/test_xpack_modules.py::XPackTest::test_fileset_file_024_threatintel
[2021-09-15T18:35:22.972Z] 10.69s call     x-pack/filebeat/tests/system/test_xpack_modules.py::XPackTest::test_fileset_file_023_threatintel
[2021-09-15T18:35:22.972Z] 10.63s call     x-pack/filebeat/tests/system/test_xpack_modules.py::XPackTest::test_fileset_file_215_panw
[2021-09-15T18:35:22.972Z] 10.44s call     x-pack/filebeat/tests/system/test_xpack_modules.py::XPackTest::test_fileset_file_404_ibmmq
[2021-09-15T18:35:22.972Z] 10.35s call     x-pack/filebeat/tests/system/test_xpack_modules.py::XPackTest::test_fileset_file_183_cisco
[2021-09-15T18:35:22.972Z] 10.32s call     x-pack/filebeat/tests/system/test_xpack_modules.py::XPackTest::test_fileset_file_175_cisco
[2021-09-15T18:35:22.972Z] 10.22s call     x-pack/filebeat/tests/system/test_xpack_modules.py::XPackTest::test_fileset_file_216_panw
[2021-09-15T18:35:22.972Z] 10.20s call     x-pack/filebeat/tests/system/test_xpack_modules.py::XPackTest::test_fileset_file_217_panw
[2021-09-15T18:35:22.972Z] 10.18s call     x-pack/filebeat/tests/system/test_xpack_modules.py::XPackTest::test_fileset_file_212_panw
[2021-09-15T18:35:22.972Z] 9.96s call     x-pack/filebeat/tests/system/test_xpack_modules.py::XPackTest::test_fileset_file_405_ibmmq
[2021-09-15T18:35:22.972Z] 9.85s call     x-pack/filebeat/tests/system/test_xpack_modules.py::XPackTest::test_fileset_file_030_threatintel
[2021-09-15T18:35:22.972Z] 9.80s call     x-pack/filebeat/tests/system/test_xpack_modules.py::XPackTest::test_fileset_file_159_cisco
[2021-09-15T18:35:22.972Z] 9.64s call     x-pack/filebeat/tests/system/test_xpack_modules.py::XPackTest::test_fileset_file_197_oracle
[2021-09-15T18:35:22.972Z] 9.63s call     x-pack/filebeat/tests/system/test_xpack_modules.py::XPackTest::test_fileset_file_263_gcp
[2021-09-15T18:35:22.972Z] 9.59s call     x-pack/filebeat/tests/system/test_xpack_modules.py::XPackTest::test_fileset_file_248_juniper
[2021-09-15T18:35:22.972Z] =============== 406 passed, 24 deselected in 1923.73s (0:32:03) ================
[2021-09-15T18:35:22.972Z] >> python test: Integration Testing Complete
[2021-09-15T18:35:26.375Z] Timeout set to expire in 5 min 0 sec
[2021-09-15T18:35:26.678Z] Cleaning up /var/lib/jenkins/workspace/PR-27948-3-1404dca5-587c-47b0-9f0e-3fdcde96b733
[2021-09-15T18:35:26.678Z] Change ownership of all files inside the specific folder from root/root to current user/group
[2021-09-15T18:35:26.678Z] ++ id -u
[2021-09-15T18:35:26.678Z] ++ id -g
[2021-09-15T18:35:26.678Z] + docker run -v /var/lib/jenkins/workspace/PR-27948-3-1404dca5-587c-47b0-9f0e-3fdcde96b733:/beat alpine:3.4 sh -c 'find /beat -user 0 -exec chown -h 1171:1172 {} \;'
[2021-09-15T18:35:26.678Z] Unable to find image 'alpine:3.4' locally
[2021-09-15T18:35:27.249Z] 3.4: Pulling from library/alpine
[2021-09-15T18:35:27.511Z] c1e54eec4b57: Pulling fs layer
[2021-09-15T18:35:27.772Z] c1e54eec4b57: Verifying Checksum
[2021-09-15T18:35:27.772Z] c1e54eec4b57: Download complete
[2021-09-15T18:35:28.033Z] c1e54eec4b57: Pull complete
[2021-09-15T18:35:28.033Z] Digest: sha256:b733d4a32c4da6a00a84df2ca32791bb03df95400243648d8c539e7b4cce329c
[2021-09-15T18:35:28.033Z] Status: Downloaded newer image for alpine:3.4
[2021-09-15T18:35:29.993Z] + set -e
[2021-09-15T18:35:29.993Z] + echo 'Change permissions with write access of all files inside the specific folder'
[2021-09-15T18:35:29.993Z] Change permissions with write access of all files inside the specific folder
[2021-09-15T18:35:29.993Z] + chmod -R +w /var/lib/jenkins/workspace/PR-27948-3-1404dca5-587c-47b0-9f0e-3fdcde96b733
[2021-09-15T18:35:30.611Z] Running in /var/lib/jenkins/workspace/PR-27948-3-1404dca5-587c-47b0-9f0e-3fdcde96b733/src/github.com/elastic/beats/build
[2021-09-15T18:35:30.914Z] + rm -rf ve
[2021-09-15T18:35:30.914Z] + find . -type d -name vendor -exec rm -r {} ;
[2021-09-15T18:35:31.246Z] + python .ci/scripts/pre_archive_test.py
[2021-09-15T18:35:33.795Z] Copy ./x-pack/filebeat/build into build/x-pack/filebeat/build
[2021-09-15T18:35:33.817Z] Running in /var/lib/jenkins/workspace/PR-27948-3-1404dca5-587c-47b0-9f0e-3fdcde96b733/src/github.com/elastic/beats/build
[2021-09-15T18:35:33.836Z] Recording test results
[2021-09-15T18:35:36.124Z] [Checks API] No suitable checks publisher found.
[2021-09-15T18:35:36.504Z] + go clean -modcache
[2021-09-15T18:35:39.910Z] Timeout set to expire in 5 min 0 sec
[2021-09-15T18:35:40.260Z] Cleaning up /var/lib/jenkins/workspace/PR-27948-3-1404dca5-587c-47b0-9f0e-3fdcde96b733
[2021-09-15T18:35:40.260Z] Change ownership of all files inside the specific folder from root/root to current user/group
[2021-09-15T18:35:40.260Z] ++ id -u
[2021-09-15T18:35:40.260Z] ++ id -g
[2021-09-15T18:35:40.260Z] + docker run -v /var/lib/jenkins/workspace/PR-27948-3-1404dca5-587c-47b0-9f0e-3fdcde96b733:/beat alpine:3.4 sh -c 'find /beat -user 0 -exec chown -h 1171:1172 {} \;'
[2021-09-15T18:35:50.279Z] + set -e
[2021-09-15T18:35:50.279Z] + echo 'Change permissions with write access of all files inside the specific folder'
[2021-09-15T18:35:50.279Z] Change permissions with write access of all files inside the specific folder
[2021-09-15T18:35:50.279Z] + chmod -R +w /var/lib/jenkins/workspace/PR-27948-3-1404dca5-587c-47b0-9f0e-3fdcde96b733
[2021-09-15T18:35:50.341Z] Running in /var/lib/jenkins/workspace/PR-27948-3-1404dca5-587c-47b0-9f0e-3fdcde96b733
[2021-09-15T18:35:54.132Z] + gsutil --version
[2021-09-15T18:35:55.561Z] Masking supported pattern matches of $FILE_CREDENTIAL
[2021-09-15T18:35:55.876Z] + gcloud auth activate-service-account --key-file ****
[2021-09-15T18:35:56.453Z] Activated service account credentials for: [[email protected]]
[2021-09-15T18:35:57.033Z] + gsutil -m -q cp eC1wYWNrL2ZpbGViZWF0LW1vZHVsZS1jb21wYXQtNy4xMTZkNDgzNDUwZDhjZTk3MmMzODYwMWRjZDc4OTU5NTM2NDZmYjIxZWQ gs://beats-ci-temp/ci/cache/
[2021-09-15T18:35:59.091Z] Stage "Extended" skipped due to earlier failure(s)
[2021-09-15T18:35:59.131Z] Stage "Packaging" skipped due to earlier failure(s)
[2021-09-15T18:35:59.172Z] Stage "Packaging-Pipeline" skipped due to earlier failure(s)
[2021-09-15T18:35:59.241Z] Running in /var/lib/jenkins/workspace/Beats_beats_PR-27948/src/github.com/elastic/beats
[2021-09-15T18:36:00.566Z] Running on Jenkins in /var/lib/jenkins/workspace/Beats_beats_PR-27948
[2021-09-15T18:36:00.633Z] [INFO] getVaultSecret: Getting secrets
[2021-09-15T18:36:00.687Z] Masking supported pattern matches of $VAULT_ADDR or $VAULT_ROLE_ID or $VAULT_SECRET_ID
[2021-09-15T18:36:01.409Z] + chmod 755 generate-build-data.sh
[2021-09-15T18:36:01.409Z] + ./generate-build-data.sh https://beats-ci.elastic.co/blue/rest/organizations/jenkins/pipelines/Beats/beats/PR-27948/ https://beats-ci.elastic.co/blue/rest/organizations/jenkins/pipelines/Beats/beats/PR-27948/runs/3 FAILURE 3953884
[2021-09-15T18:36:01.409Z] INFO: curl https://beats-ci.elastic.co/blue/rest/organizations/jenkins/pipelines/Beats/beats/PR-27948/runs/3/steps/?limit=10000 -o steps-info.json
[2021-09-15T18:36:07.890Z] INFO: curl https://beats-ci.elastic.co/blue/rest/organizations/jenkins/pipelines/Beats/beats/PR-27948/runs/3/tests/?status=FAILED -o tests-errors.json

🐛 Flaky test report

❕ There are test failures but not known flaky tests.

Expand to view the summary

Test stats 🧪

Test Results
Failed 4
Passed 20056
Skipped 1386
Total 21446

Genuine test errors 4

💔 There are test failures but not known flaky tests, most likely a genuine test failure.

  • Name: Build&Test / metricbeat-pythonIntegTest / test_info – metricbeat.module.redis.test_redis.Test_0
  • Name: Build&Test / metricbeat-pythonIntegTest / test_module_processors – metricbeat.module.redis.test_redis.Test_0
  • Name: Build&Test / metricbeat-pythonIntegTest / test_info – metricbeat.module.redis.test_redis.Test_1
  • Name: Build&Test / metricbeat-pythonIntegTest / test_module_processors – metricbeat.module.redis.test_redis.Test_1

@mergify
Copy link
Contributor

mergify bot commented Sep 15, 2021

This pull request is now in conflicts. Could you fix it? 🙏
To fixup this pull request, you can check out it locally. See documentation: https://help.github.com/articles/checking-out-pull-requests-locally/

git fetch upstream
git checkout -b remove-deprecated-fields-redis upstream/remove-deprecated-fields-redis
git merge upstream/master
git push upstream remove-deprecated-fields-redis

@mergify
Copy link
Contributor

mergify bot commented Sep 22, 2021

This pull request does not have a backport label. Could you fix it @aspacca? 🙏
To fixup this pull request, you need to add the backport labels for the needed
branches, such as:

  • backport-v./d./d./d is the label to automatically backport to the 7./d branch. /d is the digit

NOTE: backport-skip has been added to this pull request.

@mergify mergify bot added the backport-skip Skip notification from the automated backport with mergify label Sep 22, 2021
@aspacca aspacca closed this Oct 5, 2021
@aspacca aspacca deleted the remove-deprecated-fields-redis branch October 5, 2021 08:26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
backport-skip Skip notification from the automated backport with mergify needs_team Indicates that the issue/PR needs a Team:* label
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants