Blob Module deployment fails; 3 possible improvements

Today I tried to add the new blob storage support to my already running IoT edge on Ubuntu 18.04.
I did not get it running.
I would like to share my findings. I tried to contact Greg Manyak, I talked with him last week in Barcelona but I do not have his email address. Is he the right contact person?
So I used the procedure at https://docs.microsoft.com/en-us/azure/iot-edge/how-to-store-data-blob
This is one of the hardest documents to read compared to the other documents regarding IoT Edge. My colleague encountered similar issues with this tutorial.
First, it describes I have to use mcr.microsoft.com/azure-blob-storage:latest This naming convention is strange. For as far as I know, the edgeAgent is not capable to automatically update the module if “latest” changes in the repository. It seems I can only update to a newer version by removing the current one in the local repository. For as far as I know, it was not recommended to use “latest” when IoT Edge was available as public preview.
Isn’t it better to give it a version real number as with all other modules?
Secondly, the explanation about the Container Create options are not very clear. The examples given are hard to understand. What I came up with was:
{
    "Env":[
        "LOCAL_STORAGE_ACCOUNT_NAME=localblobstorageaccountname",
        "LOCAL_STORAGE_ACCOUNT_KEY=pY[64 long]hozVm5QJtL8Jg=="
    ],
    "HostConfig":{
        "Mounts": [
          {"Target": "/var/opt/msblob", "Source": "msBlob", "Type": "volume"}
        ],
        "Binds":[
            "msBlob"
        ],
        "PortBindings":{
            "11002/tcp":[{"HostPort":"11002"}]
        }
    }
}

E.g. I hope I have added the right values for the environment variables.
Regarding the volume, I added the extra “Mounts”. This should create the right volume automatically. I took it from: https://docs.microsoft.com/en-us/azure/iot-edge/tutorial-store-data-sql-server
This way, I can have a volume without creating it on the device itself. I think this could actually work 😊
These options are accepted in the Azure Portal. But after deployment, I get the following exceptions in the edgeAgent:

2018-10-21 10:18:05.058 +00:00 [INF] - Executing command: "Create module blob"
2018-10-21 10:19:51.012 +00:00 [ERR] - Executing command for operation ["create"] failed.
System.Threading.Tasks.TaskCanceledException: A task was canceled.
at Microsoft.Azure.Devices.Edge.Util.Uds.HttpBufferedStream.ReadLineAsync(CancellationToken cancellationToken) in /home/vsts/work/1/s/edge-util/src/Microsoft.Azure.Devices.Edge.Util/uds/HttpBufferedStream.cs:line 50
at Microsoft.Azure.Devices.Edge.Util.Uds.HttpRequestResponseSerializer.SetResponseStatusLine(HttpResponseMessage httpResponse, HttpBufferedStream bufferedStream, CancellationToken cancellationToken) in /home/vsts/work/1/s/edge-util/src/Microsoft.Azure.Devices.Edge.Util/uds/HttpRequestResponseSerializer.cs:line 120
at Microsoft.Azure.Devices.Edge.Util.Uds.HttpRequestResponseSerializer.DeserializeResponse(HttpBufferedStream bufferedStream, CancellationToken cancellationToken) in /home/vsts/work/1/s/edge-util/src/Microsoft.Azure.Devices.Edge.Util/uds/HttpRequestResponseSerializer.cs:line 67
at Microsoft.Azure.Devices.Edge.Util.Uds.HttpUdsMessageHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) in /home/vsts/work/1/s/edge-util/src/Microsoft.Azure.Devices.Edge.Util/uds/HttpUdsMessageHandler.cs:line 37
at System.Net.Http.HttpClient.FinishSendAsyncUnbuffered(Task1 sendTask, HttpRequestMessage request, CancellationTokenSource cts, Boolean disposeCts)    at Microsoft.Azure.Devices.Edge.Agent.Edgelet.GeneratedCode.EdgeletHttpClient.CreateModuleAsync(String api_version, ModuleSpec module, CancellationToken cancellationToken) in /home/vsts/work/1/s/edge-agent/src/Microsoft.Azure.Devices.Edge.Agent.Edgelet/generatedCode/EdgeletHttpClient.cs:line 269    at Microsoft.Azure.Devices.Edge.Agent.Edgelet.ModuleManagementHttpClient.Execute[T](Func1 func, String operation)
at Microsoft.Azure.Devices.Edge.Agent.Edgelet.ModuleManagementHttpClient.CreateModuleAsync(ModuleSpec moduleSpec) in /home/vsts/work/1/s/edge-agent/src/Microsoft.Azure.Devices.Edge.Agent.Edgelet/ModuleManagementHttpClient.cs:line 89
at Microsoft.Azure.Devices.Edge.Agent.Core.LoggingCommandFactory.LoggingCommand.ExecuteAsync(CancellationToken token) in /home/vsts/work/1/s/edge-agent/src/Microsoft.Azure.Devices.Edge.Agent.Core/LoggingCommandFactory.cs:line 61
2018-10-21 10:19:51.151 +00:00 [ERR] - Executing command for operation ["Command Group: (
[Create module blob]
[Start module blob]
)"] failed.
System.Threading.Tasks.TaskCanceledException: A task was canceled.
at Microsoft.Azure.Devices.Edge.Util.Uds.HttpBufferedStream.ReadLineAsync(CancellationToken cancellationToken) in /home/vsts/work/1/s/edge-util/src/Microsoft.Azure.Devices.Edge.Util/uds/HttpBufferedStream.cs:line 50
at Microsoft.Azure.Devices.Edge.Util.Uds.HttpRequestResponseSerializer.SetResponseStatusLine(HttpResponseMessage httpResponse, HttpBufferedStream bufferedStream, CancellationToken cancellationToken) in /home/vsts/work/1/s/edge-util/src/Microsoft.Azure.Devices.Edge.Util/uds/HttpRequestResponseSerializer.cs:line 120
at Microsoft.Azure.Devices.Edge.Util.Uds.HttpRequestResponseSerializer.DeserializeResponse(HttpBufferedStream bufferedStream, CancellationToken cancellationToken) in /home/vsts/work/1/s/edge-util/src/Microsoft.Azure.Devices.Edge.Util/uds/HttpRequestResponseSerializer.cs:line 67
at Microsoft.Azure.Devices.Edge.Util.Uds.HttpUdsMessageHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) in /home/vsts/work/1/s/edge-util/src/Microsoft.Azure.Devices.Edge.Util/uds/HttpUdsMessageHandler.cs:line 37
at System.Net.Http.HttpClient.FinishSendAsyncUnbuffered(Task1 sendTask, HttpRequestMessage request, CancellationTokenSource cts, Boolean disposeCts)    at Microsoft.Azure.Devices.Edge.Agent.Edgelet.GeneratedCode.EdgeletHttpClient.CreateModuleAsync(String api_version, ModuleSpec module, CancellationToken cancellationToken) in /home/vsts/work/1/s/edge-agent/src/Microsoft.Azure.Devices.Edge.Agent.Edgelet/generatedCode/EdgeletHttpClient.cs:line 269    at Microsoft.Azure.Devices.Edge.Agent.Edgelet.ModuleManagementHttpClient.Execute[T](Func1 func, String operation)
at Microsoft.Azure.Devices.Edge.Agent.Edgelet.ModuleManagementHttpClient.CreateModuleAsync(ModuleSpec moduleSpec) in /home/vsts/work/1/s/edge-agent/src/Microsoft.Azure.Devices.Edge.Agent.Edgelet/ModuleManagementHttpClient.cs:line 89
at Microsoft.Azure.Devices.Edge.Agent.Core.LoggingCommandFactory.LoggingCommand.ExecuteAsync(CancellationToken token) in /home/vsts/work/1/s/edge-agent/src/Microsoft.Azure.Devices.Edge.Agent.Core/LoggingCommandFactory.cs:line 61
at Microsoft.Azure.Devices.Edge.Agent.Core.Commands.GroupCommand.ExecuteAsync(CancellationToken token) in /home/vsts/work/1/s/edge-agent/src/Microsoft.Azure.Devices.Edge.Agent.Core/commands/GroupCommand.cs:line 36
at Microsoft.Azure.Devices.Edge.Agent.Core.LoggingCommandFactory.LoggingCommand.ExecuteAsync(CancellationToken token) in /home/vsts/work/1/s/edge-agent/src/Microsoft.Azure.Devices.Edge.Agent.Core/LoggingCommandFactory.cs:line 61
2018-10-21 10:19:51.181 +00:00 [ERR] - Step failed in deployment 74, continuing execution. Failure when running command Command Group: (
[Create module blob]
[Start module blob]
). Will retry in 00s.
2018-10-21 10:19:51.185 +00:00 [INF] - Plan execution ended for deployment 74
2018-10-21 10:19:51.208 +00:00 [ERR] - Edge agent plan execution failed.
System.AggregateException: One or more errors occurred. (A task was canceled.) ---> System.Threading.Tasks.TaskCanceledException: A task was canceled.
at Microsoft.Azure.Devices.Edge.Util.Uds.HttpBufferedStream.ReadLineAsync(CancellationToken cancellationToken) in /home/vsts/work/1/s/edge-util/src/Microsoft.Azure.Devices.Edge.Util/uds/HttpBufferedStream.cs:line 50
at Microsoft.Azure.Devices.Edge.Util.Uds.HttpRequestResponseSerializer.SetResponseStatusLine(HttpResponseMessage httpResponse, HttpBufferedStream bufferedStream, CancellationToken cancellationToken) in /home/vsts/work/1/s/edge-util/src/Microsoft.Azure.Devices.Edge.Util/uds/HttpRequestResponseSerializer.cs:line 120
at Microsoft.Azure.Devices.Edge.Util.Uds.HttpRequestResponseSerializer.DeserializeResponse(HttpBufferedStream bufferedStream, CancellationToken cancellationToken) in /home/vsts/work/1/s/edge-util/src/Microsoft.Azure.Devices.Edge.Util/uds/HttpRequestResponseSerializer.cs:line 67
at Microsoft.Azure.Devices.Edge.Util.Uds.HttpUdsMessageHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) in /home/vsts/work/1/s/edge-util/src/Microsoft.Azure.Devices.Edge.Util/uds/HttpUdsMessageHandler.cs:line 37
at System.Net.Http.HttpClient.FinishSendAsyncUnbuffered(Task1 sendTask, HttpRequestMessage request, CancellationTokenSource cts, Boolean disposeCts)    at Microsoft.Azure.Devices.Edge.Agent.Edgelet.GeneratedCode.EdgeletHttpClient.CreateModuleAsync(String api_version, ModuleSpec module, CancellationToken cancellationToken) in /home/vsts/work/1/s/edge-agent/src/Microsoft.Azure.Devices.Edge.Agent.Edgelet/generatedCode/EdgeletHttpClient.cs:line 269    at Microsoft.Azure.Devices.Edge.Agent.Edgelet.ModuleManagementHttpClient.Execute[T](Func1 func, String operation)
at Microsoft.Azure.Devices.Edge.Agent.Edgelet.ModuleManagementHttpClient.CreateModuleAsync(ModuleSpec moduleSpec) in /home/vsts/work/1/s/edge-agent/src/Microsoft.Azure.Devices.Edge.Agent.Edgelet/ModuleManagementHttpClient.cs:line 89
at Microsoft.Azure.Devices.Edge.Agent.Core.LoggingCommandFactory.LoggingCommand.ExecuteAsync(CancellationToken token) in /home/vsts/work/1/s/edge-agent/src/Microsoft.Azure.Devices.Edge.Agent.Core/LoggingCommandFactory.cs:line 61
at Microsoft.Azure.Devices.Edge.Agent.Core.Commands.GroupCommand.ExecuteAsync(CancellationToken token) in /home/vsts/work/1/s/edge-agent/src/Microsoft.Azure.Devices.Edge.Agent.Core/commands/GroupCommand.cs:line 36
at Microsoft.Azure.Devices.Edge.Agent.Core.LoggingCommandFactory.LoggingCommand.ExecuteAsync(CancellationToken token) in /home/vsts/work/1/s/edge-agent/src/Microsoft.Azure.Devices.Edge.Agent.Core/LoggingCommandFactory.cs:line 61
at Microsoft.Azure.Devices.Edge.Agent.Core.PlanRunners.OrderedRetryPlanRunner.ExecuteAsync(Int64 deploymentId, Plan plan, CancellationToken token) in /home/vsts/work/1/s/edge-agent/src/Microsoft.Azure.Devices.Edge.Agent.Core/planrunners/OrdererdRetryPlanRunner.cs:line 86
--- End of inner exception stack trace ---
at Microsoft.Azure.Devices.Edge.Agent.Core.PlanRunners.OrderedRetryPlanRunner.<>c.b__7_0(List1 f) in /home/vsts/work/1/s/edge-agent/src/Microsoft.Azure.Devices.Edge.Agent.Core/planrunners/OrdererdRetryPlanRunner.cs:line 114    at Microsoft.Azure.Devices.Edge.Agent.Core.PlanRunners.OrderedRetryPlanRunner.ExecuteAsync(Int64 deploymentId, Plan plan, CancellationToken token) in /home/vsts/work/1/s/edge-agent/src/Microsoft.Azure.Devices.Edge.Agent.Core/planrunners/OrdererdRetryPlanRunner.cs:line 115    at Microsoft.Azure.Devices.Edge.Agent.Core.Agent.ReconcileAsync(CancellationToken token) in /home/vsts/work/1/s/edge-agent/src/Microsoft.Azure.Devices.Edge.Agent.Core/Agent.cs:line 176 ---> (Inner Exception #0) System.Threading.Tasks.TaskCanceledException: A task was canceled.    at Microsoft.Azure.Devices.Edge.Util.Uds.HttpBufferedStream.ReadLineAsync(CancellationToken cancellationToken) in /home/vsts/work/1/s/edge-util/src/Microsoft.Azure.Devices.Edge.Util/uds/HttpBufferedStream.cs:line 50    at Microsoft.Azure.Devices.Edge.Util.Uds.HttpRequestResponseSerializer.SetResponseStatusLine(HttpResponseMessage httpResponse, HttpBufferedStream bufferedStream, CancellationToken cancellationToken) in /home/vsts/work/1/s/edge-util/src/Microsoft.Azure.Devices.Edge.Util/uds/HttpRequestResponseSerializer.cs:line 120    at Microsoft.Azure.Devices.Edge.Util.Uds.HttpRequestResponseSerializer.DeserializeResponse(HttpBufferedStream bufferedStream, CancellationToken cancellationToken) in /home/vsts/work/1/s/edge-util/src/Microsoft.Azure.Devices.Edge.Util/uds/HttpRequestResponseSerializer.cs:line 67    at Microsoft.Azure.Devices.Edge.Util.Uds.HttpUdsMessageHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) in /home/vsts/work/1/s/edge-util/src/Microsoft.Azure.Devices.Edge.Util/uds/HttpUdsMessageHandler.cs:line 37    at System.Net.Http.HttpClient.FinishSendAsyncUnbuffered(Task1 sendTask, HttpRequestMessage request, CancellationTokenSource cts, Boolean disposeCts)
at Microsoft.Azure.Devices.Edge.Agent.Edgelet.GeneratedCode.EdgeletHttpClient.CreateModuleAsync(String api_version, ModuleSpec module, CancellationToken cancellationToken) in /home/vsts/work/1/s/edge-agent/src/Microsoft.Azure.Devices.Edge.Agent.Edgelet/generatedCode/EdgeletHttpClient.cs:line 269
at Microsoft.Azure.Devices.Edge.Agent.Edgelet.ModuleManagementHttpClient.Execute[T](Func1 func, String operation)    at Microsoft.Azure.Devices.Edge.Agent.Edgelet.ModuleManagementHttpClient.CreateModuleAsync(ModuleSpec moduleSpec) in /home/vsts/work/1/s/edge-agent/src/Microsoft.Azure.Devices.Edge.Agent.Edgelet/ModuleManagementHttpClient.cs:line 89    at Microsoft.Azure.Devices.Edge.Agent.Core.LoggingCommandFactory.LoggingCommand.ExecuteAsync(CancellationToken token) in /home/vsts/work/1/s/edge-agent/src/Microsoft.Azure.Devices.Edge.Agent.Core/LoggingCommandFactory.cs:line 61    at Microsoft.Azure.Devices.Edge.Agent.Core.Commands.GroupCommand.ExecuteAsync(CancellationToken token) in /home/vsts/work/1/s/edge-agent/src/Microsoft.Azure.Devices.Edge.Agent.Core/commands/GroupCommand.cs:line 36    at Microsoft.Azure.Devices.Edge.Agent.Core.LoggingCommandFactory.LoggingCommand.ExecuteAsync(CancellationToken token) in /home/vsts/work/1/s/edge-agent/src/Microsoft.Azure.Devices.Edge.Agent.Core/LoggingCommandFactory.cs:line 61    at Microsoft.Azure.Devices.Edge.Agent.Core.PlanRunners.OrderedRetryPlanRunner.ExecuteAsync(Int64 deploymentId, Plan plan, CancellationToken token) in /home/vsts/work/1/s/edge-agent/src/Microsoft.Azure.Devices.Edge.Agent.Core/planrunners/OrdererdRetryPlanRunner.cs:line 86<--- 2018-10-21 10:19:51.392 +00:00 [WRN] - Reconcile failed because of the an exception System.AggregateException: One or more errors occurred. (A task was canceled.) ---> System.Threading.Tasks.TaskCanceledException: A task was canceled.    at Microsoft.Azure.Devices.Edge.Util.Uds.HttpBufferedStream.ReadLineAsync(CancellationToken cancellationToken) in /home/vsts/work/1/s/edge-util/src/Microsoft.Azure.Devices.Edge.Util/uds/HttpBufferedStream.cs:line 50    at Microsoft.Azure.Devices.Edge.Util.Uds.HttpRequestResponseSerializer.SetResponseStatusLine(HttpResponseMessage httpResponse, HttpBufferedStream bufferedStream, CancellationToken cancellationToken) in /home/vsts/work/1/s/edge-util/src/Microsoft.Azure.Devices.Edge.Util/uds/HttpRequestResponseSerializer.cs:line 120    at Microsoft.Azure.Devices.Edge.Util.Uds.HttpRequestResponseSerializer.DeserializeResponse(HttpBufferedStream bufferedStream, CancellationToken cancellationToken) in /home/vsts/work/1/s/edge-util/src/Microsoft.Azure.Devices.Edge.Util/uds/HttpRequestResponseSerializer.cs:line 67    at Microsoft.Azure.Devices.Edge.Util.Uds.HttpUdsMessageHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) in /home/vsts/work/1/s/edge-util/src/Microsoft.Azure.Devices.Edge.Util/uds/HttpUdsMessageHandler.cs:line 37    at System.Net.Http.HttpClient.FinishSendAsyncUnbuffered(Task1 sendTask, HttpRequestMessage request, CancellationTokenSource cts, Boolean disposeCts)
at Microsoft.Azure.Devices.Edge.Agent.Edgelet.GeneratedCode.EdgeletHttpClient.CreateModuleAsync(String api_version, ModuleSpec module, CancellationToken cancellationToken) in /home/vsts/work/1/s/edge-agent/src/Microsoft.Azure.Devices.Edge.Agent.Edgelet/generatedCode/EdgeletHttpClient.cs:line 269
at Microsoft.Azure.Devices.Edge.Agent.Edgelet.ModuleManagementHttpClient.Execute[T](Func1 func, String operation)    at Microsoft.Azure.Devices.Edge.Agent.Edgelet.ModuleManagementHttpClient.CreateModuleAsync(ModuleSpec moduleSpec) in /home/vsts/work/1/s/edge-agent/src/Microsoft.Azure.Devices.Edge.Agent.Edgelet/ModuleManagementHttpClient.cs:line 89    at Microsoft.Azure.Devices.Edge.Agent.Core.LoggingCommandFactory.LoggingCommand.ExecuteAsync(CancellationToken token) in /home/vsts/work/1/s/edge-agent/src/Microsoft.Azure.Devices.Edge.Agent.Core/LoggingCommandFactory.cs:line 61    at Microsoft.Azure.Devices.Edge.Agent.Core.Commands.GroupCommand.ExecuteAsync(CancellationToken token) in /home/vsts/work/1/s/edge-agent/src/Microsoft.Azure.Devices.Edge.Agent.Core/commands/GroupCommand.cs:line 36    at Microsoft.Azure.Devices.Edge.Agent.Core.LoggingCommandFactory.LoggingCommand.ExecuteAsync(CancellationToken token) in /home/vsts/work/1/s/edge-agent/src/Microsoft.Azure.Devices.Edge.Agent.Core/LoggingCommandFactory.cs:line 61    at Microsoft.Azure.Devices.Edge.Agent.Core.PlanRunners.OrderedRetryPlanRunner.ExecuteAsync(Int64 deploymentId, Plan plan, CancellationToken token) in /home/vsts/work/1/s/edge-agent/src/Microsoft.Azure.Devices.Edge.Agent.Core/planrunners/OrdererdRetryPlanRunner.cs:line 86    --- End of inner exception stack trace ---    at Microsoft.Azure.Devices.Edge.Agent.Core.PlanRunners.OrderedRetryPlanRunner.<>c.<ExecuteAsync>b__7_0(List1 f) in /home/vsts/work/1/s/edge-agent/src/Microsoft.Azure.Devices.Edge.Agent.Core/planrunners/OrdererdRetryPlanRunner.cs:line 114
at Microsoft.Azure.Devices.Edge.Agent.Core.PlanRunners.OrderedRetryPlanRunner.ExecuteAsync(Int64 deploymentId, Plan plan, CancellationToken token) in /home/vsts/work/1/s/edge-agent/src/Microsoft.Azure.Devices.Edge.Agent.Core/planrunners/OrdererdRetryPlanRunner.cs:line 115
at Microsoft.Azure.Devices.Edge.Agent.Core.Agent.ReconcileAsync(CancellationToken token) in /home/vsts/work/1/s/edge-agent/src/Microsoft.Azure.Devices.Edge.Agent.Core/Agent.cs:line 176
at Microsoft.Azure.Devices.Edge.Agent.Core.Agent.ReconcileAsync(CancellationToken token) in /home/vsts/work/1/s/edge-agent/src/Microsoft.Azure.Devices.Edge.Agent.Core/Agent.cs:line 187
---> (Inner Exception #0) System.Threading.Tasks.TaskCanceledException: A task was canceled.
at Microsoft.Azure.Devices.Edge.Util.Uds.HttpBufferedStream.ReadLineAsync(CancellationToken cancellationToken) in /home/vsts/work/1/s/edge-util/src/Microsoft.Azure.Devices.Edge.Util/uds/HttpBufferedStream.cs:line 50
at Microsoft.Azure.Devices.Edge.Util.Uds.HttpRequestResponseSerializer.SetResponseStatusLine(HttpResponseMessage httpResponse, HttpBufferedStream bufferedStream, CancellationToken cancellationToken) in /home/vsts/work/1/s/edge-util/src/Microsoft.Azure.Devices.Edge.Util/uds/HttpRequestResponseSerializer.cs:line 120
at Microsoft.Azure.Devices.Edge.Util.Uds.HttpRequestResponseSerializer.DeserializeResponse(HttpBufferedStream bufferedStream, CancellationToken cancellationToken) in /home/vsts/work/1/s/edge-util/src/Microsoft.Azure.Devices.Edge.Util/uds/HttpRequestResponseSerializer.cs:line 67
at Microsoft.Azure.Devices.Edge.Util.Uds.HttpUdsMessageHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) in /home/vsts/work/1/s/edge-util/src/Microsoft.Azure.Devices.Edge.Util/uds/HttpUdsMessageHandler.cs:line 37
at System.Net.Http.HttpClient.FinishSendAsyncUnbuffered(Task1 sendTask, HttpRequestMessage request, CancellationTokenSource cts, Boolean disposeCts)    at Microsoft.Azure.Devices.Edge.Agent.Edgelet.GeneratedCode.EdgeletHttpClient.CreateModuleAsync(String api_version, ModuleSpec module, CancellationToken cancellationToken) in /home/vsts/work/1/s/edge-agent/src/Microsoft.Azure.Devices.Edge.Agent.Edgelet/generatedCode/EdgeletHttpClient.cs:line 269    at Microsoft.Azure.Devices.Edge.Agent.Edgelet.ModuleManagementHttpClient.Execute[T](Func1 func, String operation)
at Microsoft.Azure.Devices.Edge.Agent.Edgelet.ModuleManagementHttpClient.CreateModuleAsync(ModuleSpec moduleSpec) in /home/vsts/work/1/s/edge-agent/src/Microsoft.Azure.Devices.Edge.Agent.Edgelet/ModuleManagementHttpClient.cs:line 89
at Microsoft.Azure.Devices.Edge.Agent.Core.LoggingCommandFactory.LoggingCommand.ExecuteAsync(CancellationToken token) in /home/vsts/work/1/s/edge-agent/src/Microsoft.Azure.Devices.Edge.Agent.Core/LoggingCommandFactory.cs:line 61
at Microsoft.Azure.Devices.Edge.Agent.Core.Commands.GroupCommand.ExecuteAsync(CancellationToken token) in /home/vsts/work/1/s/edge-agent/src/Microsoft.Azure.Devices.Edge.Agent.Core/commands/GroupCommand.cs:line 36
at Microsoft.Azure.Devices.Edge.Agent.Core.LoggingCommandFactory.LoggingCommand.ExecuteAsync(CancellationToken token) in /home/vsts/work/1/s/edge-agent/src/Microsoft.Azure.Devices.Edge.Agent.Core/LoggingCommandFactory.cs:line 61
at Microsoft.Azure.Devices.Edge.Agent.Core.PlanRunners.OrderedRetryPlanRunner.ExecuteAsync(Int64 deploymentId, Plan plan, CancellationToken token) in /home/vsts/work/1/s/edge-agent/src/Microsoft.Azure.Devices.Edge.Agent.Core/planrunners/OrdererdRetryPlanRunner.cs:line 86<---
2018-10-21 10:19:52.284 +00:00 [INF] - Updated reported properties
2018-10-21 10:19:57.963 +00:00 [INF] - Plan execution started for deployment 74
2018-10-21 10:19:57.984 +00:00 [INF] - Plan execution ended for deployment 74
^C

I have no clue what the reason for this exception is.
So I have these questions:
•	Can you confirm the container create options configuration of my blob module is correct?
•	Do you agree adding the creation of a new volume in the create options is a good idea?
•	Do you agree the use of “latest” as version indication in the name of the module is less optimal?
If there are any questions or if I am doing everything wrong 😊 or if there is better documentation to test, please send me a message.
Regards,
Sander

Document Details
⚠ Do not edit this section. It is required for docs.microsoft.com ➟ GitHub issue linking.

ID: 07a44a28-a19c-f68e-167c-5e8ad91605e0
Version Independent ID: 33eacdff-4f0a-c543-d8f9-e7b208bab015
Content: Azure Blob Storage on Azure IoT Edge devices
Content Source: articles/iot-edge/how-to-store-data-blob.md
Service: iot-edge
GitHub Login: @kgremban
Microsoft Alias: kgremban

@sandervandevelde Thanks for the feedback! We are currently investigating and will update you shortly.

Ad. "Can you confirm the container create options configuration of my blob module is correct?"
Looking at the docker documentation, Mounts option is a newer way of creating binds that replaces Binds, Volumes, and Tmpfs options. It is more verbose and versatile. I do not see a reason to use both options at the same time – just use one of them, whichever you like.
When using Mounts option:
Target is the container path, in our case /blobroot or C:/BlobRoot
Source is volume name OR host path, in this case msBlob OR /var/opt/msblob
Type is “volume” if msBlob is used, OR “bind” if /var/opt/msblob is used
Example:
"HostConfig":{
"Mounts": [
{"Target": "/blobroot", "Source": "msBlob", "Type": "volume"}
],
"PortBindings":{
"11002/tcp":[{"HostPort":"11002"}]
}
When using Binds option:
“:”, in our case host-src is msBlob OR /var/opt/msblob, and container-dest is /blobroot or C:/BlobRoot
Example:
"HostConfig":{
"Binds":[
"msBlob:/blobroot"
],
"PortBindings":{
"11002/tcp":[{"HostPort":"11002"}]
}
Ad. "Do you agree adding the creation of a new volume in the create options is a good idea?"
Yes, you should create a custom volume and keep using it after possible redeployments if you want to keep using the blobs created before redeployment. Docker creates a volume for you if you specify a name of non-existing volume.
Ad. "Do you agree the use of “latest” as version indication in the name of the module is less optimal?"
At the time of releasing this module, IoT team recommended we use the :latest tag.
Let me know if it helps. We'll look into improving the doc so it's more clear how the binds options should be used.

Thanks for the information.
I tried it again on ubuntu 18.04 on a stable edge (running 1.0.3 modules for edge and hub).
I deployed: mcr.microsoft.com/azure-blob-storage:latest
I used configuration as seen in the documentation:

{
"Env": [
"LOCAL_STORAGE_ACCOUNT_NAME=blobaccount",
"LOCAL_STORAGE_ACCOUNT_KEY=64 bytes long "
],
"HostConfig": {
"Binds": [
"/srv/containerdata:/blobroot"
],
"PortBindings": {
"11002/tcp": [
{
"HostPort": "11002"
}
]
}
}
}

But the blob module is not loaded on the edge:

2018-10-23 22:23:50.431 +00:00 [INF] - Executing command: "Create module blob"
2018-10-23 22:24:10.392 +00:00 [INF] - Executing command: "Start module blob"
2018-10-23 22:24:12.403 +00:00 [INF] - Plan execution ended for deployment 82
2018-10-23 22:24:12.813 +00:00 [INF] - Updated reported properties
2018-10-23 22:24:17.912 +00:00 [INF] - Module 'blob' scheduled to restart after 10s (05s left).
2018-10-23 22:24:18.122 +00:00 [INF] - Updated reported properties
2018-10-23 22:24:23.270 +00:00 [INF] - Module 'blob' scheduled to restart after 10s (00s left).
2018-10-23 22:24:28.377 +00:00 [INF] - Plan execution started for deployment 82
2018-10-23 22:24:28.381 +00:00 [INF] - Executing command: "Command Group: (
[Stop module blob]
[Start module blob]
[Saving blob to store]
)"
2018-10-23 22:24:28.381 +00:00 [INF] - Executing command: "Stop module blob"
2018-10-23 22:24:28.392 +00:00 [INF] - Executing command: "Start module blob"
2018-10-23 22:24:30.156 +00:00 [INF] - Executing command: "Saving blob to store"
2018-10-23 22:24:30.157 +00:00 [INF] - Plan execution ended for deployment 82
2018-10-23 22:24:35.380 +00:00 [INF] - Module 'blob' scheduled to restart after 20s (16s left).
2018-10-23 22:24:35.636 +00:00 [INF] - Updated reported properties

On the portal, I get Backoff code 132.

@sandervandevelde Do you see anything in docker logs for the container (docker logs )? Can you also check the contents of /srv/containerdata (sudo ls -R /srv/containerdata) and if it exists, share contents of /srv/containerdata/logs/platformblob.log?

Hello, thanks for looking into this.
The blob module is not downloaded yet. So "docker logs blob -f" results in an empty line.
The log of edgeHub shows nothing regarding the new module.
The log of edgeAgent only shows the scheduled restarts:

2018-10-24  22:17:22.393 +00:00 [INF] - Module 'blob' scheduled to restart after 02m:40s (02s left).
2018-10-24 22:17:27.543 +00:00 [INF] - Plan execution started for deployment 84
2018-10-24 22:17:27.547 +00:00 [INF] - Executing command: "Command Group: (
[Stop module blob]
[Start module blob]
[Saving blob to store]
)"
2018-10-24 22:17:27.547 +00:00 [INF] - Executing command: "Stop module blob"
2018-10-24 22:17:27.558 +00:00 [INF] - Executing command: "Start module blob"
2018-10-24 22:17:29.343 +00:00 [INF] - Executing command: "Saving blob to store"
2018-10-24 22:17:29.344 +00:00 [INF] - Plan execution ended for deployment 84
2018-10-24 22:17:34.634 +00:00 [INF] - Module 'blob' scheduled to restart after 05m:00s (04m:56s left).
2018-10-24 22:17:34.796 +00:00 [INF] - Updated reported properties
2018-10-24 22:17:39.954 +00:00 [INF] - Module 'blob' scheduled to restart after 05m:00s (04m:50s left).

The images is actually downloaded to my machine (just before adding the module to the configuration, I removed it from the local repository)

REPOSITORY                                                    TAG                 IMAGE ID            CREATED             SIZE
mcr.microsoft.com/azure-blob-storage                          latest              4e115b95db60        29 hours ago        214MB

The command "sudo ls -R /srv/containerdata" does show a single line containing this meaningless "/srv/containerdata:"
Just to make sure I actually can download and start modules, I added mcr.microsoft.com/azureiotedge-simulated-temperature-sensor:1.0 to the iot edge. That tempSensor was downloaded and added without any issue.
Are there other places or logs to investigate?
Regards,
Sander

@sandervandevelde It looks like module/container is successfully created but during startup or soon after it crashes leaving no trace in docker logs. If it wasn't successfully created I imagine there would be a specific error entry in the edgeAgent logs. What is the output of docker ps -a and what happens if you try to start this container manually (docker start blob)? If it doesn't hint you what may be the issue, you could try creating a container with overridden entry point and starting blob service manually
$ docker run -it --rm -e "LOCAL_STORAGE_ACCOUNT_NAME=mytestaccount" -e "LOCAL_STORAGE_ACCOUNT_KEY=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==" --entrypoint bash mcr.microsoft.com/azure-blob-storage:latest
root@283855933f02:/azure-blob-storage# dotnet PlatformBlob.dll /blobroot

If there is an issue you should see errors on the output. If after half a minute the output is empty it means the service was able to start successfully. If this works I would look for an issue with edge runtime itself.
I'm sorry I'm not helping much. I'm not able to reproduce your issue - I used Ubuntu Server 18.04, edge runtime 1.0.3, azure-blob-storage:latest, and the config you posted above - it works fine for me.

Hello Magdalena,
I really appreciate your help. I would like to see this working too, I run the IoT Edge on an Advantech Uno 2271G with Ubuntu 18.04 on it.
So before I reinstall my runtime, I have performed all the steps you described.
See the file blob.txt with the output.
It ends with this "Illegal instruction (core dumped)". If I knew where it is dumped, I would have added it too.
I will wait another day before reinstalling the runtime so I can check out other things if you are still interested.
Regards,
Sander

Some extra environment info:

uno2271gsv@uno2271gsv-UNO-2271G-E2xAE:~$ uname -a
Linux uno2271gsv-UNO-2271G-E2xAE 4.15.0-34-generic #37-Ubuntu SMP Mon Aug 27 15:21:48 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

uno2271gsv@uno2271gsv-UNO-2271G-E2xAE:~$ docker version
Client:
Version:      18.06.0-dev
API version:  1.37
Go version:   go1.10.2
Git commit:   daf021fe
Built:        Mon Jun 25 21:07:53 2018
OS/Arch:      linux/amd64
Experimental: false
Orchestrator: swarm

Server:
Engine:
Version:      dev
API version:  1.38 (minimum version 1.12)
Go version:   go1.10.3
Git commit:   09f5e9d
Built:        Wed Sep 19 16:55:45 2018
OS/Arch:      linux/amd64
Experimental: false
uno2271gsv@uno2271gsv-UNO-2271G-E2xAE:~$

@sandervandevelde Hi, Sander, could you please do the following inside container

run "ulimit -c unlimited"
run "dotnet PlatformBlob.dll /blobroot"

See if a dump can be generated in the current directory. I found this info at this link:
https://stackoverflow.com/questions/47606532/illegal-instructions-core-dumped-error-on-launch-of-my-application-in-ubuntu-1
Also, could you check if the log file exists /blobroot/logs/platformblob.log? Thanks!

Hello qibozhu,
I tried your suggestions:

rroot@549c639e2d66:/azure-blob-storage# ulimit -c unlimited
root@549c639e2d66:/azure-blob-storage# dotnet PlatformBlob.dll /blobroot
Illegal instruction (core dumped)

but I failed to find the any core dump. I even tried to catch all coredump in a special folder as seen in http://www.randombugs.com/linux/core-dumps-linux.html
I now wipe my iot edge runtime and test with a new, fresh one.

Is it this issue https://medium.com/@nprch_12/docker-exited-132-e38f9dd2cd0d?
Does sse4_2 show up in the output of cat /proc/cpuinfo | grep sse4_2?

Hello sudhirap,
The processor is an older model Atom CPU (an E3815 I read from the manual).
But yes, it seems sse4_2 is part of it:

uno2271gsv@uno2271g2sv-UNO-2271G-E2xAE:~$ cat /proc/cpuinfo | grep sse4_2
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology tsc_reliable nonstop_tsc cpuid aperfmperf tsc_known_freq pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm sse4_1 sse4_2 movbe popcnt tsc_deadline_timer aes rdrand lahf_lm 3dnowprefetch epb pti tpr_shadow vnmi flexpriority ept vpid tsc_adjust smep erms dtherm arat
uno2271gsv@uno2271g2sv-UNO-2271G-E2xAE:~$

@sandervandevelde Thanks for your patience with this. Your configuration looks good. It may be a product bug. I prepared a new container image, could you please give it a try and let me know if it works for you?
Image URI: mcr.microsoft.com/azure-blob-storage:1.0.1-linux-amd64
Simple check:
$ docker run -it --rm -e "LOCAL_STORAGE_ACCOUNT_NAME=mytestaccount" -e "LOCAL_STORAGE_ACCOUNT_KEY=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==" --entrypoint bash mcr.microsoft.com/azure-blob-storage:1.0.1-linux-amd64
root@283855933f02:/azure-blob-storage# dotnet PlatformBlob.dll /blobroot

If it works it should display just a couple of log lines like this:
[2018-11-02 19:16:20.050] [backend] [info] [Tid:6] [MetaStore.cc:95] [Initialize] Initialize MetaStore. Status:OK
[2018-11-02 19:16:20.123] [backend] [info] [Tid:6] Info: Hook TriggerReportLoad event.

I tried a deployment from VS Code. At least I came to a descent Exception in the logs $iotedge logs microsoftBlobStorage --tail 50  of the blob storage module now;
Unhandled Exception: System.NullReferenceException: Object reference not set to an instance of an object.    at Microsoft.AzureStack.Services.Storage.Util.FailFast(String msg, Exception e) in /app/wfe/Common/Common/Util.cs:line 212    at Microsoft.AzureStack.Services.Storage.FrontEnd.Program.Main(String[] args) in /app/wfe/FrontEnd/Program.cs:line 26
I used this section for the blob storage module in my deployment.template.json file, the environmental settings are just providing a storage account name and manually generated 64 bits base64 key.
"microsoftBlobStorage": {             "version": "1.0",             "type": "docker",             "status": "stopped",             "restartPolicy": "always",             "settings": {               "image": "mcr.microsoft.com/azure-blob-storage:latest",               "createOptions": "{\"Env\":[\"LOCAL_STORAGE_ACCOUNT_NAME=advantechwiseedgeblobstorage\",\"LOCAL_STORAGE_ACCOUNT_KEY=bAENmuZh+T3/RWV2l/FvS2K74UN+VHCPjzSQFDV2hX12fI+xDMsUnM4zFMsRH6/LzrzsWK/cLGIMYUkk07lvVw==\"],\"Mounts\":[{\"Type\":\"volume\",\"Source\":\"blobstorage-volume\",\"Target\":\"/var/lib/docker/volumes/blobstorage-volume/_data\",\"Destination\":\"/blobroot\",\"Driver\":\"local\",\"Mode\":\"\",\"RW\":true,\"Propagation\":\"\"}],\"HostConfig\":{\"Binds\":[\"blobstorage-volume:/blobroot\"],\"PortBindings\":{\"11002/tcp\":[{\"HostPort\":\"11002\"}]}}}"             }           }
Added the mount part manually, it isn't listed in the tutorial on Store data at the edge with Azure Blob Storage on IoT Edge (preview). Is it needed? the volume has been created using $docker volume create <volume name>.
More than happy to test some more.

@sandervandevelde Thanks for trying it out. At this point I don't see anything else we can try. We need to get that core dump to understand what's the issue.

@sandervandevelde I hope this helps if you want to collect the core dump:
According to this SO answer, core dump location is controlled by the host system.

Check your host setting for core dump location or change it to something easy, like /cores (the linked answer explains how to do it)
Start our image with additional core settings and additional volume binding for the dump (change /cores below if you are using something else for core dump location)

docker run --ulimit core=99999999999:99999999999 -v blobdump:/cores  -e "LOCAL_STORAGE_ACCOUNT_NAME=mytestaccount" -e "LOCAL_STORAGE_ACCOUNT_KEY=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==" mcr.microsoft.com/azure-blob-storage:1.0.1-linux-amd64

Find the dump on your host. Firstly check location of your blobdump volume data.

$ sudo docker volume inspect blobdump
[
    {
        "CreatedAt": "2018-11-05T23:02:51Z",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/blobdump/_data",
        "Name": "blobdump",
        "Options": null,
        "Scope": "local"
    }
]

The core dump should be in the Mountpoint location, e.g. /var/lib/docker/volumes/blobdump/_data.

It took some effort to get to the coredump and zip it, but:
Behold the coredump.zip

@sandervandevelde Magdalena is out of office and she will be back in the middle of next week. It appears that we need her Linux machine where she created the container image to debug the dump. We will get back to you late next week. Sorry for the delay.

Hello Qibozhu,
I can leave the same setup untouched until then. Meanwhile, if you need more information or if you want me to do some tests, just let me know.
Please DM me on twitter @svelde regarding the device used.

@sandervandevelde Thanks for the dump, it was helpful in pinpointing the issue. I believe it should be fixed with this image:  mcr.microsoft.com/azure-blob-storage:1.0.2-linux-amd64. Please try it out (e.g. like here) and let me know if it works.

Success!
@mbialecka Hello, the module keeps on running finally:

uno2271gsv@uno2271g2sv-UNO-2271G-E2xAE:~$ sudo docker logs -f blob
[2018-11-15 18:26:00.005] [backend] [info] [Tid:1] [MetaStore.cc:95] [Initialize] Initialize MetaStore. Status:OK
[2018-11-15 18:26:00.114] [backend] [info] [Tid:1] Info: Hook TriggerReportLoad event.

Glad we got it working at last.

We will now proceed to close this thread. If there are further questions regarding this matter, please tag me in your reply. We will gladly continue the discussion and we will reopen the issue.

I can also confirm it works on another linux (XUbuntu 18.04, Azure IoT Edge 1.0.4) set-up on an Advantech UNO 2271G-AE.

We've updated our multi-arch manifests and both :latest and :1.0 tags should now be pointing to the 1.0.2 version for Linux amd64 platform.

@sandervandevelde @JeeWeetje Can you please educate us about your blob storage scenarios? What workload needs this module and what is your end-to-end goal?

At this point, I am evaluating the capabilities of Blob storage on the Edge. I was hoping to fill blobs directly using the routes with messages. And at a certain limit, I was hoping to send blobs to the cloud as an affordable way of (local) persisting and uploading large amounts of raw data.
I also want to check out if this could be used together with a camera for cognitive services. To send certain images to the cloud for further training of my model in the cloud (building a larger training set)


Misleading troubleshooting link in "Next steps"

From how I would interpret the text in the "Next steps" section, I would expect the "troubleshooting" link to point to a "Troubleshoot serverless SQL pool" page. Especially if the next sentence is pointing out explicitly to resources for dedicated pools, if you rather work with those. The link is pointing to the "Troubleshoot dedicated SQL pools" page though:
https://docs.microsoft.com/en-us/azure/synapse-analytics/sql-data-warehouse/sql-data-warehouse-troubleshoot?toc=/azure/synapse-analytics/toc.json&bc=/azure/synapse-analytics/breadcrumb/toc.json

Document Details
⚠ Do not edit this section. It is required for docs.microsoft.com ➟ GitHub issue linking.

ID: 5f5a15d8-603e-12da-bd7b-55c85e5e17fc
Version Independent ID: fd29bb6f-a2c0-b1f7-40c5-1deef70a9417
Content: Best practices for serverless SQL pool - Azure Synapse Analytics
Content Source: articles/synapse-analytics/sql/best-practices-sql-on-demand.md
Service: synapse-analytics
Sub-service: sql
GitHub Login: @filippopovic
Microsoft Alias: fipopovi

@gmuenster Thanks for the feedback !  I have assigned this issue to content author to investigate and update the document as appropriate.

thank you, i sent PR

@gmuenster Thank you for contacting Microsoft. We have updated the article with the correct link, troubleshooting. Thank you for your contribution to Microsoft Docs. I will go ahead with closing this issue. The @notification mechanism continues to work even after an item is closed, in case further communication is needed. We hope to hear from you again.

#https://github.com/MicrosoftDocs/azure-docs-pr/pull/151202

#assign:julieMSFT

#please-close


Error 1062: Duplicate entry '48965e50-af1b-5766-9d0d-22e42d0327dc' for key 'PRIMARY'

i got an error when i post my signup form.
34:05.1547321 +0800 CST }2019/06/15 19:34:05 [signup.go:100][E] SignupController:Post - Got err inserting user to the database:  Error 1062: Duplicate entry '48965e50-af1b-5766-9d0d-22e42d0327dc' for key 'PRIMARY'
why?can you help me?

@Mountains-and-rivers Hey there! Sorry for the late reply. Not sure how much I can help since my schedule is pretty busy at the moment. For some reason the error indicates that the application is trying to create a record in the DB with primary key that already exists. If it's some local test/dev environment you can try and drop the database and re-create a fresh one...


Store accounting data in VAST native format

This PR will change the ACCOUNTANT to relay its data back to the IMPORTER in the form of table slices. That will allow us to query the data flexibly and export it in the desired format.
TODO:

[x] Have a table_slice_builder in ACCOUNTANT
[x] Periodically send slices to IMPORTER
[x] Add integration tests

Dang, I noticed one more thing that was missing right after merging: could you add a changelog entry that describes how one can access the accountant data?


Support custom tsig names inside tsigSecret map

Previously the tsigSecret variable on the Server object was keyed on tsig name.
This means that if you have multiple zones using the same server, it is not possible
for each of the zones to have the same tsig name. By specifying a TsigKeyNameBuilder
function, the server can now differentiate between zones even if they have the same tsig name
without requiring the client to change anything.
Fixes #1325

Please no. Just use TsigProvider. It was added for exactly these kinds of use cases.


Are you planning to implement CIoU?

@hunglc007 Hi,
Are you planning to implement CIoU?
Examples:

C: https://github.com/AlexeyAB/darknet/blob/a71b9a6e9a009cf94900c53deb344c5204835700/src/box.c#L233-L256

Matlab: https://github.com/Zzh-tju/DIoU/blob/master/simulation experiment/dCIOU.m

Python: https://github.com/VCasecnikovs/Yet-Another-YOLOv4-Pytorch/blob/2e18612e1852abbf35b4dac55a00f2a3b2d814ed/model.py#L527-L561

Python: https://github.com/ultralytics/yolov3/blob/eca5b9c1d36e4f73bf2f94e141d864f1c2739e23/utils/utils.py#L262-L282

Desctiption: https://medium.com/@jonathan_hui/yolov4-c9901eaa8e61

Thank you. Im preparing push a newer version with improvements, which include CIoU loss and yolov4-tiny

Thank you. Im preparing push a newer version with improvements, which include CIoU loss and yolov4-tiny

the loss is nan, has this problem been solved ?

Thank you. Im preparing push a newer version with improvements, which include CIoU loss and yolov4-tiny

the loss is nan, has this problem been solved ?

I updated mish activation to fix nan loss issue.

Thank you. Im preparing push a newer version with improvements, which include CIoU loss and yolov4-tiny

the loss is nan, has this problem been solved ?

I updated mish activation to fix nan loss issue.

great !!


Add data export button

Allow for log data to be exported to CSV/Excel file

Added the CSV export.


fix(index.js): avoid creating a new object in reduce loop

As outlined here, avoiding parameter reassign by creating a new object occasionally can cause performance issues. This happens to be one of those cases!
This partially reverts e5831867255c8374c77d2e472eae0c69835007e2
Please see below for performance implications for an 1800 module webpack run!

Released v3.0.2


Alternative fix for #3805 by creating a snapshot and using it

Introduce types.AlertSnapshot and types.AlertsSnapshot that keeps track of the original dispatch time and uses it for the Status() and Resolved() method. This makes sure the notification is consistent across retries and/or other delays.
Change the behavior to not zero EndsAt for firing alerts and update the acceptance tests.

@grobinson-grafana A full mr and separating the snapshot-ing from the behavior change. The failing test seems unrelated.

@grobinson-grafana A full mr and separating the snapshot-ing from the behavior change. The failing test seems unrelated.

Awesome! Yes that test flakes a lot. It needs to be fixed 😞

Thanks once again for opening this @zecke! I'm going to review it this week! 👍

How can we make progress on this change? I am happy to help reviewing other people changes to increase the bench of reviewers...

I rebased this PR with main to fix the conflict.


fix bug: reloading rule files with empty group doesn't take effect

Signed-off-by: yapo.yang<EMAIL_ADDRESS>reloading rule with empty group keep the orignal rules.
Steps to reproduce:

initialize rules with below yaml:

groups:
  - name: test-alert-group
    partial_response_strategy: "warn"
    interval: 2m
    rules:
      - alert: TestAlert
        expr: 1
        labels:
          key: value
        annotations:
          key: value

  - name: test-rule-group
    partial_response_strategy: "warn"
    interval: 2m
    rules:
      - record: test_metric
        expr: 1

change yaml to empty group:

groups: []

run http reload

curl -X POST http://<IP_ADDRESS>:10902/-/reload

view rules in browser, thanos keeps the initial one instead of emty rule.

FWIW this is fixing the same issue than #1439
#1439 doesn't fix the issue I metioned.  I verified just now with commit 9b17ba18f8bb2d3ad9bd8ce2ac00e18430665655.

@simonpasquier

@00arthur00 The PR I linked (#1439) isn't merged yet so if you've tested with master, yes the bug is still there.

@00arthur00 The PR I linked (#1439) isn't merged yet so if you've tested with master, yes the bug is still there.

@simonpasquier Thanks. Since the issue is being fixed. I will close the issue.


Allow prepend and append of additional markdown

automatically add markdown to the beginning or end of the documentation
If you wish to automatically add the same content to the docs every time you generate, you can add a prepend.md and/or append.md file to the source folder, and they will be included either above, or below the generated routes (or both).
File locations:
public/docs/source/prepend.md
public/docs/source/append.md
closes #262

tests passed previously. Intermittent issue with Travis apparently.

@TimOgilvy I'd like to merge this, but can you check the tests? If it's a fluke, you can trigger a new build by pushing an empty commit.

@TimOgilvy your PR looks abandoned, so I've gone ahead to add these changes in a new PR - #329


bench: test linter

The purpose of this PR is just to bench the "best-case scenario" for a linter which iterates through syntax, updating and checking a simple counter along the way.

!bench


fieldReference doesn't work to toggle a boolean value

Bug description
fieldReference doesn't work to toggle a boolean value.
How to reproduce
See this repo for a reproduction: https://github.com/nikolasburk/fieldReferenceBug
Expected behavior
No response
Prisma information
v4.7.1
generator client {
  provider        = "prisma-client-js"
  previewFeatures = ["fieldReference"]
}

datasource db {
  provider = "sqlite"
  url      = "file:./dev.db"
}

model User {
  id    Int     @id @default(autoincrement())
  email String  @unique
  name  String?
  posts Post[]
}

model Post {
  id        Int     @id @default(autoincrement())
  title     String
  content   String?
  published Boolean @default(false)
  author    User?   @relation(fields: [authorId], references: [id])
  authorId  Int?
}

Environment & setup

OS: Mac OS
Database: SQLite
Node.js version: v16.1.0

Prisma Version

Hey @nikolasburk,
This is not expected to be working.
First, field references only work in filters atm. Secondly, you're treating a field reference as a boolean value but the value of prisma.post.fields.published is not a boolean. It's a field that contains metadata that lets the QE render the column name instead of a scalar value.
If we had an API to express what you're trying to do, it'd probably look like so instead:
const updatedPost = await prisma.post.update({
  where: { id: 1},
  data: {
    published: { not: { prisma.post.fields.published } }
  }
})

But that's not possible today. If you want to persist this, you should either rephrase it the issue as a feature request or open a new one entirely.
I'm closing this now, feel free to re-open it if you want to rephrase it as a feature request. Cheers!


Fix typo in 'Upgrading from 7.0 and earlier'

Context

Fixes typo 'prohobit'
https://docs.gradle.org/7.6/userguide/upgrading_version_7.html#plugin_configuration_consumption
Contributor Checklist

[x] Review Contribution Guidelines
[x] Make sure that all commits are signed off to indicate that you agree to the terms of Developer Certificate of Origin.
[x] Make sure all contributed code can be distributed under the terms of the Apache License 2.0, e.g. the code was written by yourself or the original code is licensed under a license compatible to Apache License 2.0.
[x] Check "Allow edit from maintainers" option in pull request so that additional changes can be pushed by Gradle team
n/a Provide integration tests (under <subproject>/src/integTest) to verify changes from a user perspective
n/a Provide unit tests (under <subproject>/src/test) to verify logic
[x] Update User Guide, DSL Reference, and Javadoc for public-facing changes
[x] Ensure that tests pass sanity check: ./gradlew sanityCheck
[x] Ensure that tests pass locally: ./gradlew <changed-subproject>:quickTest

Gradle Core Team Checklist

[ ] Verify design and implementation
[ ] Verify test coverage and CI build status
[ ] Verify documentation

@bot-gradle test and merge

No milestone for this PR. Please set a milestone and retry.

I've triggered a build for you.

Thanks @KENNYSOFT for the PR


refactor: handle os reboot efficiently,optimized os configuration script

Description
refactor: handle os reboot efficiently,optimized os configuration script
BREAKING CHANGE: renamed nfs_path to nfs_host_or_ip_path in schematics input
Types of changes in this PR
No release required

[ ] Examples or tests (addition or updates of examples or tests)
[ ] Documentation update
[ ] CI-related update (pipeline, etc.)
[ ] Other changes that don't affect Terraform code

Release required

[ ] Bug fix (patch release (x.x.X): Change that fixes an issue and is compatible with earlier versions)
[ ] New feature (minor release (x.X.x): Change that adds functionality and is compatible with earlier versions)
[x] Breaking change (major release (X.x.x): Change that is likely incompatible with previous versions)

Release notes content
Replace this text with information that users need to know about the bug fixes, features, and breaking changes. This information helps the merger write the commit message that is published in the release notes for the module.

Checklist for reviewers

[ ] If relevant, a test for the change is included or updated with this PR.
[ ] If relevant, documentation for the change is included or updated with this PR.

Merge actions for mergers

Merge by using "Squash and merge".

Use a relevant conventional commit message that is based on the PR contents and any release notes provided by the PR author.
The commit message determines whether a new version of the module is needed, and if so, which semver increment to use (major, minor, or patch).

:tada: This PR is included in version 6.0.0 :tada:
The release is available on:

GitHub release
v6.0.0

Your semantic-release bot :package::rocket:


Release Google.Cloud.AlloyDb.V1Beta version 1.0.0-beta03

Changes in this release:
New features

Added enum value for PG15 (commit c4cb2c1)
Changed description for recovery_window_days in ContinuousBackupConfig (commit c4cb2c1)
Deprecate network field in favor of network_config.network (commit c4cb2c1)
Added ClientConnectionConfig (commit c4cb2c1)
Added QuantityBasedExpiry (commit c4cb2c1)
Added DatabaseVersion (commit c4cb2c1)

Created release for Google.Cloud.AlloyDb.V1Beta-1.0.0-beta03


used variables and arguments shows as unused in .js file

VSCode Version: 1.24.1
OS Version: Windows 10

Steps to Reproduce:
I can't give an exact step by step on how to reproduce this issue, in some larger .js files, the new feature that grey out unused variables will grey out variables and arguments that are used. When hover over the grey values the info box appears with following msg:

[ts] 'xxx' is declared but its' value is never read

Here is how it looks:

If I copy the code and pastes it into a blank .js file, the issue does not apply.

Does this issue occur when all extensions are disabled?: Yes

Does this reproduce in the latest VS Code build with all extensions disabled?

Yes, I just updated vscode to
Version: 1.25.0
Date: 2018-07-05T13:11:11.248Z
started vscode with code . --disable-extensions and confirmed that the "extensions are temporarily disabled" message appeared. The issue still applies.
I was not able to reproduce it in vs code insiders, as no variables showed as unused, even not when adding dummy var, const, let for debuggin. No grey out, and no "unused" flag on hover message.

Please share some example code (as text) or a small example project

It is one particular file that has this problem. As I wanted to share the code I copied all its content into a new file I called sample.js - In the new file all variables and arguments looks fine, none of them are grey, and none of them has the "is never read" hover message. I have tried to add a unused variable to this particular document. The linter immediately notices that it is unused while vscode does not grey it, but greys other (this time with extensions enabled). I think it must be a bug in the "grey out feature". One more example from this document:

I'm sorry but I cannot share this project due to liability, and I have not yet reproduces the bug in any other files. Will create a small project and try to provoke the bug to appear.

@rpuls Please share the small example project if you are able to


release 0.35 and add ArgoCD to CHANGELOG

release KTF 0.35 with the 3 changes in the CHANGELOG.

Codecov Report
Patch coverage has no change and project coverage change: -25.94% :warning:

Comparison is base (401825a) 57.12% compared to head (651e60f) 31.18%.

Additional details and impacted files
@@             Coverage Diff             @@
##             main     #771       +/-   ##
===========================================
- Coverage   57.12%   31.18%   -25.94%
===========================================
  Files          48       48
  Lines        3886     3886
===========================================
- Hits         2220     1212     -1008
- Misses       1398     2511     +1113
+ Partials      268      163      -105

Flag
Coverage Δ

integration-test
31.18% <ø> (-25.94%)
:arrow_down:

Flags with carried forward coverage won't be shown. Click here to find out more.
see 25 files with indirect coverage changes

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.


Preserve RustPython History

Summary
Follow up to #6099 that tries to preserve the history of the parser files
Test Plan
Opening a file and showing blame shows past commits.

Current dependencies on/for this PR:

main

PR #6119   👈

This comment was auto-generated by Graphite.

Important: Don't squash!

I know you can do this in git, but damn your git foo is good!

I know you can do this in git, but damn your git foo is good!

You give me too much credit. I first messed it up in https://github.com/astral-sh/ruff/pull/6099 . I then followed this guide that @davidszotten shared and had to give it like 5 tries to make it work... Let's hope it really works and that @charliermarsh doesn't kill me for doing a merge commit :sweat_smile:

🎉

Lol, this didn't work. It worked when viewing the files on the branch but not after merging :confounded:

I think I should have tone a rebase-merge rather than merge commit. Do I want to try this again


test: disable native module package test

[x] I have read the contribution documentation for this project.
[x] I agree to follow the code of conduct that this project follows, as appropriate.
[x] The changes are appropriately documented (if applicable).
[x] The changes have sufficient test coverage (if applicable).
[x] The testsuite passes successfully on my local machine (if applicable).

Summarize your changes:
Disables a test that is failing with the Electron 19 binary. ref https://github.com/electron-userland/electron-forge/pull/2869
@VerteDinde tested this locally and apparently it works with Electron 20 again. Not exactly sure why at the moment.

Can you link an example of a native module test failure?

@malept Here's a recent example, but you can see the same test failures on master for the past couple weeks: https://github.com/electron-userland/electron-forge/runs/6827958085?check_suite_focus=true
I was able to reproduce locally on my ARM64 macOS machine. It seems to hang on the electron-rebuild step:
  electron-forge:async-ora Process Succeeded: Preparing to Package Application for arch: arm64 -- after 1.5s +2s
  electron-rebuild rebuilding with args: [Arguments] {
  '0': {
    buildPath: '/var/folders/k1/fbqxcj6976920x32sbdrtwb00000gp/T/electron-packager/darwin-arm64/Test-App-darwin-arm64/Electron.app/Contents/Resources/app',
    electronVersion: '19.0.4',
    arch: 'arm64'
  }
} +0ms
  electron-rebuild rebuilding with args: /var/folders/k1/fbqxcj6976920x32sbdrtwb00000gp/T/electron-packager/darwin-arm64/Test-App-darwin-arm64/Electron.app/Contents/Resources/app 19.0.4 arm64 Set(0) {} false https://www.electronjs.org/headers [ 'prod', 'optional' ] false +0ms
  electron-rebuild exploring /var/folders/k1/fbqxcj6976920x32sbdrtwb00000gp/T/electron-packager/darwin-arm64/Test-App-darwin-arm64/Electron.app/Contents/Resources/app/node_modules/electron-squirrel-startup +0ms
  electron-rebuild exploring /var/folders/k1/fbqxcj6976920x32sbdrtwb00000gp/T/electron-packager/darwin-arm64/Test-App-darwin-arm64/Electron.app/Contents/Resources/app/node_modules/ref-napi +0ms
  electron-rebuild exploring /var/folders/k1/fbqxcj6976920x32sbdrtwb00000gp/T/electron-packager/darwin-arm64/Test-App-darwin-arm64/Electron.app/Contents/Resources/app/node_modules/electron-squirrel-startup/node_modules/debug +1ms
  electron-rebuild identified prod deps: Set(0) {
  'electron-squirrel-startup': true,
  'ref-napi': true,
  debug: true,
  'get-symbol-from-current-process-h': true,
  'node-addon-api': true,
  'node-gyp-build': true,
  ms: true
} +0ms
  electron-rebuild scanning: /private/var/folders/k1/fbqxcj6976920x32sbdrtwb00000gp/T/electron-packager/darwin-arm64/Test-App-darwin-arm64/Electron.app/Contents/Resources/app/node_modules +1ms
  electron-rebuild scanning: /private/var/folders/k1/fbqxcj6976920x32sbdrtwb00000gp/T/electron-packager/darwin-arm64/Test-App-darwin-arm64/Electron.app/Contents/Resources/app/node_modules/@electron +1ms
  electron-rebuild scanning: /private/var/folders/k1/fbqxcj6976920x32sbdrtwb00000gp/T/electron-packager/darwin-arm64/Test-App-darwin-arm64/Electron.app/Contents/Resources/app/node_modules/@electron-forge +0ms
  electron-rebuild scanning: /private/var/folders/k1/fbqxcj6976920x32sbdrtwb00000gp/T/electron-packager/darwin-arm64/Test-App-darwin-arm64/Electron.app/Contents/Resources/app/node_modules/@gar +1ms
  electron-rebuild scanning: /private/var/folders/k1/fbqxcj6976920x32sbdrtwb00000gp/T/electron-packager/darwin-arm64/Test-App-darwin-arm64/Electron.app/Contents/Resources/app/node_modules/@malept +0ms
  electron-rebuild scanning: /private/var/folders/k1/fbqxcj6976920x32sbdrtwb00000gp/T/electron-packager/darwin-arm64/Test-App-darwin-arm64/Electron.app/Contents/Resources/app/node_modules/@nodelib +1ms
  electron-rebuild scanning: /private/var/folders/k1/fbqxcj6976920x32sbdrtwb00000gp/T/electron-packager/darwin-arm64/Test-App-darwin-arm64/Electron.app/Contents/Resources/app/node_modules/@npmcli +0ms
  electron-rebuild scanning: /private/var/folders/k1/fbqxcj6976920x32sbdrtwb00000gp/T/electron-packager/darwin-arm64/Test-App-darwin-arm64/Electron.app/Contents/Resources/app/node_modules/@sindresorhus +0ms
  electron-rebuild scanning: /private/var/folders/k1/fbqxcj6976920x32sbdrtwb00000gp/T/electron-packager/darwin-arm64/Test-App-darwin-arm64/Electron.app/Contents/Resources/app/node_modules/@szmarczak +1ms
  electron-rebuild scanning: /private/var/folders/k1/fbqxcj6976920x32sbdrtwb00000gp/T/electron-packager/darwin-arm64/Test-App-darwin-arm64/Electron.app/Contents/Resources/app/node_modules/@tootallnate +1ms
  electron-rebuild scanning: /private/var/folders/k1/fbqxcj6976920x32sbdrtwb00000gp/T/electron-packager/darwin-arm64/Test-App-darwin-arm64/Electron.app/Contents/Resources/app/node_modules/@types +0ms
  electron-rebuild scanning: /private/var/folders/k1/fbqxcj6976920x32sbdrtwb00000gp/T/electron-packager/darwin-arm64/Test-App-darwin-arm64/Electron.app/Contents/Resources/app/node_modules/debug/node_modules +1ms
  electron-rebuild scanning: /private/var/folders/k1/fbqxcj6976920x32sbdrtwb00000gp/T/electron-packager/darwin-arm64/Test-App-darwin-arm64/Electron.app/Contents/Resources/app/node_modules/electron-squirrel-startup/node_modules +1ms
  electron-rebuild scanning: /private/var/folders/k1/fbqxcj6976920x32sbdrtwb00000gp/T/electron-packager/darwin-arm64/Test-App-darwin-arm64/Electron.app/Contents/Resources/app/node_modules/ref-napi/node_modules +1ms

I tested pinning to Electron 18 and things worked again: https://github.com/electron-userland/electron-forge/pull/2869

@malept It's currently failing on master - see this test run: https://github.com/electron-userland/electron-forge/runs/6824379075?check_suite_focus=true
I made a follow up issue here. The tests seem to work on Electron 18 and Electron 20; they're failing specifically when used with Electron 19: https://github.com/electron-userland/electron-forge/issues/2871


Adds fmt string formatting

This adds fmt string formatting and tests the build against axom.

I need to go update the docker containers to include axom. I believe that will fix the azure builds.

LGTM

LGTM

Any thoughts on moving to intel 19.0.0 to resolve this issue?

LGTM


⚠ SceneTime has degraded performance

In 45bd465, SceneTime ($ST) experienced degraded performance:

HTTP code: 200
Response time: 1946 ms

Resolved: SceneTime performance has improved in 591b2b9 after 4 minutes.


can not generate locale

Error occured when i execute sudo locale-gen:
Generating locales...
  en_US.UTF-8...localedef: ../sysdeps/unix/sysv/linux/spawni.c:366: __spawnix: Assertion `ec >= 0' failed.
/usr/sbin/locale-gen: line 41:   605 Aborted                 (core dumped) localedef -i $input -c -f $charset -A /usr/share/locale/locale.alias $locale

@hotleave - Quote from https://github.com/alwsl/alwsl/issues/33#issuecomment-305159463;

I've fixed this problem with spawn by backing out the change in glibc mentioned here Microsoft/BashOnWindows#1878
The package is available on the AUR here: https://aur.archlinux.org/packages/glibc-wsl/
You need to build it on a system that already has a working glibc, e.g. a proper linux install.

OK, thank you for your work

@hotleave - That work was from @patstew :)


Let's level up the smol developer.

Defining Requirements
I really struggled with getting my first prompt to feed to smol-dev, partly because my first prompt was way, way too big and included too much information.
Let's get smol-dev to ask for the requirements it needs to get started.  I used this:
System prompt: You are a prompt generation robot. you need to gather information about user goals, objecives, examples of preferred output, and other relevant content.  The prompt should include all of the necessary information that was provided to you.  Ask follow up questions to the user until you have confidence you can produce the perfect prompt.  Your return should be formatted clearly and optimized for gpt interactions.  Start by asking user goals, desired output and additional information you may need.
User prompt: I want to create a python application using FastAPI that mimics an existing Ruby on Rails application we have.  The existing rails app makes use of ActiveRecord for many of the API endpoints for things like updating the records via "edit".  The application is a simple "cart" of "products", each "product" is identified by an integer.  The database has an "account" for each user, and each "account" can have multiple "products" associated with it.  The user may login and logout as well as resetting their password.
It then asked me a series of questions which I would submit using the "assistant" and "user" additional parameters to keep the dialog flowing, until it generated a final prompt.
I then used this to feed to the first stage of smol-dev
Adding Additional Context
In my case, I had additional context that I wanted to give to GPT, but would cause the prompt to blow up.  So I would "fake" additional dialog with GPT to give it additional context.  I also tried telling smol-dev to ask for more details if it needed them to be able to generate the code.
  You specialize in writing one single file of the requested application.  You generate a complete, easily readable and maintainable source code file including type annotations and doc strings which will achieve the user's goals.
    Ask follow up questions to the user until you have confidence you can produce the perfect file list.  Start by asking the user for additional information you may need to generate the file list.  Once you are confident you understand the problem, begin generating the code for the file.

    Only write valid code for the given filepath and file type, and return only the code.
    Do not add any other explanation, only return valid code for that file type.

    Remember that you must obey 3 things:
       - you are generating code for the file "controllers.py"
       - do not stray from the names of the files and the shared dependencies we have decided on
       - MOST IMPORTANT OF ALL - the purpose of our app is specified by the user prompt - every line of code you generate must be valid code.

    The files we have decided to generate are:
    - [the list of files]

    And the shared dependencies are:
    -  [the list of dependencies]

User Prompt: [The prompt generated above]
Assistant response (faked): Can you tell me more about the data model for the listings and carts? For example, what are the attributes of a "listing", and how are listings associated with carts and accounts? How are they stored in the database?
User prompt: The database model looks like this: [Schema]
Assistant response (faked): To clarify, do you want the Python FastAPI application to have the same functionality as the existing Ruby on Rails app, including the use of ActiveRecord for the API endpoints? Are there any specific endpoints or features that are especially important to replicate?
User prompt: Here is a list of the endpoints I want to provide: [API endpoints]
It would then go on to generate code.
Thoughts?

Did this work for you ?

It seemed to do a good job of the process, but I haven't yet had a chance to evaluate the code produced by it.

haha thank you for the suggestions @linsomniac! i definitely feel like we need to build some tooling to evaluate the benefits of different prompts, and test for regressions. adding to todos...


Feature/sort results

Codecov Report

Merging #38 into develop will increase coverage by 0.02%.
The diff coverage is 100%.

@@             Coverage Diff             @@
##           develop      #38      +/-   ##
===========================================
+ Coverage    98.38%   98.41%   +0.02%
===========================================
  Files           36       36
  Lines         1609     1638      +29
===========================================
+ Hits          1583     1612      +29
  Misses          26       26

Impacted Files
Coverage Δ

ppa/archive/views.py
97.65% <100%> (+0.11%)
:arrow_up:

ppa/archive/forms.py
100% <100%> (ø)
:arrow_up:

ppa/archive/tests/test_views.py
100% <100%> (ø)
:arrow_up:

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update ebc8c32...e2dc12a. Read the comment docs.


trouble with precaching when supplying cacheId

Library Affected:
workbox-precache
Browser & Platform:
Build related issue
Issue or Feature Request Description:
It's not entirely clear how this is happening, but when i supply a cacheId i'm ending up with a second misnamed cache being created, that never gets populated.
On initial load everything seems fine:

When I refresh, a second, misnamed/empty cache gets created:

The trouble is, this second cache gets referenced when you go offline, and so it thinks it has these assets but seemingly looks for them in the wrong cache, causing complete failure to load.
This seems like a pretty major issue so I wanted to raise it, I was hoping to do a PR rather than file a vague bug, but didn't have the time right now, so I figured it was better to file something.
To be clear the exact same SW works perfect if I just remove the cacheId.

the same trouble, and when I set cacheId， the precache update will be not effective.

Thanks for reporting—we'll take a look.

There's a few different approaches that we could take to fix this.
I'm inclined to go something along the lines of https://github.com/GoogleChrome/workbox/compare/fix-multiple-cache-id?expand=1, which will explicitly prevent the cacheId prefix from being considered when generating the internal CacheFirst strategy that's used for precached URLs, since we're already passing in a cacheName that we know will include cacheId.
We could otherwise address it by trying to get cute inside of the RequestWrapper constructor and refusing to prepend the cacheId when the source cacheName already includes it, but then you prevent someone from deliberately setting cacheId and cacheName to the same value.
I need to write a few more tests before I'm ready to file a PR, and that's blocked on #716, but that's the general idea.

I'm inclined to go something along the lines of https://github.com/GoogleChrome/workbox/compare/fix-multiple-cache-id?expand=1, which will explicitly prevent the cacheId prefix from being considered when generating the internal CacheFirst strategy that's used for precached URLs, since we're already passing in a cacheName that we know will include cacheId.

I'm supportive of preventing the prefix from being used during internal generation of this strategy. Deferring to @HenrikJoreteg on whether he has preferences for this from his end given the options you outlined.

@addyosmani @jeffposnick I don't have strong opinions on the mechanism by which this is prevented.
If it were my lib I'd probably end up writing a simple little helper function along the lines of ensurePrefix that simply prepended it whenever it wasn't already there.
/me shrugs


Sizing does not properly account for caption space

So, by default, I think the caption should not ever overlap the image; as well, there should be minimum margin (spacing between caption and image).
Here is an example that shows a shortcoming on one of the iPhones (one of the narrower ones, I suppose).
portrait
landscape
Altering the resizing math should be no problem as the caption height is fixed, though maybe not. It is possible for captions to be two lines (do we need to worry about that?).
What do you think? Is there an alternative solution that comes to mind?
edit
Come to think of it, methinks the caption height should conform to the image size.

Feel free to assign this to me.

I believe this is resolved by PR #84


 I needed extra {} throughout, changing patterns like
{ use $periph::$reg::$field::offset; offset }

into
{ use $periph::{$reg::$field::offset}; offset }

Why is that?

Hmm, interesting. I removed braces because they looked useless to me, but apparently they are required for something.

Updated. Now it work with your tests.

It's a shame this update reduces the readability of the generated code, but it does nicely solve the shadowing of values, thanks! If it wasn't for https://github.com/rust-lang/rust/issues/48067 we could just write $periph::$reg::$field::offset directly without using it, but alas.


Docs: make it explicit that common_folder is not included by default

...which makes a lot of sense; if you had a directory common, there were no opt-out option (of not adding it)


[1.22/backport] repo: Release v1.22.11

Commit Message:
Additional Description:
Risk Level:
Testing:
Docs Changes:
Release Notes:
Platform Specific Features:
[Optional Runtime guard:]
[Optional Fixes #Issue]
[Optional Fixes commit #PR or SHA]
[Optional Deprecated:]
[Optional API Considerations:]

/docs

/lgtm deps

pushing this through as it has passed release CI


Storing refs into a Map or Array leaves the "current" property as null

Bug report

Summary

I am attempting to create an array of JSX Elements out of an array.map() lambda, but when setting and storing a ref for each of them, those refs return as objects with their "current" as null.
More information from this post:
https://stackoverflow.com/questions/63651084/map-of-refs-current-is-always-null?noredirect=1#comment112557125_63651084

If we look at the source of ViewPager (react-native-viewpager), we will see children={childrenWithOverriddenStyle(this.props.children)} (line 182). If we dig into the childrenWithOverriddenStyle method, we will see that it is actually "cloning" the children being passed in via React.createElement.
While this doesn't fix the problem, this at least answers the question of why the refs are null in your Map. It actually may be worth creating an issue for the library in order to swap it to React.cloneElement, since cloneElement will preserve the ref.

Environment info

react-native info output:
System:
    OS: Windows 10 10.0.18362
    CPU: (8) x64 Intel(R) Core(TM) i7-9700K CPU @ 3.60GHz
    Memory: 8.33 GB / 31.93 GB
  Binaries:
    Node: 12.16.2 - C:\Program Files\nodejs\node.EXE
    Yarn: 1.22.4 - C:\Program Files (x86)\Yarn\bin\yarn.CMD
    npm: 6.14.4 - C:\Program Files\nodejs\npm.CMD
    Watchman: Not Found
  SDKs:
    Android SDK: Not Found
  IDEs:
    Android Studio: Not Found
  Languages:
    Java: Not Found
    Python: 3.7.6
  npmPackages:
    @react-native-community/cli: Not Found
    react: ~16.11.0 => 16.11.0
    react-native: https://github.com/expo/react-native/archive/sdk-38.0.2.tar.gz => 0.62.2
  npmGlobalPackages:
    *react-native*: Not Found

Library version: x.x.x
Steps to reproduce

Create a Map/Array of React.RefObjects.
Use an arrow function to create an array of JSX elements
Within the arrow function, create and set a ref for each JSX Element, and store it in the Map/Array
Try to use any of the refs later and all of their "current" properties will be "null"

Describe what you expected to happen:

I expect the refs passed to the JSX Elements to be valid refs

Reproducible sample code

export default class QuizViewPager extends React.Component<QuizViewPagerProps, QuizViewPagerState> {

    quizDeck: Deck | undefined;
    quizRefMap: Map<number, React.RefObject<Quiz>>;
    quizzes: JSX.Element[] = [];
    viewPager: React.RefObject<ViewPager>;

    constructor(props: QuizViewPagerProps) {
        super(props);
        this.quizRefMap = new Map<number, React.RefObject<Quiz>>();
        this.viewPager = React.createRef<ViewPager>();
        for (let i = 0; i < this.quizDeck!.litems.length; i++) {
            this.addQuiz(i);
        }
    }

    addQuiz(page: number) {
        const entry = this.quizDeck!.litems[page];
        var ref: React.RefObject<Quiz> = React.createRef<Quiz>();
        this.quizRefMap.set(page, ref);
        this.quizzes.push(
            <Quiz
                key={page}
                index={page}
                ref={ref}
                setQuizPage={this.setQuizPage}
            />
        )
    }

    render() {
        return (
            <View style={{ flex: 1 }}>
                <ViewPager
                    ref={this.viewPager}
                    onPageSelected={(pageIndex) => {
                        console.log(this.quizRefMap);
                    }}
                >
                    {this.quizzes}
                </ViewPager>
            </View >
        );
    }
};

@jdperos it's already fixed in https://github.com/callstack/react-native-viewpager/pull/284


Use MovingAverageConvergenceDivergenceOutput

Define struct MovingAverageConvergenceDivergenceOutput and use it as an output of MACD, instead of tuple.
(see https://docs.rs/ta/0.1.2/ta/indicators/struct.BollingerBandsOutput.html for example)

Closed with https://github.com/greyblake/ta-rs/pull/19


Bug/claudia 5158

@jesuspg @jframos
https://jirapdi.tid.es/browse/CLAUDIA-5158
Testbed locally against FILAB in a concrete error

LGTM


Circle percentage invalid scope declared (showing invalid graph value)

While animate the circle (without multiple percentages), the graph is calculated with an undefined percentage variable. The variable percentage is not declared at the used scope.
Would you please fix the invalidly graph circle with the suggestion below? (bold marked)
We're using you're library for 520k+ users per year,  so your help is very welcome. Thanks in advance.
Example calculation:
(40.27 / 385 ) * 100 = 0.1045974025974026
360 * 0.1045974025974026 = 37,65506493506494
(which currently results in 40, with animateStep = 8)
function animate() {
   var currentCircle = circle;
   var currentCalculateFill = calculateFill;

   if (settings.multiPercentage === 1) {
       var index, percent;
        ...
   } else {
        animateCircle(currentCircle, currentCalculateFill, 360, **settings.percent**);
   }
}

Errorneous circle before fix:

Correct circle after fix:

Thank you very much for the pull request!


avif

Is there a reason not to resize avif image format?
A possibility to set different qualities per format would also be nice. A 60 quality jpeg looks very different from a 60 quality avif.
Maybe I'll play around with it if I have time and post a suggestion or pull request. I don't think my users will upload avif images soon, so for now this is already great.

No reason, I'll add and test it. Pull requests welcome to set quality by format :)

I've add some functionality in a cloned repo, there's a few things to consider.
I've added an EXTENSIONS_SANE_IMAGE_SIZE_UPLOAD_QUALITY_PER_FORMAT variable, that takes a json object with formats as property and quality as value. If empty, or if the uploaded format is not set in the object, it takes the default quality.
export default defineHook(({ action }, { services, logger, env }) => {
  // ...
  const qualityPerFormat = env.EXTENSIONS_SANE_IMAGE_SIZE_UPLOAD_QUALITY_PER_FORMAT ?? null;
  // ...
  const transformation = getTransformation(payload.type, quality, qualityPerFormat, maxSize);
  // ...
}

function getTransformation(type, quality, qualityPerFormat, maxSize) {
  const format = type.split("/")[1] ?? "";
  if (["jpg", "jpeg", "png", "webp", "tiff", "avif"].includes(format)) {
    const transforms = [["withMetadata"]];
    if (format === "jpeg" || format === "jpg") {
      transforms.push([format, { progressive: true }]);
    }
    if(qualityPerFormat) {
      qualityPerFormat = JSON.parse(qualityPerFormat);
      if(Object.hasOwn(qualityPerFormat, format)) quality = parseInt(qualityPerFormat[format]);
    }
    return {
      transformationParams: {
        quality,
        width: maxSize,
        height: maxSize,
        fit: "inside",
        withoutEnlargement: true,
        transforms,
      },
    };
  }
  return undefined;
}

But as I was testing things, I considered that I actually serve my images always as .avif. Since we use this plugin to avoid users flooding server disk space with large images, it makes sense to transform uploaded images to avif filesize.
So I've added an EXTENSIONS_SANE_IMAGE_SIZE_FORMAT that, when set, actually makes setting quality per format unnecessary.
export default defineHook(({ action }, { services, logger, env }) => {
  // ...
  const quality = env.EXTENSIONS_SANE_IMAGE_SIZE_UPLOAD_QUALITY ?? 60;
  const format = env.EXTENSIONS_SANE_IMAGE_SIZE_FORMAT ?? null;
  const qualityPerFormat = env.EXTENSIONS_SANE_IMAGE_SIZE_UPLOAD_QUALITY_PER_FORMAT ?? null;
  // ...
  const transformation = getTransformation(payload.type, quality, format, qualityPerFormat, maxSize);
  // ...
}

function getTransformation(type, quality, format, qualityPerFormat, maxSize) {
  format = format ?? type.split("/")[1] ?? "";
  if (["jpg", "jpeg", "png", "webp", "tiff", "avif"].includes(format)) {
    const transforms = [["withMetadata"]];
    if (format === "jpeg" || format === "jpg") {
      transforms.push([format, { progressive: true }]);
    }
    if(qualityPerFormat) {
      qualityPerFormat = JSON.parse(qualityPerFormat);
      if(Object.hasOwn(qualityPerFormat, format)) quality = parseInt(qualityPerFormat[format]);
    }
    return {
      transformationParams: {
        format,
        quality,
        width: maxSize,
        height: maxSize,
        fit: "inside",
        withoutEnlargement: true,
        transforms,
      },
    };
  }
  return undefined;
}

I didn't test this very well... currently I just use the EXTENSIONS_SANE_IMAGE_SIZE_FORMAT option.

I gave it another go, and updated the getTransformation function in order to always transform uploads to 'avif' format. But it still keeps the original file format on upload.  What am I missing? Is there any documentation on this?
function getTransformation(type, quality, maxSize) {
  const format = type.split("/")[1] ?? "";
  if (["jpg", "jpeg", "png", "webp", "tiff", "avif"].includes(format)) {
    const transforms = [
      ['avif', {quality}]
    ];
    // if(qualityPerFormat) {
    //   qualityPerFormat = JSON.parse(qualityPerFormat);
    //   if(Object.hasOwn(qualityPerFormat, format)) quality = parseInt(qualityPerFormat[format]);
    // }
    return {
      transformationParams: {
        format: 'avif',
        quality,
        width: maxSize,
        height: maxSize,
        fit: "inside",
        withoutEnlargement: true,
        transforms,
      },
    };
  }
  return undefined;
}

I gave it another go, and updated the getTransformation function in order to always transform uploads to 'avif' format. But it still keeps the original file format on upload.  What am I missing? Is there any documentation on this?

At this point, the best thing to do is getting into directus code and see what is going on. The documentation is scarce on transformations.
I'm sorry, I have no time right now to spend on this :_(


dockstore-ui2 build index.html

Feature Request
Desired behaviour
dockstore-ui2 should know how to build its own index.html file (either using npm config, environment var, etc) and not require compose_setup to do it.  This is so that changes in the index.html doesn't need to be duplicated in the compose_setup repo.
https://github.com/angular/angular-cli/issues/8759
┆Issue is synchronized with this Jira Story
┆Issue Type: Story
┆Issue Number: DOCK-620

@garyluu seems like you're on the case already

Trying...

Going to call this done since https://github.com/dockstore/compose_setup/blob/1.6.0/templates/index.html.template is no longer with us


[SPARK-39040][SQL] Respect NaNvl in EquivalentExpressions for expression elimination

What changes were proposed in this pull request?

Respect NaNvl in EquivalentExpressions for expression elimination.
Why are the changes needed?

For example the query will fail:
set spark.sql.ansi.enabled=true;
set spark.sql.optimizer.excludedRules=org.apache.spark.sql.catalyst.optimizer.ConstantFolding;
SELECT nanvl(1, 1/0 + 1/0);

org.apache.spark.SparkException: Job aborted due to stage failure: Task 0 in stage 4.0 failed 1 times, most recent failure: Lost task 0.0 in stage 4.0 (TID 4) (<IP_ADDRESS> executor driver): org.apache.spark.SparkArithmeticException: divide by zero. To return NULL instead, use 'try_divide'. If necessary set spark.sql.ansi.enabled to false (except for ANSI interval type) to bypass this error.
== SQL(line 1, position 17) ==
select nanvl(1 , 1/0 + 1/0)
                 ^^^    at org.apache.spark.sql.errors.QueryExecutionErrors$.divideByZeroError(QueryExecutionErrors.scala:151)

We should respect the ordering of conditional expression that always evaluate the predicate branch first, so the query above should not fail.
Does this PR introduce any user-facing change?

yes, bug fix
How was this patch tested?

add test

cc @viirya @cloud-fan

thank you@viirya, any comments? @cloud-fan

thanks, merging to master/3.3!


feat: validate login passed to background and implemented into add all injected button

Upon finding a bug for this button we found that the login validation could be passed to the background and used elsewhere and we have done that.

This change is

Hello diego


Add xslt transformation for replacing Slashdot's newlines

User lv8pv mentioned on the #newsboat IRC channel that the newlines in Slashdot articles are not shown in Newsboat.
Feed url: http://rss.slashdot.org/Slashdot/slashdotMain
I don't know if newsboat does anything wrong in parsing the feed, but this script can be used to transform newlines into explicit html <br> elements.

coverage: 59.8%. remained the same
when pulling 1bb934f5a11fd2a6973249756904f13013f5791e on dennisschagt:contrib-slashdot-newline-replace
into 6124cd1867838511d4f4f8c0527f784d29acbfe4 on newsboat:master.

Thanks!


Add Sensitive Keys to .gitignore for Docker-Compose Configuration

While building the Docker-compose configuration for the project, certain sensitive keys and credentials are required. To enhance security and prevent the inadvertent inclusion of confidential information in the version control system, we should add the relevant files or directories to the .gitignore file.

Hey there! Thanks for the heads-up on this, but this is not a current issue. What you are describing is part of the development pipeline, not a bug or a security issue. I agree that devs should not commit those files, but this is just as simple as not including them in their commits. In addition, we are having discussions to replace these services altogether, so I will have to close this issue and reject the pull request.


Redefine Target in config file

Currently target in config file target is represented as
target = "type/target/contaner/ect"
target_namespace = "namespace"

A better representation for target and target_namespace in the config file would be a nested one
target = "type/target/contaner/ect" # "default" as namespace
# OR
target = { path = "type/target/contaner/ect", namespace = "my-namespace"  }
# OR
[target]
path = "type/target/contaner/ect"
namespace = "my-namespace"

I would suggest selector instead of path as it's often used in k8s lingo. Currently containers are selected by a single string, but in the future more sophisticated methods could be supported e.g. selector = { kind = "pod", labels = { "app" = "foo } }.


🚀 [Feature Request] - Api for Signup and Login

Is your feature request related to a problem ? Please describe. ✍
I recently have checked the codebase of your website and I was unable to find the apis for proper login and signup of a user. So I would like to add this feature under gssoc'24.
Describe briefly how you would implement this enhancement.
Some steps to implement this enhancement-
1. To create a proper backend/server folder.
2. To implement the login and signup apis as per MVC model.

Additional context or screenshots
No response
Are you contributing for a program?
GSSoC2024
Code of Conduct

[X] I have read and agree to the Contributing Guidelines of this project.

@Ja3mamtora Can you please assign this issue to me under gssoc'24


Showing available alternative IP when running dev server, as an alter…

This small code is intended to make it easier for developers to use an alternative IP instead of localhost by showing an available IP to use, as well as the argument required while using the dev server.

4025

https://github.com/zeit/next.js/issues/4025

I don't think the added overhead to next-dev is worth it, since setting the hostname is not common. All that's needed is documentation for --hostname.

I get it, but getting an available address is pretty useful. The ionic CLI is doing it and I’m using it often as it is useful for cross platform development. I’ve always appreciated this feature and I think the hostname flag might be used a little more if this feature is added.

Is next - - hostaname the command?
Or can I use a local IP instead of local host?


Lesson 4 pip installation

I've installed python 3.10 but there is a problem with pip. In Visual Studio I get this error when typing pip --version "zsh: command not found: pip" Could be something small I am very new to all this although I have been looking for awhile now and cant find the solution any help?

Can you run python --version in vscode shell? pip is now implicitly installed with Python installation if we download the recent versions

Yes I can run python --version and get "Python 3.10.3" which is why I am confused because like you said pip should be downloaded with python now. Also when I downloaded python version 3.10.3 it was initially stuck in 2 something I dont remember exactly the version. But I thought maybe that was why pip wasn't showing up so I switched to version 3.10.3 and I was still getting "zsh: command not found: pip".

I had the same issue.
After some googling realized that I need to use "python3" where the tutorial says "python" and "pip3" where the tutorial uses "pip"
hope that helps


fix(contentful): fixed wrong variable name that caused an infinite loop

fixes #397

I made this change manually and it fixed the error I was having. Thanks @crsten.

Thanks @crsten :) and thanks for testing @nathanjisaac.


Test Adapter Possibly using the wrong version of Microsoft.VisualStudio.TestPlatform.ObjectModel

I'm having an issue getting my build server to run my unit test suite. Here's the details:
We're using NUnit 2.6.4
The build server is running TFS Build 2012 with Update 4
The TFS server is running TFS 2013 with Update 2
I have my build controller set up to point to a version controlled folder that has 3rd party dependencies - in this folder are the 4 NUnit dependencies need to run NUnit tests on the build server.
The Test Runner is setup properly to use Visual Studio's test runner
Both Visual Studio 2012 and Visual Studio 2013 with Update 4 are installed on the build server
When I check-in via a gated checkin through my build definition, I get this error:
TF900546: An unexpected error occurred while running the RunTests activity: 'Could not load type 'Microsoft.VisualStudio.TestPlatform.ObjectModel.Client.ITestExecutorLauncher2' from assembly 'Microsoft.VisualStudio.TestPlatform.ObjectModel, Version=<IP_ADDRESS>, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.'.
This is the same problem found at:
VS2013, TFS 2012 AutomatedTest NUnit not working problems
I'm using NUnit's latest Test Adapter found at: https://visualstudiogallery.msdn.microsoft.com/6ab922d0-21c0-4f06-ab5f-4ecd1fe7175d
When I decompile this assembly I see that adapter has a dependency on Microsoft.VisualStudio.TestPlatform.ObjectModel version 11.00.
What is interesting here is looking through Client namespace of that class, there is no ITestExecutorLauncher2 which is what the run tests activity is looking for (I think). However, ITestExecutorLauncher2 is found in version 12.00 of Microsoft.VisualStudio.TestPlatform.ObjectModel.
My question is am do I have something misconfigured here or should NUnit.VisualStudio.TestAdapter, Version=<IP_ADDRESS> reference version 12.00 of Microsoft.VisualStudio.TestPlatform.ObjectModel and not version 11.00?

The Microsoft test runners , vstest.discoveryengine and vstest.executionengine both search the test adapters for an ExtensionUri attribute with an executionUri, which in NUnits case is
public const string ExecutorUri = "executor://NUnitTestExecutor";
Whatever class has that attribute will be used for discovery and execution.
The reference to the VS2012 version is intentional.  Using that reference the adapter will run on both 2012 and 2013. Note that the dll is not included, and it is set to ignore version, so it will load the 2013 dll if that is what is present.
I understand you are using a mix of 2012 build server, with TFS 2013, and with both VS 2012 and VS2013 installed on the build server.
This should work, but obviously you are hitting some issue here.

Does this also happen when you build normally, that is without gated checkin ?
If you create a small test project, will that also fail the same way ?  And building normally (non-gated).  Or is it a particular solution that is failing ?  For the small test solution, keep all build settings at the default.
If you remove the test assemblies from the version control folder, and use the nuget approach instead - again with a small test solution, (follow the guidelines here http://blogs.msdn.com/b/visualstudioalm/archive/2013/06/11/part-3-unit-testing-with-traits-and-code-coverage-in-visual-studio-2012-using-the-tfs-build-and-the-new-nuget-adapter-approach.aspx , see section Providing 3rd party adapters through NuGet
You refer to "same problem" "VS2013, TFS 2012 AutomatedTest NUnit not working problems" - I assume you mean this stackoverflow post "http://stackoverflow.com/questions/28000370/vs2013-tfs-2012-automatedtest-nunit-not-working-problems" .  The solution there seems to be an upgrade of the TFS 2013.  This can indicate that having the controller on 2013 and the build server on 2012 can trigger this behaviour.
It is not related to having both VS 2012 and VS2013 on the same machine, that scenario has been tested and found working.
Changing the reference to 2012 should not have any effect, but you can build a version where you change this and try (or I can build one for you if you prefer). I would be very surprised if that solved anything, but I have been both surprised and wrong before :-)

Osiris, thanks for the quick response!
Thank you for clearing up that the reference to VS2012 is intentional.
I didn't mention in the original comment, but Visual Studio 2013 was something I installed on the build server this morning to see if it might help this issue.  Like you mentioned, it was one of those "I'll be surprised if this works" experiments, but it changed nothing.
As for your comments:

No - if I don't do this via a gated check-in, no tests are run so I'm fine there.

Yes - I can produce this on other projects using NUnit as well.

I have removed the custom version controller assemblies from the controller and I get the same exact error message regarding not being able to locate ITestExecutorLauncher2.

However, at least it proves that the build server is test adapter aware.  I wanted to double-check it by pulling the NUnit.TestAdapter out of packages.config and certainly it gave me warning that it could not load the following assemblies: nunit.util, nunit.interfaces and nunit.core.  When I put it back in one of my projects and checked-in, those warnings dropped.  So I was pleased here - I actually missed the news when TFS Build became test adapter aware, so thanks for that.
I also double-checked that the adapter was not installed on the build server itself and it was not.

Yes, that is the correct stackoverflow post I read - and I'm starting to get the feeling that upgrading my TFS build server is the only thing that will fix this.  I also posted this query on stackoverflow and the first comment I received was from one of the ALM Rangers asking why I'm using old build agents lol.  Short answer is I've not had an opportunity to upgrade it yet and really I had no reason to update them as we had been using MSTest for a long time with no issues but I'm trying to transition away from MSTest into NUnit as I really find value in [TestCase] :)

I would love to try this, but I'm not sure how - I do not have the code for the adapter but it does seem like it would solve it - at least theoretically it should find ITestExecutorLauncher2.  If it's something you have handy I would prefer you build it and would be very appreciative of it.  Is this something you can put on NuGet or would I just need to drop it in the 3rd party dependencies solution and point the build controller back to use custom assemblies?

Osiris,
Just wanted to let you know that I installed a 2013 build controller and the 2013 build agents on my dev box scaling out my build process and used that controller in my build definition and it worked (same fix as the stackoverflow post).
I tested both the version 11 and 12 process templates and they both worked as intended so I'll just spin up another VM tomorrow and install the 2013 agents there for our 2013 projects and I'll also see if all the 12 build definitions work flawlessly as well with the 2013 agents.
Please don't worry about building that adapter.
Thanks again for your help.

Great to hear the upgrade solved the issue :-)
Just for curiosity:  You said "No - if I don't do this via a gated check-in, no tests are run so I'm fine there."  I might get you wrong here, but gated checkin is no requirement for building and running tests.   Running standard builds should work fine.  Did I understand you correct?

Yes. As long as no tests were being run I didn't have any issues.  With the 2013 build agents, I'm able to though.  Should have that new up today.

Great!  I think this can be closed then.
If you get any more issues with this, just reopen it :-)


Support (de)serializing providers

This PR adds a bunch of code in the short term but will be neutral in the long term once I remove handles later.

Merging since it's fairly low risk to break anything else – it's mostly new code


Windows log

Pull Request Checklist
Is this in reference to an existing issue?
General

[x] Update Changelog following the conventions laid out on Our CHANGELOG Guidelines

[x] Update README with any necessary configuration snippets

[x] Binstubs are created if needed

[x] RuboCop passes

[x] Existing tests pass

New Plugins

[x] Tests

[x] Add the plugin to the README

[x] Does it have a complete header as outlined here

Purpose
Known Compatibility Issues

Also it looks like there is a conflict in the README.md so I will rebase and fix that up for you.

released: https://rubygems.org/gems/sensu-plugins-windows/versions/2.7.0