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

[Added] MQTT: QoS2 support #4349

Merged
merged 1 commit into from Aug 29, 2023
Merged

[Added] MQTT: QoS2 support #4349

merged 1 commit into from Aug 29, 2023

Conversation

levb
Copy link
Contributor

@levb levb commented Jul 31, 2023

@derekcollison @neilalexander @kozlovic

Summary

Adds MQTT QoS2 support

server/mqtt.go Show resolved Hide resolved
server/mqtt.go Outdated Show resolved Hide resolved
server/mqtt.go Outdated Show resolved Hide resolved
server/mqtt_test.go Show resolved Hide resolved
server/client.go Outdated Show resolved Hide resolved
server/mqtt.go Outdated Show resolved Hide resolved
server/mqtt.go Show resolved Hide resolved
server/mqtt.go Outdated Show resolved Hide resolved
server/mqtt.go Outdated Show resolved Hide resolved
server/mqtt.go Show resolved Hide resolved
server/mqtt.go Show resolved Hide resolved
server/mqtt.go Outdated Show resolved Hide resolved
server/mqtt.go Show resolved Hide resolved
server/mqtt_test.go Show resolved Hide resolved
server/mqtt.go Outdated Show resolved Hide resolved
server/mqtt.go Outdated Show resolved Hide resolved
server/mqtt.go Outdated Show resolved Hide resolved
server/mqtt.go Outdated Show resolved Hide resolved
Copy link
Member

@kozlovic kozlovic left a comment

Choose a reason for hiding this comment

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

Temporary review (to not risk losing pending comments ;-))

server/client.go Outdated Show resolved Hide resolved
server/mqtt.go Outdated Show resolved Hide resolved
server/mqtt.go Outdated Show resolved Hide resolved
server/mqtt.go Outdated Show resolved Hide resolved
server/mqtt.go Outdated Show resolved Hide resolved
server/mqtt.go Outdated Show resolved Hide resolved
server/mqtt.go Outdated Show resolved Hide resolved
server/mqtt.go Outdated Show resolved Hide resolved
server/mqtt.go Outdated Show resolved Hide resolved
server/mqtt.go Outdated Show resolved Hide resolved
Copy link
Member

@kozlovic kozlovic left a comment

Choose a reason for hiding this comment

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

Finished my review but there are lots of tests that are failing, so clearly some issues. I also need to check that when we "store" (a QoS1/2) a message, I believe that the delivery to JS consumer is automatically initiated, which I think would break the MQTT workflow with PUBREC/REL/COMP. Also note that once a JS message is stored (and delivered to JS consumer), it may be redelivered automatically by JetStream when no ack is received. Again, not sure if that throws a wrench into the compliance.

server/mqtt.go Outdated Show resolved Hide resolved
server/mqtt.go Outdated Show resolved Hide resolved
server/mqtt.go Outdated Show resolved Hide resolved
server/mqtt.go Outdated Show resolved Hide resolved
server/mqtt.go Outdated Show resolved Hide resolved
server/mqtt.go Outdated Show resolved Hide resolved
server/mqtt.go Outdated Show resolved Hide resolved
server/mqtt.go Outdated Show resolved Hide resolved
server/mqtt.go Outdated Show resolved Hide resolved
server/mqtt.go Show resolved Hide resolved
server/mqtt.go Outdated Show resolved Hide resolved
server/mqtt.go Show resolved Hide resolved
server/mqtt.go Outdated Show resolved Hide resolved
server/mqtt.go Outdated Show resolved Hide resolved
server/mqtt.go Outdated Show resolved Hide resolved
server/mqtt.go Outdated Show resolved Hide resolved
server/mqtt.go Outdated Show resolved Hide resolved
server/mqtt.go Outdated Show resolved Hide resolved
server/mqtt.go Outdated Show resolved Hide resolved
server/mqtt.go Show resolved Hide resolved
server/mqtt_test.go Show resolved Hide resolved
server/mqtt.go Show resolved Hide resolved
@levb levb changed the title wip: MQTT: receive QoS2 messages [Added] MQTT: QoS2 support Aug 15, 2023
server/mqtt_test.go Outdated Show resolved Hide resolved
server/mqtt_test.go Outdated Show resolved Hide resolved
server/mqtt_test.go Outdated Show resolved Hide resolved
server/mqtt.go Show resolved Hide resolved
server/mqtt.go Outdated Show resolved Hide resolved
server/mqtt.go Outdated Show resolved Hide resolved
server/mqtt.go Outdated Show resolved Hide resolved
server/mqtt.go Show resolved Hide resolved
server/mqtt.go Outdated Show resolved Hide resolved
server/mqtt_test.go Outdated Show resolved Hide resolved
@levb
Copy link
Contributor Author

levb commented Aug 15, 2023

@kozlovic sorry about all the debugging in mqtt_test.go. It is not yet ready for review, I am actively working on it, I'll re-request your review on it soon, but thx!!!

server/mqtt.go Outdated Show resolved Hide resolved
@kozlovic
Copy link
Member

@levb Do you need me to do the final review or are you still working on it?

@levb
Copy link
Contributor Author

levb commented Aug 17, 2023

@kozlovic not yet, I am hoping to have it for you tomorrow.

@levb levb mentioned this pull request Aug 18, 2023
server/mqtt.go Outdated Show resolved Hide resolved
server/mqtt.go Outdated Show resolved Hide resolved
levb added a commit that referenced this pull request Aug 23, 2023
Adds QoS2 related tests and 2 uncovered bug fixes to
#4349.

Still WIP/to come:
 - test that QoS2 session state (pubrel) gets saved/restored. 
- figure out a test and a solution for saving/restoring the PI
mapping/use state when server is restarted

@kozlovic I'd really appreciate suggestions on
- (a) more tests to add (or modify for QoS2), especially WRT cleanup,
clustering
- (b) what to do about `[MQTT-3.10.4-3]`, see comments in
`TestMQTTQoS2InflightMsgsDeliveredAfterUnsubscribe`
@levb levb requested a review from kozlovic August 23, 2023 16:13
@levb levb marked this pull request as ready for review August 26, 2023 23:25
@levb levb requested a review from a team as a code owner August 26, 2023 23:25
@levb
Copy link
Contributor Author

levb commented Aug 26, 2023

@kozlovic I think I addressed previous comments and this PR is now ready for a final review. I'll make a separate PR to eliminate tkDomain.

server/mqtt.go Show resolved Hide resolved
server/mqtt.go Show resolved Hide resolved
@levb levb requested a review from kozlovic August 28, 2023 17:30
Copy link
Member

@derekcollison derekcollison left a comment

Choose a reason for hiding this comment

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

In general for PRs we rebase, not merge.

@levb
Copy link
Contributor Author

levb commented Aug 28, 2023

@derekcollison can we squash-merge this? There were so many "substantial" (as opposed to merging from dev) commits here that keeping the commit history would hardly make sense. I can squash everything in a single commit myself and force-push once we have all conversations resolved? LMK what is the right thing to do.

@kozlovic
Copy link
Member

@levb What Derek said is that when you want to update your PR's branch with the dev branch, you could have done git rebase dev instead of the merge to have all your changes "sit" on top of latest from dev.

But for sure, once you get the green light for this PR, I would recommend that you squash everything to a single commit and push-force and let Travis re-run all tests, then if all is OK, you will merge into dev.

Copy link
Member

@kozlovic kozlovic left a comment

Choose a reason for hiding this comment

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

LGTM

@levb
Copy link
Contributor Author

levb commented Aug 28, 2023

@derekcollison rebased/squashed

@derekcollison
Copy link
Member

Will let you two handle review and merge.

Copy link
Member

@neilalexander neilalexander left a comment

Choose a reason for hiding this comment

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

Few minor things but otherwise the bulk of the PR looks great!

server/mqtt.go Show resolved Hide resolved
server/mqtt.go Show resolved Hide resolved
server/mqtt.go Show resolved Hide resolved
server/mqtt.go Show resolved Hide resolved
Copy link
Member

@neilalexander neilalexander left a comment

Choose a reason for hiding this comment

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

LGTM

@levb levb merged commit bd93f08 into dev Aug 29, 2023
2 checks passed
@levb levb deleted the lev-mqtt-qos2 branch August 29, 2023 18:09
levb added a commit that referenced this pull request Aug 29, 2023
…4440)

(Partially?) addresses
#4349 (comment)

@kozlovic @neilalexander I did not remove the use of `domainTk` in the
session subject since it seems to have significance to it; removing it
failed `TestMQTTSessionsDifferentDomains` and I did not understand the
specifics of the issue enough. Please let me know your thoughts.
derekcollison added a commit that referenced this pull request Sep 4, 2023
- [x] Branch rebased on top of current main (`git pull --rebase origin
dev`)
- [x] Changes squashed to a single commit (described
[here](http://gitready.com/advanced/2009/02/10/squashing-commits-with-rebase.html))
 - [ ] Build is green in Travis CI

### Changes proposed in this pull request:

Removed `qos2` reference from the MQTT outgoing stream name and
subjects.

Rationale: As I was reviewing the documentation and thinking how to move
forward with MQTT, I am inclined to use the `$MQTT_out` stream and
session-specific consumers (as opposed to subscription-specific) for all
QOS-related packet delivery and PI persistence. I think I will be able
to repurpose it "as is", so proposing the generic name change.

Since these (stream, consumer, subscriptions) are newly introduced in
#4349 and have not yet been
released, this is a safe change.
levb added a commit that referenced this pull request Sep 25, 2023
Took the mqtt files files from f9a2efd
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.

None yet

4 participants