Fields not nullable when INNER JOINing to a LEFT JOIN

This contrived example:
CREATE TABLE users (
  user_id    INT PRIMARY KEY,
  city_id    INT -- nullable
);
CREATE TABLE cities (
  city_id    INT PRIMARY KEY,
  mayor_id   INT NOT NULL
);
CREATE TABLE mayors (
  mayor_id   INT PRIMARY KEY,
  full_name  TEXT NOT NULL
);

-- name: GetMayors :many
SELECT
    user_id,
    mayors.full_name
FROM users
LEFT JOIN cities USING (city_id)
INNER JOIN mayors USING (mayor_id);

Produces this results struct:
type GetMayorsRow struct {
	UserID   int32
	FullName string
}

Running this query will fail if city_id is NULL. Because of the left join, the correct type for FullName is sql.NullString.

This might be a duplicate of #374? Just ran into this when doing a FULL JOIN.

Outer joins definitely aren't supported yet, but mayors.full_name shouldn't be null with the provided query.
mysql> SELECT * FROM users;
+---------+---------+
| user_id | city_id |
+---------+---------+
|       1 |    NULL |
|       2 |       1 |
+---------+---------+
2 rows in set (0.00 sec)

mysql> SELECT * FROM mayors;
+----------+-----------+
| mayor_id | full_name |
+----------+-----------+
|        1 | bob       |
+----------+-----------+
1 row in set (0.00 sec)

mysql> SELECT * FROM cities;
+---------+----------+
| city_id | mayor_id |
+---------+----------+
|       1 |        1 |
+---------+----------+
1 row in set (0.00 sec)

mysql> SELECT
    ->     user_id,
    ->     mayors.full_name
    -> FROM users
    -> LEFT JOIN cities USING (city_id)
    -> INNER JOIN mayors USING (mayor_id);
+---------+-----------+
| user_id | full_name |
+---------+-----------+
|       2 | bob       |
+---------+-----------+
1 row in set (0.00 sec)

mysql> SELECT
    ->     user_id,
    ->     mayors.full_name
    -> FROM users
    -> LEFT JOIN cities USING (city_id)
    -> LEFT JOIN mayors USING (mayor_id);
+---------+-----------+
| user_id | full_name |
+---------+-----------+
|       1 | NULL      |
|       2 | bob       |
+---------+-----------+
2 rows in set (0.00 sec)

Please see https://github.com/kyleconroy/sqlc/pull/983 for WIP on proper support.

Should this be closed, seeing as #983 fixed it?

I just stumbled upon this again. The example still produces the incorrect type, see this playground link.
Could we maybe reopen the issue?


Add automated testing for API

Is your feature request related to a problem? Please describe.
There is no automated testing for the API.
Describe the solution you'd like
Automated tests for the API codebase

not stale.

Sorry for the delay. We hope you are able to join us for our weekly technical scrums on Thursdays at 10AM PT to discuss this issue further.


Add official support for staging environment

Add a process.yml for PM2 environment config - I figure it's ok if this is committed
Rewrote db config in YAML
Add a staging environment to the db config

sequelize-cli doesn't support YAML config files, so unfortunately I had to move back to JSON 😢


add mixer route config only if mixer exists to improve efficiency

[APPROVALNOTIFIER] This PR is NOT APPROVED
This pull-request has been approved by: irisdingbj
To fully approve this pull request, please assign additional approvers.
We suggest the following additional approver: mandarjog
If they are not already assigned, you can assign the PR to them by writing /assign @mandarjog in a comment when ready.
The full list of commands accepted by this bot can be found here.
The pull request process is described here

Needs approval from an approver in each of these files:

pilot/pkg/networking/plugin/mixer/OWNERS

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@irisdingbj: The following test failed, say /retest to rerun them all:

Test name
Commit
Details
Rerun command

prow//e2e-simpleTests-minProfile.sh
dc386c43571850e3f4cfb136d38ba4ab2242c396
link
/test e2e-simpleTestsMinProfile

Instructions for interacting with me using PR comments are available here.  If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository. I understand the commands that are listed here.

@douglas-reid
This is just make consistent with  other two callbacks for mixer plugin: OnOutboundListener and OnInboundListener which will be called only if mixer exists.
I think our original test should be enough for this.

OK. I'm just concerned about test coverage. I don't know how the Pilot code base deals with coverage at a unit level.

/lgtm

[APPROVALNOTIFIER] This PR is APPROVED
This pull-request has been approved by: douglas-reid, irisdingbj
The full list of commands accepted by this bot can be found here.
The pull request process is described here

Needs approval from an approver in each of these files:

pilot/pkg/networking/plugin/mixer/OWNERS [douglas-reid]

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment


[SPARK-35106] Avoid failing rename in HadoopMapReduceCommitProtocol with dynamic partition overwrite

What changes were proposed in this pull request?
Clean up code in HadoopMapReduceCommitProtocol#commitJob to avoid renames that will always fail (usually silently).
Why are the changes needed?
This renames in this block will always fail under dynamicPartitionOverwrite == true:
https://github.com/apache/spark/blob/0494dc90af48ce7da0625485a4dc6917a244d580/core/src/main/scala/org/apache/spark/internal/io/HadoopMapReduceCommitProtocol.scala#L191-L218
We have the following sequence of events:

The first block deletes all parent directories of filesToMove.values
The for-loop block attempts to rename all filesToMove.keys to filesToMove.values
The third block does directory-level renames to place files into their final locations

All renames in the for-loop will always fail, since all parent directories of filesToMove.values were just deleted. Under a normal HDFS scenario, the contract of fs.rename is to return false under such a failure scenario, as opposed to throwing an exception. This allows for dynamic partition overwrite to work, albeit with a bunch of failed renames in the middle. Really, we should only run the for-loop deletions in the dynamicPartitionOverwrite == false case, and consolidate the two if-blocks for the true case.
Does this PR introduce any user-facing change?
In almost all cases, no. However if you happen to use a FileSystem implementation which throws an exception on this kind of fs.rename case, dynamicPartitionOverwrite will be unusable prior to this PR, and start working after this PR.
How was this patch tested?
Did not add/modify tests. Didn't see test cases for this file. Open to suggestions on where/how to add such tests.

cc @mridulm and @cloud-fan

Test build #137490 has started for PR 32207 at commit 07f9189.

Kubernetes integration test starting
URL: https://amplab.cs.berkeley.edu/jenkins/job/SparkPullRequestBuilder-K8s/42065/

Kubernetes integration test status failure
URL: https://amplab.cs.berkeley.edu/jenkins/job/SparkPullRequestBuilder-K8s/42065/

Test build #137490 has finished for PR 32207 at commit 07f9189.

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

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

I took a look at the failing test:
org.apache.spark.sql.sources.InsertSuite.SPARK-20236: dynamic partition overwrite with customer partition path

== Results ==
!== Correct Answer - 3 ==   == Spark Answer - 2 ==
!struct<>                   struct<i:int,part1:int,part2:int>
 [2,2,2]                    [2,2,2]
 [3,1,2]                    [3,1,2]
![4,1,1]

It does seem legitimate, but it led me to be even more confused about this functionality. It fails at this last step:
        sql("insert overwrite table t partition(part1=1, part2) select 4, 1")
        checkAnswer(spark.table("t"), Row(4, 1, 1) :: Row(2, 2, 2) :: Row(3, 1, 2) :: Nil)

I ran through this code in a debugger and it appears that the unit test is relying on the behavior of LocalFileSystem, which is different from HDFS: if you try to rename to a nonexistent directory, the directory is silently created for you. I double-checked in a Spark shell to be sure, and this is not what HDFS does; it returns false from rename as expected.
This means that the unit test works properly on a local FS, but fails when run against HDFS. I verified this by executing the unit test code (slightly modified) in a Spark Shell instance:
scala> val scheme = "file"
scala> :paste
// Entering paste mode (ctrl-D to finish)

        val basepath = s"$scheme:/tmp/ekrogentest/base"
        val path1 = s"$scheme:/tmp/ekrogentest/1"
        val path2 = s"$scheme:/tmp/ekrogentest/2"

        // refresh everything
        sql("DROP TABLE IF EXISTS t")
        val fs = new Path(basepath).getFileSystem(sc.hadoopConfiguration)
        fs.delete(new Path(basepath).getParent, true)
        Seq(basepath, path1, path2).foreach(p => fs.mkdirs(new Path(p)))

        sql(
          s"""
            |create table t(i int, part1 int, part2 int) using parquet
            |partitioned by (part1, part2) location '$basepath'
          """.stripMargin)

        //val path1 = Utils.createTempDir()
        sql(s"alter table t add partition(part1=1, part2=1) location '$path1'")
        sql(s"insert into t partition(part1=1, part2=1) select 1")
        sql("SELECT * FROM t").show()
        //checkAnswer(spark.table("t"), Row(1, 1, 1))

        sql("insert overwrite table t partition(part1=1, part2=1) select 2")
        sql("SELECT * FROM t").show()
        //checkAnswer(spark.table("t"), Row(2, 1, 1))

        sql("insert overwrite table t partition(part1=2, part2) select 2, 2")
        sql("SELECT * FROM t").show()
        //checkAnswer(spark.table("t"), Row(2, 1, 1) :: Row(2, 2, 2) :: Nil)

        //val path2 = Utils.createTempDir()
        sql(s"alter table t add partition(part1=1, part2=2) location '$path2'")
        sql("insert overwrite table t partition(part1=1, part2=2) select 3")
        sql("SELECT * FROM t").show()
        //checkAnswer(spark.table("t"), Row(2, 1, 1) :: Row(2, 2, 2) :: Row(3, 1, 2) :: Nil)

        sql("insert overwrite table t partition(part1=1, part2) select 4, 1")
        sql("SELECT * FROM t").show()
        //checkAnswer(spark.table("t"), Row(4, 1, 1) :: Row(2, 2, 2) :: Row(3, 1, 2) :: Nil)

// Exiting paste mode, now interpreting.

+---+-----+-----+
|  i|part1|part2|
+---+-----+-----+
|  1|    1|    1|
+---+-----+-----+

+---+-----+-----+
|  i|part1|part2|
+---+-----+-----+
|  2|    1|    1|
+---+-----+-----+

+---+-----+-----+
|  i|part1|part2|
+---+-----+-----+
|  2|    2|    2|
|  2|    1|    1|
+---+-----+-----+

+---+-----+-----+
|  i|part1|part2|
+---+-----+-----+
|  3|    1|    2|
|  2|    2|    2|
|  2|    1|    1|
+---+-----+-----+

+---+-----+-----+
|  i|part1|part2|
+---+-----+-----+
|  3|    1|    2|
|  2|    2|    2|
|  4|    1|    1|
+---+-----+-----+

Works fine when using the local file system.
However when I rerun the same using HDFS:
scala> val scheme = "hdfs"
scheme: String = hdfs

scala> :paste
// Entering paste mode (ctrl-D to finish)

        val basepath = s"$scheme:/tmp/ekrogentest/base"
        val path1 = s"$scheme:/tmp/ekrogentest/1"
        val path2 = s"$scheme:/tmp/ekrogentest/2"

        sql("DROP TABLE IF EXISTS t")
        val fs = new Path(basepath).getFileSystem(sc.hadoopConfiguration)
        fs.delete(new Path(basepath).getParent, true)
        Seq(basepath, path1, path2).foreach(p => fs.mkdirs(new Path(p)))

        sql(
          s"""
            |create table t(i int, part1 int, part2 int) using parquet
            |partitioned by (part1, part2) location '$basepath'
          """.stripMargin)

        //val path1 = Utils.createTempDir()
        sql(s"alter table t add partition(part1=1, part2=1) location '$path1'")
        sql(s"insert into t partition(part1=1, part2=1) select 1")
        sql("SELECT * FROM t").show()
        //checkAnswer(spark.table("t"), Row(1, 1, 1))

        sql("insert overwrite table t partition(part1=1, part2=1) select 2")
        sql("SELECT * FROM t").show()
        //checkAnswer(spark.table("t"), Row(2, 1, 1))

        sql("insert overwrite table t partition(part1=2, part2) select 2, 2")
        sql("SELECT * FROM t").show()
        //checkAnswer(spark.table("t"), Row(2, 1, 1) :: Row(2, 2, 2) :: Nil)

        //val path2 = Utils.createTempDir()
        sql(s"alter table t add partition(part1=1, part2=2) location '$path2'")
        sql("insert overwrite table t partition(part1=1, part2=2) select 3")
        sql("SELECT * FROM t").show()
        //checkAnswer(spark.table("t"), Row(2, 1, 1) :: Row(2, 2, 2) :: Row(3, 1, 2) :: Nil)

        sql("insert overwrite table t partition(part1=1, part2) select 4, 1")
        sql("SELECT * FROM t").show()
        //checkAnswer(spark.table("t"), Row(4, 1, 1) :: Row(2, 2, 2) :: Row(3, 1, 2) :: Nil)

// Exiting paste mode, now interpreting.

+---+-----+-----+
|  i|part1|part2|
+---+-----+-----+
|  1|    1|    1|
+---+-----+-----+

21/04/16 22:43:38 WARN HadoopFSUtils: The directory hdfs://.../tmp/ekrogentest/1 was not found. Was it deleted very recently?
+---+-----+-----+
|  i|part1|part2|
+---+-----+-----+
+---+-----+-----+

21/04/16 22:43:39 WARN HadoopFSUtils: The directory hdfs://.../tmp/ekrogentest/1 was not found. Was it deleted very recently?

+---+-----+-----+
|  i|part1|part2|
+---+-----+-----+
|  2|    2|    2|
+---+-----+-----+

21/04/16 22:43:39 WARN HadoopFSUtils: The directory hdfs://.../tmp/ekrogentest/2 was not found. Was it deleted very recently?
21/04/16 22:43:39 WARN HadoopFSUtils: The directory hdfs://.../tmp/ekrogentest/1 was not found. Was it deleted very recently?
+---+-----+-----+
|  i|part1|part2|
+---+-----+-----+
|  2|    2|    2|
+---+-----+-----+

21/04/16 22:43:39 WARN HadoopFSUtils: The directory hdfs://.../tmp/ekrogentest/2 was not found. Was it deleted very recently?
21/04/16 22:43:40 WARN HadoopFSUtils: The directory hdfs://.../tmp/ekrogentest/1 was not found. Was it deleted very recently?
+---+-----+-----+
|  i|part1|part2|
+---+-----+-----+
|  2|    2|    2|
+---+-----+-----+

basepath: String = hdfs:/tmp/ekrogentest/base
path1: String = hdfs:/tmp/ekrogentest/1
path2: String = hdfs:/tmp/ekrogentest/2
fs: org.apache.hadoop.fs.FileSystem = DFS[DFSClient[...]]

Now everything is broken.
@cloud-fan , it looks like you added this, what is the expected behavior here? I can't tell if I'm missing something.

@xkrogen the test does seem to be legitimate, but this is likely to a long standing bug. Can you look into it and see if we can support it? If not we need to throw a clear error instead of relying on LocalFileSystem behavior.

I don't quite understand the commit sequence under the various modes so I can't provide any quick input on whether this is easily fixable. I already spent more time on this issue than I was expecting and it's pretty far outside of my normal scope so I can't devote more time currently, but if I do find some spare cycles in the future, I will try to circle back here. Thanks for your input so far!

Or we can ignore the test first and move forward. It's a long-standing bug and not caused by this patch.

Hello, about “we should only run Block 2 in the dynamicPartitionOverwrite == false case”: the Block 2 is actually meant for custom partition paths (i.e. absolute partitions), either in dynamic partition overwrite or static partition overwrite cases. That’s probably the reason why InsertSuite.test("SPARK-20236: dynamic partition overwrite with custom partition path") failed with the changes.
The fix could be re-creating the parent directories when required. We created another PR for this jira.

@YuzhouSun Can you help to take over this PR?

Created https://github.com/apache/spark/pull/32530. @cloud-fan Could you review it? Thanks!

Closing in favor fo #32530


Please use the latest version of the library.

Thank you so much


Updated milvus from 2.3.1 to 2.4.1

This PR:

Updates the milvus version from 2.3.1 to 2.4.1 (Release date: May 6, 2024)
Fixes json logging numeric/text issue on docker composes of milvus

@filipecosta90  could you please sync with the latest master and update the PR?

@filipecosta90 could you please sync with the latest master and update the PR?

done @tellet-q . can you verify at your end?


bug: Lighthouse/Nethermind error when running lighthouse to sync beacon chain

What
Hi, following the instructions to validate on Macbook Pro, GNO deposits are done and currently showing Active-offline
https://beacon.gnosischain.com/dashboard?validators=127015,127016,127017,127018,127019,127020,127021,127022,127023,127024
When I try to execute the lighthouse
./lighthouse
--network gnosis beacon_node
--datadir=data
--http
--execution-endpoint http://localhost:8551
--execution-jwt ../jwtsecret/jwt.hex
--checkpoint-sync-url "https://checkpoint.gnosischain.com"
Its been running for days now.getting the following errors
Apr 18 12:38:27.501 INFO Syncing                                 est_time: --, distance: 94945 slots (5 days 11 hrs), peers: 16, service: slot_notifier
Apr 18 12:38:27.501 WARN Syncing deposit contract block cache    est_blocks_remaining: initializing deposits, service: slot_notifier
Apr 18 12:38:29.872 ERRO Error during execution engine upcheck   error: Reqwest(reqwest::Error { kind: Request, url: Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("localhost")), port: Some(8551), path: "/", query: None, fragment: None }, source: hyper::Error(Connect, ConnectError("tcp connect error", Os { code: 61, kind: ConnectionRefused, message: "Connection refused" })) }), service: exec
Apr 18 12:38:32.503 INFO Syncing                                 est_time: --, distance: 94946 slots (5 days 11 hrs), peers: 15, service: slot_notifier
Apr 18 12:38:32.503 WARN Syncing deposit contract block cache    est_blocks_remaining: initializing deposits, service: slot_notifier
Apr 18 12:38:34.876 ERRO Error during execution engine upcheck   error: Reqwest(reqwest::Error { kind: Request, url: Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("localhost")), port: Some(8551), path: "/", query: None, fragment: None }, source: hyper::Error(Connect, ConnectError("tcp connect error", Os { code: 61, kind: ConnectionRefused, message: "Connection refused" })) }), service: exec
Apr 18 12:38:37.501 INFO Syncing                                 est_time: --, distance: 94947 slots (5 days 11 hrs), peers: 13, service: slot_notifier
Screenshot from MacOS terminal

Hi @mtr980 , the error is coming from "Connection refused" from Lighthouse to Nethermind.
Can you check that if you add     --JsonRpc.Enabled true  and --JsonRpc.EnginePort=8551 options when running Nethermind client?
It would help if you can provide logs from Nethermind client too.
Thanks.

Hi @mtr980 , the error is coming from "Connection refused" from Lighthouse to Nethermind.
Can you check that if you add --JsonRpc.Enabled true  and --JsonRpc.EnginePort=8551 options when running Nethermind client?
It would help if you can provide logs from Nethermind client too. Thanks.

Hi @zengzengzenghuy Yes.
./Nethermind.Runner
--config gnosis
--JsonRpc.Enabled true
--HealthChecks.Enabled true
--HealthChecks.UIEnabled true
--JsonRpc.EnginePort=8551
--JsonRpc.JwtSecretFile=../jwtsecret/jwt.hex

@zengzengzenghuy followed exactly as per https://docs.gnosischain.com/node/guide/

Your Nethermind client fails to load secp256k1 dependencies. Did you install it correctly?
Please check if you have:

Install the correct version for your machine: https://downloads.nethermind.io/
Install the required dependencies: https://docs.nethermind.io/nethermind/ethereum-client/running-nethermind/running-the-client


Registry crash with s3 driver

I am using 2 registries hosted as docker containers:

1 private registry
1 proxy registry

Both are crashing (and restarting) multiple times a day.
Here is the last error stack from private registry:
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0xc4e6bd]

goroutine 8 [running]:
github.com/docker/distribution/registry/storage/driver/s3-aws.(*driver).doWalk.func1(0xc000130080, 0xc0028c4f01, 0xc002898998)
	/go/src/github.com/docker/distribution/registry/storage/driver/s3-aws/s3.go:973 +0x9d
github.com/docker/distribution/vendor/github.com/aws/aws-sdk-go/service/s3.(*S3).ListObjectsV2PagesWithContext(0xc0003d01c0, 0x7faec9607dc0, 0xc000af2070, 0xc003c400a0, 0xc0001aba98, 0x0, 0x0, 0x0, 0x1, 0x2)
	/go/src/github.com/docker/distribution/vendor/github.com/aws/aws-sdk-go/service/s3/api.go:4198 +0x111
github.com/docker/distribution/registry/storage/driver/s3-aws.(*driver).doWalk(0xc0003cd200, 0xff1ae0, 0xc000af2000, 0xc002898b58, 0xc000170141, 0x31, 0x0, 0x0, 0xc000e9c8a0, 0x0, ...)
	/go/src/github.com/docker/distribution/registry/storage/driver/s3-aws/s3.go:971 +0x3a1
github.com/docker/distribution/registry/storage/driver/s3-aws.(*driver).Walk(0xc0003cd200, 0xff1ae0, 0xc000af2000, 0xc000388e40, 0x20, 0xc000e9c8a0, 0x2, 0x0)
	/go/src/github.com/docker/distribution/registry/storage/driver/s3-aws/s3.go:919 +0x160
github.com/docker/distribution/registry/storage/driver/base.(*Base).Walk(0xc000120c90, 0xff1ae0, 0xc000af2000, 0xc000388e40, 0x20, 0xc000e9c8a0, 0x0, 0x0)
	/go/src/github.com/docker/distribution/registry/storage/driver/base/base.go:239 +0x234
github.com/docker/distribution/registry/storage.getOutstandingUploads(0xff1c20, 0xc000397b80, 0xffd980, 0xc000120c90, 0x2, 0x0, 0x0, 0x0)
	/go/src/github.com/docker/distribution/registry/storage/purgeuploads.go:70 +0x236
github.com/docker/distribution/registry/storage.PurgeUploads(0xff1c20, 0xc000397b80, 0xffd980, 0xc000120c90, 0xbf7def06ded31a63, 0xfffddb1567344d45, 0x17297c0, 0x1, 0x0, 0x0, ...)
	/go/src/github.com/docker/distribution/registry/storage/purgeuploads.go:34 +0x163
github.com/docker/distribution/registry/handlers.startUploadPurger.func1(0x10015c0, 0xc000158730, 0xff1c20, 0xc000397b80, 0xffd980, 0xc000120c90, 0x2260ff9290000, 0x0, 0x4e94914f0000)
	/go/src/github.com/docker/distribution/registry/handlers/app.go:1071 +0x221
created by github.com/docker/distribution/registry/handlers.startUploadPurger
	/go/src/github.com/docker/distribution/registry/handlers/app.go:1064 +0x2e9

On client side (CI), I have the following error during an upload (not 100% sure if it is at the exact same time):
2c719774c1e1: Mounted from my-app/my-app-fullstack/my-app-dev-base
3f2efe9dceb1: Pushed
ec62f19bb3aa: Mounted from my-app/my-app-fullstack/my-app-dev-base
f94641f1fe1f: Mounted from my-app/my-app-fullstack/my-app-dev-base
8f19d9738a31: Retrying in 5 seconds
8f19d9738a31: Retrying in 4 seconds
8f19d9738a31: Retrying in 3 seconds
8f19d9738a31: Retrying in 2 seconds
8f19d9738a31: Retrying in 1 second
error parsing HTTP 404 response body: invalid character 'p' after top-level value: "404 page not found\n"
The push refers to repository [private.registry.my-domain.com/my-app/my-app-fullstack/my-app-server-api]
5f70bf18a086: Preparing
8f19d9738a31: Preparing
...
330936718dad: Waiting
62674da13057: Waiting
error parsing HTTP 404 response body: invalid character 'p' after top-level value: "404 page not found\n"

Here is the private registry config:
# https://docs.docker.com/registry/configuration
version: 0.1
log:
  fields:
    service: registry
storage:
  cache:
    blobdescriptor: inmemory
  s3: # https://docs.docker.com/registry/storage-drivers/s3/
    rootdirectory: /private-registry
    region: digitalocean-xxxx
    regionendpoint: xxxx.digitaloceanspaces.com
    bucket: xxxxxxxxxxxx-registry
    accesskey: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    secretkey: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
  delete:
    enabled: true
#   maintenance:
#     uploadpurging:
#       enabled: true
#       age: 168h
#       interval: 24h
#       dryrun: false
http:
  addr: :5000
  secret: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
  headers:
    X-Content-Type-Options: [nosniff]
health:
  storagedriver:
    enabled: true
    interval: 10s
    threshold: 3
log:
  accesslog:
    disabled: true
  level: warn
  formatter: text

And the proxy one:
# https://docs.docker.com/registry/configuration
version: 0.1
log:
  fields:
    service: registry
proxy: # https://docs.docker.com/registry/recipes/mirror/
  remoteurl: https://registry-1.docker.io
storage:
  cache:
    blobdescriptor: inmemory
  s3: # https://docs.docker.com/registry/storage-drivers/s3/
    rootdirectory: /proxy-registry
    region: digitalocean-xxxx
    regionendpoint: xxxx.digitaloceanspaces.com
    bucket: xxxxxxxxxxxx-registry
    accesskey: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    secretkey: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
  delete:
    enabled: true
#   maintenance:
#     uploadpurging:
#       enabled: true
#       age: 168h
#       interval: 24h
#       dryrun: false
http:
  addr: :5000
  secret: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
  headers:
    X-Content-Type-Options: [nosniff]
health:
  storagedriver:
    enabled: true
    interval: 10s
    threshold: 3
log:
  accesslog:
    disabled: true
  level: warn
  formatter: text

I encountered the same problem, and then disabled upload purging to solve it。

It looks like #2908 also references this issue, and has some open PRs linked with a couple of potential resolutions:

#3078 modifies how the upload purge routine determines whether it's walking the _uploads directory, removing the panicking index operation to better handle empty file paths from the S3 driver
#3248 patches the S3 driver's walk routine to prevent exposing empty file paths in the first place

FWIW, we experienced this after upgrading from v2.6.1 to a custom build of v2.7.1 with S3 transfer acceleration enabled via #3181, though I don't believe that patch would have triggered this. We had to disable transfer acceleration for unrelated reasons, once those issues are resolved I hope to try a build with both of the above changes included to see where that gets us.

Closing as should be fixed in https://github.com/distribution/distribution/releases/tag/v3.0.0-alpha.1


set_tcp urscript command does not quite work on ur10e

When I send a set_tcp command to UR10e using the add e series support branch to set the tool length to 57cm, and then query it via "rosrun tf tf_echo /tool0 /tool0_controller" I get 53cm.
It is a brand new UR10e robot.
The command I send via the URScript topic is "set_tcp(p[0,0,0.57,0,0,0])"
On UR10 we had no issues with this.

Closing as this ticket is stale, and as noted in the referenced thread, this package is deprecated.


Work item 328360 - data edits

Edit column names to be consistent with references in content
Work item 328360
@sguthals

@ktoliver -> This isn't all of them right? I think they were different across code, datasets, and the copy throughout multiple units?
Just checking to make sure you weren't ready for review yet :)

Hi @sguthals - I can't find the data in GitHub. The units indicate the general source of the data (units 5 and 8), but I don't see where the data is pulled into the module, so I don't know the source location. Could you give me a pointer? :)
Some of the phrases I edited (Weight(kg), etc.) are column names that are created in the module, and I changed the code to match the output. Other column names (units 6 and 7--Lunar module (LM), etc.) appear to come from a dataset, which I'll revise if I can find.

Headers in the https://github.com/sguthals/learnwithdrg/tree/main/OverTheMoon/meteor-showers dir look good; no edits made in the content.

Thank you!!


Separate graphics?

Just noticed in the ListItemSkin class that you are doing the layout code yourself. Why didn't you set the graphic node directly on the label inside the skin. It has all those layout options, too, right? The "textfield" is of type Label, which subclasses Labeled, which manages a graphic node.

That was actually my first implementation, and it might be the correct one :)
I ran into a problem when I added a FontAwesomeIconView as the graphic node on the labels. Because some of the icons have different width, the label text would not line up nicely in a vertical ListMenu. I could not for the life of me manage to set a fixed width on every icon in the menu with css, so I created a separate graphic node that can be styled with the custom -fx-graphic-fixed-size css property. The skin makes sure the graphic node gets the width specified in the css property, even if the image itself is smaller. Setting a larger value for the css property will increase the padding between the icon and the label text, and it will be the same for all ListItems.
I suppose it is possible to target the graphic node with css and make them all the same width (without stretching the icon), but I couldn't figure out how. Do you know? :)

Here is a small sample that shows the issue (requires FontAwesomeFX on the classpath)
package tornadofx.control.test;

import de.jensd.fx.glyphs.fontawesome.FontAwesomeIcon;
import de.jensd.fx.glyphs.fontawesome.FontAwesomeIconView;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class LabelDisalignment extends Application {
	public void start(Stage primaryStage) throws Exception {
		VBox root = new VBox(
			new Button("Contacts", icon(FontAwesomeIcon.USER)),
			new Button("Projects", icon(FontAwesomeIcon.SUITCASE)),
			new Button("Settings", icon(FontAwesomeIcon.COG))
		);

		primaryStage.setScene(new Scene(root));
		primaryStage.show();
	}

	private FontAwesomeIconView icon(FontAwesomeIcon icon) {
		FontAwesomeIconView iconView = new FontAwesomeIconView(icon);
		iconView.setGlyphSize(25);
		return iconView;
	}
}

Since the suitcase icon is larger than the other two, the text doesn't line up. Adding padding between the icon and the label is an individual affair, so that doesn't solve the problem. Making the icon take up some predefined width would solve the problem, so long as it doesn't stretch the icon, but I don't know how/if that's possible.

@dlemmermann Do you know if it's possible to achieve the same result I illustrated above without the separate graphics node?


Azure Tool support has been removed/reduced in VS2022

[Enter feedback here]
It seems that this document describes the behavior of VS2019 - in current version 2022 the feature of e.g. Azure Server Explorer has been removed, see here https://learn.microsoft.com/en-us/visualstudio/azure/vs-azure-tools-resources-managing-with-cloud-explorer?view=vs-2022
So there is (from my perspective) no way to see the storage explorer inside VS2022, you need to use the external Storage Explorer.

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

ID: 047bb5ba-0f0c-15ef-5446-9b7fec4bfda9
Version Independent ID: 57be5157-8c86-7663-e42e-24458cf86974
Content: Browse and manage storage resources - Visual Studio (Windows)
Content Source: docs/azure/vs-azure-tools-storage-resources-server-explorer-browse-manage.md
Product: visual-studio-windows
Technology: vs-azure
GitHub Login: @ghogen
Microsoft Alias: ghogen

This should be fixed later today by adding a note similar to ones on other articles.

@BerndK
Thanks for the issue report. A fix is in the queue.


swb: fix property record marking

fix the case that the swb bit wasn't being properly updated

@leirocks Thanks for the review!


Configure App With Our Own AWS Configuration

Hi there,
I'm looking to adapt the mobile app to work with our own instance of a AWS.  I was wondering if this is possible.  I've authenticated users with cogninto before but it appears there is more happening with your auth setup seeing as you have your own endpoints worked in to your auth process.
I was also curious how or if those endpoints in the config relate to the rainmaker backend api mentioned at this link.
https://swaggerapis.rainmaker.espressif.com
Any help would be much appreciated.
Thanks!

@francofantillo , sorry for the late reply. Can you elaborate more on the requirement? This specific application would work with the RainMaker cloud backend using the APIs that you have already seen here.  The app can be configured to work with other AWS instances, but only if they have the RainMaker backend deployed. This is indeed possible and if you want additional details, you can get in touch with us at<EMAIL_ADDRESS>or<EMAIL_ADDRESS>


Cannot delete a user

Actual Behavior:

I wanted to delete a user from the Manage Users page. The process looked fine.
But after reloading the page, the user still exists.
Now I get an error message while deleting the same user again (see screenshots).
Expected behaviour is, that the user disappears after deletion.

Reloading the User page make the action menu disappear:
Users page with action menu:

Users page without action menu:

This is not where users are deleted.

What actions did you take to get to that user page to make it show the action buttons?

Just using the menu (see screenshot):

Unable to replicate your issue with deleting users. I have been able to invite/delete users without issue.
Have been able to replicate the refresh issue.

I can see that your admin roles are showing as N/A. This may be related to your issue.
Are you able to invite/add a new user into that list and then delete them?

I tested it again with a new user, I just invited.
Deleting from the GUI gives the same result as before.
Deleting from the API is working fine.
1st the deletion seemed to work fine. But after reloading the page, the user is still in the list.
Now I noticed another detail. The role was changing to N/A after I tried to delete the user.

This is fixed in the beta build that will be there later.
A user cannot be deleted via this page, the name was wrong.
It has been changed to 'revoke'


Chargepad + Teleporter block glitch

Is it just me that fall throught the portal (without frame) when there is a chargepad nearby?
Don't know if there is a mod compatibility issue with these 2 objects/blocks Or if its some other mod messing something up for Mekanism.
(still using these 2 in a fresh single player world i get issues)
Also, I would be very thankful if someone could give me a link to what possible commands there are with ComputerCraft and Mekanism, been googling and searching various places for 2 hours now and cannot find any info on even how to connect a fusion reactor to a CC computer (at this moment im going with bundle cable but there is a need for making it more "high tech" now)
But more importend what API commands/etc that are available with CC and mekanism blocks and machines..+ rest..xP
BestRegards
Icie

Also i just remmberd a suggestion (not sure if its been up here before)
But since Massive RF and J have been intreduced, isn't it possible to make a lightning rod (Ofcourse insanely expensive mats to handle that "1.21 Gigawatt" xP )
But a Lightning rod, (higher better chanse of getting a strike) and it would shock charge your induction matrix =3
(more energy providers = less chanse of a boom) and boom crater is increased by Matrix block ammount/ size

The chargepad is not a solid block, but the teleporter is- I'm not sure why you'd be falling through the block.  I'll consider a lightning rod in the future :)


update to_rsa_key to follow new openssl pkey interface

Looks like the OpenSSL interface was updated in Ruby 2.4
https://ruby-doc.org/stdlib-2.4.1/libdoc/openssl/rdoc/OpenSSL/PKey/RSA.html
Update the to_rsa_key method to the new interface.

Although this change will probably break for older versions of Ruby/OpenSSL. I need to address that.


[feature] VSCode extension

⭐ Suggestion

Add an vscode extension
💻 Use Cases

Use ast-grep in vscode, like vscode-gogrep
FYI I'm working on this now 😄

Oops there is already an official repo 😢

Yes I'd love to! But I need some time to learn about LSP :(


Doesn't work for hipchat

Thanks for creating a super useful script!
I am trying to get it to work with hipchat, but although all the commands work, it doesn't seem to actually mute anything.
I checked that the message.room doesn't have any prefix.
In 'test' room:
hubot mute list
No channels have been muted yet

hubot mute test
test is muted

hello hubot
Well hello there, Marcus Morris

Any ideas?
cc'ing @michaelansel

Hmm, strange. Have you setup the HUBOT_MUTE_ROOM_PREFIX env? Does hubot mute all work?
What other hubot scripts have you got installed?

I left HUBOT_MUTE_ROOM_PREFIX unset as I thought the default is blank. Do I need to explicitly export HUBOT_MUTE_ROOM_PREFIX= ?

I wouldn't have thought so, but try it just in case. I haven't looked at this for a while (and not at all with Hipchat) so if it doesn't work let me know and I'll have a proper look tomorrow when I get up!

that worked! Not sure if you want to have it empty by default or not. The README does say that HUBOT_MUTE_ROOM_PREFIX is required so that's my bad.
In my testing, I did encounter another issue. Seems unmute all doesn't work?:
hubot mute list
No channels have been muted yet

hubot mute test
Channel test muted

hubot unmute all
All channels have been unmuted

hubot mute test
Channel test already muted

hubot mute list
test is muted

hubot unmute test
Channel test unmuted

hubot mute list
No channels have been muted yet

So the (un)mute all function doesn't list every channel - Hubot can never know every channel that he's connected in to as far as I know. Mute all is separate from the room list - you can mute individual channels, but then if you need to mute everything for some reason (big release, you want quiet across all channels/whatever) you can do that independently. Once all have been unmuted, the individual channel mutes will remain.
I guess I could functionality to:

mute global - mute everything
unmute global - unmute everything
unmute all - remove individual channel mutes

Might help clear that up?

I think that would be lovely! Thanks for being so helpful :smile_cat:

0.0.6 has just been pushed to npmjs.com - global mute & unmute all have been implemented as above!
Please let me know if you have any further issues :)

@alexhouse looks good!
I have another request :smile:
Can muted rooms be saved to the redis brain so they are still muted when I redeploy hubot?

Sure, I'll push another release tonight.


Polyline decorator now updates when supplied patterns object changes

Observer added for 'patterns' arg of the polyline-decorator component
{{polyline-decorator latlngs=locations patterns=linePatterns}}

Doing this will now cause the polyline-decorator to update its pattern
this.set('linePatterns',newPattern);

@drewda so at the moment I've just pointed my project's dependency to this github repo so that I can use this PR, but it would be good if I could use the standard npm package versions again. I've never really published an update for an addon to npm - is this something that you have to do? Or is there a way I can do it? Thanks!

@Techn1x to release a new version of the package:

update CHANGELOG file
tag a new release on Github
npm publish

You are welcome to do the first 2 steps. The 3rd step requires authorization from NPM. If you e-mail me at<EMAIL_ADDRESS>I'll be glad to authorize your e-mail address. Or you can just ping me whenever you have a new version ready to publish and I will do it myself.

Great! Steps 1 and 2 are done, I'll shoot you an email now.


Config Only: "php: < 7"

The config system allows for conditional config on environment types, environment variables, module presence, classes existing, and PHP extensions being loaded. (This is implemented in CoreConfigFactory.php)
It would be valuable to add config that is conditionally applied when PHP version is less than or greater than a given value.
One key use case is to allow the continued support of older versions of PHP by retaining "legacy implementations" of services, rather than a bunch of conditional code in the service.
There are couple of of approaches to take.
Syntax A
First is that the argument takes a version number and is always a >= comparison:
---
Name: new-class
Only:
  php: 7.2
---
SilverStripe\Core\Injector\Injector:
  MyService:
    class: NewServiceImplementation
---
Name: old-class
Except:
  php: 7.2
---
SilverStripe\Core\Injector\Injector:
  MyService:
    class: LegacyServiceImplementation

Syntax B
The other approach is that we allow inequalities
---
Name: new-class
Only:
  php: >= 7.2
---
SilverStripe\Core\Injector\Injector:
  MyService:
    class: NewServiceImplementation
---
Name: old-class
Only:
  php: < 7.2
---
SilverStripe\Core\Injector\Injector:
  MyService:
    class: LegacyServiceImplementation

Personally I'd go with the first option as it's more consistent with the other only/except flags, which don't have any support for comparison operators.
Looking at the code in CoreConfigFactory.php, this should be quite straightforward to implement.
Does the feature make sense to people? Do you prefer Syntax A or B?

I like it, but I also prefer syntax B, as most changes will apply to an arbitrary range of versions. I think the comparison operators aren't inconsistent here as none of the other "rules" are numeric. We can support both pretty easily too. I played around a little with trying to tie some regex into version_compare but it's not great:
https://3v4l.org/PnCT9

Yeah I think you would need to strip the current version so that it's got the same precision as the version in the config. And you'd want a test around that logic of course, to work through these edge cases.

Anyway, given Guy's feedback I'll try and pull together a PR for syntax B


Allow not cycling when scrolling through sway workspaces

Hi! Thanks a lot for Waybar to everyone involved, it's really great and customizable. I have a feature I would like to suggest.
When you scroll through sway workspaces and you reach past the last one, you cycle back to the first one. I would like this to be optional, such that you would stay at the last workspace. Would that seem feasible? It could take the form of an option "no-cycle" in the "sway/workspaces" module.

The setting you want is disable-scroll-wraparound c.f. https://github.com/Alexays/Waybar/wiki/Module:-Sway#workspaces


Ordering organizations and users by name

Relative to the issue #3845, this Pull Request add modifications to ordering by name Organizations and User Accounts.
It's more user friendly and make search more easy when organizations and user accounts are ordered by name rather than last update datetime.
I added new function GetUsersByIDs to decrease the number of SQL queries by using IN predicate rather than just running 1 SQL query per users.

Current coverage is 2.18% (diff: 0.00%)

Merging #49 into master will decrease coverage by <.01%

@@            master       #49   diff @@
========================================
  Files           31        31
  Lines         7508      7517     +9
  Methods          0         0
  Messages         0         0
  Branches         0         0
========================================
  Hits           164       164
- Misses        7327      7336     +9
  Partials        17        17

Powered by Codecov. Last update 42a744d...d4c1e86

Can you rebase it?

You could choose "Rebase and Merge" during the merge process : https://github.com/blog/2243-rebase-and-merge-pull-requests

Current coverage is 3.14% (diff: 0.00%)

Merging #49 into master will decrease coverage by <.01%

@@            master       #49   diff @@
========================================
  Files           33        33
  Lines         7823      7834    +11
  Methods          0         0
  Messages         0         0
  Branches         0         0
========================================
  Hits           246       246
- Misses        7557      7568    +11
  Partials        20        20

Powered by Codecov. Last update 475ddd8...4979fd5

something wrong. @joubertredrat

Yeah i dont know why... I have just rebase to avoid multiple commit.  Git show get right commit but github just explode. I will recreate PR within few minutes

Something goes wrong, I close this issue, delete GOGS repos and fork Gitea. I will re-create PR without few hours

@lunny strange, I don't have relation with this PR and my commit listed already have yours PRs in https://github.com/go-gitea/gitea/pull/5 and https://github.com/go-gitea/gitea/pull/54

@0xbaadf00d for me was same, was necessary to remove gogs fork and make new fork from Gitea


When failing to restart kernel display error message in first available cell

Today we display error mesage (messagebox), but not in cell output.
Question: Do we display message in cell output.
Suggestions

Identify cell in view (based on selection, if not available, first cell)

Q. Insert output at the top of existing output

Q. Or replace output

Global message.
If cell runs it will put up a message anyway.

There haven't been any upvotes nor complaints about the UX related to restart failures, hence closing this issue


"SS Researchable Stat Upgrades (Reupload)" repetable research error

Describe the bug
researching repeatable research only currently tested on SS Researchable Stat Upgrades (Reupload) final research with multiple researchers at the same time causes error
Steps to reproduce the behavior (VERY IMPORTANT)
1:have more then once pawn researching at the same time
2:finish researching repeatable research
3:check logs
Error Log
https://pastebin.com/mgPUcczR
Save file
newtest.zip
Screenshots
!!! Add screenshots to help explain your problem here !!!
Mod list (Preferably a RimPy compatible list.)

Harmony
Core
HugsLib
*SS Researchable Stat Upgrades (Reupload)
RimThreaded

solved on 2.3.5 preview


AMD instances

Amazon announced new AMD based instances https://aws.amazon.com/blogs/aws/new-lower-cost-amd-powered-ec2-instances/
Thanks!

Closed by #389
And hopefully T3a will also work.


"The" article used twice

"The" article used twice in the line "In general there is no restriction on line length, but lengthy lines can make the the code unreadable" for Line Length heading.

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

ID: 3c7b7057-f9c5-6587-5d8b-267935685262
Version Independent ID: 11a70e81-f0a2-ec66-d63e-d1b0b5edeb5c
Content: Best Practices for AL code - Business Central
Content Source: dev-itpro/compliance/apptest-bestpracticesforalcode.md
Service: dynamics365-business-central
GitHub Login: @SusanneWindfeldPedersen
Microsoft Alias: solsen

Thanks for the feedback. This is fixed in the next refresh of the docs.

fixed.


Provide speech feedback when commenting or uncommenting a line.

When pressing ctrl+/ to comment a line, everything works as expected. However, I'm a screen reader user, and so in order to see the result, I have to press my screen reader's read line command to read the line. This isn't necessarily ideal. Its not a deal breaker, but it would be nice if we could get some sort of speech feedback. For example, commented line: (line content), or uncommented line: (line content).

@TheQuinbox thanks for the feedback.
I think this makes sense and we could add something like this.
I am just not sure if we should read "commented line: LINE CONTENT" or just the "LINE CONTENT" because the start of the line will usually have the commenting characters, like in js //
Assigning to @hediet so he considers it.

Would it be possible to use audio cues to indicate that there are comments on the current line?

@jvesouza in theory yes. In practice can you convince us this is a good idea? Why is this better than screen reader reading "//" at the start of the line?
The biggest benefit could be for multi line comments, is this what you are aiming for? Since when you are in the middle of the comment there is no other indication?
How about for lines which are partially commented? Would you expect an audio cue then?

@isidorn  It was exactly for multi line comments that I suggested this.


0.9.5 and python3

OS: Win 7
UE: 4.21.2
Python: 3.7.3
Carla: 0.9.5
Issue: Running make PythonAPI inside an environment which has python3 in it,  throws the following error
-Make sure "py" is installed.
-Make sure it is available on your Windows "py".
And i think this is why I get the import carla error when running any python script.
Which is the stable version of Carla which works in Windows?

Vishal, I think the most stable version is 0.8.2

Yes, Unable to run any py scripts
Its says  load_dynamic
return _load(spec)
ImportError: DLL load failed: %1 is not a valid Win32 application.
any specific reason behind this? Many people suggested 32bit-64bit version problem. But unable to solve this.

@krish97git, my problem was a mix of python versions. I cleaned all the existing versions and installed python3 alone and then built Carla from within a conda environment.

@vishal-prgmr
Is that working fine?
And are all the python API interfacing well?


Update package.json

Add ncp dependency.

@AilisObrian thanks for the contribution but it's already in the file after 0.3.2 code was pushed


Leverage assertion test helpers

The current test suite uses the assert inconsistently. In some cases, assert is used. In others, the bash test built-in is used (or other 'naked' command).
The assert helper provides a marginal improvement in the error output when it fails, but this is minimal. Rather, I think the assert (and refute) test helpers improve the clarity of the test itself in signifiying the purpose of the commands. It helps clarify the arrange/act/assert sub-sections of each test.

Looks good thanks!


Empty Pipeline lowers image quality

Hi all,
I am working with a custom randomized version of the AugraphyPipeline and in the course of trials I noticed that even if no agumentations were passed to the AugraphyPipeline - i.e. three empty lists- it still distorts the image.

Ok. I can propose having the overlay types in a Enum-like structure - as class variables in a separate OverlayType class such that it is easier for IDEs to display the different options. I will submit a pull request at some later point.

Yes, please submit a pull request, thanks.

@kwcckw Do you think you have enough information for us to add this issue to the current sprint?

@kwcckw Do you think you have enough information for us to add this issue to the current sprint?

I think this is important but not urgent yet, because later we will need to restructure the whole repo so that it can display the options in a similar way.

@proofconstruction Regarding this proposed method -  Enum-like structure - as class variables in a separate OverlayType class such that it is easier for IDEs to display the different options, do you see a better way to do so?
Actually it maybe too messy if we want to create a subclass for each method in a class.

Do we really need to subclass each method?  Would something like this work?
from enum import Enum

class Overlay(str, Enum):
    INK_TO_PAPER = "ink_to_paper"
    MIN = "min"
    MAX = "max"
    MIX = "mix"
    NORMAL = "normal"
    LIGHTEN = "lighten"
    DARKEN = "darken"
    ADDITION = "addition"
    SUBTRACT = "subtract"
    DIFFERENCE = "difference"
    SCREEN = "screen"
    DODGE = "dodge"
    MULTIPLY = "multiply"
    DIVIDE = "divide"
    HARD_LIGHT = "hard_light"
    GRAIN_EXTRACT = "grain_extract"
    GRAIN_MERGE = "grain_merge"
    OVERLAY = "overlay"

# prints value, offers comparison testing
print(f"{Overlay.INK_TO_PAPER}")
print(f"{(Overlay.INK_TO_PAPER == 'ink_to_paper')}")

Thanks, i didn't think of this. I guess this should work, i will try it later.

Do we really need to subclass each method? Would something like this work?
from enum import Enum

class Overlay(str, Enum):
    INK_TO_PAPER = "ink_to_paper"
    MIN = "min"
    MAX = "max"
    MIX = "mix"
    NORMAL = "normal"
    LIGHTEN = "lighten"
    DARKEN = "darken"
    ADDITION = "addition"
    SUBTRACT = "subtract"
    DIFFERENCE = "difference"
    SCREEN = "screen"
    DODGE = "dodge"
    MULTIPLY = "multiply"
    DIVIDE = "divide"
    HARD_LIGHT = "hard_light"
    GRAIN_EXTRACT = "grain_extract"
    GRAIN_MERGE = "grain_merge"
    OVERLAY = "overlay"

# prints value, offers comparison testing
print(f"{Overlay.INK_TO_PAPER}")
print(f"{(Overlay.INK_TO_PAPER == 'ink_to_paper')}")

Then overlay values could be passed as an enum, while internally treated as a string where code is not yet using the Enum:
pipeline = AugraphyPipeline(ink, paper, post, overlay_type=Overlay.INK_TO_PAPER)

So i tried this but i don't see how this will be clearer for the users to select the options? The input to overlay method is still str and we are just changing the input to class instance's parameter.

The different values defined in the enum type can be displayed as hints by some IDEs.
Using custom enums for parameters with a low-finite number of possible values (like curling_direction from BookBinding) is a good idea in general, because it helps prevent users from calling functions with values which are invalid but still have the correct type, like if someone put curling_direction = 99. In this case, the user would get a ValueError: invalid enum value.

The different values defined in the enum type can be displayed as hints by some IDEs.
Using custom enums for parameters with a low-finite number of possible values (like curling_direction from BookBinding) is a good idea in general, because it helps prevent users from calling functions with values which are invalid but still have the correct type, like if someone put curling_direction = 99. In this case, the user would get a ValueError: invalid enum value.

Thanks, but to relate it into current case, we have overlay_type = str, so if we define the class like this:
  class OverlayTypes(str, Enum):
      """Contains methods to overlay ink into paper"""

      ink_to_paper = "ink_to_paper"
      min = "min"
      max = "max"
      mix = "mix"
      normal = "normal"
      lighten = "lighten"
      darken = "darken"
      addition = "addition"
      subtract = "subtract"
      difference = "difference"
      screen = "screen"
      dodge = "dodge"
      multiply = "multiply"
      divide = "divide"
      hard_light = "hard_light"
      grain_extract = "grain_extract"
      grain_merge = "grain_merge"
      overlay = "overlay"

The pipeline will be initialized with this:
pipeline = AugraphyPipeline(ink, paper, post, overlay_type=getattr(OverlayTypes, overlay_type))

Where overlay_type is the user input in str.
If user uses a wrong input, actually it won't show all the possible options too, for example:
 getattr(OverlayTypes, "1234")

The error is
       raise AttributeError(name) from None

  AttributeError: 1234

And it gives hints on types only. Using getattr(OverlayTypes, 1234) gives this error:
 getattr(): attribute name must be string

Or did I missed out anything and it should be done in a different way?

I will leave this open first unless it is proven the Enum method is able to show all the available options.


Type checks inconsistent when dealing with a -> b function types

Pull Request Description
Test to check faulty behavior described in #7289. Fixes to come...
Important Notes

Checklist
Please ensure that the following checklist has been satisfied before submitting the PR:

[ ] All code follows the
Scala,
Java,
All code has been tested:

[ ] Unit tests have been written where possible.

We have four failing test cases. Now we can fix them.


[GitLab] lastversion reports old version

Project with incorrect version
https://gitlab.com/librewolf-community/browser/appimage/-/releases
To Reproduce
lastversion https://gitlab.com/librewolf-community/browser/appimage

Expected behavior
v121.0-1 is the current latest release which lastversion should output.
Program output
lastversion.lastversion - INFO - Verbose 1 level output.
lastversion.ProjectHolder - INFO - Using cache directory: /home/uninstance/.cache/lastversion.
lastversion.ProjectHolder - INFO - Created instance of GitLabRepoSession
lastversion.GitLabRepoSession - DEBUG - Checking if https://gitlab.com/api/v4/projects/librewolf-community%2Fbrowser%2Fappimage is repo
lastversion.GitLabRepoSession - DEBUG - Found repo librewolf-community/browser/appimage
lastversion.GitLabRepoSession - DEBUG - Querying https://gitlab.com/api/v4/projects/librewolf-community%2Fbrowser%2Fappimage/repository/tags
lastversion.ProjectHolder - INFO - Sanitizing string v112.0-1 as a satisfying version.
lastversion.ProjectHolder - INFO - Parsed as Version OK. String representation: 112.0.
lastversion.GitLabRepoSession - INFO - Setting version as current selection: 112.0.
lastversion.ProjectHolder - INFO - Sanitizing string v112.0.1-2 as a satisfying version.
lastversion.ProjectHolder - INFO - Parsed as Version OK. String representation: 112.0.1.
lastversion.GitLabRepoSession - INFO - Setting version as current selection: 112.0.1.
lastversion.ProjectHolder - INFO - Sanitizing string v112.0.2-1 as a satisfying version.
lastversion.ProjectHolder - INFO - Parsed as Version OK. String representation: 112.0.2.
lastversion.GitLabRepoSession - INFO - Setting version as current selection: 112.0.2.
lastversion.ProjectHolder - INFO - Sanitizing string v113.0-3 as a satisfying version.
lastversion.ProjectHolder - INFO - Parsed as Version OK. String representation: 113.0.
lastversion.GitLabRepoSession - INFO - Setting version as current selection: 113.0.
lastversion.ProjectHolder - INFO - Sanitizing string v113.0.2-1 as a satisfying version.
lastversion.ProjectHolder - INFO - Parsed as Version OK. String representation: 113.0.2.
lastversion.GitLabRepoSession - INFO - Setting version as current selection: 113.0.2.
lastversion.ProjectHolder - INFO - Sanitizing string v114.0.1-2 as a satisfying version.
lastversion.ProjectHolder - INFO - Parsed as Version OK. String representation: 114.0.1.
lastversion.GitLabRepoSession - INFO - Setting version as current selection: 114.0.1.
lastversion.ProjectHolder - INFO - Sanitizing string v114.0.2-1 as a satisfying version.
lastversion.ProjectHolder - INFO - Parsed as Version OK. String representation: 114.0.2.
lastversion.GitLabRepoSession - INFO - Setting version as current selection: 114.0.2.
lastversion.ProjectHolder - INFO - Sanitizing string v115.0.1-1 as a satisfying version.
lastversion.ProjectHolder - INFO - Parsed as Version OK. String representation: 115.0.1.
lastversion.GitLabRepoSession - INFO - Setting version as current selection: 115.0.1.
lastversion.ProjectHolder - INFO - Sanitizing string v115.0.2-2 as a satisfying version.
lastversion.ProjectHolder - INFO - Parsed as Version OK. String representation: 115.0.2.
lastversion.GitLabRepoSession - INFO - Setting version as current selection: 115.0.2.
lastversion.ProjectHolder - INFO - Sanitizing string v116.0-1 as a satisfying version.
lastversion.ProjectHolder - INFO - Parsed as Version OK. String representation: 116.0.
lastversion.GitLabRepoSession - INFO - Setting version as current selection: 116.0.
lastversion.ProjectHolder - INFO - Sanitizing string v116.0.2-1 as a satisfying version.
lastversion.ProjectHolder - INFO - Parsed as Version OK. String representation: 116.0.2.
lastversion.GitLabRepoSession - INFO - Setting version as current selection: 116.0.2.
lastversion.ProjectHolder - INFO - Sanitizing string v116.0.3-1 as a satisfying version.
lastversion.ProjectHolder - INFO - Parsed as Version OK. String representation: 116.0.3.
lastversion.GitLabRepoSession - INFO - Setting version as current selection: 116.0.3.
lastversion.ProjectHolder - INFO - Sanitizing string v117.0-1 as a satisfying version.
lastversion.ProjectHolder - INFO - Parsed as Version OK. String representation: 117.0.
lastversion.GitLabRepoSession - INFO - Setting version as current selection: 117.0.
lastversion.ProjectHolder - INFO - Sanitizing string v117.0.1-1 as a satisfying version.
lastversion.ProjectHolder - INFO - Parsed as Version OK. String representation: 117.0.1.
lastversion.GitLabRepoSession - INFO - Setting version as current selection: 117.0.1.
lastversion.ProjectHolder - INFO - Sanitizing string v118.0.1-1 as a satisfying version.
lastversion.ProjectHolder - INFO - Parsed as Version OK. String representation: 118.0.1.
lastversion.GitLabRepoSession - INFO - Setting version as current selection: 118.0.1.
lastversion.ProjectHolder - INFO - Sanitizing string v118.0.2-1 as a satisfying version.
lastversion.ProjectHolder - INFO - Parsed as Version OK. String representation: 118.0.2.
lastversion.GitLabRepoSession - INFO - Setting version as current selection: 118.0.2.
lastversion.ProjectHolder - INFO - Sanitizing string v119.0-5 as a satisfying version.
lastversion.ProjectHolder - INFO - Parsed as Version OK. String representation: 119.0.
lastversion.GitLabRepoSession - INFO - Setting version as current selection: 119.0.
lastversion.ProjectHolder - INFO - Sanitizing string v119.0-7 as a satisfying version.
lastversion.ProjectHolder - INFO - Parsed as Version OK. String representation: 119.0.
lastversion.ProjectHolder - INFO - Sanitizing string v119.0.1-1 as a satisfying version.
lastversion.ProjectHolder - INFO - Parsed as Version OK. String representation: 119.0.1.
lastversion.GitLabRepoSession - INFO - Setting version as current selection: 119.0.1.
lastversion.ProjectHolder - INFO - Sanitizing string v120.0-1 as a satisfying version.
lastversion.ProjectHolder - INFO - Parsed as Version OK. String representation: 120.0.
lastversion.GitLabRepoSession - INFO - Setting version as current selection: 120.0.
lastversion.GitLabRepoSession - DEBUG - Querying https://gitlab.com/api/v4/projects/librewolf-community%2Fbrowser%2Fappimage/releases
lastversion.lastversion - INFO - Located the latest release tag v120.0-1 at: https://gitlab.com/librewolf-community/browser/appimage via tag mechanism
120.0

Thank you for the bug report. Fixed in v3.4.6


Dropout has no effect in 1-Layer FusedRNNCell

https://github.com/apache/incubator-mxnet/blob/e5f6238a2b213e70ba0ca7acc5bcf5c643502561/example/rnn/word_lm/model.py#L34
I saw that dropout was passed as an argument to FusedRNNCell in the benchmark provided. However, I personally doubt the effect of this argument on the training results, and the reason is because dropout will NOT be applied when the RNN only has one layer.

Just to clarify, what the benchmark does seems to be the following:

For range(num_layers), do the followings:

Declare one layer of FusedRNN.
Apply dropout to the FusedRNN output.

However, why not do the following:

Declare num_layers of FusedRNN with input_dropout to be dropout.
Apply dropout to the final output (i.e. output at the last layer) of FusedRNN.

dropout only applies to the intermediate layers. This follows CuDNN convention. The reason is you may not want to dropout the final output.

Thanks for your response. What I mean is really the following - given that you declare the model this way:
--------------------
1st Layer RNN
--------------------
Dropout
--------------------
2nd Layer RNN
--------------------
Dropout
--------------------
...
--------------------
Nth Layer RNN
--------------------
Dropout
--------------------

Why not declare it this way:
--------------------
N-Layer RNN with Dropout
--------------------
Dropout
--------------------

    for i in range(num_layers):
        prefix = 'lstm_l%d_' % i
        cell = mx.rnn.FusedRNNCell(num_hidden=nhid, prefix=prefix, get_next_state=True,
                                   forget_bias=0.0, dropout=dropout)
        state_shape = (1, batch_size, nhid)
        begin_cell_state_name = prefix + 'cell'
        begin_hidden_state_name = prefix + 'hidden'
        begin_cell_state = mx.sym.var(begin_cell_state_name, shape=state_shape)
        begin_hidden_state = mx.sym.var(begin_hidden_state_name, shape=state_shape)
        state_names += [begin_cell_state_name, begin_hidden_state_name]
        outputs, next_states = cell.unroll(bptt, inputs=outputs,
                                           begin_state=[begin_cell_state, begin_hidden_state],
                                           merge_outputs=True, layout='TNC')
        outputs = mx.sym.Dropout(outputs, p=dropout)
        states += next_states

As we notice, the variable dropout is used twice in this code snippet, once in FusedRNNCell and the other time in outputs = mx.sym.Dropout(outputs, p=dropout). What I mean is that the first use has zero effect because CuDNN-RNN does not apply dropout when the RNN has only 1 layer.

I see, so we are safe to remove the dropout=dropout when constructing the FusedRNNCell.

I am just wondering whether it would be more efficient if we declare our model this way:
    # Notice the parameter value for num_layers.
    cell = mx.rnn.FusedRNNCell(num_hidden=nhid,
                               num_layers=num_layers,
                               dropout=dropout,
                               prefix=prefix, get_next_state=True)
    outputs, next_states = cell.unroll(bptt, inputs=outputs,
                                       begin_state=[begin_cell_state, begin_hidden_state],
                                       merge_outputs=True, layout='TNC')
    outputs = mx.sym.Dropout(outputs, p=dropout)

In my opinion, the two declarations are equivalent, but we can make better use of CuDNN-RNN using the code above.


adding some more restriction and warning signs and update some icons

(speed) hump warning
restrictions/prohibited
no trucks
no busses
no buses or trucks
no pedestrians
no cycling
no mopeds
no bikes or mopeds
no trailers
no tractors/ slow motorized traffic

maybe more... see the commits

Thanks @mprins!

I will try to keep that in mind.
The europe file as it its is already unwieldy at >1000 lines and no code collapse, I often work on a 1024x600 screen.


zsh fuzzy(**) completion ignores ripgreprc

[x] I have read through the manual page (man fzf)
[x] I have the latest version of fzf (0.25.1)
[x] I have searched through the existing issues

Info

OS
Ubuntu 18.04 in WSL2 (will test native ubuntu tomorrow)

Shell
zsh

Problem / Steps to reproduce

create simple .ripgreprc:

--glob=!node_modules/*

export RIPGREP_CONFIG_PATH=/home/jhaine/.config/.ripgreprc
run fzf via vim $(fzf) and notice it ignores node_modules as expected
run zsh fzf fuzzy completion via vim **<TAB> and notice it doesn't ignore node_modules

(top right pane is via bindkey -s '^o' 'vim $(fzf)\n')

This may just be how the shell completion works but I'm not sure.
As always, thank you for this awesome piece of software <3

fzf does not depend on ripgrep by default. Have you configured it to do so?

Ah yes, I forgot to mention that.
I have this set in my .zshrc:
export FZF_DEFAULT_COMMAND='rg --files'

and manually running rg --files | fzf seems to work fine

See:

https://github.com/junegunn/fzf#environment-variables
https://github.com/junegunn/fzf#settings

The reason fuzzy completion doesn't use FZF_DEFAULT_COMMAND is that it can behave differently depending on the prefix.
vim **<TAB>
vim /tmp/**<TAB>

And we can't be sure if it's appropriate to just append /tmp/ to FZF_DEFAULT_COMMAND, which can be just anything.
export FZF_DEFAULT_COMMAND='seq 100'


chore(deps): update renovate/renovate docker tag to v37.295.0

This PR contains the following updates:

Package
Update
Change

renovate/renovate (source)
minor
37.269.3 -> 37.295.0

Release Notes

renovatebot/renovate (renovate/renovate)
v37.295.0
Compare Source
Features

http: Cleanup for HTTP cache (#28381) (e89be68)

v37.294.0
Compare Source
Features

presets: add tokio-rs/tracing monorepo (#28390) (83eaa0c)

Miscellaneous Chores

actions: simplify and politen @ mention text (#28395) (dcf07e9)

v37.293.0
Compare Source
Features

datasource/node-version: allow custom registry support (#28394) (783f4ef)
presets: add tokio-rs/prost monorepo (#28393) (fc97424)

v37.292.1
Compare Source
Build System

deps: update dependency @renovatebot/pep440 to v3.0.20 (#28391) (780a2ae)

v37.292.0
Compare Source
Features

fleet: extract dependencies from helm blocks with OCI-based helm charts (#28352) (cd02e93)

v37.291.1
Compare Source
Bug Fixes

manager/terraform: fix hash generation with directory (#28326) (a1cad20)

v37.291.0
Compare Source
Features

config: validate file config on repo runs (#26379) (de65584)

v37.290.1
Compare Source
Bug Fixes

deps: update ghcr.io/renovatebot/base-image docker tag to v2.2.5 (#28382) (53dd81e)

v37.290.0
Compare Source
Features

add ckeditor monorepo (#28374) (5dfe40a)

v37.289.1
Compare Source
Bug Fixes

hostRules: drop custom from platform hostTypes (#28371) (17cf8b6)

Miscellaneous Chores

deps: update peter-evans/create-pull-request action to v6.0.3 (#28370) (23ee6ae)

v37.289.0
Compare Source
Features

github: Fetch issues during repo initialization (#27785) (579d8c8)

v37.288.0
Compare Source
Features

bitbucket-server: Add bitbucket http access token support (#28093) (771b91f)

Bug Fixes

workarounds: expand java LTS regex versioning to support 21 (#28361) (1f805b2)

v37.287.2
Compare Source
Bug Fixes

deps: update ghcr.io/renovatebot/base-image docker tag to v2.2.4 (#28360) (5ebf418)

v37.287.1
Compare Source
Bug Fixes

deps: update ghcr.io/renovatebot/base-image docker tag to v2.2.3 (#28358) (4b5fd60)

v37.287.0
Compare Source
Features

cache: RENOVATE_X_REPO_CACHE_FORCE_LOCAL (#28291) (2d9305f)

Documentation

fix two more links (#28344) (20d1da6)
fix versioning links (#28341) (0dd364a)

Miscellaneous Chores

deps: update dependency @swc/core to v1.4.13 (#28342) (be6c657)
deps: update devcontainers/ci action to v0.3.1900000349 (#28347) (56fd8fb)

v37.286.1
Compare Source
Bug Fixes

deps: update ghcr.io/renovatebot/base-image docker tag to v2.2.2 (#28339) (a077b5a)

Documentation

versioning: split to seperate pages and add open issues (#28314) (f7ca230)

Miscellaneous Chores

deps: update dependency @swc/core to v1.4.12 (#28338) (cf20049)

Tests

config/presets: add test to prevent handlebars in internal preset names (#28336) (d29079c)
pipenv: remove duplicate import (#28337) (24a4d07)

v37.286.0
Compare Source
Features

config/presets: add security-only preset (#28320) (da6056c)

v37.285.1
Compare Source
Miscellaneous Chores

deps: update dependency markdownlint-cli2 to v0.13.0 (#28333) (b9ded23)
deps: update sigstore/cosign-installer action to v3.5.0 (#28334) (a1c8a93)

Build System

deps: update dependency better-sqlite3 to v9.5.0 (#28332) (25162e9)

v37.285.0
Compare Source
Features

config: Add @eslint/* to ESLint packages preset (#28328) (0c30ef4)

v37.284.1
Compare Source
Miscellaneous Chores

deps: update dependency @types/tar to v6.1.12 (#28331) (01ff873)

Build System

deps: update dependency better-sqlite3 to v9.4.5 (#28330) (f2f0a2d)

v37.284.0
Compare Source
Features

fleet: extract dependencies from helm blocks without a fixed releaseName (#28325) (7669f2f)

Bug Fixes

deps: update ghcr.io/renovatebot/base-image docker tag to v2.2.1 (#28321) (b9f2b64)

Build System

deps: update dependency @opentelemetry/instrumentation-bunyan to v0.37.0 (#28322) (0d79286)
deps: update dependency @renovatebot/osv-offline to v1.5.4 (#28327) (08b03f4)

v37.283.0
Compare Source
Features

manager/gomod: Added support for the gomod toolchain directive (#27279) (aec0cd8)

v37.282.1
Compare Source
Bug Fixes

npm: add npmrc newline only if missing (#28313) (e4233c9)

v37.282.0
Compare Source
Features

deps: update ghcr.io/renovatebot/base-image docker tag to v2.2.0 (#28311) (8d6457e)

v37.281.4
Compare Source
Bug Fixes

versioning: bump rangeStrategy should pin if no range qualifier (#28309) (4316888)

v37.281.2
Compare Source
Bug Fixes

gerrit: remove quotes from message filter (#28236) (38df551)

v37.281.1
Compare Source
Bug Fixes

deps: update ghcr.io/containerbase/sidecar docker tag to v10.3.13 (#28293) (c848116)

Miscellaneous Chores

deps: update ghcr.io/containerbase/devcontainer docker tag to v10.3.13 (#28292) (efae285)

v37.281.0
Compare Source
Features

support pnpm.overrides (#28199) (6f785fd)

Documentation

Order of arguments in pathSemanticCommitType description (#28258) (867471a)

v37.280.4
Compare Source
Bug Fixes

cache: Trigger cacache to remove expired contents (#28275) (fcfbf38)
versioning/poetry: version strings that include a leading zero in their pre, post, or dev fields (#28158) (e155173)

v37.280.3
Compare Source
Bug Fixes

npm: resolve registry URL using packageName, if set (#28247) (e0115f9)

v37.280.2
Compare Source
Miscellaneous Chores

deps: lock file maintenance (#28264) (cb5c38c)
deps: update codecov/codecov-action action to v4 (#28287) (7dbc0aa)
deps: update davidanson/markdownlint-cli2-action action to v16 (#28288) (dbdb40b)
deps: update linters to v7.6.0 (#28285) (fd0cf9c)

Build System

deps: update dependency @cdktf/hcl2json to v0.20.6 (#28286) (1ada2e8)

Continuous Integration

allow codecov upload fail on pr (#28289) (dd37d99)

v37.280.1
Compare Source
Bug Fixes

deps: update ghcr.io/containerbase/sidecar docker tag to v10.3.12 (#28274) (cdaea63)

Documentation

core/config: add warning for deprecated options (#28216) (fe206f7)
update references to renovate/renovate to v37.280.0 (#28263) (5991172)

Miscellaneous Chores

deps: update containerbase/internal-tools action to v3.0.74 (#28265) (e884e49)
deps: update dependency memfs to v4.8.1 (#28260) (c4c8f0c)
deps: update ghcr.io/containerbase/devcontainer docker tag to v10.3.12 (#28277) (ebef504)
deps: update linters to v7.5.0 (#28279) (be9f968)
deps: update pnpm to v8.15.6 (#28278) (21d6fa6)

Continuous Integration

skip codecov on merge group (#28284) (297679a)

v37.280.0
Compare Source
Features

versioning/python: implement getNewValue (#28224) (ca5ce48)

Miscellaneous Chores

deps: update dependency @types/node to v18.19.28 (#28254) (d8e014e)
deps: update dependency @types/node to v18.19.30 (#28255) (bf9c495)
deps: update github/codeql-action action to v3.24.10 (#28250) (32678a8)

v37.279.4
Compare Source
Build System

deps: update dependency node-html-parser to v6.1.13 (#28240) (d36a835)

v37.279.3
Compare Source
Build System

deps: update dependency minimatch to v9.0.4 (#28237) (a25b4d8)
deps: update dependency simple-git to v3.24.0 (#28238) (fc315f4)

v37.279.2
Compare Source
Bug Fixes

set allowedHeaders to GlobalConfig before initPlatform is invoked (#28228) (c441c84)

v37.279.0
Compare Source
Features

manager/scalafmt: implement manager (#28192) (1119d60)

v37.278.2
Compare Source
Bug Fixes

deps: update ghcr.io/containerbase/sidecar docker tag to v10.3.11 (#28198) (103e54a)

Documentation

update references to renovate/renovate to v37.278.1 (#28196) (9a4a322)

Miscellaneous Chores

deps: lock file maintenance (#28197) (50943ba)

v37.278.1
Compare Source
Bug Fixes

deps: update ghcr.io/containerbase/sidecar docker tag to v10.3.9 (#28195) (382f3e5)

Documentation

github: rewrite sentence (#28155) (7538b31)

Miscellaneous Chores

deps: update containerbase/internal-tools action to v3.0.72 (#28194) (fa7483e)
deps: update linters to v7.4.0 (#28141) (1fbea71)

Code Refactoring

Adresses review notes for Unity3D datasource (#28190) (6fc4cea)
manager/poetry: use common normalization function (#28185) (fdb907a)

v37.278.0
Compare Source
Features

manager/pip-compile: Allow security updates for transitive dependencies  (#27561) (0df4ff5)

v37.277.0
Compare Source
Features

update labels when config changes (#25340) (f889079)

v37.276.0
Compare Source
Features

manager/pip-compile: Support -r dependencies between files (#28052) (f9ba846)

v37.275.0
Compare Source
Features

vendir: add support for github releases (#28175) (e998c65)

Miscellaneous Chores

deps: update dependency tar to v6.2.1 (#28179) (673c047)

v37.274.0
Compare Source
Features

add support for git refs for vendir (#28084) (a8208df)

Documentation

development: clarify logging principles (#28162) (a567774)

Miscellaneous Chores

remove types.ts from vendir as it is unused (#28166) (c74a499)

Tests

vendir: refactor fixtures (#28165) (a6f90f2)

v37.273.0
Compare Source
Features

adding includes helper for templating (#28148) (e4020c1)

Code Refactoring

datasource/nuget: move v2/v3 API logic to classes (#28117) (87bba9d)

v37.272.0
Compare Source
Features

pip_requirements: add requirements.*.(txt|pip) file pattern (#28143) (fde2dff)

Documentation

github: mention workflow scope (#28137) (f013c4e)
python: drop duplicate fileMatch info (#28146) (671a228)

v37.271.1
Compare Source
Bug Fixes

config: RENOVATE_X_EAGER_GLOBAL_EXTENDS (#28144) (dffa7b5)

Miscellaneous Chores

deps: update dependency memfs to v4.8.0 (#28139) (30495ed)
deps: update dependency type-fest to v4.13.0 (#28140) (9e39d29)
deps: update dependency type-fest to v4.14.0 (#28142) (59d4d26)

Code Refactoring

manager/pip-compile: rename constraint helpers (#28138) (839e50f)

v37.271.0
Compare Source
Features

manager/github-actions: extract complex github tags (#27941) (6ad6022)

Miscellaneous Chores

deps: update actions/dependency-review-action action to v4.2.5 (#28135) (1e9cef5)
deps: update dependency @types/eslint to v8.56.6 (#28136) (9c25dbb)
deps: update dependency @types/node to v18.19.26 (#28129) (9aad91c)

v37.270.0
Compare Source
Features

datasource: Add Unity3D (#27971) (0b73d68)

Documentation

remove extra backtick (#28122) (4023665)

Miscellaneous Chores

deps: update dependency @types/node to v18.19.25 (#28128) (771cb5f)

v37.269.5
Compare Source
Build System

deps: update dependency @cdktf/hcl2json to v0.20.5 (#28123) (16b15ec)

v37.269.4
Compare Source
Bug Fixes

deps: update ghcr.io/containerbase/sidecar docker tag to v10.3.8 (#28119) (3950c3f)

Documentation

update references to renovate/renovate to v37.269.3 (#28111) (1e6d846)

Miscellaneous Chores

deps: lock file maintenance (#28112) (519a8db)
deps: lock file maintenance (#28114) (014fdcd)
deps: update actions/dependency-review-action action to v4.2.4 (#28106) (d0397f6)
deps: update containerbase/internal-tools action to v3.0.70 (#28113) (ddd5bfc)
deps: update dependency aws-sdk-client-mock to v3.1.0 (#28109) (b037aaa)
deps: update pnpm to v8.15.5 (#28108) (00651bd)

Configuration
📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).
🚦 Automerge: Enabled.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.

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

This PR has been generated by Renovate Bot.

:tada: This PR is included in version 5.3.9 :tada:
The release is available on GitHub release
Your semantic-release bot :package::rocket:


[Dubbo-SPI] Spring spi support inject by type

What is the purpose of the change
Spring spi support inject by type. Not necessary to support spring 2.5 or lower.
Brief changelog
SpringExtensionFactory
Verifying this change
XXXX
Follow this checklist to help us incorporate your contribution quickly and easily:

[ ] Make sure there is a GITHUB_issue filed for the change (usually before you start working on it). Trivial changes like typos do not require a GITHUB issue. Your pull request should address just this issue, without pulling in other changes - one PR resolves one issue.
[x] Format the pull request title like [Dubbo-XXX] Fix UnknownException when host config not exist. Each commit in the pull request should have a meaningful subject line and body.
[x] Write a pull request description that is detailed enough to understand what the pull request does, how, and why.
[x] Write necessary unit-test to verify your logic correction, more mock a little better when cross module dependency exist. If the new feature or significant change is committed, please remember to add integration-test in test module.
[x] Run mvn clean install -DskipITs to make sure unit-test pass. Run mvn clean test-compile failsafe:integration-test  to make sure integration-test pass.
[x] If this contribution is large, please file an Apache Individual Contributor License Agreement.

Codecov Report

Merging #1456 into master will decrease coverage by 0.02%.
The diff coverage is 27.27%.

@@            Coverage Diff             @@
##           master    #1456      +/-   ##
==========================================
- Coverage   31.59%   31.57%   -0.03%
==========================================
  Files         682      682
  Lines       33035    33046      +11
  Branches     6592     6596       +4
==========================================
- Hits        10438    10433       -5
- Misses      20748    20757       +9
- Partials     1849     1856       +7

Impacted Files
Coverage Δ

...onfig/spring/extension/SpringExtensionFactory.java
33.33% <27.27%> (-5.13%)
:arrow_down:

...om/alibaba/dubbo/rpc/filter/ActiveLimitFilter.java
83.33% <0%> (-5.56%)
:arrow_down:

...a/dubbo/remoting/transport/netty/NettyChannel.java
61.25% <0%> (-5%)
:arrow_down:

...bo/remoting/transport/netty/NettyCodecAdapter.java
55.22% <0%> (-1.5%)
:arrow_down:

...baba/dubbo/remoting/transport/mina/MinaClient.java
57.97% <0%> (-1.45%)
: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 5dd8ddc...5e7636e. Read the comment docs.

See #1837 .
Close this one.


Friendly token

Use friendly_token over token_generator when only raw value is needed
The first value returned by token_generator.generate is
simply the return value of friendly_token so this code should
be equivalent.
The use of token_generator here dates back to when the
confirmation_token was stored as a digest, but that is no
longer true.

Looks good. Make sense since we are only using the raw and its the same thing of Devise.friendly_token. The extra computation is not necessary.
Any consideration? @josevalim @lucasmazza

I don't have enough background of the token handling here, so I guess it's up to @josevalim for the final word 🙈

:heart: :green_heart: :blue_heart: :yellow_heart: :purple_heart:

I know this is kind of old, but Devise::TokenGenerator checks that the generated token is not already in the database. This check does not happen for confirmable anymore. (I never had an issue with this, but it seems strange to check it for the other tokens, but not for confirmable).
This was not changed in this PR, but rather in #3661


Integreate SQLachemy engine IBMi : Db2 for i / AS400 / iseries

Hi ! is it possible to integrate this driver for the iseries/AS400/IBMi ? It better suits than ibm-db-sa for the mainframe on i/os
https://sqlalchemy-ibmi.readthedocs.io/en/latest/
Thank you in advance :)

Hopefully this link helps. There are a couple links in that section on installing or (if needed) writing a driver. If that doesn't cover it, let us know and we can re-open the issue. Thanks!

Hi,
I checked on it and i tried to configure it but the sqlalchemy-ibmi driver is based on pyodbc :/ do you know How to make it independant ?
Thank you for your answer :)

Hi @rusackas
I couldn't achieve to make a driver, can you me help ?

I can't make it work neither

Hi @RavazziniAndrea and thank you for you answer :)
So you cannot use the ibm_db package to query on IBMi (AS400, iSeries). You have to use the sqlalchemy-ibmi (only compatible sqlalchemy >=1.3,< 1.4. Before this, you have to install the driver ODBC (iaccess : https://ibmi-oss-docs.readthedocs.io/en/latest/odbc/installation.html)
That's why there is a big mistake about documentation. To use ibm_db, you have to pay the licence (for db2 connect). The other is free and still under active developpement and work great.
The only way for me to create the driver is to do like the mssql driver for superset but my knowledges on this kind of developpement is very limited 😅
Thank you again for your time.
Don't hesitate if you need help
Andy

@andymalo43 that's extremely helpful info! Would you be at all willing to make a PR on the documentation to explain this? I feel like you could update it it with more clarity than I can :) If opening the PR is difficult, feel free to just paste some markdown edits here and I can usher it through, or hit me up on Slack and we can pair up! Always looking to make things easier for the next person!


fmt/print.go

Hi!
Should we have isnum = true moved out from for and placed before return ?
In this case isnum will be assigned to true once.
Now we have (line 305):
   295  // parsenum converts ASCII to integer.  num is 0 (and isnum is false) if no number present.
   296  func parsenum(s string, start, end int) (num int, isnum bool, newi int) {
   297          if start >= end {
   298                  return 0, false, end
   299          }
   300          for newi = start; newi < end && '0' <= s[newi] && s[newi] <= '9'; newi++ {
   301                  if tooLarge(num) {
   302                          return 0, false, end // Overflow; crazy long number most likely.
   303                  }
   304                  num = num*10 + int(s[newi]-'0')
   305                  isnum = true
   306          }
   307          return
   308  }

And maybe it should be like (line 306):
   295  // parsenum converts ASCII to integer.  num is 0 (and isnum is false) if no number present.
   296  func parsenum(s string, start, end int) (num int, isnum bool, newi int) {
   297          if start >= end {
   298                  return 0, false, end
   299          }
   300          for newi = start; newi < end && '0' <= s[newi] && s[newi] <= '9'; newi++ {
   301                  if tooLarge(num) {
   302                          return 0, false, end // Overflow; crazy long number most likely.
   303                  }
   304                  num = num*10 + int(s[newi]-'0')
   305          }
   306          isnum = true
   307          return
   308  }

Thanks.
Oleg.

Sure. Send a change if you'd like. Instructions: https://golang.org/doc/contribute.html

I know I'm commenting on a closed issue, but be aware; if the condition in the for loop does not equal to true for whatever reason, isnum will be false by default when it returns. If you put it outside, that would mean that it is always true.
Please consider this before moving it outside and create test cases to cover that scenario and what would happen to calling this with that scenario.
Cheers,
Gergely.

@Skarlso that's a cool catch. Will prepare a test case to cover this. Thanks!

You are welcome. :)


⚠ Bofrost.at has degraded performance

In f461cf7, Bofrost.at (https://www.bofrost.at) experienced degraded performance:

HTTP code: 200
Response time: 2060 ms

Resolved: Bofrost.at performance has improved in 0d50003.


POST requests are rejected with 405

If serve-index gets a POST request (or any request other than GET, HEAD, & OPTIONS) it responds to it with a 405 Method Not Allowed. It should call next() so the next middleware can handle the request.
I know I can handle the POST request before it gets to the serve-index middleware but that is not feasible with our setup right now.

Ah, yes, indeed. I think that is what PR #61 is trying to fix, but it is very incomplete and the docs in it don't correctly describe what the option is doing. Do you want to take up the torch on that PR?

Closing due to no response.

@ledlamp take a look at this https://stackoverflow.com/questions/34494634/http-post-express-server-returns-405-error-if-it-enables-serve-index/64137350#64137350

@ledlamp take a look at this https://stackoverflow.com/questions/34494634/http-post-express-server-returns-405-error-if-it-enables-serve-index/64137350#64137350

oh hmm that's a good idea but the thing I was working on is loong gone now 😆
I think this issue should be left open though; just because nobody cares to fix it right now doesn't mean it's not an issue 🙄


Uploading SPFx assets fails with exception

Following error happens:
Uploading SPFx assets to the CDN
Exception occurred!
Exception Type: System.Management.Automation.ParameterBindingException
Exception Message: A parameter cannot be found that matches parameter name 'Confirm'.

The error seems to occur in the following line:
Set-SPOTenantCdnEnabled -CdnType Public -Confirm:$false

When running the above line manually within a debug session in  the PowerShell ISE the Enable parameter was expected to be included in the above line as a parameter
The same also happened for:
 Add-SPOTenantCdnOrigin -CdnType Public -OriginUrl sites/$CDNSiteName/$CDNLibraryName -Confirm:$false

Over here a parameter OriginScope is expected. Once I removed the Confirm from the Add-SPOTenantCDNOrigin, I got:
Add-SPOTenantCdnOrigin : The property or field 'PublicCdnAllowedFileTypes' has not been initialized. It has not been requested or the request has not been executed. It may need to
be explicitly requested.

After upgrading the SharePoint Online Management Shell the issue went away


FileAppenderCache/FileTarget issue

Type Bug/Feature request
NLog version: 4.3.3
Platform: .Net 4.5
In case of a BUG:
The Current FileAppenderCache usage is kind of broken in my oppinion.
If you have two file targets in the same process, (KeepFileOpen=true, ConcurrentWrites=true, NetworkWrites=false, Archiving=true)trying to write to the same file, then they will each get their own instance of a FileAppenderCache, which then result in both FileTarget's getting their own instance of the RetryingMultiProcessFileAppender.
They both open a windows handle to the log file.
When archiving kicks in, they both start a thread to monitor the archive directory.
In this scenario and any other scenario when two different targets write to the same file within the same process, they should share the same instance of the Appender, which would cause one less thread per target to be created, and also only have one appender to have responsibility of the archiving, and also only one windows handle opened.
The current implementation allows for one target to use a SingleProcessFileAppender and another target to use a MutextMultiProcessFileAppender within the same process, which makes no sense at all, since one appender locks on a mutex to write to the file, the other just writes.
The reason why I think this should be changed is because I am being hit by somewhat the same issues as https://github.com/NLog/NLog/issues/1314
where the old old file is deleted, but another appender has a windows handle open on the file, and then the method:
DeleteAndWaitForFileDelete never returns and keeps spinning in the
do
{
Thread.Sleep(100);
currentFileInfo = new FileInfo(fileName);
}
while ((currentFileInfo.Exists) && (currentFileInfo.CreationTime == originalFileCreationTime));

If I Change the line:
File.Delete(fileName)
back to the original version:
if (ConcurrentWrites && KeepFileOpen)
{
// Moving the file will cause all other FileTarget's to release the file, unlocking it for deleting.
string tempFileName = Path.GetTempFileName();
File.Delete(tempFileName);
File.Move(fileName, tempFileName);
File.Delete(tempFileName);
}
else
File.Delete(fileName);
Then everything works as expected, meaning, file is deleted, and thread does not spin forever.

oh and if I have the debugger attached and steps through the code to the archiving, then everything works as expected, even when the unmodified code.

Thanks, will looks at this.
To be clear, code on previous versions was better?

Yes kind of, but I think fixing/enhancing the FileAppenderCache/FileAppender issue as described above will fix the issue as well, but that is a bigger task, so a quick fix to fix both this and https://github.com/NLog/NLog/issues/1314 would be to reintroduce the File.Move again as above.

Fixing that issue would be nice also. If you have some thoughts on the code, please share it in a PR. :)

okay, I will make a PR with suggested code, I dont know if you can assign it to me, just so nobody else starts working on it?

Cool! Thanks!

With regards to this (old) code:
// Moving the file will cause all other FileTarget's to release the file, unlocking it for deleting.
string tempFileName = Path.GetTempFileName();
File.Delete(tempFileName);
File.Move(fileName, tempFileName);
File.Delete(tempFileName);

The comment in that code is incorrect. When a file is moved to a different folder on the same disk, the OS only changes the FAT while the file itself remains untouched. It is still the same file and some file handles will still have a lock on that file and in fact still write to it even though it had been moved to a different folder.

Using two targets to the same file with different file appenders is not intended usage, and therefore the behavior for it is undefined.
Perhaps we should mention this on the FileTarget page of the Wiki.

@bjornbouetsmith I'm curious. Why would you want to use two different targets to the same file?

Okay, I am not saying the comment is correct, but when I changed the new code back to the old code it started working again on my machine.
I would not use two different appenders on the same file ever. In fact I would never use two appenders on the same file, that is just silly in my opinion, but we have tests that does this and is was the tests that was failing for me.
But there are other issues in FileTarget as well in regards to access to the underlying file. Sometimes it goes through the appender to write to the file, other times it just opens a stream and writes directly.
Changing the code to use a single fileappender per file per process would prevent som of the locking/handle issues. And it would not make it worse for multiple processes writing to the same file.
But there is always a risk that something from another process opens a handle on the file being locked to, and then the archiving process would be stuck because of the loop.
do
{
Thread.Sleep(100);
currentFileInfo = new FileInfo(fileName);
}
So to prevent that it would probably be a better strategy to abort the loop after a configurable timeout and simply choose another filename for logging - to handle the handle locking issue.
I know that e.g. the WCF framework does this if you enable wcf diagnostics logging and it tries to cycle the file and cannot do it, then it simply creates a random name for the log file.
We dont have to do that, we can simply decide on another more fitting name.

But take a look at the stats in
https://github.com/NLog/NLog/pull/1397
That shows that pooling can do for GC collection rates

Changing the code to use a single fileappender per file per process would prevent som of the locking/handle issues.

Is this under the assumption that only one target is used per process?

No multiple targets, but each target referencing the same file should use the same appender, not have an appender each.

@bjornbouetsmith Users of NLog are not supposed to use multiple targets to the same file. Is it worth the additional complexity of the code to support this kind of unintended usage?

Thats true, but shouldn't we then throw an exception if someone sets up two targets for the same file? To prevent any threading/locking issue?
We have unit tests that does this, if we are not supposed to do it, then why are we testing it?

I think throwing an exception beforehand will be a breaking change.
About the unit test, have to search in git history as I dunno if was supported or a silly unit test.

Yes only throw exception if throwExceptions=true - otherwise we should ignore target number 2 - or even better don't setup anything. Isen't that what happens if you give nlog an invalid configuration?

There is a unit test that uses two FileTarget objects to the same file to simulate two processes logging to the same file.

@bhaeussermann which unit test is that?

@bhaeussermann any idea if I should delay the release of NLog 4.3.4 until this is fixed?

which unit test is that?

It is DateArchive_AllLoggersTransferToCurrentLogFile()

any idea if I should delay the release of NLog 4.3.4 until this is fixed?

The change in question was introduced in #1183

It is DateArchive_AllLoggersTransferToCurrentLogFile()

That one is recently added (7dae8cd57fc6ac50130085359d7912c684647a8a)  - jan 2016.

The change in question was introduced in #1183

So introduced in 4.3.0. I will wait with the release of 4.3.4 if we now better what to do with this issue.
I think we can drop the support (in the unit tests) of writing 2 targets to the same file if this will help us fixing/improving the code. I don't prefer an exception, but writing a warning to the internal logger would be nice.

@304NotModified Based on the fact that we have never explicitly supported multiple targets to the same file within the same process, do you think that #1183 actually broke something that was not broken before?

@304NotModified ('m not denying that this needs to be fixed; I'm just questioning whether the release should be delayed because of this).

I have to agree with @bhaeussermann - I dont think we should hold back any release. Its already out there, people using the "feature" are silly. But I think we should get it fixed, so that

either you cannot have more than one target for one file per process
If you do, they share the fileappender cache, so that there is only one responsibility for archiving etc.

OK thanks for the opinions! Will release 4.3.4 soon then
Too bad I haven't found much time these days to dive into this issue.  Will try to be more informed this week.

@snakefoot any idea if this is still an issue? We changed a lot with this.

@304NotModified any idea if this is still an issue?

The original issue was missing synchronization when having multiple isolated file-targets that are writing to the same file within the same application. Similar missing synchronization can also be found if having multiple network-targets pointing to the same network-address.
I'm guessing the problem was triggered by running unit-tests in parallel. Most of the old unit-test rely on a global logfactory, and some also fail to use guid-filename in temp-path. We have now disabled the ability to run unit-tests in parallel to avoid these issues.
Right now the application-owner have to adjust the config, when having multiple application-instances writing to the same file. I think the same can be expected from the application-owner, when having a single application-instance with multiple file-targets that might overlap in filenames.
I think that the extra complexity needed to synchronize state between multiple Nlog-targets of the same type is not worth the price of code-complexity and performance.  So I would say wontfix.

Thanks for the input :)