Mercurial > hg > nginx-tests
comparison lib/Test/Nginx/HTTP3.pm @ 1886:90a310f3cee6
Tests: workaround for QUIC routing while reloading nginx.
Datagrams can be routed to a new worker process that lacks the connection
state resulting in a stateless reset. Previously, the QUIC connection was
closed in tests on decryption failure including receiving a stateless reset,
which is not yet detected in HTTP3.pm. The workaround is to ignore packets
that could not be decrypted including a stateless reset. This is enough to
continue receiving packets from the old worker process, such as with GOAWAY.
author | Sergey Kandaurov <pluknet@nginx.com> |
---|---|
date | Thu, 19 Jan 2023 17:38:16 +0400 |
parents | 6f1508d53a26 |
children | 1023354f3a41 |
comparison
equal
deleted
inserted
replaced
1885:905b1704eb54 | 1886:90a310f3cee6 |
---|---|
1938 while (1) { | 1938 while (1) { |
1939 @data = $self->parse_stream(); | 1939 @data = $self->parse_stream(); |
1940 return @data if $#data; | 1940 return @data if $#data; |
1941 return if scalar @{$self->{frames_in}}; | 1941 return if scalar @{$self->{frames_in}}; |
1942 | 1942 |
1943 again: | |
1943 my $txt; | 1944 my $txt; |
1944 | 1945 |
1945 if (!length($self->{buf})) { | 1946 if (!length($self->{buf})) { |
1946 return unless IO::Select->new($s)->can_read($timo || 3); | 1947 return unless IO::Select->new($s)->can_read($timo || 3); |
1947 $s->sysread($self->{buf}, 65527); | 1948 $s->sysread($self->{buf}, 65527); |
1953 Test::Nginx::log_core('||', sprintf("$txt = [%d]", $len)); | 1954 Test::Nginx::log_core('||', sprintf("$txt = [%d]", $len)); |
1954 | 1955 |
1955 while ($self->{buf}) { | 1956 while ($self->{buf}) { |
1956 ($level, $plaintext, $self->{buf}, $self->{token}) | 1957 ($level, $plaintext, $self->{buf}, $self->{token}) |
1957 = $self->decrypt_aead($self->{buf}); | 1958 = $self->decrypt_aead($self->{buf}); |
1958 return if !defined $plaintext; | 1959 if (!defined $plaintext) { |
1960 $self->{buf} = ''; | |
1961 goto again; | |
1962 } | |
1959 goto retry if $self->{token}; | 1963 goto retry if $self->{token}; |
1960 $self->handle_frames(parse_frames($plaintext), $level); | 1964 $self->handle_frames(parse_frames($plaintext), $level); |
1961 @data = $self->parse_stream(); | 1965 @data = $self->parse_stream(); |
1962 return @data if $#data; | 1966 return @data if $#data; |
1963 return if scalar @{$self->{frames_in}}; | 1967 return if scalar @{$self->{frames_in}}; |