Add a noalias language item

Add a noalias language item and wrapper struct (similar to non_zero) to
mark raw pointers as noalias.

So I presume this is like restrict in C/C++, but for rust?
Q: would it make sense to allow more fine grained statement of the aliasing (or non-aliasing)? This appears to allow us to say one block doesn't alias any other block, but doesn't let us restrict that to something like A doesn't alias C, but might alias B (unless there is some way to use the proposed NoAlias to do that be controlling scopes?). I suppose nothing prevents adding that later, if needed.

I think that this is a good move for making Box output code that assumes that there are no aliases, although the RFC itself seems like it could go a bit more in depth on how this is useful outside of the standard library. I'd rather not see the RFC get shut down because the solution is too niche, when the problem with Box is a nice one to solve.

This applies to every object that owns a pointer.

@Undeterminant I'm not sure why this would be limited to the standard library. Isn't anyone that needs to accept Boxes (or similar wrapper types) going to run into the same thing?

It seems this is essentially semantically Unique?

@huonw

A wrapper around a raw *mut T that indicates that the possessor of this wrapper owns the referent.

noalias does not imply ownership or mutability.

noalias does not imply ownership or mutability.

But noalias is usually applied to &mut, in my understanding, but cannot for raw pointers because they may be aliased. Unique brings that property back, which means Unique<T>s could/should also be marked noalias. At least, that's my understanding.

Maybe Unique could be implemented as follows
pub struct Unique<T: ?Sized> {
    pointer: NonZero<NoAlias<T>>,
    _marker: PhantomData<T>,
}

I've updated the text a bit. I guess the previous version wasn't strict enough to allow for any significant opitimizations.

I'm confused as to why this is happening anyway. Shouldn't all &mut be marked llvm-noalias during trans anyway? Since *some_box = 42 will create an intermediate &mut due to DerefMut, shouldn't this already get optimized correctly? And since it's not, shouldn't we simply fix this bug? I mean we already have a way of unsafely stating a *mut is noalias: turning it into a &mut.

I don't think that's how it does or should work.
unsafe fn f(x: *mut u8, y: *mut u8) -> u8 {
    {
        let x = &mut *x;
        *x = 11;
    }
    {
        let y = &mut *y;
        *y = 22;
    }
    {
        let x = &mut *x;
        *x
    }
}

This code should allow x and y to point to the same addresses and return either 11 or 22. I'm sure there is code out there that relies on this.

The whole Unique and Shared thing you're doing in the stdlib seems to be a
step into the wrong direction because it doesn't really captue the different
kinds of pointers that can exist. I think there are six types of pointers:
        | mutable memory | mutable object | immutable object |
--------+----------------+----------------+------------------+
noalias |                |                |                  |
--------+----------------+----------------+------------------+
alias   |                |                |                  |
--------+----------------+----------------+------------------+

Where

mutable memory means that the memory pointed to can be mutated but doesn't
necessarrily contain a valid object
mutable object means that the memory pointed to contains a valid object
that can be mutated
immutable object means that the memory pointed to contains a valid object
that cannot be mutated (through this pointer)
noalias means that all mutation of the pointed to memory is done through a
pointed based in this pointer
alias means that mutation of the pointed to memory can happen through
other pointers

Here is how those types of pointers are used today:
        | mutable memory | mutable object | immutable object |
--------+----------------+----------------+------------------+
noalias | Vec            | Box            | Rc               |
--------+----------------+----------------+------------------+
alias   | <unused>       | <unused>       | <unused>         |
--------+----------------+----------------+------------------+

Note in particular that Rc<T> is noalias because the contents are never
mutated.  This is unless T contains a Cell in which case noalias is always
disabled.
Whether the pointers can be copied:
        | mutable memory | mutable object | immutable object |
--------+----------------+----------------+------------------+
noalias | <no>           | <no>           | Copy             |
--------+----------------+----------------+------------------+
alias   | Copy           | Copy           | Copy             |
--------+----------------+----------------+------------------+

noalias/immutable object can be copied for the same reason Rc can be cloned.
More interestingly, some of those pointers can implement Deref:
        | mutable memory | mutable object | immutable object |
--------+----------------+----------------+------------------+
noalias | <impossible>   | Deref/DerefMut | Deref            |
--------+----------------+----------------+------------------+
alias   | <impossible>   | <dangerous>    | <dangerous>      |
--------+----------------+----------------+------------------+

It is clear that the mutable memory pointers cannot implement it because they
might not point to valid objects.
One big problem is that implementing Deref for alias objects is dangerous
because the created references can have overlapping lifetimes which is not good
when you have aliasing pointers. This problem is closely related to
this
comment on reddit. The author of the blog post complained that using raw
pointers is cumbersome because of the syntax and the linked post then
recommended simply casting the pointers to references. This is incorrect because
of the mentioned aliasing problems.
The solution of this problem is not to implement arrow syntax but to add
UnsafeDeref and UnsafeDerefMut traits. These traits would have the following
properties:

Dereferencing is unsafe
Auto-deref doesn't happen, even in unsafe blocks

Assuming there are wrappers for the alias/mutable object and alias/immutable object cases, those wrappers would then implement UnsafeDeref and
UnsafeDerefMut.
To come back to this RFC: The noalias wrappers would all contain NoAlias
pointers.

This code should allow x and y to point to the same addresses and return either 11 or 22. I'm sure there is code out there that relies on this.

Uhm... Your code already does this, and what I said doesn't change it. The &mut you created never alias... They'd only alias if you had them in the same scope.

either 11 or 22

That should most definitely not happen. If the pointers can alias, then changing the order must not be allowed. If the pointers cannot alias, then changing the order must not have any effect on the observable state.

@oli-obk

That should most definitely not happen. If the pointers can alias, then changing the order must not be allowed. If the pointers cannot alias, then changing the order must not have any effect on the observable state.

I didn't mean to imply that the value is unspecified but that the returned value depends on whether the pointers point to the same address.

They'd only alias if you had them in the same scope.

That's exactly my point. The &mut created by dereferencing the boxes don't exist in the same scope because they are not bound to any variables. In the case of
pub extern fn bx(mut x: Box<u8, Dummy>, mut y: Box<u8, Dummy>) -> u8 {
    let x = &mut *x;
    let y = &mut *y;
    *x = 11;
    *y = 22;
    *x
}

I would agree that this proves that the pointers can't point to the same addresses.

Does Rust have a formal aliasing model covering all interaction between references/pointers/cells beyond "LLVM's aliasing model + list of places in rustc where noalias is applied"? I don't think I've seen a strict formalization yet.

unsafe fn f(x: *mut u8, y: *mut u8) -> u8 {
{
let x = &mut *x;
*x = 11;
}
{
let y = &mut *y;
*y = 22;
}
{
let x = &mut *x;
*x
}
}

I rather have a notion of "disjoint lifetimes": it is OK to `&mut-borrow` multiple times as long they are never "used simultaneously". I am not sure of the exact semantics of LLVM's `noalias`, but I hope that if re-borrowing doesn't violate any rules, this won't either.

https://github.com/rust-lang/rust/issues/19733 seems like the relevant issue

There are examples of "aliasable mutable memory"; that's UnsafeCell (and the other cell types). UnsafeCell disables the usual noalias optimizations when behind a reference.

Why did you opt to use *const T and not *mut T for the wrapped pointer? Given that there are not supposed to be any aliases of the referent except through the wrapped pointer, and given that *const T is supposed to mean "no mutation occurs through this pointer", that effectively means the referent is immutable (shallowly, at least), in which case the aliasing is kind of moot. What am I missing?

@nikomatsakis noalias does not imply mutability. The data could be located in immutable memory or the pointer could be handed out through another mechanism that doesn't, in general, allow mutation but guarantees that there are no aliases as long as the pointer is live.
Either way, *mut T would make every type that contains it invariant wrt. T. This decision should be left to higher level data structures.

and given that *const T is supposed to mean "no mutation occurs through this pointer"

I think you were the one who originally suggested (in the variance rfc) to use *const pointers to get covariance and to not use *mut even if the data is mutable.

However I agree that having to choose either *const or *mut is problematic. Some time ago I though about another way to add an arbitrary set of marker to raw pointers:
Linear markers
Currently there is only marker for raw pointers, namely NonNull<*const T> (or *mut.) Once other types of marker are added, this can become rather ugly:
Dereferencable<NoAlias<NonNull<*const T>>>

Instead, one could allow structs to contain multiple markers that change the behavior of pointers contained in the struct:
struct Uniqe<T> {
    ptr: *const T,
    _marker1: NonNull,
    _marker2: NoAlias,
    _marker3: Dereferencable,
}

Other restrictions could be added, e.g., that structs containing such markers can only contain a single raw pointer or that they cannot contain any fields besides the markers and a single raw pointer field. In this case, one could also add a marker trait that has to be implemented (by Unique) to enable the effects of the markers.

On Tue, Jan 05, 2016 at 06:30:41AM -0800, mahkoh wrote:

and given that *const T is supposed to mean "no mutation occurs through this pointer"

I think you were the one who originally suggested (in the variance rfc) to use *const pointers to get covariance and to not use *mut even if the data is mutable.

Yes, ok. And in fact I did the same in Unique<T> for the same
reason.

So I think this RFC is pointing in a good direction but is somewhat premature. I feel like before we go off and add more public-facing newtypes around unsafe pointers, we should clarify the aliasing story (https://github.com/rust-lang/rfcs/issues/1447). In particular, I think the rules we settle on for what kind of aliasing is legal and what is not will really inform the precise set of wrapper types (or other sorts of unsafe hints) that we eventually want.
Another factor is that we really need to do empirical evaluation of the overall effect of these sorts of changes. For example, as we found in https://github.com/rust-lang/rust/issues/29485, the overall effects of aliasing annotations is often quite small, and it's not clear that they are worth the complexity they bring.
I think my personal feeling at the moment is that we probably want fairly lax aliasing rules by default, with types perhaps like this one that allow you to "ratchet up" the level of optimization (and take on the commensurate risk) in particularly important places. But I think we have to be very, very careful in this area, because experience has shown that it is really hard for people to reason about abstract aliasing rules. (It's all well and good if we can blame bad code on an incorrect annotation, but it's better not to have the bad code in the first place.)
So I'm inclined to close this RFC and "file it" under https://github.com/rust-lang/rfcs/issues/1447. Thoughts?

I'm fine with this but only if there is actually a plan to address #1447. From what I can tell, https://github.com/rust-lang/rfcs/issues is where ideas go to die (including postponed RFCs.)

@mahkoh

I'm fine with this but only if there is actually a plan to address #1447.

Well, let me set expectations correctly. I consider #1447 to be a
"rising" priority, but not yet at the top. There is plenty of active
discussion going on, particularly between @arielb1 and @RalfJung, but
I think we're not yet close to a final set of proposals, and I think
nobody on the @rust-lang/lang team has the bandwidth just now to get too
deeply involved. But I expect this to change as some of the current
"high priority" items start to get resolved (e.g., specialization, incr. comp., macros).
I should also say that part of my motivation not to add NoAlias (or
similar optimization hints) is that we already encounter strange
behavior (e.g., rust-lang/rust#29485, which you filed) from the
existing alias hints. Adding the ability for users to supply such
hints could only increase the rate at which we hit such bugs, which
generally takes time away from other things. Given that we don't
really know what shape we want those hints to take, this seems
like a bad tradeoff.


Support for Resolving Indirect Function Pointers to Direct Calls in Decompiled View

This was the initial problem I had:
In Ghidra, I'm working with functions that use indirect pointers (e.g., single or double indirect calls) to call other functions, often represented by BLX instructions in ARM assembly. I need a way to automatically replace these indirect function pointers in the decompiled view with the actual function names, showing direct calls (e.g., disable_interrupts() instead of (*(code *)PTR_disable_interrupts)). Is there a way to force Ghidra’s decompiler to fully dereference these function pointers and display the resolved function names in place of the indirect calls? Despite adding direct references and flow overrides, I haven't found a way for the decompiler to reflect these changes, and manual re-decompilation attempts haven’t resolved the issue.
I was able to fix it by doing this: Set pointer settings of the variable to have a mutability of constant.
New Question: Does anyone have a script or know to script it so that I can have this occur throughout my whole program and resolve all occurrences at once ?

You can change the writeable bit of the memory block if you have something like the .plt section that is marked as writeable for whatever reason.


[EN] Feedback for: /fundamentals/layouts/rwd-fundamentals/index.html

the subject page links to an example static html page. that page has an incorrect URL for its stylesheet, thus rendering the page without styling and defeating its pedagogic purpose.
"that" page:
https://googlesamples.github.io/web-fundamentals/samples/layouts/rwd-fundamentals/vp-fixed.html
the above page loads, but its stylesheet fails to load. To fix this:
the incorrect URL:
"/layout/vpdemo.css"
the correct URL:
"vpdemo.css"
(that is, it should be relative, not absolute; and there is no "layout" directory.)
when it is fixed it should appear as the image in the tutorial:

Thanks!

Also ported to MDL


Fix timestamp bug packfile upload

Fixes #536
Review Checklist

Tests were added to cover all code changes
Documentation was added / updated
Code and tests follow standards in CONTRIBUTING.md

Hi @rentzso, let me know if this doesn't fix the issue.


Cleanup

Remove GS related code, such as VertexVector
Remove GitOids from GlobalVertexMap
Change the parameter of ForEach from VertexRange to template parameter

Codecov Report

Merging #14 into master will decrease coverage by 0.01%.
The diff coverage is 98.43%.

@@            Coverage Diff             @@
##           master      #14      +/-   ##
==========================================
- Coverage   87.43%   87.42%   -0.02%
==========================================
  Files          50       50
  Lines        3224     3173      -51
==========================================
- Hits         2819     2774      -45
+ Misses        405      399       -6

Flag
Coverage Δ

#app_tests
87.42% <98.43%> (-0.02%)
:arrow_down:

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

Impacted Files
Coverage Δ

grape/vertex_map/global_vertex_map.h
92.22% <ø> (ø)

grape/utils/vertex_set.h
88.00% <92.30%> (-2.91%)
:arrow_down:

grape/fragment/immutable_edgecut_fragment.h
85.95% <100.00%> (-0.03%)
:arrow_down:

grape/parallel/parallel_engine.h
93.84% <100.00%> (+0.39%)
:arrow_up:

grape/utils/vertex_array.h
100.00% <100.00%> (ø)

grape/utils/bitset.h
81.81% <0.00%> (-0.24%)
:arrow_down:

grape/worker/comm_spec.h
98.46% <0.00%> (+3.39%)
:arrow_up:

grape/utils/atomic_ops.h
95.00% <0.00%> (+5.00%)
:arrow_up:


Version Management

As we add more libraries, distribution becomes more challenging, I would like to align with Microsoft SEAL released versions and the hash or commit sha of the this repository at the time of compilation
For example,
seal-4.1.2-75addf8
openfhe-1.2.1-75addf8

For Flutter Package distribution, this will be a lot more intuitive to release.
https://pub.dev/packages/seal
https://pub.dev/packages/openfhe
instead of
https://pub.dev/packages/fhel


TFS Support?

Tried to do a clone of a TFS Online library and received the following...maybe i'm missing something, but the tab completion worked when i had git tfs  it presented options, so it new what i wanted to do.  listed version of the posh-git is 0.0, just re-downloaded from this repo.
git tfs clone 'https://<url to project>/'
git: 'tfs' is not a git command. See 'git --help'.

Did you mean one of these?
        notes
        stash
        tag

Is git tfs in your path? You might need to add it to your path before it's recognized.
The git-tfs readme talks about this here:
https://github.com/git-tfs/git-tfs#get-git-tfs
Just a thought.

Yeah, this doesn't ship with git-tfs, it just knows about some of its commands. I'm pretty sure it ships with GitHub for Windows, which also includes posh-git, if you want to try that.


[Carry #1136] Return real booleans in the output

This picks up the work done by @ikben in PR cloudtools/troposphere#1136, addresses the merge conflict by rebasing and fixes the failing tests.

Commit  62fbe39 should not have passed the tests.  I've tried that before: https://travis-ci.com/michael-k/troposphere/builds/113547741
Maybe I've pushed the last commit to fast and travis got confused. ¯\_(ツ)_/¯

Feel free to squash all the commits together, there's nothing ground-breaking in mine :)

Waiting on review/approval from @phobologic

This looks good to me from a code perspective - but I'm curious what we should do to make sure folks aren't freaked out if suddenly a bunch of their stacks start updating?
The other question I have is whether or not json's booleans are actually case sensitive?  This page makes me think they are:
https://json-schema.org/understanding-json-schema/reference/boolean.html

The other question I have is whether or not json's booleans are actually case sensitive?

Yes, they are.
Python:
import json

json.loads("true")  # True
json.loads("True")  # JSONDecodeError

Javascript:
JSON.parse("true")  # true
JSON.parse("True")  # SyntaxError

Ahh, sorry - my bad on the case sensitive question, I had flipped the cases between the python/resulting templates in my head somehow.  That looks good.
I waffle a little on punishing/scaring folks for not using cfn-lint.  Maybe a better way to roll this out would be to have this be sort of "Feature Flagged" with an environment variable or something, and only turn it on if that variable is set - then start using warnings to let folks know that this change is coming.  Then after a verison or two we can make it the default? What are you thoughts?

Any suggestions regarding the naming of such a env var?

I'm open to just about anything - OUTPUT_REAL_BOOLEANS maybe?
Also, don't take my suggestion as what has to happen :)  Just wanted to get some conversation started around it.  It seems like a nice compromise though, letting folks who want to use real booleans start using it while not penalizing folks who aren't ready for it.
Also curious around thoughts on throwing warnings to let folks know about the change so that we can encourage people to prepare.  @markpeek @michael-k

Likely prefix for uniqueness: TROPO_REAL_BOOL? Is just an env var sufficient or do we need to add a function enablement as well? I do wonder if warnings are too invasive and we should communicate via release notes and the email list.

I've added support for the env var TROPO_REAL_BOOL.  As you can see in the commits tab,

tests are passing in commit 020cb83c683106a7a37f95c8eef814c229a4521e (env var not set = booleans as strings) and
tests are also passing after adjusting the tests and setting the env var to "true" in commit 39c71b5294bfb7e6edefdfa9d9dc108d8cf3f8f7.

Is this good enough or does this need tests for the old behavior as well?

This looks great to me.  Thanks @michael-k for seeing this through!

Thank you @michael-k and @ikben!


Hang when inspecting a vulkan draw call

I'm seeing a hang with a particular vulkan capture when clicking on any draw call in the event browser. It seems to be stuck in a loop in Editor::SetName in spirv_editor.cpp line 200, because the offset in the iterator is never increasing despite the call to ++it.
It's 100% reproducable here, I may be able to share a capture privately, but I'd have to check with my superiors first.

Hi there, your issue has been closed due to not correctly following the issue template. Please read the documentation about filing issues and open a new issue which does follow the issue template. Do not reply to this issue with more information or with a correctly formatted issue, as that will only lead to confusion.
I try to address all github issues and fix bugs quickly, but badly formatted issues or poorly described bug reports especially are a significant drain on project resources. Taking a few minutes to file a good issue makes a huge difference and will get it addressed faster - everybody wins!
In github when you first create a new issue the form is pre-populated with a template which you should read over and follow. As linked above there is documentation going into more detail about what makes a good issue.


Fix for older versions of react

Hey there, I'm really interested in using this library but we aren't on React 16.3 yet. Looks like this branch is exactly what I'm looking for to enable our use-case. Can I help out with anything might be keeping this branch from being merged?

Yea, totally forgot about this. I'll publish now!


Connecting mc_rtc to a custom robot

Hi,
We are planning to use mc_rtc in our robot that uses a custom made interface board and is connected to a PC through an ethernet port. What is the best way to achieve this connection, and is there available documentation/guide and files that could help in implementing this?
Also, when we implement this, we anticipate that there will be an issue with jitter when it comes to processing data in the PC and sending it to the robot's interface board. Do you have suggestions on how to setup a RT-patched Linux to deal with this issue? We already tried running mc_rtc on a RT_PREEMPT kernel with RT priority before, but it did not seem to work.
Thanks

Unfortunately, we haven't written the documentation on how to create your own custom interface yet. Fortunately, it is pretty easy to do. The role of this interface is to read sensor values from the robot, and provide commands from mc_rtc. This is done through the MCGlobalController class.
1- Create and MCGlobalController controller instance
2- Read the robot encoder state and provide is to the global controller (MCGlobalController::init)
3- Start a control loop, this should:
a. Read sensors values (encoders, force sensors, etc), provide them to the global controller
b. Run the controller (eg call MCGlobalController::run). This will delegate control to the active MCController instance as defined in your mc_rtc.yaml configuration file
c. Provide the controller results from controller.robot().mbc() (joints q, torques tau, etc)
You may refer to mc_franka for a simplistic interface, or the more complete mc_udp or mc_openrtm
Regarding the real-time issue, what you'll want is to have the control-loop of step 3 above running in a high-priority thread. Of the interfaces mentioned above, we only do it with mc_openrtm that we use to run the controller embdeded on our robot's computer. There the onExecute() functions runs with such priority. I am however not very familiar with how to set-up such a real-time priority manually.
Regarding jitter, you'll want to make sure that your controller (MCControl::run) computes much faster than the control loop frequency of your robot. Typically for running a controller deported with our HRP-2 robot (using mc_udp) controlled at 200Hz (5ms) we have

Controller ~2ms computation time
Robot control loop 5ms
This leaves enough time for communication to read the sensor values and provide the new commands, and avoids missing iterations (at least over ethernet communication)

Do you have suggestions on how to setup a RT-patched Linux to deal with this issue? We already tried running mc_rtc on a RT_PREEMPT kernel with RT priority before, but it did not seem to work.

Could you elaborate on this?
I have published a simple sample for Linux with PREEMPT RT that I have used successfully in the past here
If you are running in real-time, it's also important to set the LogPolicy to threaded to avoid computation spikes due to disk flushing

Thanks @arntanguy.

Unfortunately, we haven't written the documentation on how to create your own custom interface yet. Fortunately, it is pretty easy to do. The role of this interface is to read sensor values from the robot, and provide commands from mc_rtc. This is done through the MCGlobalController class.

You may refer to mc_franka for a simplistic interface, or the more complete mc_udp or mc_openrtm

Does this also provide a similar functionality like how RViz (the one executed through the command rosrun mc_rtc_ticker control_display.launch) could send commands through the buttons in the GUI, which then results to a callback inside a state? Because I would like to achieve something similar to what the buttons in RViz does (and having a corresponding callback inside the state), except that I would use a different UI.
Thank you.

Hi @magnusmusngi
This functionality is independent of mc_rtc_ticker and is part of mc_rtc.
In fact the RViZ panel is available as a stand-alone Qt application:

with catkin/ROS on your system you have it already rosrun mc_rtc_rviz_panel mc_rtc_gui, this version still publishes ROS markers/interactive markers
you can build a fully ROS free version

All of this is based on Qt. If you want to implement a different UI you can inherit from mc_control::ControllierClient which you can also use to build a very specialized UI for a specific controller.

Thanks, @gergondet.

All of this is based on Qt. If you want to implement a different UI you can inherit from mc_control::ControllierClient which you can also use to build a very specialized UI for a specific controller.

To do this, do I also have to deal with mc_control::ControllerServer? Also, what do I use as the values for category, name, and sid fields of mc_control::ElementId when I call ControllerClient::send_request? Additionally, could I still retain my calls to StateBuilder::addElement in my controller code if I want to have the same elements in my own UI?
Thank you.

To do this, do I also have to deal with mc_control::ControllerServer?

No. mc_control::ControllerServer is on the controller side. You are only writing a new client.

Also, what do I use as the values for category, name, and sid fields of mc_control::ElementId when I call ControllerClient::send_request?

The simplest way is to use the helper in mc_control::ControllerClient to send requests, e.g. ButtonWidget::button_released, TransformInteractiveWidget::handleRequest, NumberSliderWidget::sliderMoved. The gist of it is you use the mc_control::ElementId to identify the element and sends data along if needed by the element.

Additionally, could I still retain my calls to StateBuilder::addElement in my controller code if I want to have the same elements in my own UI?

Yes. This is transparent to the controller

Thanks, @gergondet,

The simplest way is to use the helper in mc_control::ControllerClient to send requests, e.g. ButtonWidget::button_released, TransformInteractiveWidget::handleRequest, NumberSliderWidget::sliderMoved. The gist of it is you use the mc_control::ElementId to identify the element and sends data along if needed by the element.

My apologies. I wasn't able to mention that the UI that I will be using is a physical/hardware-based UI (at least with buttons), and not a completely software-based one. I would like to have in the physical UI a subset of the functionality that I have in the RViz GUI.
How I understood it so far is that a call to client().send_request(id()) is what initiates the sending of a button press event from the GUI to the controller, and it is the id() (the ElementId) that maps the GUI button to the corresponding call to StateBuilder::addElement in the controller. Could achieving the same functionality in the hardware UI be done by just calling ControllerClient::send_request() and I just need the proper mc_control::ElementId (with the TCP connection already established)? For this case, what do I use for the field values of ElementId? I assume the categories will be just the once that I use during AddElement calls in the controller. How about for the name and sid fields.
Thank you.

@magnusmusngi
Yes. You understood it correctly. Using client().send_request(id) with a connected client will be the same as clicking the button in the RViZ panel for this element.

I assume the categories will be just the once that I use during AddElement calls in the controller. How about for the name and sid fields.

Yes. name is also the name of the element that you give. sid is irrelevant for sending requests and mc_control::ElementId has a constructor that doesn't use it.
Here's a simple example that removes the CoM task with the JVRC1 robot in the sample CoM controller:
#include <mc_control/ControllerClient.h>
#include <thread>

struct SpecialClient : public mc_control::ControllerClient
{
  /** Same constructors as the base class */
  using mc_control::ControllerClient::ControllerClient;

  /** We only override this and do nothing */
  void category(const std::vector<std::string> &, const std::string &) override {}
};

int main()
{
  SpecialClient client("ipc:///tmp/mc_rtc_pub.ipc", "ipc:///tmp/mc_rtc_rep.ipc");
  // Connection is asynchronous so we wait a bit for it to roll
  std::this_thread::sleep_for(std::chrono::seconds(1));
  client.send_request({{"Tasks", "com_jvrc1"}, "Remove from solver"});
  // Similarly, send_request is asynchronous
  std::this_thread::sleep_for(std::chrono::seconds(1));
  return 0;
}

Hi @magnusmusngi
I will be closing this issue. Feel free to re-open it if you have any further questions.
Note that since #86 you can also:

use a synchronous run method to check for new message from the server (and it's also much easier to integrate in your own "main loop")
override default_impl to silence warnings about unimplemented elements


Consider making CharSeq non-final, to allow Haskell-like type synonyms

It occurred to me that there is an opportunity with CharSeq to get close to a Haskell-like type synonym. If CharSeq was non-final it could be extended with an empty class to avoid writing the heavy boilerplate code associated with tiny types.
I personally find myself often wishing I could do this in Java with String to gain additional type safety. I personally don't find the arguments against a non-final String class very convincing. Given the source code, a determined coder can always find a way around immutability, so I think improved FP-like functionality is more desirable.
I am basically in support of extensible strings for CharSeq and I am curious if javaslang is sympathetic to this idea.
What do you think? Is there a good reason why CharSeq is final and why you might not be prepared to make it non-final to allow for type synonyms?
I've also asked this question on stackoverflow here.

Hi James,
I understand your desire, years ago I was also fascinated by the idea of extending existing final types in order to add functionality. The Java compatible language Xtend helps here by offering extension methods, which allow to seamlessly add new functionality to final types. With Scala's implicits we can do similar things.
However, adding functionality using inheritance introduces several problems. The ones that come to my mind are:

Inheritance breaks the symmetry property of equals. See this explanation on Stackoverflow.
The second point is an implication of the first I think: We might get problems with pattern matching, which internally also relies on object identity (read: equals). For example Scala does also not allow to extend case classes, which are the basis for pattern matching in Scala. And I bet the upcoming values types (Project Valhalla/Brian Goetz) will also have to be final for similar reasons.
Especially extending the implementations of sum-types does not seem to make sense (example: Option = None or Some). Java does not have higher-kinder types (aka type constructors). We are not able to overwrite methods like flatMap() in an appropriate way. I don't know if this is really an issue but we might break the monad laws.
Several Javaslang classes adjust return types throughout the type hierarchy. E.g. in Traversable we have Iterator<? extends Traversable<T>> sliding(int size);. CharSeq has Iterator<CharSeq> sliding(int size) which cannot be overwritten with a more special return type anymore. (We would need to declare Iterator<? extends CharSeq>. I don't know if this is desirable from the API perspective. I decided not to do it for final types.

There may be more points. But I think the equals() argument is a show-stopper.

Personally I create static helper methods if I need additional functionality, like this:
public final class StringExtensions {
    private StringExtensions() {}

    public static String firstUpper(String s) {
        return s.isEmpty() ? s : s.substring(0, 1).toUpperCase() + s.substring(1);
    }
}

Other languages have syntactic sugar, we have to call the helper method directly:
// Scala and Xtend (maybe also Kotlin, C# and others)
"hello".firstUpper

// Java (using static import)
firstUpper("hello")

But I also understand that you want to add state-information to types, e.g.
class UnicodeCharSeq extends CharSeq implements HasUnicodeCharacters {
    ...
}

Maybe you will find a workaround using simulated union types!?
Let's close this issue. I don't think it is a good idea to extend algebraic data types and value types in general.
- Daniel

Hi Daniel, thanks for the comprehensive reply, it is very helpful! As I expected, you are thinking two or three steps ahead of me :) I don't really want or need to add functionality to my 'types'. I just want type safety so I can't get a CustomerName mixed up with a CustomerAddress in a constructor (or elsewhere) in code.
In my mind, the object-oriented 'is-a' relationship is absolutely pure here... A CustomerName is a CharSeq. So using java extends seems correct and natural. Having a tiny type which obfuscates this into a wrapped 'has-a' relationship feels wrong to me.
Regarding the problem of equals, why not just declare it final in CharSeq? Would that address the concerns? In fact, every method could be made final in CharSeq and I would be happy, since I have no requirements for extension (especially if achieving that would compromise the design). This would possibly address your concerns 1 and 2.
Regarding concerns 3 and 4, I think they are deeper. I don't think issue 3 is relevant here as I am only talking specifically about the CharSeq class. Issue 4 is perhaps more of a concern. Maybe it would be safe to accept <? extends CharSeq> if all methods in CharSeq are final?
Anyway, thanks again for taking the time to read and reply. I fully understand if you want to keep CharSeq final, but I thought it was worth asking. There is no way String is going to become non-final, that's for sure!


Additional doubts on Animation documentation

Documentation Is:

[ ] Missing or needed
[ ] Confusing
[X] Not Sure?

Doubts
Before going to submit a PR to change the animation documentation, I need to understand better some other topics.
First of all, I have prepared a rough model to understand the relations between all animation entities.

Hopefully it is correct
Some other doubts about the current documentation:

the current table is mixing all properties for all entities, if the above design is correct.

active and resize are defined as properties but they are also update modes therefore they should be removed from the table and added as default update modes where it is mentioned. Instead, if they are not update modes, they should be removed from default modes table.

the to property is not mentioned even if you can use it into an animation property. Is it missing or is correctly not mentioned for any reasons?

The model looks correct.
active and resize are modes
I don't think there is a reason for not mentioning to.

@kurkle thank you! I hope to submit the PR by end of next week. I'm still fighting with other stuff.

@kurkle another doubt: onProgress and onComplete callbacks are working ONLY on animation of options (no for datasets and tooltips).
Am I  wrong?

You're right, only the "main" animation options


its acting like my snap username is banned, i dont understand why.

It's literally saying "Cannot find snap user by that username" same thing as when i get banned.... Any help would be much appreciated! Thanks for your time, and thanks for this project! much respect bro!

Hey, thanks for supporting the project!... and by any chance were you including the "@" in front of your username? you need to leave that out. thatys the most common error id say.
Hope that helps!


Query rules guide

Query rules is a new feature in the Algolia engine. Even though most of the impact is in the engine and most of the answer modifications should be hidden, we have identified two cases where we need to provide some help on how to integrate them:

when a result is promoted
how to access custom data from the rules engine

The idea is to make a guide for that.
This is linked to https://github.com/algolia/algoliasearch-helper-js/issues/529 #

We wrote a guide on the new Algolia website.
A connector and two widgets for Query Rules are on their way! (#3597)


Making "store_last_results: true" consistent between td> and pg>

td> and td_run> operators support store_last_results: boolean
option. It stores the first row to ${td.last_results} parameter. But
pg> and redshift> operators store all rows and throw an exception
if number of rows exceeds limit.
This change makes it possible to achieve the consistent behavior to be
less surprising. pg> and redshift> operators support all, first
and true options.  all stores all rows and causes exception if rows
exceeds limit. first sets the first row. true is an alias of first
to be consistent with td> operator.
td> operator should also support all and first but not implemented
yet.

@komamitsu I understand your concern but what are possible other options...?

Just store_resultor store_last_result (only one object), and store_results or store_result_set (array of objects) seem clear to me. But td operator already uses store_last_results to store only one object, so it's not easy to go with the above naming keeping backward compatibility.
One reasonable idea is to use other names for the new JDBC operators family like save_last_result (object) and save_result_set (array of object) and add the new ones to td operator as well. And then make the current store_last_results (object) deprecated. But it takes time and we need to maintain old store_last_result and new save_xxxx options for a while. So it might be not bad to go with the current way store_last_results: true|first|all.

@komamitsu right...I guessed that having both of save_last_result and save_result_set also confuses users because option name is different even though they control the same thing -- saving result set in a variable (so setting both of save_last_result and save_result_set should be an error).
But on the other hand, save_result_set: first | all is also confusing because using ${pg.result_set} both for first row and all rows causes the same issue with store_last_results. However, still, using different variable names (such as ${pg.result_set_first.count} for save_result_set: first and ${pg.result_set_all[0].name} for save_result_set: all) seems also confusing because variable name doesn't match with the option name...

I'm thinking that store_last_results: true|first|all is not too bad idea even without consideration of backward compatibility.

Another possible option is that option name is save_result_set: first | all and variable name is ${pg.result_set.first} for first or ${pg.result_set.all} for all.
Well, but still current behavior doesn't seem worse than this.

${pg.result_set.first} for first or ${pg.result_set.all} for all

I prefer this one because the variables pg.result_set.first and pg.result_set.all have each single type (object / array). In other word, users can know the type of a variable based on its name.
My root concern is that last_results can be either type object or array and I think this may confuse users since users can't know the type of a variable based on its name.
I think we could add this feature as an alternative of last_results later.

I think we could add this feature as an alternative of last_results later.

Sounds like a reasonable plan.


SQL: More lenient schema migrations

Is your feature request related to a problem? Please describe.

When running SQL schema initializations/migrations, we are currently using the --quiet flag on create to suppress the error that the database already exists, this also risks suppressing other errors. In some cases the database might already exist but not be initialized such as in a production context, but in a local dev environment it might not.
Running update-schema on a downgrade to a lower version will currently fail, because the schema migrations expect at least the same version. helmfile for example doesn't support rollbacks, so it will be hard for us to differentiate between up- and downgrades using for example helm hooks.

Proposed Solution

Do not fail on create if the database already exists, or exit with an exit code that allows us to differentiate between a failure when the database already exists, and other failures.
Since there are no schema down-migrations, I'm assuming that all up-migrations are backwards compatible. In that case, update-schema could ensure that at least the requested version has been migrated to. In other words, if we are on v0.2 but trying to migrate "up to" v0.1, the migration would not throw an error (since v0.2 is backwards compatible).

Additional context
Using Cadence v0.15.1 with Postgres.

Closing this since schemas have been considerably updated since the ticket was opened.
https://github.com/uber/cadence/tree/master/schema/cassandra/cadence/versioned


update zeromq in your repo

EPEL7 recently had a major update of zeromq that bumped the library soname from libzmq.so.4() to libzmq.so.5().  EPEL packages that need that that library have already been rebuilt.  Unfortunately, this now means that using the salt repo and EPEL on EL7 results in errors when trying to run a simple yum update.

```
# yum update
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: repo1.ash.innoscale.net
 * epel: fedora-epel.mirror.lstn.net
 * extras: repo1.ash.innoscale.net
 * updates: repo1.ash.innoscale.net
Resolving Dependencies
--> Running transaction check
---> Package zeromq.x86_64 0:4.0.5-4.el7 will be updated
--> Processing Dependency: libzmq.so.4()(64bit) for package: python-zmq-14.7.0-1.el7.x86_64
---> Package zeromq.x86_64 0:4.1.4-5.el7 will be an update
--> Processing Dependency: libsodium.so.13()(64bit) for package: zeromq-4.1.4-5.el7.x86_64
--> Running transaction check
---> Package libsodium.x86_64 0:1.0.5-1.el7 will be installed
---> Package zeromq.x86_64 0:4.0.5-4.el7 will be updated
--> Processing Dependency: libzmq.so.4()(64bit) for package: python-zmq-14.7.0-1.el7.x86_64
--> Finished Dependency Resolution
Error: Package: python-zmq-14.7.0-1.el7.x86_64 (@salt-2015.8)
           Requires: libzmq.so.4()(64bit)
           Removing: zeromq-4.0.5-4.el7.x86_64 (@epel)
               libzmq.so.4()(64bit)
           Updated By: zeromq-4.1.4-5.el7.x86_64 (epel)
              ~libzmq.so.5()(64bit)
 You could try using --skip-broken to work around the problem
 You could try running: rpm -Va --nofiles --nodigest
```

Yum is trying to update zeromq from the salt repo version to the newer EPEL version, but cannot proceed due to the fact that the salt python-zmq package was built against the older zeromq, and thus has a direct dependency on libzmq.so.4().  I have worked around this error temporarily by adding exclude=zeromq* to my EPEL repo configuration.
I am seeing the error using the 'salt-2015.8' repo, but it should be reproducible on all of the salt repos since it appears they all have the same version of zeromq.
To fix this permanently for everyone, please update the salt repo zeromq package to at least version 4.1.4-5, and rebuild the python-zmq package to correctly relink against the library soname.

Fixing with salt-pack https://github.com/saltstack/salt-pack/issues/118


Removed some text duplication and redicted for pyximport.

The text in the userguide and the reference guide are really close for pyximport. Since @scoder reviewed recently the description of pyximport in the reference guide, I think it is worth removing duplication and redirect to it.
It also keeps the section "Source file and compilation" short and makes it easy to have an overview of the possible means of compilation. And I think it's the spirit of this section compared to the "Compilation" section in the reference guide which is more "fat" and has a lot more details about everything.

Well, gradually, I'd actually like to get rid of the whole "reference" section, in favour of a complete and non-redundant "userguide". Would need some consideration regarding broken links handling, since I'm sure there are various links specifically to the "compilation" page on the web.

Yep, I see what you mean. Hopefully, the PR #2439 will help.


Anyone please approve my Pull Request

we have to launch our token as soon as possible  so please somone approve my PR.
https://github.com/solana-labs/token-list/pull/4367/files
Thanks

please wait sir

approved.


Flow number counts are not separated for multiple projects when Projects feature is turned on.

Current Behavior
create multiple flow tabs on project1, then create new project2.  (now I'm in the flow 1 on new project2)
then create new flow tab here, I expect new flow tab number will be "flow 2"
but number is the next number after the project 1 flow number.
Expected Behavior
create multiple flow tabs on project1, then create new project2.
in "project2 - flow 1", create new flow tab then created new flow tab number should be "flow 2".
Steps To Reproduce
turn on workspace, then create multiple flow tabs on project1, then create and move to new project2 and create new flow tab.
Example flow
none

Environment

Node-RED version: 3.1.6
Node.js version: 18.14.6
npm version: 9.3.1
Platform/OS: Windows 10
Browser: chrome

Opened Pull Request #4601.
Thank you,

Hello,
Thank you for new releases, I've tried following environment but it seems situation are the same.
I am sorry, previous title for this was not correct, so I update the title for this.
Environment
Node-RED version: 3.1.7
Node.js version: 20.11.1
npm version: 10.5.1
Platform/OS: Ubuntu
Browser: chrome
Environment
Node-RED version: 4.0.0 beta.1
Node.js version: 20.11.1
npm version: 10.5.1
Platform/OS: Linux Mint
Browser: chrome
Thank you,

Hello, I found one more thing. hope this could be some help for investigation.
This phenomenon is also affecting on Node-RED MCU Plug-in Flow selector as follows,
however after reload the browser, flow selector list matches to flows on current project.

Thank you,

Hi @mshioji
We haven't merged your PR yet, so nothing has changed. I did have a quick look at your proposed change and I saw it would change behaviour for more than just when switching projects.
Previously, if you have Flow 1, Flow 2, Flow 3, then deleted Flow 2, the next flow created would be Flow 4. With you change, it is created as Flow 2.
I'm not sure we want to change that behaviour here. We only want to reset the count when clearing the workspace.
As for MCU Plugin behaviour - that isn't something we maintain, so I cannot comment on that. You'd have to raise a separate issue against that plugin.

Hello @knolleary
Thank you for your detailed comment, I understand well which point you are concerned about.
I agree "just reset the count when changing projects" is the best, so it's OK please ignore the pull request I mentioned.
then, Yes, I understand MCU Plugin is a different story, but I thought this behavior could be some hint for this.
if this plugin behavior is not related to this issue, I will raise a separate issue for mcu-plugin repo.
Thank you very much for your kind explanation,


Add ANIMATED custom cursors

Can you enable the Runelite client so you can download animated cursors from websites such rw-designer and upload them to the client, letting you use an animated custom cursor within the client
http://www.rw-designer.com/tag/runescape
The client needs to be able to read and interpret .ani files for this to work
the user should be able to upload .cur (static) and .ani (animated) cursor files to the client so they can use a custom cursor within the client

Btw animated custom cursors are possible on mac, so you should be able to reproduce it within the client. I'm using it right now but I had to edit the .ani files and copy and paste all the animation frames. It was very annoying.
https://www.youtube.com/watch?v=fUPOL8gwTk8
I assume this video will help you reproduce the environment on mac within the client. When you upload .ani files and they don't display right the client/user may have to edit the dimensions of each frame like I had to do manually to get it to work.

Hi, I'm thinking of picking this up, as my first contribution because I have some free time over the next week.
The problem here is the ANI and CUR file formats are non-free windows specific file formats. As such libraries don't really exist to use them, it would be a hack to get them to work.
It would be better to use APNG for this, though I imagine many available cursors online don't support this.
A good first step would be modifying the custom cursors plugin so that a user can import their own static cursor and then extending it animated ones (probably with some client modification).

On a quick search Pull #8788 is looking to add custom cursor support, so should probably wait until that is merged in before starting work on this.

You can probably just use gif because its more widely supported and Windows doesn't support partial transparency on cursors

@abextm I would be concerned about the color palette limitations of GIF

The color palette is heavily limited regardless. At least on non-windows machines.

Hey guys!
Now that custom cursors have been added, are we able to move forward with this so we can use animated custom cursors with runelite?
I'm not good with coding so I can only ask for your kind support :))

Custom cursors barely work as-is (Windows support only, no settings to allow cursors with offset click points) and I don't believe there is good (any?) support for setting animated cursors in the way we're doing.

I'm afraid the above is not true.
I've been using custom cursors on Runelite on Mac literally today.
I also successfully installed a program which allowed me to use animated custom cursors on mac. I linked the video at the start of this thread which demonstrated how to do this and the steps I took myself to get it to work. Using the tutorial, I installed an animated dragon dagger p++ .ani file custom cursor on mac with no problems. Therefore I am confident this can be done within the Runelite client.

Apologies--to my knowledge custom cursors work fine in Windows and MacOS, but shows cursors with incorrect colors on Linux due to a known JVM bug on that platform.
Additionally, just because some other program can change your platform's cursor does not mean we will necessarily have the same access to system APIs to make that same change in RuneLite.

Ah ok, I understand @Nightfirecat, just thought it would be useful information for anyone wanting to work on this.
@kyconny if you're still around, now that static custom cursors have been added you should be able to pick this up. Fingers crossed! :))

I checked the video description for https://www.youtube.com/watch?v=fUPOL8gwTk8 and found that all the code for Mousecape, the software which allows you to have custom cursors and animated cursors on Mac using .cur and .ani files is available on GitHub.
Mousecape code: https://github.com/alexzielenski/Mousecape/releases/tag/0.0.6b2
Hopefully this makes developing this Runelite plugin a lot easier!


Admission webhook should not reject workloads with only resource limits set

Report
I'm unable to create/update ScaleObjects with either CPU;  memory; or both scalers, if the underlying workload assigns only resource limits and does not set any requests.
Expected Behavior
Based on Kubernetes documentation (I brought the quote below from here), users can assign only resource limits to their containers, so the ScaledObject admission webhook should also consider the resource limits during workload resources validation.

Note: If you specify a limit for a resource, but do not specify any request, and no admission-time mechanism has applied a default request for that resource, then Kubernetes copies the limit you specified and uses it as the requested value for the resource.

Actual Behavior
Workloads that only set resource limits are rejected by the admission webhook.
Steps to Reproduce the Problem

Create a Deployment that assigns only resource limits (e.g CPU limits):

# Filename: deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: echo-server
        image: jmalloc/echo-server:latest
        resources:
          limits:
            cpu: 500m

kubectl apply -f ./deploy.yaml

Create a ScaledObject with CPU scaler defined and points to the above Deployment:

# Filename: scaledobject.yaml
apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
  name: my-app-so
spec:
  maxReplicaCount: 5
  minReplicaCount: 1
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: my-app
  triggers:
  - metadata:
      value: "80"
    metricType: Utilization
    type: cpu

kubectl apply -f ./scaledobject.yaml

Got the message from Kubernetes API Server:

admission webhook \"vscaledobject.kb.io\" denied the request: the scaledobject has a cpu trigger but the container echo-server doesn't have the cpu request defined

Logs from KEDA operator
No response
KEDA Version
2.11.1
Kubernetes Version
None
Platform
Any
Scaler Details
CPU, memory
Anything else?
No response

@nettoclaudio There are some comments on your PR; are you able to resolve them please?


Integration of IEEE into NFDI-Search-Engine

Description:
This pull request includes the integration of IEEE (with a sample data record) into the NFDI search engine. Please note that the data will be updated once the IEEE API key is activated.
Changes Made:

Added a new file "search_ieee.py" containing the script for searching IEEE data.
Synchronized and updated all the relevant parts of the project to support the integration.

Please review and merge this pull request.
Thank you!

@huntila, what should we do with this pull request?


information about the "Mystery Chinese Documet"

i have already get the document which mentioned in the end of the guide.
nothing much in this document. but he mentioned the "PCB FAB REV" and the conpactable with v2 CPUs.

"而较早的1.00和1.01等主板则不原生支持v2处理器（1.02没有测试过，不确定是否原生支持v2处理器）"
Earlier PCB FAB REV 1.00/1.01 do not support the IB CPU natively , which 1.02 is not tested.

and nothing. He just desoldered the chip and use the CH341a programmer or something like that.
he also have a copy of the "z820 e5-2600 v2 ivy bridge upgrade" which is from the hp support community.
he use the yellow marker and marked the sentence he referenced.
i attached the document he copied from hp support community, which is in English. i may translate the document he wrote and attach in this issues.
im sorry but im not from an english-speaking region. feel free to ask me if you cant understand something.

hmm... i cant attach the file due to the file type limit... but thats not right. i packed it into a zip archive
guide for update to E5-26xx v2 series cpu on HP Z820 workstation .zip
.


[WebView] make WebViewState open class?

Description
Is it possible to make WebViewState an open class? From my custom WebChromeClient (subclass of  AccompanistWebChromeClient) i want to be able to update state with some extra data e.g. alertMessage/ customView e.t.c.
Steps to reproduce
Expected behavior
Additional context

Where would you then use your custom state class? What would this allow that isn't possible now?

@Stable
class MyWebViewState(webContent: WebContent) : com.google.accompanist.web.WebViewState(webContent) {
    var alertMessage: String? by mutableStateOf(null)
        internal set

    var chooseFilePathCallback: ValueCallback<Array<Uri>>? by mutableStateOf(null)
        internal set

}

class MyWebChromeClient : AccompanistWebChromeClient() {
    override fun onJsAlert(view: WebView?, url: String?, message: String?, result: JsResult?): Boolean {
        (state as? MyWebViewState)?.alertMessage = message
        result?.confirm()
        return true
    }

    override fun onShowFileChooser(
        webView: WebView?,
        filePathCallback: ValueCallback<Array<Uri>>?,
        fileChooserParams: FileChooserParams?
    ): Boolean {
        (state as? InkWebViewState)?.let {
            it.chooseFilePathCallback?.onReceiveValue(null)
            it.chooseFilePathCallback = filePathCallback
        }
        return true
    }

    // onShowCustomView, onHideCustomView e.t.c.
}

I can pass MyWebViewState/MyWebChromeClient to WebView composable and e.g. show native alert, use photoPicker to select file e.t.c using state only. Otherwise i would need to use callbacks on MyWebChromeClient to do the same?

I might be missing something but can't you just do
class MyWebChromeClient(val otherState: CustomState): AccompanistWebChromeClient() {
   ...
}

I might be missing something but can't you just do
class MyWebChromeClient(val otherState: CustomState): AccompanistWebChromeClient() {
   ...
}

so your proposal is to use a different state for "extra stuff" and WebViewState for "normal stuff"?

Yes. We try to avoid opening classes if possible. I will close this one for now but if you do find something you aren't able to achieve, please let me know.


CB-1654 Include environment ID fully in redbeams API

All redbeams API calls pertaining to databases and database servers now
require an environment ID, which may be either a CRN or name. Calls
where the environment ID is not passed as a JSON field get it from an
API query parameter, such that these resources are now scoped by
environment in the API.
Other changes:

DatabaseConfigRepository.findByEnvironmentId now returns a set.
DatabaseConfigService.list is renamed to findAll.
DatabaseConfigService.get is implemented; this refactors delete logic
and forms the basis for the upcoming get API endpoint.
DatabaseConfigService.delete for multiple databases now returns the
deleted entities, not the originally found ones.
DatabaseV4BaseTest is introduced.
Listing of database servers now include all of them, not just
USER_MANAGED ones.

Refer to this link for build results (access rights to CI server needed):
ci-cloudbreak.eng.hortonworks.com/job/cloudbreak-pull-request-builder-checkstyle-test/22/

Refer to this link for build results (access rights to CI server needed):
ci-cloudbreak.eng.hortonworks.com/job/cloudbreak-pull-request-builder-checkstyle-main/21/

Refer to this link for build results (access rights to CI server needed):
ci-cloudbreak.eng.hortonworks.com/job/cloudbreak-pull-request-builder-spotbugs-test/14/

Refer to this link for build results (access rights to CI server needed):
ci-cloudbreak.eng.hortonworks.com/job/cloudbreak-pull-request-builder-spotbugs-main/16/

Refer to this link for build results (access rights to CI server needed):
ci-cloudbreak.eng.hortonworks.com/job/cloudbreak-pull-request-builder-unit-test/14/

Refer to this link for build results (access rights to CI server needed):
ci-cloudbreak.eng.hortonworks.com/job/cloudbreak-pull-request-builder-integration-test/14/


Optimize the GraphQL query for the NotFound.server.jsx page

Description
Optimize the GraphQL query for the NotFound.server.jsx page
Additional context

Before submitting the PR, please make sure you do the following:

[x] Read the Contributing Guidelines
[x] Provide a description in this PR that addresses what the PR is solving, or reference the issue that it solves (e.g. fixes #123)
[x] Update docs in this repository according to your change
[x] Run yarn changeset add if this PR cause a version bump based on Keep a Changelog and adheres to Semantic Versioning

Part of https://github.com/Shopify/hydrogen/issues/778

Really curious about whether the API response is faster now, and by how much. 🤔
Also, I'm still a little confused about the changeset; does create-hydrogen-app relate to this change?

Changes made to template-hydrogen-default  need to use the change set for  create-hydrogen-app, becausetemplate-hydrogen-default is ignored and technically never released.


Issue with ExpandoObject and ClearScript

I am having an issue with the ClearScript library.  Here is what I am trying to do:

Create HostObject that has an API
Have the Host API return a dynamic object (ExpandoObject)
Access the dynamic object in JavaScript.
I have written a test program below that demonstrates the approach.  I have made it as simple as possible to demonstrate what I am trying to do.  The code below showcases the JavaScript code that I am executing

The object below showcases the TestDynamic object which is very simple

When I look at the object created by the host in @Code.  The key here is the extra methods
Equals(), GetHashCode(), GetType(), and ToString()

In my test program everything works perfectly.
Now in my real solution, I have an asp.net application (Web Forms).  On postback from form (to save) I have a callback mechanism which is invoked in the form lifecycle.  In this instance the callback is the BeforeSave() function below.  I have super simplified the code to eliminate any possible issues.  Right now the code below just calls a corresponding JavaScript method called beforeSave().  I was invoking it dynamically but for now I am directly calling the beforeSave() routine off of the Script object.  As in the test scenario above, the TestDynamic object is exactly the same, so I am not showing the code again.

When I inspect the object from @code, just like in the test project.  I get an exception in the ClearScript below.

The exception below is what is being thrown

Three exceptions are thrown.  If you inspect the args parameter of the Invoke method, you see the following methods that are excepting.
args[0] = “ToString”
args[0] = “Equals”
args[0] = “GetHashCode”
Here is the call stack when the exception is thrown.

I have tried to trace through the code to see how these methods are added to the ExpandoObject that I am creating.  I cant figure it out.  Any help would be great.  Thanks in advance.

Hi @kevinkoenig,
Thanks for providing all that information. We believe that the behavior you're seeing is by design.

The "extra" methods are inherited from the ultimate base class System.Object. In the managed domain these methods are unusual in that they're always accessible, even when the static type is anonymous, external, dynamic, an interface, etc.

The exceptions are due to the way dynamic objects work in ClearScript. When the script engine requests member evaluation for a dynamic object, ClearScript first attempts to fulfill the request via the object's IDynamicMetaObjectProvider implementation. For members defined statically, such as normal compiled methods, this attempt fails and an exception is thrown. ClearScript catches the exception and falls back to normal member binding. In other words, the exception should be handled internally without affecting your application, and in the debugger it should be safe to disable first-chance handling ("Break when this exception type is thrown").

First let me just thank you all for the quick responses.  The support on this library is really great.
I normally run with all exceptions on in our core product as I find that many people ignore real issues that are swallowed using exceptions.  Then I turn them off as I understand them.
I probably spent 3 days trying to debug the issue assuming there was something wrong with my application.  I can say I learned a lot about dynamics and how ClearScript supports them, so the time wasn't entirely wasted 👍.
I guess the issue is that while I was debugging inside ClearScript a request timed out which caused @Code to display 'unknown' for every member of the object I as returning.
I have it all back together now and it is working perfectly (now that I disabled those exceptions)
Kevin


OpenAPI3 generator crash when no input is defined in flow

Describe the bug
OpenAPI3 generator crash when no input is defined in flow.  After checking master branch, the code still can't handle when input is nil ( pkg/generators/openapi3/generator.go line 150)
To Reproduce
Please include as much as possible information to reproduce the issue:

create config.hcl and flow.hcl
define the flow without input
Run "semaphore generate openapi3"
exception about nil pointer at pkg/generators/openapi3/generator.go line 150

Expected behaviour
Should ouptut openapi3 format in stdout
Additional context
Add any other context about the problem here.

Thank you for your bug report!
Sorry for the later response, but we were focused on some other things...
I believe it got fixed by the PR I opened


Added linux install script

I have created the install script for Linux, it should work with every platform but I have only tested it on steam since I have the game there, if you accept this pull request could you make it so that in the compiled version of the project the linuxinstall.sh file is in the same directory as the EnableSignatureOverride.reg file?

Thanks, merged


rabbitmq role is fragile

The rabbitmq role is using the lineinfile module to modify rabbitmq.config, and if the contents of that file are not what we expect, the playbook will make a change that renders the file invalid (which prevents rabbitmq from starting up).

Given that we're making assumptions about the existing content, we should probably just be generating the file from a template, rather than trying to make in-place modifications.


Error in built docs: Referapp.c20e2fa1.js:1 Uncaught ReferenceError: Cannot access 'j' before initialization

Description
Hello,
followed the documentation and started a new vuepress project using 2.0.0-beta.52
Works fine and great in local dev but built docs throw errors and seems like all js fails because of it (e.g. search, selection of theme light<>dark)
STRP:

go to src
run npm install
run npm run docs:build
Upload .vuepress dist folder to some FTP or deploy to github pages
observe error in console

config:
import { defineUserConfig, defaultTheme } from 'vuepress'

export default defineUserConfig({
    base: "/wiki-test/",
    lang: 'en-US',
    title: 'Title',
    description: '....',
})

Reproduction
https://github.com/marwie/wiki-test/tree/vuepress/build-error
dist.zip
Used Package Manager
npm
System Info
win 10
Chrome Version 106.0.5249.119

Screenshots
app:

vendor:

This is not a minimal reproduction, you are using 3rd party plugins, disable them and try to make another repro

Hello @Mister-Hope sorry about that - i wasnt using them in the config.ts
Remove them from package.json, cleared caches, built and got the same result.
The branch is updated

Same problem. Also, routing was broken after VuePress upgrading to v2.0.0-beta.52.
cc @Mister-Hope

@azat-io did it work on a previous version (if so which version did you use?)

@marwie Everything works fine after downgrading to version v2.0.0-beta.51.

Thanks! Will do that for now :)

That gives me this error during local dev 🤔

Doesnt work for me either unfortunately - getting another error in my local dev with 51 so blocks me even more (but this is with plugins again so maybe its something else)

@meteorlxy  cc, may need some help here, I am really busy in the following 2 weeks.

@azat-io Nice catch, my project does have the same issue.

This is an error related to vue and vue-router, I am not sure whether it's caused by ventor or new optimize logic introduced in vite3.1 or my pr splitting some modules to a ventor. ( I personally prefer the first one, as I do need to write extra code to make my packages compatable with<EMAIL_ADDRESS>we might get it checked when meteorlxy have time, I am really busy, sorry for that.

Doesnt work for me either unfortunately - getting another error in my local dev with 51 so blocks me even more (but this is with plugins again so maybe its something else)

beta51 should work as we are not meating broken reports for this version during the whole month since it release, you may need to clear cache and temp to ensure your devServer is ok, also deleting lock file and a fresh install may help.

Thanks for the fast reply. That's exactly what I tried (deleted .cache and .temp in .vuepress + node_modules and package.json.lock - can try again later to verify

~Thanks for the fast reply. That's exactly what I tried (deleted .cache and .temp in .vuepress + node_modules and package.json.lock) but can try again later to verify~
I must've missed something - works now in 51. Thanks!

How did you fix it ? I can't fix mine, even tried 50 but can't get it to work.

It seems that it dose cause by https://github.com/vuepress/vuepress-next/pull/1101 Some deps are supposed to be generated into "framework", but they are actually not.
Perhaps webpack bundler should work, has anyone try that?

Curious to find out that official docs are working as expected, it has a framework chunk which contains vue and vue-router:

Which is supposed to be the expected behavior, but the broken site seems not:
https://github.com/vuepress/vuepress-next/blob/00b83665182286185593cb03928d5c5b1e5867c5/packages/bundler-vite/src/plugins/mainPlugin.ts#L102-L110

~Thanks for the fast reply. That's exactly what I tried (deleted .cache and .temp in .vuepress + node_modules and package.json.lock) but can try again later to verify~
I must've missed something - works now in 51. Thanks!

How did you fix it ? I can't fix mine, even tried 50 but can't get it to work.

Deleted node_modules package.lock, vuepress .temp and .cache directory, ran install and checked that all packages were on 51 and then build worked

Just change "@vuepress/bundler-vite": "2.0.0-beta.52" to "@vuepress/bundler-vite": "2.0.0-beta.51"

The problematic commits have been reverted in v2.0.0-beta.53. Let me know if there are still some issues.

The problematic commits have been reverted in v2.0.0-beta.53. Let me know if there are still some issues.

I'm still having issue. Here's my GitHub action: https://github.com/CriticalRange/criticalrange.github.io/actions/runs/3313557930

The problematic commits have been reverted in v2.0.0-beta.53. Let me know if there are still some issues.

I'm still having issues. Here's my GitHub actions run: https://github.com/CriticalRange/criticalrange.github.io/actions/runs/3313557930

@meteorlxy Did you have time to check this?


'MemorySize' value failed to satisfy constraint: Member must have value less than or equal to 3008

Describe the bug
Getting following error when trying to deploy .NET 6 Blazor WASM project.

ROLLBACK_COMPLETE: Resource handler returned message: "'MemorySize' value failed to satisfy constraint: Member must have value less than or equal to 3008 (Service: Lambda, Status Code: 400, Request ID: 7ca0c1ab-ed92-4d90-ad93-92f3f2046032)" (RequestToken: 8e18c971-8621-6655-8f95-39873f935af9, HandlerErrorCode: InvalidRequest)

Expected Behavior
Deploys Successfully
Current Behavior
Throws error and rolls back
Reproduction Steps
dotnet new blazorwasm -o dotnetonS3
cd dotnetonS3
dotnet aws deploy

Selected All defaults
Possible Solution
No response
Additional Information/Context
Full log
dotnet aws deploy
AWS .NET deployment tool for deploying .NET Core applications to AWS.
Project Home: https://github.com/aws/aws-dotnet-deploy

Configuring AWS Credentials using AWS SDK credential search.
Configuring AWS region using AWS SDK region search to us-west-2.
Recommended Deployment Option
-----------------------------
1: Blazor WebAssembly App
This Blazor WebAssembly application will be built and hosted in a new Amazon Simple Storage Service (Amazon S3) bucket. The Blazor application will be exposed publicly through a CloudFront distribution using the Amazon S3 bucket as the origin.

Choose deployment option (recommended default: 1)

Name the Cloud Application to deploy your project to
--------------------------------------------------------------------------------
Enter the name of the new CloudFormationStack stack (default dotnetonS3):

Current settings (select number to change its value)
----------------------------------------------------
1. Index Document: index.html
2. Error Document:
3. Redirect 404 and 403 Errors: True
4. Backend REST API:
        Enable: False
5. CloudFront Access Logging:
        Enable: False

Enter 'more' to display Advanced settings.
Or press 'Enter' to deploy:

******************************
Creating deployment zip bundle
------------------------------
Using the dotnet CLI build the project and zip the publish artifacts.
******************************

Creating Dotnet Publish Zip file...
MSBuild version 17.3.0+92e077650 for .NET
  Determining projects to restore...
  All projects are up-to-date for restore.
  dotnetonS3 -> D:\dev\dotnetonS3\bin\Release\net6.0\dotnetonS3.dll
  dotnetonS3 (Blazor output) -> D:\dev\dotnetonS3\bin\Release\net6.0\wwwroot
  Optimizing assemblies for size, which may change the behavior of the app. Be sure to test after publishing. See: https://aka.ms/dotnet-illink
  Optimizing assemblies for size, which may change the behavior of the app. Be sure to test after publishing. See: https://aka.ms/dotnet-illink
  Compiling native assets with emcc. This may take a while ...
  [1/3] pinvoke.c -> pinvoke.o [took 1.00s]
  [2/3] corebindings.c -> corebindings.o [took 1.02s]
  [3/3] driver.c -> driver.o [took 1.16s]
  Linking with emcc. This may take a while ...

  Compressing Blazor WebAssembly publish artifacts. This may take a while...
  dotnetonS3 -> C:\Users\isaac\AppData\Local\Temp\455a95e3-040e-4f92-b94a-bc1024dd826b\

*******************************************
Configuring AWS Cloud Development Kit (CDK)
-------------------------------------------
Ensure a compatible CDK version is installed and the CDK bootstrap CloudFormation stack has been created. A CDK project to perform the deployment is generated unless an existing deployment project was selected.
*******************************************

Generating AWS Cloud Development Kit (AWS CDK) deployment project
Confirmed CDK Bootstrap CloudFormation stack already exists.

*************************
Deploying AWS CDK project
-------------------------
Use the CDK project to create or update the AWS CloudFormation stack and deploy the project to the AWS resources in the stack.
*************************

npm WARN config global `--global`, `--local` are deprecated. Use `--location=global` instead.

✨  Synthesis time: 25.51s

dotnetonS3: deploying...
[0%] start: Publishing bdb08b9984816ecf43301a0c6d8913e270ee2448940b6b95e430dd222a4d90be:563011967245-us-west-2
[0%] start: Publishing a8cd1d5633b0cf605e6b064436ab82e929d2c0de1d3236e04f367afa01e35eb8:563011967245-us-west-2
[0%] start: Publishing f98b78092dcdd31f5e6d47489beb5f804d4835ef86a8085d0a2053cb9ae711da:563011967245-us-west-2
[0%] start: Publishing 5b074f09d68c419c1c26781ebccec3551e15a6521abe2f6f29d1c79a5356afc6:563011967245-us-west-2
[0%] start: Publishing 0f7c0e3777aca7a2f7462ba4017e6953468382aa1f3b34dd5fcf02216330901c:563011967245-us-west-2
[20%] success: Published 0f7c0e3777aca7a2f7462ba4017e6953468382aa1f3b34dd5fcf02216330901c:563011967245-us-west-2
[40%] success: Published bdb08b9984816ecf43301a0c6d8913e270ee2448940b6b95e430dd222a4d90be:563011967245-us-west-2
[60%] success: Published f98b78092dcdd31f5e6d47489beb5f804d4835ef86a8085d0a2053cb9ae711da:563011967245-us-west-2
[80%] success: Published a8cd1d5633b0cf605e6b064436ab82e929d2c0de1d3236e04f367afa01e35eb8:563011967245-us-west-2
[100%] success: Published 5b074f09d68c419c1c26781ebccec3551e15a6521abe2f6f29d1c79a5356afc6:563011967245-us-west-2
dotnetonS3: creating CloudFormation changeset...
dotnetonS3 |  0/14 | 11:44:09 AM | REVIEW_IN_PROGRESS   | AWS::CloudFormation::Stack                      | dotnetonS3 User Initiated
dotnetonS3 |  0/14 | 11:44:15 AM | CREATE_IN_PROGRESS   | AWS::CloudFormation::Stack                      | dotnetonS3 User Initiated
dotnetonS3 |  0/14 | 11:44:20 AM | CREATE_IN_PROGRESS   | AWS::IAM::Role                                  | Custom::S3AutoDeleteObjectsCustomResourceProvider/Role (CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092)
dotnetonS3 |  0/14 | 11:44:20 AM | CREATE_IN_PROGRESS   | AWS::IAM::Role                                  | Custom::CDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C4096MiB/ServiceRole (CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C4096MiBServiceRole4BC4B3D2)
dotnetonS3 |  0/14 | 11:44:20 AM | CREATE_IN_PROGRESS   | AWS::Lambda::LayerVersion                       | Recipe/ContentS3Deployment/AwsCliLayer (RecipeContentS3DeploymentAwsCliLayerBC900CF0)
dotnetonS3 |  0/14 | 11:44:20 AM | CREATE_IN_PROGRESS   | AWS::CDK::Metadata                              | CDKMetadata/Default (CDKMetadata)
dotnetonS3 |  0/14 | 11:44:21 AM | CREATE_IN_PROGRESS   | AWS::CloudFront::CloudFrontOriginAccessIdentity | Recipe/CloudFrontDistribution/Origin1/S3Origin (RecipeCloudFrontDistributionOrigin1S3Origin7079343A)
dotnetonS3 |  0/14 | 11:44:21 AM | CREATE_IN_PROGRESS   | AWS::IAM::Role                                  | Custom::S3AutoDeleteObjectsCustomResourceProvider/Role (CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092) Resource creation Initiated
dotnetonS3 |  0/14 | 11:44:21 AM | CREATE_IN_PROGRESS   | AWS::IAM::Role                                  | Custom::CDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C4096MiB/ServiceRole (CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C4096MiBServiceRole4BC4B3D2) Resource creation Initiated
dotnetonS3 |  0/14 | 11:44:21 AM | CREATE_IN_PROGRESS   | AWS::S3::Bucket                                 | Recipe/ContentS3Bucket (RecipeContentS3BucketE74B8362)
dotnetonS3 |  0/14 | 11:44:22 AM | CREATE_IN_PROGRESS   | AWS::CDK::Metadata                              | CDKMetadata/Default (CDKMetadata) Resource creation Initiated
dotnetonS3 |  0/14 | 11:44:22 AM | CREATE_IN_PROGRESS   | AWS::S3::Bucket                                 | Recipe/ContentS3Bucket (RecipeContentS3BucketE74B8362) Resource creation Initiated
dotnetonS3 |  1/14 | 11:44:22 AM | CREATE_COMPLETE      | AWS::CDK::Metadata                              | CDKMetadata/Default (CDKMetadata)
dotnetonS3 |  1/14 | 11:44:23 AM | CREATE_IN_PROGRESS   | AWS::CloudFront::CloudFrontOriginAccessIdentity | Recipe/CloudFrontDistribution/Origin1/S3Origin (RecipeCloudFrontDistributionOrigin1S3Origin7079343A) Resource creation Initiated
dotnetonS3 |  2/14 | 11:44:24 AM | CREATE_COMPLETE      | AWS::CloudFront::CloudFrontOriginAccessIdentity | Recipe/CloudFrontDistribution/Origin1/S3Origin (RecipeCloudFrontDistributionOrigin1S3Origin7079343A)
dotnetonS3 |  2/14 | 11:44:29 AM | CREATE_IN_PROGRESS   | AWS::Lambda::LayerVersion                       | Recipe/ContentS3Deployment/AwsCliLayer (RecipeContentS3DeploymentAwsCliLayerBC900CF0) Resource creation Initiated
dotnetonS3 |  3/14 | 11:44:29 AM | CREATE_COMPLETE      | AWS::Lambda::LayerVersion                       | Recipe/ContentS3Deployment/AwsCliLayer (RecipeContentS3DeploymentAwsCliLayerBC900CF0)
dotnetonS3 |  4/14 | 11:44:42 AM | CREATE_COMPLETE      | AWS::IAM::Role                                  | Custom::S3AutoDeleteObjectsCustomResourceProvider/Role (CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092)
dotnetonS3 |  5/14 | 11:44:42 AM | CREATE_COMPLETE      | AWS::IAM::Role                                  | Custom::CDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C4096MiB/ServiceRole (CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C4096MiBServiceRole4BC4B3D2)
dotnetonS3 |  6/14 | 11:44:43 AM | CREATE_COMPLETE      | AWS::S3::Bucket                                 | Recipe/ContentS3Bucket (RecipeContentS3BucketE74B8362)
dotnetonS3 |  6/14 | 11:44:46 AM | CREATE_IN_PROGRESS   | AWS::IAM::Policy                                | Custom::CDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C4096MiB/ServiceRole/DefaultPolicy (CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C4096MiBServiceRoleDefaultPolicy464A682D)
dotnetonS3 |  6/14 | 11:44:46 AM | CREATE_IN_PROGRESS   | AWS::CloudFront::Distribution                   | Recipe/CloudFrontDistribution (RecipeCloudFrontDistribution2BE25932)
dotnetonS3 |  6/14 | 11:44:46 AM | CREATE_IN_PROGRESS   | AWS::Lambda::Function                           | Custom::S3AutoDeleteObjectsCustomResourceProvider/Handler (CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F)
dotnetonS3 |  6/14 | 11:44:47 AM | CREATE_IN_PROGRESS   | AWS::IAM::Policy                                | Custom::CDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C4096MiB/ServiceRole/DefaultPolicy (CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C4096MiBServiceRoleDefaultPolicy464A682D) Resource creation Initiated
dotnetonS3 |  6/14 | 11:44:47 AM | CREATE_IN_PROGRESS   | AWS::S3::BucketPolicy                           | Recipe/ContentS3Bucket/Policy (RecipeContentS3BucketPolicyABEFF8E2)
dotnetonS3 |  6/14 | 11:44:48 AM | CREATE_IN_PROGRESS   | AWS::Lambda::Function                           | Custom::S3AutoDeleteObjectsCustomResourceProvider/Handler (CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F) Resource creation Initiated
dotnetonS3 |  6/14 | 11:44:48 AM | CREATE_IN_PROGRESS   | AWS::S3::BucketPolicy                           | Recipe/ContentS3Bucket/Policy (RecipeContentS3BucketPolicyABEFF8E2) Resource creation Initiated
dotnetonS3 |  7/14 | 11:44:49 AM | CREATE_COMPLETE      | AWS::S3::BucketPolicy                           | Recipe/ContentS3Bucket/Policy (RecipeContentS3BucketPolicyABEFF8E2)
dotnetonS3 |  7/14 | 11:44:49 AM | CREATE_IN_PROGRESS   | AWS::CloudFront::Distribution                   | Recipe/CloudFrontDistribution (RecipeCloudFrontDistribution2BE25932) Resource creation Initiated
dotnetonS3 |  8/14 | 11:44:54 AM | CREATE_COMPLETE      | AWS::Lambda::Function                           | Custom::S3AutoDeleteObjectsCustomResourceProvider/Handler (CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F)
dotnetonS3 |  8/14 | 11:44:56 AM | CREATE_IN_PROGRESS   | Custom::S3AutoDeleteObjects                     | Recipe/ContentS3Bucket/AutoDeleteObjectsCustomResource/Default (RecipeContentS3BucketAutoDeleteObjectsCustomResource19F7F75A)
dotnetonS3 |  8/14 | 11:45:04 AM | CREATE_IN_PROGRESS   | Custom::S3AutoDeleteObjects                     | Recipe/ContentS3Bucket/AutoDeleteObjectsCustomResource/Default (RecipeContentS3BucketAutoDeleteObjectsCustomResource19F7F75A) Resource creation Initiated
dotnetonS3 |  9/14 | 11:45:04 AM | CREATE_COMPLETE      | Custom::S3AutoDeleteObjects                     | Recipe/ContentS3Bucket/AutoDeleteObjectsCustomResource/Default (RecipeContentS3BucketAutoDeleteObjectsCustomResource19F7F75A)
dotnetonS3 | 10/14 | 11:45:07 AM | CREATE_COMPLETE      | AWS::IAM::Policy                                | Custom::CDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C4096MiB/ServiceRole/DefaultPolicy (CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C4096MiBServiceRoleDefaultPolicy464A682D)
dotnetonS3 | 10/14 | 11:45:09 AM | CREATE_IN_PROGRESS   | AWS::Lambda::Function                           | Custom::CDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C4096MiB (CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C4096MiB9DE2622F)
dotnetonS3 | 10/14 | 11:45:11 AM | CREATE_IN_PROGRESS   | AWS::Lambda::Function                           | Custom::CDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C4096MiB (CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C4096MiB9DE2622F) Resource creation Initiated
dotnetonS3 | 10/14 | 11:45:12 AM | CREATE_FAILED        | AWS::Lambda::Function                           | Custom::CDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C4096MiB (CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C4096MiB9DE2622F) Resource handler returned message: "'MemorySize' value failed to satisfy constraint: Member must have value less than or equal to 3008 (Service: Lambda, Status Code: 400, Request ID: faa532df-6196-490b-9382-d5d433acac0b)" (RequestToken: 35d4e2db-cb59-267c-25ab-96984571d35b, HandlerErrorCode: InvalidRequest)
dotnetonS3 | 10/14 | 11:45:12 AM | CREATE_FAILED        | AWS::CloudFront::Distribution                   | Recipe/CloudFrontDistribution (RecipeCloudFrontDistribution2BE25932) Resource creation cancelled
dotnetonS3 | 10/14 | 11:45:13 AM | ROLLBACK_IN_PROGRESS | AWS::CloudFormation::Stack                      | dotnetonS3 The following resource(s) failed to create: [CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C4096MiB9DE2622F, RecipeCloudFrontDistribution2BE25932]. Rollback requested by user.
dotnetonS3 | 10/14 | 11:45:30 AM | DELETE_IN_PROGRESS   | AWS::CDK::Metadata                              | CDKMetadata/Default (CDKMetadata)
dotnetonS3 | 10/14 | 11:45:30 AM | DELETE_IN_PROGRESS   | AWS::CloudFront::Distribution                   | Recipe/CloudFrontDistribution (RecipeCloudFrontDistribution2BE25932)
dotnetonS3 | 10/14 | 11:45:30 AM | DELETE_IN_PROGRESS   | AWS::Lambda::Function                           | Custom::CDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C4096MiB (CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C4096MiB9DE2622F)
dotnetonS3 | 10/14 | 11:45:30 AM | DELETE_IN_PROGRESS   | Custom::S3AutoDeleteObjects                     | Recipe/ContentS3Bucket/AutoDeleteObjectsCustomResource/Default (RecipeContentS3BucketAutoDeleteObjectsCustomResource19F7F75A)
dotnetonS3 |  9/14 | 11:45:31 AM | DELETE_COMPLETE      | AWS::CDK::Metadata                              | CDKMetadata/Default (CDKMetadata)
dotnetonS3 |  8/14 | 11:45:32 AM | DELETE_COMPLETE      | Custom::S3AutoDeleteObjects                     | Recipe/ContentS3Bucket/AutoDeleteObjectsCustomResource/Default (RecipeContentS3BucketAutoDeleteObjectsCustomResource19F7F75A)
dotnetonS3 |  8/14 | 11:45:33 AM | DELETE_IN_PROGRESS   | AWS::S3::BucketPolicy                           | Recipe/ContentS3Bucket/Policy (RecipeContentS3BucketPolicyABEFF8E2)
dotnetonS3 |  8/14 | 11:45:33 AM | DELETE_IN_PROGRESS   | AWS::Lambda::Function                           | Custom::S3AutoDeleteObjectsCustomResourceProvider/Handler (CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F)
dotnetonS3 |  7/14 | 11:45:34 AM | DELETE_COMPLETE      | AWS::S3::BucketPolicy                           | Recipe/ContentS3Bucket/Policy (RecipeContentS3BucketPolicyABEFF8E2)
dotnetonS3 |  8/14 | 11:45:36 AM | DELETE_COMPLETE      | AWS::Lambda::Function                           | Custom::CDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C4096MiB (CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C4096MiB9DE2622F)
dotnetonS3 |  8/14 | 11:45:37 AM | DELETE_IN_PROGRESS   | AWS::IAM::Policy                                | Custom::CDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C4096MiB/ServiceRole/DefaultPolicy (CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C4096MiBServiceRoleDefaultPolicy464A682D)
dotnetonS3 |  8/14 | 11:45:37 AM | DELETE_IN_PROGRESS   | AWS::Lambda::LayerVersion                       | Recipe/ContentS3Deployment/AwsCliLayer (RecipeContentS3DeploymentAwsCliLayerBC900CF0)
dotnetonS3 |  7/14 | 11:45:38 AM | DELETE_COMPLETE      | AWS::IAM::Policy                                | Custom::CDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C4096MiB/ServiceRole/DefaultPolicy (CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C4096MiBServiceRoleDefaultPolicy464A682D)
dotnetonS3 |  6/14 | 11:45:38 AM | DELETE_COMPLETE      | AWS::Lambda::LayerVersion                       | Recipe/ContentS3Deployment/AwsCliLayer (RecipeContentS3DeploymentAwsCliLayerBC900CF0)
dotnetonS3 |  6/14 | 11:45:38 AM | DELETE_IN_PROGRESS   | AWS::IAM::Role                                  | Custom::CDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C4096MiB/ServiceRole (CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C4096MiBServiceRole4BC4B3D2)
dotnetonS3 |  5/14 | 11:45:40 AM | DELETE_COMPLETE      | AWS::Lambda::Function                           | Custom::S3AutoDeleteObjectsCustomResourceProvider/Handler (CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F)
dotnetonS3 |  4/14 | 11:45:40 AM | DELETE_COMPLETE      | AWS::IAM::Role                                  | Custom::CDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C4096MiB/ServiceRole (CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C4096MiBServiceRole4BC4B3D2)
dotnetonS3 |  4/14 | 11:45:41 AM | DELETE_IN_PROGRESS   | AWS::IAM::Role                                  | Custom::S3AutoDeleteObjectsCustomResourceProvider/Role (CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092)
dotnetonS3 |  3/14 | 11:45:42 AM | DELETE_COMPLETE      | AWS::IAM::Role                                  | Custom::S3AutoDeleteObjectsCustomResourceProvider/Role (CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092)
 3/14 Currently in progress: dotnetonS3, RecipeCloudFrontDistribution2BE25932
dotnetonS3 |  4/14 | 11:48:32 AM | DELETE_COMPLETE      | AWS::CloudFront::Distribution                   | Recipe/CloudFrontDistribution (RecipeCloudFrontDistribution2BE25932)
dotnetonS3 |  4/14 | 11:48:33 AM | DELETE_IN_PROGRESS   | AWS::S3::Bucket                                 | Recipe/ContentS3Bucket (RecipeContentS3BucketE74B8362)
dotnetonS3 |  4/14 | 11:48:33 AM | DELETE_IN_PROGRESS   | AWS::CloudFront::CloudFrontOriginAccessIdentity | Recipe/CloudFrontDistribution/Origin1/S3Origin (RecipeCloudFrontDistributionOrigin1S3Origin7079343A)
dotnetonS3 |  3/14 | 11:48:33 AM | DELETE_COMPLETE      | AWS::S3::Bucket                                 | Recipe/ContentS3Bucket (RecipeContentS3BucketE74B8362)
dotnetonS3 |  2/14 | 11:48:35 AM | DELETE_COMPLETE      | AWS::CloudFront::CloudFrontOriginAccessIdentity | Recipe/CloudFrontDistribution/Origin1/S3Origin (RecipeCloudFrontDistributionOrigin1S3Origin7079343A)
dotnetonS3 |  3/14 | 11:48:36 AM | ROLLBACK_COMPLETE    | AWS::CloudFormation::Stack                      | dotnetonS3

Failed resources:
dotnetonS3 | 11:45:12 AM | CREATE_FAILED        | AWS::Lambda::Function                           | Custom::CDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C4096MiB (CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C4096MiB9DE2622F) Resource handler returned message: "'MemorySize' value failed to satisfy constraint: Member must have value less than or equal to 3008 (Service: Lambda, Status Code: 400, Request ID: faa532df-6196-490b-9382-d5d433acac0b)" (RequestToken: 35d4e2db-cb59-267c-25ab-96984571d35b, HandlerErrorCode: InvalidRequest)

 ❌  dotnetonS3 failed: Error: The stack named dotnetonS3 failed creation, it may need to be manually deleted from the AWS console: ROLLBACK_COMPLETE: Resource handler returned message: "'MemorySize' value failed to satisfy constraint: Member must have value less than or equal to 3008 (Service: Lambda, Status Code: 400, Request ID: faa532df-6196-490b-9382-d5d433acac0b)" (RequestToken: 35d4e2db-cb59-267c-25ab-96984571d35b, HandlerErrorCode: InvalidRequest)
    at prepareAndExecuteChangeSet (C:\Users\isaac\AppData\Roaming\npm\node_modules\aws-cdk\lib\api\deploy-stack.ts:386:13)
    at runMicrotasks (<anonymous>)
    at processTicksAndRejections (node:internal/process/task_queues:96:5)
    at CdkToolkit.deploy (C:\Users\isaac\AppData\Roaming\npm\node_modules\aws-cdk\lib\cdk-toolkit.ts:219:24)
    at initCommandLine (C:\Users\isaac\AppData\Roaming\npm\node_modules\aws-cdk\lib\cli.ts:347:12)

The stack named dotnetonS3 failed creation, it may need to be manually deleted from the AWS console: ROLLBACK_COMPLETE: Resource handler returned message: "'MemorySize' value failed to satisfy constraint: Member must have value less than or equal to 3008 (Service: Lambda, Status Code: 400, Request ID: faa532df-6196-490b-9382-d5d433acac0b)" (RequestToken: 35d4e2db-cb59-267c-25ab-96984571d35b, HandlerErrorCode: InvalidRequest)

Resource handler returned message: "'MemorySize' value failed to satisfy constraint: Member must have value less than or equal to 3008 (Service: Lambda, Status Code: 400, Request ID: faa532df-6196-490b-9382-d5d433acac0b)" (RequestToken: 35d4e2db-cb59-267c-25ab-96984571d35b, HandlerErrorCode: InvalidRequest). Resource creation cancelled

For more information, please visit our troubleshooting guide https://aws.github.io/aws-dotnet-deploy/troubleshooting-guide/.
If you are still unable to solve this issue and believe this is an issue with the tooling, please cut a ticket https://github.com/aws/aws-dotnet-deploy/issues/new/choose.

Version used
1.2.4
Operating System and version
Windows 11

Could you please add the deploy tool log. The reproduction steps you mentioned do not include the choices you made after dotnet aws deploy

@philasmar provided full logs

Were you attempting to deploy to a new AWS account?
And/or could you check the in the "Function memory maximum" quota in the account+region you attempted to deploy? This should be at Service Quotas -> AWS services ->AWS Lambda at
https://us-west-2.console.aws.amazon.com/servicequotas/home/services/lambda/quotas.

Though, I was able to reproduce in a new account with the same 3008 error despite my quota showing 10240.

What we suspect is happening:

The Blazor recipe uses CDK's "BucketDeployment" contruct
One option of that construct is memoryLimit, which controls "The amount of memory (in MiB) to allocate to the AWS Lambda function which replicates the files from the CDK bucket to the destination bucket."
We default that to 4096MB here, without a way to override it
Per Lambda docs here (as well as various re:Post and StackOverflow questions), new accounts are limited to 3008MB which may be raised automatically due to usage.

We'll consider dropping the default value to fit within the quota for new accounts.

Thanks for confirming @isaacrlevin. After discussing with @normj internally, we're planning to lower this setting to fit within the new account quota via PR #697.


Remove email verification code

fixes #651

Can you not remove the whole feature. And revert the changes here before other PR's Gets merged. Just making the condition always false will do it for now until we solve the problem


SDCICD-1183 e2e test updates

completed todo item for subjectpermissions in e2e test, Removed hardcoded crb name check
What type of PR is this?
(bug/feature/cleanup/documentation/test/refactor)
test
What this PR does / why we need it?

Removed hardcoded clusterrolebinding name check. This name prefix has changes starting >4.15
Adds incomplete todo item for subjectpermissions check

Which Jira/Github issue(s) this PR fixes?
SDCICD-1183
Fixes #
Special notes for your reviewer:
Pre-checks (if applicable):

[x] Tested latest changes against a cluster
[ ] Included documentation changes with PR

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

Comparison is base (a7c58f9) 80.22% compared to head (9f701b6) 80.22%.

Additional details and impacted files

@@           Coverage Diff           @@
##           master     #159   +/-   ##
=======================================
  Coverage   80.22%   80.22%
=======================================
  Files           6        6
  Lines         359      359
=======================================
  Hits          288      288
  Misses         64       64
  Partials        7        7

/lgtm

/approve