*** error: HTTP redirect too deep

This feed is updating and showing up on the planet... but I regularly get this error \ fail to build:
[info] found cache entry for >https://blog.bmannconsulting.com/feed.xml<
[info] adding header If-None-Match (etag) >"f192fa56e685ca02fed139e8fec11c4d-ssl-df"< for conditional GET
[info] found cache entry for >https://blog.bmannconsulting.com/feed.xml<
[info] adding header If-None-Match (etag) >"f192fa56e685ca02fed139e8fec11c4d-ssl-df"< for conditional GET
[info] found cache entry for >https://blog.bmannconsulting.com/feed.xml<
[info] adding header If-None-Match (etag) >"f192fa56e685ca02fed139e8fec11c4d-ssl-df"< for conditional GET
[info] found cache entry for >https://blog.bmannconsulting.com/feed.xml<
[info] adding header If-None-Match (etag) >"f192fa56e685ca02fed139e8fec11c4d-ssl-df"< for conditional GET
[info] found cache entry for >https://blog.bmannconsulting.com/feed.xml<
[info] adding header If-None-Match (etag) >"f192fa56e685ca02fed139e8fec11c4d-ssl-df"< for conditional GET
[info] found cache entry for >https://blog.bmannconsulting.com/feed.xml<
[info] adding header If-None-Match (etag) >"f192fa56e685ca02fed139e8fec11c4d-ssl-df"< for conditional GET

*** error: HTTP redirect too deep

##[error]Process completed with exit code 1.

Thanks for reporting.  Weird - this might be a HTTP redirect that redirect to itself (thus, an endless loop).  If I get to it I will try to check the HTTP headers for the HTTP status code (e.g. 3xx for redirect) and the redirect location.

Ideally it would just give up and move to the next feed after x times through the loop, and leave a note at the end or in an error log, rather than crashing.
I mentioned about the re-direct to the blog owner, but they said they had no other complaints about this, and since the feed items get populated ~90% of the runs, I don't know how much energy any of us need to pour into this particular infinite loop.
In any case.. I'm studying ruby pretty hard, as able, so hopefully sooner than later I'll have more to offer than bug reports. :)

Thanks for the update. I see than it must be a different error because it should give up on 7 tries or such an report an error and not crash.   I try to check the link tomorrow to see if there's a HTTP redirect happening.  Thanks for the patience.

Do you still get the error?  If I try to fetch the feed (with pluto's http fetcher library) all works here. The test script:
require 'fetcher'

url = 'https://blog.bmannconsulting.com/feed.xml'

worker = Fetcher::Worker.new

response = worker.get( url )

puts response.code
puts response.message
puts response.content_type
puts response.body[0..100]

## try http  NOT https
url = 'http://blog.bmannconsulting.com/feed.xml'

response = worker.get( url )

puts response.code
puts response.message
puts response.content_type
puts response.body[0..100]

and the result:
[debug] fetch - get(_response) src: https://blog.bmannconsulting.com/feed.xml
[debug] using direct net http access; no proxy configured
[debug] GET /feed.xml uri=https://blog.bmannconsulting.com/feed.xml, redirect_limit=5
[debug] 200 OK
[debug]   content_type: application/xml, content_length: 9430
200
OK
application/xml
<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
        xmlns:atom="http://www.w3.org/2005/Atom"

[debug] fetch - get(_response) src: http://blog.bmannconsulting.com/feed.xml
[debug] using direct net http access; no proxy configured
[debug] GET /feed.xml uri=http://blog.bmannconsulting.com/feed.xml, redirect_limit=5
[debug] 200 OK
[debug]   content_type: application/xml, content_length: 9430
200
OK
application/xml
<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
        xmlns:atom="http://www.w3.org/2005/Atom"

I tried again with a cache entry from your log above. It also works. The script:
require 'fetcher'

url = 'https://blog.bmannconsulting.com/feed.xml'

worker = Fetcher::Worker.new

worker.use_cache = true
worker.cache[ url ] = {
    'etag' => 'f192fa56e685ca02fed139e8fec11c4d-ssl-df'
}

response = worker.get( url )

puts response.code
puts response.message
puts response.content_type
puts response.body[0..100]   if response.body

## try http  NOT https
url = 'http://blog.bmannconsulting.com/feed.xml'

worker.cache[ url ] = {
    'etag' => 'f192fa56e685ca02fed139e8fec11c4d-ssl-df'
}

response = worker.get( url )

puts response.code
puts response.message
puts response.content_type
puts response.body[0..100]    if response.body

resulting in
[debug] fetch - get(_response) src: https://blog.bmannconsulting.com/feed.xml
[debug] using direct net http access; no proxy configured
[debug] GET /feed.xml uri=https://blog.bmannconsulting.com/feed.xml, redirect_limit=5
[info] found cache entry for >https://blog.bmannconsulting.com/feed.xml<
[info] adding header If-None-Match (etag) >f192fa56e685ca02fed139e8fec11c4d-ssl-df< for conditional GET
[debug] 304 Not Modified
304
Not Modified

[debug] fetch - get(_response) src: http://blog.bmannconsulting.com/feed.xml
[debug] using direct net http access; no proxy configured
[debug] GET /feed.xml uri=http://blog.bmannconsulting.com/feed.xml, redirect_limit=5
[info] found cache entry for >http://blog.bmannconsulting.com/feed.xml<
[info] adding header If-None-Match (etag) >f192fa56e685ca02fed139e8fec11c4d-ssl-df< for conditional GET
[debug] 304 Not Modified
304
Not Modified

Anyways, please report back if you still get the error and what's the excact feed url in your planet.ini - maybe it's different?

ok, I tried replacing https for http in my ini... However, I can't reproduce the error reliably.
I've got it running hourly, (was running twice an hour), It fails to build only some of the time.. maybe 1-3x in 24 hours...
in another day I should be able to tell you if that made a difference or not.

Thanks for the update. I you have traceback / stacktrace or some more error logs that would help. If you run pluto with --verbose you should get a more detailed error (if that's possible).

good idea! just at a brief glance I can see some other things I should be tracking in that output..
From now on my action uses verbose, so I can provide better info for errors... and I can also debug any feed issues.
Thanks!

okie here's the --verbose output
[debug] fetch - get(_response) src: http://blog.bmannconsulting.com/feed.xml
[debug] using direct net http access; no proxy configured
[debug] GET /feed.xml uri=http://blog.bmannconsulting.com/feed.xml, redirect_limit=5
[info] found cache entry for >http://blog.bmannconsulting.com/feed.xml<
[info] adding header If-None-Match (etag) >"f192fa56e685ca02fed139e8fec11c4d-ssl-df"< for conditional GET
[debug] 301 Moved Permanently location=https://blog.bmannconsulting.com/feed.xml
[debug] GET /feed.xml uri=https://blog.bmannconsulting.com/feed.xml, redirect_limit=4
[debug] 301 Moved Permanently location=https://blog.bmannconsulting.com/feed.xml
[debug] GET /feed.xml uri=https://blog.bmannconsulting.com/feed.xml, redirect_limit=3
[debug] 301 Moved Permanently location=https://blog.bmannconsulting.com/feed.xml
[debug] GET /feed.xml uri=https://blog.bmannconsulting.com/feed.xml, redirect_limit=2
[debug] 301 Moved Permanently location=https://blog.bmannconsulting.com/feed.xml
[debug] GET /feed.xml uri=https://blog.bmannconsulting.com/feed.xml, redirect_limit=1
[debug] 301 Moved Permanently location=https://blog.bmannconsulting.com/feed.xml
[debug] GET /feed.xml uri=https://blog.bmannconsulting.com/feed.xml, redirect_limit=0
[debug] 301 Moved Permanently location=https://blog.bmannconsulting.com/feed.xml

*** error: HTTP redirect too deep

##[error]Process completed with exit code 1.

Hello, wow - thanks for your diligence and help.  Good to know that it is a HTTP redirect  - somewhat weird why it loops forever.   You might change the feed_url to use https (to avoid the redirect from http to https location).
On the pluto side I will add the HTTP redirect too deep error to the exception handle so that it will get logged but not exit and I try to double check if the protocol (http/https) gets maybe lost in the location header. Thanks again. Cheers.


chore: keep mergify because merge queues don't support branch patterns

⚪ Backport skipped
The pull request was not backported as there were no branches to backport to. If this is a mistake, please apply the desired version labels or run the backport tool manually.
Manual backport
To create the backport manually run:
backport --pr 4835

Questions ?
Please refer to the Backport tool documentation


Allow the disabling of QuickInfo in debugger

The QuickInfo popup is stupidly annoying, especially when writing bare scripts which are not part of a compilable project. As of 2015, C#'s QuickInfo is able to be disabled. Please add this simple functionality into Python Tools as soon as you can. Thanks.

Hi! Could you please let us know where that option is located for C#?  I'm looking under text editor and debugger options, but can't find it. Thanks!


use nginx-tests as a submodule

for the simply maintenance

I'm sorry, this patch is not fit for Tengine, because the frenquency of Tengine update is not the same as Nginx. Last but not least, some cases are different.

Ok


Version 1.7.1 does not work

I've updated from 1.6.1 to 1.7.1 and after that the application does not run. I double click the .exe and nothing happens. I've tried to run as admin, same result.
I've downloaded the whole version from github but again nothing happens.
I've tried to go back to 1.6.1 and it's working fine.

Hey, you need to install .NET Core Runtime.
The details are here: https://github.com/Tyrrrz/YoutubeDownloader/releases/tag/1.7

Oh yeah just saw the changelog.
Thanks 👍

Great!
I know it's bad UX that the app doesn't work after auto-updating, but this shouldn't happen often in the future.


Question - Library not working

Hey!
This Library would be perfect for a small Raspberry Pi Project i'm working on but i'm not able to make it work.
I got this Error Message:
"File "/home/XXXXXXXXX/wiegandtest.py", line 1, in
from pywiegand import WiegandReader
File "/home/XXXXXXXXXXX/.venv/lib/python3.9/site-packages/pywiegand/init.py", line 1, in
import pywiegand.extension.pywiegand_adapter as wa
ModuleNotFoundError: No module named 'pywiegand.extension.pywiegand_adapter'"
I am not a programmer but it seems that in the "init.py" file the "pywiegand_adapter.cpp" (?) doesnt get imported properly...
Is it because of the Python/Raspberry Version i'm using? Can i change anything to make it work?
I use Python 3.9.2 64-Bit on an Raspberry Pi 4 B 2GB and VS Code as an Development Environment (but i also installed the library directly on the raspberry pi and tried to run a test python programm with the terminal, there i got the same error message). I Imported the Library with pip and it also automatically installed wiringPi.
I hope someone can help me with that, i couldnt find any comparable alternatives to this library online.

I released a new version of the package with version 0.4.3.
(The problem was related to the poetry build changes.)


Added pcap reader.

Added pcap reader that should eventually replace the callback based variant.

I like this much better than the callback variant.

should eventually replace

Is there a feature missing? It could be deprecated if it's already in use, or otherwise outright removed.

Unfortunately this version contains lifetime issues, as @Philip-Trettner brought to my attention. Both the error handler and the data span must outlive the reader, auto r = pcap::reader(babel::file::read_all_bytes("bla")) will not work. We will likely settle on a version like void read(cc::span<std::byte const> data, cc::function_ref<void(reader&)> read_fun, read_config cfg = {}, error_handler on_error); to solve those issues.

Feel like babel is in dire need of a stream interface, would solve a lot of these issues.
stream = babel::file_stream("path");

auto h = pcap::read_header(stream);

pcap::packet p;
while (pcap::read_packet(stream, p))
{
}


Unable to choose Blazer_USB for my NUT

Hi;
I open this as a question, because when I searched for blazer_usb it gave me the impression it has been resolved before but sadly, none of these resolved issue, leaded me to fix my situation by myself.
Basically; I have a basic UPS cleanline which use the driver blazer_usb, which works fine with OpenMediaVault and the blazer_usb. When I try to transfer this UPS to OPNsense I have potentially 2 errors.
1.1. I'm unable to enable blazer_usb;
when I select blazer_usb, enable and apply; it comes back to the NUT panel, the USBHID-UPS driver is enabled.

I tried several pirouettes, such as disabling and apply, selecting blazer_usb without enabling and apply, ... without success.
1.2. Inerrant to the first one: via the command line, I'm unable to test my UPS because USBHID-UPS is enabled for my UPS.

So what I'm potentially doing wrong and how I could fix that ?
Thank you :)

To me it sounds you have usbhid ticked enabled and only one is allowed.


Extend RPC interface to list all collections

Hello,
I'm working on MonsterWriter and try to integrate the Zotero Desktop version into the app.
This change would be needed, so I could base the integration on better-bibtex.
See related issue https://github.com/retorquere/zotero-better-bibtex/issues/1941.

I think this would work better as NSCollection.all then as NSUser.collections. They're not really user collections.

I'd also recommend getting the library name along with the library ID

I think the library name is included already. See the example response blow. Or do you mean something else? .... I will move it into its own namespace like you suggested.
{
  "jsonrpc": "2.0",
  "result": [
    {
      "0": {
        "key": "U2UAB7AC",
        "version": 0,
        "name": "col",
        "parentCollection": false,
        "relations": {}
      },
      "1": {
        "key": "3NW8LI2I",
        "version": 0,
        "name": "sammlung",
        "parentCollection": false,
        "relations": {}
      },
      "2": {
        "key": "JTLT4NSZ",
        "version": 0,
        "name": "sammlung-a",
        "parentCollection": "3NW8LI2I",
        "relations": {}
      },
      "libraryID": 1
    }
  ],
  "id": null
}

Adding an option to groups seems best to me in fact. It collects the same top-level information, and adds the collections.

I've extended the groups endpoint. It works like this now:
No Parameter given
curl http://localhost:23119/better-bibtex/json-rpc -X POST -H "Content-Type: application/json" -H "Accept: application/json" --data-binary '{"jsonrpc": "2.0", "method": "user.groups", "params": [] }' | jq
{
  "jsonrpc": "2.0",
  "result": [
    {
      "id": 1,
      "name": "Meine Bibliothek"
    }
  ],
  "id": null
}

False as first parameter
curl http://localhost:23119/better-bibtex/json-rpc -X POST -H "Content-Type: application/json" -H "Accept: application/json" --data-binary '{"jsonrpc": "2.0", "method": "user.groups", "params": [false] }' | jq
{
  "jsonrpc": "2.0",
  "result": [
    {
      "id": 1,
      "name": "Meine Bibliothek"
    }
  ],
  "id": null
}

True as first parameter
curl http://localhost:23119/better-bibtex/json-rpc -X POST -H "Content-Type: application/json" -H "Accept: application/json" --data-binary '{"jsonrpc": "2.0", "method": "user.groups", "params": [true] }' | jq
{
  "jsonrpc": "2.0",
  "result": [
    {
      "id": 1,
      "name": "Meine Bibliothek",
      "collections": [
        {
          "key": "U2UAB7AC",
          "version": 0,
          "name": "col",
          "parentCollection": false,
          "relations": {}
        },
        {
          "key": "3NW8LI2I",
          "version": 0,
          "name": "sammlung",
          "parentCollection": false,
          "relations": {}
        },
        {
          "key": "JTLT4NSZ",
          "version": 0,
          "name": "sammlung-a",
          "parentCollection": "3NW8LI2I",
          "relations": {}
        }
      ]
    }
  ],
  "id": null
}


Notebooks: enable different language choices for each codeblock

Is your feature request related to a problem? Please describe.
I want to be able to use Python's great text processing features on rows of text data I pull with SQL into temp tables.
Describe the solution or feature you'd like
Instead of a global choice for the language to be used in the notebook, copy the R Markdown approach which lets you choose a language at the start of each codeblock.
Describe alternatives you've considered
I could choose python and then run SQL inside of python, but the code is much messier and harder to read. My team mostly doesn't know Python, but they all know SQL. I want to mostly use SQL, but just use some python for some text processing.
Additional context
Example of how R Markdown handles this: https://bookdown.org/yihui/rmarkdown/language-engines.html
Github issue where Jupyter considers the same idea and rejects it for now: https://github.com/jupyterlab/jupyterlab/issues/2815

We've been talking about this a decent amount recently. We don't have any immediate plans in the next month or two, but this is actively being discussed.

+1

I also consider it as a very useful feature. For example, many of  my scripts perform some R/Python based manipulation followed by running T-SQL commands so being able to do it in a single notebook would be great!

This would be very useful.


feat: Create an environment variable override for mayapy executable

NOTE: The MayaAdaptor expects that the MayaPY executable is named mayapy and is set on the PATH. If this is not the case, you can set the MAYA_ADAPTOR_MAYAPY_EXECUTABLE environment variable to the path to the MayaPy executable.
What was the problem/requirement? (What/Why)
If mayapy isn't in the default PATH, mayapy cannot be found
What was the solution? (How)
We have implemented an environment variable solution like was done for deadline-cloud-for-nuke.
What is the impact of this change?
Additional feature support for a new MAYA_ADAPTOR_MAYAPY_EXECUTABLE environment variable to point to a specific mayapy path.
How was this change tested?
Did you run the "Job Bundle Output Tests"? If not, why not? If so, paste the test results here.
Required: paste the contents of job_bundle_output_tests/test-job-bundle-results.txt here

Was this change documented?
Is this a breaking change?

By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.

Addressed in https://github.com/aws-deadline/deadline-cloud-for-maya/pull/200


Add unit test for checkBaseCost

What :computer:

Add unit test for checkBaseCost

Why :hand:

Increase test coverage in utils

Evidence :camera:
Note: Test coverage by only run tests in tests/unit/util.test.ts
Before

After

@WillXing than you for contributing to this project. Please lint the source code with yarn:lint and rebase your commits order to follow conventional commits. There should be one commit:
test: add unit test for `util.checkBaseCost`

Thanks @danijelTxFusion , I'll take a look of the commits rebase soon

@danijelTxFusion should be all sorted now.


Various documentation / comments fixes and improvements

Some documentation / comments fixes I found going through the getting started guides.

@joe responding to your comment about --tofqdns-dns-reject-response-code:

--tofqdns-dns-reject-response-code=nameError is a legitimate configuration so changing this line provides strictly less information to users trying to work around this issue.

I'm confused by your comment, because I feel like the patch is adding the information rather than removing it.

I'm confused, I feel like the patch is adding the information rather than removing it.

Maybe I was missing my :coffee: yesterday, looking at the change you're completely right, I must have got the diff mixed up the wrong way around somehow. Sorry for the noise :sweat_smile:

Reviews from Janitors were requested because of changes to .gitignore and pkg/crypto/. I'm tempted to assign .gitignore to @cilium/contributing, but I'm unsure there's a good team to which we could assign pkg/crypto/ :thinking:  Any ideas?

Reviews from Janitors were requested because of changes to .gitignore and pkg/crypto/. I'm tempted to assign .gitignore to @cilium/contributing, but I'm unsure there's a good team to which we could assign pkg/crypto/ thinking Any ideas?

If we're constantly making changes to these areas then it may make sense to devolve ownership for that to a (new?) group but if it's rare one-off occurrences then I don't think we have to remove janitor from all codeowners.

@pchaigno about pkg/crypto/, I don't think it warrant a new "crypto" team for now. Looking at the history, there is very little activity and I don't expect the certloader stuff (~80% of the code under pkg/crypto) to change in the near future.
In the meantime, @cilium/security could be a good fit (see for example https://github.com/cilium/cilium/pull/14279). @twpayne thoughts on this?


Improving libraries that support both System.Web/MVC 5 and ASP.Net Core, for both authors and users

A somewhat unique problem to the MVC 5 and MVC Core move is the classes didn't move, they were rewritten. Especially in the case of big hitters like HttpContext, modules, etc. I'm not here to disagree with the rewrites, they were sorely needed and very well done. This discussion is posted with the hope the community can collectively come up with a clever solution that hasn't been heard yet.
The rewrite itself introduces some issues at the MVC library layer. For authors of existing libs, we can't really drop support for the current MVC 5 release any time soon. It will certainly be used for years to come. So how do we support both Core and Full? The TFMs (target framework monikers) are a non-starter due to MVC supporting net4X and netstandard. That means if a library targets net4X, you can't tell which version you need to use in any current programmatic way.
Currently, as far as I'm aware, the options are:

Make 1 heavy package that supports both and brings in all of the MVC Core DLL reference chain even when the library is used on Full CLR.
Make 2 packages, one for MVC 5 and one for MVC Core (both independent, with shared .cs files and such used in both).
Make 3 packages, one for MVC 5, one for MVC Core, and a third library with shared code (likely not intended for public consumption).

Number 1 may remain the best option, but it has also comes with downsides of a user forced to choose APIs internally, rely on extension methods, or some other differentiating approach. Alternatively, consumers simply see a lot of duplication of APIs. The carrying of System.Web isn't a problem per se because those references and APIs would only be in the net4X TFM build. However, the sudden inclusion of a ton of Core references isn't itself free either. For example, we've suddenly brought along at least the basics of MVC Core abstractions and HttpContext now appears twice in intellisense.
Both 2 and 3 would rely on a naming convention that doesn't exist and isn't enforced (currently). Option 3 is further worse if the third package is not intended for consumption by littering a bit on NuGet. Regardless of either, a new line of additional packages (and possibly renamed current packages) for existing libraries would be needed. I'm afraid this will contribute greatly to user confusion when picking packages for their project. We're talking about hundreds to thousands of packages here, depending on how many are still maintained and ported. That's why I believe this merits discussion until exhausting all reasonable options. Packages don't go away, this duplication is something we'll be paying for in both maintenance and confusion for years to come.
Let's take MiniProfiler as an example. What would the new package scheme look like in the last 2 cases?
Package 1: MiniProfiler (TFMs: net4X)
Package 2: MiniProfiler.AspNetCore (TFMs: net4X and netstandard)
Are these clear? Is 1 used by 2? Which do I use? I don't think it's obvious. If I'm not crazy and they aren't clear, do we then rename Package 1 that has existed for some time? MiniProfiler has been "MiniProfiler" for 5 years, do we rename it to something else like MiniProfiler.Full or MiniProfiler.SystemWeb? Maybe there's a more ideal naming scheme that's not obvious here. The naming approach has its own set of issues. For example: is the suffix version available? Do we unlist the non-suffixed originals? Either way, that likely adds even more confusion.
Let's assume naming isn't in the way, then we have a base (current) and some suffixed version. How do users know that they should look for a suffixed version? Other packages like Dapper, JSON.Net, etc. support everything in a single package. The issues with conflicting classes is somewhat unique to MVC, so consumers won't be used to this concept just because they're familiar with .Net Full vs. Core in general.
Can we better support this some way in the tooling? Or in NuGet itself?
I only have ideas here but tossing them out for discussion:

A concept of a related package, e.g. MiniProfiler.AspNetCore is "related" to Microsoft.AspNet.Mvc.Core in some way. Related packages could boost search results and autocomplete to the top since that's very likely the package you want to use. Alternatively, it could be used in a suggestion somehow. This approach somewhat alleviates the need for any specific suffix convention being necessary (which may be an counter argument, not an argument for).
TFM support for MVC vs. non-MVC in some way. I honestly can't see how application stack TFMs would work and I don't think the .Net team does either, but maybe someone has a really clever idea for how this can be leveraged.
The tooling could look at package references/dependencies, e.g. if you're depending on old HttpContext vs. new HttpContext, you've compiled references to one (or both) and pick (or suggest) the right package based on what the package and the project is referencing (or depending on) in common.
...other?

I realize this has likely been discussed many times inside Microsoft, this is run by pretty smart people. Maybe though, the community can come up with a new idea that works. Not doing so will cause us extra package pain for years, on both producer and consumer sides.
Anyone have other options that improve the situation?

I thought about this, and your suggestions, but as soon as I started thinking about existing packages with existing installations I just hit a wall. As @NickCraver points out there are countless existing packages with a bazillion installations. I don't think any solution that breaks the upgrade path of those existing installations would acceptable.
So, I would like to see a solution that a) provides a clear upgrade path for existing users and b) is easy to implement so hopefully it becomes a 'standard by convention'. When many packages work in a  certain way, it's likely other maintainers will choose to do the same for their packages. That makes it easier for end users too.

Maybe something like... "if you request a version higher than X, get this package instead"?
I don't know how to verbalise it properly... but it would literally be a link to another package. Maybe you create a nuget of the package that is spec'ed v2 (major upgrade from v1) but rather than installing the package, it redirects you to another package.
It might be confusing but it might be a way to upgrade users. You could even spec this redirect based on the moniker that they are requesting...
I don't know how everything would work. Just throwing stuff at the wall to see what sticks.

/cc @avanderhoorn @yishaigalatzer

The problem is that we have completely different products and it's not just MVC, it's EF and ASP.NET Core as a whole. If we didn't call it ASP.NET would you still say that naming is the wrong way to go? To be honest, I don't see any other solution without adding some new features to nuget (which is probably a non starter because the backlog of things is already huge).

I would go with separating the packages completely. These are not the same products, they look alike and named alike, but the code base is indeed different so I would go with the approach of two libs (perhaps with them being just a shim)

@davidfowl My aversion to naming isn't the approach itself, it's the unlikelyhood of hundreds to thousands of packages all following it correctly and if they did...how many end users are saved any confusion? I think some sort of tooling support is the only thing that will improve the situation. I'm not arguing there is time to implement such support, only that it'd be the only improvement of consequence to users and authors.
Hopefully I'm wrong, but I'm betting people referencing MiniProfiler for their ASP.Net Core 1.0 MVC application running on net4X is going to happen - then they'll scratch their heads and finally find MiniProfiler.AspNetCore. This is probably especially true for upgrades. That's just not a good experience. Forget library authors, I'm on that side of the fence and I'd happily accept a little more work here if we can improve the consumer side - that's by far a higher priority, at least in my view.
@yishaigalatzer the question stands: what are their names, and do we have to rename or abandon the old name for one of them? If so, that in itself is a big ask and a confuser in itself. If we don't do that though, why would the user even start to look for a core version of any package, until things started breaking on them? That's a bit later in the pipe then we'd all like.
Here's another idea to throw out there: a concept of incompatible packages in NuGet. Where I could take MiniProfiler and say it's incompatible with <insert base core AspNetCore library here> with a reason provided. NuGet could present this error (or warning) when trying to install and possibly on restores. For example:

This MiniProfiler package isn't for ASP.Net Core. Please use MiniProfiler.AspNetCore for ASP.Net Core applications

An approach like this would be generally useful and not application stack or TFM specific. I'm not trying to argue strongly for any of these approaches in particular, just relaying ideas in the hopes maybe they're something new to consider.

I think we need a recommendation / suggestion on how to approach.
It will be hard for authors to define it's own way, like MiniProfiler.AspNetCore, Humanizer.NetCore, xUnit.SomethingElse ... we can end with a big mess. (we have some already)
As long as there is a guideline authors can follow and consumers can expect, I think we will be fine.
Also, I do hope that nuget, some time in the near future, doesn't suggest me (or at least tell me) packages for MVC4 when working on net core. (maybe easier to say than done ...)
What are we learning from the early porters? like IdentityServer, xUnit, Glimpse, Humanizer, Azure, Moq, etc ? Are they all currently following a simple/common approach?
If I'm creating a new library (actually I am), should I note it's for aspnet core even it doesn't exist for pre-aspnetcore ?
If I build a collection of taghelpers, or some middleware, may not be necessary, but if it's something else? How does the consumer knows beforehand if that library it's the one he's looking for?
I believe strong guidance is key here, and the sooner, the better.

Just to jump in here on behalf of Humanizer, this is a non-issue for us. We support PCL 259 and dotnet today. We will update to netstandard1.x as appropriate shortly. We do not care about which runtime we run on. This really seems to affect people that specifically have MVC dependencies that go beyond what's in NETStandard.Library.

I believe strong guidance is key here, and the sooner, the better. (@Bartmax)

a concept of incompatible packages in NuGet (@NickCraver)

I second both of these things.

@NickCraver @davidfowl
@onovotny I appreciate your work very much, but it's not constructive to say this is a non-issue because you do not need it. If you rely on an HTTP context in your library it is an issue.
Our library needs some data from the context and also needs to set some response values. We do not need any fancy stuff, just a simple ASP.NET HTTP context. Ok, we can tell the developer: Provide all data we need as simple types during initialization. And when the library finishes the developer has to create the response himself? Cache, headers, body, HTTP status code, etc.? This is not really developer friendly unless we are developing for Linux.
How many developers do you think know how Cache-Control work and how to get/set it correctly, what CORS is, what an ORIGIN header means, how authorization headers are used and so on. Our library accepts an HTTP context as input for initialization and creates the response object, that's all. Internally, it is decoupled from the HTTP context. And yes, we also accept simple types.
Possible solutions::

Let the library authors develop an additional package. In my opinion a no-go.
Define additional "sub-monikers" (Sub-TFM). Don't know if Asp.NET/NuGet is willing to do this..
Let the package author define a custom moniker (maybe based on recommendations).

Example:
The following is an example package definition with a custom moniker defined in the package ("CustomWeb"), a pre-defined 'official' sub-moniker ("AspNetCore") and
a dependency where no additional moniker is defined (default). The custom moniker includes a message for developers which maybe presented to the developer. A nuspec file may look like this:

<package>
    [...]
    <-- Define custom moniker -->
    <define symbol="CustomWeb" message="Use this for Custom.Web based apps." />
    <-- Own dependencies -->
     <group targetFramework=".NETFramework4.5.1">
	    // Packages with no pre-defined or custom moniker
    </group>
    < group targetFramework=".NETFramework4.5.1" symbol="CustomWeb">
	    // Packages for the "SystemWeb" custom moniker
    </group>
    <group targetFramework=".NETFramework4.5.1" symbol="AspNetCore">
 	    // Packages for the "AspNetCore" pre-defined moniker
   </group>
   [...]
   <Files>
       <file src="lib\net451\Backload.dll" target="lib\net451\Backload.dll" />
       <file src="lib\net451\CustomWeb\Backload.dll" target="lib\net451\CustomWeb\Backload.dll" />
       <file src="lib\net451\AspNetCore\Backload.dll" target="lib\net451\AspNetCore\Backload.dll" />
   </Files>
<packages>

If a developer imports this package into a .NET4.5.1 project there are 3 possible cases:

Default: The application references the libraries with no additional moniker set
Pre-defined moniker: ASP.NET/Nuget provides a sub-moniker. Looking at the package above, if the project is a ASP.NET Core project the library with the pre-defined AspNetCore moniker is used.
The package developer has defined a custom moniker. When the application also defines to use this moniker the library in the custom moniker path is used. Since the custom moniker also defines a message, this can be presented to the developer before importing the package or the NuGet package manager provides a list of choices if there are conflicts.

Content files:
The content files in the package (additional files like views) also need such a flag. For example, in traditional projects we may have a HTTP handler (ashx) included in a NuGet package in ASP.NET Core projects we do the same with a middleware which can be in the main library and does not need additional files.

This should be moved to nuget. Our recommendation is to split up your packages (.AspNetCore suffix for e.g.) as there's no way to pivot on anything except for target framework (and that's the wrong pivot here).


[BUTTON IDEA]:User Account Button

1. Name of button: User-circle Button
2. Description: A basic button/icon to take the user to their account page.
3. Button Type (Animated, Special, etc...):Icon
4. Will you work on it?:Yes I'd like to work on it.
Reference - https://fontawesome.com/v4.7.0/icon/user-circle

Hello @wisetok12680 thank you for the idea but we are currently not accepting icon ideas with no original concept as we are working on a change in a core feature regarding normal icon buttons.


Farming Station crash with AgriCraft Poppy Seed (1.12.2)

Issue Description:
Farming station crashed with Agricraft poppy seeds at full age.
(Looked a bit through the issue tracker, couldn't find a similar issue, at least not after a light search)
What happens:
Crash
What you expected to happen:
No crash
Steps to reproduce:

Plant agricraft poppy seed (10/10/10)
Start farming station at range lvl 4
Crash

Crash log (tells versions):
https://gist.github.com/DeadSix27/8023d16cd498dd79bf02c75ac7e6e0f7

Can repro with just Ender IO 5.3.70 (and EnderCore 0.5.76), Agricraft 2.12.0-b2 (and InifnityLib 1.12.1), and JEI.

This is most likely occuring because AgriCraft is compiling against an old version of EnderIO's API. Specifically, their Farmer Joe implementation creates a list of EntityItems, while EnderIO now expects a list of Pair<BlockPos, ItemStack>.
The change in EnderIO was introduced in this commit.

Thanks for your work @embeddedt ! Very appreciated <3 hopefully they'll merge your PR and thanks to you all for your time.

The PR was merged, however, I am unsure if/when there will be another AgriCraft release, so here is a compiled JAR from https://github.com/AgriCraft/AgriCraft/commit/79f226d7a5f1b005107bc548f78c9a849217f8fa:
agricraft.zip

I used the new jar but Farming Station would harvest a non-mature crop and the crop disappear(would not return the seed). I use diamahlia seed for testing. This also happens on cross crop(double Crop Stick)


cmd/go: No support for vendoring with gccgo toolchain.

Please answer these questions before submitting your issue. Thanks!

What version of Go are you using (go version)?

go version devel +ebbe4f8 Wed May 18 21:20:33 2016 +0000 linux/amd64

What operating system and processor architecture are you using (go env)?

Irrelevant.

What did you do?

$ cat $GOPATH/src/vendor/bar/bar.go
package bar

var World = "world"
$ cat $GOPATH/src/foo/foo.go
package main

import (
	"fmt"

	"bar"
)

func main () {
	fmt.Println("Hello", bar.World)
}
$ go build -compiler gccgo foo

What did you expect to see?

Nothing, and an executable 'foo' created.

What did you see instead?

$ go build -compiler gccgo foo
# foo
src/foo/foo.go:6:5: error: import file ‘bar’ not found
  "bar"
     ^
src/foo/foo.go:10:23: error: reference to undefined name ‘bar’
  fmt.Println("Hello", bar.World)
                       ^

This isn't that serious as I mostly use gccgo for packaging purposes and most packages are not built with bundled dependencies, but it's caused one package build failure I know about (https://launchpad.net/ubuntu/+source/docker-registry/2.3.1~ds2-1/+build/9640391).

Perhaps this is related to #15628

Oh yes, that's the same bug. Thought I searched first, apparently not!


opensearch play fails Exiting script [deploy_logging.sh]

I have deployed Sas Viya 4 (2023.05) on AWS using the aws-iac repo.

  branch 6.0.0  - https://github.com/sassoftware/viya4-iac-aws

  branch 6.7.0 - https://github.com/sassoftware/viya4-deployment

When deploying "components=cluster-logging" it fails.
The other steps work fine, and it even givs me the Opensearch user and password.
im running the playbook for "components=cluster-logging"
i.e. make sas-deployment prefix=viya4-01 namespace=sas-viya4 components=cluster-logging
TASK [monitoring : cluster-logging - deploy]
task path: /viya4-deployment/roles/monitoring/tasks/cluster-logging.yaml:94
fatal: [localhost]: FAILED! => changed=true
  cmd:
  - /tmp/ansible.1xg7lu0y/viya4-monitoring-kubernetes/logging/bin/deploy_logging.sh
  delta: '0:00:24.326475'
  end: '2023-07-20 11:57:52.839824'
  invocation:
    module_args:
      _raw_params: /tmp/ansible.1xg7lu0y/viya4-monitoring-kubernetes/logging/bin/deploy_logging.sh
      _uses_shell: false
      argv: null
      chdir: null
      creates: null
      executable: null
      removes: null
      stdin: null
      stdin_add_newline: true
      strip_empty_ends: true
      warn: true
  msg: non-zero return code
  rc: 1
  start: '2023-07-20 11:57:28.513349'
  stderr: |-

Flag --short has been deprecated, and will be removed in the future. The --short output will become the default.
Flag --short has been deprecated, and will be removed in the future. The --short output will become the default.
**warning: error calculating patch from openapi spec: map: map[] does not contain declared merge key: name
error: error when applying patch:**

    to:
    Resource: "apps/v1, Resource=deployments", GroupVersionKind: "apps/v1, Kind=Deployment"
    Name: "eventrouter", Namespace: "logging"
    for: "/tmp/sas.mon.lwen61fu/logging/eventrouter.yaml": error when patching "/tmp/sas.mon.lwen61fu/logging/eventrouter.yaml": creating patch with:
    original:
    {"apiVersion":"apps/v1","kind":"Deployment","metadata":{"annotations":{},"labels":{"app":"eventrouter","kubernetes.io/name":"eventrouter","v4m.sas.com/name":"viya4-monitoring-kubernetes"},"name":"eventrouter","namespace":"logging"},"spec":{"replicas":1,"selector":{"matchLabels":{"app":"eventrouter"}},"template":{"metadata":{"labels":{"app":"eventrouter","kubernetes.io/name":"eventrouter","tier":"control-plane-addons","v4m.sas.com/name":"viya4-monitoring-kubernetes"}},"spec":{"automountServiceAccountToken":true,"containers":[{"image":"gcr.io/heptio-images/eventrouter:v0.3","imagePullPolicy":"IfNotPresent","name":"kube-eventrouter","volumeMounts":[{"mountPath":"/etc/eventrouter","name":"config-volume"}]}],"imagePullSecrets":[{"name":null}],"serviceAccount":"eventrouter","volumes":[{"configMap":{"name":"eventrouter-cm"},"name":"config-volume"}]}}}}

    modified:
    {"apiVersion":"apps/v1","kind":"Deployment","metadata":{"annotations":{"kubectl.kubernetes.io/last-applied-configuration":"{\"apiVersion\":\"apps/v1\",\"kind\":\"Deployment\",\"metadata\":{\"annotations\":{},\"labels\":{\"app\":\"eventrouter\",\"kubernetes.io/name\":\"eventrouter\",\"v4m.sas.com/name\":\"viya4-monitoring-kubernetes\"},\"name\":\"eventrouter\",\"namespace\":\"logging\"},\"spec\":{\"replicas\":1,\"selector\":{\"matchLabels\":{\"app\":\"eventrouter\"}},\"template\":{\"metadata\":{\"labels\":{\"app\":\"eventrouter\",\"kubernetes.io/name\":\"eventrouter\",\"tier\":\"control-plane-addons\",\"v4m.sas.com/name\":\"viya4-monitoring-kubernetes\"}},\"spec\":{\"automountServiceAccountToken\":true,\"containers\":[{\"image\":\"gcr.io/heptio-images/eventrouter:v0.3\",\"imagePullPolicy\":\"IfNotPresent\",\"name\":\"kube-eventrouter\",\"volumeMounts\":[{\"mountPath\":\"/etc/eventrouter\",\"name\":\"config-volume\"}]}],\"imagePullSecrets\":[{\"name\":null}],\"serviceAccount\":\"eventrouter\",\"volumes\":[{\"configMap\":{\"name\":\"eventrouter-cm\"},\"name\":\"config-volume\"}]}}}}\n"},"labels":{"app":"eventrouter","kubernetes.io/name":"eventrouter","v4m.sas.com/name":"viya4-monitoring-kubernetes"},"name":"eventrouter","namespace":"logging"},"spec":{"replicas":1,"selector":{"matchLabels":{"app":"eventrouter"}},"template":{"metadata":{"labels":{"app":"eventrouter","kubernetes.io/name":"eventrouter","tier":"control-plane-addons","v4m.sas.com/name":"viya4-monitoring-kubernetes"}},"spec":{"automountServiceAccountToken":true,"containers":[{"image":"gcr.io/heptio-images/eventrouter:v0.3","imagePullPolicy":"IfNotPresent","name":"kube-eventrouter","volumeMounts":[{"mountPath":"/etc/eventrouter","name":"config-volume"}]}],"imagePullSecrets":[{"name":null}],"serviceAccount":"eventrouter","volumes":[{"configMap":{"name":"eventrouter-cm"},"name":"config-volume"}]}}}}

    current:
    {"apiVersion":"apps/v1","kind":"Deployment","metadata":{"annotations":{"deployment.kubernetes.io/revision":"1","kubectl.kubernetes.io/last-applied-configuration":"{\"apiVersion\":\"apps/v1\",\"kind\":\"Deployment\",\"metadata\":{\"annotations\":{},\"labels\":{\"app\":\"eventrouter\",\"kubernetes.io/name\":\"eventrouter\",\"v4m.sas.com/name\":\"viya4-monitoring-kubernetes\"},\"name\":\"eventrouter\",\"namespace\":\"logging\"},\"spec\":{\"replicas\":1,\"selector\":{\"matchLabels\":{\"app\":\"eventrouter\"}},\"template\":{\"metadata\":{\"labels\":{\"app\":\"eventrouter\",\"kubernetes.io/name\":\"eventrouter\",\"tier\":\"control-plane-addons\",\"v4m.sas.com/name\":\"viya4-monitoring-kubernetes\"}},\"spec\":{\"automountServiceAccountToken\":true,\"containers\":[{\"image\":\"gcr.io/heptio-images/eventrouter:v0.3\",\"imagePullPolicy\":\"IfNotPresent\",\"name\":\"kube-eventrouter\",\"volumeMounts\":[{\"mountPath\":\"/etc/eventrouter\",\"name\":\"config-volume\"}]}],\"imagePullSecrets\":[{\"name\":null}],\"serviceAccount\":\"eventrouter\",\"volumes\":[{\"configMap\":{\"name\":\"eventrouter-cm\"},\"name\":\"config-volume\"}]}}}}\n"},"creationTimestamp":"2023-07-19T16:05:09Z","generation":1,"labels":{"app":"eventrouter","kubernetes.io/name":"eventrouter","v4m.sas.com/name":"viya4-monitoring-kubernetes"},"name":"eventrouter","namespace":"logging","resourceVersion":"272586","uid":"9ea74edd-4637-4cdf-9bf3-968429ded57b"},"spec":{"progressDeadlineSeconds":600,"replicas":1,"revisionHistoryLimit":10,"selector":{"matchLabels":{"app":"eventrouter"}},"strategy":{"rollingUpdate":{"maxSurge":"25%","maxUnavailable":"25%"},"type":"RollingUpdate"},"template":{"metadata":{"creationTimestamp":null,"labels":{"app":"eventrouter","kubernetes.io/name":"eventrouter","tier":"control-plane-addons","v4m.sas.com/name":"viya4-monitoring-kubernetes"}},"spec":{"automountServiceAccountToken":true,"containers":[{"image":"gcr.io/heptio-images/eventrouter:v0.3","imagePullPolicy":"IfNotPresent","name":"kube-eventrouter","resources":{},"terminationMessagePath":"/dev/termination-log","terminationMessagePolicy":"File","volumeMounts":[{"mountPath":"/etc/eventrouter","name":"config-volume"}]}],"dnsPolicy":"ClusterFirst","imagePullSecrets":[{}],"restartPolicy":"Always","schedulerName":"default-scheduler","securityContext":{},"serviceAccount":"eventrouter","serviceAccountName":"eventrouter","terminationGracePeriodSeconds":30,"volumes":[{"configMap":{"defaultMode":420,"name":"eventrouter-cm"},"name":"config-volume"}]}}},"status":{"availableReplicas":1,"conditions":[{"lastTransitionTime":"2023-07-19T16:05:09Z","lastUpdateTime":"2023-07-19T16:05:13Z","message":"ReplicaSet \"eventrouter-55df4c4644\" has successfully progressed.","reason":"NewReplicaSetAvailable","status":"True","type":"Progressing"},{"lastTransitionTime":"2023-07-20T08:01:24Z","lastUpdateTime":"2023-07-20T08:01:24Z","message":"Deployment has minimum availability.","reason":"MinimumReplicasAvailable","status":"True","type":"Available"}],"observedGeneration":1,"readyReplicas":1,"replicas":1,"updatedReplicas":1}}

**for:: map: map[] does not contain declared merge key: name**

stderr_lines:
  stdout: |-
    INFO User directory: /tmp/ansible.1xg7lu0y
    INFO Helm client version: 3.11.3
    INFO Kubernetes client version: v1.25.9
    INFO Kubernetes server version: v1.25.11-eks-a5565ad**

    Deploying logging components to the [logging] namespace [Thu Jul 20 11:57:48 UTC 2023]

    INFO Deploying Event Router ...
    serviceaccount/eventrouter unchanged
    clusterrole.rbac.authorization.k8s.io/eventrouter unchanged
    clusterrolebinding.rbac.authorization.k8s.io/eventrouter unchanged
    configmap/eventrouter-cm unchanged

**ERROR Exiting script [deploy_logging.sh] due to an error executing the command [logging/bin/deploy_eventrouter.sh].**

stdout_lines:

@cumcke  any idea what the issue could be ?

@biohazd Were you deploying into a entirely new cluster or were you updating SAS Viya Monitoring on an existing cluster?  The messages you shared look like they were attempting to update an existing deployment of things.

It is a new cluster. I ran the script a few times.
I have tried it on a new cluster as well, and still fails.

Is there any way to debug it better or get some more verbose error message ?

S

Unfortunately, when deploying our project via the Viya 4 Deployment project, we lose some visibility and/access.  If the cluster is up and running, you could deploy the monitoring components directly by using our deployment tooling directly.  All that you would need is a Linux shell with access to the cluster and a kube config file with full admin access to the cluster.  That would probably make it easier to debug this problem.
In the meantime, I have some additional questions:

Are you using a custom USER_DIR directory (via the new V4M_CUSTOM_CONFIG_USER_DIR configuration variable)?
Does this cluster have limited internet access or any sort of networking limitations?

I would recommend you remove any of the logging components already deployed before trying again.  To do that, run the uninstall task that corresponds to the cluster_logging deploy task you've been running.  Or, alternatively, you should be able to delete the "logging" namespace.  That will give you a clean environment.  Once you've done that, re-run the deployment task and, if it fails, share the log output you get at that point.  That might give us a better idea of what's going on.

Thanks. I will try that.
I’m not using  any custom USERDIR  and there should be no network restrictions.

Thnaks, it did dpeloy and is working,   but it does still show those errros.
TASK [monitoring : cluster-logging - deploy] ***********************************
task path: /viya4-deployment/roles/monitoring/tasks/cluster-logging.yaml:94
fatal: [localhost]: FAILED! => changed=true
cmd:

/tmp/ansible.rewnutat/viya4-monitoring-kubernetes/logging/bin/deploy_logging.sh
delta: '0:09:23.592197'
end: '2023-07-21 09:16:22.959295'
invocation:
module_args:
_raw_params: /tmp/ansible.rewnutat/viya4-monitoring-kubernetes/logging/bin/deploy_logging.sh
_uses_shell: false
argv: null
chdir: null
creates: null
executable: null
removes: null
stdin: null
stdin_add_newline: true
strip_empty_ends: true
warn: true
msg: non-zero return code
rc: 1
start: '2023-07-21 09:06:59.367098'
stderr: |-
Flag --short has been deprecated, and will be removed in the future. The --short output will become the default.
Flag --short has been deprecated, and will be removed in the future. The --short output will become the default.
Warning: spec.template.spec.imagePullSecrets[0].name: invalid empty name ""
environment: line 2: [: ==: unary operator expected
environment: line 2: [: ==: unary operator expected
environment: line 2: [: ==: unary operator expected
stderr_lines:
stdout: |-
INFO User directory: /tmp/ansible.rewnutat
INFO Helm client version: 3.11.3
INFO Kubernetes client version: v1.25.9
INFO Kubernetes server version: v1.25.11-eks-a5565ad
namespace/logging created
serviceaccount/default patched
Deploying logging components to the [logging] namespace [Fri Jul 21 09:07:28 UTC 2023]
INFO Deploying Event Router ...
serviceaccount/eventrouter created
clusterrole.rbac.authorization.k8s.io/eventrouter created
clusterrolebinding.rbac.authorization.k8s.io/eventrouter created
configmap/eventrouter-cm created
deployment.apps/eventrouter created
INFO Event Router has been deployed
secret/internal-user-kibanaserver labeled
secret/v4m-root-ca-tls-secret created
secret/v4m-root-ca-tls-secret annotated
secret/v4m-root-ca-tls-secret labeled
secret/kibana-tls-secret created
secret/kibana-tls-secret annotated
secret/kibana-tls-secret labeled
INFO Adding [opensearch] helm repository
"opensearch" has been added to your repositories
secret/v4m-osd-tls-enabled created
INFO Deploying OpenSearch Dashboards
Release "v4m-osd" does not exist. Installing it now.
NAME: v4m-osd
LAST DEPLOYED: Fri Jul 21 09:08:42 2023
NAMESPACE: logging
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:

Get the application URL by running these commands:
https://dashboards.xxxx.com/
INFO OpenSearch Dashboards has been deployed
serviceaccount/v4m-osd-dashboards patched

secret/internal-user-admin labeled
secret/internal-user-logcollector labeled
secret/internal-user-metricgetter labeled
secret/es-transport-tls-secret created
secret/es-transport-tls-secret annotated
secret/es-transport-tls-secret labeled
secret/es-rest-tls-secret created
secret/es-rest-tls-secret annotated
secret/es-rest-tls-secret labeled
secret/es-admin-tls-secret created
secret/es-admin-tls-secret annotated
secret/es-admin-tls-secret labeled
secret/opensearch-cert-subjects created
secret/opensearch-cert-subjects labeled
configmap/run-securityadmin.sh created
configmap/run-securityadmin.sh labeled
"opensearch" already exists with the same configuration, skipping
secret/opensearch-securityconfig created
secret/opensearch-securityconfig labeled
INFO Deploying OpenSearch
Release "opensearch" does not exist. Installing it now.
NAME: opensearch
LAST DEPLOYED: Fri Jul 21 09:11:39 2023
NAMESPACE: logging
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
Watch all cluster members come up.
$ kubectl get pods --namespace=logging -l app.kubernetes.io/component=v4m-search -w
INFO Waiting on OpenSearch pods to be Ready
pod/v4m-search-0 condition met
Looping: 0 Fri Jul 21 09:14:57 UTC 2023
RC: 0
| run_securityadmin.sh script starting [Fri Jul 21 09:14:57 UTC 2023]
| **************************************************************************
| ** This tool will be deprecated in the next major release of OpenSearch **
| ** https://github.com/opensearch-project/security/issues/1755           **
| **************************************************************************
| Security Admin v7
| Will connect to localhost:9200 ... done
| Connected as "CN=es-admin,O=v4m"
| OpenSearch Version: 2.8.0
| Contacting opensearch cluster 'opensearch' and wait for YELLOW clusterstate ...
| Clustername: opensearch-cluster
| Clusterstate: GREEN
| Number of nodes: 3
| Number of data nodes: 3
| .opendistro_security index does not exists, attempt to create it ... done (0-all replicas)
| Populate config from /usr/share/opensearch/plugins/opensearch-security/securityconfig/
| Will update '/config' with /usr/share/opensearch/plugins/opensearch-security/securityconfig/config.yml
|    SUCC: Configuration for 'config' created or updated
| Will update '/roles' with /usr/share/opensearch/plugins/opensearch-security/securityconfig/roles.yml
|    SUCC: Configuration for 'roles' created or updated
| Will update '/rolesmapping' with /usr/share/opensearch/plugins/opensearch-security/securityconfig/roles_mapping.yml
|    SUCC: Configuration for 'rolesmapping' created or updated
| Will update '/internalusers' with /usr/share/opensearch/plugins/opensearch-security/securityconfig/internal_users.yml
|    SUCC: Configuration for 'internalusers' created or updated
| Will update '/actiongroups' with /usr/share/opensearch/plugins/opensearch-security/securityconfig/action_groups.yml
|    SUCC: Configuration for 'actiongroups' created or updated
| Will update '/tenants' with /usr/share/opensearch/plugins/opensearch-security/securityconfig/tenants.yml
|    SUCC: Configuration for 'tenants' created or updated
| Will update '/nodesdn' with /usr/share/opensearch/plugins/opensearch-security/securityconfig/nodes_dn.yml
|    SUCC: Configuration for 'nodesdn' created or updated
| Will update '/whitelist' with /usr/share/opensearch/plugins/opensearch-security/securityconfig/whitelist.yml
|    SUCC: Configuration for 'whitelist' created or updated
| Will update '/allowlist' with /usr/share/opensearch/plugins/opensearch-security/securityconfig/allowlist.yml
|    SUCC: Configuration for 'allowlist' created or updated
| SUCC: Expected 10 config types for node {"updated_config_types":["allowlist","tenants","rolesmapping","nodesdn","audit","roles","whitelist","internalusers","actiongroups","config"],"updated_config_size":10,"message":null} is 10 (["allowlist","tenants","rolesmapping","nodesdn","audit","roles","whitelist","internalusers","actiongroups","config"]) due to: null
| SUCC: Expected 10 config types for node {"updated_config_types":["allowlist","tenants","rolesmapping","nodesdn","audit","roles","whitelist","internalusers","actiongroups","config"],"updated_config_size":10,"message":null} is 10 (["allowlist","tenants","rolesmapping","nodesdn","audit","roles","whitelist","internalusers","actiongroups","config"]) due to: null
| SUCC: Expected 10 config types for node {"updated_config_types":["allowlist","tenants","rolesmapping","nodesdn","audit","roles","whitelist","internalusers","actiongroups","config"],"updated_config_size":10,"message":null} is 10 (["allowlist","tenants","rolesmapping","nodesdn","audit","roles","whitelist","internalusers","actiongroups","config"]) due to: null
| Done with success
INFO OpenSearch has been deployed
INFO Deploying Elasticsearch metric exporter ...
INFO Adding [prometheus-community] helm repository
"prometheus-community" has been added to your repositories
Release "es-exporter" does not exist. Installing it now.
NAME: es-exporter
LAST DEPLOYED: Fri Jul 21 09:15:43 2023
NAMESPACE: logging
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:

Get the application URL by running these commands:
export POD_NAME=$(kubectl get pods --namespace logging -l "app=v4m-es-exporter" -o jsonpath="{.items[0].metadata.name}")
echo "Visit http://<IP_ADDRESS>:9108/metrics to use your application"
kubectl port-forward $POD_NAME 9108:9108 --namespace logging
INFO Elasticsearch metric exporter has been deployed

INFO Loading Content into OpenSearch
ERROR Unable to identify the temporary port used for port-forwarding [v4m-search]; exiting script.
ERROR Exiting script [deploy_logging.sh] due to an error executing the command [logging/bin/deploy_opensearch_content.sh].
stdout_lines:

@biohazd I wanted to check in with on the status of this issue.  Were you able to get everything deployed and working?

I have the same problem.  I have verified i have sufficient resources in my cluster.
Release "es-exporter" does not exist. Installing it now.
NAME: es-exporter
LAST DEPLOYED: Fri Jun  7 17:00:34 2024
NAMESPACE: logging
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:

Get the application URL by running these commands:
export POD_NAME=$(kubectl get pods --namespace logging -l "app=v4m-es-exporter" -o jsonpath="{.items[0].metadata.name}")
echo "Visit http://<IP_ADDRESS>:9108/metrics to use your application"
kubectl port-forward $POD_NAME 9108:9108 --namespace logging
INFO Elasticsearch metric exporter has been deployed

INFO Loading Content into OpenSearch
ERROR Unable to identify the temporary port used for port-forwarding [v4m-search]; exiting script.
ERROR Exiting script [deploy_logging.sh] due to an error executing the command [logging/bin/deploy_opensearch_content.sh].
I see following resources in my name space
NAME                                   READY   STATUS    RESTARTS   AGE
pod/v4m-es-exporter-6854fd79f7-gl72g   1/1     Running   0          4m4s
pod/v4m-osd-78f8ddfc57-j98k5           1/1     Running   0          13m
pod/v4m-search-0                       1/1     Running   0          8m24s
pod/v4m-search-1                       1/1     Running   0          8m24s
pod/v4m-search-2                       1/1     Running   0          8m24s
NAME                          TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)                      AGE
service/v4m-es-exporter       ClusterIP   <IP_ADDRESS>             9108/TCP                     4m5s
service/v4m-osd               ClusterIP   <IP_ADDRESS>           5601/TCP                     13m
service/v4m-search            ClusterIP   <IP_ADDRESS>            9200/TCP,9300/TCP            8m26s
service/v4m-search-headless   ClusterIP   None                   9200/TCP,9300/TCP,9600/TCP   8m26s
NAME                              READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/v4m-es-exporter   1/1     1            1           4m5s
deployment.apps/v4m-osd           1/1     1            1           13m
NAME                                         DESIRED   CURRENT   READY   AGE
replicaset.apps/v4m-es-exporter-6854fd79f7   1         1         1       4m5s
replicaset.apps/v4m-osd-78f8ddfc57           1         1         1       13m
NAME                          READY   AGE
statefulset.apps/v4m-search   3/3     8m27s


Better error messages for things that can be solved with generics

I'm doing this:
function shuffleArrayExceptNot(array) {
    return [...array];
}

// Loop 1
for (const str of shuffleArrayExceptNot(['x','y','z'])) {

}

// Loop 2
for (const num of shuffleArrayExceptNot([1,2,3])) {

}

// Loop 3
for (const [a, b] of shuffleArrayExceptNot([[1,2],[3,4]])) {

}

If I remove either Loop 2 or Loop 3, everything is fine, but when I have both, I get this error message:
16: for (const [a, b] of shuffleArrayExceptNot([[1,2],[3,4]])) {
                ^ an indexer property is missing in `Number` [1].
References:
11: for (const num of shuffleArrayExceptNot([1,2,3])) {
                                             ^ [1]

Not sure how to begin to fix this one. Also not sure if this is my fault, or if it's a bug.
Repro here

Hm, by making the function generic:
function shuffleArrayExceptNot<T>(array: Array<T>): Array<T> {
    return [...array];
}

I solved my issue. However I think Flow should give me a hint instead of giving me the very cryptic/wrong message it did (as far as I know the "indexer property" thing doesn't work for arrays).

Closing since the original example will require annotation since v0.201


Use livenessprobe:v2.12.0.

What type of PR is this?
/kind bug

What this PR does / why we need it:
This PR points the livenessprobe image to the latest available version, as v2.13.0 is unavailable.
[root@k8s-csi-tester-2 overlays]# kubectl get pods -A
NAMESPACE     NAME                                       READY   STATUS    RESTARTS   AGE
kube-system   calico-kube-controllers-6df7596dbd-t867p   1/1     Running   0          137m
kube-system   calico-node-6r5v6                          1/1     Running   0          3h27m
kube-system   calico-node-sgx7s                          1/1     Running   0          135m
kube-system   coredns-7db6d8ff4d-7f7z5                   1/1     Running   0          137m
kube-system   coredns-7db6d8ff4d-pqx76                   1/1     Running   0          137m
kube-system   etcd-k8s-csi-tester-2                      1/1     Running   0          135m
kube-system   kube-apiserver-k8s-csi-tester-2            1/1     Running   0          135m
kube-system   kube-controller-manager-k8s-csi-tester-2   1/1     Running   0          135m
kube-system   kube-proxy-mgx7h                           1/1     Running   0          3h27m
kube-system   kube-proxy-qmqg9                           1/1     Running   0          135m
kube-system   kube-scheduler-k8s-csi-tester-2            1/1     Running   0          135m
kube-system   powervs-csi-controller-5c6f6b46b9-z4ww5    6/6     Running   0          5m42s
kube-system   powervs-csi-node-h67f9                     3/3     Running   0          5m42s
kube-system   powervs-csi-node-wpqsz                     3/3     Running   0          5m42s

Which issue(s) this PR fixes:

Fixes #686
Special notes for your reviewer:
This change will be required to be cherry-picked to release-0.6, as the same image version is being used.
Release note:
Fix livenessprobe ErrImagePul/ImagePullBackOff issue.

/retest-required

/lgtm


Introduce revision draft FS and revision draft CRUD operations

Demo of what the completed feature will look like:
Batch_Revision_061423
Related issue: #311
Deploy command will come in a follow-up PR

Struggled pretty hard with method names... please feel free to suggest better ones 😅

Will be closing this in favor of a slightly different implementation.


chore(package): update kronos-interceptor to version 2.4.15

https://greenkeeper.io/

Codecov Report

Merging #49 into master will not change coverage.
The diff coverage is n/a.

@@           Coverage Diff           @@
##           master      #49   +/-   ##
=======================================
  Coverage   83.33%   83.33%
=======================================
  Files           1        1
  Lines          12       12
=======================================
  Hits           10       10
  Misses          2        2

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 41afd82...b99851d. Read the comment docs.


Network id from config

Codecov Report

Merging #206 into master will decrease coverage by 0.07%.
The diff coverage is 100%.

@@            Coverage Diff             @@
##           master     #206      +/-   ##
==========================================
- Coverage   65.41%   65.33%   -0.08%
==========================================
  Files          42       42
  Lines        3024     3003      -21
  Branches      347      344       -3
==========================================
- Hits         1978     1962      -16
+ Misses        958      954       -4
+ Partials       88       87       -1

Impacted Files
Coverage Δ

vmpool/clone.py
72.5% <100%> (-0.59%)
:arrow_down:

core/auth/custom_auth.py
93.47% <0%> (+2.17%)
:arrow_up:

Continue to review full report at Codecov.

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


Write an ERC721 contract with custom errors

As suggested by @scorpion9979 in https://github.com/paulrberg/prb-contracts/discussions/21.

I'm going to close this issue because OpenZeppelin has started working on this. See EIP-6093.

Cc @scorpion9979 you might be interested to track OpenZeppelin's progress on their V5 (which will come with EIP-6093-powered contracts).

Cc @scorpion9979 you might be interested to track OpenZeppelin's progress on their V5 (which will come with EIP-6093-powered contracts).

Thanks for the tip! I just added a GitHub notification for OpenZeppelin's releases.


Add documentation for gradle-wrapper.properties binding

Checklist

[X] I have viewed, signed, and submitted the Contributor License Agreement.
[X] I have linked issue(s) that this PR should close using keywords or the Github UI (See docs)
[X] I have added an integration test, if necessary.
[X] I have reviewed the styleguide for guidance on my code quality.
[X] I'm happy with the commit history on this PR (I have rebased/squashed as needed).

this PR relates to this change: https://github.com/paketo-buildpacks/gradle/pull/262


Feat/injective perp

Before submitting this PR, please make sure:

[X] Your code builds clean without any errors or warnings
[X] You are using approved title ("feat/", "fix/", "docs/", "refactor/")

A description of the changes proposed in the pull request:
This PR introduces the Injective perpetual connector for the hummingbot client.
Tests performed by the developer:

Added unit tests for the new code.
Manually tested the connector's functionality with a PMM strategy.

Tips for QA testing:
Please test the full extent of the perpetual connector's functionality.
Link to Gateway PR: https://github.com/hummingbot/gateway/pull/81
Link to PRP: https://snapshot.org/#/hbot-prp.eth/proposal/0x1e36039ae9ff72c133b2bcf4e7c3aa66b25693b195ac3e5c31ab7fe3f813d745

@nikspz, replying to your comment here. I am not able to determine what exactly is going wrong based on the information in the logs. I have added multiple debugging statements both in the injective perpetual connector as well as the perpetual MM strategy. Please try to reproduce the issues you experienced using including these new changes.
Also, please enable debugging while testing. I have attached a hummingbot_logs.yml config file that will enable this for the client.
@mrhzysbl, @rxlxrxsx, please also do setup a run with the configs provided by @nikspz in his original message (I have added the file in the attached zip). Please also don't forget to enable debug logging (conf file for that in the zip). I will run a test on my end as well. Hopefully we can reproduce this quickly.
injper.zip

@nikspz, to summarize on the issues posted on the gateway PR and the latest one on this PR.
The first and the third issue on the Gateway PR, as well as the issue posted on this PR are due to Injective chain occasionally dropping a transaction. This can be verified with the additional debugging statements in the logs you provided in your last comment above. We can see that the the order SIJUT5f9b0b5033eef578ef4f14ee122fe27980765d6c72879 was successfully submitted by Gateway, receiving a tx hash EA5505B3F567924D110F1172830E86F36667EF00AF06225123CC129FDF2B60BC in response. However, if we look for that tx hash on the Injective explorer, we cannot find it.
In that situation, up to now, the bot will mark the order as lost after 10 iterations of the order status update loop (which happens every 2m). In the above logs, the bot has been attempting to get the status for 10m, so still 10m to go. I have now pushed a commit adjusting that number to 3 attempts, so the bot should be recovering after 6m of failed order status fetching.
Re the second issue on the gateway PR comment, the buy order that has remained on the exchange after the last stop command is actually still present in the attached database, so the bot should re-attempt a cancelation once restarted. This is expected behaviour.


Bug: declaring a RedisStore in the app triggers a 500 error in the 2nd set of parameters of a parametrized test

Description
If you have a parametrized test that uses a function-scoped fixture that uses itself a session-scoped fixture and you declare a RedisStore in the app, the 2nd test fails with RuntimeError: Event loop is closed
The 2nd test passes in those cases:

all fixtures are session-based (just comment the client fixture)
there is no RedisStore in the app (or replace with a MemoryStore)

URL to code causing the issue
No response
MCVE
import msgspec
import pytest

from litestar import Litestar, get
from litestar.middleware.session.server_side import ServerSideSessionConfig
from litestar.stores.redis import RedisStore
from litestar.testing import AsyncTestClient

@get()
async def hget() -> int:
    return 1

class AppSettings(msgspec.Struct):
    debug: bool
    redis_url: str = "redis://localhost:6379"

def get_app(app_settings: AppSettings) -> Litestar:
    # setting up stores
    session_store = RedisStore.with_client(url=app_settings.redis_url)
    app = Litestar(route_handlers=[hget],
                   middleware=[
                       ServerSideSessionConfig().middleware,
                   ],
                   stores={"sessions": session_store, },  # comment this and 2nd test pass
                   debug=app_settings.debug
                   )
    return app

@pytest.fixture(scope="session")
def anyio_backend() -> str:
    return "asyncio"

@pytest.fixture(scope="session")
def app_settings_test():
    return AppSettings(debug=True)

@pytest.fixture(scope="session")
def app_test(app_settings_test: AppSettings):
    app = get_app(app_settings_test)
    yield app

@pytest.fixture  # add scope="session" and 2nd test pass
async def client(app_test: Litestar):
    async with AsyncTestClient(app=app_test) as c:
        yield c

@pytest.mark.anyio
@pytest.mark.parametrize("p1, p2",
                         [(1, 2), (3, 4)])
async def test_param(client: AsyncTestClient, p1: int, p2: int):
    response = await client.get("/")
    assert response.status_code == 200

Steps to reproduce
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error

Screenshots
"![SCREENSHOT_DESCRIPTION](SCREENSHOT_LINK.png)"

Logs
No response
Litestar Version
2.5.5
Platform

[X] Linux
[ ] Mac
[ ] Windows
[ ] Other (Please specify in the description above)

[!NOTE]
While we are open for sponsoring on GitHub Sponsors and
OpenCollective, we also utilize Polar.sh to engage in pledge-based sponsorship.
Check out all issues funded or available for funding on our Polar.sh dashboard

If you would like to see an issue prioritized, make a pledge towards it!
We receive the pledge once the issue is completed & verified
This, along with engagement in the community, helps us know which features are a priority to our users.

thinking out loud after I read this, shouldn't there be some close/aclose methods for stores, or at least one for the RedisStore ?

this can be circumvented in the get_app factory replacing the RedisStore with a MemoryStore only for tests but it feels like a hack

thinking out loud after I read this, shouldn't there be some close/aclose methods for stores, or at least one for the RedisStore ?

I agree that we should add this to the stores. Then Litestar could close the stores on app shutdown (make it configurable as to whether the store should be closed or not).

thinking out loud after I read this, shouldn't there be some close/aclose methods for stores, or at least one for the RedisStore ?

I agree that we should add this to the stores. Then Litestar could close the stores on app shutdown (make it configurable as to whether the store should be closed or not).

I greped all python Redis store in github and nobody seems to have methods to close stores weirdly enough, so we're not alone :)
I'm not sure this is related to the issue at hand though, but from experience tests and unclosed ressources usually dont make good friends.

thinking out loud after I read this, shouldn't there be some close/aclose methods for stores, or at least one for the RedisStore ?

The reason this does not exist is that the store can receive an "externally managed" Redis instance. The idea here was that whoever passes it in is responsible for managing its lifetime as well. While I still think this is the right thing to do, I can see how it could be an issue when the with_client classmethod is used, since then it's the store that's responsible for creating the client instance.
Maybe the solution here is to add a flag to the RedisStore that indicates whether we should handle the client's lifetime?

I'm not sure this is related to the issue at hand though, but from experience tests and unclosed ressources usually dont make good friends.

There are/were quite a few other issues surrounding the async Redis client and lifetimes, e.g. it trying to perform some action in __del__ that relied on an active async context, so I wouldn't entirely dismiss the possibility that this is also just the redis client being weird / buggy.
You could try though to manage its lifetime explicitly and see if that fixes the issue.

You could try though to manage its lifetime explicitly and see if that fixes the issue.

something like this does work indeed, I'm not too sure this is not overly complicated though it does the job, and my app factory needs to be async now :
from contextlib import asynccontextmanager
from typing import Iterator

import msgspec
import pytest
from redis.asyncio import Redis, ConnectionPool

from litestar import Litestar, get
from litestar.middleware.session.server_side import ServerSideSessionConfig
from litestar.testing import AsyncTestClient

@get()
async def hget() -> int:
    return 1

class AppSettings(msgspec.Struct):
    debug: bool
    redis_url: str = "redis://localhost:6379"

@asynccontextmanager
async def make_session_store(app_settings: AppSettings) -> Iterator[None]:
    pool = ConnectionPool.from_url(app_settings.redis_url)
    client = Redis.from_pool(pool)
    try:
        yield
    finally:
        await client.aclose()

async def get_app(app_settings: AppSettings) -> Litestar:
    # setting up stores
    # session_store = RedisStore.with_client(url=app_settings.redis_url)
    # session_store = RedisStore(redis=Redis(), namespace="sessions")
    # session_store = MemoryStore()
    session_config = ServerSideSessionConfig()
    async with make_session_store(app_settings) as session_store:
        app = Litestar(route_handlers=[hget],
                       middleware=[
                           session_config.middleware,
                       ],
                       stores={"sessions": session_store},  # comment this and 2nd test pass
                       debug=app_settings.debug,
                       # lifespan=[partial(lifespan, app_settings=app_settings)]
                       )
        return app

@pytest.fixture(scope="session")
def anyio_backend() -> str:
    return "asyncio"

@pytest.fixture(scope="session")
def app_settings_test():
    return AppSettings(debug=True)

@pytest.fixture(scope="session")
async def app_test(app_settings_test: AppSettings):
    app = await get_app(app_settings_test)
    yield app

@pytest.fixture  # add scope="session" and 2nd test pass
async def client(app_test: Litestar):
    async with AsyncTestClient(app=app_test) as c:
        yield c

@pytest.mark.anyio(scope="session")
@pytest.mark.parametrize("p1, p2",
                         [(1, 2), (3, 4)])
async def test_param(client: AsyncTestClient, p1: int, p2: int):
    response = await client.get("/")
    assert response.status_code == 200

actually maybe if there is a way to lazily load the store, or use a lifespan-created redis client into the store that would be maybe cleaner, not sure...

actually maybe if there is a way to lazily load the store, or use a lifespan-created redis client into the store that would be maybe cleaner, not sure...

I think you should be able to create the store in a sync function and then have a lifespan context manager on the app instance that takes care of its shutdown.

actually maybe if there is a way to lazily load the store, or use a lifespan-created redis client into the store that would be maybe cleaner, not sure...

I think you should be able to create the store in a sync function and then have a lifespan context manager on the app instance that takes care of its shutdown.

alright yeah this is much better this way indeed, I just have to access the private redis attribute from the store in the lifespan in order to close it but that solves everything and looks not ugly like the above :)
thanks for the patience )

While I still think this is the right thing to do, I can see how it could be an issue when the with_client classmethod is used, since then it's the store that's responsible for creating the client instance.

Do you think I should maybe try "solve" this adding a note in the docs ? This is not trivial and as you said maybe unexpected at first. lmk
from contextlib import asynccontextmanager
from functools import partial
from typing import Iterator

import msgspec
import pytest
from redis.asyncio import Redis

from litestar import Litestar, get
from litestar.middleware.session.server_side import ServerSideSessionConfig
from litestar.stores.redis import RedisStore
from litestar.testing import AsyncTestClient

@get()
async def hget() -> int:
    return 1

class AppSettings(msgspec.Struct):
    debug: bool
    redis_url: str = "redis://localhost:6379"

@asynccontextmanager
async def lifespan(app: Litestar) -> Iterator[None]:
    try:
        yield
    finally:
        print("lifespan cleanup")
        await app.stores.get("sessions")._redis.aclose()

def get_app(app_settings: AppSettings) -> Litestar:
    # setting up stores
    # session_store = RedisStore.with_client(url=app_settings.redis_url)
    session_store = RedisStore(redis=Redis(), namespace="sessions")
    # session_store = MemoryStore()
    session_config = ServerSideSessionConfig()
    app = Litestar(route_handlers=[hget],
                   middleware=[
                       session_config.middleware,
                   ],
                   stores={"sessions": session_store},  # comment this and 2nd test pass
                   debug=app_settings.debug,
                   lifespan=[partial(lifespan, app_settings=app_settings)]
                   )
    return app

@pytest.fixture(scope="session")
def anyio_backend() -> str:
    return "asyncio"

@pytest.fixture(scope="session")
def app_settings_test():
    return AppSettings(debug=True)

@pytest.fixture(scope="session")
def app_test(app_settings_test: AppSettings):
    app = get_app(app_settings_test)
    yield app

@pytest.fixture  # add scope="session" and 2nd test pass
async def client(app_test: Litestar):
    async with AsyncTestClient(app=app_test) as c:
        yield c

@pytest.mark.anyio(scope="session")
@pytest.mark.parametrize("p1, p2",
                         [(1, 2), (3, 4)])
async def test_param(client: AsyncTestClient, p1: int, p2: int):
    response = await client.get("/")
    assert response.status_code == 200

Do you think I should maybe try "solve" this adding a note in the docs ? This is not trivial and as you said maybe unexpected at first. lmk

I think there are two things that need to be done:

Add a note to the docs about passing in a Redis instance and that you're expected to handle its lifetime
Properly handle the lifetime of internally created Redis instances. Adding lifespan or on_startup/on_shutdown methods to the stores seems to be the most sensible option here, with a flag for the Redis store to know if we should handle its shutdown.

sounds good to me, I'm keen on tackling both, 1st one will be simpler and faster obviously


Various fixes to small issues.

TLV encoding of single resource was using resource instance type instead of resource
Correct handling of content-type options in requests
Check instance ID in Execute operation
Instance ID must be set in Create operation

Signed-off-by: David Navarro<EMAIL_ADDRESS>

Also:

add missing resource ID 12 of the Security Object


Update AllocRef implementation for latest API changes

The AllocRef API was changed again in https://github.com/rust-lang/rust/pull/70362. This PR updates this crate to the new API.
Fixes #29

Publishes as version 0.8.2.


What does the 'sloppy' flag do?

Hello!
I was just wondering if there's any documentation on what exactly the --sloppy flag does to an fMRIPrep pipeline? What is it actually doing to get everything running faster? It would be great to see a brief list of the specific steps involved.
Many thanks,
Nick

It uses more relaxed registration parameters so that the processes terminate more quickly at the cost of worse registrations. It is a development tool only intended to speed up workflow testing.

Thanks for the quick reply @effigies :) Just to clarify, for the relaxed parameters you mention here, presumably these changes are separate from any other changes you could make to the registration process in the command line? For example, does it involve limiting the ANTs registration process in some way, rather than something like just switching off BBR?

It does not turn of BBR since that's part of the workflow, but it provides alternative registration parameters. Mostly to ANTs, but also TOPUP. The different configurations will live alongside the interfaces that use them. For example, see the _precise.json and _testing.json parameter files in https://github.com/nipreps/niworkflows/tree/master/niworkflows/data or different FLIRT schedules for TOPUP in https://github.com/nipreps/sdcflows/tree/master/sdcflows/data/flirtsch.

This is a huge help, thank you :)


Add Duplicate command to Query context menu

Issue Type: Feature Request
Please add a Duplicate command to the Query context menu.
Many times you have similair queries which this feature will be useful.
SQL Operations Studio version: sqlops 0.29.3 (7099922c35bc3b3e223228c972cc03cee5abbe25, 2018-05-04T05:46:24.032Z)
OS version: Windows_NT x64 10.0.14393

Yes. Like duplicating a tab in Chrome. Creating a copy of the selected tab/document together with the query text(s) in it. And also with that same connection it has.

dupe #245


test: stabilize a couple of tests

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

:exclamation: No coverage uploaded for pull request base (main@2a9f60e). Click here to learn what that means.

:exclamation: Your organization needs to install the Codecov GitHub app to enable full functionality.
Additional details and impacted files
@@           Coverage Diff           @@
##             main    #2525   +/-   ##
=======================================
  Coverage        ?   93.14%
=======================================
  Files           ?      301
  Lines           ?    24954
  Branches        ?     2038
=======================================
  Hits            ?    23244
  Misses          ?     1681
  Partials        ?       29

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


BUG: Cannot open files with spaces in the path on Windows

Did you check docs and existing issues?

[X] I have read all the docs.
[X] I have searched the existing issues.
[X] I have searched the existing discussions.

Neovim Version (nvim -v)
0.9.1
Operating System / Version
Windows11 22H2 22621.2070
Describe the Bug
On Windows, when trying to open a file in neo-tree with any spaces in the file's path, it shows an empty buffer.
It seems that neo-tree tries to replace all \s into /s which wouldn't suit all the cases on Windows. I came to this conclusion because If I try to save the faulty "empty" buffer, neovim will say the file cannot be found; the expected path, d:\test\ path\test.txt for example, is converted to d:/test/ path/test.txt by neo-tree, where the escaped space \  becomes /  which is invalid.
This problem doesn't exist by opening the file via its path directly or by nvim-tree
Screenshots, Traceback
I tried this in a clean neovim environment with only Lazy and neo-tree installed.

Steps to Reproduce

Create or find a directory with one or more spaces in its path
Open a file within the directory
[Phenomenon 1] The opened buffer won't show the file's content
Save the opened buffer
[Phenomenon 2] It'll show an error message of 'no such file or directory'.

Expected Behavior
File should be opened and saved
Your Configuration
-- DO NOT change the paths and don't remove the colorscheme
local root = vim.fn.fnamemodify("./.repro", ":p")

-- set stdpaths to use .repro
for _, name in ipairs({ "config", "data", "state", "cache" }) do
  vim.env[("XDG_%s_HOME"):format(name:upper())] = root .. "/" .. name
end

-- bootstrap lazy
local lazypath = root .. "/plugins/lazy.nvim"
if not vim.loop.fs_stat(lazypath) then
  vim.fn.system({ "git", "clone", "--filter=blob:none", "https://github.com/folke/lazy.nvim.git", lazypath, })
end
vim.opt.runtimepath:prepend(lazypath)

-- install plugins
local plugins = {
  "folke/tokyonight.nvim",
  -- add any other plugins here
}

local neotree_config = {
  "nvim-neo-tree/neo-tree.nvim",
  dependencies = { "MunifTanjim/nui.nvim", "nvim-tree/nvim-web-devicons", "nvim-lua/plenary.nvim" },
  cmd = { "Neotree" },
  keys = {
    { "<Leader>e", "<Cmd>Neotree<CR>" }, -- change or remove this line if relevant.
  },
  opts = {},
}

table.insert(plugins, neotree_config)
require("lazy").setup(plugins, {
  root = root .. "/plugins",
})

vim.cmd.colorscheme("tokyonight")
-- add anything else here

I tried to debug. It turns out it's the utils.escape_path which caused this problem. The problematic part is introduced by PR #1023
I added some logs
M.escape_path = function(path)
  local escaped_path = vim.fn.fnameescape(path)
  log.info("escaped 0: " .. escaped_path)
  if M.is_windows then
    log.info("is windows")
    escaped_path = escaped_path:gsub("\\", "/")
    log.info("escaped 1: " .. escaped_path)
  end
  return escaped_path
end

And the output is:
[Neo-tree INFO] opening path: d:\test path\test.txt, open_file: nil
[Neo-tree INFO] escaped 0: d:\test\ path\test.txt
[Neo-tree INFO] is windows
[Neo-tree INFO] escaped 1: d:/test/ path/test.txt

Looks like this has possibly regressed?

Getting this same issue with the latest stable version on neovim and v3 of neotree


Added Building Spring Boot Applications with Kotlin

Hi!
I thought 'Building Spring Boot Applications with the Kotlin Programming Language' might be a good contribution to your Videos list.
Thanks for your consideration!
Branko

@von-latinski Thanks for the contribution. It is really good and we appreciate. 👍


Add support for ERC20/ERC721 contracts generated by OpenZeppelin

OpenZeppelin provides a contract wizard for generating common token contracts:
https://docs.openzeppelin.com/contracts/4.x/wizard
The method names and signatures in these contracts (for things like mint/transfer/burn) differ slightly from the samples already checked into this repository. We should add support for these in the ABI map here:
https://github.com/hyperledger/firefly-tokens-erc20-erc721/blob/b2aa707b4ddc58a101af3eaf81dddb13a7c805c1/src/tokens/tokens.service.ts#L111
Note that most/all of these methods may not include extra "data" arguments, so FireFly will not be able to write extra data to the chain (such as transaction and message IDs) when using these contracts - this is accepted as a known limitation.

Also note concerns with the existing naming of sample schemas, as detailed in #63

Resolved in https://github.com/hyperledger/firefly-tokens-erc20-erc721/pull/104


does this library support parsing DDL SQL

does this library support parsing DDL SQL ?  for example
CREATE TABLE HUB_POLICY
(
POLICY_HK            BINARY() NOT NULL,
LOAD_TIMESTAMP       TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
RECORD_SOURCE        VARCHAR(100) NULL,
POLICY_NUMBER        VARCHAR(50) NULL
);
it would be great if you could provide a sample code base for this ?
Thanks

duplicate

duplicate


Ignore DNS nameservers configured by DHCP

Hi,
is is somehow possible to use DHCP for address/gateway configuration, but ignore nameservers coming with it?
I would like to use DHCP, but local nameservers of my cloud provider (Vultr) are quite unreliable. I would prefer to use Google's.
Part of my cloud config:
rancher:
  cloud_init:
    datasources:
      - ec2
  network:
    dns:
      nameservers:
        - <IP_ADDRESS>
        - <IP_ADDRESS>
    interfaces:
      eth0:
        dhcp: true

But if DHCP is enabled, my nameservers are not used:
[rancher@ptl-www-rancher /]$ cat /etc/resolv.conf
# Generated by dhcpcd from eth0.dhcp
# /etc/resolv.conf.head can replace this line
nameserver <IP_ADDRESS>
# /etc/resolv.conf.tail can replace this line

If I disable the DHCP, it starts to work.
I would expect that manually configured DNS servers in cloud-config should have priority over the DHCP. Or there should be some way to force my configuration.

Try setting
rancher:
  dns:
      override: true

I will try, thanks.

I can confirm, that the override option has no effect

Having this same issue as well

Hi @deniseschannon, this is actually not an enhancement but a bug. Overriding the DNS nameservers with values from cloud-config was landed in https://github.com/rancher/os/pull/669. But apparently it does not work as expected.
To reproduce:
#cloud-config
(...)
rancher:
  network:
    dns:
      nameservers:
        - <IP_ADDRESS>
        - <IP_ADDRESS>
      override: true
    interfaces:
      eth0:
        dhcp: true

$ sudo netconf

(...)
> INFO[0000] Override nameservers                          nameservers=[<IP_ADDRESS> <IP_ADDRESS>]

But it fails to rewrite /etc/resolv.conf:

$ cat /etc/resolv.conf

# Generated by dhcpcd from eth0.dhcp
# /etc/resolv.conf.head can replace this line
nameserver <IP_ADDRESS>

Same issue here... fixed by :
#cloud-config
write_files:
  - path: /etc/resolv.conf
    content: |
      search mydomain.com
      nameserver <IP_ADDRESS>

FYI, this is working for me now on v0.4.3. Upon reloading the network config with sudo ros service restart network /etc/resolv.conf is populated with the nameservers from cloud-config.

@janeczku I agree, that does seem to be the underlying problem here. I've tested this issue a bit with #862 and so far it seems that PR also fixes this issue.

Verified with v0.4.4-rc4 that you can set your own nameservers if you set rancher.network.dns.override: true. This populate /etc/resolv.conf as expected assuming your networking has been restarted (if you made the change after it's been populated.


Keyword spotting task architecture in TERA paper

Dear researcher, I'm wondering what is the exact classifier architecture in tera paper, the only information is it has two hidden layer, but I'm not very sure what is the exact number of hidden unit. Besides, is this architecture implemented in downstream/speech_commands/model.py?

Here is the link to one of my training log of the Keyword Spotting task: google drive
The config I used was:
runner:
  total_steps: 50000
  gradient_clipping: 1
  gradient_accumulate_steps: 1

  log_step: 100
  eval_step: 1000
  save_step: 1000
  max_keep: 1
  eval_dataloaders:
    - dev
    - test

optimizer:
  name: AdamW
  lr: 2.0e-4

# comment the whole scheduler config block
# to disable learning rate scheduling
# scheduler:
#   name: linear_schedule_with_warmup
#   num_warmup_steps: 1400

downstream_expert:
  datarc:
    speech_commands_root: /work/a129195789/corpora/speech_commands_v0.01
    speech_commands_test_root: /work/a129195789/corpora/speech_commands_test_set_v0.01
    num_workers: 8
    batch_size: 32

  modelrc:
    hidden_dim: 256

And the model:
import torch
import torch.nn as nn
import torch.nn.functional as F

class Model(nn.Module):
    def __init__(self, input_dim, output_class_num, **kwargs):
        super(Model, self).__init__()
        hidden_dim = kwargs["hidden_dim"]
        self.connector = nn.Linear(input_dim, hidden_dim)
        self.fc1 = nn.Linear(hidden_dim, hidden_dim)
        self.fc2 = nn.Linear(hidden_dim, output_class_num)

    def forward(self, features):
        features = F.relu(self.connector(features))
        features = self.fc1(features)
        pooled = features.mean(dim=1)
        predicted = self.fc2(pooled)
        return predicted

which I believe is identical to the one we have on master, thus you can run this task with -d speech_commands.


docs: adding example for besu private transactions

Closes: 1213
Signed-off-by: Travis Payne<EMAIL_ADDRESS>

Codecov Report

Merging #1391 (01c6de4) into main (6deed6d) will not change coverage.
The diff coverage is n/a.

@@           Coverage Diff           @@
##             main    #1391   +/-   ##
=======================================
  Coverage   70.41%   70.41%
=======================================
  Files         301      301
  Lines       10820    10820
  Branches     1320     1320
=======================================
  Hits         7619     7619
  Misses       2507     2507
  Partials      694      694

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 6deed6d...01c6de4. Read the comment docs.

@petermetz fixed both of these issues!


mono: New Color methods:  Darkened, Lightened and ToRgba32

:thinking: https://github.com/godotengine/godot/pull/18282
I'll rebase this soon...

@aaronfranke Looks like I missed that one... and I forgot the version bump 😐

Cherry picked into 3.0.3

Since this PR renames a method (To32()) it probably shouldn't be cherrypicked unless https://github.com/godotengine/godot/pull/18282 is also merged and cherrypicked.


"Could not find com.aheaditec.talsec.security:TalsecSecurity-Community:3.1.0-dev." with 403 on pom file

Hi,
I tried following the instructions in #2 .
I reached a point where the compilation error was partially understandable.
Here is the important portion of my android/build.gradle file:
buildscript {
    ext.kotlin_version = '1.5.21'
    repositories {
        google()
        jcenter()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:4.2.2'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        classpath 'com.aheaditec.talsec.security:TalsecSecurity-Community:3.1.0-dev'
    }
}

allprojects {
    repositories {
        google()
        jcenter()
        {url "[https://nexus3-public.monetplus.cz/repository/ahead-talsec-free-rasp]" }
    }
}
...

And here is the complete unedited run output with the error message:
Launching lib/main.dart on SM A037F in debug mode...
Running Gradle task 'assembleDebug'...

FAILURE: Build failed with an exception.

* What went wrong:
A problem occurred configuring root project 'android'.
> Could not resolve all artifacts for configuration ':classpath'.
   > Could not find com.aheaditec.talsec.security:TalsecSecurity-Community:3.1.0-dev.
     Searched in the following locations:
       - https://dl.google.com/dl/android/maven2/com/aheaditec/talsec/security/TalsecSecurity-Community/3.1.0-dev/TalsecSecurity-Community-3.1.0-dev.pom
       - https://jcenter.bintray.com/com/aheaditec/talsec/security/TalsecSecurity-Community/3.1.0-dev/TalsecSecurity-Community-3.1.0-dev.pom
     Required by:
         project :

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

BUILD FAILED in 6s
Exception: Gradle task assembleDebug failed with exit code 1

When I try to open the pom file https://jcenter.bintray.com/com/aheaditec/talsec/security/TalsecSecurity-Community/3.1.0-dev/TalsecSecurity-Community-3.1.0-dev.pom directly, I get this output:
403 Forbidden
nginx

Is there a way to gain access to this file and any other relevant ones?
Or, is there a convenient way to use the aar files without creating a module?

Thanks you very much for your reply. I am looking forward to trying this!

I confirm I can build, thanks!

I confirm I can build, thanks!