Add Grafana dashboard for monitoring OPEA application scaling in k8s

Description
Adds Grafana dashboard for monitoring OPEA application scaling:

How many of the application and its TGI + TEI pods are created, ready and in use
How many requests they are processing (min and max across all replicats)
How many failures they are reporting (sum across replicas)

And a helper script for installing dashboard k8s configMaps for Grafana.
Unlike earlier ChatQnA dashboard, this handles multiple OPEA application having same names but being in separate namespaces.  User selects namespace and then the OPEA application from that.  If cluster has only one running, Dashboard will default to that.
Issues
n/a.
Type of change

[x] New feature (non-breaking change which adds new functionality)

Dependencies
n/a.
Tests
Manual testing of the script and dashboard working.

Currently dashboard relies on HTTP inprogress metric for how many pending requests application has: https://github.com/opea-project/GenAIComps/pull/845
But depending on whether following PR is merged for v1.1, that particular metric may need to be changed before v1.1: https://github.com/opea-project/GenAIComps/pull/864

I can add blurb about this also to README, but scaling is currently a bit of corner case, so IMHO it could come also in next release.
Larger question about Observability README, and things it refers to, is what to do with chatqna/ sub-directory content here, now that Helm charts have more generic monitoring support for OPEA applications.
The dashboards under that:

queue_size_embedding_rerank_tgi.json: some queries in that do not have any selectors, some use service selector
tgi_grafana.json: queries use container selector (container="$service")

I.e. neither handles properly case when cluster is running multiple TGI instances, or separate TEI instances for different OPEA application instances.

FYI: I'm going to change "Failures" heading to "Incomplete requests".   I do not think half of TGI requests are failures, but e.g. frontend requests being split to 2 backend ones, so only half of them are "complete".

Dashboard changes:

Changed HTTP metric to one that will come with: https://github.com/opea-project/GenAIComps/pull/864
Lowered scaling & failures rows so that dashboard first better to screen
"Failures" -> "Incomplete requests" header change


How to configure logging for flyway?

Which version and edition of Flyway are you using?
FLYWAY 5.1.4 Pro (Trial)
If this is not the latest version, can you reproduce the issue with the latest one as well?
(Many bugs are fixed in newer releases and upgrading will often resolve the issue)
This is the latest version
Which client are you using? (Command-line, Java API, Maven plugin, Gradle plugin)
Command-line
Which database are you using (type & version)?
Oracle 12c
Which operating system are you using?
Windows 8.x
What did you do?
(Please include the content causing the issue, any relevant configuration settings, the SQL statement that failed (if relevant) and the command you ran.)
What did you expect to see?
What did you see instead?

See https://flywaydb.org/documentation/commandline/#output


buffer/settings: Don't reinitialize global settings on filetype change

Otherwise the change of the filetype could cause unexpected behavior depending on global options being reset, while a volatile setting has been used.
Additionally the documentation of the reload command has been extended to represent the actual behavior.

This is not the only issue here. The reload command or setting filetype indeed changes the autosave value, but as I can see, this value change has no effect: the file is still autosaved according to the old setting. (This issue is orthogonal to the issue of whether the setting is a volatile setting and should not be changed by reload in the first place.)

So it seems that instead of hacking InitGlobalSettings() we should rework the reload behavior: it should not call InitGlobalSettings() but rather call SetGlobalOptionNative() for every option that changed (at least), to make the changes take effect.

And as for the filetype setting, do we really need to re-read and reinitialize global settings when changing the filetype? Shouldn't we really just call InitLocalSettings() then? (I see that was added in https://github.com/zyedidia/micro/commit/3ef0267f0a1bfa6920ea3cbf2ee312d0aabe000e to fix the issue #2712, but that issue was not really about updating settings because settings.json changed, it was just about updating per-filetype settings because the filetype changed, right?)

After such 2 changes, InitGlobalSettings() would be only called at micro startup, before initializing volatile settings, so we wouldn't need to change it.

This issue is orthogonal to the issue of whether the setting is a volatile setting and should not be changed by reload in the first place.

BTW maybe we actually do want reload to change volatile settings as well?

[...] but as I can see, this value change has no effect: the file is still autosaved according to the old setting.

I saw something different, otherwise I wouldn't have created the PR.
Anyway, I agree that taking care of this in the two mentioned scenarios seems to be the better approach.

BTW maybe we actually do want reload to change volatile settings as well?

Hm, depends on what the community and or us really expects from that command to do.
At least for now it's somehow undocumented/undefined what shall happen in the scenario the user applied a local resp. volatile option and uses reload afterwards in the same session.

I saw something different

Are you sure? I've checked again that with autosave and other options that are specially handled by SetGlobalOptionNative() and buffer.SetOptionNative() (e.g. hlsearch, mouse), if I run e.g. micro -mouse false and then run reload in micro, then show mouse shows that mouse is set to true, however the mouse is still disabled.
Moreover, I see it's even worse: in the basic case when I change an option value in settings.json by editing settings.json (while micro is running) and then run reload, the option value doesn't change at all.

Are you sure?

Yep, tried it now once again with the current state (set filetype without config.InitGlobalSettings()) against the master...
current:
$ micro -autosave 20 test # filetype unknown
modify
set filetype ini
Ctrl-Q
-> no prompt (y/n/esc)
-> modification stored

master:
$ micro -autosave 20 test # filetype unknown
modify
set filetype ini
Ctrl-Q
-> prompt (y/n/esc)

Yep [...]

Ah... you checked that save without prompt on exit gets disabled after set filetype ini, but you didn't check if autosave every 20 seconds gets disabled after set filetype ini. It doesn't get disabled. Try it.

master:
$ micro -autosave 20 test # filetype unknown
show autosave -> 20
set filetype ini
show autosave -> 0
autosaved after 20s

current:
$ micro -autosave 20 test # filetype unknown
show autosave -> 20
set filetype ini
show autosave -> 20
autosaved after 20s

Ok, you're right...saw it now. Totally weird.
autosave still needs a fix to be disabled, after it was started initially.

Hopefully I didn't miss something after my absence.
In case of please poke as usual.

Just this one left for v2.0.14, what do you think?

After this review, I owe you more than one :beer:. :wink:

Just a note: I've found that with this PR reload "breaks" plugins that directly set options in buf.Settings rather than use SetOptionNative() (which has never been a very good idea, but becomes even less of a good idea after the bugfixes for reload implemented in this PR).
For instance, the fix in my own detectindent plugin I've just pushed: https://github.com/dmaluka/micro-detectindent/commit/e84ca8b241c51426bd87d3635b133cd0ea3719cd

With the next update I took care of the set in the comment plugin distributed with micro.

Let us finalize yours and mine and when everything is in a good shape we can create the v2.0.14-rc1 then.

Let us finalize yours and mine and when everything is in a good shape we can create the v2.0.14-rc1 then.

Perhaps also add this one (which I've just prepared): https://github.com/zyedidia/micro/pull/3432? It is fairly simple and probably safe, and IIRC quite a few users asked for it, so might be good to have it in the release.


Set UTF-8 as the default character encoding

The default character encoding for Windows in not UTF-8. This causes failures in
the tests only for this OS.
This is a requirement for #21.

Oh windows, you so crazy.
Thanks for the PR! Merged.


IngressRouteTCP obtains ACME cert but then continues to use Default cert

Do you want to request a feature or report a bug?
Bug
Did you try using a 1.7.x configuration for the version 2.0?

[ ] Yes
[ X] No

What did you do?
I'm using traefik as a k8s ingress controller, and I am playing with the TCP routing. I'm using the new CRD's for the route to a test service. It is working, however the certificate in use remains the TRAEFIK DEFAULT CERT after acme completes.
I'm using v2.0.0 for those prometheus metrics fixes in my dev environment so I'm testing this out on that version.
What did you expect to see?
I expected to see the acme generated cert in use.
What did you see instead?
Traefik generates a default one and continues to use that instead
Output of traefik version: (What version of Traefik are you using?)
Version:      2.0.0-rc1
Codename:     montdor
Go version:   go1.13rc1
Built:        2019-08-26T17:47:29Z
OS/Arch:      linux/amd64

What is your environment & configuration (arguments, toml, provider, platform, ...)?
[global]
  checkNewVersion = true
  sendAnonymousUsage = false

[serversTransport]
  insecureSkipVerify = true

[certificatesResolvers.tls.acme]
  email =<EMAIL_ADDRESS>  storage = "acme.json"
  caServer = "https://acme-staging-v02.api.letsencrypt.org/directory"
  [certificatesResolvers.tls.acme.dnsChallenge]
    provider = "route53"
    delayBeforeCheck = 0
    resolvers = ["<IP_ADDRESS>", "<IP_ADDRESS>"]

[entryPoints]
  [entryPoints.tcp]
    address = ":8443"
  [entryPoints.httpn]
    address = ":8880"
  [entryPoints.traefik]
    address = ":8080"

[http.routers]
  [http.routers.main]
    entrypoints = ["httpn", "traefik"]

[tcp.routers]
  [tcp.routers.main]
    entrypoints = ["tcp"]
    [tcp.routers.main.tls]
      certResolver = "tls"
      options = "default"

[tls.options]
  [tls.options.default]
    minVersion = "VersionTLS12"
    cipherSuites = [
      "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256",
      "TLS_RSA_WITH_AES_256_GCM_SHA384"
    ]

[ping]

[providers.kubernetesIngress]
[providers.kubernetesCRD]

[log]
  format = "json"
  level = "info"

[api]
  dashboard = true

[metrics.prometheus]

Below is the ingress route:
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRouteTCP
metadata:
  name: example-ingress
spec:
  entryPoints:
    - tcp
  routes:
  - match: HostSNI(`example.my.zone.com`)
    services:
    - name: example
      port: 2080
  tls:
    passthrough: false
    certResolver: tls

If applicable, please paste the log output in DEBUG level (--log.level=DEBUG switch)
Filtered for relevance
{"level":"debug","msg":"Try to challenge certificate for domain [example.my.zone.com] founded in HostSNI rule","providerName":"tls.acme","routerName":"default/example-ingress-132b6a73e1aad193c12f","rule":"HostSNI(`example.my.zone.com`)","time":"2019-08-28T02:00:37Z"}
{"level":"debug","msg":"Looking for provided certificate(s) to validate [\"example.my.zone.com\"]...","providerName":"tls.acme","routerName":"default/example-ingress-132b6a73e1aad193c12f","rule":"HostSNI(`example.my.zone.com`)","time":"2019-08-28T02:00:37Z"}
{"level":"debug","msg":"Domains [\"example.my.zone.com\"] need ACME certificates generation for domains \"example.my.zone.com\".","providerName":"tls.acme","routerName":"default/example-ingress-132b6a73e1aad193c12f","rule":"HostSNI(`example.my.zone.com`)","time":"2019-08-28T02:00:37Z"}
{"level":"debug","msg":"Loading ACME certificates [example.my.zone.com]...","providerName":"tls.acme","routerName":"default/example-ingress-132b6a73e1aad193c12f","rule":"HostSNI(`example.my.zone.com`)","time":"2019-08-28T02:00:37Z"}
{"level":"debug","msg":"Building ACME client...","providerName":"tls.acme","time":"2019-08-28T02:00:37Z"}
{"level":"debug","msg":"https://acme-staging-v02.api.letsencrypt.org/directory","providerName":"tls.acme","time":"2019-08-28T02:00:37Z"}
{"level":"info","msg":"Register...","providerName":"tls.acme","time":"2019-08-28T02:00:38Z"}
{"level":"debug","msg":"legolog: [INFO] acme: Registering account for admin@my.zone.com","time":"2019-08-28T02:00:38Z"}
{"level":"debug","msg":"Using DNS Challenge provider: route53","providerName":"tls.acme","time":"2019-08-28T02:00:38Z"}
{"level":"debug","msg":"legolog: [INFO] [example.my.zone.com] acme: Obtaining bundled SAN certificate","time":"2019-08-28T02:00:38Z"}
{"level":"debug","msg":"legolog: [INFO] [example.my.zone.com] AuthURL: https://acme-staging-v02.api.letsencrypt.org/acme/authz-v3/6126904","time":"2019-08-28T02:00:38Z"}
{"level":"debug","msg":"legolog: [INFO] [example.my.zone.com] acme: Could not find solver for: tls-alpn-01","time":"2019-08-28T02:00:38Z"}
{"level":"debug","msg":"legolog: [INFO] [example.my.zone.com] acme: Could not find solver for: http-01","time":"2019-08-28T02:00:38Z"}
{"level":"debug","msg":"legolog: [INFO] [example.my.zone.com] acme: use dns-01 solver","time":"2019-08-28T02:00:38Z"}
{"level":"debug","msg":"legolog: [INFO] [example.my.zone.com] acme: Preparing to solve DNS-01","time":"2019-08-28T02:00:38Z"}
{"level":"debug","msg":"legolog: [INFO] Wait for route53 [timeout: 2m0s, interval: 4s]","time":"2019-08-28T02:00:38Z"}

# ...

{"level":"debug","msg":"No secret name provided","providerName":"kubernetescrd","time":"2019-08-28T02:01:13Z"}
{"level":"debug","msg":"Skipping Kubernetes event kind *v1.Endpoints","providerName":"kubernetescrd","time":"2019-08-28T02:01:13Z"}
{"level":"debug","msg":"No secret name provided","providerName":"kubernetescrd","time":"2019-08-28T02:01:13Z"}
{"level":"debug","msg":"Skipping Kubernetes event kind *v1.Endpoints","providerName":"kubernetescrd","time":"2019-08-28T02:01:13Z"}
{"level":"debug","msg":"Skipping Kubernetes event kind *v1.Endpoints","providerName":"kubernetes","time":"2019-08-28T02:01:13Z"}
{"level":"debug","msg":"legolog: [INFO] [example.my.zone.com] acme: Trying to solve DNS-01","time":"2019-08-28T02:01:14Z"}
{"level":"debug","msg":"legolog: [INFO] [example.my.zone.com] acme: Checking DNS record propagation using [<IP_ADDRESS>:53 <IP_ADDRESS>:53]","time":"2019-08-28T02:01:14Z"}

# ...

level":"debug","msg":"Skipping Kubernetes event kind *v1.Endpoints","providerName":"kubernetes","time":"2019-08-28T02:01:17Z"}
{"level":"debug","msg":"No secret name provided","providerName":"kubernetescrd","time":"2019-08-28T02:01:17Z"}
{"level":"debug","msg":"Skipping Kubernetes event kind *v1.Endpoints","providerName":"kubernetescrd","time":"2019-08-28T02:01:17Z"}
{"level":"debug","msg":"Skipping Kubernetes event kind *v1.Endpoints","providerName":"kubernetes","time":"2019-08-28T02:01:17Z"}
{"level":"debug","msg":"legolog: [INFO] [example.my.zone.com] The server validated our request","time":"2019-08-28T02:01:18Z"}
{"level":"debug","msg":"legolog: [INFO] [example.my.zone.com] acme: Cleaning DNS-01 challenge","time":"2019-08-28T02:01:18Z"}
{"level":"debug","msg":"legolog: [INFO] [example.my.zone.com] acme: Validations succeeded; requesting certificates","time":"2019-08-28T02:01:18Z"}

# ...

{"level":"debug","msg":"No secret name provided","providerName":"kubernetescrd","time":"2019-08-28T02:01:21Z"}
{"level":"debug","msg":"Skipping Kubernetes event kind *v1.Endpoints","providerName":"kubernetescrd","time":"2019-08-28T02:01:21Z"}
{"level":"debug","msg":"Skipping Kubernetes event kind *v1.Endpoints","providerName":"kubernetes","time":"2019-08-28T02:01:21Z"}
{"level":"debug","msg":"legolog: [INFO] [example.my.zone.com] Server responded with a certificate.","time":"2019-08-28T02:01:22Z"}
{"level":"debug","msg":"Certificates obtained for domains [example.my.zone.com]","providerName":"tls.acme","routerName":"default/example-ingress-132b6a73e1aad193c12f","rule":"HostSNI(`example.my.zone.com`)","time":"2019-08-28T02:01:22Z"}
{"level":"debug","msg":"Configuration received from provider tls.acme: {\"http\":{},\"tls\":{}}","providerName":"tls.acme","time":"2019-08-28T02:01:22Z"}
{"level":"debug","msg":"Adding certificate for domain(s) example.my.zone.com","time":"2019-08-28T02:01:22Z"}
{"level":"debug","msg":"No default certificate, generating one","time":"2019-08-28T02:01:22Z"}

# ...

{"entryPointName":"tcp","level":"debug","msg":"Creating TCP server 0 at <IP_ADDRESS>:2080","routerName":"default/example-ingress-132b6a73e1aad193c12f@kubernetescrd","serverName":0,"serviceName":"default/example-ingress-132b6a73e1aad193c12f","time":"2019-08-28T02:01:22Z"}
{"entryPointName":"tcp","level":"debug","msg":"Adding route example.my.zone.com on TCP","routerName":"default/example-ingress-132b6a73e1aad193c12f@kubernetescrd","time":"2019-08-28T02:01:22Z"}

And then after that whole todo I'm still using a default cert, as that final log in the second to last block suggests:
tinyzimmer@nou:~/devel (ctx: dev)$ openssl s_client -connect example.my.zone.com:8443
CONNECTED(00000003)
depth=0 CN = TRAEFIK DEFAULT CERT

verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 CN = TRAEFIK DEFAULT CERT
verify error:num=21:unable to verify the first certificate
verify return:1
---
Certificate chain
 0 s:/CN=TRAEFIK DEFAULT CERT
   i:/CN=TRAEFIK DEFAULT CERT
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIDRzCCAi+gAwIBAgIRAKtvAQfnyLmDU0+HhfNjJ5owDQYJKoZIhvcNAQELBQAw
HzEdMBsGA1UEAxMUVFJBRUZJSyBERUZBVUxUIENFUlQwHhcNMTkwODI4MDIxNjI5
WhcNMjAwODI3MDIxNjI5WjAfMR0wGwYDVQQDExRUUkFFRklLIERFRkFVTFQgQ0VS
VDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAPJg7/1ajd16Nia5VcF9
HufhRk3xgg45igq5sO2bJEti0tpekHGkdkQz7L4rIk1tFG2SwTpOQllTu1GJ+sJa
OZ85dZUEprpNL/asdqWCTbcHeYS7Ab9KULrFGieHS3LtQTtlenLacqGgfE+rKRaW
cgBUdJt3HzX+q7VGW8IhiC9MoXUS12HrIRZiQowczGnmdayo+AXLaj6edg6vyJNL
xBkQPvZ+49H0TaUhtHA1w63zsOterQSGAv0eMpQbMlq4uxR1XUuV6hKPS5TEtHXn
wzfmoQy8puUo516KMS6wCHK1DNoHm1N7VVy0WR0NPYUDBq41XaAFK0vbupHZVXHM
3BUCAwEAAaN+MHwwDgYDVR0PAQH/BAQDAgO4MAwGA1UdEwEB/wQCMAAwXAYDVR0R
BFUwU4JRZDYxMDdlMjA5MjkzOTI1NDc5MzEzNGI5OTAxYTY1YWEuODk3NmM5OTM0
NTljNjUyOTRlZTE4ZDFkZjlhYThjNTkudHJhZWZpay5kZWZhdWx0MA0GCSqGSIb3
DQEBCwUAA4IBAQAhhvBUQ/QXlZNK39LNmDjFGuWnklkd7q43PZcr7gHhfWPo6Gb5
K+g0HQ4qi5Nv1dGgFWd/HZWMD1kqrb9LVBGIHq1VFW0vvpsYOkd2QX8griAYqbsR
WM7RT964ONliN/UkzESRuhhKfqgnnUA8b8//96wRs2FOUi/IGppWvBevNAzng+1Z
0Sx5ZfsZTsf4rIpLixwWVSWuVU8kpocmg4/xb9rkXo0B4GjdKmut0sSGU4nH4FuI
DVBH49yyZ7nsMlTUM2OvtBWuhXMerB7RCjAE3MrmYSnF3lqq7VXjj6GDTXKQxWCb
xoQBd8/DKPG9xCWMWQP+tGRL3gMs0eUJwsUm
-----END CERTIFICATE-----
subject=/CN=TRAEFIK DEFAULT CERT
issuer=/CN=TRAEFIK DEFAULT CERT
---
No client certificate CA names sent
Peer signing digest: SHA512
Server Temp Key: ECDH, P-256, 256 bits

EDIT: ncat for whatever its worth, at least shows me getting through to my service
tinyzimmer@nou:~/devel (ctx: dev)$ ncat --ssl example.my.zone.com 8443 -v
Ncat: Version 7.01 ( https://nmap.org/ncat )
Ncat: Subject: CN=TRAEFIK DEFAULT CERT
Ncat: Issuer: CN=TRAEFIK DEFAULT CERT
Ncat: SHA-1 fingerprint: 9798 1D60 386E CB46 F6A8 0827 A847 62F5 6CC7 FC6B
Ncat: Certificate verification failed (unable to get local issuer certificate).
Ncat: SSL connection to <IP_ADDRESS>:8443.
Ncat: SHA-1 fingerprint: 9798 1D60 386E CB46 F6A8 0827 A847 62F5 6CC7 FC6B

Hello world!

Hi @tinyzimmer , quick tip on this (that should be mentioned on the community forum topic): https://major.io/2012/02/07/using-openssls-s_client-command-with-web-servers-using-server-name-indication-sni/ .

Hey @dduportal yea I had a hunch about that, hence me adding the ncat example which does pass the SNI.
But lo and behold, after me leaving the deployment alone for a day and coming back to it - im noticing it is now using the correct cert. I must've waited like 15 minutes or so before, but I guess all does appear okay now.


max_period of gamma embeddings

Hi,
I see that you use the same embeddings for gammas that are used typically for time steps.
However time steps often go from 0 to 1,000.
Should the max_period be updated accordingly? I'm thinking it should be lowered to something following the new order of magnitude (maybe to 10).

Hi, thanks for your advice.
I think updating the max_period is preferable, and the current version simply references its previous work wavegrad https://github.com/lmnt-com/wavegrad/blob/d050ab0ce01ba7676cd1e739b2fae91d9ea57144/src/wavegrad/model.py#L58. If I have time, I will try it in a later experiment.
Thanks again for your valuable advice!


CPU runtime inference speed  slow

Describe the bug
Inference speed in CPU build for ONNX(converted from Keras) is nearly 6x slower than CPU Keras(TensorFlow with Intel® MKL DNN backend) on same model.
Have we integrated MKL in the runtime, or else can we expect an approach to speed up inference?
System information

OS Platform and Distribution (e.g., Linux Ubuntu 16.04): Ubuntu 16.04
ONNX Runtime installed from (source or binary): binary
ONNX Runtime version: 0.1.4
Python version: 3.6.0
GCC/Compiler version (if compiling from source): 5.4.0 20160609
CUDA/cuDNN version: No
GPU model and memory: No

To Reproduce
import time
import numpy as np

x = np.random.random((1,416, 416, 3))
iters = 20

import onnxruntime as rt

sess = rt.InferenceSession("image.onnx")

input_name = sess.get_inputs()[0].name
label_name = sess.get_outputs()[0].name

_start_time = time.time()
for i in range(iters):
    sess.run([label_name], {input_name: x.astype(np.float32)})[0]
duration = time.time() - _start_time

print("ONNX prediction total duration is %s, per round is %.3f" %
              (duration, duration / iters))

from keras.models import load_model

model = load_model("image.h5")

_start_time = time.time()

for i in range(iters):
    model.predict(x.astype(np.float32))

duration = time.time() - _start_time

print("Keras prediction total duration is %s, per round is %.3f" %
              (duration, duration / iters))

Screenshots

The root cause is your keras model is in NHWC, while onnx only support NCHW in conv, so if you open the onnx model, you will find there is a lot of transpose inserted, which result very bad performance. Our converter has some optimization for that but unfortunately we can't eliminate all the transposes...  do you set your keras to channel_first format and train it again?

My understanding is that those optimizations are not in the Keras converter. @wenbingl.

Nathan and I discussed to create a ONNX to ONNX optimization tool a couple weeks agon. We can put common optimizers (e.g., tranpose optimizers, const folder, back to back reshape optimization and etc.) to this tool. All converters call it after finishing converting.

ONNX itself has a similar ONNX to ONNX optimization tool (https://github.com/onnx/onnx/blob/master/docs/PythonAPIOverview.md#optimizing-an-onnx-model ). Is there any plan to combine the optimizations in onnxruntime with those in onnx into one uniform framework?

We prefer not to make Lotus depend on these ONNX optimization. But, we do want to implement some in Lotus if they are really valuable.

@souptc thanks for the root cause, actually what i was expecting is able to use same model for both CPU and GPU runtimes, optimization during runtime will be very helpful!

@SherL0cked , based on the comment above, we already have some optimization in tensorflow converter. a quick trick you can try is to export the keras model's underline tf model, then convert it with TF converter.

I made a change in tf converter, allowing users to load an existing onnx file and call the optimizer directly. Feel free to have a try on that. Simple usage:
https://github.com/onnx/tensorflow-onnx/blob/ff36c8eb446af935c3c07bcf0fd9110a863e66bb/tests/test_optimizers.py#L26
It's just one line, besides loading the onnx file.
new_proto = GraphUtil.opt_transposes_with_model_proto(origin_proto)

@SherL0cked The Keras converter (https://github.com/onnx/keras-onnx) now has the optimizer...can you try your model to see if this issue is resolved?

@faxu I believe this solved issue!
Appreciate all for the efforts.

Closing as per previous comment.


Istio-proxy CrashLoopBackOff because of invalid prometheus scrape configuration.

Bug description
When restoring a backup of an istio injected namespace the istio-proxy container on the pods goes into CrashLoopBackOff because of the error:
error	invalid prometheus scrape configuration: application port is the same as agent port, which may lead to a recursive loop. Ensure pod does not have prometheus.io/port=15020 label, or that injection is not happening multiple times
[ ] Docs
[ ] Installation
[ ] Networking
[ ] Performance and Scalability
[ ] Extensions and Telemetry
[ ] Security
[ ] Test and Release
[ ] User Experience
[ ] Developer Infrastructure
Expected behavior
Pods recreation without crashes in istio-proxy
Steps to reproduce the bug
Install velero with restic support
Take a velero backup of a namespace with istio injection enabled
Delete the namespace
Make a restore of the namespace
Version (include the output of istioctl version --remote and kubectl version --short and helm version if you used Helm)
client version: 1.7.0
control plane version: 1.7.0
data plane version: 1.7.0 (35 proxies)
Client Version: v1.18.6+k3s1
Server Version: v1.18.6+k3s1
How was Istio installed?
istioctl install --set profile=default
Environment where bug was observed (cloud vendor, OS, etc)
K3OS cluster
The error says "Ensure pod does not have prometheus.io/port=15020 label". The pods does have that label as all other pods that are not crashing.
It also says to check if injection is not happening multiple times. But the namespace description is the same as all other namespaces with istio-injection.

Can you post the pod spec that is triggering this?
Are you sure you are not doing istioctl kube-inject into an auto injected namespace?
Can you run kubectl get mutatingwebhookconfigurations.admissionregistration.k8s.io?

Pod in CrashLoopBackOff description
Name:         mautic-75665fbdcc-pj9rt
Namespace:    backup
Priority:     0
Node:         1-k8w.vulca.cloud/<IP_ADDRESS>
Start Time:   Thu, 01 Oct 2020 14:41:16 +0000
Labels:       app=mautic
              istio.io/rev=default
              pod-template-hash=75665fbdcc
              security.istio.io/tlsMode=istio
              service.istio.io/canonical-name=mautic
              service.istio.io/canonical-revision=latest
              velero.io/backup-name=backup-test
              velero.io/restore-name=backup-test-20201001144118
Annotations:  backup.velero.io/backup-volumes: mautic-volume
              prometheus.io/path: /stats/prometheus
              prometheus.io/port: 15020
              prometheus.io/scrape: true
              sidecar.istio.io/status:
                {"version":"8e6e902b765af607513b28d284940ee1421e9a0d07698741693b2663c7161c11","initContainers":["istio-init"],"containers":["istio-proxy"]...
Status:       Running
IP:           <IP_ADDRESS>
IPs:
  IP:           <IP_ADDRESS>
Controlled By:  ReplicaSet/mautic-75665fbdcc
Init Containers:
  restic-wait:
    Container ID:  containerd://41d1a5bbe3f1d821722979d5cac20bdfafd84a5a2871a03497683d06b4baa4a1
    Image:         velero/velero-restic-restore-helper:v1.5.1
    Image ID:      docker.io/velero/velero-restic-restore-helper@sha256:a448e8ec2764742282ea5fa254660cfb164e84fe846fd26d9496c413b27ca528
    Port:          <none>
    Host Port:     <none>
    Command:
      /velero-restic-restore-helper
    Args:
      d1e4b98b-1e2f-40d4-baf0-45abc9343de7
    State:          Terminated
      Reason:       Completed
      Exit Code:    0
      Started:      Thu, 01 Oct 2020 14:41:39 +0000
      Finished:     Thu, 01 Oct 2020 15:53:18 +0000
    Ready:          True
    Restart Count:  0
    Limits:
      cpu:     100m
      memory:  128Mi
    Requests:
      cpu:     100m
      memory:  128Mi
    Environment:
      POD_NAMESPACE:  backup (v1:metadata.namespace)
      POD_NAME:       mautic-75665fbdcc-pj9rt (v1:metadata.name)
    Mounts:
      /restores/mautic-volume from mautic-volume (rw)
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-grhjg (ro)
  istio-init:
    Container ID:  containerd://35ed7a82c833bafa7ce0d50e9916c68ca7dd8b1da31e12aeec461adab34829a8
    Image:         docker.io/istio/proxyv2:1.7.0
    Image ID:      docker.io/istio/proxyv2@sha256:c1f1b45a4162509f86aa82d0148aef55824454e7204f27f23dddc9d7f4ae7cd1
    Port:          <none>
    Host Port:     <none>
    Args:
      istio-iptables
      -p
      15001
      -z
      15006
      -u
      1337
      -m
      REDIRECT
      -i
      *
      -x

      -b
      *
      -d
      15090,15021,15020
    State:          Terminated
      Reason:       Completed
      Exit Code:    0
      Started:      Thu, 01 Oct 2020 15:53:19 +0000
      Finished:     Thu, 01 Oct 2020 15:53:19 +0000
    Ready:          True
    Restart Count:  0
    Limits:
      cpu:     2
      memory:  1Gi
    Requests:
      cpu:     10m
      memory:  10Mi
    Environment:
      DNS_AGENT:
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-grhjg (ro)
Containers:
  mautic:
    Container ID:   containerd://5f01d55adcc44180025627dcfb56dd9538a4b633728ea636ad7b7949827d6307
    Image:          mautic/mautic:v3
    Image ID:       docker.io/mautic/mautic@sha256:6b7d0fb781ddfc9f39361c6495196f9d7c6cf2fdbd6b96fa9e6085e17ed9e37a
    Port:           80/TCP
    Host Port:      0/TCP
    State:          Waiting
      Reason:       CrashLoopBackOff
    Last State:     Terminated
      Reason:       Error
      Exit Code:    1
      Started:      Fri, 02 Oct 2020 18:31:49 +0000
      Finished:     Fri, 02 Oct 2020 18:32:34 +0000
    Ready:          False
    Restart Count:  277
    Environment:
      MAUTIC_DB_HOST:          mautic-mysql
      MAUTIC_DB_USER:          mautic
      MAUTIC_DB_NAME:          mautic
      MAUTIC_DB_PASSWORD:      <set to the key 'MAUTIC_DB_PASSWORD' in secret 'mautic-mysql-secrets'>  Optional: false
      MYSQL_PORT_3306_TCP:     3306
      MAUTIC_RUN_CRON_JOBS:    true
      PHP_INI_DATE_TIMEZONE:   America/Sao_Paulo
      PHP_MEMORY_LIMIT:        1024M
      PHP_MAX_UPLOAD:          100M
      PHP_MAX_EXECUTION_TIME:  600
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-grhjg (ro)
      /var/www/html from mautic-volume (rw)
  istio-proxy:
    Container ID:  containerd://061f9cec558e99f87d0c8089388151b51ac00a8d011981d3d0bb42152e7fbf11
    Image:         docker.io/istio/proxyv2:1.7.0
    Image ID:      docker.io/istio/proxyv2@sha256:c1f1b45a4162509f86aa82d0148aef55824454e7204f27f23dddc9d7f4ae7cd1
    Port:          15090/TCP
    Host Port:     0/TCP
    Args:
      proxy
      sidecar
      --domain
      $(POD_NAMESPACE).svc.cluster.local
      --serviceCluster
      mautic.$(POD_NAMESPACE)
      --proxyLogLevel=warning
      --proxyComponentLogLevel=misc:error
      --trust-domain=cluster.local
      --concurrency
      2
    State:          Waiting
      Reason:       CrashLoopBackOff
    Last State:     Terminated
      Reason:       Error
      Exit Code:    255
      Started:      Fri, 02 Oct 2020 18:31:21 +0000
      Finished:     Fri, 02 Oct 2020 18:31:21 +0000
    Ready:          False
    Restart Count:  317
    Limits:
      cpu:     2
      memory:  1Gi
    Requests:
      cpu:      100m
      memory:   128Mi
    Readiness:  http-get http://:15021/healthz/ready delay=1s timeout=1s period=2s #success=1 #failure=30
    Environment:
      JWT_POLICY:                    third-party-jwt
      PILOT_CERT_PROVIDER:           istiod
      CA_ADDR:                       istiod.istio-system.svc:15012
      POD_NAME:                      mautic-75665fbdcc-pj9rt (v1:metadata.name)
      POD_NAMESPACE:                 backup (v1:metadata.namespace)
      INSTANCE_IP:                    (v1:status.podIP)
      SERVICE_ACCOUNT:                (v1:spec.serviceAccountName)
      HOST_IP:                        (v1:status.hostIP)
      CANONICAL_SERVICE:              (v1:metadata.labels['service.istio.io/canonical-name'])
      CANONICAL_REVISION:             (v1:metadata.labels['service.istio.io/canonical-revision'])
      PROXY_CONFIG:                  {"proxyMetadata":{"DNS_AGENT":""}}

      ISTIO_META_POD_PORTS:          [
                                         {"containerPort":80,"protocol":"TCP"}
                                         ,{"name":"http-envoy-prom","containerPort":15090,"protocol":"TCP"}
                                     ]
      ISTIO_META_APP_CONTAINERS:     mautic,istio-proxy
      ISTIO_META_CLUSTER_ID:         Kubernetes
      ISTIO_META_INTERCEPTION_MODE:  REDIRECT
      ISTIO_METAJSON_ANNOTATIONS:    {"backup.velero.io/backup-volumes":"mautic-volume","prometheus.io/path":"/stats/prometheus","prometheus.io/port":"15020","prometheus.io/scrape":"true","sidecar.istio.io/status":"{\"version\":\"8e6e902b765af607513b28d284940ee1421e9a0d07698741693b2663c7161c11\",\"initContainers\":[\"istio-init\"],\"containers\":[\"istio-proxy\"],\"volumes\":[\"istio-envoy\",\"istio-data\",\"istio-podinfo\",\"istio-token\",\"istiod-ca-cert\"],\"imagePullSecrets\":null}"}

      ISTIO_META_WORKLOAD_NAME:      mautic-75665fbdcc-pj9rt
      ISTIO_META_OWNER:              kubernetes://apis/v1/namespaces/backup/pods/mautic-75665fbdcc-pj9rt
      ISTIO_META_MESH_ID:            cluster.local
      DNS_AGENT:
      ISTIO_KUBE_APP_PROBERS:        {}
      ISTIO_PROMETHEUS_ANNOTATIONS:  {"scrape":"true","path":"/stats/prometheus","port":"15020"}
    Mounts:
      /etc/istio/pod from istio-podinfo (rw)
      /etc/istio/proxy from istio-envoy (rw)
      /var/lib/istio/data from istio-data (rw)
      /var/run/secrets/istio from istiod-ca-cert (rw)
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-grhjg (ro)
      /var/run/secrets/tokens from istio-token (rw)
Conditions:
  Type              Status
  Initialized       True
  Ready             False
  ContainersReady   False
  PodScheduled      True
Volumes:
  mautic-volume:
    Type:       PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
    ClaimName:  mautic-volume-claim
    ReadOnly:   false
  default-token-grhjg:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  default-token-grhjg
    Optional:    false
  istio-envoy:
    Type:       EmptyDir (a temporary directory that shares a pod's lifetime)
    Medium:     Memory
    SizeLimit:  <unset>
  istio-data:
    Type:       EmptyDir (a temporary directory that shares a pod's lifetime)
    Medium:
    SizeLimit:  <unset>
  istio-podinfo:
    Type:  DownwardAPI (a volume populated by information about the pod)
    Items:
      metadata.labels -> labels
      metadata.annotations -> annotations
  istio-token:
    Type:                    Projected (a volume that contains injected data from multiple sources)
    TokenExpirationSeconds:  43200
  istiod-ca-cert:
    Type:        ConfigMap (a volume populated by a ConfigMap)
    Name:        istio-ca-root-cert
    Optional:    false
QoS Class:       Burstable
Node-Selectors:  <none>
Tolerations:     node.kubernetes.io/not-ready:NoExecute for 300s
                 node.kubernetes.io/unreachable:NoExecute for 300s

kubectl get mutatingwebhookconfigurations.admissionregistration.k8s.io
NAME                               WEBHOOKS   AGE
cert-manager-webhook     1                     71d
istio-sidecar-injector          1                     13d

About me doing istioctl kube-inject I don't think so. The problem occurs after the velero restore, I don't run any commands after this. Maybe velero creates an injected ns and the injects again... How can a double injection be indentified?

I am not familiar with velero restore but I bet this is what happens - you start a pod, it gets injected. Then valero runs essentially kubectl get pods -oyaml | kubectl apply -f. At this point, it is injected again

Just to confirm, before velero restore there are no pods. The namespace was delete. You mean velero causes the first and second injection?
I think not backing up and restoring the pods, but only the deployment, could solve this. But I can't do it since the volumes backup are triggered by taking the pods backup.

Yeah I mean there is some time between get pods and apply - but valero is storing the injected state, so it gets injected twice.

We also encountered this, fortunately for us we could exclude the pod resources and this worked.

Facing similar issue.  Ensure pod does not have prometheus.io/port=15020 label, or that injection is not happening multiple times
Error: invalid prometheus scrape configuration: application port is the same as agent port, which may lead to a recursive loop. Ensure pod does not have prometheus.io/port=15020 label, or that injection is not happening multiple times

To fix this we would need https://github.com/istio/istio/issues/25931

I'm also encountered this issue with very similar logs above, so waiting for the fix ready.

@bali2016 this is not strictly a "bug" necessarily. Its 100% an invalid configuration on your side, you are double injecting the pod. https://github.com/istio/istio/issues/25931 will just make this something that is legal to do, although its still a sign you have misconfigured something

The logs shows 2020-10-15T13:16:21.532584Z	info	Prometheus scraping configuration: {true /stats/prometheus 15020} Error: invalid prometheus scrape configuration: application port is the same as agent port, which may lead to a recursive loop. Ensure pod does not have prometheus.io/port=15020 label, or that injection is not happening multiple times
So does it mean the Prometheus should not use 15020 port?

It means one of:

You annotated your pod with prometheus.io/port: 15020 (seems unlikely)
Your pod went through auto injection twice

@bali2016 this is not strictly a "bug" necessarily. Its 100% an invalid configuration on your side, you are double injecting the pod. #25931 will just make this something that is legal to do, although its still a sign you have misconfigured something

You are right about double injecting the pod. I deleted my deployment and disabled auto injection and then enabled it again. I did kubectl apply -f deplyment.yaml. That resolved the issue for me.

Running into this as well using Velero for pod backup and restores. We cannot exclude the pods from the restore because they have volumes that need to be restored.
Although restoring with double injection (from the istio webhook and Velero) is a misconfiguration that #25931 would allow, Velero does not currently have functionality to exclude the istio injected resources in its backups. I believe that allowing injection idempotency and printing a warning message is still a better behavior than failing outright.

Maintainer on Velero chiming in here!
From Velero's point of view, we restore most annotations as-is, since we don't know exactly what effect removing them will have. The ones we remove are done very purposefully, and mostly have to do with PV/PVC binding.
However, that decision definitely has side effects in cases like this, where the controls are designed under the (reasonable) assumption that they're the only one modifying the objects.
From our side, we could have a RestoreItemAction plugin for pods that could remove that annotation, though it does get unwieldy to maintain all those special cases. Also, it wouldn't solve for anyone doing the equivalent of what Velero does manually (kubectl get the YAML/JSON on backup, then kubectl apply it on restore, in very basic terms) with Istio.

@nrb are you referring to the prometheus.io annotation? I think that is just a small symptom of this. The real root issue is when a Pod is created, istio will rewrite the pod spec, add annotations, add containers, tweak settings, all sorts of things. This process is not idempotent.
From the k8s docs:

Mutating webhooks must be idempotent, able to successfully process an object they have already admitted and potentially modified. This is true for all mutating admission webhooks, since any change they can make in an object could already exist in the user-provided object, but it is essential for webhooks that opt into reinvocation.
https://kubernetes.io/docs/reference/access-authn-authz/extensible-admission-controllers/#idempotence

So Istio violates this, because of the assumption that webhook will be invoked exactly one time due to reinvocationPolicy=Never ("the webhook must not be called more than once in a single admission evaluation"). This assumption of course fails in the velero (or kubectl get | kubectl apply) case.
https://github.com/istio/istio/issues/25931 would solve all of this


[pdngen-issue] - FP_PDN_HSPACING & FP_PDN_VSPACING value has no impact on power strip mesh generation

Description
I am trying to control the space between the power strip using FP_PDN_HSPACING & FP_PDN_VSPACING variables with 20 micron. But I don't see any impact on power-strip spacing at it's looks be fixed at 10 micron.  I tried different values but see no impact.

Environment
python3 ./env.py issue-survey
Kernel: Linux v5.15.0-46-generic
Distribution: ubuntu 20.04
Python: v3.8.10 (OK)
Container Engine: docker v20.10.17 (OK)
OpenLane Git Version: b6bacc9d1ab469917fda7ceea61ea3a18984b818
pip: INSTALLED
python-venv: INSTALLED
---
PDK Version Verification Status: OK
---
Git Log (Last 3 Commits)

b6bacc9 2022-08-24T21:21:29+02:00 Build Script Fixes (#1283) - Mohamed Gaber -  (HEAD -> master)
f0f6055 2022-08-24T19:36:18+02:00 Remove `-echo` flags from `read_sdc` (#1284) - Anton Blanchard -  ()
9452129 2022-08-20T13:41:59+02:00 Fix 'run_yosys' invocation during -synth_explore (#1278) - meta -  ()
---
Git Remotes

origin	https://github.com/efabless/OpenLane.git (fetch)
origin	https://github.com/efabless/OpenLane.git (push)

Reproduction Material
Test case created by breaking at pdn.tcl
pdngen_strip_spacing_issue.tar.gz
pdn_cfg file to generate only one set of power strip:
pdn_cfg.tcl.txt
Expected behavior
FP_PDN_HSPACING & FP_PDN_VSPACING value need to control the power strip space.
Logs

Interestingly in Latest openlane script I don't see these variable are used in pdn_gen.tcl ?
But Older Openlane (MPW-5 time), I see this variable used for offset generation
./tcl_commands/floorplan.tcl:		catch {set ::env(FP_PDN_HOFFSET) [expr $::env(FP_PDN_HOFFSET)+$::env(FP_PDN_HWIDTH)+$::env(FP_PDN_HSPACING)]}

I see the PDNGen has support for spacing control in file: src/pdn/src/pdn.tcl
sta::define_cmd_args "add_pdn_stripe" {[-grid grid_name]
-layer layer_name
[-width width_value]
[-followpins]
[-extend_to_core_ring]
[-pitch pitch_value]
*[-spacing spacing_value] *
[-offset offset_value]
[-starts_width (POWER|GROUND)]
[-extend_to_boundary]
[-snap_to_grid]
[-number_of_straps count]
[-nets list_of_nets]
Issue in Openlane/script/openroad/pdn_cfg.tcl file,  I have changed from
add_pdn_stripe
-grid stdcell_grid
-layer $::env(FP_PDN_LOWER_LAYER)
-width $::env(FP_PDN_VWIDTH)
-pitch $::env(FP_PDN_VPITCH)
-offset $::env(FP_PDN_VOFFSET)
-nets "$::env(VDD_NET) $::env(GND_NET)"
-starts_with POWER -extend_to_core_ring
add_pdn_stripe \
    -grid stdcell_grid \
    -layer $::env(FP_PDN_UPPER_LAYER) \
    -width $::env(FP_PDN_HWIDTH) \
    -pitch $::env(FP_PDN_HPITCH) \
    -offset $::env(FP_PDN_HOFFSET) \
-nets "$::env(VDD_NET) $::env(GND_NET)" \
    -starts_with POWER -extend_to_core_ring

to
add_pdn_stripe
-grid stdcell_grid
-layer $::env(FP_PDN_LOWER_LAYER)
-width $::env(FP_PDN_VWIDTH)
-pitch $::env(FP_PDN_VPITCH)
-offset $::env(FP_PDN_VOFFSET)
-spacing $::env(FP_PDN_VSPACING)
-nets "$::env(VDD_NET) $::env(GND_NET)"
-starts_with POWER -extend_to_core_ring
add_pdn_stripe \
    -grid stdcell_grid \
    -layer $::env(FP_PDN_UPPER_LAYER) \
    -width $::env(FP_PDN_HWIDTH) \
    -pitch $::env(FP_PDN_HPITCH) \
    -offset $::env(FP_PDN_HOFFSET) \
    -spacing $::env(FP_PDN_HSPACING) \
-nets "$::env(VDD_NET) $::env(GND_NET)" \
    -starts_with POWER -extend_to_core_ring

Now I see the space between strap increase to 20

I have created PR at : https://github.com/The-OpenROAD-Project/OpenLane/pull/1289


feat: XSB SecondScreen cleanup

:tada: This PR is included in version 1.5.0-dev.12 :tada:
The release is available on GitHub release
Your semantic-release bot :package::rocket:

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


Unable to Find Packages

I'm getting a ton of errors (85 in total and 166 warnings) in this code. There are clearly some dependencies and prerequisites that are not listed above.

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

ID: 059ca2fe-51fb-9226-6669-c4001c8bc8b8
Version Independent ID: 982fc74f-5fc1-55a0-ba94-711b07430364
Content: Run the Surveys application
Content Source: docs/multitenant-identity/run-the-app.md
Service: guidance
GitHub Login: @MikeWasson
Microsoft Alias: pnp

Closing this.  If it is still an issue, please reopen.


Revert "Use stat module instead of shell"

Reverts ceph/ceph-ansible#367
Shoot. Real sorry about this, but I think it's best if we revert this for now. We were using a custom Ansible and it was working fine but upon testing with an old version of Ansible it appears one of the checks isn't working properly.

Indeed services don't seem to get restarted anymore. The handler doesn't work.


add flags in SVG

Here are the flags in SVG. I've only added the flags for the countries that you have in the flag folder (currently 197).

Sorry for not responding to this before.
I do want this, but you need to fix backward compatibility before I can merge it.

No problem, I'll try to do this soon, I'm a bit busy right now.


Update readme and composer description

Codecov Report

Merging #8 (e36dcb2) into main (5312b57) will not change coverage.
The diff coverage is n/a.

@@             Coverage Diff             @@
##                main        #8   +/-   ##
===========================================
  Coverage     100.00%   100.00%
  Complexity         4         4
===========================================
  Files              4         4
  Lines              9         9
===========================================
  Hits               9         9

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 5312b57...e36dcb2. Read the comment docs.


Revert removal of /.well-known/pay endpoint

/.well-known/pay was erroneously removed in #290. It should be reinstated with the new base url, to accommodate being changed from a wallet address.

https://github.com/interledger/open-payments/blob/dd193c7ea6b62fde977a5ea336771cb7afb09dde/openapi/resource-server.yaml#L40-L44


1.21

Update mod to 1.21? Thanks in advance!

port to 1.21 has been uploaded to modrinth and curseforge. They may still be in moderation as of writing this, but should be through soon.


Revert "Update dependency fomantic-ui-css to v2.9.2"

Reverts vespa-engine/cord-19#162

failed on:
./node_modules/fomantic-ui-css/semantic.css
Error: Unknown node type in node creation
    at Array.map (<anonymous>)


Cell as router-link

Hi, I am building an SPA, and I want my id field of Users table to be a <router-link to="#"> component which links to that specific user's profile. However, I can't find out an option to render a single cell as needed.
Is there a method to make that possible? Thanks for your attention.

@itsjef As I don't use vue-router myself, I'm not quite sure how it'll work. But I guess, you might be able to use __slot option to do that. You can check out the tutorial here.

Thanks for your answer, I have a clue to implement now.
My problem aside, I tried following the tutorial on replacing __component with __slot but it doesn't work, the Actions column is blank now. Can you take a look?
Screenshot:

My code:
<template>

      <vuetable-pagination-info ref="paginationInfoTop"
      ></vuetable-pagination-info>
      <vuetable-pagination ref="paginationTop"
        @vuetable-pagination:change-page="onChangePage"
      ></vuetable-pagination>

    <vuetable ref="vuetable"
      api-url="http://vuetable.ratiw.net/api/users"
      :fields="fields"
      pagination-path=""
      :per-page="20"
      :sort-order="sortOrder"
      @vuetable:pagination-data="onPaginationData"
    >
      <template slot="actions" scope="props">   // <----

          <button class="ui basic button"
            @click="onAction('view-item', props.rowData, props.rowIndex)">

          </button>
          <button class="ui basic button"
            @click="onAction('edit-item', props.rowData, props.rowIndex)">

          </button>
          <button class="ui basic button"
            @click="onAction('delete-item', props.rowData, props.rowIndex)">

          </button>

      </template>
    </vuetable>

      <vuetable-pagination-info ref="paginationInfo"
      ></vuetable-pagination-info>
      <vuetable-pagination ref="pagination"
        @vuetable-pagination:change-page="onChangePage"
      ></vuetable-pagination>

</template>

@itsjef It looks like the number of  in body do not match those in the . You need to check to see if there is any error in the browser console.

That's the first thing I did, however there was no error warning though. :\

Is it possible that you forget to remove // <---- ? It's still showing in the code above.

@itsjef I've created a gist here from the tutorial lesson 11 using __slot instead of __component. It has been tested and work as expected, maybe you can check it out and see what's different.

That is not the cause, either. I removed the mark but the problem persists.

@ratiw Heck, it is even weirder now, all I did was clone your tutorial repo, checkout tag/lession-11 and overwrite the MyVuetable.vue file with your provided gist, and the problem still persists, while browser control shows no debug info, on booth Chrome and Firefox.

That's strange. I did exactly that and it works. That's why I posted the gist.

Yes, I understand. Therefore I thought there must be something with my machine, so I repeated the process on another's but still no difference. What a mysterious case...
I'm literally scratching my head now.

Anyhow, despite the mysteriously inoperative __slot feature on my machine, I finally managed to achieve my main objective described above using __component :+1: Thank you so much for your support.

Hmm, I'll try to do the clean install and test it again tonight.

@itsjef I think I've found the problem. When I tried a clean install of the tutorial, it does have the problem as you mentioned.
The only thing out of place is the version of Vue 2.1 in the package.json. When I changed to "vue": "^2.2.0",, run yarn upgrade and yarn run dev again. It is now work as expected.
So, update Vue to ^2.2.0 does solve the problem. Sorry for the trouble.

Congratulations! The problem is gone now :smile: Thank you very much!


Update UG with screenshots

Closes #171

Codecov Report
Base: 67.41% // Head: 67.41% // No change to project coverage :thumbsup:

Coverage data is based on head (3b66c90) compared to base (01bab8c).
Patch has no changes to coverable lines.

Additional details and impacted files
@@            Coverage Diff            @@
##             master     #204   +/-   ##
=========================================
  Coverage     67.41%   67.41%
  Complexity      610      610
=========================================
  Files           106      106
  Lines          2013     2013
  Branches        227      227
=========================================
  Hits           1357     1357
  Misses          596      596
  Partials         60       60

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

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

LGTM! Good job reordering the user guide and adding the respective screenshots.


⚠ AsianCinema has degraded performance

In f797e90, AsianCinema ($ACM) experienced degraded performance:

HTTP code: 200
Response time: 1144 ms

Resolved: AsianCinema performance has improved in 41fcdc5.


Update reload-images script to use submariner-gateway

Signed-Off-by: Sridhar Gaddam<EMAIL_ADDRESS>

@sridhargaddam  I noticed the the OVN job is failing, any idea why?

@sridhargaddam I noticed that the OVN job is failing, any idea why?

There are two datapath failures, it needs some investigation. @mangelajo is it any known issue?
Summarizing 2 Failures:

[Fail] [dataplane] Basic TCP connectivity tests across clusters without discovery when a pod connects via TCP to a remote service when the pod is on a gateway and the remote service is on a gateway [It] should have sent the expected data from the pod to the other pod
/go/src/github.com/submariner-io/submariner/vendor/github.com/submariner-io/shipyard/test/e2e/framework/network_pods.go:174

[Fail] [dataplane] Basic TCP connectivity tests across clusters without discovery when a pod connects via TCP to a remote service when the pod is on a gateway and the remote service is not on a gateway [It] should have sent the expected data from the pod to the other pod
/go/src/github.com/submariner-io/submariner/vendor/github.com/submariner-io/shipyard/test/e2e/framework/network_pods.go:174


Packaging

Have packaged this as a library.
I've implemented the FSMParams class in the library in the archetype folder but haven't done the others (leaving them in the scripts).
I've written tests for the utils and the FSMParams both as unit and a bigger integration test.
Note that the scripts were broken for the latest version of axelrod (because of the enum actions class). I've fixed them all except for the lookerup.

Changes Unknown when pulling c465e41a7c7dd69c911e284e46293d489bba9097 on packaging into ** on master**.


plugins or integration with workflow tools

plugins or integration with workflow tools like Jupyter notebooks, R, GitHub Zeppelin Notebook, and tools @ CERN that support + reproducibility + citation/credit like Asclepias/Reana.

I've got binder integration set up in CaltechDATA, but it's a manual operation to add the badge to the record. Some sort of integrated  validation workflow would be cool https://data.caltech.edu/records/1250
Once the the data and file model is set, I'd be happy to update https://github.com/jupyter/repo2docker/blob/master/repo2docker/contentproviders/zenodo.py to invenioRDM


Global ID returned in Query vs. ID used in Mutation

It looks like the object ID returned in query is converted to GlobalId (by the graphql-relay since the globalIdField is used).
But in the mutation, the ID sent from the client is directly passed to the Mongo so some casting error will be reported. https://github.com/RisingStack/graffiti-mongoose/blob/master/src/schema/schema.js#L120
Will it be fixed in the framework, or should I handle it in the hooks?
Thanks

Hi @vangavroche!
Did you try it? Mutations should handle both global (id) and mongoose (_id) ids.

In the example https://github.com/RisingStack/graffiti-mongoose/blob/master/example/user.js where User has friends that are also "User"s
After I created two users (without any friends), the query responses of "users {id, name}" are like
{
  "data": {
    "users": [
      {
        "id": "VXNlcjo1NjY1YWZkMGU1ZWQwMTAzMWU5ODc3MjQ=",
        "name": "Kaka"
      },
      {
        "id": "VXNlcjo1NjY2NWI0M2U1ZWQwMTAzMWU5ODc3MjY=",
        "name": "Messi"
      }
    ]
  }
}

The generated mutation to add user has input that contains
name: String
age: Float
createdAt: Date
friends: [ID]
clientMutationId: String!

When I try to add a user using mutation
mutation M {
  addUser(input: {name:"Ronaldo", age: 12, friends:["VXNlcjo1NjY2NWI0M2U1ZWQwMTAzMWU5ODc3MjY="], clientMutationId:"1234"}) {
    changedUserEdge {
      node {
        name
      }
    }
  }
}

It won't work, since the ID is not supposed a valid one.

Do you mean when I query the ID to set such association ("friends" in this case), I should explicitly get the _id to use?
Using query like this:
query U {
  users {
    _id, name
  }
}

BTW, is there any special reason why the singular object reference is not supported in the mutation field generation?
https://github.com/RisingStack/graffiti-mongoose/blob/master/src/schema/schema.js#L124
In the case like
//
const TodoSchema = new mongoose.Schema({
  text: {
    type: String
  },
  createdAt: {
    type: Date,
    default: Date.now()
  },
  completed: {
    type: Boolean,
    default: false
  },
  owner: {
    type: mongoose.Schema.Types.ObjectId,
    ref: 'User'
  }
});

owner field is not used as the mutation input.
To me it seems an easy problem to solve
else {
        // In this case it is assume that the field is a singular object reference like
        // {
        //    type: ObjectId,
        //    ref: "User"
        // }
        //
        inputFields[field.name] = {
          name: field.name,
          type: _graphql.GraphQLID
        };
      }

But I wonder if there's anything I'm missing.

@vangavroche Okay, the add mutation error is a real bug, see #71 for a quick fix.
I am looking into the object input now.

@vangavroche I've added the reference support too, although we might need more testing.

@tothandras  thanks.

@vangavroche Can you verify that it resolves your issues? :) I could have missed something. Please add a thumbs up to the PR, I will merge it then.

Yes, it works and solves the issue.

Released under v4.3.2.


Does not show in Output folder or anywhere

Hi, I'm using PDI Version <IP_ADDRESS>-196 and after adding the plugin to the plugin folder it just does not show up. Could you specify what PDI version it should work? Thanks

The plug-in should work with PDI 6-7 without any issues. Can you please try the latest version?


Footer not anchored at the bottom of the page in Safari

Description of the bug
A clear and concise description of what the bug is.
In Safari, the footer is not anchored at the bottom of the HydroShare submission form and prevents entry of metadata into some of the fields.
Steps to reproduce the bug:

Log into Data Submission portal
Navigate to any page
Scroll down on the page and notice that the footer  is shown in the middle of the page and on top of data entry fields on the data submission forms.

Expected behavior
A clear and concise description of what you expected to happen.
The footer should be anchored at the bottom of the page.
Additional information
Add any other context about the problem here such as screenshots, software versions, and browser information.

I can confirm it occurs on my Mac workstation with Safari.


Error inflating class com.github.piasy.biv.view.BigImageView

Caused by: android.view.InflateException: Binary XML file line #21: Binary XML file line #21: Error inflating class com.github.piasy.biv.view.BigImageView
at android.view.LayoutInflater.inflate(LayoutInflater.java:539)
at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
at android.view.LayoutInflater.inflate(LayoutInflater.java:374)

the package name is right!

It should be an OOM.

so   how  to solve this problem!兄弟

That's beyond the scope of this library, bro!
Although this library aim to avoid OOM when you displaying big images, but there are tons of places that would cause OOM. Sorry that I can't help out all of them :(

ok  ! I have to use another View to solve it ! thx!

Hope you well :)


first attempt at infographic [#176]

using img tag instead of svg loader because the latter is currently producing all sorts of weird errors:
 error  in ./src/assets/CCIDI_infographic_formatted.svg
Module parse failed: Unexpected token (24:93163)
File was processed with these loaders:
 * ./node_modules/vue-svg-loader/index.js
You may need an additional loader to handle the result of these loaders.
|               ...rest,
|             },

not really sure if we need to use svg loader if we're not planning on any dynamic changes to the content...
┆Issue is synchronized with this Trello card by Unito
close #176

(got approval from Brock in meeting)


Add email, password, token and credential properties.

Fix #251.

@tjmonsi @mbleigh PTAL.

Any progress?


Adds compression threshold to column options serialization

It is omitted from serialization because it does not really affect how existing data is handled. Changing it does not break compatibility. I'd argue it should not even be in the metadata struct, but just in ColumnOptions. @cheme what do you think?

It is omitted from serialization because it does not really affect how existing data is handled. Changing it does not break compatibility. I'd argue it should not even be in the metadata struct, but just in ColumnOptions. @cheme what do you think?

Yes, I agree, should be modifiable when we instantiate the db.

Thank you for the review. My motivation for this change was to allow opening databases with non-default compression threshold.

I'd argue it should not even be in the metadata struct, but just in ColumnOptions.

Ok! So we might need to have a ColumnMetadata struct that woud keep the fixed metadata (i.e. everything in ColumnOptions but compression_threshold). Am I correct?

I suggest simply moving compression_threshold from ColumnOptions to Options as a HashMap<ColId, u32>.

Done in #103


Add code-cov hooks.

Current coverage is 92.04%

Branch #85 has no coverage reports uploaded yet.

No diff could be generated. No reports for master found.

Powered by Codecov. Updated on successful CI builds.


Fix assembly strong name issues

Remove references to Odachi.AspNetCore.Authentication.Basic, and move the corresponding code directly into the broker assembly, to avoid strong name / no strong name mix-up issues.

Also see https://github.com/Microsoft/RTVS-pr/pull/11

:+1:


check dependencies functionality not working on sensu handler extensions  (0.22.0)

I am unable of making use of the dependencies functionality for the flapjack extension handler
# cat check_procs_apache2.json
{
    "checks": {
        "check_apache_proc": {
            "command": "check-process.rb -p apache2",
            "interval": 60,
            "occurrences": 2,
            "subscribers": ["apachetwo"],
            "handlers": ["flapjack", "logstash", "irc", "riemann"]
        }
    }
}
root@sensu-server (sensu) in /etc/sensu/conf.d/check
# cat check_procs_crond.json
{
    "checks": {
        "check_crond_proc": {
            "command": "check-process.rb -p cron -C 1",
            "dependencies": ["check_apache_proc"],
            "interval": 60,
            "occurrences": 2,
            "subscribers": ["production"],
            "handlers": ["flapjack", "logstash", "irc"]
        }
    }
}

Both checks plugins are using the sensu-plugin

EDDIT: The irc handler responds well to the dependencies functionnality. yet the flapjack extension handler does not.
Please help

From my understanding handler should be aware of dependencies and check them like this https://github.com/sensu-plugins/sensu-plugin/blob/master/lib/sensu-handler.rb#L172

SOrry for the false issue report.
Actually I discovered that dependencies are not working for extension handlers like: flapjack.rb extension handler! I am editing the title. So how can that handler use the : https://github.com/sensu-plugins/sensu-plugin/blob/master/lib/sensu-handler.rb#L172

OK. I modified the FlapJack Extension and implemented methods from sensu-plugin. Now flapjack extension handler is capable of using occurrences and dependencies.

@hanynowsky Would you mind sharing the changes you made to the flapjack extension? I may be running into a similar problem.

@dgoradia https://gist.github.com/hanynowsky/9c700af0913d96ee4c99

Thanks! @hanynowsky


Incorrect TimerContext

using(var context = Metrics.Metric.Timer("Commands", Metrics.Unit.Requests, Metrics.SamplingType.LongTerm)) { .... }
loop 10,000 times, the report is
[DESKTOP-V68UFFJ.Samples_QuickStart] Commands
Active Sessions = 0
Total Time = 5997782.00 ms
Count = 10000 Requests
Mean Value = 1661.11 Requests/s
1 Minute Rate = 2000.00 Requests/s
5 Minute Rate = 2000.00 Requests/s
15 Minute Rate = 2000.00 Requests/s
Count = 10000 Requests
Last = 1154.23 ms
Last User Value = RegisterUserCommand
Min = 64.00 ms
Min User Value = RegisterUserCommand
Max = 1153.45 ms
Max User Value = RegisterUserCommand
Mean = 603.46 ms
StdDev = 294.63 ms
Median = 583.18 ms
75% <= 833.86 ms
95% <= 1099.14 ms
98% <= 1125.37 ms
99% <= 1143.84 ms
99.9% <= 1153.44 ms
but i used Stopwatch, the total time is about 5 seconds.

the code:
var timer = _commandTimer.Value.NewContext(typeName);
task.ContinueWith(task => {
using (timer) { }
return task.Result;
});
It's not accurate to write this.


Idle Notifications Suggestions/Bug

Allow a config area so we can decide which activities we want to be alerted to. If I'm not making potions en masse, I don't care about being a bit inefficient with my mixing. Same can be said for things like only making a single inventory of things, or only a few at a time. This way people can turn modules on/off depending on what skills they're training at the time.

The agility shortcut between hardwood tree patches and the beach on Fossil Island procs the idle alert for some reason.

I don't seem to get system notifications when tabbed in (and yes I have the option for it checked). The sound, however, will still play.

Possible to make the sound alert not tied to the OS sounds?  Would prefer it be some sort of proc'd sound from inside Runelite (would make it easier to adjust the volume of it too).

Best practice for everyone either looking at issues or solving them is to split multiple stuff to multiple issues. Like, 4. is duplicate of another issue. 3. is probably your misconfiguration somewhere in system. 2. is due to Jagex reusing animations, I don't think we can do much about it.

I'll delete 2-4 then. And I'll not make multi-faceted tickets in the future, then.


Add my blog into showcase

The URL of my blog is:  louis-gabriel.io
Thanks for the great work !

Until now it was adding the blogs manually one by one. I've created a process to add your blog in the showcase. Can you follow it? I would appreciate 🙂
https://github.com/Kikobeats/uno-zen/blob/master/SHOWCASE.md#add-your-blog


Custom Plugin in Response Phase has sideeffect to if-match/etag handling

Is there an existing issue for this?

[X] I have searched the existing issues

Kong version ($ kong version)
3.7.1
Current Behavior
A custom plugin in response phase has sideeffect to if-match/etag handling.
A global configured plugin (enabled or not) leads to 412 responses if Requests with "If-Match) header are incoming
Expected Behavior
The if-match header should be ignored, with and without the configured plugin. Without everything works as intended
Steps To Reproduce

Create a Test Plugin for an empty kong with default config

`local TestPlugin = {
PRIORITY = 850,
VERSION = '0.0.1'
}
function TestPlugin:response(conf)
end
return TestPlugin
`
2. Create a global plugin configuration for this plugin
3. configure some service connected directly to host (no Kong upstream/LB functionality)
4. make a request with a "if-match" header to the service trough kong
5. the response is a 412
6. if the plugin is configured and deactivated the response is 412
7. if the plugin configuration is deleted everything works as intended
8. disabling proxy caching changes nothing
Anything else?
No response

In some it seems, that also a 503 is possible as response (caused by kong)

Hi @TGeb-EV ,
Could you provide more details about your custom plugin? thank you.
And I could not reproduce this, it looks like that Kong 3.7.1 code base works smoothly for my custom plugin.  I did following things:
=============================================================
My custom plugin:
haix@kong:~/workspace/371$ git status
On branch release/3.7.1
Your branch is up to date with 'origin/release/3.7.1'.
Changes not staged for commit:
(use "git add ..." to update what will be committed)
(use "git restore ..." to discard changes in working directory)
modified:   kong.conf.default
Untracked files:
(use "git add ..." to include in what will be committed)
kong/plugins/my-plugin/
no changes added to commit (use "git add" and/or "git commit -a")
diff --git a/kong.conf.default b/kong.conf.default
index fac253492..2aa817864 100644
--- a/kong.conf.default
+++ b/kong.conf.default
@@ -138,7 +138,7 @@
#
# Example: 0.25, this should account for 25% of all traces.

+plugins = bundled,my-plugin
#plugins = bundled               # Comma-separated list of plugins this node
# should load. By default, only plugins
# bundled in official distributions are
haix@kong:~/workspace/371$ ls -l kong/plugins/my-plugin/
total 8
-rw-rw-r-- 1 haix haix 578 Jul 29 17:17 handler.lua
-rw-rw-r-- 1 haix haix 209 Jul 29 17:17 schema.lua
haix@kong:~/workspace/371$ cat kong/plugins/my-plugin/handler.lua
local MyPluginHandler = {
PRIORITY = 1000,
VERSION = "0.0.1",
}
function MyPluginHandler:response(config)
-- Implement logic for the access phase here (http)
kong.response.set_header("X-MyPlugin", "response")
end
function MyPluginHandler:access(config)
-- Implement logic for the access phase here (http)
kong.log("MyPlugin: access")
end
-- function MyPluginHandler:header_filter(config)
-- Implement logic for the header_filter phase here (http)
--   kong.log("MyPlugin header_filter: " .. kong.response.get_header("Server"))
-- end
return MyPluginHandler
haix@kong:~/workspace/371$ cat kong/plugins/my-plugin/schema.lua
local PLUGIN_NAME = "my-plugin"
local schema = {
name = PLUGIN_NAME,
fields = {
{ config = {
type = "record",
fields = {
},
},
},
},
}
return schema
==========================================
Start upstream web server listening on port 8888
build nginx from source and install:
auto/configure --with-http_dav_module --prefix="/home/haix/oss/ngx/build/test"
make
make install
cd build/test
./sbin/nginx -c ./conf/nginx.conf
check and verify ETag:
haix@kong:~$ curl -i localhost:8888
HTTP/1.1 200 OK
Server: nginx/1.27.0
Date: Mon, 29 Jul 2024 08:47:54 GMT
Content-Type: text/html
Content-Length: 615
Last-Modified: Mon, 29 Jul 2024 08:44:30 GMT
Connection: keep-alive
ETag: "66a7566e-267"
Accept-Ranges: bytes

Welcome to nginx!

Welcome to nginx!
If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.
For online documentation and support please refer to
nginx.org.
Commercial support is available at
nginx.com.
Thank you for using nginx.

haix@kong:~$
haix@kong:~$ curl --header 'If-Match: "66a7566e-267"' -i localhost:8888
HTTP/1.1 200 OK
Server: nginx/1.27.0
Date: Mon, 29 Jul 2024 08:51:54 GMT
Content-Type: text/html
Content-Length: 615
Last-Modified: Mon, 29 Jul 2024 08:44:30 GMT
Connection: keep-alive
ETag: "66a7566e-267"
Accept-Ranges: bytes

Welcome to nginx!

Welcome to nginx!
If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.
For online documentation and support please refer to
nginx.org.
Commercial support is available at
nginx.com.
Thank you for using nginx.

haix@kong:~$ curl --header 'If-None-Match: "66a7566e-267"' -i localhost:8888
HTTP/1.1 304 Not Modified
Server: nginx/1.27.0
Date: Mon, 29 Jul 2024 08:52:13 GMT
Last-Modified: Mon, 29 Jul 2024 08:44:30 GMT
Connection: keep-alive
ETag: "66a7566e-267"
haix@kong:~$
==========================================
start kong with my custom plugin:
(kong-dev) haix@kong:~/workspace/371$ kong version
3.7.1
kong start -c ./kong.conf.default
curl -s localhost:8001 |  jq '.plugins.available_on_server."my-plugin"'
curl -i -s -X POST http://localhost:8001/services
--data name=example_service
--data url='http://localhost:8888'
curl -is -X POST http://localhost:8001/services/example_service/plugins
--data 'name=my-plugin'
curl -i -X POST http://localhost:8001/services/example_service/routes
--data 'paths[]=/mock'
--data name=example_route
========================================
Verify  "If-Match" header request with Kong
(kong-dev) haix@kong:~/workspace/371$ curl --header 'If-Match: "66a7566e-267"' -i http://localhost:8000/mock
HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
Server: nginx/1.27.0
Date: Mon, 29 Jul 2024 09:38:04 GMT
Last-Modified: Mon, 29 Jul 2024 08:44:30 GMT
ETag: "66a7566e-267"
Accept-Ranges: bytes
Content-Length: 615
X-MyPlugin: response
X-Kong-Upstream-Latency: 0
X-Kong-Proxy-Latency: 1
Via: kong/3.7.1
X-Kong-Request-Id: bc9e504b7785af61a9bf456b8c7cfd5e

Welcome to nginx!

Welcome to nginx!
If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.
For online documentation and support please refer to
nginx.org.
Commercial support is available at
nginx.com.
Thank you for using nginx.

(kong-dev) haix@kong:~/workspace/371$ curl --header 'If-None-Match: "66a7566e-267"' -i http://localhost:8000/mock
HTTP/1.1 304 Not Modified
Connection: keep-alive
Server: nginx/1.27.0
Date: Mon, 29 Jul 2024 09:38:14 GMT
ETag: "66a7566e-267"
Last-Modified: Mon, 29 Jul 2024 08:44:30 GMT
X-MyPlugin: response
X-Kong-Upstream-Latency: 1
X-Kong-Proxy-Latency: 2
Via: kong/3.7.1
X-Kong-Request-Id: 15b7476e7978010c2f210616bb1fc42c
(kong-dev) haix@kong:~/workspace/371$

This case ist the case if you only use etag for simple caching. There is another use-case to use this also for optimistic locking. You want to update a resource by a put with is given etag (if-macth content), and if the etag matches you will get the updated resource with a new etag. so your test service should return a different etag as the put request., That does not work in my setup (similar to yours, but with a express service to exclude nginx caching behavior interferences)

Hi @TGeb-EV ,
Thanks for more information.
And still I could not reproduce it with PUT to update the resource, what I did as following:
1> Update the resource with a new file via PUT method
(kong-dev) haix@kong:~/workspace/371$ curl -X PUT -T "/home/haix/workspace/371/index.html" --header 'If-Match: "66a7566e-267"' -i http://localhost:8000/mock/index.html
HTTP/1.1 204 No Content
Connection: keep-alive
Server: nginx/1.27.0
Date: Tue, 30 Jul 2024 02:12:33 GMT
X-MyPlugin: response
X-Kong-Upstream-Latency: 2
X-Kong-Proxy-Latency: 2
Via: kong/3.7.1
X-Kong-Request-Id:<PHONE_NUMBER>06e05138184b3ca242e64b
2> Check the ETag value for the updated resource
(kong-dev) haix@kong:~/workspace/371$ curl  -i http://localhost:8000/mock
HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
Date: Tue, 30 Jul 2024 02:13:27 GMT
Last-Modified: Tue, 30 Jul 2024 02:12:33 GMT
ETag: "66a84c11-101"
Accept-Ranges: bytes
Server: nginx/1.27.0
Content-Length: 257
X-MyPlugin: response
X-Kong-Upstream-Latency: 1
X-Kong-Proxy-Latency: 0
Via: kong/3.7.1
X-Kong-Request-Id: bdbd244a5133b45e52959e2488d38643
<!DOCTYPE html>

<title>Welcome to nginx!</title>

**
Hello World!
**

(kong-dev) haix@kong:~/workspace/371$
3> Get the updated resource with header "If-Match"
(kong-dev) haix@kong:~/workspace/371$ curl --header 'If-Match: "66a84c11-101"' -i http://localhost:8000/mock
HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
Date: Tue, 30 Jul 2024 02:14:13 GMT
Last-Modified: Tue, 30 Jul 2024 02:12:33 GMT
ETag: "66a84c11-101"
Accept-Ranges: bytes
Server: nginx/1.27.0
Content-Length: 257
X-MyPlugin: response
X-Kong-Upstream-Latency: 0
X-Kong-Proxy-Latency: 0
Via: kong/3.7.1
X-Kong-Request-Id: 48e4185fcbc56a30b88f9b352bc57876
<!DOCTYPE html>

<title>Welcome to nginx!</title>

Hello World!

(kong-dev) haix@kong:~/workspace/371$
4> Get the updated resource with header "If-None-Match"
(kong-dev) haix@kong:~/workspace/371$ curl --header 'If-None-Match: "66a84c11-101"' -i http://localhost:8000/mock
HTTP/1.1 304 Not Modified
Connection: keep-alive
Date: Tue, 30 Jul 2024 02:14:51 GMT
Last-Modified: Tue, 30 Jul 2024 02:12:33 GMT
ETag: "66a84c11-101"
Server: nginx/1.27.0
X-MyPlugin: response
X-Kong-Upstream-Latency: 1
X-Kong-Proxy-Latency: 1
Via: kong/3.7.1
X-Kong-Request-Id: 8a1ba373b1265a0bf912cb7c177fd348
(kong-dev) haix@kong:~/workspace/371$

Below you see the behavior. Without a defined Plugin everything works fine. This maybe unusual but should HTTP Standard conform.

Per my local setup, the behavior of Kong and upstream service do really conform to HTTP standards.
According to following text from rfc9110, it looks like that either "2xx" or "412" is permitted by the stardard.
"An origin server that evaluates an If-Match condition MUST NOT perform the requested method if the condition evaluates to false. Instead, the origin server MAY indicate that the conditional request failed by responding with a 412 (Precondition Failed) status code. Alternatively, if the request is a state-changing operation that appears to have already been applied to the selected representation, the origin server MAY respond with a 2xx (Successful) status code (i.e., the change requested by the user agent has already succeeded, but the user agent might not be aware of it, perhaps because the prior response was lost or an equivalent change was made by some other user agent).
Allowing an origin server to send a success response when a change request appears to have already been applied is more efficient for many authoring use cases, but comes with some risk if multiple user agents are making change requests that are very similar but not cooperative. For example, multiple user agents writing to a common resource as a semaphore (e.g., a nonatomic increment) are likely to collide and potentially lose important state transitions. For those kinds of resources, an origin server is better off being stringent in sending 412 for every failed precondition on an unsafe method. In other cases, excluding the ETag field from a success response might encourage the user agent to perform a GET as its next request to eliminate confusion about the resource's current state."
https://www.rfc-editor.org/rfc/rfc9110.html#name-if-match
https://www.rfc-editor.org/rfc/rfc9110.html#evaluation
https://www.rfc-editor.org/rfc/rfc9111.html#name-sending-a-validation-reques

Did you tried my request flow? The behavior is different with or without plugin. Both are kind of standard conform, but this is not consistent. For me this is a bug. The additional GET request in the rfc is a recommendation not a MUST. In our usecase the additional GET request makes no sense. I programmed our needed plugin now in another phase and it works.

@xianghai2 would you take a look at it again?

back to this.
Hi @TGeb-EV, which phase/function was your plugin implemented for? for me, it looks like that my plugin of the access phase or reponse funtion has no such issue. thanks.

Kong Docker Image Build files:
kong-docker-with-plugin.tar.gz
Custom Service for testing, called testservice in compose:
testservice-.dockerfile.tar.gz
Docker compose with configured custom Docker Image and Custom Plugin
compose.tar.gz
Service Configuration:

Route Configuration:

Plugin configuration:

Curl to show, that Kong is responding with 412 instead of 200:
curl -vvvv -H "If-Match: V113" "http://localhost:8000/hello"
Curl output you should see:

Trying <IP_ADDRESS>:8000...
Connected to localhost (<IP_ADDRESS>) port 8000 (#0)

GET /hello HTTP/1.1
Host: localhost:8000
User-Agent: curl/7.81.0
Accept: /
If-Match: V113

Mark bundle as not supporting multiuse
< HTTP/1.1 412 Precondition Failed
< Date: Wed, 14 Aug 2024 12:04:12 GMT
< Content-Type: application/json; charset=utf-8
< Connection: keep-alive
< Content-Length: 88
< X-Kong-Upstream-Latency: 1
< X-Kong-Proxy-Latency: 1
< Via: kong/3.7.1
< X-Kong-Request-Id: a4c2917083168d438ed04d17120b6864
<
{
"message":"Precondition failed",
"request_id":"a4c2917083168d438ed04d17120b6864"
Connection #0 to host localhost left intact
}%

Now you have everything to work with. You have mabe only to adjust the image names for Kong and the testservice in the docker-compose file

THe 412 error code is returned by nginx/openresty, and kong redirect its page content, so Its the default bebaviour of nginx/openresty. And we could not disable this default behaviour. Check the source code of nginx:

https://github.com/nginx/nginx/blob/master/src/http/modules/ngx_http_not_modified_filter_module.c#L71
https://github.com/nginx/nginx/blob/master/src/http/modules/ngx_http_not_modified_filter_module.c#L172

@chobits , why is it working with plugins in other phases? This should be the case everytime if you are right!

Hi @TGeb-EV , that's probably due to the ETag conformance behavior of response phase plugin or cache.
And your upstream test service(index.js) may want to be as following to conform to expected ETag behavior:
app.get('/hello', (req, res) => {
if (req.headers['if-match'] && req.headers['if-match']  != 'V1')
return res.send(412);
res.set('etag','V1')
res.send('Hello World!')
})

Hi @xianghai2 ,
I explained my request flow 2 times including a graphic, explained, that the recommended flow if RFC ist not a MUST just an hint, I just used in the last example a get request, you could replace it with POTST or PUT. And you want to make me believe that activating a an "EMPTY" plugin getting a complete another behavior is the correctly. I also provided a detailed examplet for my flow. The last time I will explain the flow...
PUT a NEW Entity (same ID) to the service with a if-Match header (value "v1") -> the service checks if the etag ist correct like the following
app.get('/hello', (req, res) => {
if (req.headers['if-match'] && req.headers['if-match']  != 'V1')
return res.sendStatus(412); //you are right, it should be send by the service, "not by Kong"! But for showing the unexpected behavior this was not necessary
// some logic to create the new object in the database and count up the version, that matches since now, this is not recommended by RFC but allowed and in some cases the best way
res.set('etag','V2')  // send the "new" etag value, so that the client not to have to use a additionally GET request
res.send('')
}))
If you now say it is OK, and that the behavior should change only by adding an empty plugin, I will not agree, but I am done with this discussion.

Let's close this as the dissussoin was done. thanks.


Resectioning with auto-calibration

Estimate intrinsics directly in the resectioning.
Currently, we need an initial guess of the focal length and we refine all instrinsics in the Bundle Adjustment.

This is an existing feature: https://github.com/openMVG/openMVG/blob/master/src/openMVG/sfm/pipelines/sequential/sequential_SfM.cpp#L819

Some views can have no intrinsic defined at the start.
the field id_intrinsic will be filled with the value of UndefinedIndexT automatically if no sensor size have been found for the image.


BUG:SignUp page Visibility

Is there an existing issue for this?

[X] I have searched the existing issues

What happened?

I would like to request to be assigned to the issue regarding the signup page visibility in our project. The current implementation of the signup page is not fully visible, and its contents are extending beyond the screen’s viewable area. This issue makes it difficult for users to access all the form fields and buttons, negatively impacting the user experience.
Record

[X] I agree to follow this project's Code of Conduct
[X] I'm a GSSOC'24 contributor
[X] I want to work on this issue

fix it


support split_command without doing "vertical resize"

For now outline.nvim is creating outline window with split_command first, and then do a vertical resize. It causes a small flash on windows. It could be better if the windows is created by command like 25vsplit, removing the "resize" effect.

This sounds like a good improvement, thanks for writing a patch for it too.


How do I specify the implementation for a custom scalar type?

Failed to execute goal com.graphql-java-generator:graphql-maven-plugin:1.6.0:graphql (default-cli) on project next-client: The plugin configuration must provide an implementation for the Custom Scalar 'Long'.
https://github.com/graphql-java-kickstart/graphql-spring-boot/wiki/Creating-a-custom-scalar-type

https://github.com/graphql-java-generator/graphql-maven-plugin-project/blob/master/graphql-maven-plugin-samples/graphql-maven-plugin-samples-Forum-client/pom.xml#L27-L33
I found an example over there but it looks like that this project is not really maintained as well as the apollo-graphql-client

Hello,
Your starting question is about this plugin, but the link you gave is about graphql-java-kickstart.
So it's unclear to me if your last comment is about this plugin or about graphql-java-kickstart.
BTW, the error message states that you should provide the Custom Scalar implementation in the pom, like you've seen in the sample.
You'l find all the information on the plugin's site, on this page: https://graphql-maven-plugin-project.graphql-java-generator.com/customscalars.html
Etienne


Suggestion: publish docker images

Hello,
is it possible to publish prebuilt docker images, based on tags for example, in dockerhub and ghcr (github container registry), like this: https://github.com/users/momiji/packages/container/viya4-deployment/versions.
I don't think it is important to worry about the viya-deployment ansible playbook included in the docker image (which is still required because build relies on requirements.txt), as we can override it during runtime:

mount volume as /viya4-deployment.new
rsync from /viya4-deployment.new to /viya4-deployment without removing .ansible
any extra required steps, like injecting additional ca certificates

My usage is something like this:
$ docker run --rm -it
    ... \
    -v $PWD/viya4-deployment:/viya4-deployment.new:ro \
    -v $PWD/viya4-entrypoint.sh:/viya4-entrypoint.sh:ro \
    ... \
    --entrypoint $PWD/viya4-entrypoint.sh \
    sassoftware/viya4-deployment:6.4 \
    --tags install,viya

with a viya4-entrypoint.sh like this:
#!/usr/bin/env bash
set -ex

[ -d /ca-certs/ ] && {
    install -m 0750 -d /usr/local/share/ca-certificates/ca-certs/
    ls /ca-certs/ | xargs -i cp /ca-certs/{} /usr/local/share/ca-certificates/ca-certs/{}.crt
    update-ca-certificates
}

[ -d /viya4-deployment.new/ ] && {
    rsync -a /viya4-deployment.new/ /viya4-deployment/ --delete --exclude /.ansible
}

chmod +x /viya4-deployment/docker-entrypoint.sh

cmd=/viya4-deployment/docker-entrypoint.sh
[ "${1:-}" = "bash" ] && cmd=/bin/bash && shift

exec $cmd "$@"

This requires PM review

Hum, can you give more information on the legal/support reasons?
I was feeling it to just be a docker image with pre-installed requirements and nothing more.
I'm intersted because as I do publish the images for my own usage, you've just worried me...


Implement firebase messaging

A user needs to be able to receive alerts for new transactions.
Potentially, there should be a separate notification channel for new recurring transactions or upcoming recurring transactions.
Maybe down the road logic can be implemented to alert the user if their account balance is not enough to cover an upcoming recurring transaction.

closed by #31


Remove unneeded column container_group_id from containers

commit 0cf5a21ed8767d5656949e23561195d4aa0f55b9 removed the need of
container_group_id column, this patch actaully removes it.

cc @abonas @simon3z

container_group_id column, this patch actaully removes it.

s/actaully/actually

@oschreib tests are failing, please check.

I'd prefer to keep the direct relationship (as mentioned in one of the other PRs). We'll discuss this when I'll be back.

Ok, for now let's go with this approach. Anyway  @oschreib you have to make sure that containers are removed properly (on destroy). Let's discuss this ASAP.

@chessbyte ready for merge :+1:


"[Сalculators] 'Search' button does not performed its functional after clicking on it

Environment: Windows 11 Home Version 22H2 Build	22621.2506
Chrome Версія 118.0.5993.118 (Official build) (64-bit)
Reproducible: always
Build found:
Preconditions

https://zero-waste-staging.onrender.com/uk is opened in browser
User is logged in as admin
'Admin' page is opened

Steps to reproduce

Click on 'Calculators' tab in header
Place cursor into 'Search' textfield
Fill in 'Search' textfield with valid data
Click on 'Search' button

Actual result
Calculator which was searched is not highlighted
Expected result
Calculator which was searched is highlighted
User story and test case links
E.g.: "User story #627
Test case"
Labels to be added
"Bug", Priority ("pri:high "), Severity ("severity: major"), Type ("Functional").

https://github.com/ita-social-projects/ZeroWaste/assets/145554575/c84ef085-7c7b-415b-bb4b-c6f9c77a0528


Create 2023-09-23-Mixin-Network.md

Does the filename correct? :white_check_mark:

Does this article match Hugo SSG format? :white_check_mark:

Does this article has only allowed sections? :white_check_mark:
+

Does the filename correct? :white_check_mark:

Does this article match Hugo SSG format? :white_check_mark:

Does this article has only allowed sections? :white_check_mark:

Does the filename correct? :white_check_mark:

Does this article match Hugo SSG format? :white_check_mark:

Does this article has only allowed sections? :white_check_mark:

Does the filename correct? :white_check_mark:

Does this article match Hugo SSG format? :white_check_mark:

Does this article has only allowed sections? :white_check_mark:

Does the filename correct? :white_check_mark:

Does this article match Hugo SSG format? :white_check_mark:

Does this article has only allowed sections? :white_check_mark:

Does the filename correct? :white_check_mark:

Does this article match Hugo SSG format? :white_check_mark:

Does this article has only allowed sections? :white_check_mark:

Does the filename correct? :white_check_mark:

Does this article match Hugo SSG format? :white_check_mark:

Does this article has only allowed sections? :white_check_mark:

Does the filename correct? :white_check_mark:

Does this article match Hugo SSG format? :white_check_mark:

Does this article has only allowed sections? :white_check_mark:

Does the filename correct? :white_check_mark:

Does this article match Hugo SSG format? :white_check_mark:

Does this article has only allowed sections? :white_check_mark:

Does the filename correct? :white_check_mark:

Does this article match Hugo SSG format? :x:
The new_text does not match the correct Hugo SSG format. The required fields 'date', 'target-entities', 'entity-types', 'attack-types', and 'title' are missing.

Does this article has only allowed sections? :white_check_mark:


Unable to switch between pock and system dock using the control key

I do not know what to do

Press the control key twice quickly to switch.

This doesn't work for me on Catalina

@liuxianghua1 can you provide more information about your setup?
@WillBishop, please, read the information here for setting the right permission in macOS Catalina.

Unable to switch between pock and system dock using the control key
@pigigaldi  I also encountered this problem ：10.14.6 (18G2022)

command + Q Forced exit, reopened to normal


Support for PostgreSQL views

Hasura supports postgresql views and stored functions as graphql source same as any table.
Similar support would be really great addition to the already great set of features.

I think this could be supported with reference to this https://www.prisma.io/docs/concepts/components/prisma-schema/views
Since as far as I understand wundergraph internally uses prisma.

This might be possible, yes. We need to check. I'll create a ticket internally and we'll investigate.
Thank you for the input.

Any update on this?
I tried to go inside the codebase and try to add this myself but was confused as hell. 😅

Unfortunately we haven't made.progress yet. If you're interested in trying to add views, according to the Prisma team all we need to do is update the Prisma version to a newer one that supports views. So we need to update the Prisma binary Downloader and see if it all works properly. Here's the code where we download binaries: https://github.com/wundergraph/wundergraph/blob/463da5a00246969d5f5bb3df1feee70096d1d963/pkg/datasources/database/engine.go#L337

So turns out prisma is no longer maintaining their go client.... Damn thats big... Does that means in future wundergraph will have to change it's reliance on it to something else which still works with prisma schemas but without those?

We're not using the go client. We only used the code to download the binaries, which could be easily changed. All we do is start the Prisma engine as a sub process and talk to it via the http interface. So there's nothing really we need from the go client. The only thing we need to figure out is what's the correct URL to download the latest binaries for different architectures and that's it.


Allow constructor to accept NodeList

At the current time constructor can not accept NodeList type. The following code is not working:
const inputs = document.querySelectorAll('.js-pretty-dropdown');

const choices = new Choices(inputs);

The error:
choices.js:184 Uncaught TypeError: this.passedElement.getAttribute is not a function
    at new Choices (choices.js:184)

I have to use CSS-selector const choices = new Choices('.js-pretty-dropdown') which is unwanted for me. Is it bug or possible feature request?

Hey @tekord,
This is a definite feature request - passing a class name, as you said, performs a querySelectorAll for you 👍

How about this feature?
This will be good in case if need initialize a lot of elements inside some container for example.
This can be done by using some loop, of course. But will be better just pass one object to constructor, I think.


Fix apps/indexer Apibara and Endpoints

[ ] Verify events of the contract in the launchpad_types.cairo
[ ] Verify the variables, data saved, etc
[ ] Run all indexers in the docker file
[ ] Test them with Docker to have the same env as in prod
[ ] Check Launchpad events and init.sql tables
[ ] Call the endpoints of the apps/data-backend to check if events are saved

I am applying to this issue via OnlyDust platform.
My background and how it can be leveraged
I'd love to work on this
ETA: before EOD


Code style: Mandate unqualified types in the absence of conflict and explicit import statements

I do not wish to clutter the reading with qualified data-types for APIs whose functions have conflicts (Vector, Text, Map, Set, etc).
We should do this instead:
import Data.Vector (Vector)
import qualified Data.Vector as V

Do you want me to integrate this into the style guide as part of resolving the issue?
I can also check that pull requests conform to this.

@TrueBoxGuy Yes that was for introduction in the style guide. :)


Mark test.EquateErrors as deprecated

Description of your changes

We can't remove this (it would be a breaking API change) but I want to discourage and redirect folks.
See https://github.com/crossplane/crossplane/issues/4514 for context and more discussion. I've also updated this repo to follow the new pattern proposed in that issue, so it acts as an example of how tests might look if we choose to adopt it.
I have:

[x] Read and followed Crossplane's contribution process.
[x] Run make reviewable test to ensure this PR is ready for review.

How has this code been tested

Converting to draft because I forgot I had to update all the uses in this repo. 😆

This is approved, so if this PR is still relevant could we rebase and merge?


fix: allow 'include' directive in 'if' and 'limit_except' blocks

Proposed changes
Resolves #72.
The mask ngxAnyConf is defined as "any context except server > if, location > if and location > limit_except".
Given that this mask is only used for defining the valid contexts for the include directive, and given that the contexts listed above are valid for include, it makes sense to modify the ngxAnyConf definition to include such contexts.
Checklist
Before creating a PR, run through this checklist and mark each as complete.

[x] I have read the CONTRIBUTING document
[x] If applicable, I have added tests that prove my fix is effective or that my feature works
[x] If applicable, I have checked that any relevant tests pass after adding my changes
[x] I have updated any relevant documentation (README.md)

I don't know why the original definition of this mask omitted if contexts and limit_except. This went all the way back to the original Python without a useful commit message or hint as to why it was implemented this way.


dark mode when on pet news, blogs, donate animals and support us page

Is your feature request related to a problem? Please describe.
when we are on the pet news page, blogs page, donate animals page and support us page and switch to the dark mode only the header part changes not the background of the page.
Describe the solution you'd like
When there is a feature of dark mode, the user wants it to be on the entire screen not only for the header part. I want to add the dark mode to these pages also I talked about.
Describe alternatives you've considered
When we switch to these pages, the page heading should be highlighted when we are on that particular page and when we switch to the dark mode the entire screen's background gets changed to the dark mode (i.e. brown colour).
Additional context
If I will be assigned this issue I can show you the change I want.

go for it

@Sanju-Gautam0855 are you still working on it?

@Nayanika-12 yes I'm working on it.
Kindly work on any other issue.

Okay.


strawberry: 1.1.3 -> 1.2.2

Closes #343933.
https://raw.githubusercontent.com/jonaski/strawberry/1.2.2/Changelog
Does this need a release note entry?
Things done

Built on platform(s)

[x] x86_64-linux
[ ] aarch64-linux
[ ] x86_64-darwin
[ ] aarch64-darwin

For non-Linux: Is sandboxing enabled in nix.conf? (See Nix manual)

[ ] sandbox = relaxed
[ ] sandbox = true

[ ] Tested, as applicable:

NixOS test(s) (look inside nixos/tests)
and/or package tests
or, for functions and "core" functionality, tests in lib/tests or pkgs/test
made sure NixOS tests are linked to the relevant packages

[ ] Tested compilation of all packages that depend on this change using nix-shell -p nixpkgs-review --run "nixpkgs-review rev HEAD". Note: all changes have to be committed, also see nixpkgs-review usage
[x] Tested basic functionality of all binary files (usually in ./result/bin/)
25.05 Release Notes (or backporting 24.11 and 25.05 Release notes)

[ ] (Package updates) Added a release notes entry if the change is major or breaking
[ ] (Module updates) Added a release notes entry if the change is significant
[ ] (Module addition) Added a release notes entry if adding a new NixOS module

[x] Fits CONTRIBUTING.md.

Add a :+1: reaction to pull requests you find important.

nixpkgs-review result
Generated using nixpkgs-review.
Command: nixpkgs-review pr 358024

x86_64-linux

:fast_forward: 2 packages blacklisted:

nixos-install-tools
tests.nixos-functions.nixos-test

:white_check_mark: 1 package built:

strawberry (strawberry-qt6)