Skip to content
New issue

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

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

Already on GitHub? Sign in to your account

feat(disk-transform): prepare for qcow disks #8228

Draft
wants to merge 8 commits into
base: master
Choose a base branch
from

Conversation

fbeauchamp
Copy link
Collaborator

@fbeauchamp fbeauchamp commented Jan 8, 2025

Description

the goal of this PR is to centralize all the logic that transform disks in a dedicated module. The typescript is fully contained in @xen-orchestra/disk-transform

Instantiate a portable format from a vhd on an remote, and then write it to another remote

Future PRs will add more sources ( xapi, nbd, cbt, vhd stream, vmdk, ova) , and target (xva, vhd stream )

Checklist

  • Commit
    • Title follows commit conventions
    • Reference the relevant issue (Fixes #007, See xoa-support#42, See https://...)
    • If bug fix, add Introduced by
  • Changelog
    • If visible by XOA users, add changelog entry
    • Update "Packages to release" in CHANGELOG.unreleased.md
  • PR
    • If UI changes, add screenshots
    • If not finished or not tested, open as Draft

Review process

This 2-passes review process aims to:

  • develop skills of junior reviewers
  • limit the workload for senior reviewers
  • limit the number of unnecessary changes by the author
  1. The author creates a PR.
  2. Review process:
    1. The author assigns the junior reviewer.
    2. The junior reviewer conducts their review:
      • Resolves their comments if they are addressed.
      • Adds comments if necessary or approves the PR.
    3. The junior reviewer assigns the senior reviewer.
    4. The senior reviewer conducts their review:
      • If there are no unresolved comments on the PR → merge.
      • Otherwise, we continue with 3.
  3. The author responds to comments and/or makes corrections, and we go back to 2.

Notes:

  1. The author can request a review at any time, even if the PR is still a Draft.
  2. In theory, there should not be more than one reviewer at a time.
  3. The author should not make any changes:
    • When a reviewer is assigned.
    • Between the junior and senior reviews.

import assert from 'node:assert'

export class ForkableIterator<T> {
#forks = new Set<ForkedIterator<T>>()
Copy link
Contributor

@stephane-m-dev stephane-m-dev Jan 9, 2025

Choose a reason for hiding this comment

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

In my opinion, if you want to benefit from classes, you should also use private/public/protected/static which go with them, instead of #.

By using #, you only have the choice between public and private.
If we do class inheritance, the properties/methods will either be inaccessible to inheriting classes (private), or accessible and modifiable from everywhere (everything is public = more encapsulation).

Copy link
Member

Choose a reason for hiding this comment

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

  • # is better than private because it is enforced at runtime
  • protected does not have an equivalent in ECMAScript, I don't see any issues with using it
  • static also exists in ECMAScript
  • public is the default when neither private nor protected, I don't see what this annotation brings.

Copy link
Contributor

Choose a reason for hiding this comment

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

"# is better than private because it is enforced at runtime"

TS throws an error if you write code outside the class that accesses a private property or method. So you can't write code that accesses it from outside, it won't even reach runtime.

Copy link
Member

Choose a reason for hiding this comment

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

TypeScript does the same with private fields: https://www.typescriptlang.org/play/?#code/MYGwhgzhAEDC0G8BQ1XQMQDswFsCmAXNBAC4BOAlpgOZIprAD2mpZArsCY2QBTb5FWVagEpE9NGhIALChAB0WXHmgBeaPzwToAXyR6kTFiWiM1GvAHc4PAOQAzRo1si6R0huXnGizUA

But private fields are standard ECMAScript and are enforced even types are stripped.

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.

3 participants