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

Create service provider defined QoS Profile #138

Merged
merged 26 commits into from
Jun 7, 2023

Conversation

RandyLevensalor
Copy link
Collaborator

Implememnted issue #125

@RandyLevensalor
Copy link
Collaborator Author

@eric-murray I think that I've incorporated your feedback into the PR. But there's a decent chance that I missed something. Thanks!

Copy link
Collaborator

@jlurien jlurien left a comment

Choose a reason for hiding this comment

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

Thanks for the PR. Some initial comments from a first review

@@ -279,7 +426,9 @@ components:
applicationServerPorts:
$ref: "#/components/schemas/PortsSpec"
qosProfile:
$ref: "#/components/schemas/QosProfile"
oneOf:
Copy link
Collaborator

Choose a reason for hiding this comment

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

We should consolidate both within the same model. Legacy qosProfile values should correspond also to some profiles returned with the new model, so they should have an Id as well. We may think of defining per profile both an Id (UUID-like) and some short of alias-name, such as previous ones (QOS_L, QOS_E, etc), and allow to use any of them

Copy link
Collaborator

Choose a reason for hiding this comment

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

In general, we should still retain the option of using a qosProfile without doing a GET of available qosProfiles. As we know, a qosProfile string's associated SLAs are agreed outside of the scope of this spec. If an user deciding on using a profile, they know what they are getting. In this case, the mandatory GET option needed to get an id seems unnecessary to me.

Copy link
Collaborator

Choose a reason for hiding this comment

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

@jlurien
I assume the intention is to drop this support for the "legacy" QoS profiles at some stage, so QosProfile would be deleted and qosProfile would then be of type QoSProfileId only. If that is the intention, then we should keep the restriction that QoSProfileId be a uuid (I agree with your comment below) and live with this workaround until it is agreed that the current QoS profiles are no longer useful.

If that is not the intention, and the legacy profiles must always be supported, then simply redefining QoSProfileId to have minLength: 5 would achieve that, albeit at the cost of more complex validation.

Copy link
Collaborator

Choose a reason for hiding this comment

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

@RandyLevensalor @eric-murray @jlurien @hdamker @emil-cheung @ToshiWakayama-KDDI @patrice-conil

I guess we as a community should make a decision now on how to proceed with legacy qosProfile. I made a comment here regarding this. I believe we should be able to combine both legacy and extended qos profiles now as the api is not stable yet.

Copy link
Collaborator

Choose a reason for hiding this comment

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

To me the proposal by @sfnuser makes sense. I don't see why the current predefined qosProfiles should be treated differently once we have the new discovery functionality in place.

We should also decide if API spec enforce some predefined QoS Profile to be offered by all implementations, and what is the best unique identifier for a profile, a UUID or some more friendly label such as current QOS_X. Problem with UUID is that they are not friendly for predefined profiles.

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

To me the proposal by @sfnuser makes sense. I don't see why the current predefined qosProfiles should be treated differently once we have the new discovery functionality in place.

I can see going down this path of not using a UUID for the QoS profiles and instead use a name as the id. We can define this name to be a unique string that matches this regex ^[a-zA-Z0-9_]+$

The length of the name can be from 1 to 128 characters?

With this, the name would replace the ID as the unique identifier.

I'd also like to add an optional displayName attribute as a string that could be easier to read, and can contain spaces and other special characters. This would replace the current name attribute and would not be unique.

Since the QOS_S etc. can be a part of this, I think that all of the other attributes would become optional without default values. This is due to the fact that QOS_S etc. can be defined by only using the name field.

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

One more note. Using a name with some constraints is consistent with the way amazon implemented their EC2 instance types. EC2 instance sizing is a rough analogy for the QoSProfiles. https://aws.amazon.com/ec2/instance-types. So this pattern should be familiar to many application developers.

format: string
status:
$ref: "#/components/schemas/QosProfileStatusEnum"
description: The status of the profile. See QosProfileStatusEnum for description.
Copy link
Collaborator

Choose a reason for hiding this comment

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

In general it is safer to move description to referenced Schema when possible. According to spec any sibling elements of a $ref are ignored, although some visualizers allow them. In cases where a schema is reused by several properties but description is different in each property, we may "take the risk"

@@ -279,7 +426,9 @@ components:
applicationServerPorts:
$ref: "#/components/schemas/PortsSpec"
qosProfile:
$ref: "#/components/schemas/QosProfile"
oneOf:
Copy link
Collaborator

Choose a reason for hiding this comment

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

In general, we should still retain the option of using a qosProfile without doing a GET of available qosProfiles. As we know, a qosProfile string's associated SLAs are agreed outside of the scope of this spec. If an user deciding on using a profile, they know what they are getting. In this case, the mandatory GET option needed to get an id seems unnecessary to me.

@@ -279,7 +426,9 @@ components:
applicationServerPorts:
$ref: "#/components/schemas/PortsSpec"
qosProfile:
$ref: "#/components/schemas/QosProfile"
oneOf:
Copy link
Collaborator

Choose a reason for hiding this comment

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

@RandyLevensalor @eric-murray @jlurien @hdamker @emil-cheung @ToshiWakayama-KDDI @patrice-conil

I guess we as a community should make a decision now on how to proceed with legacy qosProfile. I made a comment here regarding this. I believe we should be able to combine both legacy and extended qos profiles now as the api is not stable yet.

@hdamker
Copy link
Collaborator

hdamker commented May 4, 2023

@RandyLevensalor Could you make a list of the topics we need to discuss tomorrow in our call - best with the options we have? (and try to resolve the others before the call, just if possible)

@RandyLevensalor
Copy link
Collaborator Author

@hdamker I'll get the updated PR posted this evening.

@eric-murray thanks for all of your comments and feedback. I'm working on incorporating it.

@RandyLevensalor
Copy link
Collaborator Author

@hdamker

Open items to discuss:

  1. Behaviour and parameters of querying QoS Profiles. The latest version is very limited and can be updated in a subsequent release.
  2. Is mimumumTargetRate acceptable or would guaranteed be more better.
  3. The latest draft eliminates the unique ID in favor of a unique name with minimal constraints. Is this the approach that we want to take?
  4. Descriptions in the OpenAPI spec have been revised. Which ones need additional clarifications? Do these need to be duplicated in the documents as well?

@hdamker
Copy link
Collaborator

hdamker commented May 5, 2023

@RandyLevensalor thanks for the summary of open issues

4. Do these need to be duplicated in the documents as well?

No, see #144 (but we might want to keep the mapping table seperat).

These revised description address feedback in the PR and from the
sub-project meeting.
@hdamker
Copy link
Collaborator

hdamker commented Jun 4, 2023

As discussed: @sfnuser @eric-murray @jlurien please do the final check (and) if possible approval until June 6th. Feel free to create issues for later improvements of the descriptions - the goal is to get the PR merged if possible asap.

sfnuser
sfnuser previously approved these changes Jun 5, 2023
Copy link
Collaborator

@sfnuser sfnuser left a comment

Choose a reason for hiding this comment

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

Thanks @RandyLevensalor for driving this to conclusion.

@eric-murray
Copy link
Collaborator

@hdamker
It's difficult to review the overall API definition file because Randy's fork is some 80 commits behind the main branch. Whilst much of this is other files, there have been some changes qod-api.yaml that are not included in Randy's PR.

@RandyLevensalor
Can you sync your fork with the main branch (and fix any conflicts that may arise)? This has to be done sometime, so might as well do it now.

@RandyLevensalor
Copy link
Collaborator Author

@hdamker It's difficult to review the overall API definition file because Randy's fork is some 80 commits behind the main branch. Whilst much of this is other files, there have been some changes qod-api.yaml that are not included in Randy's PR.

@RandyLevensalor Can you sync your fork with the main branch (and fix any conflicts that may arise)? This has to be done sometime, so might as well do it now.

@eric-murray I've rebased the branch.

Surprisingly enough, there were no conflicts and I didn't see any regressions. Though an additional set of eyes on this will make me feel better.

eric-murray
eric-murray previously approved these changes Jun 5, 2023
Copy link
Collaborator

@eric-murray eric-murray left a comment

Choose a reason for hiding this comment

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

Thanks @RandyLevensalor

I'm happy with the structure, so am approving. Parameter descriptions can be reviewed as part of the ongoing API documentation effort!

jlurien
jlurien previously approved these changes Jun 6, 2023
Copy link
Collaborator

@jlurien jlurien left a comment

Choose a reason for hiding this comment

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

Some final suggestions and I give the approval in advance. We can refine parameters and descriptions in subsequent iterations.

Also "pathfile.diff" file should not be part of the PR

@RandyLevensalor RandyLevensalor dismissed stale reviews from jlurien, eric-murray, and sfnuser via b7826e1 June 6, 2023 15:03
@RandyLevensalor
Copy link
Collaborator Author

@jlurien Thanks for the additional suggestions. I've merged them into the PR.

jlurien
jlurien previously approved these changes Jun 6, 2023
eric-murray
eric-murray previously approved these changes Jun 6, 2023
@hdamker
Copy link
Collaborator

hdamker commented Jun 7, 2023

LGTM - thanks @sfnuser @jlurien @eric-murray for the detailed reviews and your approvals. I will try to delete the patchfile.diff and merge.

@hdamker hdamker merged commit 47388f9 into camaraproject:main Jun 7, 2023
@hdamker hdamker mentioned this pull request Jun 17, 2023
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.

6 participants