HAWQ-1449. HAWQ start/stop cluster should be able to start/stop RPS o…

…n standby node

@interma @linwen @zhangh43 @ictmalili  pls review, thanks

+1

Merged into master. Close this PR.


Add pylint/PEP8 checks to GitHub Actions to validate the python shell

Travis should run some code analysis checks to determine whether the Python shell is ready for release, e.g. pylint/PEP8.

Currently there are lots of inconsistent uses of " and ' for Strings, as well as lines that are very long. A PUP8 linter would flag these.

Fixed by https://github.com/gchq/gaffer-tools/pull/1028


fix local docker build and run

Fix #354 unable to build docker container.
Add gulp to normal node dependencies as currently not installed with npm install --production flag but is necessary to run with npm start in the container.
Add dockerignore file  to ignore node_modules and other larger directories which slow down the docker build from COPY . /usr/src/app.
Bind on <IP_ADDRESS> so Raneto can be accessed from outside the container if the port is forwarded.
I have tested mounting a local content folder into the container at /usr/src/app/example/content and it works as expected.

Thanks!
Yes, that will solve the issue for now.
This builds the assets with gulp in the Docker image.
In the future, we'll move to generating the assets outside Docker and copy them into the image.
A quick note:
The reason for the && is to perform 2 commands with one RUN Dockerfile statement.
Every RUN statement creates a new Docker image "layer" so 2 RUNs gives 2 layers.

Thanks for the feedback!
Yeah I thought it made sense for Docker to handle pulling and building all dependencies inside the container.
Good point on the two commands in one, happy to combine that back to one.
We can also get clever with Docker and copy the package.json and do npm install and the gulp stuff before copying the source code to make use of Docker caching the image layers to make the builds faster!


Added Laser Range Finder

Added Laser Range Finder
Edited Readme.md
Please can you revise and merge if ok

@davidoc85 you should have admin rights to merge these yourself these days, but I'll give it the once over in the morning and merge if it looks good. Also if you remind me what your email address is and if you create an account on http://npmjs.org I'll add you as a maintainer to the package so you can publish updates

apart from some minor layout quirks it looks fine without any hardware to test it on. If you can let me know the email address linked to your npmjs.org account I'll merge this, edit the package.json and push a new version

Thanks @hardillb,
First time pushing an update, so I thought you would be best checking it first. I have signed in with the same username davidoc85 @ hotmail . com
May be adding some more in the future, great to have others working on it as well.


Advanced layouts using flexbox

#Advanced layouts using flexbox
Requirements include:
*Responsive box model for mobile devices.

complete


⚠ Bofrost.be has degraded performance

In 7121266, Bofrost.be (https://www.bofrost.be) experienced degraded performance:

HTTP code: 200
Response time: 1402 ms

Resolved: Bofrost.be performance has improved in 86a7250 after 9 minutes.


Redirect URI for Canvas Developer Key

Where can I find the required Redirect URI for the OneDrive LTI in Canvas when creating the Developer Key?
Thanks,
Patrick Tart

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

ID: 6fee0615-eb33-e945-c1ee-efad095ead11
Version Independent ID: 2a7089da-e35a-8f39-3df1-98ee29710cb6
Content: Integrate Microsoft OneDrive LTI with Canvas
Content Source: microsoft-365/lti/onedrive-lti.md
Service: microsoft-365-business
GitHub Login: @DaniEASmith
Microsoft Alias: danismith

@ptart
For the OneDrive/Canvas integration, you should only have to copy the JSON text from the Microsoft LTI registration portal and paste it to Canvas and copy the Client ID from Canvas and paste it the Microsoft LTI registration portal. There shouldn't be a need for the Redirect URI like some of the other LMS providers.
If you're seeing a different experience than indicated in the document, I'd suggest submitting a support ticket: https://learn.microsoft.com/en-us/microsoft-365/lti/manage-microsoft-one-lti?view=o365-worldwide#report-problems-with-lti-registration-portal.

Thanks for confirming. Copying/pasting the JSON to a different application added some extra spaces. I cleaned it up and everything‘s working as expected. Thanks for your help again! You can close this ticket.
Regards,
Patrick Tart
Technology Services
Wake County Public School System

From: Dani Smith @.>
Sent: Tuesday, March 28, 2023 10:19:30 AM
To: MicrosoftDocs/microsoft-365-docs @.>
Cc: Patrick Tart _ Staff - TechnologySvcs @.>; Mention @.>
Subject: Re: [MicrosoftDocs/microsoft-365-docs] Redirect URI for Canvas Developer Key (Issue #11484)
You don't often get email from @.*** Learn why this is importanthttps://aka.ms/LearnAboutSenderIdentification
CAUTION: This email originated from outside of the organization! Proceed with caution!
@ptarthttps://github.com/ptart
For the OneDrive/Canvas integration, you should only have to copy the JSON text from the Microsoft LTI registration portal and paste it to Canvas and copy the Client ID from Canvas and paste it the Microsoft LTI registration portal. There shouldn't be a need for the Redirect URI like some of the other LMS providers.
If you're seeing a different experience than indicated in the document, I'd suggest submitting a support ticket: https://learn.microsoft.com/en-us/microsoft-365/lti/manage-microsoft-one-lti?view=o365-worldwide#report-problems-with-lti-registration-portal.
—
Reply to this email directly, view it on GitHubhttps://github.com/MicrosoftDocs/microsoft-365-docs/issues/11484#issuecomment-1486986359, or unsubscribehttps://github.com/notifications/unsubscribe-auth/ADAG7P3CLTNUK7KI74F5GRTW6LXPFANCNFSM6AAAAAAWKP5634.
You are receiving this because you were mentioned.Message ID: @.***>


New Repository Request: reportstream-sftp-ingestion

What type of help do you need?

[ ] Question
[x] New Repo
[ ] Delete Repo
[ ] User Membership (please make sure new members are familiar with the CDC open practices and set up their profile with name and org info to help people collaborate with them)
[ ] Other

Please describe how you'd like us to help.
Please create a new public repository in this organization called reportstream-sftp-ingestion.  This will be a separate service to support ReportStream receiving files via SFTP.  Please add me, @halprin, as an admin.

Repository created for Peter Kendall (ujg1), admin rights added.


display of asset quantity for assets that have subassets

In FreeWallet desktop version 0.9.22 an asset that has subassets seems to show a "Total Supply" quantity of zero and an "unlocked" icon for the parent asset in the detail panel.

this issue should be fixed in the next release.


feat(prover): Update witness generator to zkevm_test_harness 0.150.6

What ❔

Why ❔

Checklist

[ ] PR title corresponds to the body of PR (we generate changelog entries from PRs).
[ ] Tests for the changes have been added / updated.
[ ] Documentation comments have been added / updated.
[ ] Code has been formatted via zk_supervisor fmt and zk_supervisor lint.

@EmilLuta

how did we manage to compact it

This process will happen in two steps: in the first step (this PR) we simply fill unnecessary fields with zeros to maintain backward compatibility. The next step is to change the input structures of the circuits, from which we will remove unnecessary fields. We will do this during the protocol update.

did you manage to run this?

Yes. But we need to update Shivini, which is part of another monorepo, so that the prover can be compiled in CI

We'll have to adjust circuit prover as well.

I'm not sure about it. I'll check, but at this stage it shouldn't affect it in any way.


FSP Load GC An error has occurred

Using GCLoader to boot latest Swiss 1250
Using SD2SP2 with 8 GB SD card (tried 2 GB as well) for configuration device settings (attempting to use GCLoader writeback gives no SD card error)
Attempting to load game using FSP from RetroNAS
It starts patching the necessary DOL files to boot the game
Goes into game and gives an error has occurred turn the power off
Games load just loading from GCLoader

I see you are working with the upstream project here https://github.com/emukidid/swiss-gc/issues/651
This does not appear to anything to do with the RetroNAS deployment at this stage, so we will give the upstream project a chance to debug your issue

one of the switches in the mix was not functioning properly, sorry for wasting your time

Thanks for letting us know


adding Huawei OBS as object store.

Description
This PR adds an object storage plugin for Huawei OBS, but also introduces an error I do not know how to fix when I
execute "mvn -pl :cloud-client-ui jetty:run":
http://<IP_ADDRESS>:8080/client/ returns "HTTP ERROR 503 Service Unavailable" because of the following exception:
[WARNING] Failed startup of context o.e.j.m.p.JettyWebAppContext@1df8ea34{/client,file:///opt/cloudstack-huawei-obs/client/target/classes/META-INF/webapp/,UNAVAILABLE}{file:///opt/cloudstack-huawei-obs/client/target/classes/META-INF/webapp/}
java.lang.NullPointerException
When I remove my module from client/pom.xml http://<IP_ADDRESS>:8080/client/ is available and I can log into the UI,
but my plugin is not registered as provider.

Types of changes

[ ] Breaking change (fix or feature that would cause existing functionality to change)
[ x] New feature (non-breaking change which adds functionality)
[ ] Bug fix (non-breaking change which fixes an issue)
[ ] Enhancement (improves an existing feature and functionality)
[ ] Cleanup (Code refactoring and cleanup, that may add test cases)
[ ] build/CI

Feature/Enhancement Scale or Bug Severity
Feature/Enhancement Scale

[ ] Major
[x ] Minor

Bug Severity

[ ] BLOCKER
[ ] Critical
[ ] Major
[ ] Minor
[ ] Trivial

Screenshots (if appropriate):
How Has This Been Tested?

How did you try to break this feature and the system with this change?

@scsynergy is your with that jar added? if so you probably want to add it as non-oss. (se my remark above)
Also note I gave your PR a more descriptive title (change if you don´t like it)
Feel free to ask the community anything here or on the mailing lists (or on a range of other platforms)

@scsynergy did you close this on purpose? Are you going to open a new PR?


3.0 models in ROS/LibTorch

Hello!
I recently converted your ROS1 node to ROS2, and have found the model works very well, so thanks for sharing it!
One small question... would it be possible to get traced versions of the 3.0 models? Would love to try them out and see the performance differences.
Thanks!

Thanks for the feedback. The current implementation is unfortunately not directly traceable and requires are rewrite+model conversion. As this seems to be popular request, we will prioritize this.

Thanks for working on it, much appreciated!

I just pushed a preview of a scriptable and traceable model to branch "dpt_scriptable" in the DPT repo: https://github.com/isl-org/DPT/tree/dpt_scriptable. Note that you have to download updated weight files for this to work. You can find updated links in the README of the branch.
Please let us know if this solves your problem or if you experience any issues with this. We'd also be happy to hear what you find out about performance differences.

@ranftlr ,
I try to trace your "dpt_hybrid-midas-d889a10e.pt" using torch.jit.trace but failed
Below is the error message:
File "/usr/local/lib/python3.9/dist-packages/torch/_tensor.py", line 867, in unflatten
return super(Tensor, self).unflatten(dim, sizes, names)
RuntimeError: NYI: Named tensors are not supported with the tracer

Excellent @ranftlr thank you! I will test this on Friday.

@jpapon Hi, Is your ROS2 ported code available anywhere?


isSameRoute test order

Version
3.0.1
Reproduction link
https://codesandbox.io/s/2zlyzp6mm0
Steps to reproduce
in the sample just click 'launch' and then 'fail'
in general

create a route in the router with a name and a component
pragmatically change to the component using this.$router.push({ name: xxx, params: yyy })
put some link/button inside the component that will call this.$router.push with the same name but different params

What is expected?
in the sample: the text should update
in general:
The router should update this.$route.params according to the new values given, the "completion" callback should be called
What is actually happening?
in the sample: the text is not updated
in general:
The router is not loading the new params, the "abort" callback is called

in the isSameRoute function there a several cases
when there is a 'path' it is tested before when there is a 'name'
'path' is mandatory, we cannot create routes without path
thus the "name/params" comparison is never triggered and vue-router considers that the page is the same and aborts the navigation
inverting the order of the tests (testing for name before path) will fix this issue but I do not know enough the vue-router internals do be sure it will not break some other functionalities

You need to add a param named title to you route, otherwise, they are indeed, the same route


We can merge this is we want, or not. Room for robustness improvements.

Discussed with Kendall out-of-band: we'll fix FTL to allow empty files.


Possible enhancement: Propagate unhandled exceptions as-is and format in default Django handlers

Hi dear maintainer,
We are using this library for our project and it is amazing.
The only thing we have noticed (we are using structlog + django-structlog + structlog-sentry), the unhandled exceptions are not properly propagated and therefore handled (some libraries are using process_exception inside middleware to "add" something useful or to log something outside.
Currently when unhandled exception is happening, it is automatically "wrapped" into 500 response and returned and therefore no standard Django flow is running to "process" this exception, meaning all middlewares and additional libraries become useless in this case.
Instead it would be great to "propagate" the unhandled exception through all the middlewares and then properly process it inside custom 404 or 500 handlers.
What do you think? Is it possible to implement somehow? Just asking... as I dug into the codebase and and could not find easy route. Unfortunately not all libraries are relying on the signal got_request_exception.
Best regards,
Sergei

Honestly, the idea is interesting especially that it allows the middleware to also process the exception. However, this is an exception handler for DRF specifically.
Still, here's how you can work around the issue you described:

create a custom exception handler

from drf_standardized_errors.handler import ExceptionHandler

class CustomExceptionHandler(ExceptionHandler):
    def should_not_handle(self, exc: Exception) -> bool:
        is_drf_exception = isinstance(exc, APIException)
        if not is_drf_exception:
            # attach the context to the exception so we can use it later in the django's handler500.
            # Also, serves as a way to identify exceptions that came from a drf view
            exc.drf_handler_context = self.context
        # handle drf exceptions only. This restores the behavior of the original drf exception handler
        # and propagates any other exceptions
        return not is_drf_exception

then update the settings DRF_STANDARDIZED_ERRORS = {"EXCEPTION_HANDLER_CLASS": "path.to.CustomExceptionHandler"}

define the custom handler500

import sys
from django.http import JsonResponse
from django.views.defaults import server_error
from somewhere import CustomExceptionHandler

def error_handler(request):
    _, exc, __ = sys.exc_info()
    if context := getattr(exc, "drf_handler_context", None):
        handler = CustomExceptionHandler(exc, context)
        exc = handler.convert_unhandled_exceptions(exc)
        data = handler.format_exception(exc)
        return JsonResponse(data, status=500)
    else:
        # for exceptions raised in a non-drf view, use the default django error handler
        return server_error(request)

then set handler500 = "path.to.error_handler" in your urls.py

That's it, you should be good to go: the exception is no longer handled at the drf view level, rather it will propagate up the middleware chain until it gets handled there or reaches handler500. Also, keep in mind that when debug is true, handler500 is not called, rather you'll see the yellow screen.

Let me know if that works for your setup, as I only tested this without structlog


Placeholder dashboard page for usage statistics visualisation

I would like to: Implement a placeholder dashboard page
So that I can: Have usage statistics visualisation tools ready for when the real data can be integrated with

The react-plotly npm module will be used to provide the plotting functionalities for the Dashboard.

Note that this issue is moved onto the next Iteration (3 -> 4) in order to prioritise the development of the other services.

Done in placeholder-dashboard-page branch.


导出 pdf 预览界面不应受界面缩放影响

https://ld246.com/article/1666087330755

关联 https://github.com/siyuan-note/siyuan/issues/6262

思源2.4.2已修复


Set file extension for downloaded files

Currently, when you download a file it doesn't have an extension, just a name which is equal to the dashboard name. This is confusing for some users.
Is it possible to automatically add an extension to the file?

Thank you very much!

Pleasure. I used the dashboard title as the file name, since the dashboard ID can be meaningless in Grafana 5.
I hope this doesn't introduce bugs, since the dashboard title might have characters in it that are not valid in HTTP headers or in file names. I've tried to sanitise it, so hopefully there should be no strange corner cases.


Login Button

In Navbar, When hovering on login button both its background and text colour are dark, it can be improved.

Hi @adityaS011, Sorry i didn't inform this to you earlier, but I was solving this issue and ready to raise a PR. Please can you reopen the issue as this issue is still there in the production.
https://github.com/adityaS011/ecommerce-clone/assets/56840292/4d1a6b32-ff6f-49b6-9249-aeec345b834b

Okay let me create an issue for the same.


write lock

can i do unlock NFC card after i locked it and what password is given to card when it lock.

@adham-ashraf77
Sorry, This project mainly focused on providing a platform channel to iOS/Android API.
Therefore, I don't think It's a good place to help with individual tag specifications.
Please consider referring to StackOverflow and so on.

okay but can you tell me the password stored to NFC card when i lock it

@adham-ashraf77
This plugin does not store password.


Enable alternative themes for Bootstrap (e.g. Boostwatch)

Alchemy is a great theme, but it was not using the full potential of underlying technology. Bootstrap provides an easy way to customize look and feel of rendered pages, and a lot of themes for Bootstrap are freely available, e.g. at https://boostwatch.com
This commit introduces a new configuration variable BOOTSTRAP_CSS to make use of any existing Bootstrap skins. All incompatibilities in theme.css were fixed:

Instead of using constant color values we use Bootstrap css variables for colors: https://getbootstrap.com/docs/4.3/getting-started/theming/#css-variables
The only hardcoded value left is the color for header/footer borders. It was moved into a variable --alchemy-border for easier overriding if needed. I have tested current value against both dark and light Boostwatch themes, it works ok.
Pagination template was modified slightly to avoid producing invisible text with some of Bootstrap skins

I understand that you're using this theme on several web sites including https://nairobilug.or.ke/. After applying these changes resulting web sites will look slightly different - not all hardcoded colors could be replaced with variables in such a way that produced consistently good results across different Bootstrap skins.
There are several options:

If new look is acceptable, no one needs to do anything and we all continue to use this great theme. Here is how nairobilug.or.ke will look with Boostwatch Yeti skin: front page screenshot
We can add a new configuration variable to provide the overriding CSS stylesheet, and you can make use of it to maintain old looks with the updated theme. I plan to implement this feature and to submit it in a separate pull request.
I can continue maintaining a separate fork of this theme

I've noticed a similar pull request (#63) only when I went to submit this one. Apart from mine being newer (hence guaranteed to merge cleanly) I consider my approach slightly more generic and therefore favorable :)

Thank you for creating this beautiful theme! :+1: There are very few good themes for Pelican!
PS: your website is so much cooler than that of my local LUG :tada:

LTGM; we can merge this and close #63

It looks like the oldstyle.css does not actually restore the prior css for some aspects. The background colors are not correct, for example.
Here is the screenshot of the default them prior to @sio's work:
https://github.com/nairobilug/pelican-alchemy/blob/8e2377f8f99ed6aabcb7e5d4d8175bf0ad5a1d01/screenshot.jpg
And here is the new one:
https://github.com/nairobilug/pelican-alchemy/blob/master/screenshots/oldstyle.png
Note that the header has a grey background and the rest of the page is white prior to this change.

I have fixed the background issue for oldstyle.css and have updated screenshots and demo website.
@moorepants, thank you for reporting!

@sio, thank you :)


fixed bug in the repr for Json inputs that caused infinite recursion

Codecov Report
All modified and coverable lines are covered by tests :white_check_mark:

Project coverage is 98.34%. Comparing base (982b92d) to head (3aefbc4).

:exclamation: Your organization needs to install the Codecov GitHub app to enable full functionality.
Additional details and impacted files
@@           Coverage Diff           @@
##             main      #65   +/-   ##
=======================================
  Coverage   98.34%   98.34%
=======================================
  Files          49       49
  Lines        6687     6690    +3
  Branches     1407     1408    +1
=======================================
+ Hits         6576     6579    +3
  Misses         95       95
  Partials       16       16

Flag
Coverage Δ

unittests
98.34% <100.00%> (+<0.01%)
:arrow_up:

Flags with carried forward coverage won't be shown. Click here to find out more.

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


[AVM Module Issue]: avm/ptn/lz/sub-vending: Re-running fails trying to add another VNet peering

Check for previous/existing GitHub issues

[X] I have checked for previous/existing GitHub issues

Issue Type?
Bug
Module Name
avm/ptn/lz/sub-vending
(Optional) Module Version
0.1.5
Description
Following on from #3330
I updated to 0.1.5 and re-ran the pipeline.
The good news is that the subnet deletion problem looks to be fixed, thanks!
The bad news is that there's another issue.
It's trying to add another vnet peering even though one already exists because I'm running against an existing subscription.
Error:
{
  "code": "AnotherPeeringAlreadyReferencesRemoteVnet",
  "message": "Peering /subscriptions/***/resourceGroups/rg-alz-connectivity/providers/Microsoft.Network/virtualNetworks/alz-hub-eastus2/virtualNetworkPeerings/alz-hub-eastus2-alz-spoke-t2awudh7kzl5o-eastus2 already references remote virtual network Id: /subscriptions/xxx/resourceGroups/rg-alz-landingzones-online/providers/Microsoft.Network/virtualNetworks/alz-spoke-t2awudh7kzl5o-eastus2\r\nAddressSpace: \r\nResourceGuid: xxx\r\nProvisioningState: Succeeded\r\nCreatedTime: 0001-01-01T00:00:00.0000000\r\nLastModifiedTime: 0001-01-01T00:00:00.0000000\r\nPrefix, Subnet.Name\r\nNone\r\nSubnet details:\r\nIsSubnetIdAllocatedInNrp: False\r\nPrefix, Ipconfig.IsReferenceStub, Ipconfig.PrivateIPAddress, Ipconfig.Id\r\nNone\r\nCloudServices:\r\nGreKey: 0\r\nGreKeyAllocationId: 00000000-0000-0000-0000-000000000000\r\nGreKeyAllocationServiceUri: \r\nFailedGreKeyAllocationServiceUris:\r\nIDnsAclZoneId: \r\nRegionId: 0\r\nVnetFlowLogConfiguration: null\r\nExtendedLocation: . Cannot add another peering /subscriptions/***/resourceGroups/rg-alz-connectivity/providers/Microsoft.Network/virtualNetworks/alz-hub-eastus2/virtualNetworkPeerings/peer-alz-hub-eastus2-alz-spoke-t2awudh7kzl5o-eastus2 referencing the same remote virtual network.",
  "details": [],
}

Let me know if you need any more details.
(Optional) Correlation Id
No response

We will try to repro and revert back asap

Hey @cspring86,
Thanks for the issue and thanks @sebassem for investigating.
I think the issue here is more a conflict style error, in that a peering has been created outside of this module declaration and now the module is trying to create a peering as the input parameter has been specified to create one and the name of the Microsoft.Network/virtualNetworks/virtualNetworkPeerings resource does not match the name of the existing peering which is causing it to error here.
Is that correct @cspring86, that this peering was initially created outside of this sub vending module call, and now you have added it by supplying inputs to virtualNetworkPeeringEnabled = true and hubVirtualNetworkResourceIdChecked = <hub VNET Resource ID>?
If so, then the fix would be to:

Expose the peerings.name property as an optional input to the sub vending module for the peering - https://github.com/Azure/bicep-registry-modules/blob/main/avm/res/network/virtual-network/main.bicep#L371 and adding it to this call of the AVM Resource Module for VNET https://github.com/Azure/bicep-registry-modules/blob/main/avm/ptn/lz/sub-vending/modules/subResourceWrapper.bicep#L379-L390

This will then allow this module to work in more "brownfield" style deployments as they can specify the peering name to avoid this conflict style error.

Is that correct @cspring86, that this peering was initially created outside of this sub vending module call

Hi @jtracey93
No, it was created through the sub vending module.
The peering name is the same in Azure as the module is trying to create when running again.
Hope this helps!

I'm seeing the same issue. I used the sub-vending module to create a new subscription with a peering to the hub network.
Then if I delete the new subscription and also delete the peering in the hub network I get this error:
New-AzManagementGroupDeployment:
Line |
9 |  New-AzManagementGroupDeployment @inputObject
|  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| An error occurred while sending the request.

@cspring86 & @hectorm-bmg are you getting the error of Resource is in Updating state and the last operation that updated/is updating the resource is PutSubnetOperation. if you check nested deployments?
Just to confirm what @sebassem sees?
As i see we may have slightly different errors and want to ensure we triple check 👍

I get an error in the lz-vend-vnet-create-vlug37hl3vkds deployment.
Both the local and remote vnet peering deployments fail:

The error messages are:
Peering /subscriptions/xxx/resourceGroups/rg-alz-connectivity/providers/Microsoft.Network/virtualNetworks/alz-hub-eastus2/virtualNetworkPeerings/alz-hub-eastus2-alz-spoke-t2awudh7kzl5o-eastus2 already references remote virtual network Id: /subscriptions/yyy/resourceGroups/rg-alz-landingzones-online/providers/Microsoft.Network/virtualNetworks/alz-spoke-t2awudh7kzl5o-eastus2

Peering /subscriptions/yyy/resourceGroups/rg-alz-landingzones-online/providers/Microsoft.Network/virtualNetworks/alz-spoke-t2awudh7kzl5o-eastus2/virtualNetworkPeerings/alz-spoke-t2awudh7kzl5o-eastus2-alz-hub-eastus2 already references remote virtual network Id: /subscriptions/xxx/resourceGroups/rg-alz-connectivity/providers/Microsoft.Network/virtualNetworks/alz-hub-eastus2

I tried running the sub-vending module again today ( without deleting the peering on the hub network ). I did not get the error this time.

@cspring86 Can you try another deployment. The problem with the virtual network module should have been fixed


[SPARK-39212][SQL] Use double quotes for values of SQL configs/DS options in error messages

What changes were proposed in this pull request?
Wrap values of SQL configs and datasource options in error messages by double quotes. Added the toDSOption() method to QueryErrorsBase to quote DS options.
Why are the changes needed?

To highlight SQL config/DS option values and make them more visible for users.
To be able to easily parse values from error text.
To be consistent to other outputs of identifiers, sql statement and etc. where Spark uses quotes or ticks.

Does this PR introduce any user-facing change?
Yes, it changes user-facing error messages.
How was this patch tested?
By running the modified test suites:
$ build/sbt "testOnly *QueryCompilationErrorsSuite"
$ build/sbt "testOnly *QueryExecutionAnsiErrorsSuite"
$ build/sbt "testOnly *QueryExecutionErrorsSuite"

@srielau @panbingkun Could you take a look at the PR, please.

Here is the backport to 3.3: https://github.com/apache/spark/pull/36600


Update README.md

[One line description of your change]
Motivation:
[Explain here the context, and why you're making that change. What is the problem you're trying to solve.]
Modifications:
[Describe the modifications you've done.]
Result:
[After your change, what will change.]

Whoops sorry, was not meant to be PRed


Overdraw in Widget.

Actual Behaviour
There is some overlay in the app widget.
Expected Behaviour
This needs to be removed.
Would you like to work on the issue?
I am travelling for a few weeks so NO.

Please add a screenshot and exact description. Otherwise we dont know what you are talking about.

@free4murad Not sure if this is a priority right now.
Also I can't seem to notice any high overdraw, for me the level of overdraw is 1x.


Upgrade mocking deps to fix test on JDK8

fixes failing test DisposableShutdownServiceTest
PanelManagerImpl moved from field injection
to constructor injection so that @InjectMocks
could be removed (was causing issues)
few minor fixes related to exclusion of old javassist dep

There are still three tests failing on JDK8 (TabPanelWithDropdownsTest), but they were failing even before these changes and I am currently not sure how to fix them. We need to take a loot at them later.
I tried local build with JDK7 and everything works as expected (no failures).

+1

Thanks.
master: 60e30823d702e685e1525bb8ee848b1603da703d


EnumConverter

Hi,
In a project that I am working on, I found convenient to create a converter for Enums like those defined at werkzeug/routing/converters.py. This converter allows to convert back and forth between enum values and url parameters by means of the enum names. I find this convenient to save some parsing and just getting valid and validated values from urls, and standard url generation from variables bind to an enum value.
EnumConverter is somehow an AnyConverter and in fact, I have implemented inheriting from AnyConverter.
Example using Flask
Suppose that I have the following enum:
class TriggerType(enum.Flag):
    """Represent a Trigger."""

    TBP = enum.auto()
    TAP = enum.auto()
    TAV = enum.auto()
    PH = enum.auto()
    ALL = TBP | TAP | TAV | PH

And I want a route with one of its parameters being the value of the enum. Something like:
@bp.route('/count/<trigger>')
def count(trigger):
    pass

With current converters one could use the AnyConverter, explicitly listing all possible values. One also has to handle the given URL parameter to get the proper type:
@bp.route('/count/<any(TBP, TAP, TAV, ALL):trigger_name>')
def count(trigger_name):
    trigger = getattr(TriggerType, trigger_name)
    pass

and of course, when the URL is rendered, the enum value has to be converted to the proper string:
url_for('.count', trigger_name=TriggerType.TAP.name)

With EnumConverter that I have implemented this can be done automatically in both directions.
@bp.route('/count/<enum(my.enum.module, TriggerType):trigger>')
def count(trigger, filename):
    pass

url_for('.count', trigger=TriggerType.TAP)

If the maintainers find interesting this converter, we can discuss some details and I can prepare pull request.

I don't think I want to add this to Werkzeug, there's too many opinions to deal with.

Does the the URL have the name or the value of the member, or either? If either can match, which is used when building? What if one member's name is the same as another's value, which order are they matched?
URLs usually look cleaner as lowercase, but member names are usually uppercase. Should only uppercase be generated, but both cases be accepted? What if there's mixed case in the name?
When generating the URL, should it accept a name or a member, or both? Using enum members would be annoying in templates, you'd need to inject every enum you might use into every template context.

An specific implementation isn't particularly complicated, and it's intended that projects will write converters specific to their needs.
from werkzeug.routing import BaseConverter, ValidationError
from pkgutil import resolve_name

class EnumConverter(BaseConverter):
    def __init__(self, map: Map, name: str) -> None:
        super().__init__(map)
        self.enum = resolve_name(name)

    def to_python(self, value: str) -> t.Any:
        try:
            return self.enum[value]  # match on names
            # use self.enum(value) to match on values instead
        except KeyError as e:
            raise ValidationError from e

    def to_url(self, value: t.Any) -> str:
        if isinstance(value, self.enum):
            return value.name

        return self.enum[value].name

Another point for the "too many opinions": In URLs you usually want dashes, but enum members are underscores. Should those be replaced or not?


Http adapter in events

Shouldn't the EventDispatcherDecorator populate events with the decorated adapter instead of the decorator?

Also, shouldn't the events be immutable (except some necessary mutability, like stopPropagation)? (I mean the setHttpAdapter method here.

For the first question: I'm :-1: for injecting the decorated adapter. The point is some listeners call itself the http adapter and expects the http adapter to redipatch the events. For example, the retry subscriber will populate a retry count parameter in the request. Then, we send the retry request and in this sending, we want the subscriber to check the params in order to retry it if nececessary (according to the user strategy). So, passing the decorator is the expected/wanted behavior.
For the mutability of the http adapter in the event, I agree the setter should be removed.

Ok, I wasn't aware of this behaviour.


feat: add clip property support

Summary
This PR fixes/implements the following bugs/features

Adds support for clip

clip.html has been present in reftests, but did not work. I'll follow this up in the coming weeks with a PR for the newer clip-path attribute as well :grin:
Test plan (required)
clip.html in reftests, with additional testing to make sure it works in conjunction with overflow clipping effects
Code formatting
✅
Closing issues
N/A

Force pushed to match commit message format 😁

Great PR, we need this clip support

Interesting MR. Should be reviewed seriously.

+1 for this

@niklasvh please merge this PR, we need this

@nbadal did you end up creating a patch or a separate package with this fix? OP is not merging & responding


De twitter some code

@steveloughran I saw your PR and had a quick look at how to remove some of the twitter-util code. The biggest bit was porting the twitter FuturePool to Java. The ported version is very basic but may be enough for this use case.

Will retarget to core repo

great to see the patch; i was worried about what it would take to cull, as there is no way we could have shipped as is


feat(lang-server): Support for field level @ignore

@Jolg42 Is this implemented on the engines now?

Not completely implemented, you should not add @ignore manually for now but it will be implemented  soon definitely


⚠ Samsung has degraded performance

In 59b5a48, Samsung (https://samsung.com) experienced degraded performance:

HTTP code: 200
Response time: 2259 ms

Resolved: Samsung performance has improved in 7ab6eab.


Video not playing on the DAI (12/11/22)

This one is playing now.

Video not playing on dev1 and not playing on DAI

Still a problem with BATH above.

See #399 , which will fix this.

Will be corrected when data is transferred from dev1 to DAI


Data.json not converted properly for some bills

E.g. 117s126
This may be due to missing a short_title?
data.json
{
  "actions": [
    {
      "acted_at": "2021-01-28",
      "action_code": "10000",
      "references": [],
      "text": "Introduced in Senate",
      "type": "action"
    },
    {
      "acted_at": "2021-01-28",
      "action_code": "",
      "committees": [
        "SSFI"
      ],
      "references": [],
      "status": "REFERRED",
      "text": "Read twice and referred to the Committee on Finance.",
      "type": "referral"
    }
  ],
  "amendments": [],
  "bill_id": "s126-117",
  "bill_type": "s",
  "by_request": false,
  "committee_reports": [],
  "committees": [
    {
      "activity": [
        "referral"
      ],
      "committee": "Senate Finance",
      "committee_id": "SSFI"
    }
  ],
  "congress": "117",
  "cosponsors": [
    {
      "bioguide_id": "B001310",
      "district": null,
      "name": "Braun, Mike",
      "original_cosponsor": true,
      "sponsored_at": "2021-01-28",
      "state": "IN",
      "title": "Sen",
      "withdrawn_at": null
    },
    {
      "bioguide_id": "E000295",
      "district": null,
      "name": "Ernst, Joni",
      "original_cosponsor": true,
      "sponsored_at": "2021-01-28",
      "state": "IA",
      "title": "Sen",
      "withdrawn_at": null
    },
    {
      "bioguide_id": "I000024",
      "district": null,
      "name": "Inhofe, James M.",
      "original_cosponsor": true,
      "sponsored_at": "2021-01-28",
      "state": "OK",
      "title": "Sen",
      "withdrawn_at": null
    }
  ],
  "enacted_as": null,
  "history": {
    "active": false,
    "awaiting_signature": false,
    "enacted": false,
    "vetoed": false
  },
  "introduced_at": "2021-01-28",
  "number": "126",
  "official_title": "A bill to amend the Internal Revenue Code of 1986 to make permanent the individual tax provisions of the tax reform law, and for other purposes.",
  "popular_title": null,
  "related_bills": [],
  "short_title": null,
  "sponsor": {
    "bioguide_id": "C001098",
    "district": null,
    "name": "Cruz, Ted",
    "state": "TX",
    "title": "Sen",
    "type": "person"
  },
  "status": "REFERRED",
  "status_at": "2021-01-28",
  "subjects": [],
  "subjects_top_term": null,
  "summary": null,
  "titles": [
    {
      "as": "introduced",
      "is_for_portion": false,
      "title": "A bill to amend the Internal Revenue Code of 1986 to make permanent the individual tax provisions of the tax reform law, and for other purposes.",
      "type": "official"
    },
    {
      "as": null,
      "is_for_portion": false,
      "title": "A bill to amend the Internal Revenue Code of 1986 to make permanent the individual tax provisions of the tax reform law, and for other purposes.",
      "type": "display"
    }
  ],
  "updated_at": "2021-01-29T05:45:59Z",
  "url": "https://www.govinfo.gov/bulkdata/BILLSTATUS/117/s/BILLSTATUS-117s126.xml"
}

This is now fixed. The issue was that the directory contained two data.json files, one of which was not the right format. I've now added error catching for that case.


canned_queries() plugin hook

Canned queries are currently baked into metadata.json which is read once on startup.
Allowing users to interactively create new canned queries - even if just through a plugin - would make a lot of sense.
Is this a new plugin hook or some other mechanism? Lots to think about here.

Question about this on Twitter: https://twitter.com/amjithr/status/1273440766862352384?s=21

The easiest way to do this would be with a new plugin hook:
def canned_queries(datasette, database):
    """Return a list of canned query definitions
    or an awaitable function that returns them"

Another approach would be to make the whole of metadata.json customizable by plugins.
I think I like the dedicated canned_queries option better. I'm not happy with the way metadata keeps growing - see #493 - so adding a dedicated hook would be more future proof against other changes I might make to the metadata mechanism.

It would be neat if the queries returned by this hook could be restricted to specific users. I think I can do that by returning an "allow" block as part of the query.
But... what if we allow users to save private queries and we might have thousands of users each with hundreds of saved queries?
For that case it would be good if the plugin hook could take an optional actor parameter.

@hookspec
def canned_queries(datasette, database, actor):
    "Return a list of canned query definitions or an awaitable function that returns them"

Released in https://github.com/simonw/datasette/releases/tag/0.45a1
Wrote about this here: https://simonwillison.net/2020/Jun/19/datasette-alphas/

Documentation: https://datasette.readthedocs.io/en/latest/plugins.html#canned-queries-datasette-database-actor

I'll close this once I've built a plugin against it.

Plugin idea: datasette-saved-queries - it uses the startup hook to initialize a saved_queries table, then uses the canned_queries hook to add a writable canned query for saving records to that table.
Then it returns any queries from that table as additional canned queries.
Bonus idea: it could write the user's actor_id to a column if they are signed in, and provide a link to see "just my saved queries" in that case.

New repo: https://github.com/simonw/datasette-saved-queries


Scalling on High Resolution Display

First of all, thanks for the absolutely great package. Very useful.
I recently got a 4K screen and notices a small glitch. While the plots in Toggle Watch are nicely scaled, when I plot in the main editor body, the plot is to big to fit in the plotting window and I have to scroll horizontally and vertically.
Any chance for an option to scale? It would be great if a full plot is shown in the box so no scrolling is necessary.
Also it would be useful if the plot is shown above the line from the 'wrap-guide' package. When using Atom on half of the screen the line always go through the plot.
Thanks for your work!

Thanks for your feedback! I addressed the scaling issue in #242.
I'm afraid we can't do anything against the wrap-guide issue. We intentionally chose to move away from displaying the results as overlays because of #48.
You can make the wrap-guide a bit more subtle by modifying your custom stylesheet like this:
atom-text-editor::shadow .wrap-guide {
  background-color: yourcustomcolor;
}

Hi, thanks so much for a prompt reply, it's much appreciated!
No problem about the wrap-guide, it's not much of a bother. Also big thanks for adding the scaling option. Could you please let me know how to turn it on - should I wait for the package in Atom to be updated?

It will be included in the next update and will be the default behavior.


Perform SSL test on hosted server

This is just a TODO issue

https://www.ssllabs.com/ssltest/
Make sure to disable support for TLS 1.1 and 1.0
https://tools.ietf.org/html/rfc7457#section-2.3

The http_client example retrieves google by HTTPS using TLS 1.2


Add column index to show resources the admin predefined order

Closes: #460
Testing done
Manual tested and it looks good.

Proposed upgrade guidelines
N/A
Localizations

[x] English
[x] German
[x] French
[x] Slovak
[x] Czech

Submitter checklist

[x] The Jira / Github issue, if it exists, is well-described.
[x] The changelog entries and upgrade guidelines are appropriate for the audience affected by the change (users or developers, depending on the change) and are in the imperative mood (see examples).

The changelog generator for plugins uses the pull request title as the changelog entry.
Fill in the Proposed upgrade guidelines section only if there are breaking changes or changes that may require extra steps from users during the upgrade.

[x] There is automated testing or an explanation that explains why this change has no tests.
[x] New public functions for internal use only are annotated with @NoExternalUse. In case it is used by non java code the Used by {@code <panel>.jelly} Javadocs are annotated.

[x] New or substantially changed JavaScript is not defined inline and does not call eval to ease the future introduction of Content Security Policy (CSP) directives (see documentation).
[ ] For dependency updates, there are links to external changelogs and, if possible, full differentials.
[ ] For new APIs and extension points, there is a link to at least one consumer.
[ ] Any localizations are transferred to *.properties files.
[ ] Changes in the interface are documented also as examples.

Maintainer checklist
Before the changes are marked as ready-for-merge:

[ ] There is at least one (1) approval for the pull request and no outstanding requests for change.
[ ] Conversations in the pull request are over, or it is explicit that a reviewer is not blocking the change.
[ ] Changelog entries in the pull request title and/or Proposed changelog entries are accurate, human-readable, and in the imperative mood.
[ ] Proper changelog labels are set so that the changelog can be generated automatically. See also release-drafter-labels.
[ ] If the change needs additional upgrade steps from users, the upgrade-guide-needed label is set and there is a Proposed upgrade guidelines section in the pull request title (see example).
[ ] java code changes are tested by automated test.

Thanks! Works well, in particular sorting multi-digit numbers works well :)


fix(runGenerationCommand): Update deprecated generate command

Update deprecated generate command.
from:
https://github.com/iOSonntag/vscode-flutter-easylocalization/blob/2b5eb3f49d5806a04a3e64046b85954fefade059/src/commands/extract-to-translation-file.ts#L205-L207
to:
dart run easy_localization:generate -f keys --source-dir ${sourceDir} --output-dir ${outDir} --output-file ${outFile}

Output using flutter pub run:
Deprecated. Use `dart run` instead.
Package "easy_localization" is not an immediate dependency.
Cannot run executables in transitive dependencies.

Output using dart run:
Building package executable...
Built easy_localization:generate.
All done! File generated in <workspace_location>/lib/generated/locale_keys.g.dart

@salah-rashad Thanks for the pull request 👍🏻 I will merge it directly


Cannot find module 'ember-cli/lib/utilities/find-build-file'

I installed latest cli via npm and try to generate a new project ng new new1 (windows). I get the following error:
Error: Cannot find module 'ember-cli/lib/utilities/find-build-file'
    at Function.Module._resolveFilename (module.js:325:15)
    at Function.Module._load (module.js:276:25)
    at Module.require (module.js:353:17)
    at require (internal/module.js:12:17)
    at Object.<anonymous> (c:\temp\node_modules\angular-cli\lib\cli\index.js:48:31)
    at Module._compile (module.js:409:26)
    at Object.Module._extensions..js (module.js:416:10)
    at Module.load (module.js:343:32)
    at Function.Module._load (module.js:300:12)
    at Module.require (module.js:353:17)

What's your ng version ?

angular-cli: 0.0.31
node: 4.4.2
os: win32 x64

local installation of angular-cli works. It has to do with my global installation which does not work. When reinstalling angular-cli as admin globally I get:

npm ERR! Windows_NT 10.0.10240
npm ERR! argv "C:\Program Files (x86)\nodejs\node.exe" "C:\Program Files (x86)\nodejs\node_modules\npm\bin\npm-cli.js" "install" "-g" "angular-cli"
npm ERR! node v4.4.2
npm ERR! npm  v2.15.0
npm ERR! path C:\Users\danie\AppData\Roaming\npm\node_modules\angular-cli\node_modules\ember-cli\node_modules\http-proxy\node_modules\requires-port\package.json.2796384356
npm ERR! code EPERM
npm ERR! errno -4048
npm ERR! syscall rename
npm ERR! Error: EPERM: operation not permitted, rename 'C:\Users\danie\AppData\Roaming\npm\node_modules\angular-cli\node_modules\ember-cli\node_modules\http-proxy\node_modules\requires-port\package.json.2796384356' -> 'C:\Users\danie\AppData\Roaming\npm\node_modules\angular-cli\node_modules\ember-cli\node_modules\http-proxy\node_modules\requires-port\package.json'
npm ERR!     at Error (native)
npm ERR!  { [Error: EPERM: operation not permitted, rename 'C:\Users\danie\AppData\Roaming\npm\node_modules\angular-cli\node_modules\ember-cli\node_modules\http-proxy\node_modules\requires-port\package.json.2796384356' -> 'C:\Users\danie\AppData\Roaming\npm\node_modules\angular-cli\node_modules\ember-cli\node_modules\http-proxy\node_modules\requires-port\package.json']
npm ERR!   errno: -4048,
npm ERR!   code: 'EPERM',
npm ERR!   syscall: 'rename',
npm ERR!   path: 'C:\Users\danie\AppData\Roaming\npm\node_modules\angular-cli\node_modules\ember-cli\node_modules\http-proxy\node_modules\requires-port\package.json.2796384356',
npm ERR!   dest: 'C:\Users\danie\AppData\Roaming\npm\node_modules\angular-cli\node_modules\ember-cli\node_modules\http-proxy\node_modules\requires-port\package.json' }
npm ERR!
npm ERR! Please try running this command again as root/Administrator.

Yea I think one interesting thing also to document (because I ran into this recently as well), is that a project generated using angular-cli has angular-cli as dependency and uses the local installation even tho, we think we use the global ng command.
That was kind of surprising to me.

I reinstalled node. Seems now to work for me.

so many issues, so shame...

How is reinstalling node a solution?

This is from April 15. @rahil471 please explain why this 3 months old issue should be reopened.

Never said it should be reopened @hansl
It's just that, reinstalling node isn't the right solution to the problem. Need to get to the root why it is coming up.

Installing hidden peer dependencies was my solution. I came across a similar issue, where the "missing module" sort of came out of nowhere, with no informative errors. My problem was I had just added a module that had peer dependencies, and NPM on Windows wasn't giving me missing peer dependency errors. I used the package npm-install-peers to help me install all my peers (and recorded them in package.json).


Fix : Use a proper USER-AGENT

https://discord.com/developers/docs/reference#user-agent
Seems like you guys have a phobia of documentation :p

Also I've noticed that this module doesn't follow normal things
For example : PEP 8
Few things wrong I'd like to note:

Use relative imports.

However, explicit relative imports are an acceptable alternative to absolute imports, especially when dealing with complex package layouts where using absolute imports would be unnecessarily verbose (from PEP 8)

Be consistent, some places have ' and some have ". Use a formatter, the most common and preferred one is black.
Use isort to sort your imports.
Don't needlessly over complicate the directory structure. There are excessive files and folders, they can clearly be merged.
Add comments, useful comments.
(I haven't really looked upon the names but I'll add this) Follow the naming convention.
Also from PEP 8 regarding the __loop attribute of the Client

Python mangles these names with the class name: if class Foo has an attribute named __a, it cannot be accessed by Foo.__a. (An insistent user could still gain access by calling Foo._Foo__a.) Generally, double leading underscores should be used only to avoid name conflicts with attributes in classes designed to be subclassed.

You dont have to use __.

Imma close this PR, since it's gonna be invalid after the merge of import_fix 😊


Add CSRF token details to documentation

Hi. I just ran into this problem in my Flask app and found the solution on an obscure Stack Overflow question.
I kept getting a 'Bad request. The CSRF token is invalid.' error. Turns out the CSRF token I set in my config file contained special characters (I used the os.urandom function) which does not work.
Perhaps a tiny note somewhere in the documentation could make the users aware of this?
I couldn't find it in the documentation but please forgive me in case I overlooked!
Cheers.

You can't set a CSRF token in the config.

Apologies for the confusion. How does the app.config["WTF_CSRF_SECRET_KEY"] method work?
When I remove this from my __init__.py file, I get the 400 bad request. With it enabled, I don't.

It sounds like there's some other issue with your app. That config is not required, and can contain bytes.
Please use Stack Overflow for questions about your own code. This tracker is for issues related to the project itself. Be sure to include a minimal, complete, and verifiable example.

I'm sorry but this note on the official documentation says -

Note: CSRF protection requires a secret key to securely sign the token. By default this will use the Flask app's SECRET_KEY. If you'd like to use a separate token you can set WTF_CSRF_SECRET_KEY.

My app's secret key is set by os.urandom. If I don't explicitly set the WTF_CSRF_SECRET_KEY, Flask-WTF should default to the output of this os.urandom. And when I run it this way, I get the invalid token error!
If I change the app's secret key to an alphabetical string instead, there is no problem.
This leads me to believe that there is a certain part of Flask-WTF that does not process CSRF tokens set by os.urandom properly.
Please do correct me if I am wrong. And I do apologise for bringing this up here. I didn't know where else to suggest an addition to the documentation.


[Illustration] Get Involved > Individual

main feedback on these two options is that they both seem to convey a phone call or a video call, which is not something related to MapSwipe activity or the individual involvement.  wondering if there is a direction to take this that is more reflective of the actual engagement type (phone, laptop)?


Revert "correct /vip pubsub"

Reverts Emilgardis/twitch_api2#141
this seems to have been the correct thing to do.

bors r+


proposal: go/parser: add a mode flag to disallow the new syntax for type parameters / instantiation

In #47781, we propose to add a new node type to go/ast to support type and function instantiation.  One of our concerns with this change is that there is code in the wild that assumes the completeness of the current set of go/ast nodes, and that this code will now panic when encountering an unknown node type (see golang/vscode-go#1551, for example).  This concern was also raised in the monthly tools call.
Whatever final form the new APIs take, it would be helpful to provide a way for tool authors to prevent go/parser from producing the new syntax nodes. By analogy, users of go/types can set the Config.GoVersion field (see #46648).
While it might be a good idea to eventually add a go/parser.Config type with a GoVersion field. That is a large change that would be a burden on calling code: users would have to switch away from the parser.Parse* APIs.  It is much easier for users to add a mode flag.
Therefore this issue proposes to add a new mode flag that tells go/parser not to accept the new syntax for type parameters and instantiation. This is actually already implemented via an unexported flag value, so the hardest part of implementing this proposal would be coming up with a name.
I suggest NoTypeParameters, but I don't love it. Other ideas are welcome, though note that we have been trying to avoid the word 'generics' in favor of the more precise 'type parameter', 'parameterized', etc.
CC @griesemer

I'm not sure I understand the worry that leads to this proposal. Tools or libraries that don't yet support type parameters might panic or error if they see the new go/ast node types in Go 1.18. Presumably, that would lead to them either adding support for the new feature, or to add a few lines of code that gives an error like "type parameters not supported" in those cases.
How would a NoTypeParameters mode help in that situation? The end user would see some form of parse error, so it's about the same end result. The tool or library still needs to be modified to start using the mode, so in my eyes it's not making the transition smoother either.
I'm also slightly worried about scenarios where the code calling the Parse APIs is in a different module than the code that uses type switches on go/ast node types. For example: gopls parses code, and feeds an *ast.File to an external module, like https://pkg.go.dev/mvdan.cc/gofumpt/format#File. From the point of view of the library, it's too late to say if it wants to avoid type parameters or not. And if it wishes to simply not support type parameters, it can return a user-friendly error message without this proposed API.

@mvdan these are great points.
The intent of this flag is to help with cases where it might not be trivial to update code to support type parameters, and a parser error is preferable to a panic. But as you point out, this can only ever really be a temporary workaround, and is only helpful in certain conditions. Maybe these conditions are rare enough that it is not worth a new mode flag.
CC @marwan-at-work who had brought this up in the tools call.

I get that some tools or libraries might take effort to support type parameters. They could return a temporary error message in the meantime, perhaps pointing to an issue tracking the progress. Or if they don't support type parameters by definition, perhaps link to a page explaining the reason why. Both of those seem more useful to me than a blanket "no type parameters" mode, do not require the Parse and type switch to happen in the same module, and do not require new API :)

Ah I see, that makes sense. To provide a data point, I just did some quick grepping over my 6 modules using go/ast, and they seem to have about 2-5 node type switches each. About a quarter of them are "exhaustive" with a default case that panics; the others just care about a few node types in particular.
So, at least for my software, I likely would only need to update one or two type switches per module to add the error returns. I wouldn't mind that, given that introducing new AST node types should be rare. And I'd have to edit those files anyway, if I wanted to add support for type parameters, which I hope we all do :)

It sounds like maybe this flag doesn't add as much as we thought.
Certainly having generics off by default and opt-in would avoid breaking users,
but that's not the right default for the next ten years.
Having the default be on with an opt-out, the opt-out seems like maybe not significantly less work than putting a new case in a type switch here and there to say "no generics yet".
Do I have that right?

That seems like a good summary. My only brief addition would be: some tools expose themselves as libraries taking go/ast nodes, so they don't have the ability to provide go/parser options. https://pkg.go.dev/golang.org/x/tools/go/analysis is a good example; an analysis simply receives a bunch of ASTs.

Unless anyone has concerns, I'll retract this proposal.
I'll leave it open until Tuesday (before the next proposal meeting) in case anyone wants to object.

It sounds like maybe this flag doesn't add as much as we thought.
Certainly having generics off by default and opt-in would avoid breaking users,
but that's not the right default for the next ten years.
Having the default be on with an opt-out, the opt-out seems like maybe not significantly less work than putting a new case in a type switch here and there to say "no generics yet".
Do I have that right?

It may be nice to document "new in 1.18" or exactly which cases of switches  suffice to check for type parameters.
Scott

It may be nice to document "new in 1.18" or exactly which cases of switches suffice to check for type parameters.

Ack. We'll be sure to highlight this in the 1.18 release notes, perhaps linking to the go/ast proposal.

Closing as nobody has objected. Please ping this issue if you have any concerns.

This proposal has been declined as retracted.
— rsc for the proposal review group


Feature request: Set default VCS from within templates

It would be nice if it was possible to make templates default to a different or no VCS initialisation. In my case this would be useful for a "minimal" template meant for messing around inside. Could also be useful for templates which are meant to be a smaller part of a larger vcs repository.
As a workaround I tried to delete the initialised vcs repository from rhai, but that doesn't work as rhai scripts run before vcs initalisation.

Hey, for rhai scripts there are pre and post hook scripts.
A post hook script should provide what you need.

I tested with a post hook script. It prints before the VCS initialisation, and cannot delete the vcs folder since it doesn't exist yet.

Ok, I think that is probably a bug or a debatable issue of the post hooks. They should run after all, at the very end.
However, coming back to your original issue, your wanted to have your project generated, without a .git entry, so no git init in the final result folder, right?
Then have you tried out the --init command-line argument yet?
        --init
            Generate the template directly into the current dir. No subfolder will be created and no vcs is initialized

This is actually meant for this sort of thing you've mentioned:

Could also be useful for templates that are meant to be a smaller part of a larger vcs repository.

The only caveat is: the whole template is generated into your current folder ($CWD).
But more generically speaking the parameters:

--init-vcs=git|hg like current behavior, it git init ran after all (with being extendable to e.g. mercurial and others)
--skip-init-vcs a flag to disable the current initialization behavior

Might address your point more accurately.

Actually, no commandline flag would address my point properly, unless there is a way to set them from the template config.
I want to be able to set the default for vcs initialisation as a template author for the template I'm creating, not toggle it off once when running the command.

Do remember that this should also be available under the favorites settings in the global cargo-generate.toml

Ok, I think that is probably a bug or a debatable issue of the post hooks. They should run after all, at the very end.

Please see #637 - there's a reason.
There's also a small issue with post hook printing comming before the processing - there's an issue on it alreaty


BarrierとConditionの例を追加

Codecov Report

Merging #133 (c9c3bc4) into master (10a3895) will increase coverage by 0.04%.
The diff coverage is 100.00%.

@@            Coverage Diff             @@
##           master     #133      +/-   ##
==========================================
+ Coverage   97.53%   97.57%   +0.04%
==========================================
  Files          36       36
  Lines        1661     1693      +32
==========================================
+ Hits         1620     1652      +32
  Misses         41       41

Impacted Files
Coverage Δ

source/sync_example.d
100.00% <100.00%> (ø)

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 10a3895...c9c3bc4. Read the comment docs.


Java

Describe the issue
Is this also available for java?

@abhinav-jain09 Not at the moment. It's currently for .NET. If you look for JavaScript/TypeScript one, here's the one: https://github.com/aaronpowell/azure-functions-nodejs-openapi


Upgrade org.pitest:pitest-junit5-plugin 0.14 -> 0.15

This PR contains the following updates:

Package
Update
Change

org.pitest:pitest-junit5-plugin (source)
minor
0.14 -> 0.15

Release Notes

pitest/pitest-junit5-plugin
v0.15
Compare Source

[ ] If you want to rebase/retry this PR, check this box.

Suggested commit message:
Upgrade pitest-junit5-plugin 0.14 -> 0.15

See https://github.com/pitest/pitest-junit5-plugin/compare/0.14...0.15


Reduce overhead of session watcher task callback

Currently, we use utils::capture.output(utils::str(obj, max.level = 0, give.attr = FALSE)) to get the string representation of each object in global environment. The overhead will become more significant as there are more symbols in it.
Suppose the global environment contains as many symbols as base environment (more than 1200 visible symbols), the overhead of getting object metadata will be more than 300ms, i.e., on each user input, there will be an extra 300ms to wait for the metadata of objects to be gathered.
To reduce the overhead, we could avoid using capture.output and str and instead create a simple string that contains simple information such as class, type, length, dim to represent the object.
system.time(objs <- eapply(baseenv(), function(obj) {
  utils::capture.output(utils::str(obj, max.level = 0, give.attr = FALSE))
}))
#>    user  system elapsed
#>   0.335   0.004   0.339
system.time(objs <- eapply(baseenv(), function(obj) {
  list(
    type = typeof(obj),
    length = length(obj),
    class = class(obj)
  )
}))
#>    user  system elapsed
#>   0.013   0.001   0.013

If the time of writing files are included,
system.time({
  objs <- eapply(baseenv(), function(obj) {
    list(
      type = typeof(obj),
      length = length(obj),
      class = class(obj),
      str = trimws(utils::capture.output(utils::str(obj, max.level = 0, give.attr = FALSE))),
      names = names(obj)
    )
  })
  jsonlite::write_json(objs, "test.json", auto_unbox = TRUE, pretty = FALSE)
})
#>    user  system elapsed
#>   0.557   0.011   0.570
system.time({
  objs <- eapply(baseenv(), function(obj) {
    list(
      type = typeof(obj),
      length = length(obj),
      class = class(obj),
      names = names(obj)
    )
  })
  jsonlite::write_json(objs, "test.json", auto_unbox = TRUE, pretty = FALSE)
})
#>    user  system elapsed
#>   0.113   0.000   0.113

First, thanks for making this extension available.  It is, in general, far more robust than RStudio when working on large datasets.
There is a sizeable delay after the R terminal evaluates an expression and shows its output before the terminal prompt appears.
The symptom, with a somewhat tolerable short delay, can be reproduced as follows.  The vscode-R and the R Debugger for VS code are the only extensions.  The R terminal is RTerm.exe - not radian.  With session watcher on and Watch Global Environment on, and Show Object Size is FALSE, run the following and witness the delay with the terminal prompt.
db = new.env(hash = TRUE, parent = emptyenv())
for (i in seq_len(10^6 * 2)) db[[as.character(i)]] = i
# the following evaluates quickly, but there's a delay after the output is shown in the terminal
exists("db")

The current work-around is disabling Watch Global environment.  Please don't hesitate to request additional information.

@mkb007 Thanks for providing that example. The delay is mostly caused by the object db in the global environment having millions of elements and each time names(db) is written to globalenv.json.

@renkun-ken Thanks for the quick reply.  Pardon my newbie-ness, but it's not clear why names(db) is a necessary evaluation when Show Object Size is FALSE and Level Of Object Detail (aka vsc.str.max.level) is set to "Minimal."  Simply seeing db in the workspace view as an environment type would be sufficient.
The problem with the work around, i.e. disabling Watch Global environment, is that all the buttons on the Workspace view are disabled.  There's no way to use "Load", "Save", or "Manual Refresh".  Manual Refresh, in particular, might be useful with a workspace containing millions of objects.
What do you suggest?

As a side note, manual refresh at present only refreshes the tree view and not the data. Realistically, the command does very little at the moment. This is probably something we should change at some point.

@renkun-ken Thanks for the quick reply. Pardon my newbie-ness, but it's not clear why names(db) is a necessary evaluation when Show Object Size is FALSE and Level Of Object Detail (aka vsc.str.max.level) is set to "Minimal." Simply seeing db in the workspace view as an environment type would be sufficient.
The problem with the work around, i.e. disabling Watch Global environment, is that all the buttons on the Workspace view are disabled. There's no way to use "Load", "Save", or "Manual Refresh". Manual Refresh, in particular, might be useful with a workspace containing millions of objects.
What do you suggest?

@mkb007 The names() call (I believe, correct me if I'm wrong @renkun-ken) is used to supply auto-completions in the editor. E.g., mtcars$ uses names() to suggest cyl, mpg, etc. as auto-completions.
@renkun-ken would it make sense to set an upper-limit on object length, so that names isn't called on super big objects? I don't think many people would be expecting auto-completions for 1k+ length objects

Looks like for large objects with millions of elements, calling names() will have a significant overhead already.
Then I agree with @ElianHugh that we should set an upper limit on object length so that names() is not even called on these objects.

With some experiments, it looks like we could set a default limit of 2000 as the upper limit to call and write names. The delay is hardly noticeable.

Also, if the length of an object exceeds the limit, then its str should be called with max.level = 0 regardless of vsc.str.max.level.

Thanks for the insight re: auto-completion and names().  The limit will
be welcome enhancement.
------ Original Message ------
From: "Kun Ren" @.>
To: "REditorSupport/vscode-R" @.>
Cc: "mkb007" @.>; "Mention"
@.>
Sent: 9/7/2021 11:13:12 PM
Subject: Re: [REditorSupport/vscode-R] Reduce overhead of session
watcher task callback (#174)

Also, if the length of an object exceeds the limit, then its str should
be called with max.level = 0 regardless of vsc.str.max.level.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/REditorSupport/vscode-R/issues/174#issuecomment-914948833,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AVQJJQX6RW2GGT277OTMMKLUA35HRANCNFSM4KDUHTGA.
Triage notifications on the go with GitHub Mobile for iOS
https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675
or Android
https://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub.

Thanks for directing me here regarding the issue I raised under radian.
I have tried the development build, and the lag issue related to large list seems no more.
However, the issue still remains after I loaded 9 years of data.table, and each of them has less than 100,000 records.
Once I combined all the data into one and deleted individual year records, the issue seemed to have stopped.

I think the issue related to data.table is still quite significant. If I leave data uncombined, and run other codes, it takes about 8 seconds to make the next input ready,  just for running 3 lines of simple codes. I think the lag time is increasing with the lines of codes sent to the terminal.

The number of rows should not affect the performance. The delay will be significant if there are many named objects in the global environment.
Would you like to paste the ls.str() when you have significant delay?
Does it help to set "r.session.levelOfObjectDetail": "Minimal" in your settings?

The number of rows should not affect the performance. The delay will be significant if there are many named objects in the global environment.
Would you like to paste the ls.str() when you have significant delay?
Does it help to set "r.session.levelOfObjectDetail": "Minimal" in your settings?

I tried to setup "r.session.levelOfObjectDetail" to Minimal in the settings, but it seemed no effect.
For 9 years of data, each contains 69 variables.  So there are about 630 lines of output plus a few folder paths from ls.str()

I also tried to write all the data into a new environment, and get them into a list first. However, there still experienced a small lag which was similar to the one I reported earlier.  I thought the lag associated with the list has been fixed.  Here is the ls.str() output with this approach.
r$> ls.str()
create_proj_folders : function ()
ED : List of 9
 $ :Classes 'data.table' and 'data.frame':      31020 obs. of  69 variables:
 $ :Classes 'data.table' and 'data.frame':      36248 obs. of  69 variables:
 $ :Classes 'data.table' and 'data.frame':      38881 obs. of  69 variables:
 $ :Classes 'data.table' and 'data.frame':      40631 obs. of  69 variables:
 $ :Classes 'data.table' and 'data.frame':      45621 obs. of  69 variables:
 $ :Classes 'data.table' and 'data.frame':      48992 obs. of  69 variables:
 $ :Classes 'data.table' and 'data.frame':      52266 obs. of  69 variables:
 $ :Classes 'data.table' and 'data.frame':      55837 obs. of  69 variables:
 $ :Classes 'data.table' and 'data.frame':      95900 obs. of  69 variables:
overlay : function (lng, lat, data, basemap)
sqlFetchData : function (connection, database, schema, table, nobs = "All")

Nice work on v2.3.0 based on a quick test.  Thanks.
------ Original Message ------
From: "Fred-Wu" @.>
To: "REditorSupport/vscode-R" @.>
Cc: "mkb007" @.>; "Mention"
@.>
Sent: 9/15/2021 9:53:20 PM
Subject: Re: [REditorSupport/vscode-R] Reduce overhead of session
watcher task callback (#174)

I also tried to write all the data into a new environment, and get them
into a list first. However, there still experienced a small lag which
was similar to the one I reported earlier. I thought the lag associated
with the list has been fixed. Here is the ls.str() output with this
approach.
r$> ls.str()
create_proj_folders : function ()
ED : List of 9
$ :Classes 'data.table' and 'data.frame':      31020 obs. of  69 variables:
$ :Classes 'data.table' and 'data.frame':      36248 obs. of  69 variables:
$ :Classes 'data.table' and 'data.frame':      38881 obs. of  69 variables:
$ :Classes 'data.table' and 'data.frame':      40631 obs. of  69 variables:
$ :Classes 'data.table' and 'data.frame':      45621 obs. of  69 variables:
$ :Classes 'data.table' and 'data.frame':      48992 obs. of  69 variables:
$ :Classes 'data.table' and 'data.frame':      52266 obs. of  69 variables:
$ :Classes 'data.table' and 'data.frame':      55837 obs. of  69 variables:
$ :Classes 'data.table' and 'data.frame':      95900 obs. of  69 variables:
overlay : function (lng, lat, data, basemap)
sqlFetchData : function (connection, database, schema, table, nobs = "All")
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/REditorSupport/vscode-R/issues/174#issuecomment-920573970,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AVQJJQTWLFJMZUPK3UIVAM3UCFZ4BANCNFSM4KDUHTGA.
Triage notifications on the go with GitHub Mobile for iOS
https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675
or Android
https://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub.


Fix encoding of apostrophe

@deisterhold : Thanks for your contribution! The author(s) have been notified to review your proposed change.

@deisterhold Would you be able to create a new pull request with your requested update? We had to apply a file format fix to this article in the private repo yesterday. It's now good to update in this repo, but the pull request can't be merged because it updates the pre-fix version of the article. Thanks, and apologies.


fix: support for urls with trailing slashes

Link this PR to an issue
The current urlMatcher requires GitHub URLs to end with a slash which is not the case (anymore?).
Type of change (Remove other not matching type)

Bug fix (non-breaking change which fixes an issue)

huch...hmmm, didn'we talk about this or chat about that... good that you found that quickly!

@bumi Yeah, I also thought that we discussed that.
I'm currently verifying with the reporter of the problem if there is another issue. 🤔 Will mark the MR as ready as soon as we found the root cause. 👍

Nope, works for me. Did you notice any problems yourself? One user reported the problem still persists for him so I'll try to setup a debugging session...

nope it worked for me also. no idea what could be the problem.


top level symlink handled incorrectly

symlinks in the root is being handled as directories.

this is blocking #138 tests at it’s current stage, however we could workaround it, but better to fix this first…

I’m thinking using -L in the -d to skip it first, then do another loop to add the symlinks after all the dirs are added.


Changing most of the settings will crash the application

Windows 11 Pro 21H2
OS build	22000.348
App info: Latest version from Microsoft Store as of 27 November 2021
Issues:
Use source size as video resolution [disabled]
Audio Recording [enabled]
Video Preview [disabled]
Gallery View [disabled]
will all crash the app. Also the app doesn't remember the settings. After a recording is done, all settings will go back to defaults.

Hello, thanks for reporting:

internal audio recording will crash the app on some devices due to the library I use for recording internal audio, this is known, but it's also hard to fix. I have already reported this in https://github.com/MarcAnt01/Fluent-Screen-Recorder/issues/92
Settings not being saved issue is known, too https://github.com/MarcAnt01/Fluent-Screen-Recorder/issues/93 . At the moment, the best thing to do after a recording is close and reopen the app if you want to see your cached settings


License

Hello,
What license is this library under?
Thanks

Oh, what a big omission. It's Apache 2.0. I'll add license in a minute.

BTW: Do you plan to use this library? If so, I'd like your comments on how the API works, what to do to make it more pythonic, and most of all feature requests. Or even pull requests, if you want!

I will provide pull requests if we go with this library, just trying to use it in a flask+keycloak bearer only API.
License was the first step 👍


[docs] Property expression section does not provide a concrete example how to access JavaScript property in Child Web Component

In reference to Property Expression please provide a concrete example depicting the access to the JavaScript property in Child Web Component ; elaborating on what is given by the documentation at section [Property Expression], consider the following:
html`<my-list .listItems=${this.items}></my-list>`;

In accordance to this answer on stackoverflow the JavaScript property .listItems passed to custom element my-list in Child Web Component should be access as follows:
class MyList extends LitElement {
 /* ... */
  render() {
    return html `<p>${this.listItems}</p>`
   }
/* ... */
}
customElements.define('my-list ', MyList);

This should be clearly outlined from day number one, without forcing to end up on sites like StackOverflow ...
Thank you.

Up.


2.0.3: FUSE read error on graceful volume shutdown

A simple test setup: one master (started with -defaultReplication=001), one filer, two volume servers. Filer started with
-defaultReplicaPlacement=001 -encryptVolumeData -disableHttp. Mounted file system with FUSE, copied 30 GB to the store, observed symmetric volume data growth on both volume servers. Run CRC check on data and during read operations stopped one volume server gracefully (with Ctrl+C). After 10 seconds, the very moment volume server stopped, got an Read failed: Input/output error.
FUSE mount reported the following error:
fuse: panic in handler for Read [ID=0x17b830 Node=0x22 Uid=1000 Gid=1000 Pid=96109] 0x1 131072 @0x1607c000 dir=false fl=0 lock=0 ffl=OpenReadOnly: runtime error: slice bounds out of range [:114688] with capacity 0

During CRC check, both volume servers were active (I/O, CPU).
I'm not sure whether this problem is incomplete replication or lack of fail-over (to alternative/available volume) in FUSE client.
It does not matter which volume server I stop as stopping either of them result in read error on FUSE mount.
I tried to re-start CRC check with just one volume server but that failed with read error as well, despite explicit prior volume.balance and volume.fix.replication given in weed shell (both commands did not report anything).
It looks like data landed to both volume servers, that have identical size of "data" directory roughly matching the amount of data copied to FUSE mount. So replication appears to be working yet I could not read the whole data from FUSE mount when one volume server not running.

Thanks for the detailed report!
Added a fix to read from alternative locations.

Thank you for responding so fast.  With a8624c2 situation is better but I was still able to reproduce read errors with one volume server down. Interestingly, some read operations occasionally succeed after retry.

Thank you for quick fix. With a8624c2 I could not reproduce the problem any more. All good, thanks.

Commit a8624c2 improved situation but after longer testing I've managed to reproduce the problem again...

FUSE mount reported the following error:
fuse: panic in handler for Read [ID=0x17b830 Node=0x22 Uid=1000 Gid=1000 Pid=96109] 0x1 131072 @0x1607c000 dir=false fl=0 lock=0 ffl=OpenReadOnly: runtime error: slice bounds out of range [:114688] with capacity 0

I would need full logs from the mount. You can start with weed -v=4 mount ...

Thanks.
I1009 13:32:56 19104 filehandle.go:209] doFlush /ISO/debian-installer/debian_stable_amd64/initrd.gz fh<PHONE_NUMBER>6903189082
I1009 13:32:56 19104 filehandle.go:177] Release /ISO/debian-installer/debian_stable_amd64/initrd.gz fh<PHONE_NUMBER>6903189082
I1009 13:32:56 19104 filehandle.go:209] doFlush /ISO/debian-installer/debian_stable_amd64/initrd.gz fh<PHONE_NUMBER>6903189082
I1009 13:32:56 19104 wfs.go:142] /ISO/debian-installer/debian_stable_amd64/initrd.gz ReleaseHandle id<PHONE_NUMBER>6903189082 current handles length 1
I1009 13:32:56 19104 dir.go:66] dir Attr /ISO/tecdoc03_04, attr: valid=1s ino=12942868949584229312 size=0 mode=drwxr-xr-x
I1009 13:32:56 19104 dir.go:233] dir Lookup /ISO/tecdoc03_04: TecDoc_03_04_6.iso by ID=0xb19d8 Node=0x11 Uid=1000 Gid=1000 Pid=25820
I1009 13:32:56 19104 dir.go:252] dir Lookup cache hit /ISO/tecdoc03_04/TecDoc_03_04_6.iso
I1009 13:32:56 19104 file.go:48] file Attr /ISO/tecdoc03_04/TecDoc_03_04_6.iso, open:0, existing attr: valid=1m0s ino=11393864575991920984 size=0 mode=-rw-r--r--
I1009 13:32:56 19104 file.go:91] file /ISO/tecdoc03_04/TecDoc_03_04_6.iso open Open [ID=0xb19da Node=0x19 Uid=1000 Gid=1000 Pid=25820] dir=false fl=OpenReadOnly
I1009 13:32:56 19104 wfs.go:116] AcquireHandle /ISO/tecdoc03_04/TecDoc_03_04_6.iso uid=1000 gid=1000
I1009 13:32:56 19104 file.go:97] /ISO/tecdoc03_04/TecDoc_03_04_6.iso file open handle id =<PHONE_NUMBER>5991920984
I1009 13:32:56 19104 filehandle.go:60] /ISO/tecdoc03_04/TecDoc_03_04_6.iso read fh<PHONE_NUMBER>5991920984: [0,16384) size 16384 resp.Data cap=16384
I1009 13:32:56 19104 reader_at.go:86] ReadAt [0,16384) of total file size 377417728 bytes 23 chunk views
I1009 13:32:56 19104 reader_at.go:118] read [0,16384), 0/23 chunk 3,076cdd40fe63 [0,15466496)
I1009 13:32:56 19104 reader_at.go:179] readFromWholeChunkData 3,076cdd40fe63 offset 0 [0,15466496) size at least 15466496
I1009 13:32:56 19104 reader_at.go:198] + doFetchFullChunkData 3,076cdd40fe63
I1009 13:32:56 19104 filechunk_manifest.go:99] read 3,076cdd40fe63 failed, err: fetch http://<IP_ADDRESS>:9334/3,076cdd40fe63: Get "http://<IP_ADDRESS>:9334/3,076cdd40fe63": dial tcp <IP_ADDRESS>:9334: connect: connection refused
I1009 13:32:56 19104 reader_at.go:202] - doFetchFullChunkData 3,076cdd40fe63
2020/10/09 13:32:56 fuse: panic in handler for Read [ID=0xb19de Node=0x19 Uid=1000 Gid=1000 Pid=25820] 0x1 16384 @0x0 dir=false fl=0 lock=0 ffl=OpenReadOnly: runtime error: slice bounds out of range [:16384] with capacity 0
goroutine 369590 [running]:
github.com/chrislusf/seaweedfs/vendor/github.com/seaweedfs/fuse/fs.(*Server).serve.func2(0x228e300, 0xc000129c20, 0xc000a4feb0, 0xc000a4fe26)
        github.com/chrislusf/seaweedfs/vendor/github.com/seaweedfs/fuse/fs/serve.go:861 +0x1af
panic(0x1d7e3e0, 0xc001908680)
        runtime/panic.go:969 +0x175
github.com/chrislusf/seaweedfs/weed/filer.(*ChunkReadAt).doReadAt(0xc00019ec80, 0xc000c14000, 0x4000, 0x4000, 0x0, 0x4, 0x4, 0x92)
        github.com/chrislusf/seaweedfs/weed/filer/reader_at.go:125 +0xbee
github.com/chrislusf/seaweedfs/weed/filer.(*ChunkReadAt).ReadAt(0xc00019ec80, 0xc000c14000, 0x4000, 0x4000, 0x0, 0x0, 0x0, 0x0)
        github.com/chrislusf/seaweedfs/weed/filer/reader_at.go:87 +0x22e
github.com/chrislusf/seaweedfs/weed/filesys.(*FileHandle).readFromChunks(0xc0003c8180, 0xc000c14000, 0x4000, 0x4000, 0x0, 0x6, 0x6, 0x0)
        github.com/chrislusf/seaweedfs/weed/filesys/filehandle.go:123 +0x102
github.com/chrislusf/seaweedfs/weed/filesys.(*FileHandle).Read(0xc0003c8180, 0x22a2c40, 0xc000ed7900, 0xc000129c20, 0xc0012dcee0, 0x0, 0x0)
        github.com/chrislusf/seaweedfs/weed/filesys/filehandle.go:74 +0x2d7
github.com/chrislusf/seaweedfs/vendor/github.com/seaweedfs/fuse/fs.(*Server).handleRequest(0xc0001c20c0, 0x22a2c40, 0xc000ed7900, 0x2267ea0, 0xc0001f8ba0, 0xc00164dc40, 0x228e300, 0xc000129c20, 0xc000a4feb0, 0xc00022e500, ...)
        github.com/chrislusf/seaweedfs/vendor/github.com/seaweedfs/fuse/fs/serve.go:1255 +0xa75
github.com/chrislusf/seaweedfs/vendor/github.com/seaweedfs/fuse/fs.(*Server).serve(0xc0001c20c0, 0x228e300, 0xc000129c20)
        github.com/chrislusf/seaweedfs/vendor/github.com/seaweedfs/fuse/fs/serve.go:882 +0x2c7
github.com/chrislusf/seaweedfs/vendor/github.com/seaweedfs/fuse/fs.(*Server).Serve.func1(0xc0001c20c0, 0x228e300, 0xc000129c20)
        github.com/chrislusf/seaweedfs/vendor/github.com/seaweedfs/fuse/fs/serve.go:424 +0x6f
created by github.com/chrislusf/seaweedfs/vendor/github.com/seaweedfs/fuse/fs.(*Server).Serve
        github.com/chrislusf/seaweedfs/vendor/github.com/seaweedfs/fuse/fs/serve.go:422 +0x35f
I1009 13:32:56 19104 filehandle.go:60] /ISO/tecdoc03_04/TecDoc_03_04_6.iso read fh<PHONE_NUMBER>5991920984: [0,4096) size 4096 resp.Data cap=4096
I1009 13:32:56 19104 reader_at.go:86] ReadAt [0,4096) of total file size 377417728 bytes 23 chunk views
I1009 13:32:56 19104 reader_at.go:118] read [0,4096), 0/23 chunk 3,076cdd40fe63 [0,15466496)
I1009 13:32:56 19104 reader_at.go:179] readFromWholeChunkData 3,076cdd40fe63 offset 0 [0,15466496) size at least 15466496
I1009 13:32:56 19104 reader_at.go:198] + doFetchFullChunkData 3,076cdd40fe63
I1009 13:32:56 19104 filechunk_manifest.go:99] read 3,076cdd40fe63 failed, err: fetch http://<IP_ADDRESS>:9334/3,076cdd40fe63: Get "http://<IP_ADDRESS>:9334/3,076cdd40fe63": dial tcp <IP_ADDRESS>:9334: connect: connection refused
I1009 13:32:56 19104 reader_at.go:202] - doFetchFullChunkData 3,076cdd40fe63
2020/10/09 13:32:56 fuse: panic in handler for Read [ID=0xb19e0 Node=0x19 Uid=1000 Gid=1000 Pid=25820] 0x1 4096 @0x0 dir=false fl=0 lock=0 ffl=OpenReadOnly: runtime error: slice bounds out of range [:4096] with capacity 0
goroutine 369591 [running]:
github.com/chrislusf/seaweedfs/vendor/github.com/seaweedfs/fuse/fs.(*Server).serve.func2(0x228e300, 0xc000129d40, 0xc000eabeb0, 0xc000eabe26)
        github.com/chrislusf/seaweedfs/vendor/github.com/seaweedfs/fuse/fs/serve.go:861 +0x1af
panic(0x1d7e3e0, 0xc000eb18e0)
        runtime/panic.go:969 +0x175
github.com/chrislusf/seaweedfs/weed/filer.(*ChunkReadAt).doReadAt(0xc00019ec80, 0xc00025d000, 0x1000, 0x1000, 0x0, 0x4, 0x4, 0x8f)
        github.com/chrislusf/seaweedfs/weed/filer/reader_at.go:125 +0xbee
github.com/chrislusf/seaweedfs/weed/filer.(*ChunkReadAt).ReadAt(0xc00019ec80, 0xc00025d000, 0x1000, 0x1000, 0x0, 0x0, 0x0, 0x0)
        github.com/chrislusf/seaweedfs/weed/filer/reader_at.go:87 +0x22e
github.com/chrislusf/seaweedfs/weed/filesys.(*FileHandle).readFromChunks(0xc0003c8180, 0xc00025d000, 0x1000, 0x1000, 0x0, 0x6, 0x6, 0x1ef545c)
        github.com/chrislusf/seaweedfs/weed/filesys/filehandle.go:123 +0x102
github.com/chrislusf/seaweedfs/weed/filesys.(*FileHandle).Read(0xc0003c8180, 0x22a2c40, 0xc000536c80, 0xc000129d40, 0xc001817680, 0x0, 0x0)
        github.com/chrislusf/seaweedfs/weed/filesys/filehandle.go:74 +0x2d7
github.com/chrislusf/seaweedfs/vendor/github.com/seaweedfs/fuse/fs.(*Server).handleRequest(0xc0001c20c0, 0x22a2c40, 0xc000536c80, 0x2267ea0, 0xc0001f8ba0, 0xc00164dc40, 0x228e300, 0xc000129d40, 0xc000eabeb0, 0xc0005e3440, ...)
        github.com/chrislusf/seaweedfs/vendor/github.com/seaweedfs/fuse/fs/serve.go:1255 +0xa75
github.com/chrislusf/seaweedfs/vendor/github.com/seaweedfs/fuse/fs.(*Server).serve(0xc0001c20c0, 0x228e300, 0xc000129d40)
        github.com/chrislusf/seaweedfs/vendor/github.com/seaweedfs/fuse/fs/serve.go:882 +0x2c7
github.com/chrislusf/seaweedfs/vendor/github.com/seaweedfs/fuse/fs.(*Server).Serve.func1(0xc0001c20c0, 0x228e300, 0xc000129d40)
        github.com/chrislusf/seaweedfs/vendor/github.com/seaweedfs/fuse/fs/serve.go:424 +0x6f
created by github.com/chrislusf/seaweedfs/vendor/github.com/seaweedfs/fuse/fs.(*Server).Serve
        github.com/chrislusf/seaweedfs/vendor/github.com/seaweedfs/fuse/fs/serve.go:422 +0x35f
I1009 13:32:56 19104 filehandle.go:209] doFlush /ISO/tecdoc03_04/TecDoc_03_04_6.iso fh<PHONE_NUMBER>5991920984
I1009 13:32:56 19104 filehandle.go:177] Release /ISO/tecdoc03_04/TecDoc_03_04_6.iso fh<PHONE_NUMBER>5991920984
I1009 13:32:56 19104 filehandle.go:209] doFlush /ISO/tecdoc03_04/TecDoc_03_04_6.iso fh<PHONE_NUMBER>5991920984
I1009 13:32:56 19104 wfs.go:142] /ISO/tecdoc03_04/TecDoc_03_04_6.iso ReleaseHandle id<PHONE_NUMBER>5991920984 current handles length 1
I1009 13:32:56 19104 dir.go:233] dir Lookup /: .git by ID=0xb19e6 Node=0x1 Uid=1000 Gid=1000 Pid=26738
I1009 13:32:56 19104 dir.go:233] dir Lookup /: .git by ID=0xb19e8 Node=0x1 Uid=1000 Gid=1000 Pid=26738
I1009 13:32:56 19104 dir.go:233] dir Lookup /: HEAD by ID=0xb19ea Node=0x1 Uid=1000 Gid=1000 Pid=26738

It looks like the the problem is due to dial tcp <IP_ADDRESS>:9334: connect: connection refused.
In another attempt I've got similar error when another volume server was down: filechunk_manifest.go:99] read 2,08e956d8e460 failed, err: fetch http://<IP_ADDRESS>:9335/2,08e956d8e460: Get "http://<IP_ADDRESS>:9335/2,08e956d8e460": dial tcp <IP_ADDRESS>:9335: connect: connection refused.
Strangely enough after retrying 3...4 times read operation progressed further but failed a little bit later with a similar error.

Also I think SeaweedFS mount should be more resilient to failures. For example, when both volume servers are briefly unavailable (like in case of rebooting a network switch), a read operation should not fail instantly. Instead client should retry operation long enough, indeally for a configurable number of tries before failing. LizardFS and MooseFS implemented that concept with mfsioretries mount option: https://manpages.debian.org/buster/lizardfs-client/mfsmount.1.en.html
NFS keeps trying infinitely, until connectivity with server is restored.

Thanks! The logs are very helpful! Fixed one bug.
In https://github.com/chrislusf/seaweedfs/commit/8d34eb005087f6cb305b8934d8614a88b62cff99 I also added exponentially backoff if read error happens, for about 10 minutes. Currently the wait time is hard coded.

FYI: Previous 8d34eb0 had a dead loop bug. Fixed now.

And reduced the total retry time to about 20 seconds.

IMHO this is a bad idea as retry time should be much longer by default...
Eventually, could you make it configurable with a mount option please?
The point of delay is to avoid recoverable errors. Some applications may not recover gracefully after read errors (e.g. MySQL). Distributed storage systems are designed for reliability. By default, admin should be able to reboot a volume server or two (e.g. in case of brief power failure) without risk of applications failing. Reboot might easily take longer than 20 minutes (e.g. server decides to fsck 20 local HDDs, etc).
On MooseFS/LizardFS retries are not time-timed but a number of retries can be configured on FUSE client. I set the number to a pretty high value (around 500) to buy enough time to fix a problem like reboot of network switch (due to firmware update, etc.). Even restarting a network switch might take half an hour or longer if you have to apply (or rollback) a firmware update.
I would set default time for retries in FUSE client to at least 30 minutes.
On my cluster I would change it to 6 hours or even longer.
Only in exceptional cases client should throw a read error - like when all replicas are permanently lost.
In such cases, those who want to return error quick (e.g. on dev/staging cluster) should be able to lower the default retry time but for most situations, where reliability matters, FUSE client should retry as long as possible, even indefinitely (like NFS), giving storage admin a chance to fix the problem.
Ideally FUSE client should throw a read error only when replicas are really lost (e.g. when all known volume servers are up but data is missing). FUSE client should just wait while volume server is down until it becomes available again or until storage admin marks the volume server as lost.

added weed mount -readRetryTime https://github.com/chrislusf/seaweedfs/commit/d155f907c2759ce8c14f50952fd7ea4a68bcac65

Chris, you are a legend.  :)  Thank you.

Fixed in 2.0.4. While reading files from FUSE mount I've stopped one volume server, then stopped another one, then started the first volume server and read operations did not fail. Well done. Thanks.


Provide an error when decoding fails due to database schema changes, instead of crashing

Currently, changing the database schema (both in the wallet and blockchain) lead to a crash if the database is used after versioning (assuming versioning wasn't done properly):
thread 'tokio-runtime-worker' panicked at 'assertion failed: T::decode_all(&mut this.bytes()).is_ok()', serialization/src/encoded.rs:44:9

This is because of this assert: https://github.com/mintlayer/mintlayer-core/blob/3d0fd11adaaacf770f7090076d8b413e8ae58005/serialization/src/encoded.rs#L44
Two things have to be done:

This function must be marked unsafe, because it shouldn't be used under normal circumstances, and the risk must be understood (and documented).
There should be a variant that returns an error for this function. This is because we need to be able to display an error when decoding fails.

Note: Despite this error having a Testnet milestone, it can be done a little later because we assume we'll handle versioning properly.

While a friendlier error message could be provided, I would consider this to be a part of the larger task of introducing a mechanism for database schema upgrades.