Skip to content

Improvement/s3 utils 191 #337

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

Merged
merged 2 commits into from
Jun 10, 2025
Merged

Improvement/s3 utils 191 #337

merged 2 commits into from
Jun 10, 2025

Conversation

benzekrimaha
Copy link
Contributor

@benzekrimaha benzekrimaha commented May 6, 2025

Issue: S3UTILS-191

@benzekrimaha benzekrimaha force-pushed the improvement/S3UTILS-191 branch 3 times, most recently from 900271a to 02d89bc Compare May 6, 2025 10:46
package.json Outdated
@@ -28,7 +28,7 @@
"dependencies": {
"@senx/warp10": "^2.0.3",
"JSONStream": "^1.3.5",
"arsenal": "git+https://github.com/scality/arsenal#8.2.8",
"arsenal": "git+https://github.com/scality/arsenal#22a5462d7d9bdec0d21a0e9fb484594af35c1cee",
Copy link
Contributor Author

Choose a reason for hiding this comment

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

Please note that this will be switched to the arsenal adequate version once the current in review PR with a fix is merged: scality/Arsenal#2371

@benzekrimaha benzekrimaha force-pushed the improvement/S3UTILS-171-bump-deps branch from 254ba0b to ba16cc2 Compare May 6, 2025 10:48
@benzekrimaha benzekrimaha force-pushed the improvement/S3UTILS-191 branch from 02d89bc to 3d693cb Compare May 6, 2025 10:51
@benzekrimaha benzekrimaha marked this pull request as ready for review May 6, 2025 10:52
@benzekrimaha benzekrimaha force-pushed the improvement/S3UTILS-191 branch from 4fbf388 to 6ca91b6 Compare May 6, 2025 10:52
@benzekrimaha benzekrimaha force-pushed the improvement/S3UTILS-191 branch from afb8abd to 1c533be Compare May 6, 2025 12:38
Base automatically changed from improvement/S3UTILS-171-bump-deps to development/1.16 May 6, 2025 12:40
@bert-e
Copy link
Contributor

bert-e commented May 6, 2025

Hello benzekrimaha,

My role is to assist you with the merge of this
pull request. Please type @bert-e help to get information
on this process, or consult the user documentation.

Available options
name description privileged authored
/after_pull_request Wait for the given pull request id to be merged before continuing with the current one.
/bypass_author_approval Bypass the pull request author's approval
/bypass_build_status Bypass the build and test status
/bypass_commit_size Bypass the check on the size of the changeset TBA
/bypass_incompatible_branch Bypass the check on the source branch prefix
/bypass_jira_check Bypass the Jira issue check
/bypass_peer_approval Bypass the pull request peers' approval
/bypass_leader_approval Bypass the pull request leaders' approval
/approve Instruct Bert-E that the author has approved the pull request. ✍️
/create_pull_requests Allow the creation of integration pull requests.
/create_integration_branches Allow the creation of integration branches.
/no_octopus Prevent Wall-E from doing any octopus merge and use multiple consecutive merge instead
/unanimity Change review acceptance criteria from one reviewer at least to all reviewers
/wait Instruct Bert-E not to run until further notice.
Available commands
name description privileged
/help Print Bert-E's manual in the pull request.
/status Print Bert-E's current status in the pull request TBA
/clear Remove all comments from Bert-E from the history TBA
/retry Re-start a fresh build TBA
/build Re-start a fresh build TBA
/force_reset Delete integration branches & pull requests, and restart merge process from the beginning.
/reset Try to remove integration branches unless there are commits on them which do not appear on the source branch.

Status report is not available.

@bert-e
Copy link
Contributor

bert-e commented May 6, 2025

Waiting for approval

The following approvals are needed before I can proceed with the merge:

  • the author

  • 2 peers

@@ -180,13 +174,11 @@ describe('CountItems::CountWorker', () => {
sendFn: testSendFn,
client: mongoMock,
});
w.getIsTransient = jest.fn((bucketInfo, cb) => cb(null, true));
Copy link
Contributor

Choose a reason for hiding this comment

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

just mocking getIsTransient means we basically do not execute this code...

  • Best to have some test exercising the "whole" code
  • If needed, we may use a mock (in some tests, ideally not all) to simulate specific conditions/results/...
  • In any case, need extra tests cases to verify the new functions behave somewhat correctly (esp. do not crash) and the information ("is transient") is used appropriately

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Copy link
Contributor

Choose a reason for hiding this comment

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

Looking at the tests, it does not cover all branches of the code.

In addition, these tests are overly complicated to tests 2 very simple functions : would seem much easier (both to write and to review) to have "simpler" tests to exercise all code path in getIsTransient() (and the nested pensieveLocationIsTransient) by just calling this function.

@scality scality deleted a comment from bert-e May 16, 2025
mongoMock.getObjectMDStats.mockImplementationOnce((_a, _b, _c, _d, cb) => cb(null, { value: 42 }));
w.countItems(bucketInfo, (err, results) => {
expect(err).toBeNull();
expect(results).toEqual({ value: 42 });
done();
});
});

test('should use real getIsTransient and not crash', done => {
Copy link
Contributor

@francoisferrand francoisferrand May 16, 2025

Choose a reason for hiding this comment

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

should have at least 2 scenarios, depending on this.client.isLocationTransient (since there are multiple code path).

the point is not just to see that countItems is calling getIsTransient, but really to execute the code in getIsTransient to ensure it will not fail in production... (it may be done though other tests, calling the function directly!)

(alternatively, since we use a wrapper of MongoClient in here: if you add the function there they can be tested in mongoclient tests, and you don't need to change the countWorker tests)

@benzekrimaha benzekrimaha force-pushed the improvement/S3UTILS-191 branch from 796b65a to f8c0988 Compare May 20, 2025 14:47
@@ -180,13 +174,11 @@ describe('CountItems::CountWorker', () => {
sendFn: testSendFn,
client: mongoMock,
});
w.getIsTransient = jest.fn((bucketInfo, cb) => cb(null, true));
Copy link
Contributor

Choose a reason for hiding this comment

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

Looking at the tests, it does not cover all branches of the code.

In addition, these tests are overly complicated to tests 2 very simple functions : would seem much easier (both to write and to review) to have "simpler" tests to exercise all code path in getIsTransient() (and the nested pensieveLocationIsTransient) by just calling this function.

Comment on lines 220 to 221
test('should use real getIsTransient and not crash', done => {
const testSendFn = jest.fn();
Copy link
Contributor

Choose a reason for hiding this comment

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

test name feels weird : there is no "feature" of the code to use a "real getIsTransient", it is really just that getIsTransient is mocked in all tests...
--> should find a name that better matches what "feature" of the code this test exercises (or take this as a hint that indeed we are mixing approaches here, and we shoudl either not use a mock in the tests -focus on e2e function, covering all cases in data-, or keep the mock to test the "counting" part and create other tests to verify getIsTransient works as expected)

@@ -22,7 +21,6 @@ describe('CountItems::CountWorker', () => {
setup: [null],
close: [],
isConnected: false,
getIsTransient: [],
Copy link
Contributor

Choose a reason for hiding this comment

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

in the previous code, we used to have different getIsTransient() mock results depending on the test case : i.e. either [] (i.e. no error, not transient) or [null, true] (i.e. no error, transient)

However, with your change the mock always returns true : and we don't actually test the "usual" scenario we are in...

@bert-e
Copy link
Contributor

bert-e commented Jun 4, 2025

Conflict

There is a conflict between your branch improvement/S3UTILS-191 and the
destination branch development/1.16.

Please resolve the conflict on the feature branch (improvement/S3UTILS-191).

git fetch && \
git checkout origin/improvement/S3UTILS-191 && \
git merge origin/development/1.16

Resolve merge conflicts and commit

git push origin HEAD:improvement/S3UTILS-191

@bert-e
Copy link
Contributor

bert-e commented Jun 4, 2025

Waiting for approval

The following approvals are needed before I can proceed with the merge:

  • the author

  • 2 peers

@benzekrimaha benzekrimaha force-pushed the improvement/S3UTILS-191 branch from 19b657a to 35317be Compare June 5, 2025 10:01
@bert-e
Copy link
Contributor

bert-e commented Jun 5, 2025

Conflict

There is a conflict between your branch improvement/S3UTILS-191 and the
destination branch development/1.16.

Please resolve the conflict on the feature branch (improvement/S3UTILS-191).

git fetch && \
git checkout origin/improvement/S3UTILS-191 && \
git merge origin/development/1.16

Resolve merge conflicts and commit

git push origin HEAD:improvement/S3UTILS-191

@benzekrimaha benzekrimaha force-pushed the improvement/S3UTILS-191 branch 2 times, most recently from f54a8a7 to aef3d7c Compare June 5, 2025 11:30
@bert-e
Copy link
Contributor

bert-e commented Jun 5, 2025

Waiting for approval

The following approvals are needed before I can proceed with the merge:

  • the author

  • 2 peers

@benzekrimaha benzekrimaha force-pushed the improvement/S3UTILS-191 branch from aef3d7c to deebef4 Compare June 5, 2025 11:42
@benzekrimaha
Copy link
Contributor Author

/approve

@bert-e
Copy link
Contributor

bert-e commented Jun 10, 2025

I have successfully merged the changeset of this pull request
into targetted development branches:

  • ✔️ development/1.16

The following branches have NOT changed:

  • development/1.13
  • development/1.14
  • development/1.15
  • development/1.4

Please check the status of the associated issue S3UTILS-191.

Goodbye benzekrimaha.

The following options are set: approve

@bert-e bert-e merged commit deebef4 into development/1.16 Jun 10, 2025
10 checks passed
@bert-e bert-e deleted the improvement/S3UTILS-191 branch June 10, 2025 06:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants