This repository was archived by the owner on Dec 18, 2018. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 516
This repository was archived by the owner on Dec 18, 2018. It is now read-only.
LibuvConnection.OnRead throws Nullable object must have a value #1824
Copy link
Copy link
Closed
Description
To make the wrk tool generate large network requests, I set the number of pipelined requests to 2048. This causes an exception in LibuvConnection.OnRead which terminates the webserver.
"Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv": "2.0.0-preview2-24956"
To reproduce:
csproj
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>netcoreapp2.0</TargetFramework>
<DebugType>portable</DebugType>
<OutputType>Exe</OutputType>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Server.Kestrel" Version="2.0.0-*" />
<PackageReference Include="Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv" Version="2.0.0-*" />
</ItemGroup>
</Project>Startup.cs
using System;
using System.Net;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
namespace SampleApp
{
public class Startup
{
public void Configure(IApplicationBuilder app)
{
app.Run(async context =>
{
var response = $"hello, world{Environment.NewLine}";
context.Response.ContentLength = response.Length;
context.Response.ContentType = "text/plain";
await context.Response.WriteAsync(response);
});
}
public static void Main(string[] args)
{
var hostBuilder = new WebHostBuilder()
.UseKestrel(options =>
{
options.Listen(IPAddress.Parse("1.1.1.2"), 5000, listenOptions => {} );
})
.UseStartup<Startup>();
hostBuilder = hostBuilder.UseLibuv(options => options.ThreadCount = 1);
var host = hostBuilder.Build();
host.Run();
}
}
}NuGet.config
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageSources>
<add key="dotnet-core" value="https://dotnet.myget.org/F/dotnet-core/api/v3/index.json" />
<add key="dotnet-corefxlab" value="https://dotnet.myget.org/F/dotnet-corefxlab/" />
<add key="nuget.org" value="https://api.nuget.org/v3/index.json" />
<add key="AspNetCore" value="https://dotnet.myget.org/F/aspnetcore-ci-dev/api/v3/index.json" />
</packageSources>
</configuration>wrk command:
wrk -H 'Host: server' -H 'User-Agent: Mozilla/5.0 (X11; Linux x86_64) Gecko/20130501 Firefox/30.0 AppleWebKit/600.00 Chrome/30.0.0000.0 Trident/10.0 Safari/600.00' -H 'Cookie: uid=12345678901234567890; __utma=1.1234567890.1234567890.1234567890.1234567890.12; wd=2560x1600' -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' -H 'Accept-Language: en-US,en;q=0.5' -H 'Test: ' -H 'Connection: keep-alive' --latency -d 1 -c 256 --timeout 8 -t 32 http://1.1.1.2:5000/plaintext -s ~/pipeline.lua -- 2048
Exception thrown:
Unhandled Exception: System.InvalidOperationException: Nullable object must have a value.
at System.ThrowHelper.ThrowInvalidOperationException(ExceptionResource resource)
at Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv.Internal.LibuvConnection.OnRead(UvStreamHandle handle, Int32 status)
at Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv.Internal.Networking.UvStreamHandle.UvReadCb(IntPtr handle, Int32 status, uv_buf_t& buf)
at Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv.Internal.Networking.LibuvFunctions.NativeMethods.uv_run(UvLoopHandle handle, Int32 mode)
at Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv.Internal.Networking.LibuvFunctions.run(UvLoopHandle handle, Int32 mode)
at Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv.Internal.LibuvThread.ThreadStart(Object parameter)
dotnet info:
$ dotnet --info
.NET Command Line Tools (2.0.0-preview1-005972)
Product Information:
Version: 2.0.0-preview1-005972
Commit SHA-1 hash: 97da2a03b5
Runtime Environment:
OS Name: rhel
OS Version: 7
OS Platform: Linux
RID: rhel.7-x64
Base Path: /opt/dotnet/sdk/2.0.0-preview1-005972/
Microsoft .NET Core Shared Framework Host
Version : 2.0.0-preview1-002111-00
Build : 1ff021936263d492539399688f46fd3827169983