-
Type:
Improvement
-
Status:
Closed
-
Priority:
Major
-
Resolution:
Fixed
-
Affects Version/s:
3.1.1
-
-
-
-
Proposal:
Hide
WD11 1232 - 1254
Remove existing content in this section and replace with:
When a Client reconnects with CleanSession = 0, both the client and server MUST redeliver any previous
in-flight messages. This means re-sending any unacknowledged PUBLISH packets (where QoS > 0) and PUBREL packets.
This is the only circumstance where a Client or Server is REQUIRED to redeliver messages.
Clients MAY resend SUBSCRIBE and UNSUBSCRIBE packets on reconnect but are not REQUIRED to do this.
While a modern TCP network is unlikely to lose packets, a Client or Server is permitted to attempt redelivery
at other times. However, redelivery is not encouraged unless a network failure has been detected.
Non-normative comment
Historically retransmission of Control Packets was required to overcome data loss on some older TCP networks.
This might remain a concern where MQTT 3.1.1 implementations are to be deployed in such environments.
Show
WD11 1232 - 1254
Remove existing content in this section and replace with:
When a Client reconnects with CleanSession = 0, both the client and server MUST redeliver any previous
in-flight messages. This means re-sending any unacknowledged PUBLISH packets (where QoS > 0) and PUBREL packets.
This is the only circumstance where a Client or Server is REQUIRED to redeliver messages.
Clients MAY resend SUBSCRIBE and UNSUBSCRIBE packets on reconnect but are not REQUIRED to do this.
While a modern TCP network is unlikely to lose packets, a Client or Server is permitted to attempt redelivery
at other times. However, redelivery is not encouraged unless a network failure has been detected.
Non-normative comment
Historically retransmission of Control Packets was required to overcome data loss on some older TCP networks.
This might remain a concern where MQTT 3.1.1 implementations are to be deployed in such environments.
WD08 (section 4.3) states that if no response is received from PUBLISH, PUBREL, SUBSCRIBE, UNSUBSCRIBE within a reasonable period of time then the sender may retry delivery.
This attempts to cater for unreliable TCP/IP networks. Since modern compliant TCP/IP networks should not lose packets, then the sender should not retry unless a network failure is detected.
The spec should be changed to reflect this and add non-normative content to describe the historical problem.
{"report":{"apdex":1,"isInitial":true,"journeyId":"1e662570-9583-420e-a47f-8a33c88cf8ce","key":"jira.project.issue.view-issue","navigationType":0,"readyForUser":550.5999999046326,"redirectCount":0,"resourceLoadedEnd":502.2000002861023,"resourceLoadedStart":160.59999990463257,"resourceTiming":[{"duration":51.80000019073486,"initiatorType":"link","name":"https://issues.oasis-open.org/s/3edeca31ab9ba77980aae0809fbe7121-CDN/nu8zej/803004/aeedb5937bed650f2f0cc4ec9ceaa5d3/0a4716d29b2d5b1bdcdb168b4efc119e/_/download/contextbatch/css/_super/batch.css","startTime":160.59999990463257,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":160.59999990463257,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":212.40000009536743,"responseStart":0,"secureConnectionStart":0},{"duration":51.80000019073486,"initiatorType":"link","name":"https://issues.oasis-open.org/s/7d2823769c2e7b66e860863fe879b7f8-CDN/nu8zej/803004/aeedb5937bed650f2f0cc4ec9ceaa5d3/9aebb1c0aaa4c36289529757ec9dbb54/_/download/contextbatch/css/project.issue.navigator,jira.view.issue,jira.global,atl.general,-_super/batch.css?agile_global_admin_condition=true&jag=true&jira.create.linked.issue=true&richediton=true","startTime":160.90000009536743,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":160.90000009536743,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":212.7000002861023,"responseStart":0,"secureConnectionStart":0},{"duration":51.700000286102295,"initiatorType":"link","name":"https://issues.oasis-open.org/s/d41d8cd98f00b204e9800998ecf8427e-CDN/nu8zej/803004/aeedb5937bed650f2f0cc4ec9ceaa5d3/8.0.5/_/download/batch/com.atlassian.auiplugin:split_aui.pattern.label/com.atlassian.auiplugin:split_aui.pattern.label.css","startTime":161.09999990463257,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":161.09999990463257,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":212.80000019073486,"responseStart":0,"secureConnectionStart":0},{"duration":51.59999990463257,"initiatorType":"link","name":"https://issues.oasis-open.org/s/645acc233eb869f48a571293b8358a7d-CDN/nu8zej/803004/aeedb5937bed650f2f0cc4ec9ceaa5d3/1.0/_/download/batch/jira.webresources:global-static-adgs/jira.webresources:global-static-adgs.css","startTime":161.30000019073486,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":161.30000019073486,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":212.90000009536743,"responseStart":0,"secureConnectionStart":0},{"duration":51.5,"initiatorType":"link","name":"https://issues.oasis-open.org/s/a0dd6509771c1de0667aae5429c04cda-CDN/nu8zej/803004/aeedb5937bed650f2f0cc4ec9ceaa5d3/1.0/_/download/batch/jira.webresources:global-static/jira.webresources:global-static.css","startTime":161.5,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":161.5,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":213,"responseStart":0,"secureConnectionStart":0},{"duration":81.5,"initiatorType":"script","name":"https://issues.oasis-open.org/s/e5479157e7a0c08b005e6522f2f04104-CDN/nu8zej/803004/aeedb5937bed650f2f0cc4ec9ceaa5d3/0a4716d29b2d5b1bdcdb168b4efc119e/_/download/contextbatch/js/_super/batch.js?locale=en-US","startTime":161.59999990463257,"connectEnd":161.59999990463257,"connectStart":161.59999990463257,"domainLookupEnd":161.59999990463257,"domainLookupStart":161.59999990463257,"fetchStart":161.59999990463257,"redirectEnd":0,"redirectStart":0,"requestStart":161.59999990463257,"responseEnd":243.09999990463257,"responseStart":243.09999990463257,"secureConnectionStart":161.59999990463257},{"duration":112.59999990463257,"initiatorType":"script","name":"https://issues.oasis-open.org/s/83514d5d4e8543747b02042eafcdc99c-CDN/nu8zej/803004/aeedb5937bed650f2f0cc4ec9ceaa5d3/9aebb1c0aaa4c36289529757ec9dbb54/_/download/contextbatch/js/project.issue.navigator,jira.view.issue,jira.global,atl.general,-_super/batch.js?agile_global_admin_condition=true&jag=true&jira.create.linked.issue=true&locale=en-US&richediton=true","startTime":162.30000019073486,"connectEnd":162.30000019073486,"connectStart":162.30000019073486,"domainLookupEnd":162.30000019073486,"domainLookupStart":162.30000019073486,"fetchStart":162.30000019073486,"redirectEnd":0,"redirectStart":0,"requestStart":162.30000019073486,"responseEnd":274.90000009536743,"responseStart":274.90000009536743,"secureConnectionStart":162.30000019073486},{"duration":115.09999990463257,"initiatorType":"script","name":"https://issues.oasis-open.org/s/70bb2263e59e7e1f04fbd137c80b895b-CDN/nu8zej/803004/aeedb5937bed650f2f0cc4ec9ceaa5d3/aae1242f5fc81cc6a5bb8bc963ccda29/_/download/contextbatch/js/atl.global,-_super/batch.js?locale=en-US","startTime":162.40000009536743,"connectEnd":162.40000009536743,"connectStart":162.40000009536743,"domainLookupEnd":162.40000009536743,"domainLookupStart":162.40000009536743,"fetchStart":162.40000009536743,"redirectEnd":0,"redirectStart":0,"requestStart":162.40000009536743,"responseEnd":277.5,"responseStart":277.5,"secureConnectionStart":162.40000009536743},{"duration":115.5,"initiatorType":"script","name":"https://issues.oasis-open.org/s/d41d8cd98f00b204e9800998ecf8427e-CDN/nu8zej/803004/aeedb5937bed650f2f0cc4ec9ceaa5d3/1.0/_/download/batch/jira.webresources:calendar-en/jira.webresources:calendar-en.js","startTime":162.59999990463257,"connectEnd":162.59999990463257,"connectStart":162.59999990463257,"domainLookupEnd":162.59999990463257,"domainLookupStart":162.59999990463257,"fetchStart":162.59999990463257,"redirectEnd":0,"redirectStart":0,"requestStart":162.59999990463257,"responseEnd":278.09999990463257,"responseStart":278.09999990463257,"secureConnectionStart":162.59999990463257},{"duration":115.69999980926514,"initiatorType":"script","name":"https://issues.oasis-open.org/s/d41d8cd98f00b204e9800998ecf8427e-CDN/nu8zej/803004/aeedb5937bed650f2f0cc4ec9ceaa5d3/1.0/_/download/batch/jira.webresources:calendar-localisation-moment/jira.webresources:calendar-localisation-moment.js","startTime":162.80000019073486,"connectEnd":162.80000019073486,"connectStart":162.80000019073486,"domainLookupEnd":162.80000019073486,"domainLookupStart":162.80000019073486,"fetchStart":162.80000019073486,"redirectEnd":0,"redirectStart":0,"requestStart":162.80000019073486,"responseEnd":278.5,"responseStart":278.5,"secureConnectionStart":162.80000019073486},{"duration":116.09999990463257,"initiatorType":"script","name":"https://issues.oasis-open.org/s/cda37faab827dbdf305de8efe8282062-CDN/nu8zej/803004/aeedb5937bed650f2f0cc4ec9ceaa5d3/8.0.5/_/download/batch/com.atlassian.auiplugin:split_aui.pattern.label/com.atlassian.auiplugin:split_aui.pattern.label.js?locale=en-US","startTime":162.90000009536743,"connectEnd":162.90000009536743,"connectStart":162.90000009536743,"domainLookupEnd":162.90000009536743,"domainLookupStart":162.90000009536743,"fetchStart":162.90000009536743,"redirectEnd":0,"redirectStart":0,"requestStart":162.90000009536743,"responseEnd":279,"responseStart":279,"secureConnectionStart":162.90000009536743},{"duration":217.30000019073486,"initiatorType":"link","name":"https://issues.oasis-open.org/s/07245784f53abc49bad9d9d4d36c577a-CDN/nu8zej/803004/aeedb5937bed650f2f0cc4ec9ceaa5d3/cadc4f20cc5c138dee060d42cf85f220/_/download/contextbatch/css/jira.global.look-and-feel,-_super/batch.css","startTime":163,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":163,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":380.30000019073486,"responseStart":0,"secureConnectionStart":0},{"duration":116.19999980926514,"initiatorType":"script","name":"https://issues.oasis-open.org/rest/api/1.0/shortcuts/803004/a29179d70fa8562374ee16707692af77/shortcuts.js?context=issuenavigation&context=issueaction","startTime":163.2000002861023,"connectEnd":163.2000002861023,"connectStart":163.2000002861023,"domainLookupEnd":163.2000002861023,"domainLookupStart":163.2000002861023,"fetchStart":163.2000002861023,"redirectEnd":0,"redirectStart":0,"requestStart":163.2000002861023,"responseEnd":279.40000009536743,"responseStart":279.40000009536743,"secureConnectionStart":163.2000002861023},{"duration":181.2999997138977,"initiatorType":"link","name":"https://issues.oasis-open.org/s/f77fd89aa211a76b20e9b0e63564383c-CDN/nu8zej/803004/aeedb5937bed650f2f0cc4ec9ceaa5d3/4a9288299d147101bf66484f4be48925/_/download/contextbatch/css/com.atlassian.jira.projects.sidebar.init,-_super,-jira.view.issue,-project.issue.navigator/batch.css?jira.create.linked.issue=true&richediton=true","startTime":199.2000002861023,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":199.2000002861023,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":380.5,"responseStart":0,"secureConnectionStart":0},{"duration":153.90000009536743,"initiatorType":"script","name":"https://issues.oasis-open.org/s/41525c48ddceeb9b11e54085268fc285-CDN/nu8zej/803004/aeedb5937bed650f2f0cc4ec9ceaa5d3/4a9288299d147101bf66484f4be48925/_/download/contextbatch/js/com.atlassian.jira.projects.sidebar.init,-_super,-jira.view.issue,-project.issue.navigator/batch.js?jira.create.linked.issue=true&locale=en-US&richediton=true","startTime":199.5,"connectEnd":199.5,"connectStart":199.5,"domainLookupEnd":199.5,"domainLookupStart":199.5,"fetchStart":199.5,"redirectEnd":0,"redirectStart":0,"requestStart":199.5,"responseEnd":353.40000009536743,"responseStart":353.40000009536743,"secureConnectionStart":199.5},{"duration":186.69999980926514,"initiatorType":"script","name":"https://issues.oasis-open.org/s/d41d8cd98f00b204e9800998ecf8427e-CDN/nu8zej/803004/aeedb5937bed650f2f0cc4ec9ceaa5d3/1.0/_/download/batch/jira.webresources:bigpipe-js/jira.webresources:bigpipe-js.js","startTime":208.7000002861023,"connectEnd":208.7000002861023,"connectStart":208.7000002861023,"domainLookupEnd":208.7000002861023,"domainLookupStart":208.7000002861023,"fetchStart":208.7000002861023,"redirectEnd":0,"redirectStart":0,"requestStart":208.7000002861023,"responseEnd":395.40000009536743,"responseStart":395.30000019073486,"secureConnectionStart":208.7000002861023},{"duration":272.5,"initiatorType":"script","name":"https://issues.oasis-open.org/s/d41d8cd98f00b204e9800998ecf8427e-CDN/nu8zej/803004/aeedb5937bed650f2f0cc4ec9ceaa5d3/1.0/_/download/batch/jira.webresources:bigpipe-init/jira.webresources:bigpipe-init.js","startTime":229.7000002861023,"connectEnd":229.7000002861023,"connectStart":229.7000002861023,"domainLookupEnd":229.7000002861023,"domainLookupStart":229.7000002861023,"fetchStart":229.7000002861023,"redirectEnd":0,"redirectStart":0,"requestStart":229.7000002861023,"responseEnd":502.2000002861023,"responseStart":502.2000002861023,"secureConnectionStart":229.7000002861023},{"duration":103.5,"initiatorType":"xmlhttprequest","name":"https://issues.oasis-open.org/rest/webResources/1.0/resources","startTime":407.30000019073486,"connectEnd":407.30000019073486,"connectStart":407.30000019073486,"domainLookupEnd":407.30000019073486,"domainLookupStart":407.30000019073486,"fetchStart":407.30000019073486,"redirectEnd":0,"redirectStart":0,"requestStart":407.30000019073486,"responseEnd":510.80000019073486,"responseStart":510.80000019073486,"secureConnectionStart":407.30000019073486}],"threshold":1000,"fetchStart":0,"domainLookupStart":56,"domainLookupEnd":56,"connectStart":56,"connectEnd":105,"secureConnectionStart":80,"requestStart":105,"responseStart":152,"responseEnd":229,"domLoading":156,"domInteractive":599,"domContentLoadedEventStart":599,"domContentLoadedEventEnd":645,"domComplete":918,"loadEventStart":918,"loadEventEnd":922,"userAgent":"Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)","marks":[],"measures":[],"correlationId":"ebba5bfc16193","effectiveType":"4g","downlink":10,"rtt":0,"serverDuration":96,"dbReadsTimeInMs":16,"dbConnsTimeInMs":19,"applicationHash":"4d4040e0714d65b7fffa4801569d014c0b16eaa9","experiments":[]}}
I've always thought this was more of a problem when a connection is re-established after network failure - were the first thing a client should do is retry delivery of failed stuff. I've never been too clear if that include SUBSCRIBE and UNSUBSCRIBE...