Proposal: Reset to a reset point with pending ChildWorkflows

Is your feature request related to a problem? Please describe.
Right now it's not allowed to reset workflows when the current run has pending childWorkflows or users want to reset to a point that has pending ChildWorkflows. This is painful to use Cadence with ChildWorkflows
There are lots of complains from Cadence users. E.g: https://uber-cadence.slack.com/archives/CL22WDF70/p1610966432021400
Proposed Solution
using StartChildWorkflowExecutionFailedEvent and ChildWorkflowExecutionFailedEvent
https://github.com/uber/cadence/blob/3a1e1bcd79bb5bbe76c572e41be73fbdb458fe41/proto/public/uber/cadence/api/v1/history.proto#L77

When resetting a parent workflow to a point that has pending childWFs, disregarding the current or future of the childWF, always fail the childWFs using StartChildWorkflowExecutionFailedEvent/ChildWorkflowExecutionFailedEvent, with additional information that the failure reason = reset

If the pending workflow hasn't started at the reset point, then use StartChildWorkflowExecutionFailedEvent. The history is like below after a reset:

StartChildWorkflowExecutionInitiated
...
DecisionTaskStarted
DecisionTaskFailed(cause=reset)
StartChildWorkflowExecutionFailed(cause=reset)
DecisionScheduled
DecisionTaskStarted

If the pending workflow has started, then use ChildWorkflowExecutionFailedEvent
. The history is like below  after a reset:

ChildWorkflowExecutionStarted
...
DecisionTaskStarted
DecisionTaskFailed(cause=reset)
ChildWorkflowExecutionFailed(cause=reset)
DecisionScheduled
DecisionTaskStarted

Reset will also terminate all pending workflows in the base run and current run(so that starting new ones won't fail).

As an edge case, we may let terminating in a recursive way if there are multiple levels of childWFs to terminate.

Update client SDK to handle the error of failure reason = reset when starting childWF + getting results from childWF
Or we can ask user update workflow to handle the error of failure reason = reset

basically from
childFuture := Workflow.ExecuteChildWorkflow(...)
runID, err := childFuture.getRunID() // returns when childWF started or started fails
if err != nil{ return err}
results, err := childFuture.getResults() // returns when childWF completed

to (we could to it in the client SDK)
var childFuture
var results
var err
var runID
for { // use a loop in case of multiple reset
    if err == ERR_FAILURE_BY_RESET{
        // user can decide if reset will start a a new childWF from beginning, or by resetting the previous childWF
        childFuture = Workflow.ExecuteChildWorkflowAfterReset(...)
    }else{
        childFuture = Workflow.ExecuteChildWorkflow(...)
    }

    runID, err = childFuture.getRunID() // returns when childWF started or started fails
    if err == ERR_FAILURE_BY_RESET{
          continue
    }else if err != nil{
          return err
    }
    results, err = childFuture.getResults() // returns when childWF completed
    if err == ERR_FAILURE_BY_RESET{
          continue
    }else if err != nil{
          return err
    }
    // finally get a workflow result and runID
    break
}

Note that in ExecuteChildWorkflowAfterReset, workflow code can decide either start a a new childWF from beginning, or by resetting the previous childWF

Below are old stuff. Just for reference.
It's super hard to come up with a simple solution to meet all user scenarios.
The problem with pending childWorkflows is that after reset, the new parent will probably not get the results of the children of old parent. Because they are two different workflows, probably in two different shards, it's very difficult to make an atomic operation. There is some edge case like at the moment of resetting parent, the children are closing, or already closed(but not reported to old parent because old parent probably closed earlier), or even not really started yet.
Allow passing different options from user when resetting could be the a good idea.
Option 1: Bypass checking and let it be. So new parent will not get the results if they are waiting.
Option 2: Always starting new children
Option 3: Best effort to save children: If not started then continue to start children, if not finished then let children report to new parent when finish. But if children already finished, then let new parent will get the old results(reapply history events).
Option 4: Combination of opt2 and opt3 --- on top of opt3, if children already finished, then starting new children.
Option 5: From @meiliang86 , instead of per reset request, based on Option 1,2,3,4, we allow workflow to provide different reset options for different childWFID in their code or in request.
Option 6: see https://github.com/uber/cadence/issues/3914#issuecomment-814638943 : doesn't work for some cases
Option 7: use StartChildWorkflowExecutionFailedEvent and ChildWorkflowExecutionFailedEvent see details in https://github.com/uber/cadence/issues/3914#issuecomment-815283618
Challenge in opt2 is that old parent workflow history may already have ChildWorkflowStarted event which records the runID of childWorkflow. It's impossible to overwrite because immutability is the basic invariance of Cadence history protocol. To fix this:

We dont provide runID after childWF started --- but this is a breaking change. A mitigate of that breaking changes could be that we provide runID when ChildWF completed.
Or we just annouce that childFuture.getRunID() is not guaranteed under reset. That will work. But just that feature becomes less useful.
Introduce another event like ChildWorkflowRunUpdated to update the new runID. And client should provide a new runID after receiving this event. This idea may also solve the problem for continueAsNew of childWorkflows.

Overall:

opt1 is small effort to implement
opt3 is a big effort
opt2 is also big effort depends on how we deal with the RunID updates issue, it may require to design protocol.
opt4 will be easy if we have opt2 and opt3.
opt5 will be based on 1,2,3,4
opt6 is only slightly larger than opt1
opt 7 is slightly larger than opt1

Additional context
N/A

How exactly do we treat activities that are started-and-running at the point we reset to?  They have the same lifecycle: schedule, then start, then complete, they can fail, and you can reset to "between" any of those.  I assume they eventually time out, as the response will never be accepted?  Or are they eagerly failed?
Either way, it seems like we can treat children-workflows the same way.  In-progress ones are abandoned (their behavior follows ParentClosePolicy), and in principle their Future/attempt resolves (but may be forgotten).  If they have retries (... do we have child-workflow-retry-policy?  I feel like no), a retry is spawned - if not, it isn't.
Children workflows can fail, it's not like this is a new possibility, though this will likely increase exposure to it.  Races between child-complete and parent-abandoning-complete could be considered the same as races with activities: it's a race, there is no wrong decision.  Like any RPC, you can "succeed" but fail to tell your caller.

More generally, from thinking about this in the past, I'm kinda convinced that the core problem is that we have child workflows at all.
If these were "regular" workflows, and you could get a Future for other workflows, it would both be far more flexible in general and resolve this kind of ambiguity: if the parent is reset, this is just a WorkflowResetError(new_run_id).  Observing-workflows can do whatever they deem appropriate, quite possibly "query observed-workflow, find out what was forgotten, hook up any missing signal channels again".  Starting workflows can be a pseudo-activity, with exactly the same semantics as activities: success/fail/retries, and we already have the duplicate-ID policy to determine what happens when it succeeds more than once.
You can do all of this today with an Activity for your workflow client calls, except for the "get a Future for another workflow" part.  Currently that requires polling to detect all completion scenarios, which isn't particularly scalable.

@Groxx Excited that you have those Qs/comments, because you are getting closed to the truth(core of the problem).
My proposal is indeed too brief so hopefully replying to your comments will make them more detailed.

How exactly do we treat activities that are started-and-running at the point we reset to?

We failed and reschedule new ones.

They have the same lifecycle: schedule, then start, then complete

True for lifecycle, Activity: scheduled->started->completed vs ChildWF: initiated->started->completed(The happy cases).
But they are different in details in the server-client protocol, if you look at history events.
he ChildWFStarted event carries the ChildWF runID. In cadence client experience, it's for providing RunID and telling parent workflow that the childWF has started. The code looks something like this:
childFuture, err := Workflow.ExecuteChildWorkflow(...)
runID := childFuture.getRunID() // returns when childWF started
results := childFuture.getResults() // returns when childWF completed

it seems like we can treat children-workflows the same way

That the Option 2 in my proposal. But the implementation could be more complicated than activity.
One of the very basic design the reset is that resetting will result a new Run(and new RunID). (We have to do this way to be able to fork workflow history like Git branching).
So now, if we do reset in the same way as for Activity, the problem is that line of code:
runID := childFuture.getRunID() // returns when childWF started
becomes invalid(or potentially).
So:

if we can regret and take away that feature, then problem solved. (I kinda  leaning to this if we want to take shortcut, because I don't believe many people are using this runID for business).  --- but this is a breaking change.
Or we just annouce that childFuture.getRunID() is not guaranteed under reset. That will work. But just that feature becomes less useful.
Therefore my proposal is to make a new event type to update the RunID for parent workflow. This is the only solution if we have to keep runID. and this solution is also generic enough for updating RunID in ContinueAsNew case -- which is also broken today.

Retries make "started" ambiguous for activities, as it can happen multiple times, so it's a convenient thing that there is no "activity run ID" / activity-start future exposed.
But say there was: how would a reset affect that?  I kinda suspect we wouldn't be agonizing over it for so long, and would just introduce a new api for reset-with-retry scenarios :) maybe as a channel of starts instead of a future, or a "GetRunIds()" that always returns the current knowledge of starts. (You could imagine this paired with a "get result for run id X", which is arguably useful as well)
... but child workflows don't have retries, right? So they're just long-running activities like we have now: failing an activity like that seems correct, so why not child workflows? The run id does not need to change, because it can't, and there's no desire to change it: it failed. Start another.

I'm half trying to convince myself that I've been over-thinking this for many months (I explicitly avoided using child workflows in my service, because I couldn't find a way to live without reset, and then spent more time trying to figure out how to monitor workflow failures efficiently, which requires child workflows and their futures/contexts...), and half think it's honestly probably a good idea.  We can introduce child-workflow-retry-options to mitigate the pain of failures, same as on activities, and move on.
And in v2, drop the concept in favor of generic external workflows, with simpler semantics. The migration will probably be pretty straightforward for simple uses, and unlocks much more complex uses (M:N observing, for example).

Retries make "started" ambiguous for activities, as it can happen multiple times, so it's a convenient thing that there is no "activity run ID" / activity-start future exposed.

hehe yeah, luckily. Otherwise our reset doesn't work today either.

but child workflows don't have retries, right?

They do have retry. (there was a bug that I fixed a few months ago: https://github.com/uber/cadence/issues/3351 ) so you can put a server side backoff retry policy on childWF.
ChildWF retry will make a new runID too -- meaning that it's also broken already for getting runID from childWfFuture.
I am not sure if getting results is also broken after retry...I believe so, since getting results from a continuedAsNew childWF has been broken for a long time. @meiliang86  correct me if I am wrong for this one.

@Groxx After discussing with you I actually found a simple way to do reset with pending childWFs now. We probably can zoom and talk about it. I may need @meiliang86 to confirm my idea as it require some details about client behavior.
The proposal is this: on the server, we only provide a slightly modified version of opt1 of my proposal -- which just allow bypassing the checking of pending childWFs, and also terminating all pending childWFs.
Then in the workflow code, ask the users  to do this:
before resetting a workflow with childWFs, change the code from
childFuture, err := Workflow.ExecuteChildWorkflow(...)
runID := childFuture.getRunID() // returns when childWF started
results := childFuture.getResults() // returns when childWF completed

to
childFuture, err := Workflow.ExecuteChildWorkflow(...)
runID := childFuture.getRunID()
isRunIdTerminated := Workflow.ExecuteLocalActivity( checkRunID(runID)
if !isRunIdTerminated {
     // start childWF again because it's terminated by reset
     childFuture, err = Workflow.ExecuteChildWorkflow(...)
      runID = childFuture.getRunID()
}
results := childFuture.getResults() // returns when childWF completed
// and now it's safe to use the runID for business purpose

The run id does not need to change, because it can't, and there's no desire to change it: it failed

@Groxx I know why you thought this way. I had the same until I understand the design of Cadence. Workflow history is the key of the design(that's why we called our kernel service "history service"). It uses "event sourcing" data model: https://microservices.io/patterns/data/event-sourcing.html
because of this event sourcing, the very basic design principal/invariance of Cadence: history must be immutable once written. (if following this, you will understand why we have to wait activity complete to write the activity started event, for activity with retry -- a lot of people feel this very hard to understand).
Therefore, RunID must be changed after reset. Because reset means overriding history by nature. Moreover, we want to keep the history of the previous run, so that we can do reset again -- e.g. for a runIdA of 100 events, the first reset to event 50th, and users realizes this is not good, and they want to reset to event 60th. If we override the event 60th, then we will never be able to reset to 60th.
^ that's why I said our current reset is like "Git" branching. It allows user to fork history.

With the new proposal, the checkRunID invokes a remote call so it will be a (system) activity?
If we introduce a version in the start workflow, will it be easier to solve option2?

@yux0

With the new proposal, the checkRunID invokes a remote call so it will be a (system) activity?

No, it has to be a raw function to invoke RPC, without activity, local activity, or side effect.
If we use any of  activity, local activity, or side effect, the proposal won't work.
Imagine this: when the parent is waiting for a childWF for the result, and then the parent is reset to a place where the childWF is started.
If using activity, local activity, or side effect, the parent before resetting will put a marker there, and we will never be able to remove the code.
However, after reflecting that proposal, I realized  that approach only work for pending childWFs that are not closed.
But it doesn't work for case that resetting to pending childWFs that are already closed.
So I come up with another proposal by using StartChildWorkflowExecutionFailedEventAttributes https://github.com/uber/cadence/blob/3a1e1bcd79bb5bbe76c572e41be73fbdb458fe41/proto/public/uber/cadence/api/v1/history.proto#L77

When resetting a parent workflow to a point that has pending childWFs, disregarding the current or future of the childWF, always fail the childWFs using StartChildWorkflowExecutionFailedEvent, with additional information that the failure reason = reset
Reset will also terminate all pending workflows in the base run and current run(so that starting new ones won't fail).
Update client SDK to handle the error when failure reason = reset when starting childWF

basically from
childFuture := Workflow.ExecuteChildWorkflow(...)
runID, err := childFuture.getRunID() // returns when childWF started or started fails
if err != nil{ return err}
results := childFuture.getResults() // returns when childWF completed

to
var childFuture
for {
    childFuture = Workflow.ExecuteChildWorkflow(...)
    if err = ERR_FAILURE_BY_RESET{
          continue
    }else if err != nil{
          return err
    }
    break
}
runID, err := childFuture.getRunID() // returns when childWF started or started fails
results := childFuture.getResults() // returns when childWF completed

The run id does not need to change, because it can't, and there's no desire to change it: it failed

@Groxx I know why you thought this way. I had the same until I understand the design of Cadence. Workflow history is the key of the design(that's why we called our kernel service "history service"). It uses "event sourcing" data model: https://microservices.io/patterns/data/event-sourcing.html
Because of this event sourcing, the very basic design principal/invariance of Cadence: history must be immutable once written. (if following this, you will understand why we have to wait activity complete to write the activity started event, for activity with retry -- a lot of people feel this very hard to understand. And also we called the internal WF meta data "mutalbeState" because the history is "immutable").

Sure, for a running workflow that's clearly a reasonable choice.  When resetting though we can copy-and-modify, which we already do - the first event now has more (meta)data, pointing to the previous run, and a new run-id.  A reset is already not "just" a fork, even if we describe it as such.
On the server side: do we not copy perhaps?  If it's literally just a pointer to previous + where to read up to, then yeah - this would be a moderately large change on the server.  But it may be one worth making.

basically from
// normal non-failure-tolerant "start child workflow" code

to
// normal failure-tolerant "start child workflow" code

Yeah, that's basically what I'm thinking.  Any not-yet-completed children just return a new kind of error, workflow code needs to handle it like any other error.  The exposed run-id does make configured-retries annoying though, as ^ doing that effectively means you're losing the code-simplifying niceties of configured-retries.  We could perhaps make this behavior configurable somewhere, e.g. "I do not need the child run-id" -> you can use the simpler form safely.

More generally: seems like child-run-id is already flawed, as it'll give you the first run-id, but not the current one?  If that's accurate, we could probably consider "child with retries + exposed runid" is a bug, and hide run-id going forward.  The "started" future is still potentially relevant for making sure the request is accepted by the server though.

On the server side: do we not copy perhaps?

Yes, it is seriously hehe. see
https://github.com/uber/cadence/blob/bd6c19c6930320f37fe2310121a5dc295c9ec2dc/service/history/reset/resetter.go#L323
and
https://github.com/uber/cadence/blob/bd6c19c6930320f37fe2310121a5dc295c9ec2dc/common/persistence/cassandra/cassandraHistoryPersistence.go#L247
Copy is ineffcient for both storage and performance, so we made a big re-architecture on persistence for that(that's why we called it HistoryV2)

"I do not need the child run-id" -> you can use the simpler form safely

Agreed. I updated my proposal for the same idea.

Any new progress abot this proposal now?


converting script

Hello, Thanks for your converting, and you're great, I want to know how you to convert it to coreml so can you share your script? Thanks again.

Hi! For sure. Here is the link for ther conversion script. You need to place this script in the root directory of the richzhang/colorization repository. Do not forget to change paths to testing images:)
https://gist.github.com/Vadbeg/965708ed9ed91b8b863f99b9df10f898


Shibboleth sample

Hello, is there any sample or guide how to use IdentityServer to enable Shibboleth authentication?

You should first find how to use Shibboleth from ASP.NET Core. Once you have that, then it'd be easy to use from IdentityServer.

I expected that the way to use Shibboleth from ASP.NET Core would be IdentityServer. I have probably misunderstood what IdentityServer provides and what it does not.

probably. Here are the docs:
https://identityserver4.readthedocs.io/en/dev/


Bug on reinstall task?

Hi,
I recently identified a potential "bug" (not sure it's from debreate).
All deb i create work fine. I can install my software, uninstall it, install it again, without any problems.
But if i install my software, then ask to reinstall it (i'm using GDEBI-GTK, under Linux Mint, Ubutunu/xubuntu, ...), i've an 123 error code, and reinstallation failed. At this moment, i can uninstall it, then install it again properly.
Any idea? Bug in my script, in debreate, or in reinstallation mechanism?
Perhpas, i'm in wrong, but i was thinking reinstallation was simply using removal scripts before makes a basic installation.
Thanks for your help

I don't think I can be sure without more information about the error/error code.


Zoom for spoiler images

I frequently missed the zoom function for spoiler images. Maybe this feature can be added to https://github.com/cgeo/c-geo-opensource/issues/40 (Log-Images) too.

I've got a question about the image size. Will the image be downscaled and how can i prevent downscaling of images?
My problem is the following: Some days ago i've done a cache and was lucky to have the (unscaled) image within c:geo and everything was fine. After successful found of the cache and online log i updated the cache and moved it to the "found caches" list within c:geo. Now only a scaled version of the image is available and there is no way to access the unscaled version.

There's a context menu on the image itself to open the original picture in your browser.

After some investigation i think the problem maybe is based on some changes at GC.com. The images listed in the online cache listing above the logs are all downscaled! I guess c:geo is saving this images. I don't know if this was changed currently by GC.com.
@Bananeweizen When opening the spoiler images from within the details page i get the page with all spoiler images. When tapping one of them i can choose between "APG", "Show image" and "POP Images Browser" but no option to open the image in browser.

Long press...

There is no difference between short and long press - i get the same popup with the 3 options.

What's your c:geo version?

I've the latest available from the market - currently 08.11.2011.
What is the stable version of the apk from the website? I couldn't find any info about the version.
I didn't give the nightly builds a try - is there any problem using the stable version from the market and a nightly build side by side?

is there any problem using the stable version from the market and a nightly build side by side?

No, because you can't use them side by side, the nightly will overwrite the market version. ;) But there's a RC version, which will be released on monday: http://cgeo.org/cgeo-RC.apk


support for Other sql driver (oracle\informix)

hello ,is there any plan to add those features?

Nope, not planned at the moment.

Should be handled directly directly at reachability metadata repository level, not Spring specific.


statistic: Allowing input multiple desire states

Introducing NetworkState::merge_desire(), use could merge multiple
desire states and generate the statistic of the final outcome.
The nmstatectl statistic subcommand now support multiple desired
state files.
Unit test case included.

I did not see the nmstatectl statistic subcommand in the man page, can we add it somehow ?

Man page included.

It looks like merge_desired only merges interfaces with absent state? Is that intentional?

It looks like merge_desired only merges interfaces with absent state? Is that intentional?

The self.update_state() merged other data, only interface need special treatment.


delete, backup and recovery cluster e2e test

Signed-off-by: Xvv-v<EMAIL_ADDRESS>
What type of PR is this?
/kind feature

What this PR does / why we need it:
Which issue(s) this PR fixes:

Fixes #61
Special notes for reviewers:

Does this PR introduced a user-facing change?

Additional documentation, usage docs, etc.:

Codecov Report

Merging #62 (f6d8cdb) into master (f45b22c) will not change coverage.
The diff coverage is n/a.

@@           Coverage Diff           @@
##           master      #62   +/-   ##
=======================================
  Coverage   11.33%   11.33%
=======================================
  Files          95       95
  Lines       14709    14709
=======================================
  Hits         1667     1667
  Misses      12821    12821
  Partials      221      221

/milestone v1.2.0


Use delegate to connect HubdleState with each extension

Use normal variables because delegates usage would be ugly due to imports


Connection state updated after reconnect

The pull request for issue #293

Codecov Report

Merging #294 into master will decrease coverage by 0.48%.
The diff coverage is 50%.

@@            Coverage Diff             @@
##           master     #294      +/-   ##
==========================================
- Coverage   94.87%   94.38%   -0.49%
==========================================
  Files           6        6
  Lines         390      392       +2
==========================================
  Hits          370      370
- Misses         20       22       +2

Impacted Files
Coverage Δ

lib/manager.js
94.2% <50%> (-1.39%)
:arrow_down:

Continue to review full report at Codecov.

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


Revoke all when updating grants might be replaced by a grants diff

What problem are you facing?

In mysql grant controller, all grants are revoked before assigning the new ones, as stated in the comment that might leave applications with no access to the DB for a short time
        // Remove current grants since it's not possible to update grants.
	// This might leave applications with no access to the DB for a short time
	// until the privileges are granted again.
	// Using a transaction is unfortunately not possible because a GRANT triggers
	// an implicit commit: https://dev.mysql.com/doc/refman/8.0/en/implicit-commit.html
	query := fmt.Sprintf("REVOKE ALL ON %s.%s FROM %s@%s",
		dbname,
		table,
		mysql.QuoteValue(username),
		mysql.QuoteValue(host),
	)

https://github.com/crossplane-contrib/provider-sql/blob/master/pkg/controller/mysql/grant/reconciler.go#L279
How could Crossplane help solve your problem?

What about making a comparison between current mysql grants for that user-table and then revoking the ones that are no longer required privileges to revoke = observed privileges - requested privileges? As well as granting the ones that are required now  privileges to grant = requested privileges - observed privileges

I understand that observed privileges list cannot be passed from observed method to update method, since managed.ExternalObservation{} struct does not have a field for that. So this will involve an additional query to database in the update method.
I would like to work in a pr if this feature is considered as desirable

Similar to what has been done for mssql https://github.com/crossplane-contrib/provider-sql/blob/master/pkg/controller/mssql/grant/reconciler.go#L177

I'm running into alternative issues with REVOKE ALL and think this might help improve the situation.

This patch was included on 0.7.0 (https://github.com/crossplane-contrib/provider-sql/releases/tag/v0.7.0), but it doesn't seem to fix the issue.
I still face it after upgrading. Below is what I see on mysql general logs and when my-app tries to run a query in between REVOKE and GRANT, it of course gets a permission denied error:
2023-11-07T11:04:33.937835Z     1673736 Query   SHOW GRANTS FOR 'my-app'@'%'
2023-11-07T11:04:33.945302Z     1673738 Query   REVOKE ALL ON `my-app`.* FROM 'my-app'@'%'
2023-11-07T11:04:33.967178Z     1673740 Query   GRANT ALTER, ALTER ROUTINE, CREATE, CREATE ROUTINE, CREATE TEMPORARY TABLES, CREATE VIEW, DELETE, DROP, EVENT, EXECUTE, INDEX, INSERT, LOCK TABLES, REFERENCES, SELECT, SHOW VIEW, TRIGGER, UPDATE ON `my-app`.* TO 'my-app'@'%'

It looks like the REVOKE ALL query is a case of going from ALL PRIVILEGES to more specific privileges:
https://github.com/crossplane-contrib/provider-sql/blob/61a16726f9782ddfa117045e87adfa8937e318c0/pkg/controller/mysql/grant/reconciler.go#L394-L403
I guess this would be an exceptional case where revoking the diff only is not really possible? :thinking:

@Duologic could be also, but it is not my case. I'm not granting ALL PRIVILEGES:
  For Provider:
    Database:  my-app
    Privileges:
      SELECT
      INSERT
      UPDATE
      DELETE
      CREATE
      DROP
      REFERENCES
      INDEX
      ALTER
      CREATE TEMPORARY TABLES
      LOCK TABLES
      EXECUTE
      CREATE VIEW
      SHOW VIEW
      CREATE ROUTINE
      ALTER ROUTINE
      EVENT
      TRIGGER

This seems like a bug to the current implementation, can you create a new issue with the objects that you are applying and describing the steps to reproduce?

This seems like a bug to the current implementation, can you create a new issue with the objects that you are applying and describing the steps to reproduce?

@Duologic https://github.com/crossplane-contrib/provider-sql/issues/162
By the way I tested granting ALL PRIVILEGES and it works as expected. It only seem to occur with this specific list of privileges I provided above.


which is the right trunk entity to use?

Hi,
I need to have state of trunk door, but I found various doors states in my integration:
binary_sensor.audi_trunk
assumed_state: true
device_class: door
binary_sensor.audi_trunk_lock
assumed_state: true
device_class: lock
sensor.audi_doors_trunk_state
assumed_state: true
I tried to compare history of these entities, but they seems different...I don't understand the difference between these entitites...

binary_sensor.audi_trunk assumed_state: true device_class: door
this return the state of the trunk (closed or open)
binary_sensor.audi_trunk_lock assumed_state: true device_class: lock
this returns the state of the trunk's lock (locked or unlocked)
sensor.audi_doors_trunk_state assumed_state: true
this returns the state of all car doors and the trunk. If one (or more) door or the trunk is open it return "open". If one door (or more) or the trunk is unlocked, it returns "unlocked".  If all doors and the trunk are locked, it returns "locked".

questions were answered. Closing issue.


Use MP 3.0 Health annotations. fixes #218.

@rdebusscher Could you help me understand the
     , MP30("3.0", "MP 3.0", Collections.singletonList("mp3_0"))

bit, please?

Collections.singletonList("mp3_0")

Defines the 'alternatives' which are active when selecting MP 3.0. In this case, templates are first looked up into the directory mp3_0 and if not found, in the root directory of all templates.
That way, we can have a specific Java file for the HealthController when selecting MP 3.0

After the commit was done, I was thinking the directory should probably be mp3_x to reduce confusion when we add support for MP 3.2

@Emily-Jiang @Karm Created the Live and Ready checks. Please review again.


Added option to wait until file is ready for download

The /status endpoint returns success when the image is done uploading but that doesn't necessarily mean it's ready to be downloaded/accessed. The is_ready flag means it's ready to download. Added an option that if true tells the fromUrl function to wait until the image is ready before calling the callback function.
See the example response here: https://uploadcare.com/documentation/upload/#from-url
{
  "status": "success",
  "is_stored": true,
  "done": 145212,
  "file_id": "575ed4e8-f4e8-4c14-a58b-1527b6d9ee46",
  "total": 145212,
  "size": 145212,
  "uuid": "575ed4e8-f4e8-4c14-a58b-1527b6d9ee46",
  "is_image": true,
  "filename": "EU_4.jpg",
  "is_ready": true, <---- means it's ready to download
  "original_filename": "EU_4.jpg",
  "mime_type": "image/jpeg",
  "image_info": {
    "orientation": null,
    "format": "JPEG",
    "height": 640,
    "width": 960,
    "geo_location": null,
    "datetime_original": null
  }
}

@RexMorgan what do you think of this PR?

Hi Ben, I like this change and I'll try to test this and get it merged and published to npm soon.
I'm very sorry for the long delay, I know lack of response can be frustrating with open source projects. I saw this when you originally sent it and I forgot to set aside time to look into it more closely. Thanks for bringing it back to my attention.

@BenLorantfy This has been merged and published to npm, uploadcare version 0.4.4.
Thanks!


Here's how to fix your Heroku app (SSL)

My Heroku instance suddenly stopped accepting connections to the DB without an SSL certificate, and so my application stopped working. Just in case someone else bumps into this problem, here's what I did:

Update your pubspec.yaml to point to this repo instead of the latest version of Aqueduct. Props to NayanJD for his pull request. Remember to add a dependency_overrides section. You might also need to set publish_to to none.
In the channel.dart file, the one inside of your own project, within the contextWithConnectionInfo method, set the useSSL option in the PostgreSQLPersistentStore constructor to true.
Add the --use-ssl option to the release command in Procfile.

Thank you very much. I had the same problem and your issue saved me.
In my case, I followed the guidelines of the last two items of your solution.
I just don't know how to point pubspech.yaml to a specific repo. If you can guide me, I thank you.
Best regards.

Happy yo help. Here's part of my pubspec:
publish_to: none

environment:
  sdk: ">=2.0.0 <3.0.0"

dependencies:
  aqueduct:
    git:
      url: git://github.com/darter/aqueduct.git
      path: aqueduct

dev_dependencies:
  aqueduct_test: ^1.0.0

dependency_overrides:
  aqueduct: 3.3.0+1


feat: turbo bin

closes #511
What this PR brings:
Implements turbo bin which prints out the path to Turbo's binary.

It's not PNPM specific, it happens with all of the backends.

Test flakiness was unrelated


Multinode compression policies

In PR #334 we added support for multinode metrics tables. However, these aren't yet ready for primetime as we do not yet support compression policies for distributed hypertables. This issue tracks that feature.
Open Questions:

[x] do we implement our own compression policies or wait for upstream? (currently intend to implement our own)
[ ] do we migrate non-multinode tables to use our custom policy?

This is done


[Model Overview] Fix bug: Unable to hover/click on download pdf/svg image for dataset cohort metric chart

Signed-off-by: Ruby Zhu<EMAIL_ADDRESS>This PR fix bug for the model overview: Unable to hover/click on download pdf/svg image for dataset cohort metric chart
Description
When there is only one cohort, users are not able to click on the last two download options.
Root case: when there is only one cohort, the height is set to 160, but the minimum height for showing the whole menu is around 190, so the menu is cut off and users are not able to click on the last two options
Fix: set the minimum height as 190
Before change

After change

Checklist

[ ] I have added screenshots above for all UI changes.
[ ] I have added e2e tests for all UI changes.
[ ] Documentation was updated if it was needed.

Codecov Report

Merging #1556 (5eefff9) into main (b1cf129) will decrease coverage by 12.15%.
The diff coverage is n/a.

@@             Coverage Diff             @@
##             main    #1556       +/-   ##
===========================================
- Coverage   87.73%   75.58%   -12.16%
===========================================
  Files         109       10       -99
  Lines        5260      258     -5002
===========================================
- Hits         4615      195     -4420
+ Misses        645       63      -582

Flag
Coverage Δ

unittests
75.58% <ø> (-12.16%)
:arrow_down:

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

Impacted Files
Coverage Δ

erroranalysis/erroranalysis/__init__.py

...ai/responsibleai/_tools/causal/causal_constants.py

...ibleai/responsibleai/managers/explainer_manager.py

...nsibleai/databalanceanalysis/data_balance_utils.py

raiwidgets/raiwidgets/__init__.py

...is/erroranalysis/_internal/surrogate_error_tree.py

...iwidgets/raiwidgets/model_performance_dashboard.py

...onsibleai/_tools/shared/attribute_serialization.py

...ibleai/_tools/causal/dashboard_schemas/__init__.py

erroranalysis/erroranalysis/_internal/utils.py

... and 89 more

Continue to review full report at Codecov.

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


Establish Docker builds for verifier and relying party

Docker image to run Veraison as a mock, which is useful at least temporarily, although we would not be using it in the final PoC.
Also introduces Docker image build for the relying party side, bringing together the Veraison and EAR C libraries along with mbedTLS with the integrations.
Signed-off-by: Paul Howard<EMAIL_ADDRESS>

Errr, I don't understand why there's a delta in mbedtls-build.md in this PR.

Closing this PR because it seems to be in a confused state and I don't want to perpetuate the problem.


On clean install getting 6 errors on phpunit

On clean install i`m running phpunit tests and getting 6 errors (all about elastic docker container):
docker-compose exec php sh -lc "./bin/phpunit "
#!/usr/bin/env php
PHPUnit 6.5.14 by Sebastian Bergmann and contributors.

Testing Api Test Suite
......E................E...EEEE......................             53 / 53 (100%)

Time: 2.2 minutes, Memory: 20.00MB

There were 6 errors:

1) App\Tests\Application\Query\Event\GetEvents\GetEventsTest::processed_events_must_be_in_elastic_search
Elasticsearch\Common\Exceptions\NoNodesAvailableException: No alive nodes found in your cluster

...

2) App\Tests\Infrastructure\Share\Event\Query\EventElasticRepositoryTest::an_event_should_be_stored_in_elastic
Elasticsearch\Common\Exceptions\NoNodesAvailableException: No alive nodes found in your cluster

...

3) App\Tests\UI\Http\Rest\Controller\Events\GetEventsControllerTest::events_list_must_return_404_when_no_page_found
Elasticsearch\Common\Exceptions\NoNodesAvailableException: No alive nodes found in your cluster

...

4) App\Tests\UI\Http\Rest\Controller\Events\GetEventsControllerTest::events_should_be_present_in_elastic_search
Elasticsearch\Common\Exceptions\NoNodesAvailableException: No alive nodes found in your cluster

...

5) App\Tests\UI\Http\Rest\Controller\Events\GetEventsControllerTest::given_invalid_page_returns_400_status
Elasticsearch\Common\Exceptions\NoNodesAvailableException: No alive nodes found in your cluster

...

6) App\Tests\UI\Http\Rest\Controller\Events\GetEventsControllerTest::given_invalid_limit_returns_400_status
Elasticsearch\Common\Exceptions\NoNodesAvailableException: No alive nodes found in your cluster

...

ERRORS!
Tests: 53, Assertions: 92, Errors: 6.

Generating code coverage report in HTML format ... done

Legacy deprecation notices (1)
make: *** [phpunit] Error 2

Elasticsearch don't work in your docker container, propably https://www.elastic.co/guide/en/elasticsearch/reference/current/vm-max-map-count.html  don't work. See docker-compose logs

Thanks for report @zawiszaty. Yes seems totally related with elastic. Can you provide the elastic logs?

I don't know why travis isn't failing.... Anyway I upgraded the elastic stack and improved the config. It should be enough to fix this issue.


Balinese script font missing

We want to update the tools that generate the website to list the Balinese font.
Moved from googlei18n/noto-fonts#103

This is no longer a bug, the font is available on the web site.


Enable SpotBugs in Google Cloud Platform (GCPIO) module

Imported from Jira BEAM-6889. Original Jira may contain additional context.
Reported by: iemejia.
Subtask of issue #18114

already enabled: https://ci-beam.apache.org/job/beam_PreCommit_Java_GCP_IO_Direct_Cron/1564/spotbugs/


error: No overload variant of "DataFrame" matches argument types "Sequence[int]"  [call-overload]

import pandas as pd
from collections.abc import Sequence

index: Sequence[int] = [3, 2, 7]
columns = ["a", "b", "c"]
df = pd.DataFrame(index=index, columns=columns)  # ✘ error: [call-overload]
print(df)

If the annotation Sequence[int] is removed, the file parses.
Please complete the following information:

Ubuntu 22.04.1
Python 3.10.6
mypy 0.982
pandas 1.5.0
pandas-stubs <IP_ADDRESS>012

The types for index and columns are Axes, which are defined as:
AnyArrayLike: TypeAlias = Union[Index, Series, np.ndarray]
Axes: TypeAlias = Union[AnyArrayLike, list, dict, range]

We left out Sequence on purpose as an Axes argument, because a plain string is a Sequence.  If you change your code to use List[int] instead of Sequence[int], it will work fine.
Because of this unfortunate aspect of python typing, we avoid using Sequence as the type of an argument when we the argument would accept allow a list of strings, but not accept a pure string.

Seems like this is another case where the absence of a NOT type bites.
Potentially one could discuss allowing at least MutableSequence to catch user types, as strings are immutable.

Sounds like a good way forward for all of the places where we really want Sequence[Scalar] but can't because of str.

That would exclude things that should be included though, tuple, FrozenSet, etc.

That would exclude things that should be included though, tuple, FrozenSet, etc.

Mostly we are using list[ScalarT] as a work around though, so it seems like it is likely an improvement in many cases. There are also quite a few places where tuple are poorly handled (e.g., anything that indexes).

@gandhis1 using tuple[int, int, int] or tuple[int, ...] in my example currently also raises [call-overload] errors.

I think that if we add tuple to the definition of Axes in _typing.pyi, we should be OK, as Axes is only used as a type for the argument for the Series and DataFrame constructors, and for reindex().
We just can't support Sequence


Please consider fixing issues detected by repository checker

Notification from ioBroker Check and Service Bot
Dear adapter developer,
I'm the ioBroker Check and Service Bot. I'm an automated tool processing routine tasks for the ioBroker infrastructure. I have recently checked the repository for your adapter solarmanpv for common errors and appropiate suggestions to keep this adapter up to date.
Please see the result of the check below.
ioBroker.solarmanpv
   -

ERRORS:

[ ] :heavy_exclamation_mark: [E204] Version "0.6.0" listed at common.news at io-package.json does not exist at NPM. Please remove from news section.

:thumbsup: No warnings found
Please review issues reported and consider fixing them as soon as appropiate.
Errors reported by repository checker should be fixed as soon as possible. Some of them require a new release to be considered as fixed. Please note that errors reported by checker might be considered as blocking point for future updates at stable repository.
You may start a new check at any time by adding the following comment to this issue:
@iobroker-bot recheck
Please note that I (and the server at GitHub) have always plenty of work to do. So it may last up to 30 minutes until you see a reaction. I will drop a comment here as soon as I start processing.
Feel free to contact me (@iobroker-bot) if you have any questions or feel that an issue is incorrectly flagged.
And THANKS A LOT for maintaining this adapter from me and all users.
Let's work together for the best user experience.
your
ioBroker Check and Service Bot
@mcm1957 for evidence

All issues reported earlier seem to be fixed now.
THANKS for your support.
This issue can be closed.
your
ioBroker Check and Service Bot


Add isResizable to window attributes

It seems that the ability to say that a window is not reszisable is missing.
Looking in the Sourcecode of androidx.compose.desktop.Window the window is set to not be reszisable when locked, so the ability to set a window to be not reszisable is there but it is not exposed to the developer.
A implementation could be like the centered boolean atribute.
If this is already possible and i just missed how to do it please feel free to close the issue.

@devBNiebes looks like you can do it something like this:
AppManager.windows[0].window.isResizable = false
But I think it's only a temporary solution

@Rsedaikin is it still relevant?

Added in version 0.3.0-build138. See the updated Window control API tutorial.

Added in version 0.3.0-build138. See the updated Window control API tutorial.

Please check the following ticket on YouTrack for follow-ups to this issue. GitHub issues will be closed in the coming weeks.


Do not run 'odo-infra-stage-test' Workflow on PRs if not needed

What type of PR is this:
/kind bug
/area infra
/area testing
What does this PR do / why we need it:
Currently, the odo-infra-stage-test job runs on all PRs (and ends up failing), even if the PR has not changed anything in scripts/ansible:

The job ends up failing and we manually have to override it.
This PR makes sure not to run it if not needed.
There is one additional point related to this job (see https://github.com/redhat-developer/odo/issues/6813#issuecomment-1549859387), but that can be addressed later.
Which issue(s) this PR fixes:
Related to #6813
This way, we won't need to manually override this job on all PRs.
PR acceptance criteria:

[ ] Unit test

[ ] Integration test

[ ] Documentation

How to test changes / Special notes to the reviewer:

/override ODO-PODMAN-TEST


can I use this on memuPlay

The x64 PC emulator running Android arm32/arm64 uses Houdini.
transcoding, it will cause libil2cpp.so not to be found directly in memory, and then it's not open source, so it's recommended to use the real machine.

The x64 PC emulator running Android arm32/arm64 uses Houdini. transcoding, it will cause libil2cpp.so not to be found directly in memory, and then it's not open source, so it's recommended to use the real machine.

use --realm=emulated option it will work. after using B() some error appears and when using b() function for Methodptr-soaddr method it becomes unresponsive and neither does the application

Give me a download link and I'll try it out

Give me a download link and I'll try it out

link game or link MemuPlay

It works on xiaomi 8.
Get a rooted real machine to play with, before you're tortured by inexplicable circumstances

I think I remember having this problem before, did you confirm that you are using the latest version of the code? Or change the frida-tools version.

I'm using this version now

I'm using this v
/

I'm using this version now

i use version 16.0.9


feat: add fireworks model provider

fyi the example run is failing because we're running an older version of the cli package (directly from npm) - which does not set the GITHUB_OUTPUT variable


How do you preventDefault (as in prevent form submission)

When there are validation errors present, I would like to stop the form from submitting and only submit the form if no validation errors are present. What's the best way to achieve that behavior with elm-simple-form?
Thanks

Hey,
If I understood corretly, you should use the onSubmit attribute in the Html.Events package, like:
view : ViewModel -> Html Msg
view model =
    Html.form
        [ Html.Events.onSubmit (onSubmitMsg model.form) ]
        [ ... -- Your form view
        , Html.button [ type' "submit" ] [ text "Send" ]
        ]

onSubmitMsg form =
    case Form.getOutput form of
        Nothing -> FormMsg Form.Submit
        Just validForm -> Submit validForm

This works because the onSubmit event already comes with preventDefault = True. If you need different behavior, use onWithOptions to create a customized version of onSubmit.

Hello,
Do you want to prevent the browser submit event or something else?
Could you provide some code to show what you're trying to do?

I haven't got chance to try what @pablohirafuji said but yes, what I want is to prevent the browser submitting the form if validations are not passing.

Okey, so alternatively you can also use a basic button for submit, or avoid using the form tag.

Not using the form tag means I loose a few things like auto submit on enter (and not sure if it's valid HTML).
Here's the code: https://gist.github.com/chalmagean/f06eea7cf00c156456f463621958d848
The problems is that Html.form expects List (Html Msg) and I'm giving it List (Html Form.Msg). So I'm  still not sure how to fix this.

Hey,
On submit you are double mapping to FormMsg (in line 70 as Html.map FormMsg and line 113 FormMsg Form.Submit). Don't map the attributes, just the formView, and you will have to handle the Submit case. Here's an example: https://gist.github.com/pablohirafuji/46c452341853f8693dee5fa90c877731.

@pablohirafuji sweet! That seems to work.


Maybe there is a mistake in the line 98 of "swin_transformer.py"

In line 98 of https://github.com/microsoft/Swin-Transformer/blob/main/models/swin_transformer.py
self.scale = qk_scale or head_dim ** -0.5 , if qk_scale is not none, the value of self.scale will always be qk_scale, which is inconsistency with the self-attention equation in "Attention is all you need" and Eq.4 in the paper.
I think it should be self.scale = (qk_scale or head_dim) ** -0.5 ?
@zeliu98

Hi @DavidZhang88, this is not a bug.
By default, qk_scale is None, and self.scale is set to head_dim ** -0.5, which is consistent with "Attention is all you need".
But we also allow self.scale to be a manually set constant value qk_scale (when qk_scale is not None). Though this is not consistent with "Attention is all you need", it can be helpful in some situations.

Oh, my bad, thank you so much for your instruction. I am sorry for my misunderstanding you code.  T_T
I hope you will obtain bigger achievement in the field of computer vision! Thank you again！^_^


Update base and introduce compare_by ordering

In this PR we update base to the freshest version — SNAPSHOT.53.
This version includes the new compare_by option, which describes the natural ordering for message instances. The option is hereby applied to the time-bearing types.

OK, so it does nothing for now. We use it just as a marker, right? And it's up to the tooling to actually generate the comparator/make the type comparable according to the options.

@yuri-sergiichuk, yes, it is merely a declaration for now. We will later allow to generate code for Java Comparables via ProtoData.


EXC_BAD_ACCESS Crash in collectionViewLayout

I am using XLPagerTabStrip 3.0 for my objective C project. I  made a ViewController which is a subclass of XLButtonBarPagerTabStripViewController and made a storyboard of my ViewController and connected all subviews like buttonBarView, containerView(scroll View) with original xlpagertabstrips files. But whenever I run my project it got crashes on the line
UICollectionViewLayoutAttributes *attributes = [self layoutAttributesForItemAtIndexPath:selectedCellIndexPath];

in XLButtonBarView.m file.
Showing EXC_BAD_ACCESS (code=1, address=0x0). I am not getting this issue and not even able to debug it . Please help!

I had similar issue, on my main controller, I forgot to call super.viewDidLoad() inside my viewDidLoad() function, check methods you override and don't forget to call super.*() when needed


What would a websocket API look like?

Let's start to check with how it would look, and see if it fits into the current approach.

Websocket has a basic implementation. Needs refinement and tests though...


Consider disabling regression of GPC

The "Securefox" script disables GPC (i.e. "Do not track"), with the sole purpose of reducing tracking. The only argument going for it is that it's "honored by some top ranked sites", without acknowledging the fact that it's abused as a way for fingerprinting on many sites as well. Most people use content blockers such as uBO anyway, which block most trackers, so GPC isn't providing any help.

Please read the section again and explore some of the links. GPC is not the same as Do Not Track. I have explained this elsewhere.
Unlike Do Not Track, GPC actively changes site settings. I have observed sites altering their settings after receiving the GPC signal.
GPC is also legally enforced.


Should FetchEventInit inherit EventInit or ExtendableEventInit?

As FetchEvent inherits ExtendableEvent now, we should inherit ExtendableEventInit in FetchEventInit.

Thanks @paritosh-in!

Tracked in crbug.com/411193


New comics

Can you add Mr. Lovenstein to Daily Comics?
https://www.mrlovenstein.com
Thank you for Daily Comics app!

Yo man, Please add these comics to the app:
catversushuman.com
warandpeas.com
catanacomics.com
I love your app!!!
Best, Maria

For "War and  Peas" there is PR #132.
For all other comics mentioned above, anybody can follow the guidelines for adding a new comic and pose a pull-request.


[fluentd]fix mod version

https://github.com/chatwork/dockerfiles/pull/1298#issuecomment-1192065748

@cw-sakamoto
Please write the reason in the description of the PR.


[Adaptive] Support Foreach Step

Foreach is needed in Email and Calendar scenario.
For examples, if bot ask the user email recipients, user can say, A, B, and C.
we need to resolve them one by one.

Here's a PR for the JS side:
https://github.com/microsoft/botbuilder-js/pull/955

I currently have two separate steps:

ForEach which enumerates the individual items of an array or collection.
ForEachPage which enumerates arrays or collections in pages.

We should decide if we wish to combine these into one step.

Fixed in PR #1994


SOLR-10466: setDefaultCollection should be deprecated in favor of SolrClientBuilder methods

https://issues.apache.org/jira/browse/SOLR-10466
Description
SolrClient's should be immutable, and right now for CloudSolrClient the defaultCollection is part of the state and changeable.
Solution
Moving setDefaultCollection to Builder, and seeing what impact that has.   It appears to mostly be a lot of clean up of tests?
Tests
Please describe the tests you've developed or run to confirm this patch implements the feature or solves the problem.
Checklist
Please review the following and check all that apply:

[ ] I have reviewed the guidelines for How to Contribute and my code conforms to the standards described there to the best of my ability.
[ ] I have created a Jira issue and added the issue ID to my pull request title.
[ ] I have given Solr maintainers access to contribute to my PR branch. (optional but recommended)
[ ] I have developed this patch against the main branch.
[ ] I have run ./gradlew check.
[ ] I have added tests for my changes.
[ ] I have added documentation for the Reference Guide

@stillalex would love you eyes on this...

We have places in our tests where the code looks like:
    indexDoc("collection2", getDoc(id, "10000000"));
    indexDoc("collection2", getDoc(id, "10000001"));
    indexDoc("collection2", getDoc(id, "10000003"));
    getCommonCloudSolrClient().setDefaultCollection("collection2");
    getCommonCloudSolrClient().add(getDoc(id, "10000004"));
    getCommonCloudSolrClient().setDefaultCollection(null);

    indexDoc("collection3", getDoc(id, "20000000"));
    indexDoc("collection3", getDoc(id, "20000001"));
    getCommonCloudSolrClient().setDefaultCollection("collection3");

We could just have multiple clients for each default collection?  We could have some sort of map of clients by default collection so you pick the one you need..  "null", "collection2", "collection3"....

Okay, now I need some ideas @stillalex @dsmiley....   I've migrated to the Builder all the examples where we create a new SolrCloudClient, so it's easy to add the builder logic.   The remaining ones all basically are reusing a SolrClient inherited from the base test class.   For example, in TestTrackingShardHandlerFactory we have the method:
cluster.getSolrClient().setDefaultCollection(COLLECTION);

I think what we could change is to have a method like cluster.getSolrClientForCollection(COLLECTION) and it looks up a map of SolrClients by collection name, and if it has it, returns it, and if it doesn't have it, then creates it.   Then in our cleanup code we shut them all down?
Alternatively, we could just create our CloudSolrClient right there, and not try to reuse them.  Then we could introduce more try/with resources patterns in those tests....?

@dsmiley there are 45 more tests that I need to fix.   I wanted to just check in that the way I am migrating the tests makes sense to you?

Okay, at this point, a bit stuck.   I thought, hey, maybe I should introduce some sort of getSolrClientForCollection(String collectionName), and so I did in #e8dfd99e6c2d3878cc6517c111d9828270973bdd, however if you look at it, it's kind of silly.  at taht point I might as well just use the method getSolrClient().add(collectionName,docs) instead!
I could just update the cluster.solrClient to be the one created after creating the collection?  and toss the old one?

I also in #10b5061 just pushed up another idea, which is adding to the MiniSolrCluster a setDefaultCollection that would change the default getSolrClient ???

I wish Crave was running these tests ;-)   It's gotten in that weird state, and I'm nervous about messing with git to try and fix it...

Okay, I think I am done!   Every CloudSolrClient.setDefaultCollection call has been removed from the tests.   I'd love some review with an eye to merging to main next week, and letting the tests run a few days, and then backport to branch_9x.


[monorepo] task: clean up repo

rename folders
nem.core => core
nem.deploy => deploy
nem.peer => peer
move package folder and scripts to infra folder. also update scripts.
move Dockerfile and build.sh to infra/docker

Push update


following the docs for local pv lvm produces an error

related: https://github.com/openebs/lvm-localpv/issues/349

sudo snap install microk8s --classic --channel=1.31

truncate -s 5G /tmp/disk.img
sudo losetup -f /tmp/disk.img --show

# use the name of the disk from that last command and put it here:
sudo pvcreate /dev/loop<?>
sudo vgcreate lvmvg /dev/loop<?>       ## here lvmvg is the volume group name to be created

microk8s helm install openebs --namespace openebs openebs/openebs --set engines.replicated.mayastor.enabled=false --set engines.local.zfs.enabled=false --create-namespace

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: openebs-lvm
provisioner: local.csi.openebs.io
parameters:
  storage: "lvm"
  volgroup: "lvmvg"
volumeBindingMode: WaitForFirstConsumer     ## note: when this is replaced with "Immediate" it creates a pv successfully, but the pod still can't use it for some reason

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: lvm-local-pvc
spec:
  storageClassName: openebs-lvmpv
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1G
    limits:
      storage: 1G

apiVersion: v1
kind: Pod
metadata:
  name: lvm-task-pv-pod-2
spec:
  volumes:
    - name: lvm-task-pv-storage
      persistentVolumeClaim:
        claimName: lvm-local-pvc
  containers:
    - name: task-pv-container
      image: nginx
      ports:
        - containerPort: 80
          name: "http-server"
      volumeMounts:
        - mountPath: "/hypermount"
          name: lvm-task-pv-storage

ERROR:
Warning  FailedScheduling  99s   default-scheduler  0/1 nodes are available: 1 node(s) did not have enough free storage. preemption: 0/1 nodes are available: 1 Preemption is not helpful for scheduling.


Expose isSamePage to turbo:visit events

#298 was a very welcome change, as now I can drop data: { turbo: !current_page?(thing_path) } from links that are anchors on the current page. However, turbo:visit events now fire for visits to anchors on the same page. I'm sure this is potentially useful in some ways, but for now, it's meant that I've had to go from hooking into turbo:visit to using turbo:before-visit as follows:
import isEqual from "lodash.isequal"

document.addEventListener("turbo:before-visit", function (e) {
  const attributes = ({ origin, pathname }) => ({ origin, pathname })
  if (
    !isEqual(attributes(window.location), attributes(new URL(e.detail.url)))
  ) {
    // do things here
  }
})

What I'm doing there is pulling the origin (http://example.com) and the pathname (/blog, without an anchor or any query params) from the window location before the request is processed, and comparing it with those the target URL. If they're identical, then it's safe to say we shouldn't do what would otherwise be triggered under turbo:visit.
It'd be nicer to be able to, for example, do this:
document.addEventListener("turbo:visit", function (e) {
  if(e.samePage) { return; }
  // do things here
})

cc @domchristie Does seem a bit surprising for turbo:visit to fire if you're staying on the same page? Like DOMElementLoaded or whatever it is wouldn't fire for that.

Does seem a bit surprising for turbo:visit to fire if you're staying on the same page?

I tend to agree. The same-page anchor system does use a Visit to do it's thing, but the fired events do seem weird. Here are the events during a same-page visit:

turbo:click
turbo:before-visit
turbo:visit
turbo:before-cache

This could lead to some odd situations, particularly if people are tearing down JavaScript behaviour on turbo:before-cache
I think same-page visits should be "silent" i.e. not fire turbo:before-visit, turbo:visit, or turbo:before-cache. This would also echo the behaviour that the native adapters take.

Yes, that makes sense to me. Let's do that.

This would resolve my original issue. And I suppose visits as a feature here are redundant, as the same thing could be achieved with event listeners on the target elements. I'm happy with this approach.

Turns out my original fix for this issue has a bug. I was doing this:
document.addEventListener("turbo:before-visit", function (e) {
  // Subject to hotwired/turbo#321
  const attributes = ({ origin, pathname }) => ({ origin, pathname })
  if (
    !isEqual(attributes(window.location), attributes(new URL(e.detail.url)))
  ) {
    window.ga("send", "pageview", e.detail.url)
  }
})

However, since I'm having to use the before-visit event to figure this out, I can't track visits to pages from a fresh page load.
This feels like a lot for me to ask, but a bugfix release would be appreciated. I've been trying to install via yarn add github:hotwired/turbo#d45bf3fa40f9ea284dcd11d6c46b70b22e898c54, but this hasn't been working, presumably because the package itself isn't built.

Latest builds are available here from https://github.com/hotwired/dev-builds/releases, so I think you could try:
yarn add<EMAIL_ADDRESS>


4.4.x package is missing docs

xml files are missing in the package
4.4 beta

4.3.5:

fixed by https://github.com/NLog/NLog/pull/1160/commits/d22716e6b2e6f518f62d2f57eeb75beeed5c6063


upgrade to Julia 0.7

This is a progress tracker for an update to Julia 0.7. In particular, I'm interested in an operational connection to LinearMaps.jl, where there should appear a copy-pastable example (including a call to tsvd) soon on the README page. Besides the usual 3-args mul! there appears to be need for a 5-args mul! in TSVD.jl. This is provided for LinearMaps with rearranged arguments (compared to the 5-args A_mul_B!): mul!(C::AbstractVector, A::LinearMap, B::AbstractVector, α::Number=1, β::Number=0), seemingly in accordance with the Julia 0.7 mul! interface.

Fixed by https://github.com/andreasnoack/TSVD.jl/commit/497ab28c0c6c75fc0c8e660efb18b706f5df3e18. I'll make a new release shortly.

Runs like a charm with LinearMaps.jl! 👍


Hello World under standard user fails with Ubuntu/GNOME

I don't know if the Getting Started steps are implied to be run as root (they don't appear to be because the installation steps specify sudo), but I get a variety of permissions errors when attempting to run dotnet run as a standard non-root user under Ubuntu with GNOME. It looks like Hello World is trying to access hidden directories.
It started with my .gvfs from my HOME directory and, after granting permissions to it, continued with .cache/dconf. I stopped there.
sudo dotnet run works fine. However, I'm curious if anyone knows why the steps don't work OOTB. Thanks.

Steps to reproduce:
Start a fresh ubuntu 14.04 instance.
sudo apt-key adv --keyserver apt-mo.trafficmanager.net --recv-keys 417A0893
echo "deb [arch=amd64] http://apt-mo.trafficmanager.net/repos/dotnet/ trusty main" > sudo tee /etc/apt/sources.list.d/dotnetdev.list
sudo apt-get update
sudo apt-get install --no-install-recommends dotnet
mkdir a
cd a
dotnet new
dotnet restore

hangs after a single log line:
log  : Restoring packages for /home/ubuntu/a/project.json...

I do not even get permission denied errors.
Running sudo dotnet restore shows info messages for requested urls almost immediately after invoking. As non-root (the ubuntu user) dotnet restore hangs indefinitely.
The package version is <IP_ADDRESS>793-1

I have this same issue; In my case, IPv6 is the preferred address lookup, and it's hanging. I moved IPv4 ahead of IPv6 in the precedence by adding the line
precedence ::ffff:0:0/96 100
in the file /etc/gai.conf

Hm, this is strange. I was not able to repro this on Linux Mint or on Ubuntu 14.04. I will close down this issue, but if this behavior still repros, can you please open up a new issue in the dotnet/cli repo? Thanks!


[BD-35] feat: add iconbefore and iconafter props to button component

@abutterworth
Ticket on Jira: https://openedx.atlassian.net/browse/PAR-267
Add iconBefore and iconAfter props to Button component

Example code:
import { Button } from '@edx/paragon';
import { Close } from '@edx/paragon/icons';

...

<Button
  variant="brand"
  iconBefore={Close}
>
   Brand
</Button>

Thanks for the pull request, @jignaciopm! I've created OSPR-5733 to keep track of it in JIRA, where we prioritize reviews. Please note that it may take us up to several weeks or months to complete a review and merge your PR.
Feel free to add as much of the following information to the ticket:

supporting documentation
Open edX discussion forum threads
timeline information ("this must be merged by XX date", and why that is)
partner information ("this is a course on edx.org")
any other information that can help Product understand the context for the PR

All technical communication about the code itself will be done via the GitHub pull request interface. As a reminder, our process documentation is here.
Please let us know once your PR is ready for our review and all tests are green.

@jignaciopm Thank you for your contribution. @abutterworth Will you review and merge when time comes?

Fixed! @abutterworth

@abutterworth fixed all!
I had to add a class specification in Modal.test.jsx to avoid conflict with the new implemented.

Coverage decreased (-0.03%) to 89.788% when pulling 166e5831d644f4ca762ddff1cf84034b77a0fbbc on eduNEXT:jipm/PAR-267 into 2e4dc9e5030542fcccd912b334c1f9b14e90f7dd on edx:master.

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

npm package (@latest dist-tag)
GitHub release

Your semantic-release bot :package::rocket:


Added isindex function.

Please check if this is the right format for the "exclude" flag.
Closes #30

The tests are failing on master and are unrelated.

It should also include the base index types. For integer indices the most correct thing is to check if operator.index raises an exception or not.

By "base" I mean built-in, like tuple, slice, int, etc., as well as valid index numpy arrays (is it possible numpy already has such a function?).

Sorry it took me so long, let me know if this is enough.

This looks good to me. CC @asmeurer

It looks like there are some conflicts here now

Closing this as I assume it's not relevant anymore, cheers!


moving app check up

now that we require apps to exist when deploying them, we should check whether
the app exists before running around and bumping and creating images and all
that, this makes that change. for deploy all this reduces the number of api
calls substantially, we were checking the app each function. obviously this
whole thing is not really atomic, so it can fail pretty spectacularly, but we
aren't really worried about that (and arguably this code is much safer to
delete-create race deploying to 'the wrong app' since it uses id all the way
through for deploy all)
cleaned up error handling to only create functions, triggers, and apps if they
don't exist, not just if any error happens. saves some api calls when service
is down or something, but mostly it doesn't mask any errors from doing the
original get when it's not a not found error (things like permissions this
could be useful).
reduced api calls by one when a function doesn't exist (we don't need to go
get it after creating, the api returns it with the id filled in). /sarcasticwoo

move app yaml deploy up to app get/create at the top of deploy, reduces
calls to get and create app and cleans up the code
fix deploy of app.yaml logic error, this test was previously passing that
should have failed, because using an app.yaml meant incidentally that the app
would get created if necessary
add additional tests to see that app.yaml deploy actually sets the config
and an additional test that it works for both create and update of an app
cleaned up deploy to use app object code for cleanliness (error handling
improvements)
make tests use test fatal facilities and not log package

not having a good time trying to run tests locally... will fix CI up tonight/tomorrow if it's still broken (WIP then..)

thanks @riconnon


actions: introduce handle_potential_conflicts.py to only warn on true conflicts. Fail CI when there is a conflict

The CI action will now run on any any change to the PR, or a review on the PR, such that the conflict information is hopefully as up to date as possible.

should be resolved :) :see_no_evil:


docker run nes fails on GLX init

Hello
I'm Trying to run the following command on Ubuntu 17.10 (artful) with docker 17.12.1-ce:
docker run --rm --device /dev/snd  -v /tmp/.X11-unix:/tmp/.X11-unix  -e DISPLAY=unix$DISPLAY  --device /dev/dri  jess/nes /games/zelda.rom
I needed to run xhost + to disable acces control on the xserver. The following errors remain:
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.rear
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.center_lfe
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.side
ALSA lib pcm_route.c:867:(find_matching_chmap) Found no matching channel map
ALSA lib pcm_route.c:867:(find_matching_chmap) Found no matching channel map
ALSA lib pcm_route.c:867:(find_matching_chmap) Found no matching channel map
ALSA lib pcm_route.c:867:(find_matching_chmap) Found no matching channel map
libGL error: No matching fbConfigs or visuals found
libGL error: failed to load driver: swrast
GLFW: An uncaught error has occurred: PlatformError: Linux: Failed to watch for joystick connections in /dev/input: No such file or directory
GLFW: Please report this bug in the Go package immediately.
PlatformError: Linux: Failed to open joystick device directory /dev/input: No such file or directory
VersionUnavailable: GLX: Failed to create context: BadMatch (invalid parameter attributes)

Do sound and joystcik errors prevent the container to start? Or is it only the final GLX error which prevents it to start?
Thanks if you can help

hmm weird this worked for me

@khelkun  Do you have an nvidia card? In that case try without --device /dev/dri.

@khelkun Do you have an nvidia card? It may still cause the issue.
You can try to run jess/nes in Xephyr instead of your host display. Xephyr runs entirely with software rendering.
Setup examples with Xephyr: https://github.com/mviereck/x11docker/wiki/Short-setups-to-provide-X-display-to-container

@mviereck, sorry yes I have a NVidia GK107 [NVS 510]
Launch through Xephyr succeds, thanks


Validation Split causing  ResourceExhaustedError: OOM when allocating tensor with shape[54000,128,128,3]

Everything goes fine when I don't give validation_split while fitting the model.  Why is doing so? Does validation split need more memory although the data is being divided between training and validation right after the passing validation_split argument to model.fit() function.
What could be the reasons of this odd behavior?
`
ResourceExhaustedError                    Traceback (most recent call last)
 in
----> 1 history = model.fit(train_images,train_labels, batch_size=batch_size, epochs=epochs,
2                     validation_split=0.1, callbacks=[callback], shuffle=True)
~/.conda/envs/my_env/lib/python3.8/site-packages/tensorflow/python/keras/engine/training.py in _method_wrapper(self, *args, **kwargs)
64   def _method_wrapper(self, *args, **kwargs):
65     if not self._in_multi_worker_mode():  # pylint: disable=protected-access
---> 66       return method(self, *args, **kwargs)
67
68     # Running inside run_distribute_coordinator already.
~/.conda/envs/my_env/lib/python3.8/site-packages/tensorflow/python/keras/engine/training.py in fit(self, x, y, batch_size, epochs, verbose, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch, steps_per_epoch, validation_steps, validation_batch_size, validation_freq, max_queue_size, workers, use_multiprocessing)
793       # Tensor and NumPy input.
794       (x, y, sample_weight), validation_data = (
--> 795           data_adapter.train_validation_split((x, y, sample_weight),
796                                               validation_split=validation_split,
797                                               shuffle=False))
~/.conda/envs/my_env/lib/python3.8/site-packages/tensorflow/python/keras/engine/data_adapter.py in train_validation_split(arrays, validation_split, shuffle)
1335     return array_ops.gather_v2(t, indices)
1336
-> 1337   train_arrays = nest.map_structure(
1338       functools.partial(_split, indices=train_indices), arrays)
1339   val_arrays = nest.map_structure(
~/.conda/envs/my_env/lib/python3.8/site-packages/tensorflow/python/util/nest.py in map_structure(func, *structure, **kwargs)
615
616   return pack_sequence_as(
--> 617       structure[0], [func(*x) for x in entries],
618       expand_composites=expand_composites)
619
~/.conda/envs/my_env/lib/python3.8/site-packages/tensorflow/python/util/nest.py in (.0)
615
616   return pack_sequence_as(
--> 617       structure[0], [func(*x) for x in entries],
618       expand_composites=expand_composites)
619
~/.conda/envs/my_env/lib/python3.8/site-packages/tensorflow/python/keras/engine/data_adapter.py in _split(t, indices)
1333       return t
1334     t = ops.convert_to_tensor_v2(t)
-> 1335     return array_ops.gather_v2(t, indices)
1336
1337   train_arrays = nest.map_structure(
~/.conda/envs/my_env/lib/python3.8/site-packages/tensorflow/python/util/dispatch.py in wrapper(*args, **kwargs)
178     """Call target, and fall back on dispatchers if there is a TypeError."""
179     try:
--> 180       return target(*args, **kwargs)
181     except (TypeError, ValueError):
182       # Note: convert_to_eager_tensor currently raises a ValueError, not a
~/.conda/envs/my_env/lib/python3.8/site-packages/tensorflow/python/ops/array_ops.py in gather_v2(params, indices, validate_indices, axis, batch_dims, name)
4533               batch_dims=0,
4534               name=None):
-> 4535   return gather(
4536       params,
4537       indices,
~/.conda/envs/my_env/lib/python3.8/site-packages/tensorflow/python/util/dispatch.py in wrapper(*args, **kwargs)
178     """Call target, and fall back on dispatchers if there is a TypeError."""
179     try:
--> 180       return target(*args, **kwargs)
181     except (TypeError, ValueError):
182       # Note: convert_to_eager_tensor currently raises a ValueError, not a
~/.conda/envs/my_env/lib/python3.8/site-packages/tensorflow/python/ops/array_ops.py in gather(failed resolving arguments)
4522     return params.sparse_read(indices, name=name)
4523   except AttributeError:
-> 4524     return gen_array_ops.gather_v2(params, indices, axis, name=name)
4525
4526
~/.conda/envs/my_env/lib/python3.8/site-packages/tensorflow/python/ops/gen_array_ops.py in gather_v2(params, indices, axis, batch_dims, name)
3753         pass  # Add nodes to the TensorFlow graph.
3754     except _core._NotOkStatusException as e:
-> 3755       _ops.raise_from_not_ok_status(e, name)
3756   # Add nodes to the TensorFlow graph.
3757   if batch_dims is None:
~/.conda/envs/my_env/lib/python3.8/site-packages/tensorflow/python/framework/ops.py in raise_from_not_ok_status(e, name)
6651   message = e.message + (" name: " + name if name is not None else "")
6652   # pylint: disable=protected-access
-> 6653   six.raise_from(core._status_to_exception(e.code, message), None)
6654   # pylint: enable=protected-access
6655
~/.conda/envs/my_env/lib/python3.8/site-packages/six.py in raise_from(value, from_value)
ResourceExhaustedError: OOM when allocating tensor with shape[54000,128,128,3] and type float on /job:localhost/replica:0/task:0/device:GPU:0 by allocator GPU_0_bfc [Op:GatherV2]
`

Few days ago I got same issue like this.
if you use TF2, try this:

restart your kernel and clear the output
clean your GPU-memory (in linux)
sudo kill -9 *PID*
you can check PID number with nvidia-smi
Run this code
from tensorflow.compat.v1 import ConfigProto
from tensorflow.compat.v1 import InteractiveSession
config = ConfigProto()
config.gpu_options.allow_growth = True
session = InteractiveSession(config=config)

I don't have much experience with this, but it works well for me
note: check your GPU-memory availability too!

@shuaibaslam2019,
In order to reproduce the issue reported here, could you please provide the TensorFlow version, the complete code and the dataset you are using.
And to resolve the OOM issue, please set a hard limit on the total GPU memory as shown in this guide. Thanks!

@shuaibaslam2019,
In order to reproduce the issue reported here, could you please provide the TensorFlow version, the complete code and the dataset you are using.
And to resolve the OOM issue, please set a hard limit on the total GPU memory as shown in this guide. Thanks!

I am using Tensorflow version 2.2.0 and keras 2.3.4.  I am using Fashion-Mnist dataset.
history = model.fit(train_images,train_labels, batch_size=64, epochs=15,                     validation_split=0.2, shuffle=True)

@shuaibaslam2019,
Could you please share the Python script/notebook you are running, so that we can reproduce the issue on our end.

And to resolve the OOM issue, please set a hard limit on the total GPU memory as shown in this guide.

Also, please try the above mentioned workaround and let us know if you are facing the same issue. Thanks!


Upgrade to go-docker-machine v0.5.0

Also upgrades to docker-machine v0.2.0-rc3

ping @cloudnautique @will-chan


Reading in molecules

Hello apologies if this has an easy solution, if so then it is very hard to find.
I would like to use library however it doesn't seem like there are any examples of reading in many molecules. I am looking to work with either sdfs or rdkit mols but it is very hard to transform them into whatever data structure you are using.
Can you please have an example of creating structures by reading in an sdf with multiple molecules or with a list of rdkit mols? I can also convert sdf to xyz but I don't know how to get xyz file with multiple molecules into multiple structures.

Hi!
The basic tutorial should cover this to some extent. If you look at the first step in that tutorial, it shows you that you need to transform your structures into ASE.Atoms. In your case, you just need to call the read function from ASE on e.g. your sdf-file. If your sdf file contains multiple molecules, the ase.io.read function can return a list of all of them (by using the argument index=":") You can find more details about the I/O capabilities of ASE at their homepage. Perhaps I could add a separate tutorial for working with larger datasets.
Hope this helps!

Hi, thank I think part of the reason was I never heard of ASE before. Passing in index=":" still gives only the first molecule. Looking at ase.io.sdf.read_sdf https://wiki.fysik.dtu.dk/ase/_modules/ase/io/sdf.html#read_sdf it seems like they only read the first molecule as well. I could get around this but I was wondering what do you do for larger datasets. Are you really storing hundreds of thousands of files somewhere?

Hi,
You're right: ASE seems to actually have a very limited support for sdf files. If you want to stick to sdf files, you will have to read them with some other software and then construct ase.Atoms from them. This should be easy, if you have problems let me know.
As for using multiple configurations in general: It definitely makes sense to store large datasets in a single file. In the ASE.io page, you can see a table of the file formats that support reading and writing multiple configurations. I have typically used the extended xyz-format (.extxyz).
Just out of curiosity, what kind of data structure do you use to work with atomistic structures? Are you using some other library or something custom? So far ASE has been the easiest to work with, so we went with it. But if there are better and more widely accepted alternatives then we can reconsider.

I primarily work with protein / ligand interactions and proteins are usually in pdb format, whereas ligands are usually sdfs. I have not seen ASE or xyz be used in many places. The main library that we use is RDKit, so a direct way to go from RDKit to ASE would be good, but RDKit to your featurizations would be best.
Right now I am doing RDKit to sdf to ASE which doesn't seem great, but at least it works :P


CronWorkflow update command

Hi maintainers.
I want to use hera-workflows to deploy system.
In order to do it, I want to update the previous CronWorkflow.
To achieve it, hera-workflows should have following options.

option to skip name suffix

https://github.com/argoproj-labs/hera-workflows/blob/main/src/hera/cron_workflow.py#L84

CronWorkflow.update command

I want to create PR, if it is ok.
Thank you.

Hi @kitagry! The name suffix was brought up in a different conversation as well in order to support actions like the one you mentioned - users want to name their workflows in one way and Hera not modify the name on their behalf, so users can perform update, delete, get, etc. Maybe it's time to remove that from Hera and, since it's a breaking change, it will be released under version 3.0.0. I will mark this as an enhancement!


Type conversion error

Trying to use this and getting the following error:
{"timestamp":"2018-08-14T00:29:19.775245+0000","level":"debug","message":"handling event","event_data":"{\"client\":{\"name\":\"sensu-client-c6nxx\",\"address\":\"<IP_ADDRESS>\",\"deregister\":true,\"deregistration\":{\"handler\":\"deregistration\"},\"subscriptions\":[\"client:sensu-client-c6nxx\"],\"version\":\"1.2.0\",\"timestamp\":1534206543},\"check\":{\"handler\":\"deregistration\",\"status\":1,\"name\":\"deregistration\",\"output\":\"client initiated deregistration\",\"issued\":1534206559,\"executed\":1534206559,\"type\":\"standard\",\"history\":[\"1\"],\"total_state_change\":0},\"occurrences\":1,\"occurrences_watermark\":1,\"action\":\"create\",\"timestamp\":1534206559,\"id\":\"40aa024a-7843-4d66-b08b-b4ee380b3aeb\",\"last_ok\":1534206559,\"last_state_change\":1534206559,\"silenced\":false,\"silenced_by\":[]}","event":{"id":"40aa024a-7843-4d66-b08b-b4ee380b3aeb"},"handler":{"type":"extension","name":"deregistration"}}
{"timestamp":"2018-08-14T00:29:19.775537+0000","level":"info","message":"handler extension output","extension":{"type":"extension","name":"deregistration"},"event":{"id":"40aa024a-7843-4d66-b08b-b4ee380b3aeb"},"output":"TypeError: no implicit conversion of Symbol into Integer\n  /etc/sensu/extensions/deregistration.rb:54:in `[]'\n  /etc/sensu/extensions/deregistration.rb:55:in `block in run'\n  /opt/sensu/embedded/lib/ruby/gems/2.4.0/gems/eventmachine-1.2.5/lib/eventmachine.rb:1076:in `block in spawn_threadpool'","status":2}

Any clues?

Okay, I figured this out.
The issue seems to be here: https://github.com/sensu-plugins/sensu-extensions-deregistration/blob/master/lib/sensu/extensions/deregistration.rb#L54
This isn't actually a hash containing parsed JSON, it's a string containing literal JSON. I added:
event_data = MultiJson.load(event, symbolize_keys: true

And then referenced event_data everywhere instead, and it worked. I can send a PR request if needed.
It's worth noting I'm loading this extensions as a legacy extension.


Aws::Client::AWSAuthV4Signer::GenerateSignature declared but not defined

Describe the bug
Class Aws::Client::AWSAuthV4Signer declares a public method:
https://github.com/aws/aws-sdk-cpp/blob/main/src/aws-cpp-sdk-core/include/aws/core/auth/signer/AWSAuthV4Signer.h#L168
Aws::String GenerateSignature(const Aws::Auth::AWSCredentials& credentials,
  const Aws::String& stringToSign, const Aws::String& simpleDate) const;

... but this method is not defined
The only overloads of GenerateSignature that are defined in the source code are both private methods of AWSAuthV4Signer:
https://github.com/aws/aws-sdk-cpp/blob/main/src/aws-cpp-sdk-core/source/auth/signer/AWSAuthV4Signer.cpp#L469C1-L477C1
Aws::String AWSAuthV4Signer::GenerateSignature(const AWSCredentials& credentials, const Aws::String& stringToSign,
        const Aws::String& simpleDate, const Aws::String& region, const Aws::String& serviceName) const;

Aws::String AWSAuthV4Signer::GenerateSignature(const Aws::String& stringToSign, const ByteBuffer& key) const;

Expected Behavior
I expect to be able to link against the public method.
Current Behavior
Program fails to link against missing symbol.
s3-test.o: in function `S3Test_ListBuckets_Test::TestBody()':
    s3-test.cpp:307: undefined reference to `Aws::Client::AWSAuthV4Signer::GenerateSignature(Aws::Auth::AWSCredentials const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const'
    collect2: error: ld returned 1 exit status

Reproduction Steps
int main() {
Aws::SDKOptions awsOptions{};
Aws::InitAPI(awsOptions);
auto credsProvider = std::make_sharedAws::Auth::DefaultAWSCredentialsProviderChain();
auto creds = credsProvider->GetAWSCredentials();
auto signer = Aws::Client::AWSAuthV4Signer{credsProvider, "s3", "us-east-1"};
signer.GenerateSignature(creds, "", "");
}
Possible Solution
No response
Additional Information/Context
No response
AWS CPP SDK version used
1.11.37
Compiler and Version used
gcc (GCC) 12.2.0
Operating System and version
Linux 5.15.0-75

took a look this and was able to reproduce, will look into pushing out a fix asap

merged, is available from HEAD and will be tagged in a release tomorrow.


S3 BucketLifecycleConfigurationV2RuleArgs Expiration is not deleted when set to nil

Describe what happened
we are implementing S3 Lifecycle policy for our S3 buckets and noticed that all lifecycle policy configuration works as expected except "Expiration" when 'nil' is passed to this field. We are expecting that the Expiration configuration is removed from the rule configuration but the preview shows no objects to be changed. At the same time the "Expiration" works when creating or updating(ex. changing number of days).
we have the same configuration for the "NoncurrentVersionExpiration" but in this case the configuration block works as expected - created, updated and removed.
moreover the "Expiration" configuration is removed if there are another rule changes at the same time. but it is removed silently, preview does not shows any diff for the "Expiration" configuration.
Sample program
type LifecyclePolicyRulesArgs struct {
	RuleIdSuffix                                 string
	RuleStatus                                   string
	ObjectsFilterOptions                         ObjectsFilterOptionsArgs
	ObjectsIncompleteMultipartUploadAbortOptions *ObjectsIncompleteMultipartUploadAbortOptionsArgs
	ObjectsTransitionRulesOptions                ObjectsTransitionRulesOptionsArgs
	ObjectsExpirationRuleOptions                 *ObjectsExpirationRuleOptionsArgs
	NonCurrentVersionsTransitionRulesOptions     NonCurrentVersionsTransitionRulesOptionsArgs
	NonCurrentVersionsExpirationRuleOptions      *NonCurrentVersionsExpirationRuleOptionsArgs
}

// S3 Bucket Lifecycle Rules configuration - Objects expiration
type ObjectsExpirationRuleOptionsArgs struct {
	AfterDays                  int
	AfterDate                  string
	IsExpireObjectDeleteMarker bool
}

// S3 Bucket Lifecycle Rules configuration - Noncurrent Versions expiration
type NonCurrentVersionsExpirationRuleOptionsArgs struct {
	AfterDays          int
	RetainNonCurVerQty string
}

func (args *BucketArgs) createS3LifecycleConfig(ctx *pulumi.Context) error {

	// Convert S3 Lyfecycle Rules configuration to s3.BucketLifecycleRule format
	var s3LifecyclePolicyRules s3.BucketLifecycleConfigurationV2RuleArray
	for _, lifecycleRules := range args.LifecyclePolicyOptions.Rules {

		// Parse and convert S3 Objects Expiration Rules configuration
		var s3ObjectsExpirations *s3.BucketLifecycleConfigurationV2RuleExpirationArgs
		if lifecycleRules.ObjectsExpirationRuleOptions != nil {
			s3ObjectsExpirations = &s3.BucketLifecycleConfigurationV2RuleExpirationArgs{
				Days:                      pulumi.Int(lifecycleRules.ObjectsExpirationRuleOptions.AfterDays),
				ExpiredObjectDeleteMarker: pulumi.Bool(lifecycleRules.ObjectsExpirationRuleOptions.IsExpireObjectDeleteMarker),
			}
		}

		// Build S3 Lifecycle Policy Rule
		s3LifecyclePolicyRules = append(s3LifecyclePolicyRules, s3.BucketLifecycleConfigurationV2RuleArgs{
			Status:                         pulumi.String(lifecycleRules.RuleStatus),
			Id:                             pulumi.String("s3-lifecycle-rule-" + args.BucketName + "_" + lifecycleRules.RuleIdSuffix),
			Filter:                         s3ObjectsFilters,
			AbortIncompleteMultipartUpload: s3ObjectsIncompleteMultipartUploadAbort,
			Transitions:                    s3ObjectsTransitions,
			NoncurrentVersionTransitions:   s3NonCurVerTransitions,
			NoncurrentVersionExpiration:    s3NonCurVerExpirations,
			Expiration:                     s3ObjectsExpirations,
		})
	}
	// Create S3 Lifecycle Policy Rule
	_, err := s3.NewBucketLifecycleConfigurationV2(ctx, "s3-lifecycle-policy-"+args.BucketName, &s3.BucketLifecycleConfigurationV2Args{
		Bucket: args.internal.Bucket.ID(),
		Rules:  s3LifecyclePolicyRules,
	})

	if err != nil {
		return err
	}
	return nil
}

Log output
No response
Affected Resource(s)
s3.NewBucketLifecycleConfigurationV2 Expiration
Output of pulumi about
CLI
Version      3.132.0
Go Version   go1.23.1
Go Compiler  gc
Plugins
KIND      NAME        VERSION
resource  aws         5.24.0
language  go          3.132.0
resource  kubernetes  3.30.2
Host
OS       darwin
Version  14.6.1
Arch     arm64
This project is written in go: executable='/opt/homebrew/bin/go' version='go version go1.23.1 darwin/arm64'
Dependencies:
NAME                                                                                VERSION
github.com/lib/pq                                                                           v1.10.9
github.com/pulumi/pulumi-aws/sdk/v5                                                         v5.24.0
github.com/pulumi/pulumi-kubernetes/sdk/v3                                                  v3.30.2
github.com/pulumi/pulumi/sdk/v3                                                             v3.81.0
github.com/stretchr/testify                                                                 v1.8.3
Additional context
lifecycle policy configuration declared as follows:
testing rule array
  lifecyclePolicyOptions:
    enabled: true
    rules:
    #rule №1
    #- ruleStatus: Enabled
      #ruleIdSuffix: "lifecycle_for_IncompleteMultipartUploadAbort"
      #objectsIncompleteMultipartUploadAbortOptions:
        #afterDays: 15
    #rule №2
    #- ruleStatus: Enabled
      #ruleIdSuffix: "lifecycle_for_ExpireObjectDeleteMarker"
      #objectsExpirationRuleOptions:
        #isExpireObjectDeleteMarker: true
    #rule №3
    #- ruleStatus: Enabled
      #ruleIdSuffix: "lifecycle_for_expire_tag_logs"
      #objectsFilterOptions:
        #tags:
          #rule: "log"
          #autoclean: "true"
      #objectsExpirationRuleOptions:
        #afterDays: 90
    #rule №4
    #- ruleStatus: Enabled
      #ruleIdSuffix: "lifecycle_for_transition"
      #objectsFilterOptions:
        #prefix: "log/"
        #sizeGreaterThan: 132000
        #sizeLessThan: 133000
      #objectsTransitionRulesOptions:
        #rules:
        #- afterDays: 30
          #afterDate: "2025-01-01T00:00:00Z"
          #toStorageClass: "STANDARD_IA"
        #- afterDays: 60
          #afterDate: "2026-01-02T00:00:00Z"
          #toStorageClass: "GLACIER"
    #rule №5
    #- ruleStatus: Enabled
      #ruleIdSuffix: "lifecycle_for_noncurrentversions"
      #nonCurrentVersionsTransitionRulesOptions:
        #rules:
        #- afterDays: 30
          #toStorageClass: "STANDARD_IA"
          #retainNonCurVerQtyAfterTransition: "7"
        #- afterDays: 60
          #toStorageClass: "GLACIER"
          #retainNonCurVerQtyAfterTransition: "7"
      #nonCurrentVersionsExpirationRuleOptions:
          #retainNonCurVerQty: "7"
          #afterDays: 90
    #rule №6
    - ruleStatus: Enabled
      ruleIdSuffix: "lifecycle_for_transition"
      #objectsIncompleteMultipartUploadAbortOptions:
        #afterDays: 15
      #objectsFilterOptions:
        #prefix: "log/"
        #sizeGreaterThan: 132000
        #sizeLessThan: 133000
        #tags:
          #rule_1: "log_1"
          #autoclean_1: "true_1"
        #tag:
          #key: "log_1"
          #value: "true_1"
      objectsTransitionRulesOptions:
        rules:
        - afterDays: 30
          #afterDate: "2025-01-02T00:00:00Z"
          toStorageClass: "STANDARD_IA"
        - afterDays: 60
          #afterDate: "2026-01-03T00:00:00Z"
          toStorageClass: "GLACIER"
      #objectsExpirationRuleOptions:
        #afterDays: 90
      #nonCurrentVersionsTransitionRulesOptions:
        #rules:
        #- afterDays: 30
          #toStorageClass: "STANDARD_IA"
          #retainNonCurVerQtyAfterTransition: "7"
        #- afterDays: 60
          #toStorageClass: "GLACIER"
          #retainNonCurVerQtyAfterTransition: "7"
      #nonCurrentVersionsExpirationRuleOptions:
        #retainNonCurVerQty: "7"
        #afterDays: 90

     testing rule array

Contributing
Vote on this issue by adding a 👍 reaction.
To contribute a fix for this issue, leave a comment (and link to your pull request, if you've opened one already).

@cooloncoolon it looks like from the about info you are on a previous major version v5. Can you try upgrading to v6 and see if you still have the same issue?

hi @corymhall ,
ill give a try v6 and get back with the results


Bug fixes

This pull request includes

Atrac613's right drawer blackout issue fix
centerHiddenInteractionMode option issue fix

Thanks guys


Multiple Uploads Saved as Single Item

Hello,
Thank you for your work on this package, it is exactly what I need to make the connection between Filepond, Inertia and Laravel.
I'm attempting to upload multiple images and it looks that is successful at least for the temporary files. However, when I go to the storage path, I only see one image, instead of 'x' amount of images. I'm not sure if I'm missing a step or the functionality is actually broken.
Filepond Instance:
<file-pond
                                name="image[]"
                                ref="pond"
                                credits=""
                                allowMultiple="true"
                                maxFiles="5"
                                label-idle="Click to choose image, or drag here..."
                                accepted-file-types="image/jpg, image/jpeg, image/png"
                                max-file-size="3MB"
                                @processfile="handleFilePondProcess"
                                @removefile="handleFilePondRemoveFile"
                            />

Vue data array:
data() {
        return {
            products: this.products,
            stores: this.stores,
            brands: this.brands,
            form: this.$inertia.form({
                _method: "post",
                product: "",
                brand: "",
                store: "",
                tags: "",
                image: [],
                title: "",
                link: "",
                discount: "",
                price: "",
                price_extras: "",
                description: ""
            })
        };
    },

Vue methods:
 handleFilePondProcess: function(error, file) {
            // Set the server id from response
            this.form.image = file.serverId;
        },
        handleFilePondRemoveFile: function(error, file) {
            // Remove the server id on file remove
            this.form.image = null;
        }

Controller:
 Filepond::field($request->image)->moveTo('deals/deal-' . $deal->id);

@JD456976 thanks for reporting the issue. I've released a new version v1.8.10 fixing the bug along with new test cases. Please, update to the latest version. I will be updating the demo project with multiple upload example asap.
As you're uploading multiple file, your handleFilePondProcess should look like this -
handleFilePondProcess: function(error, file) {
    // Set the server id from response
    this.form.image.push(file.serverId);
},

Submit array of server IDs instead of an ID.

@JD456976 demo project is now updated with multiple uploads example. Support the project with a :star: if it worked for you. Happy to help.