[SPARK-32276][SQL] Remove redundant sorts before repartition nodes

What changes were proposed in this pull request?

This PR removes redundant sorts before repartition nodes with shuffles and repartitionByExpression with deterministic expressions.
Why are the changes needed?

It looks like our EliminateSorts rule can be extended further to remove sorts before repartition nodes that shuffle data as such repartition operations change the ordering and distribution of data. That's why it seems safe to perform the following rewrites:

Repartition -> Sort -> Scan as Repartition -> Scan
Repartition -> Project -> Sort -> Scan as Repartition -> Project -> Scan

We don't apply this optimization to coalesce as it uses DefaultPartitionCoalescer that may preserve the ordering of data if there is no locality info in the parent RDD. At the same time, there is no guarantee that will happen.
Does this PR introduce any user-facing change?

No.
How was this patch tested?

More test cases.

Test build #125781 has started for PR 29089 at commit d71b9e6.

Merged build finished. Test PASSed.

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder-K8s/30392/
Test PASSed.

cc @dongjoon-hyun @dbtsai @cloud-fan @viirya @gengliangwang for feedback

Thank you for pinging me, @aokolnychyi .

Test build #125781 has finished for PR 29089 at commit d71b9e6.

This patch passes all tests.
This patch merges cleanly.
This patch adds no public classes.

Merged build finished. Test PASSed.

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder/125781/
Test PASSed.

Test build #125847 has started for PR 29089 at commit 83791b7.

Merged build finished. Test PASSed.

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder-K8s/30457/
Test PASSed.

Test build #125848 has started for PR 29089 at commit c58ad12.

Merged build finished. Test PASSed.

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder-K8s/30458/
Test PASSed.

Test build #125849 has started for PR 29089 at commit 0ff3092.

Merged build finished. Test PASSed.

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder-K8s/30459/
Test PASSed.

@dongjoon-hyun @viirya @rdblue this PR is ready for another review round.

LGTM. I just had one question in the tests.

Test build #125858 has started for PR 29089 at commit ba6a1bb.

Merged build finished. Test PASSed.

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder-K8s/30468/
Test PASSed.

Test build #125847 has finished for PR 29089 at commit 83791b7.

This patch fails Spark unit tests.
This patch merges cleanly.
This patch adds no public classes.

Merged build finished. Test FAILed.

Test FAILed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder/125847/
Test FAILed.

Some tests in EliminateSortsSuite were failed?

Those failures seem to belong to the old commit before this change where I removed old tests. Tests for coalesce that failed were no longer valid.

Test build #125849 has finished for PR 29089 at commit 0ff3092.

This patch passes all tests.
This patch merges cleanly.
This patch adds no public classes.

Merged build finished. Test PASSed.

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder/125849/
Test PASSed.

Test build #125848 has finished for PR 29089 at commit c58ad12.

This patch passes all tests.
This patch merges cleanly.
This patch adds no public classes.

Merged build finished. Test PASSed.

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder/125848/
Test PASSed.

Test build #125858 has finished for PR 29089 at commit ba6a1bb.

This patch fails PySpark pip packaging tests.
This patch merges cleanly.
This patch adds no public classes.

Merged build finished. Test FAILed.

Test FAILed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder/125858/
Test FAILed.

Also, cc @gatorsmile and @cloud-fan

Thanks, everyone!

Oops. Sorry, guys. It seems that I missed something during testing. For the following case, we should not remove Sort.
BEFORE THIS PR
scala> Seq((1,10),(1,20),(2,30),(2,40)).toDF("a", "b").repartition(2).createOrReplaceTempView("t")

scala> sql("select * from (select * from t order by b desc) distribute by a").show()
+---+---+
|  a|  b|
+---+---+
|  1| 20|
|  1| 10|
|  2| 40|
|  2| 30|
+---+---+

AFTER THIS PR
scala> Seq((1,10),(1,20),(2,30),(2,40)).toDF("a", "b").repartition(2).createOrReplaceTempView("t")

scala> sql("select * from (select * from t order by b desc) distribute by a").show()
+---+---+
|  a|  b|
+---+---+
|  1| 10|
|  1| 20|
|  2| 30|
|  2| 40|
+---+---+

To generate small Parquet/ORC files, we do the above tricks, don't we?

AFTER SPARK-32276
scala> scala.util.Random.shuffle((1 to 100000).map(x => (x % 2, x))).toDF("a", "b").repartition(2).createOrReplaceTempView("t")

scala> sql("select * from (select * from t order by b) distribute by a").write.orc("/tmp/SPARK-32276")

$ ls -al /tmp/SPARK-32276/
total 632
drwxr-xr-x  10 dongjoon  wheel     320 Jul 14 22:08 ./
drwxrwxrwt  14 root      wheel     448 Jul 14 22:08 ../
-rw-r--r--   1 dongjoon  wheel       8 Jul 14 22:08 ._SUCCESS.crc
-rw-r--r--   1 dongjoon  wheel      12 Jul 14 22:08 .part-00000-ba5049f9-b835-49b7-9fdb-bdd11b9891cb-c000.snappy.orc.crc
-rw-r--r--   1 dongjoon  wheel    1188 Jul 14 22:08 .part-00043-ba5049f9-b835-49b7-9fdb-bdd11b9891cb-c000.snappy.orc.crc
-rw-r--r--   1 dongjoon  wheel    1188 Jul 14 22:08 .part-00191-ba5049f9-b835-49b7-9fdb-bdd11b9891cb-c000.snappy.orc.crc
-rw-r--r--   1 dongjoon  wheel       0 Jul 14 22:08 _SUCCESS
-rw-r--r--   1 dongjoon  wheel     119 Jul 14 22:08 part-00000-ba5049f9-b835-49b7-9fdb-bdd11b9891cb-c000.snappy.orc
-rw-r--r--   1 dongjoon  wheel  150735 Jul 14 22:08 part-00043-ba5049f9-b835-49b7-9fdb-bdd11b9891cb-c000.snappy.orc
-rw-r--r--   1 dongjoon  wheel  150741 Jul 14 22:08 part-00191-ba5049f9-b835-49b7-9fdb-bdd11b9891cb-c000.snappy.orc

BEFORE
scala> scala.util.Random.shuffle((1 to 100000).map(x => (x % 2, x))).toDF("a", "b").repartition(2).createOrReplaceTempView("t")

scala> sql("select * from (select * from t order by b) distribute by a").write.orc("/tmp/master")

$ ls -al /tmp/master/
total 56
drwxr-xr-x  10 dongjoon  wheel  320 Jul 14 22:12 ./
drwxrwxrwt  15 root      wheel  480 Jul 14 22:12 ../
-rw-r--r--   1 dongjoon  wheel    8 Jul 14 22:12 ._SUCCESS.crc
-rw-r--r--   1 dongjoon  wheel   12 Jul 14 22:12 .part-00000-2cd3a50e-eded-49a4-b7cf-94e3f090b8c1-c000.snappy.orc.crc
-rw-r--r--   1 dongjoon  wheel   16 Jul 14 22:12 .part-00043-2cd3a50e-eded-49a4-b7cf-94e3f090b8c1-c000.snappy.orc.crc
-rw-r--r--   1 dongjoon  wheel   16 Jul 14 22:12 .part-00191-2cd3a50e-eded-49a4-b7cf-94e3f090b8c1-c000.snappy.orc.crc
-rw-r--r--   1 dongjoon  wheel    0 Jul 14 22:12 _SUCCESS
-rw-r--r--   1 dongjoon  wheel  119 Jul 14 22:12 part-00000-2cd3a50e-eded-49a4-b7cf-94e3f090b8c1-c000.snappy.orc
-rw-r--r--   1 dongjoon  wheel  932 Jul 14 22:12 part-00043-2cd3a50e-eded-49a4-b7cf-94e3f090b8c1-c000.snappy.orc
-rw-r--r--   1 dongjoon  wheel  939 Jul 14 22:12 part-00191-2cd3a50e-eded-49a4-b7cf-94e3f090b8c1-c000.snappy.orc

Very sorry, guys. Due to the above regression, I'll revert this commit urgently. We can rethink about this PR.

I made a PR to add a test coverage for the above case.

https://github.com/apache/spark/pull/29118

Oh, this is interesting. I know removing Sort before Repartition will result in different data distribution because Repartition uses RoundRobinPartitioning. Because I think repartition doesn't guarantee shuffled data distribution, so I thought it is okay.
Now seems different data distribution causes difference storage output size. I think it is because to repartition sorted data using RoundRobinPartitioning can generate more compact output.

No~ It depends on file formats instead of Spark side.
For example, in the above example, ORC files are small because it supports a special encoding when the data is sorted with a fixed increment. For Parquet files, the result will be different.

Yeah, because the different data distribution, physical encoding of data could result in different size.

Ehh... AFAIK nested ordering can be ignored from a relation algebra point of view. So I am not sure this is a very solid argument. This feels a bit like an example of hyrum's law. If you want sorted runs in ORC then you ought to fix is there, and not rely on some implicit system behavior.
Regarding the shuffles. If the data is sorted before it goes into the shuffle, then the individual shuffle blocks are sorted. This is also the reason why doing a sort aggregate is not completely terrible (TimSort is good at identifying sorted runs).

@hvanhovell . I agree with you for the followings.

AFAIK nested ordering can be ignored from a relation algebra point of view.
Regarding the shuffles. ...

However, the following is not reasonable. There is nothing wrong in the file formats. They are just consumers and showing a better performance in a sorted input sequence. I guess you assume that this is only a behavior at ORC. But, I'm sure that you can find your customers are relying on this in Parquet, too.

If you want sorted runs in ORC then you ought to fix is there, and not rely on some implicit system behavior.

This is not an implicit system behavior in Apache Spark. Apache Spark has been working in the procedural ways as you see in the above. If we start to ignore the valid working pattern in the production, it becomes a huge regression.
In short, saving to a file is a totally different and valid story. To optimize the final output files, the above pattern have been used in the production among Apache Spark users for a long time. If some optimizer rule ignores the existing usage, this ends up at a large regression in terms of the cost (for example, S3) obviously.

cc @marmbrus and @gatorsmile since they know the existing customers well and are good at protecting them.

BTW, @aokolnychyi . I merged the corner case test case. Could you rebase this to the master? Then, we can discuss how to proceed this PR in a narrowed direction.

Oops, thanks for catching the corner case quickly, @dongjoon-hyun!
My original idea for this PR was based on the fact that a range partitioning followed by a local sort is equivalent to a global sort if expressions are compatible. Then I started to generalize this idea and there was no obvious corner case. While this one is very subtle, I think it makes sense if we think more about it. Repartition nodes change data distribution but may not necessarily change the ordering of data. Partially, this is the reason why we excluded coalesce in the original proposal. Based on the example above, this seems to be true even if we hash partition our data.
I'd explore cases where sort+repartition are next to each other. In that case, we are sure we change both the ordering and distribution and can potentially ignore the sort below.
For example, we may have this:
sql("select * from (select * from (select * from t order by b desc) distribute by a) order by b asc")

Sort [b#6 ASC NULLS FIRST], true
+- RepartitionByExpression [a#5], 4
   +- Sort [b#6 DESC NULLS LAST], true
      +- Repartition 2, true
         +- LocalRelation [a#5, b#6]

Is there a case where we want to keep the first sort before RepartitionByExpression?

The same question for local sort too.
sql("select * from (select * from (select * from t order by b desc) distribute by a) sort by b asc")

Sort [b#6 ASC NULLS FIRST], false
+- RepartitionByExpression [a#5], 4
   +- Sort [b#6 DESC NULLS LAST], true
      +- Repartition 2, true
         +- LocalRelation [a#5, b#6]

Test build #125886 has started for PR 29089 at commit ba6a1bb.

Merged build finished. Test PASSed.

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder-K8s/30494/
Test PASSed.

Test build #125886 has finished for PR 29089 at commit ba6a1bb.

This patch fails Spark unit tests.
This patch merges cleanly.
This patch adds no public classes.

Test FAILed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder/125886/
Test FAILed.

In general, I think we can remove sort if it doesn't affect the final output ordering. The case caught by @dongjoon-hyun is a good example: the final output ordering changes and affect the file size.

To generate small final Parquet/ORC files, we do the above tricks, don't we?

We don't rely on this. Our recommendation to users is to add a global sort to distribute the data, which adds the local sort in the final stage that won't be removed. I can understand people relying on this behavior, though.
For now, I think it makes sense to remove a sort before a repartition if the data will be sorted later, like what I think @aokolnychyi is suggesting. That's really what we will need for tables that require a sort order -- that will be the final sort and we should be able to remove other sorts.
We may also want to choose whether this is a guarantee and document it.

Yes, my proposal is to optimize cases when we sort the data after the repartition like in the examples I gave above. In those cases, sorts below seem to be redundant.

@dongjoon-hyun @viirya @hvanhovell @maropu, what do you think?

It looks reasonable to me to remove a sort before a repartition if we know the data will be sorted later, e.g. @aokolnychyi's examples above.

Merged build finished. Test PASSed.

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder-K8s/30541/
Test PASSed.

I've updated the PR to show what I meant. I'll check for additional edge cases in the morning but the change is ready for review.

Test build #125931 has started for PR 29089 at commit 21a84ad.

Thank you for quick updating, @aokolnychyi . Also, thank you all for your opinions.

Test build #125931 has finished for PR 29089 at commit 21a84ad.

This patch fails Spark unit tests.
This patch merges cleanly.
This patch adds no public classes.

Merged build finished. Test FAILed.

Test FAILed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder/125931/
Test FAILed.

Test build #125986 has started for PR 29089 at commit 0545b09.

Merged build finished. Test PASSed.

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder-K8s/30601/
Test PASSed.

Test build #125986 has finished for PR 29089 at commit 0545b09.

This patch passes all tests.
This patch merges cleanly.
This patch adds no public classes.

Merged build finished. Test PASSed.

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder/125986/
Test PASSed.

I gave it a bit of thought and did not find a case where the updated logic would break.

Test build #126060 has started for PR 29089 at commit 2157a71.

Merged build finished. Test PASSed.

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder-K8s/30673/
Test PASSed.

Test build #126060 has finished for PR 29089 at commit 2157a71.

This patch fails PySpark pip packaging tests.
This patch merges cleanly.
This patch adds no public classes.

Merged build finished. Test FAILed.

Test FAILed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder/126060/
Test FAILed.

Retest this please.

Test build #126134 has started for PR 29089 at commit 2157a71.

Merged build finished. Test PASSed.

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder-K8s/30746/
Test PASSed.

cc @cloud-fan and @gatorsmile once more.

@dongjoon-hyun I am a bit late with my response but here goes :)

However, the following is not reasonable. There is nothing wrong in the file formats. They are just consumers and showing a better performance in a sorted input sequence because they are columnar vectorized format. I guess you assume that this is only a behavior at ORC. But, I'm sure that you can find your customers are relying on this in Parquet, too.

That is making the argument for explicitly organizing the data before the write right? You are currently just lucky that the system accidentally produces a nice layout for you; 99% of our users won't be as lucky. The only way you can he sure, is when you add these things yourself.

This is not an implicit system behavior in Apache Spark. Apache Spark has been working in the procedural ways as you see in the above. If we start to ignore the valid working pattern in the production, it becomes a huge regression.
In short, saving to a file is a totally different and valid story. To optimize the final output files, the above pattern have been used in the production among Apache Spark users for a long time. If some optimizer rule ignores the existing usage, this ends up at a large regression in terms of the cost (for example, S3) obviously.

If you generalize the procedural argument then we also should not do things like join reordering or swapping window operators. The whole point of a declarative system like Spark SQL is that you don't care about how the system executes a query, and that it has the freedom move operations around to make execution more optimal.
Have you considered that your regression is someone else's speed-up? Sorting is not free, and if we can avoid it we should. There might a large group of users that are adversely affected by spurious sorts in the queries (e.g. an order by in a view).
Finally I do want to point out that there is no mechanism that captures this regression if it pops up again.

Test build #126134 has finished for PR 29089 at commit 2157a71.

This patch passes all tests.
This patch merges cleanly.
This patch adds no public classes.

Merged build finished. Test PASSed.

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder/126134/
Test PASSed.

@hvanhovell . The following is complete wrong because the above optimization was one of the recommendations for many Hortonworks customers to save their HDFS usage. I knew many production usages like that. I almost forgot that, but it rang my head suddenly during this PR. (Sadly, after I merged this.)

You are currently just lucky that the system accidentally produces a nice layout for you; 99% of our users won't be as lucky. The only way you can he sure, is when you add these things yourself.

I understand your point of views fully. However, I'm wondering if you can persuade the customer to waste their storage by generating 160x bigger files (SPARK-32318). Do you think you can?
-rw-r--r--   1 dongjoon  wheel  939 Jul 14 22:12 part-00191-2cd3a50e-eded-49a4-b7cf-94e3f090b8c1-c000.snappy.orc

-rw-r--r--   1 dongjoon  wheel  150741 Jul 14 22:08 part-00191-ba5049f9-b835-49b7-9fdb-bdd11b9891cb-c000.snappy.orc

For the following, I added SPARK-32318 added a test coverage at master/3.0/2.4. Are you suggesting that's not enough?

Finally I do want to point out that there is no mechanism that captures this regression if it pops up again.

For the following, I'd like to ask your help if you are interested. I believe we want to build the better Apache Spark in the community together.

If you generalize the procedural argument then we also should not do things like join reordering or swapping window operators.


[SPARK-9853][Core][Follow-up] Regularize all the shuffle configurations related to adaptive execution

What changes were proposed in this pull request?

Regularize all the shuffle configurations related to adaptive execution.
Add default value for BlockStoreShuffleReader.shouldBatchFetch.

Why are the changes needed?
It's a follow-up PR for #26040.
Regularize the existing spark.sql.adaptive.shuffle namespace in SQLConf.
Does this PR introduce any user-facing change?
Rename one released user config spark.sql.adaptive.minNumPostShufflePartitions to spark.sql.adaptive.shuffle.minNumPostShufflePartitions, other changed configs is not released yet.
How was this patch tested?
Existing UT.

Merged build finished. Test PASSed.

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder-K8s/17202/
Test PASSed.

Test build #112213 has started for PR 26147 at commit 2c66432.

Test build #112213 has finished for PR 26147 at commit 2c66432.

This patch passes all tests.
This patch merges cleanly.
This patch adds no public classes.

Merged build finished. Test PASSed.

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder/112213/
Test PASSed.

Test build #112220 has started for PR 26147 at commit 9027083.

Merged build finished. Test PASSed.

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder-K8s/17208/
Test PASSed.

Test build #112220 has finished for PR 26147 at commit 9027083.

This patch passes all tests.
This patch merges cleanly.
This patch adds no public classes.

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder/112220/
Test PASSed.

thanks, merging to master!


Update op-node and op-geth to understand supechainlevel (standard vs frontier)

I would prefer to make this change in op-node, where it can differentiate based on the new superchain level. The rationale being that I think we ultimately want to deprecate the go exports here that are consumed by op-node/op-geth/etc and instead have op-node/etc consume data from generated TOML files—this should be more flexible and easier to maintain, since TOML can be consumed by other languages without the registry needing bindings/releases for every supported language

Originally posted by @mds1 in https://github.com/ethereum-optimism/superchain-registry/pull/140#discussion_r1544584285

Noting that the onboarding flow for chains https://github.com/ethereum-optimism/client-pod/issues/859 requires chains to be run-able in op-node / op-geth before they are classed as standard chains.


running error

when I run "python train.py ", it warns “ E tensorflow/core/grappler/optimizers/dependency_optimizer.cc:484] The graph couldn't be sorted in topological order.”x2 This message doesn't influence program going.I want to confirm whether this issue is just ok?

Sorry but I have no ideas. What environment did you run?


Enable colorDecorators in any file

VSCode Version: 1.21.0 (1.21.0)
OS Version: macOS Sierra (10.13.3)

This is a suggestion for a feature. As a React Native developer I work with HTML/CSS/JS all in .js files and I can't use VSCode's color decorator. The setting "editor.colorDecorators" falls under the editor settings but it simply does not work outside of style sheet files.
And not only JS but any other platform/language that handles colors would benefit from this.

The color decorators are contributed by extensions (the ones for css and html just are contributed by built-in html and css extensions). Try looking in the marketplace for one that may work for your use case


Revert "Only deploy if the current branch is master"

This reverts commit 7950dd2a11aa69e55b3393bd279a5ae7ca1da8de.

Actually my "fix" seems completely broken


ci: release to krew index as kubectl-gpt

📑 Description
Releases k8sgpt to the krew index, as kubectl-gpt.
This enables users to use the CLI as a plugin for kubectl as kubectl gpt.
✅ Checks

[x] My pull request adheres to the code style of this project
[x] My code requires changes to the documentation
[ ] I have updated the documentation as required
[x] All the tests have passed

ℹ Additional Information
I haven't updated the documentation on how to install the krew plugin, because it still needs to go through the approval process for the index. I plan to do a follow-up PR with the documentation changes

I think it's a nice feature, any thoughts @k8sgpt-ai/k8sgpt-maintainers  ?


Switch Badges and Mission Actions

## Space Travellers' Hub Project: Switch Badges and Mission Actions
In this  milestone, I implemented the following:

Switch Badge features.
Implemented mission joining actions.
Implemented mission leaving actions.
Styled the Mission Status and Action Buttons
Ensured there are no linters error.
Documented the project professionally.

Hi @AbuRayhaan  ,
Your project is complete!  There is nothing else to say other than... it's time to merge it :shipit:
Congratulations! 🎉
To highlight 🎯

No linter errors.✔
Good commit messages.✔
Add all the requirements. ✔


Massive slowdown in compiling complicated union types

This is the same code as what originally prompted #2997
While it isn't crashing because of infinite loops any more, it has become very slow with 1.7. If I pause it in the debugger I see the following stack repeating many times.
inferFromTypes [tsc.js] Line 15334	JavaScript
inferFromTypes [tsc.js] Line 15314	JavaScript
inferFromTypes [tsc.js] Line 15301	JavaScript
inferFromProperties [tsc.js] Line 15350	JavaScript
inferFromTypes [tsc.js] Line 15334	JavaScript
inferFromTypes [tsc.js] Line 15314	JavaScript
inferFromTypes [tsc.js] Line 15301	JavaScript
inferFromIndexTypes [tsc.js] Line 15380	JavaScript
inferFromTypes [tsc.js] Line 15337	JavaScript
inferFromProperties [tsc.js] Line 15350	JavaScript

Reduced test case:
class Module {
	public members: { [name: string]: FFunction | Property };
}

class Namespace {
	public members: { [name: string]: Class | Enum };
}

class Class {
	public parent: Module | Namespace;

	public members: { [name: string]: Property | FFunction };
}

class Interface {
	public members: { [name: string]: Property | FFunction };
}

class FFunction {
	public parent: Module | Namespace | Class | Interface; // (1)
}

class Property {
	public parent: Module | Namespace | Class | Interface; // (2)
}

class Enum {
	public parent: Module | Namespace;

	public members: EnumMember[];
}

class EnumMember {
	public parent: Enum;
}

var members: (Property | FFunction)[];
members.map(member => "");

Compile with tsc foo.ts on node 4.2.2 x64 on Windows 7.
This takes ~18s on my machine. If I remove Module from the union type at (1), it drops to ~12s. Removing Module at (2) drops it to ~6s. And so on.
The original code is at https://github.com/Arnavion/libjass/blob/82f3706/build/typescript/ast.ts which has a much more complicated forest of types. It's been compiling for 5 minutes now, whereas it took ~2s with 1.6

@Arnavion can you give a try to typescript@next. Seems that this issue is already fixed in master. I can confirm that it takes 17.50 s on my machine to compile your sample using release-1.7, however on master it takes only

Yes, looks like it. The original code also takes ~2s with next, same as 1.6.

Can the fix be backported to 1.7 or do I skip it and wait for 1.8?

depends on the fix. @vladima do you know what is going on?

yes:  https://github.com/Microsoft/TypeScript/pull/5738. If source and target types are unions or intersection then removing matching constituents from source and target sides significantly reduces amount of types that participate in type inference.

Yes, cherry-picking that PR onto 1.7 fixes the issue (and introduces #5861 but that's a minor annoyance in comparison).

@Arnavion is there a chance you can move to typescript@next directly?

If you're asking because you don't want to backport it, that's fine. I have no problem staying with 1.6 until 1.8 is released. :)

I am asking to figure out the logistics, porting it and publishing an npm is easy, but we will need to publish a VS 2012, VS 2015, and sublime text plugin updates and that all adds up.

Let's port https://github.com/Microsoft/TypeScript/pull/5738 and https://github.com/Microsoft/TypeScript/pull/5895 to release-1.7 branch.

I'm trying to understand why this got slower from 1.6 to 1.7? Vlad, did you look into that? I understand why the new union/intersection reduction in 1.8 makes it faster, but I'd like to know why it got slower in the first place.

Ok, I now understand why it got slower. When inferring types, if the source and target are both non-generic object types we don't descend into the types because it we know it won't produce inferences. However, in 1.7 all classes are generic because of the implied this type argument, so we end up doing a lot more work. I'm going to give some thought to a fix. The union/intersection reduction isn't really the answer, it just so happens to help in this example.

yes, this got slower in the  9438a4bce0375e30eaf2a01bb1d73536d8cd36e1

Ok, I have a fix. I will putting up a PR shortly.

I would recommend not back-porting the union/intersection type reduction, but instead back-porting the #5920 fix I just put up.

@Arnavion can you do us a big favor and give branch release-1.7 a quick test?

Everything seems fine. Thanks!

thanks @Arnavion!


ShowcaseImage (and probably more) are broken when using starlight-blog plugin

Describe the bug

To Reproduce

Install starlight blog
Use ShowcaseImage
See result

Expected behavior
ShowcaseImage display as the demo
How often does this bug happen?
Every time
System Info
No response
Additional Context
No response

Without blog plugin

Thanks for the report 🙌
From my quick tests:

In dev, some component scoped CSS is randomly missing, restarting the dev server can fix or not.
In prod, everything works as expected.

At first glance, this looks like an upstream issue that seems to be resolved in Astro 5. I'll test again when Astro 5 stable is released next week.

Just tested with the latest version of Astro, Starlight, starlight-blog and starlight-showcases and I can confirm that the issue is now fixed. Sorry for the inconvenience.


[5.2] Add method to implement multiple scopes with variable names

Proposal to add the method scopes to allow the implementation of multiple variable scopes at once, for example:
Post::scopes(['question', 'pending' => true])->get() is the same as:
Post::questions()->pending(true)->get()

I don't see how using an array is in any way better than calling them directly.

@JosephSilber
I have something like this in my code:
        $scopes = $this->getListScopes($request);

        $posts = Post::scopes($scopes)->paginate();

Based on the request I determine the dynamic scope to filter the posts. Doing the same with chained methods is not that easy and don't look that nice.

Then this is something very unique to your app, and you should keep it there.
Doesn't make much sense in the framework IMO.

Hmmm, I think it could be quite useful. Could make for nicer design rather than making method calls using variables as method names. I'm :+1: here.

Can you send a PR for a test for this?


Base Strategy should not exclude version control directories

Current Mage\Task\BuiltIn\Deployment\Strategy\BaseStrategyTaskAbstract::getExcludes() method is excluding .git directory due this array:
        $excludes = array(
            '.git*',
            '.svn*',
            '.mage',
            '.rsync_excludes',
            'nohup.out',
        );

If we cache CSS or JS files and then we update them, we need to rename the path to that file, adding a modifier like: /path/to/my/file?modifier
When we manage thousands of files - no matter if they are images, css or js - using a Git repository to work with colleagues is not an option to apply these modifiers manually, there is always the human factor that may cause an error or a mistake.
Twig - the tempalte engine - provides the asset() function that is adding this modifier automatically and, when we work with version control repositories and more colleagues, an easy way to ensure the deployment gets the last/expected updates is running this command:
git rev-parse --short HEAD
Given this case, we should not exclude .git (or any other) directory automatically, specially when we can add it on each environment configuration file (if we really don't need to deploy that folder in a given environment).

I think you should add the revision locally in a pre-deployment task.

Working with Symfony I have seen many projects that are using this:
Config file app/config/asset_version.php with content:
<?php

$container->loadFromExtension(
    'framework',
    [
        'assets' => [
            'version' => trim(exec('git rev-parse --short HEAD')),
        ],
    ]
);

This is because Symfony+Twig are already working together to provide this revision, so exclude these folders by default may cause a problem, specially on environments that PRs and deployments are often.

Why not simply dump it into the parameters.yml in a pre-deployment task?

That may be an option for production environments just if I have a single server to deploy, right?
I mean, if my environment config file contains this...
deployment:
  strategy: targz
  from: ./
  to: /var/www/project
  excludes:
    # Shared between releases configuration file
    - app/config/parameters.yml

...because I need to deploy to (let's say) development, uat and production servers, each one may have a different configuration, so I cannot set a new value on that parameter automatically as part of the pre-deployment task.
I am trying to cover all possible cases, and this is why I think we should not exclude directories by default, because given this scenario we cannot update the content of this file automativaly due these reasons:

Locally I exclude the file because it should not be overwritten
Remotely I cannot update the content on post-deployment task because I have not my .git folder that is the easy way to know what is the last update

Sorry, you're right, the parameters.yml was not a good idea. It should simply be an additional file ;-)

Then we have the problem that config.yml file cannot read an external file because YAML files are providing an easy way to set my settings 😅 and I am not sure if is a "good idea" (or a "practical solution") update the yml file to php just to read an external resource when config.yml may already contain this:
imports:
    - { resource: parameters.yml }
    - { resource: security.yml }
    - { resource: services.xml }
    - { resource: assets_version.php }

# my other settings here

I would dump a asset_version.yml file into the config directory and simply include that. Mage Tasks can easily read and write YAML because Mage uses YAML itself

So an option that you're suggesting is to update all these files:

config_prod.yml
config_uat.yml
config_dev.yml

To include this content:
imports:
    - { resource: asset_version.yml } # or `asset_version.php`, depending on the environment
    - { resource: config.yml }

# environment settings here

And then I will need to create a new pre-deployment task to check my last local commit and set the content of asset_version.yml file, applying the expected format, is this right?

Jup, pretty much that. It's even easier because a Mage task can easily access local and remote files. I just checked, there's what my task looks like. Pretty similar, though it uses the latest git tag and stores it in a different name (I don't use it for assets but just to display the platform version in the admin area).
<?php

namespace Task;

use Mage\Task\AbstractTask;
use Mage\Task\ErrorWithMessageException;
use Mage\Yaml\Exception\ParseException;
use Mage\Yaml\Yaml;

class PlatformRelease extends AbstractTask
{

    /**
     * Returns the Title of the Task
     *
     * @return string
     */
    public function getName()
    {
        return 'Updating platform version in parameters.yml';
    }

    /**
     * Runs the task
     *
     * @return bool
     * @throws ErrorWithMessageException
     */
    public function run()
    {
        $version = '';

        $this->runCommandLocal("git describe", $version);

        try {
            $yaml    = new Yaml();
            $content = null;

            $this->runCommandRemote('cat app/config/parameters.yml', $content);

            $params = $yaml->parse($content);

            $params['parameters']['platform_version'] = $version;

            $this->runCommandRemote("echo " . escapeshellarg($yaml->dump($params)) . " > app/config/parameters.yml");

        } catch (ParseException $e) {
            throw new ErrorWithMessageException($e->getMessage(), $e->getCode(), $e);
        }

        return true;
    }
}

OK, I have tried to run that task that you pasted above, but I am not getting the expected behaviour here. For some reason, when I call this method:
$remote = $this->runCommandRemote('cat app/config/parameters.yml', $content);

And then I check the content of $remote and $content I get false and NULL respectively. Given I am working with releases, what I have done is to set these tasks:
tasks:
  pre-deploy:
    - filesystem/link-shared-files
    - asset-versions

The log says that the ln -s shell commands were executed with no errors, and the PHP output is:
Starting Magallanes
	Logging enabled: /{path-to-my-project-folder}/.mage/logs/log-20161013-153105.log

	Deploy summary
		Environment: dev
		Release ID:<PHONE_NUMBER>3105

	Starting Pre-Deployment tasks:
		Running Linking files/folders from the shared folder into the current release [built-in] ... OK
		Running Twig - Set the new Asset() version ... OK

I'll need to investigate about this, but if I cannot update that file I think that won't be easy to keep this version issue working with this solution.
Let me run a few tests and I'll let you know!

the task needs to run as on-deploy, after you have linked the shared files (which I do in on-deploy as well). Otherwise the release folder does not exist and the file can't be found.
Here's what my deployment config looks like:
tasks:
    pre-deploy:
        - gulp
    on-deploy:
        - filesystem/link-shared-files:
            linked_files:
                - app/config/parameters.yml: relative
            linked_folders:
                - app/logs: relative
        - composer/install: {dev: false}
        - composer/generate-autoload
        - platform-release
        - symfony2/cache-warmup: {env: prod}
        - symfony2/assets-install: {env: prod, symlink: true, relative: true}
        - maintenance-lock
    post-release:
        - symfony2/doctrine-migrate: {env: prod}
        - symfony2/cache-clear: {env: prod}
        - maintenance-unlock

👍 Yep, I discovered that testing the scenario that we discussed, and now the task is on-deploy providing the expected update. Nice chat! And thanks for the suggested update!


add Circular References Between Components  example

Thanks for the contribution! Can you please provide a little more detail about the problem you're trying to solve here?

When I read the document, the above fragments make me understand some of the deviation, , so I want to write an example so that others can understand easily.

Is there a way you think we can improve the existing example to make it clearer? For example, is there information we might be missing? I think I'd rather improve the existing example rather than just linking to another one.

I think it's better to provide a complete example than a snippet,this is i can do.


[167571906] Revert cf-vars-store migration

What
Reverting as the migration failed in staging due to empty cert values in cf-vars-store.
This reverts commit b86ab001871a8734e4305bfca6924cdc9ac30db0, reversing changes made to f41e1adf7336b20cd55f2c8a94e0a2d9ee61fb4a. (pull request #2039)
How to review
Code review
Who can review
Not me

$ git diff 7f4af443 prod-0.2.405

Returns empty, which confirms this is a clean revert.


Support url/uri encoding of topic-name for http-request

Motivation
Broker has lookup and admin REST-api on top of JAX-RS which doesn't follow urlencoding spec while decoding query-param.
application/x-www-form-urlencoded uses + and properly encoded URIs use %20. So, if client sends request with url-encoded query-param (topicName) then broker may not decode it properly due to jax-rs limitation. Therefore, broker should use url-decoder which can handle decoding properly. ( both + and  %20 can be decoded into space)
Modifications
Take encoded topic-name query-param from the http-request and decodes it using url-encoder.
Result
Broker can support both url/uri encoded topic-name request (lookup and admin rest-api).

CLA is valid!

@saandrews : we have admin-client change in this commit which does uri encoding. But now, as broker supports both encoding (TestCase) so, we haven't merged the change int this PR.

👍

Triggering the CLA bot (please ignore)

CLA is valid!


lax.asarray: avoid explicit device_put

Fixes #19334
We had used _device_put here because we wanted to avoid binding any primitives, but it turns out this falls afoul of the transfer guard in some places. This changes it to using a no-op convert_element_type, with tests to ensure no primitives are bound.

#19511 should fix this.


feat: LSDV-4583-6: Image preloading

PR fulfills these requirements

[x] Commit message(s) and PR title follows the format [fix|feat|ci|chore|doc]: TICKET-ID: Short description of change made ex. fix: DEV-XXXX: Removed inconsistent code usage causing intermittent errors
[ ] Tests for the changes have been added/updated (for bug fixes/features)
[x] Docs have been added/updated (for bug fixes/features)
[x] Best efforts were made to ensure docs/code are concise and coherent (checked for spelling/grammatical errors, commented out code, debug logs etc.)
[x] Self-reviewed and ran all changes on a local instance (for bug fixes/features)

Change has impacts in these area(s)
(check all that apply)

[ ] Product design
[x] Frontend

Describe the reason for change
LSDV-4583
LSDV-4583-6
What is the new behavior?

Images are now preloaded in the background.
When valueList is used, it will preload the current image + 3 ahead and behind. This allows lag-free, latency-free navigation through a sequence of images.
Solves the problem of UI locking when an image is failed to load. The new behavior is non-blocking. The user will be able to navigate to other images even if some of them aren't loaded.

What is the current behavior?
Currently images are loaded when they're in the viewport which doesn't allow proper caching and error handling
Users are unable to work with the UI if any of the images failed to load due to the error handling mechanism that doesn't allow to recover from an error.
What libraries were added/updated?
None
Does this change affect performance?
Yes, improves.
Does this change affect security?
No.
What alternative approaches were there?
None.
What feature flags were used to cover this change?
fflag_feat_front_lsdv_4583_6_images_preloading_short
Does this PR introduce a breaking change?
(check only one)

[ ] Yes, and covered entirely by feature flag(s)
[ ] Yes, and covered partially by feature flag(s)
[x] No
[ ] Not sure (briefly explain the situation below)

What level of testing was included in the change?
(check all that apply)

[x] e2e
[ ] integration
[ ] unit

Which logical domain(s) does this change affect?
Image Segmentation, Labeling Interface

Codecov Report
Base: 9.13% // Head: 8.94% // Decreases project coverage by -0.20% :warning:

Coverage data is based on head (0dd5ce8) compared to base (d108677).
Patch has no changes to coverable lines.

Additional details and impacted files
@@            Coverage Diff            @@
##           master   #1187      +/-   ##
=========================================
- Coverage    9.13%   8.94%   -0.20%
=========================================
  Files         107     117      +10
  Lines        8108    8517     +409
  Branches     2011    2108      +97
=========================================
+ Hits          741     762      +21
- Misses       6185    6545     +360
- Partials     1182    1210      +28

Impacted Files
Coverage Δ

src/src/components/ImageView/ImageView.js
4.20% <0.00%> (-0.19%)
:arrow_down:

src/src/mixins/Regions.js
0.64% <0.00%> (-0.01%)
:arrow_down:

src/src/regions/Result.js
0.64% <0.00%> (-0.01%)
:arrow_down:

src/src/regions/RectRegion.js
3.46% <0.00%> (ø)

src/src/regions/BrushRegion.js
3.18% <0.00%> (ø)

src/src/regions/EllipseRegion.js
4.72% <0.00%> (ø)

src/src/regions/PolygonRegion.js
2.95% <0.00%> (ø)

src/src/regions/KeyPointRegion.js
6.81% <0.00%> (ø)

src/src/tags/object/Image.js

src/src/tags/object/Image/ImageSelection.js
1.85% <0.00%> (ø)

... and 12 more

Help us with your feedback. Take ten seconds to tell us how you rate us. Have a feature suggestion? Share it here.

:umbrella: View full report at Codecov.
:loudspeaker: Do you have feedback about the report comment? Let us know in this issue.


Fixed elapsed time calculation #15

Using StopWatch Elapsed.TotalMilliseconds instead of calculation

Thank you,
Are you sure about the calculation? I think the proper way to get the time from ElapsedTics is
stopwatch.ElapsedTicks / Stopwatch.Frequency which will give you the time in seconds.
Have a look at the answer here http://stackoverflow.com/questions/8894425/difference-between-elapsedticks-elapsedmilliseconds-elapsed-milliseconds-and-e
Anyways thank you for accepting my PR :)

Indeed, it does appear now that TimeSpan's "Tick" and Stopwatch's "Tick" are two different units of time. Hopefully whoever made that decision has seen the error of their ways...thanks for pointing that out!


Getting ClientState or NetcodeClient to display errors

Currently I'm trying to get ClientState to display the reason why connection to the server failed, but I'm having difficulty actually getting NetcodeClient from anywhere.
I tried:

Reading the resource netcode::Client::<()>, but it seems to not exist.
Get it from ClientConnection, but it seems to be impossible because it's behind pub(crate)

In the similar note it's not possible to get the error when you start the server, like if port is already in use. Currently it seems to only output the errors to the console. Maybe make it send an event with the error?

Hi, thanks for the feedback!

I can make the field client in ClientConnection pub. I'm not sure if it's the right approach. It would probably be better to expose the ConnectionError in the state() method of the NetClient trait, but it can unblock you for now.

I can make a new event type ConnectionFailed for both client and server.
If the connection fails for any reason (netcode error or io error) the event would get emitted with the specific reason

Thank you for a swift response, this does fix my problem!
If you want I can try to implement events ConnectionFailed and HostingFailed (or another name).

Thank you for a swift response, this does fix my problem!
If you want I can try to implement events ConnectionFailed and HostingFailed (or another name).

I merged https://github.com/cBournhonesque/lightyear/pull/416/ for the DisconnectReason on the client, but feel free to give it a go for the server! Maybe a ServerStop event?


Orderbook empty states - add offer/bid buttons on MOBILE

https://www.figma.com/file/fLWVwmanAwetVZbujQquEi/Market-Page?node-id=2435%3A157294

[ ] Replace current text with buttons

[ ] pressing these will bring the order ticket into view

Behaviour seems weird here. I would expect hitting the button to force up the order ticket into view with the qty input active. Not to have to then manually scroll down and see error messages

fix as part of launch imo

clicking the buttons aren't triggering anything  @phoebemirman

i'm seeing it scroll down. please double check

Adding a bid worked fine, but if I click on Add Offer, it needs to enter a sell order....currently still has the order book on the buy side

It's scrolling down for me on mobile now. I was relying on desktop mobile emulator to test yesterday which doesn't work for some reason but I can't see this being an issue.
But as Chwy mentioned above , it isn't switching between buy and sell

Fixed closing


Can't unslick - undefined is not a function

After updating to version 1.4 I started getting error undefined is not a function with unslick().

dont use 1.4 yet

I do it :
$('#carousel')[0].slick.unslick()

Maybe that would be a useful for somebody.
https://jsfiddle.net/9g2mvyet/
(Сan use method "each" to delete multiple elements currently matched)


Fix emit argument annotation

i believe yea

I wonder if it should be marked as optional? (is that a thing?)

Don't know, don't understand them. If @rvikmanis know let change it, otherwise will just hit the button.

Can do it later.

Marking it optional won't have much of a practical difference, because of the way flow treats any, but I'd still do it just to make clear the intention.

That's why I hate types and typings, at least until they get native. They lead to more mess than better collaboration between devs - all this build time tool chains and etc, that whole thing around "modern javascript" really sucks, reminds me one article that I read before few weeks or so: "JavaScript is no more 'write and run' lang".


multi domain

SO that we can support multi-domains I guess we could start to detect the incoming domains used by the proxies  etc using
https://github.com/pires/go-proxyproto , so that we dont need to pass ENV variables anymore.
It seems plausible that we can do this to the current _example code, and not need another example like we spoke about a few days ago.
The _example is currently working with many domains and sub domains using Caddy.
But, until proxy detection is done cant really do more there.
Will get it deploying to fly.io with the caddy stuff embedded and check multi-domain using real domains tomorrow, with hardcoded ENV, and then when proxy detection is done can try again.
@egregors let me know if you want the Makefile I used to get this working. Its just a wrapper on the current one.

Yep, sure! I'd like to take a look.
On one hand, I like the idea of supporting multi-domain in the _example app. On the other hand, I’d like to keep it as simple as possible so that the application doesn’t scare users away with its complexity


[Bug] [Task] Switch task UI do not show branch flow

Search before asking

[X] I had searched in the issues and found no similar issues.

What happened
When I create switch node task, I can not select the parameter branch flow and this make switch type could not be work
What you expected to happen
UI should work when I click branch flow
How to reproduce
Create a new task for switch
Anything else
No response
Are you willing to submit PR?

[ ] Yes I am willing to submit a PR!

Code of Conduct

[X] I agree to follow this project's Code of Conduct

Close this from https://github.com/apache/dolphinscheduler/issues/6563


Change style of row when it is expanded

Hello, is there a way to change the style of an expanded row? I would achieve this: when row is expanded, the text/background of cells would be bold.
Thanks.

@vicrec so far we don't have this feature, but i think I can implement it soon.
However, if you can't wait, I think there's a workaround:

class RowExpandManagment extends React.Component {
  constructor(props) {
    super(props);
    this.state = { expanded: [] };
  }

  handleOnExpand = (row, isExpand, rowIndex, e) => {
    if (isExpand) {
      this.setState(() => ({
        expanded: [...this.state.expanded, row.id]
      }));
    } else {
      this.setState(() => ({
        expanded: this.state.expanded.filter(x => x !== row.id)
      }));
    }
  }

  render() {
    const expandRow = {
      renderer: row => (...),
      expanded: this.state.expanded,
      onExpand: this.handleOnExpand
    };
    const rowStyle = (row, rowIndex) => {
      const style = {};
      if (this.state.expanded.find(id => row.id === id)) {
        style.backgroundColor = 'red';
      }
      return style;
    };
    return (
      <div>
        <BootstrapTable
          keyField="id"
          data={ products }
          columns={ columns }
          expandRow={ expandRow }
          rowStyle={ rowStyle }
        />
      </div>
    );
  }
}

upgrade to newest version and you can use expandRow.parentClassName
https://react-bootstrap-table.github.io/react-bootstrap-table2/docs/row-expand-props.html#expandrowparentclassname-string-function


Inline ProvidesSetupInterface and ProvidesStatusInterface and overhaul return types

Currently SetupResult and Status are DTOs with a string-array of errors, warnings and notices.
This makes it hard to interpret the results from code, e.g. to provide a proper UI or CLI.
The current implementations (DoctrineCheckpointStorage and DoctrineEventStore) only use:

Status::error('not implemented')
SetupResult::success('Table schema is up to date, no migration required')
SetupResult::success('Event store table created/updated successfully')
SetupResult::success('')

I suggest to remove the two interfaces
interface ProvidesSetupInterface
{
    public function setup(): SetupResult;
}

interface ProvidesStatusInterface
{
    public function status(): Status;
}

and instead add the following methods to the EventStoreInterface:
interface EventStoreInterface
{
    // ...

    public function setup(): void;

    public function status(): EventStoreStatus;

setup() could be a no-op (for an unlikely event store implementation that needs no setup) and it does not need a return type IMO. Instead, an exception should be thrown if the setup fails (and IMO we don't need a custom exception type since this can't be handled anyways).
For the status() return type I could imagine a DTO like this:
enum EventStoreStatusType
{
    case OK;
    case ERROR;
    case REQUIRES_SETUP;
}

final class EventStoreStatus {
    public function __construct(
        public readonly EventStoreStatusType $type,
        public readonly string $details,
    ) {}
}

Sounds reasonable to me, you can always implement them empty and just return a "Everything is fine" status


Retro 1.5 follow-up: PR to website on every feature PR

During our 1.4 retro, we decided to have a link to a website PR for every PR that contains a new feature. This PR documents this new requirement.

This is obviously quite old - I'm gonna close this since it's been open so long and has a merge conflict. We could totally add this, but maybe this could be re-opened or done in a separate PR.


{AKS} Vendor new SDK and bump API version to 2024-09-01

Related command

Description

{AKS} Vendor new SDK and bump API version to 2024-09-01
Testing Guide

History Notes

[Component Name 1] BREAKING CHANGE: az command a: Make some customer-facing breaking change
[Component Name 2] az command b: Add some customer-facing feature

This checklist is used to make sure that common guidelines for a pull request are followed.

[x] The PR title and description has followed the guideline in Submitting Pull Requests.

[x] I adhere to the Command Guidelines.

[x] I adhere to the Error Handling Guidelines.

Thank you for your contribution! We will review the pull request and get back to you soon.

/azp run


Access policy cause the Prisma runtime validation error

Use the below zmodel schema file:
https://github.com/noufalr/open/blob/main/schema.zmodel
running the below code:
    const client = enhance(prisma, { user: { id: 1 } };
    const myCorseIds = [randomUUID()];
    const result = await client.enrollment.count({
        where: {
            course_id: {
                in: myCorseIds,
            },
        },
    });

It shows the error in my machine:
Argument `id`: Invalid value provided. Expected StringFilter or String, provided Int.
    at /Users/jiasheng/branch/my-try-prisma/src/zen.ts:10:44,
    at step (/Users/jiasheng/branch/my-try-prisma/src/zen.ts:33:23),
    at Object.next (/Users/jiasheng/branch/my-try-prisma/src/zen.ts:14:53),
    at /Users/jiasheng/branch/my-try-prisma/src/zen.ts:8:71,
    at new Promise (<anonymous>),
    at __awaiter (/Users/jiasheng/branch/my-try-prisma/src/zen.ts:4:12),
    at bookSeat (/Users/jiasheng/branch/my-try-prisma/src/zen.ts:44:12),
    at /Users/jiasheng/branch/my-try-prisma/src/zen.ts:22:11,
    at step (/Users/jiasheng/branch/my-try-prisma/src/zen.ts:33:23) {
  name: 'PrismaClientValidationError',
  clientVersion: '5.2.0',

But according to the customer, the error is:
Unknown argument `is`. Available options are listed in green.
    at load (D:/Dev/Repos/lmsapp/src/routes/(app)/courses/+page.server.ts:40:57),
    at async Module.load_server_data (D:/Dev/Repos/lmsapp/node_modules/@sveltejs/kit/src/runtime/server/page/load_data.js:57:17),
    at async eval (D:/Dev/Repos/lmsapp/node_modules/@sveltejs/kit/src/runtime/server/page/index.js:150:13) {
  name: 'PrismaClientValidationError',
  clientVersion: '5.3.1',

Two problems here:

The context user passed to enhance has mismatching id field typing. This should be validated against User model.
After fixing the id typing, you can see the real error. The problem is with rules like authors == auth(), which should actually be authors?[this == auth(). CLI hasn't caught such typing error.

The CLI now captures the errors in comparing things like authors == auth(). I'm keeping this issue open for tracking how to validate typing of the user context.

The user context now has strong typing. Closing.


Kickout only works through socket.on( 'message' )

The server side kickOut() function can not be understood by the client using socket.on('kickOut') but only by socket.on('message')
server:
client.kickOut( data.uname )

client:
			// works
			self.socket.on( 'message', function ( msg, channel ) {
				console.log( 'msg >', msg )
			} )

			// doesnt work
			self.socket.on( 'kickOut', function ( msg, channel ) {
				console.log( 'msg >', msg )
			} )

This has been driving me nuts all day. lol I feel stupid for trying the message event so late.

@roblav96 It works for me. What is your client and server version? Do socketCluster.version on the client to see the client version.

My brains must have been fried eggs the other day. I was trying to kick client out of a channel that didn't exist :X


Feature request: More color formats

As an iOS developer, I often need colors formatted according to the UIColor / SwiftUI.Color initializer. Support for that would be great! 😊

I considered this, but the best practice is to use Asset Catalog for colors instead of hard-coding the values in code.
If you really want to hard-code colors, the https://bjango.com/mac/skalacolor/ color picker plugin supports this.

I considered this, but the best practice is to use Asset Catalog for colors instead of hard-coding the values in code.

True 😅

If you really want to hard-code colors, the https://bjango.com/mac/skalacolor/ color picker plugin supports this.

Thanks for the suggestion! I didn't actually know that the built-in color supported plugins.


feat: allow specifying allowChange in the collection's beforeChange

Description
I work a lot in my beforeChange hooks. However, there are some operations I would need to do in a collection when it's created, for which I need the document ID.
Now, you might say: why not just add another afterChange hook and perform those operations there?
The reason is, that I cannot easily re-use data I have already "calculated" / "retrieved" in the beforeChange hook (e.g., the result of an API call or some transformation) in that afterChange hook without either

doing the calculation / retrieval again
saving that data inside the collection in the beforeChange hook, then retrieving & transforming it again in the afterChange hook. This, however, wastes resources and is tedious to do.

With this PR, you can specify what you would like to happen AFTER the collection has changed right inside the beforeChange hook.
This is done by returning a afterChange function from the beforeChange hook, inside which you can use any variables which have been defined inside your beforeChange hook.
Will remove the console log when I consider it ready, but I would like to hear your opinion on this first!
Example of a use-case
export const MyCollection: CollectionConfig = {
  ...
  hooks: {
    beforeChange: [
      async (props) => {
        const someExpensiveCalculationResult = await someExpensiveFunction(props.data.title);
        return {
          afterChange: async (afterChangeProps) => {
            console.log('afterChange', afterChangeProps?.doc?.id);
            // Now, I can keep working with the someExpensiveCalculationResult object here:
            await someFunction(afterChangeProps?.doc?.id, someExpensiveCalculationResult.content, someExpensiveCalculationResult.otherUsefulResultProperty);
          },
          content: markdownToLexical(someExpensiveCalculationResult.content);
          ...props.data,
        };
      },
    ],
  },
  ...

How it works
The passed afterChange function is removed before the data returned from the beforeChange hook is saved.
That function is then called just like a normal afterChange hook after the data has been saved, with the difference that it's called before all other afterChange hooks of that collection.
An alternative (please comment on that)
Alternatively, we could pass an idPromise with type Promise<number> parameter into the beforeChange hook.
Inside it, you could then use
idPromise.then(id => {})
in order to work with the ID. We'd resolve that idPromise after the collection has been created / updated, so it would kinda function like an afterRead hook without the extra work.

[X] I have read and understand the CONTRIBUTING.md document in this repository

Type of change

[ ] Bug fix (non-breaking change which fixes an issue)
[X] New feature (non-breaking change which adds functionality)
[ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
[X] This change requires a documentation update

Checklist:

[ ] I have added tests that prove my fix is effective or that my feature works
[X] Existing test suite passes locally with my changes
[ ] I have made corresponding changes to the documentation

Hey @AlessioGr — this is super cool. I like what you're going for here.
I do think that the alternative solution you've provided is likely better, though, because that way the return types of beforeChange hooks don't have to be muddled with. I think that if we can, we should keep the beforeChange function reutrning only the shape of the document being changed, rather than introducing "special properties" that we have to watch out for.
That said, your alternative solution fixes that. I think that's the way to go, however I don't know about calling it idPromise. Instead, I figure you should be able to send any data you want, at any time, through. So if you did need to use the result of someExpensiveCalculation or similar, you could. Rather than just the id itself.
That also makes me think that we need some sort of context API bound to req and able to be typed somewhere, maybe via overriding the PayloadRequest, so that you could pass context through the hooks lifecycle. This is likely the best, most future-proofed solution, and I think is what the req already provides to us.
If we don't have a way to gracefully create some type of context on the req, then I think the move would be to follow along with your idPromise idea, but maybe changing it to be called onChange. That better describes the function (it will be called on change). However, only having the ID is only solving one part of ultimately needing a solution for lifecycle context overall, where it could be strongly typed.
Maybe we look at extending the PayloadRequest object with more explicit types? What do you think? I'd like to make this pattern compatible with plugins, as well, so by merely having a plugin defined, you should be able to "extend" the PayloadRequest and have its "context" typed on the req.
Slate does something like this, where they tell you to extend the built-in Slate types with your own app-specific types:
https://docs.slatejs.org/concepts/12-typescript#defining-editor-element-and-text-types
What do you think?

I think that question is pretty much what you and I should pair on as soon as possible. Dan and I were throwing around some ideas about how to tape some of the inner workings of Payload in a flexible way, and we have a fledgling of a thought, but I want to try to write up a proof of concept. Let’s pair tomorrow

Closing in favor of #2796


idea for OMP optimization (long-term)

For the longer-term, here is an idea for OMP optimization.
On the first OMP iteration, remember the N genes that had highest scores for each spot (N=max_genes*3 or so).   On subsequent iterations, don't bother computing the dot product of any spot's colors with genes outside of its list .
To find out if this is worth trying, we could estimate how much time is spent on the first vs subsequent iterations.  If the first iteration is taking substantially more time than all the other iterations together, this suggestion would have limited benefit.

I think we can close. OMP already does cut out pixels when they do not need to be iterated further (when the dot product score is too low). Also, we do find that the first iteration takes much longer than other iterations (generally it runs on maybe 2million pixels and takes 15s to run on pytorch CPU, which then goes to 1million on the next iteration, then maybe 700,000, etc..).


Always forgot platform

I have to set up "Platform" in settings because it forever forgets.
Please fix it. It is a really annoying issue

Have you tried using the Domain Registry configuration in the plugin settings? The plugin can use this to automatically select the right host each time you open a new project so you don't have to configure it manually each time.

I had same problem - using remote private hosted gitlab.
Adding the private gitlab domain name to "Domain registry" fixed it for me.


Is alignment included?

Hi, does the repository include alignment?

Nope

@hbellafkir @tengerye
Sorry. I don't understand. The code provides locations of eyes, nose, mouth etc right? Doesn't alignment mean those landmark localisation? Could you please explain what exactly is missing here?

@vandana-rajan
I thought alignment should include rotating the face too. but you right, alignment here means just returning the landmark points.


ci: stabilize case test_read_index_stale_in_suspect_lease

Signed-off-by: qupeng<EMAIL_ADDRESS>What problem does this PR solve?
The test case test_read_index_stale_in_suspect_lease is not stable. It sometimes fails on transferring leadership.
What is changed and how it works?
Enlarge raft log compaction gap to ensure leader transferring success. Just like https://github.com/tikv/tikv/pull/9321 does.
Related changes
Check List
Release note

No release note.

/merge

/merge

/merge

/merge

/merge

/merge

/run-all-tests

/run-all-tests


[5.4] Add getParentClass to Pivot relationship

When working with Pivots, it might be that you need to know which class was used as the parent relationship.

Just make the property public :)

👍🏻 new PR will land today.


Recent bug: "erm wut"

Hi,
Here is the fiddle:
http://jsfiddle.net/v16b6vcj/
...this is a very recent bug, it appeared at most in the last 2/3 days.
It's thrown here:
https://github.com/ractivejs/ractive/blob/dev/src/virtualdom/items/Component/initialise/createInstance.js
This occurs during initialization. Here is the full stack trace:
 Uncaught Error: erm wut
 createInstance.js:98 (anonymous function)
 createInstance.js:44 createInstance
 init.js:25 Component$init
 _Component.js:16 Component
 init.js:55 createItem
 init.js:31 (anonymous function)
 init.js:28 Fragment$init
 Fragment.js:20 Fragment
 initialise.js:62 initialiseRactiveInstance
 Ractive.js:18 Ractive

Ok, found it. Updated.


Remove date from graph point tooltips

Graph point tooltips should just have the time. No date needed.


models: Rename Realm.show_digest_email field to Realm.digest_emails_enabled and it's occurrences.

This renames Realm.show_digest_email field to
digest_emails_enabled, for greater clarity as to what it does
just from seeing the setting name, without having to look it up.
Fixes part of #10042.

Nice, merged, thanks @zy964c!


Show Public IP Address When Using CSV output

same issue as #336 , only for CSV output

Unfortunately due to parsing issues, I cannot make changes to the CSV output at this time.  It will have to wait for a major release, with backwards incompatible changes.

This is resolved currently in the no-globals branch which will become the next major release.


transaction-pool: drop unpropagable txs if local node cant author blocks

Fixes #8045.

This is still missing tests but I'll add one in a bit.


Installation instructions

Are there any detailed installation instructions?  I've been trying to get this to work on Mac OS (Apple Silicon) and the extension doesn't seem to do anything.  I installed helm-ls with homebrew, and can run the command from the CLI.  I've added the file_types section to zed settings.  When I look at LSP logs, it only shows yaml-language-server, json-language-server, and prettier.  When I open helm templates, I just see lots of YAML warnings, even when selecting helm as the language in the bottom right.

@bluecamel Hello, I'm not a maintainer, but struggled a bit with same problems. Here is my solution: #13
Prerequisites: install helm-ls and yaml-language-server via your package manager of choice.


[Bug]: puppeteer v19.10.1 in docker fails on macOS [0424/114437.819230:FATAL:zygote_host_impl_linux.cc(127)] No usable sandbox!

Bug expectation
I am trying out puppeteer script in docker on macOS
I run
docker run -i --init --cap-add=SYS_ADMIN --rm ghcr.io/puppeteer/puppeteer:latest node -e "$(cat coremakepdf.js)"
or  (without --cap-add=SYS_ADMIN )
docker run -i --init --rm ghcr.io/puppeteer/puppeteer:latest node -e "$(cat coremakepdf.js)"
coremakepdf.js script content:
const puppeteer = require('puppeteer');

(async () => {
    const browser = await puppeteer.launch();
    const page = await browser.newPage();
    await page.goto('https://developer.chrome.com/docs/puppeteer/get-started/', {
        waitUntil: 'networkidle2',
    });
    await page.pdf({ path: 'developer.chrome.com.pdf', format: 'a4' });

    await browser.close();
})();

non-PDF related script fails with similar error, so actual script does not matter, but running in docker
const puppeteer = require('puppeteer');

(async () => {

    const browser = await puppeteer.launch();
    const page = await browser.newPage();
    // await page.goto('chrome://settings/help');
    // (node:24252) UnhandledPromiseRejectionWarning: Error: net::ERR_INVALID_URL at chrome://settings/help
    //await page.goto('https://example.com/'); //OK
    //await page.goto('https://developer.chrome.com/docs/puppeteer/get-started/'); //OK
    await page.goto('https://developer.chrome.com/docs/puppeteer/get-started/', {
        waitUntil: 'networkidle2',
    }); //OK

    await page.screenshot({ path: 'about3.png' });

    await browser.close();
})();

WARNING: The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested

  Puppeteer old Headless deprecation warning:
    In the near feature `headless: true` will default to the new Headless mode
    for Chrome instead of the old Headless implementation. For more
    information, please see https://developer.chrome.com/articles/new-headless/.
    Consider opting in early by passing `headless: "new"` to `puppeteer.launch()`
    If you encounter any bugs, please report them to https://github.com/puppeteer/puppeteer/issues/new/choose.

/home/pptruser/node_modules/@puppeteer/browsers/lib/cjs/launch.js:262
                reject(new Error([
                       ^

Error: Failed to launch the browser process!
[0424/114437.785256:ERROR:stack_trace_posix.cc(811)] Failed to parse the contents of /proc/self/maps
[0424/114437.819230:FATAL:zygote_host_impl_linux.cc(127)] No usable sandbox! Update your kernel or see https://chromium.googlesource.com/chromium/src/+/main/docs/linux/suid_sandbox_development.md for more information on developing with the SUID sandbox. If you want to live dangerously and need an immediate workaround, you can try using --no-sandbox.
#0 0x004007d22f72 base::debug::CollectStackTrace()
#1 0x004007d0f4b3 base::debug::StackTrace::StackTrace()
#2 0x004007c61fbf logging::LogMessage::~LogMessage()
#3 0x00400647ec16 content::ZygoteHostImpl::Init()
#4 0x0040071b8b23 content::ContentMainRunnerImpl::Initialize()
#5 0x0040071b6427 content::RunContentProcess()
#6 0x0040071b6606 content::ContentMain()
#7 0x0040077a01fa headless::HeadlessShellMain()
#8 0x0040038d7255 ChromeMain
#9 0x004010fa5d0a __libc_start_main
#10 0x0040038d702a _start

qemu: uncaught target signal 5 (Trace/breakpoint trap) - core dumped

TROUBLESHOOTING: https://pptr.dev/troubleshooting

    at Interface.onClose (/home/pptruser/node_modules/@puppeteer/browsers/lib/cjs/launch.js:262:24)
    at Interface.emit (node:events:525:35)
    at Interface.close (node:internal/readline/interface:533:10)
    at Socket.onend (node:internal/readline/interface:259:10)
    at Socket.emit (node:events:525:35)
    at endReadableNT (node:internal/streams/readable:1359:12)
    at process.processTicksAndRejections (node:internal/process/task_queues:82:21)

Node.js v18.16.0

Bug behavior

[ ] Flaky
[ ] PDF

Minimal, reproducible example
const puppeteer = require('puppeteer');

(async () => {
    const browser = await puppeteer.launch();
    const page = await browser.newPage();
    await page.goto('https://developer.chrome.com/docs/puppeteer/get-started/', {
        waitUntil: 'networkidle2',
    });
    await page.pdf({ path: 'developer.chrome.com.pdf', format: 'a4' });

    await browser.close();
})();

Error string
Error: Failed to launch the browser process! [0424/114437.785256:ERROR:stack_trace_posix.cc(811)] Failed to parse the contents of /proc/self/maps [0424/114437.819230:FATAL:zygote_host_impl_linux.cc(127)] No usable sandbox! Update your kernel or see https://chromium.googlesource.com/chromium/src/+/main/docs/linux/suid_sandbox_development.md for more information on developing with the SUID sandbox. If you want to live dangerously and need an immediate workaround, you can try using --no-sandbox.
Puppeteer configuration
const {join} = require('path');

/**
 * @type {import("puppeteer").Configuration}
 */
module.exports = {
    // Changes the cache location for Puppeteer.
    cacheDirectory: join(__dirname, '.cache', 'puppeteer'),
};

Puppeteer version
19.10.1
Node version
v18.16.0
Package manager
yarn
Package manager version
1.22.19
Operating system
macOS

Are you on arm64? We offer no binaries for that platform and there is an issue for that. You need Rosetta emulation turned on in your Docker settings most likely.

googling and trying https://levelup.gitconnected.com/docker-on-apple-silicon-mac-how-to-run-x86-containers-with-rosetta-2-4a679913a0d5
i.e.

Finally, in the Feature in development section, enable Rosetta.
and restart Docker

Running again, it worked


This version of KaTeX has the most reliable fraction lines for the moment.

Fixes #117. @gnestor, can you see if you can reproduce any of the disappearing fraction lines with this branch?

It looks like they're still disappearing 😔

Arg! Okay, let me submit an alternative.

Closed in favor of #124


I can't run php artisan rinvex:migrate:attributes

Hi guys !
I can't run php artisan rinvex:migrate:attributes. it do not work
run: php artisan rinvex:migrate:attributes
i got an errror:
 There are no commands defined in the "rinvex:migrate" namespace.
Anybody can help me?

Actually the command is rinvex:attributes:migrate

I have just tested both, mismatch between branches.

Merged develop into master, now both are on the same state. Hope I didn't break something else 😅

This should be working now, so I'll close it but feel free to re-open if you still have any issues..


Managing local conda environments inside AiiDALab container

While I understand the new paragraph in README.md about the special volume that AiiDAlab launch creates for local conda environments, I am still unsure how to use it in practice.
To be concrete, in my case I need to install xtb-python as a dependency of my AiiDALab application. This package is not published on pip and must be installed via conda-forge channel.
So far I've been installing it as root
aiidalab-launch exec --privileged -- conda install xtb-python

If I wanted to install as aiida user, my understanding is that I'd need to create a new conda environment. Should this new environment be a clone of the base, like this?
conda create --name xtb --clone base

And then I guess I need to automatically activate it, perhaps in /home/aiida/.bashrc? What is the best practice here?
Thanks!

@csadorf no worries, thanks! Would you happen to have a working example somewhere of setting up and using nondefault conda environment for the AiiDAlab apps? I looked into it a bit and it seems nontrivial. What I would really like is to make so that when I do aiidalab-launch start the app uses the new environment automatically (without e.g. switching the kernel).

@csadorf no worries, thanks! Would you happen to have a working example somewhere of setting up and using nondefault conda environment for the AiiDAlab apps? I looked into it a bit and it seems nontrivial. What I would really like is to make so that when I do aiidalab-launch start the app uses the new environment automatically (without e.g. switching the kernel).

No, I don't think such an example exist yet. Just to make sure that I understand correctly: Your primary motivation is to install additional dependencies that are required by an app that cannot be installed by pip, right? The replacement of the default conda environment is not the primary motive, or is it?

Yes, exactly, I need additional dependencies via pip, and want them to persist between the AiiDAlab launch invocations.

I thought they cannot be installed via pip?

Uh, apologies, I meant via conda.

Update on this.
The original issue here was that one could not put the conda install in the post_install script, because that script was run under aiida user, but installing into conda environment required root privileges. However, I think in the new Docker stack images that is no longer the case since the conda environment is managed by the jovyan user. So this issue might be solved already. I will test whether conda install works within post_install. If it works, the only thing to be done is here is to document this somewhere (but I think the AiiDAlab documentation needs a bigger overhaul and update anyway).
I have reduced the urgency to 'low' because it's no longer a blocker for me since I am building my own Docker image anyway. If anybody else runs into this then it can be increased again.
cc @unkcpz @yakutovicha

@unkcpz @yakutovicha  this issue in on the wrong repo. Would you mind moving it either to the docker-stack or aiidalab repositories?
This is related to our discussion in https://github.com/aiidalab/aiidalab-docker-stack/issues/343


Clean up npm distribution package

Clean up npm distribution package to avoid uploading unnecessary files that developers don't need for using pumascript, such as: tracks, gruntfile and probably tests.

Done in #74


BUGFIX: Fix Errorf statements in core/record_aging_notifier.go.

Fix for bug that prevents tests in core/ from compiling.

Coverage remained the same at 32.86% when pulling 3669d62a8c4a34867f856319943389c555264a9b on TS_fix_record_aging_notifier into b89e3a5bd36f32d84f59d68d981525fe163eac26 on master.


[ANDROID] FirebaseMessaging: Error while parsing timestamp in GCM event

It seems that the plugin or system can not handle notification after add action, on "Reply" or "Close" is working but if you click on notification it crash.
Bug Information
Code in MainApplication.cs
 FirebasePushNotificationManager.Initialize(this, new NotificationUserCategory[]  {                 new NotificationUserCategory("message", new List<NotificationUserAction>                 {                     new NotificationUserAction("Reply", "Reply", NotificationActionType.Foreground),                     new NotificationUserAction("Close", "Close", NotificationActionType.Foreground)                 })             }, true);

[NetworkSecurityConfig] No Network Security Config specified, using platform default
[System] ClassLoader referenced unknown path: /system/framework/tcmclient.jar
[Mono] Assembly Ref addref Xamarin.Firebase.Messaging[0xa758cf40] -> Xamarin.GooglePlayServices.Tasks[0xaa035320]: 3
[FirebaseMessaging] Error while parsing timestamp in GCM event
[FirebaseMessaging] java.lang.NumberFormatException: null
[FirebaseMessaging] 	at java.lang.Integer.parseInt(Integer.java:483)
[FirebaseMessaging] 	at java.lang.Integer.valueOf(Integer.java:611)
[FirebaseMessaging] 	at com.google.firebase.messaging.zzd.zzb(Unknown Source)
[FirebaseMessaging] 	at com.google.firebase.messaging.zzd.zzg(Unknown Source)
[FirebaseMessaging] 	at com.google.firebase.messaging.FirebaseMessagingService.handleIntent(Unknown Source)
[FirebaseMessaging] 	at com.google.firebase.iid.zzc.run(Unknown Source)
[FirebaseMessaging] 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
[FirebaseMessaging] 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
[FirebaseMessaging] 	at java.lang.Thread.run(Thread.java:761)
[FirebaseMessaging] Unable to log event: analytics library is missing

Version Number of Plugin: 2.3
Version of Xamarin: 3.1.0
Steps to reproduce the Behavior
Add "click_action" in notification

Are you using GCM or FCM?

FCM

How are you sending the payload?

Hi @rdelrosario I have same problem, below is my log, notification has appeared, but event OnNotificationReceived not triggered, I send using postman from your Firebase Postman Collection
08-10 17:23:15.529 D/Mono    (24424): Assembly Ref addref Xamarin.Firebase.Messaging[0x72d4bf1100] -> Xamarin.GooglePlayServices.Tasks[0x72d4bf1700]: 3
08-10 17:23:15.544 W/FirebaseMessaging(24424): Error while parsing timestamp in GCM event
08-10 17:23:15.544 W/FirebaseMessaging(24424): java.lang.NumberFormatException: s == null
08-10 17:23:15.544 W/FirebaseMessaging(24424): 	at java.lang.Integer.parseInt(Integer.java:570)
08-10 17:23:15.544 W/FirebaseMessaging(24424): 	at java.lang.Integer.valueOf(Integer.java:794)
08-10 17:23:15.544 W/FirebaseMessaging(24424): 	at com.google.firebase.messaging.zzd.zzb(Unknown Source:60)
08-10 17:23:15.544 W/FirebaseMessaging(24424): 	at com.google.firebase.messaging.zzd.zzg(Unknown Source:26)
08-10 17:23:15.544 W/FirebaseMessaging(24424): 	at com.google.firebase.messaging.FirebaseMessagingService.handleIntent(Unknown Source:160)
08-10 17:23:15.544 W/FirebaseMessaging(24424): 	at com.google.firebase.iid.zzc.run(Unknown Source:4)
08-10 17:23:15.544 W/FirebaseMessaging(24424): 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
08-10 17:23:15.544 W/FirebaseMessaging(24424): 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
08-10 17:23:15.544 W/FirebaseMessaging(24424): 	at java.lang.Thread.run(Thread.java:764)
08-10 17:23:15.545 W/FirebaseMessaging(24424): Unable to log event: analytics library is missing

Anyone solved this? cos Im having exactly the same problem..

Fixed on latest release


Rigidbody 2D with no damp still slows down

I think this one is legit. So in the Godot phys engine, objects with zero linear damp will go in their direction forever. Likewise, zero angular damp should spin forever. In Godot Rapier both linear and angular slow over time with zero damp, tossing the first law of motion out the window like a baby with the bath water... or something.
Anything that moves in this project exhibits the behavior: https://github.com/GeminiSquishGames/Rapier2Dbug
Seems like Replace rather than Combine mode helps, but this isn't how Godot works. Pretty sure zero damp should let the object move forever unless acted upon in order to simulate it right... I think.

Closing this and documenting in the readme that friction and bounce doesn't work same as in godot. After this will be fixed I will be able to make it work same:
https://github.com/dimforge/rapier/issues/622


[Bug]: Creating a New User Results in Creation of Two Teams

What happened?
When a new user is created in a fresh installed application, the system unexpectedly creates two teams for the user instead of one.

How to reproduce the bug

Fresh install
register new user

Package Version
0.0.10
PHP Version
8.3.7
Laravel Version
11.10.0
Which operating systems does with happen with?
macOS
Notes
No response

This is happening to me too.

I think this might be a bug in filament itself

It seems that both Filament and this package are creating a default team for every registered user. I've disabled the team creation feature for this package, which appears to have resolved the issue.
Commit: https://github.com/stephenjude/filament-jetstream/commit/6ac19af9081355ef22462b453e90019625588016
Cc: @D4ve-R @danpalmieri


Posh-git can not see the current branch working through a symbolic link

The simbolic link reference can not sincronice very well
It get
C:\dev\project [(FTR-feature)]>
instead
C:\dev\project [FTR-feature↑ +4 ~0 -0 !]>
The project was clone to the parent pointed by project. It's the same structure but in another drive.

Sorry for the delayed response here... We're pretty dependent on git status here, so if git status -sb isn't showing you the expected status, I'm not sure what we can do.
That said, I'm not sure why git status wouldn't be able to correctly resolve HEAD being a symbolic link?

Hi Keith.
Happy New Year
How much are you payed to develop this code? So thanks for you code and don’t apology for delay.
I can ask  why git status cannot resolve HEAD  being a symbolic link, if you didn’t that before.
PD.
I  tried to used symbolic link to put obj directories and files in a RAM disk to improve compiling time. But despite the symbolic link problem, having a SSD, the bottleneck, in my case, is the processor, even it didn’t look heavily used (it is but the load are not well split in all the cores)
Thanks
Antonio de la Cruz
acruval<EMAIL_ADDRESS>1 Beresford Street
Dublin D07 T611
<EMAIL_ADDRESS>From: Keith Dahlby<EMAIL_ADDRESS>Sent: 04 January 2017 17:50
To: dahlbyk/posh-git
Cc: Antonio de la Cruz del Valle; Author
Subject: Re: [dahlbyk/posh-git] Posh-git can not see the current branch working through a symbolic link (#294)
Sorry for the delayed response here... We're pretty dependent on git status here, so if git status -sb isn't showing you the expected status, I'm not sure what we can do.
That said, I'm not sure why git status wouldn't be able to correctly resolve HEAD being a symbolic link?
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHubhttps://github.com/dahlbyk/posh-git/issues/294#issuecomment-270437199, or mute the threadhttps://github.com/notifications/unsubscribe-auth/AQVOqvpP3UBjGHIn6SCIvsTkZHt-W8axks5rO9vjgaJpZM4JA5xu.
*********************************************************** Email Disclaimer http://www.totalproduce.com/emaildisclaimer.html *********************************************************** Total Produce plc Registered in Ireland: No.427687 Registered Office: Charles McCann Building, Rampart Road, Dundalk, Co. Louth, Ireland. *** Please think of the environment before printing this email ***

How much are you payed to develop this code? So thanks for you code and don’t apology for delay.

That's fair.
So the neat part about knowing Git internals is that I definitely transposed "symoblic link" to "symbolic reference" in my head, and got confused. git status certainly should work with symbolic references, but that's not at all what you asked.
Handling symbolic links in Git on Windows is a common question, and the short version is that Git views the link as a normal blob with contents and a file mode that is added to the repository. Their behavior should be pretty stable now on platforms that support POSIX symlinks, but not on Windows.
I'm going to go ahead and close this issue, since it's not specific to posh-git, but feel free to follow up with any specific questions or results from your research.