Istio does not adhere to HTTP/2 RFC 7540

Bug description
Istio does not properly send a 421 response when a connection is reused and accident sent to a server that is not the correct origin.  This can occur when there are two gateways, one with a wildcard certificate (*.example.com) and one with a different non-wildcard certificate (b.example.com) routing to two different apps (a.example.com and b.example.com) where a http/2 connection is first established to the wildcard gateway (on host a.example.com with *.example.com) then a resource is requested from an application on the non-wildcard gateway (b.example.com with certificate b.example.com).
Because of http/2 connection reuse it's possible for traffic destined for the second app (b.example.com) to end up being routed on the existing connection for (a.example.com) due to the RFC definition of connection re-use in section 9.1.1 (https://tools.ietf.org/html/rfc7540#section-9.1.1, e.g., because the certificate can authoritatively handle the request, and the IP address is the same as they are on the same ingressgateway).
When that happens, according to section 9.1.2 istio should respond with a 421 indicating that the wrong connection was used and the origin was not found.  This would instruct the browser to retry on a new connection, thus renegotiating TLS and presenting SNI and thus going down the non-wildcard certificate route and to a different gateway/virtual service and the correct service.
Expected behavior
Should return a 421 and the browser should re-connect and successfully find the resource.  Instead a 404 is returned.
Steps to reproduce the bug

Create istio 1.1.1+ instance with one ingress gateway.
Create a DNS record a.example.com, and b.example.com both point to the ingress gateway.
Create a gateway named "a" for a.example.com that uses a.example.com server host, and has a wildcard certificate for *.example.com.
Create a gateway named "b" for b.example.com that uses b.example.com server host and has a specific certificate b.example.com.
Create an app that hosts a static website with two files index.html and foobar.png. The index.html file should have an image tag that refers to an image https://b.example.com/foobar.png (e.g., <img src="https://b.example.com/foobar.png">)
Deploy the app twice to Kubernetes and attach virtual services for a.example.com to go to the app and b.example.com to go to the app (effectively a.example.com and b.example.com are both hosting the app with different certificates on the same IP address, where a is on a wildcard cert and b is not).
Visit https://a.example.com/, notice that you receive a 404 in Chrome and Firefox but not safari or opera.

Version (include the output of istioctl version --remote and kubectl version)
kubectl vclient version: version.BuildInfo{Version:"1.1.1", GitRevision:"2b1331886076df103179e3da5dc9077fed59c989", User:"root", Host:"7077232d-4c6c-11e9-813c-0a580a2c0506", GolangVersion:"go1.10.4", DockerHub:"docker.io/istio", BuildStatus:"Clean", GitTag:"1.1.0-17-g2b13318"}
apps-private-ingressgateway version: version.BuildInfo{Version:"", GitRevision:"", User:"", Host:"", GolangVersion:"", DockerHub:"", BuildStatus:"", GitTag:""}
apps-public-ingressgateway version: version.BuildInfo{Version:"", GitRevision:"", User:"", Host:"", GolangVersion:"", DockerHub:"", BuildStatus:"", GitTag:""}
citadel version: version.BuildInfo{Version:"1.1.2", GitRevision:"2b1331886076df103179e3da5dc9077fed59c989-dirty", User:"root", Host:"35adf5bb-5570-11e9-b00d-0a580a2c0205", GolangVersion:"go1.10.4", DockerHub:"docker.io/istio", BuildStatus:"Modified", GitTag:"1.1.1"}
galley version: version.BuildInfo{Version:"1.1.2", GitRevision:"2b1331886076df103179e3da5dc9077fed59c989-dirty", User:"root", Host:"35adf5bb-5570-11e9-b00d-0a580a2c0205", GolangVersion:"go1.10.4", DockerHub:"docker.io/istio", BuildStatus:"Modified", GitTag:"1.1.1"}
pilot version: version.BuildInfo{Version:"1.1.2", GitRevision:"2b1331886076df103179e3da5dc9077fed59c989-dirty", User:"root", Host:"35adf5bb-5570-11e9-b00d-0a580a2c0205", GolangVersion:"go1.10.4", DockerHub:"docker.io/istio", BuildStatus:"Modified", GitTag:"1.1.1"}
policy version: version.BuildInfo{Version:"1.1.2", GitRevision:"2b1331886076df103179e3da5dc9077fed59c989-dirty", User:"root", Host:"35adf5bb-5570-11e9-b00d-0a580a2c0205", GolangVersion:"go1.10.4", DockerHub:"docker.io/istio", BuildStatus:"Modified", GitTag:"1.1.1"}
sidecar-injector version: version.BuildInfo{Version:"1.1.2", GitRevision:"2b1331886076df103179e3da5dc9077fed59c989-dirty", User:"root", Host:"35adf5bb-5570-11e9-b00d-0a580a2c0205", GolangVersion:"go1.10.4", DockerHub:"docker.io/istio", BuildStatus:"Modified", GitTag:"1.1.1"}
telemetry version: version.BuildInfo{Version:"1.1.2", GitRevision:"2b1331886076df103179e3da5dc9077fed59c989-dirty", User:"root", Host:"35adf5bb-5570-11e9-b00d-0a580a2c0205", GolangVersion:"go1.10.4", DockerHub:"docker.io/istio", BuildStatus:"Modified", GitTag:"1.1.1"}
sites-private-ingressgateway version: version.BuildInfo{Version:"", GitRevision:"", User:"", Host:"", GolangVersion:"", DockerHub:"", BuildStatus:"", GitTag:""}
sites-public-ingressgateway version: version.BuildInfo{Version:"", GitRevision:"", User:"", Host:"", GolangVersion:"", DockerHub:"", BuildStatus:"", GitTag:""}

$ kubectl version
Client Version: version.Info{Major:"1", Minor:"10", GitVersion:"v1.10.4", GitCommit:"5ca598b4ba5abb89bb773071ce452e33fb66339d", GitTreeState:"clean", BuildDate:"2018-06-18T14:14:00Z", GoVersion:"go1.9.7", Compiler:"gc", Platform:"darwin/amd64"}
Server Version: version.Info{Major:"1", Minor:"11", GitVersion:"v1.11.5", GitCommit:"753b2dbc622f5cc417845f0ff8a77f539a4213ea", GitTreeState:"clean", BuildDate:"2018-11-26T14:31:35Z", GoVersion:"go1.10.3", Compiler:"gc", Platform:"linux/amd64"}

How was Istio installed?
Helm
Environment where bug was observed (cloud vendor, OS, etc)
AWS, with istio installed and running with an NLB ingress or as a nodeport terminating the TLS.

Seems related: https://github.com/istio/istio/issues/9429

This status code MUST NOT be generated by proxies.

Seems like the spec says the we cannot return a 421? Or maybe I am reading that wrong

@howardjohn they mean proxies in the traditional sense, istio could be considered a reverse proxy but its not a proxy by the RFC definition.  Folks at chromium also clarified that the proxy only applies to forward proxies: https://bugs.chromium.org/p/chromium/issues/detail?id=954160#c5

@howardjohn thoughts?

I agree with what you said, Istio isn't a proxy by the rfc definition
Seems like a bug but probably something to change in Envoy rather than Istio?

I can open an issue on envoy, link the tickets, we'll see where we land, for now if its alright to leave this ticket up to let other teams comment that would be helpful.

@howardjohn If you'd like to expand what envoy would need to fix it would help, I've opened a ticket for them here: https://github.com/envoyproxy/envoy/issues/6767

@trevorlinton could you share /config_dump from Envoy?

@PiotrSikora I'm unsure how to grab that, I'm not terribly familiar with envoy, just as much as exposed by istio. Here's the istioctl proxy-config routes if it helps, I can directly jump on the envoy pod if you know the local port to get that information.
[
    {
        "name": "https.443.https-apps-public.apps-public.sites-system",
        "virtualHosts": [
            {
                "name": "appa.example.com:443",
                "domains": [
                    "appa.example.com",
                    "appa.example.com:443"
                ],
                "routes": [
                    {
                        "match": {
                            "prefix": "/"
                        },
                        "route": {
                            "cluster": "outbound|80||appa.default.svc.cluster.local",
                            "timeout": "0s",
                            "retryPolicy": {
                                "retryOn": "connect-failure,refused-stream,unavailable,cancelled,resource-exhausted,retriable-status-codes",
                                "numRetries": 2,
                                "retryHostPredicate": [
                                    {
                                        "name": "envoy.retry_host_predicates.previous_hosts"
                                    }
                                ],
                                "hostSelectionRetryMaxAttempts": "3",
                                "retriableStatusCodes": [
                                    503
                                ]
                            },
                            "maxGrpcTimeout": "0s"
                        },
                        "metadata": {
                            "filterMetadata": {
                                "istio": {
                                    "config": "/apis/networking/v1alpha3/namespaces/sites-system/virtual-service/appa-default"
                                }
                            }
                        },
                        "decorator": {
                            "operation": "appa.default.svc.cluster.local:80/*"
                        },
                        "perFilterConfig": {
                            "mixer": {
                                "forward_attributes": {
                                    "attributes": {
                                        "destination.service.host": {
                                            "string_value": "appa.default.svc.cluster.local"
                                        },
                                        "destination.service.name": {
                                            "string_value": "appa"
                                        },
                                        "destination.service.namespace": {
                                            "string_value": "default"
                                        },
                                        "destination.service.uid": {
                                            "string_value": "istio://default/services/appa"
                                        }
                                    }
                                },
                                "mixer_attributes": {
                                    "attributes": {
                                        "destination.service.host": {
                                            "string_value": "appa.default.svc.cluster.local"
                                        },
                                        "destination.service.name": {
                                            "string_value": "appa"
                                        },
                                        "destination.service.namespace": {
                                            "string_value": "default"
                                        },
                                        "destination.service.uid": {
                                            "string_value": "istio://default/services/appa"
                                        }
                                    }
                                }
                            }
                        }
                    }
                ]
            }
        ],
        "validateClusters": false
    },
    {
        "name": "https.443.https-appb-example-com.appb-public.sites-system",
        "virtualHosts": [
            {
                "name": "appb.example.com:443",
                "domains": [
                    "appb.example.com",
                    "appb.example.com:443"
                ],
                "routes": [
                    {
                        "match": {
                            "prefix": "/"
                        },
                        "route": {
                            "cluster": "outbound|80||appb.default.svc.cluster.local",
                            "timeout": "0s",
                            "retryPolicy": {
                                "retryOn": "connect-failure,refused-stream,unavailable,cancelled,resource-exhausted,retriable-status-codes",
                                "numRetries": 2,
                                "retryHostPredicate": [
                                    {
                                        "name": "envoy.retry_host_predicates.previous_hosts"
                                    }
                                ],
                                "hostSelectionRetryMaxAttempts": "3",
                                "retriableStatusCodes": [
                                    503
                                ]
                            },
                            "maxGrpcTimeout": "0s"
                        },
                        "metadata": {
                            "filterMetadata": {
                                "istio": {
                                    "config": "/apis/networking/v1alpha3/namespaces/sites-system/virtual-service/appb-default"
                                }
                            }
                        },
                        "decorator": {
                            "operation": "appb.default.svc.cluster.local:80/*"
                        },
                        "perFilterConfig": {
                            "mixer": {
                                "forward_attributes": {
                                    "attributes": {
                                        "destination.service.host": {
                                            "string_value": "appb.default.svc.cluster.local"
                                        },
                                        "destination.service.name": {
                                            "string_value": "appb"
                                        },
                                        "destination.service.namespace": {
                                            "string_value": "default"
                                        },
                                        "destination.service.uid": {
                                            "string_value": "istio://default/services/appb"
                                        }
                                    }
                                },
                                "mixer_attributes": {
                                    "attributes": {
                                        "destination.service.host": {
                                            "string_value": "appb.default.svc.cluster.local"
                                        },
                                        "destination.service.name": {
                                            "string_value": "appb"
                                        },
                                        "destination.service.namespace": {
                                            "string_value": "default"
                                        },
                                        "destination.service.uid": {
                                            "string_value": "istio://default/services/appb"
                                        }
                                    }
                                }
                            }
                        }
                    }
                ]
            }
        ],
        "validateClusters": false
    },
]

@trevorlinton it's localhost:15000/config_dump, but I think istioctl proxy-config returns the same information (I keep forgetting about it...).
Could you also paste output from istioctl proxy-config listeners?

Sadly I removed our test cluster after I dumped the first configuration, I can give you instructions in Istio as to how to re-create it.

@trevorlinton that would be great, thanks.

Create one IP address or ingress-gateway in istio
Create two domain entries a.example.com and b.example.com both pointing to the same IP address and ingress-gateway
Create two certificates one which is a wildcard *.example.com and one which is a regular single certificate without a sans for b.example.com
Create two applications the first should host a.example.com and only serve up a static index.html which references an image called foo.png (via an img tag) from https://b.example.com/foo.png.  The second application should be host b.example.com and only host foo.png.
Create two gateways one for a.example.com and one for b.example.com, the a.example.com should use the wildcard certificate, b.example.com should use the certificate b.example.com from step 3.
Create two virtual services one for a.example.com that uses gateway a.example.com and points ot the application for a.example.com and one for b.example.com should likewise use gateway b.example.com and points to the application for b.example.com.

Then visit a.example.com on Chrome or Firefox. Notice how the reference for b.example.com/foo.png returns a 404. Where the expected result is it should return a 421, the browser should re-negotiate the SNI and a new connection then the image should eventually be resolved and the site should successfully work.  Notice that via curl you can retrieve both https://a.example.com/index.html and https://b.example.com/foo.png but in the browser going to https://b.example.com/foo.png fails (even when directly navigating to it) if you've first been to a.example.com and have it open in a different tab.
Hope this helps replicate it.

This issue should be reopened with an external ref https://github.com/envoyproxy/envoy/issues/6767
@istio/wg-networking-maintainers

A CVE was opened (not by me) surrounding this issue: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-11767

/reopen

I still think this is relevant, and should not be closed, thank you.

How other proxies handle this:
Apache: https://httpd.apache.org/docs/2.4/mod/mod_http2.html#misdirected automatic detection of a vhost requested that has different TLS config
Contour (envoy): https://github.com/projectcontour/contour/pull/2483/files#diff-98b92a08d0022a6c73eceeb2e1d99a43R303. This is a lua filter that asserts the SNI matches the host header
Traefik: https://github.com/traefik/traefik/pull/7008 adds option (enabled by default) to assert SNI matches host header
Nginx: https://forum.nginx.org/read.php?29,267026 not sure I fully understood this one, but looks like it is asserting SNI matches Host
https://tools.ietf.org/html/rfc6066#section-11.1 seems to imply we should be asserting SNI matches Host

Hi,
Do we have a WA for this issue? I've facing the exact issue with wildcard cert and 3 different services

Do we have a WA for this issue? I've facing the exact issue with wildcard cert and 3 different services

There are three choices to work around the issue.  These focus on making sure the browser doesn't try to reuse your connections:

Create non-overlapping certificates for each gateway.  You can use subdomains for each gateway if you still want wildcard certs.
Create a different proxy port for each gateway on the front-end.  For example use port 443 for main apps and 8443 for admin apps.
Create proxies (e.g. load balancers) with different external IPs for each gateway

The browser reuses connections if the IP:Port is the same as a previous connection and the previous connection's cert is valid for the new hostname.  See the HTTP spec for details.  If you can affect one of those 3 items (IP, Port, Cert), you can avoid the connection reuse, which works around Istio's limitation.

We ran into this issue and ended up disabling HTTP/2 in istio with the following config.
apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
  name: disable-alpn-h2
  namespace: istio-system
spec:
  workloadSelector:
    labels:
      istio: ingressgateway
  configPatches:
  - applyTo: FILTER_CHAIN
    match:
      listener:
        filterChain:
          sni: "*.mygateway.com"
    patch:
      operation: MERGE
      value:
        transportSocket:
          name: envoy.transport_sockets.tls
          typedConfig:
            '@type': type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext
            commonTlsContext:
              alpnProtocols:
                - "http/1.1"
              tlsCertificateSdsSecretConfigs:
                - name: kubernetes://wildcard-cert
                  sdsConfig:
                    ads: {}
                    resourceApiVersion: V3

We ran into this issue and ended up disabling HTTP/2 in istio with the following config.
apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
  name: disable-alpn-h2
  namespace: istio-system
spec:
  workloadSelector:
    labels:
      istio: ingressgateway
  configPatches:
  - applyTo: FILTER_CHAIN
    match:
      listener:
        filterChain:
          sni: "*.mygateway.com"
    patch:
      operation: MERGE
      value:
        transportSocket:
          name: envoy.transport_sockets.tls
          typedConfig:
            '@type': type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext
            commonTlsContext:
              alpnProtocols:
                - "http/1.1"
              tlsCertificateSdsSecretConfigs:
                - name: kubernetes://wildcard-cert
                  sdsConfig:
                    ads: {}
                    resourceApiVersion: V3

@ragingpastry this not work for me. cause protoMerge to array alpnProtocols  with appending action not replacing.
we have to modify the gateway listener builder, pilot/pkg/networking/core/v1alpha3/gateway.go
      ctx := &tls.DownstreamTlsContext{
		CommonTlsContext: &tls.CommonTlsContext{
-			AlpnProtocols: util.ALPNHttp,
+			AlpnProtocols: util.ALPNHttpOnly,
		},
	}

@howardjohn  can we expose the AlpnProtocols config to Gateway.Servers[].Tls.AlpnProtocols API.
we disable the http2 by default. when app need http2 use EnvoyFilter to turn on the http2 support.
but this cause server prefers to use http1.1, because http1.1 is in front of http2.
name: envoy.transport_sockets.tls
typed_config:
  '@type': >-
    type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext
  common_tls_context:
    alpn_protocols:
      - http/1.1
      - h2
    tls_certificate_sds_secret_configs:
      - name: kubernetes://xxx
        sds_config:
          ads: {}
          resource_api_version: V3
  require_client_certificate: false

## SSL ALPN logic
SSL_select_next_proto() is a helper function used to select protocols. It implements the standard protocol selection. It is expected that this function is called from the application callback cb. The protocol data in server, server_len and client, client_len must be in the protocol-list format described below. The first item in the server, server_len list that matches an item in the client, client_len list is selected, and returned in out, outlen. The out value will point into either server or client, so it should be copied immediately. If no match is found, the first item in client, client_len is returned in out, outlen. This function can also be used in the NPN callback.

if (!parsed_alpn_protocols_.empty() && !config.capabilities().handles_alpn_selection) {
      SSL_CTX_set_alpn_select_cb(
          ctx.ssl_ctx_.get(),
          [](SSL*, const unsigned char** out, unsigned char* outlen, const unsigned char* in,
             unsigned int inlen, void* arg) -> int {
            return static_cast<ServerContextImpl*>(arg)->alpnSelectCallback(out, outlen, in, inlen);
          },
          this);
    }

int ServerContextImpl::alpnSelectCallback(const unsigned char** out, unsigned char* outlen,
                                          const unsigned char* in, unsigned int inlen) {
  // Currently this uses the standard selection algorithm in priority order.
  const uint8_t* alpn_data = parsed_alpn_protocols_.data();
  size_t alpn_data_size = parsed_alpn_protocols_.size();

  if (SSL_select_next_proto(const_cast<unsigned char**>(out), outlen, alpn_data, alpn_data_size, in,
                            inlen) != OPENSSL_NPN_NEGOTIATED) {
    return SSL_TLSEXT_ERR_NOACK;
  } else {
    return SSL_TLSEXT_ERR_OK;
  }
}

parsed_alpn_protocols_ = parseAlpnProtocols(config.alpnProtocols());

now we have to reorder the AlpnProtocols fields after the listener patches, this is so tricky way.
Look forward to your reply.
thanks! @howardjohn

Perhaps someone could take this issue to a Networking WG meeting?

This has been discussed a few times in the past and we were unable to achieve consensus on a path forward. I think @lambdai has a doc about this we can probably attach for more context

This has been discussed a few times in the past and we were unable to achieve consensus on a path forward. I think @lambdai has a doc about this we can probably attach for more context

how can I tell the chrome disable http2 such as "chrome --disable-http2" , or tell the  istio gateway protocol: HTTPS1.1

Looking forward to having this resolved.

Is there someone working on this? 😳

Thanks for the excellent writeup. I think we're seeing the same issue with a slightly different setup. (Please tell me if I'm wrong. I'm happy to open a separate case.)

In development, we use a single self-signed cert that has multiple domains foo.example.local, bar.example.local, baz.example.local.
Requests from the same browser (Chrome 114.0.5735.198) using HTTP/2 sometimes get NR no_route_found from the gateway for routes that should exist. (Restarting the browser, or using a different browser, shows that they do exist.)
The 404/no_route_found behavior is "sticky" and requires a browser restart to fix.

Unrelated differences (I think?)

We're using k8s HttpRoute for our routing. But the routes all get sent to the istio gateway-controller, so I think we're ending up in the same code path(s).

This gave us a ton of headaches because we started experiencing this when we were adding and testing CORS headers to allow requests across those domains. Whether that would work really depended on the particular access pattern that might trigger the bad behavior. And we couldn't see anything wrong in our apps because the gateway was just rejecting the routes before even sending them on to our pods.
I estimate we wasted a cumulative week of developer time (across multiple developers) if not more because of this issue.
Is there nothing to be done that can at least avoid this issue until there's a fix in envoy? (For example: Maybe the gateway could refuse to reuse HTTP/2 connections on certs that are wildcards and/or serve multiple hostnames? at least until the upstream fix is available?)

Our workaround for now was to create separate certs for each hostname. This is fine in development, but isn't really tenable (as people say above) if you have a large number of hostnames to deal with, and can't act as your own CA.

This bug is biting me right now, looks like I can relatively easily switch to non-overlapping certs.  A bummer wildcard certs dont work with http/2 it seems?

The easiest quick and dirty solution would be to allow users to disable ALPN for HTTP/2 on the gateway, because right now it's hard-coded to be on with no settings to force disable it.

I would appreciate any updates on this topic too as we are hit in our development environment by this issue. This problem appeared after we migrated away from traefik.
Having a workaround for this would be very welcome.

I had the same problem, when using two services, one which is part of istio-servicemesh and one which is not. Both with the same wildcard-certificate.
For me it seems to be working fine when creating an additional catch-all virtual service with wildcard-host on the related gateway.
The virtual service is catching all hosts which are not defined in other virtual services. Then it is serving a 421 status code, which tells the browser to try it again with a new connection.
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: disable-sensitive
spec:
  gateways:
    - gateway
  hosts:
    - '*'
  http:
    - fault:
        abort:
          httpStatus: 421
          percentage:
            value: 100
      match:
        - uri:
            prefix: /
      route:
        - destination:
            host: dummy
            port:
              number: 9999

I found the need information here:
https://istio.io/v1.10/docs/ops/best-practices/security/#explicitly-disable-all-the-sensitive-http-host-under-relaxed-sni-host-matching


api: proposal proxy ports

this's an alternative for https://github.com/envoyproxy/gateway/pull/1787
xref: https://github.com/envoyproxy/gateway/issues/1703
follow up of: https://github.com/envoyproxy/gateway/pull/2015#discussion_r1366079885

@zirain can we add this post v0.6 ?

@zirain can we add this post v0.6 ?

sure, it's not urgent.


progress bar is not working.

After resolving of issue #7 , progress bar is not working, found after commit:-  96d3c90

This issue is resolved with this commit:- eb0ec3258b2e277dd42ca1bb75822a0ae4535a48
Please re-check it's functionality and close this issue.

functionality rechecked. all working fine.


[SYSTEMML-961]Scalar object assigned as Matrix to Frame Object

This problem occurs in Spark env.

LGTM - thanks @asurve

thanks


Provide help for object if the cursor is located between braces

Currently if one has (* represents cursor):

import subprocess

# Press Ctrl+I Works
subprocess.Popen*

# Press Ctrl+I does not
subprocess.Popen(*

I suggest we find if we are inside a function (by going backwards until a ( is found? I feel that being inside the func/method should still be able to provide help.

FYI: there's some code for this already (I don't remember where) added by Steve several years ago.

Cool, will take a look!

I think that code is attached to Shift+Tab, so after pressing it users can see again the calltip widget while filling the args of a method or function.


codecov: make sure build sees env vars

This applies the equivalent changes in #1607 but for codecov.
Please take a look.

Codecov Report

Merging #1609 (4fb3b48) into master (7405698) will increase coverage by 0.08%.
The diff coverage is n/a.

@@            Coverage Diff             @@
##           master    #1609      +/-   ##
==========================================
+ Coverage   72.88%   72.97%   +0.08%
==========================================
  Files         482      493      +11
  Lines       58276    58530     +254
==========================================
+ Hits        42476    42713     +237
- Misses      13399    13407       +8
- Partials     2401     2410       +9

Impacted Files
Coverage Δ

lapack/gonum/dlaqr1.go
40.62% <0.00%> (-15.63%)
:arrow_down:

internal/asm/f32/stubs_noasm.go
100.00% <0.00%> (ø)

internal/asm/f64/axpy.go
100.00% <0.00%> (ø)

internal/asm/f64/l2norm_noasm.go
88.67% <0.00%> (ø)

internal/asm/f64/ge_noasm.go
92.85% <0.00%> (ø)

internal/asm/c64/stubs_noasm.go
100.00% <0.00%> (ø)

internal/asm/f32/ge_noasm.go
69.23% <0.00%> (ø)

internal/math32/sqrt.go
100.00% <0.00%> (ø)

internal/asm/c128/stubs_noasm.go
100.00% <0.00%> (ø)

internal/asm/f64/stubs_noasm.go
100.00% <0.00%> (ø)

... and 4 more

Continue to review full report at Codecov.

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


OCPP 1.6 ReserveNow and Cancel Reservation + Custom Reservation Module

Hi guys,
as part of my master's thesis I've implemented a reservation module for the solution incorporating the OCPP 1.6 ReserveNow and 'Cancel Reservation' functionality described in the standard. Furthermore, a few adjustments to the project itself and the migration from NPM to PNPM are included. In case you are interested in this work and like to dig a little bit deeper, here is the code for the web frontend.

 Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.You have signed the CLA already but the status is still pending? Let us recheck it.


Add visualisation of x argument of myDumbSqrt function

@kolumb that's a pretty cool idea! Thanks for the contribution!


Execute Hugo from other Go program with flags

Hi!
I'm building caddy-hugo and Hugo it's going to be bundled with Caddy in that version so I need to some way to execute Hugo supporting the flags. Right now I'm just calling commands.Execute() but in that way I can't use the flags.
If I have a string with the flags as they will be set in the command line, how should I proceed to execute Hugo with them?

Have no idea, but it might be an idea to ask this question at the Cobra project, too, because that's whats driving the CLI.

@bep I was trying some things and I found out that commands.HugoCmd.ParseFlags([]string{"--baseUrl=https://teste/"}) works. I think I can close the issue for now. Thanks anyway.


NthRoot using Binary Search

Is your feature request related to a problem? Please describe.
Finding Nth root of any positive integer.
Describe the solution you'd like
The problem can be solved using Binary Search as the problem has a monotonically increasing function.
Describe alternatives you've considered
Implementation of Binary Search
Additional context
Required inputs:
N-denotes the Nth root.
X-denotes the number of which nth root has to be calculated.
Required Output:
Return the Nth root correct upto five decimal places.
Example:
input:
4  125
output:
3.34370

@Kumar-laxmi Please assign this issue to me under SSOC 2.0

Assigned!
@ak-sh-at : C, C++, Python and Java


Consider releasing s390x and ppc64le binaries.

As of https://github.com/indygreg/python-build-standalone/releases/tag/20230726 PBS supports s390x and it has supported little endian Power chips for longer than that. Both architectures are used in systems amenable to larger binaries / more resource intensive apps (unlike exotic embedded architectures); so making science available for these architectures may spur unforeseen use scenarios.

I've just spun up s390x support for ptex and the scie jump, but Power support seems problematic without further digging. There are compilation errors in sys crates which seem to necessitate upgrades or fixes.

Ok, the ppc64le compilation issue is only in ptex and its only using the curl zlib-ng-compat feature which may not actually be needed at all (it looks like the feature was added out of ignorance due to Mac M2 build failures a long time ago).

Support was released on 0.10.0: https://github.com/a-scie/lift/releases/tag/v0.10.0


Error when running kubectl describe namespace <namespace>

I am on Mac OSX v. 10.15.7 (Catalina) and Kubecolor 0.0.7 installed from brew, and I'm using zsh in iTerm2.  I get the following errors when trying to describe namespace resources in K8s:
Resource Quotas
Name:panic: runtime error: index out of range [0] with length 0
goroutine 18 [running]:
github.com/dty1er/kubecolor/printer.(*DescribePrinter).Print(0xc00005e010, 0x113d2e0, 0xc0000a2028, 0x113d300, 0xc0000a2008)
/home/runner/work/kubecolor/kubecolor/printer/kubectl_describe.go:85 +0xe75
github.com/dty1er/kubecolor/printer.(*KubectlOutputColoredPrinter).Print(0xc000082340, 0x113d2e0, 0xc0000a2028, 0x113d300, 0xc0000a2008)
/home/runner/work/kubecolor/kubecolor/printer/kubectl_output_colored_printer.go:101 +0x15e
github.com/dty1er/kubecolor/command.Run.func1(0xc00009a0a0, 0x113d820, 0xc0000a2028, 0xc0000a8040)
/home/runner/work/kubecolor/kubecolor/command/runner.go:85 +0x9b
created by github.com/dty1er/kubecolor/command.Run
/home/runner/work/kubecolor/kubecolor/command/runner.go:84 +0x34c

@dty1er Any ideas on this one?

Sorry to be late.
Probably this is kubecolor's bug. Let me check deeply.

@jclynny
Hi, can you show me the actual output of kubectl describe namespace if possible?
Just showing Resource Quotas part is OK.

Sure.
`Resource Quotas
Name:                                                                     aggregate-cap
Resource                                                                  Used  Hard

cold-hdd.storageclass.storage.k8s.io/requests.storage                     0     9600Gi
count/configmaps                                                          4     200
count/jobs.batch                                                          0     200
count/persistentvolumeclaims                                              0     200
count/pods                                                                0     200
count/replicationcontrollers                                              0     200
count/secrets                                                             3     200
count/services                                                            2     200
general-purpose-ssd.storageclass.storage.k8s.io/requests.storage          0     9600Gi
high-provisioned-iops-ssd.storageclass.storage.k8s.io/requests.storage    0     0
limits.cpu                                                                0     575
limits.memory                                                             0     3000Gi
low-provisioned-iops-ssd.storageclass.storage.k8s.io/requests.storage     0     100Gi
medium-provisioned-iops-ssd.storageclass.storage.k8s.io/requests.storage  0     0
requests.cpu                                                              0     575
requests.memory                                                           0     3000Gi
requests.storage                                                          0     9600Gi
services.loadbalancers                                                    0     50
services.nodeports                                                        0     50
throughput-optimized-hdd.storageclass.storage.k8s.io/requests.storage     0     9600Gi`

Sure.
`Resource Quotas
Name:                                                                     aggregate-cap
Resource                                                                  Used  Hard

cold-hdd.storageclass.storage.k8s.io/requests.storage                     0     9600Gi
count/configmaps                                                          4     200
count/jobs.batch                                                          0     200
count/persistentvolumeclaims                                              0     200
count/pods                                                                0     200
count/replicationcontrollers                                              0     200
count/secrets                                                             3     200
count/services                                                            2     200
general-purpose-ssd.storageclass.storage.k8s.io/requests.storage          0     9600Gi
high-provisioned-iops-ssd.storageclass.storage.k8s.io/requests.storage    0     0
limits.cpu                                                                0     575
limits.memory                                                             0     3000Gi
low-provisioned-iops-ssd.storageclass.storage.k8s.io/requests.storage     0     100Gi
medium-provisioned-iops-ssd.storageclass.storage.k8s.io/requests.storage  0     0
requests.cpu                                                              0     575
requests.memory                                                           0     3000Gi
requests.storage                                                          0     9600Gi
services.loadbalancers                                                    0     50
services.nodeports                                                        0     50
throughput-optimized-hdd.storageclass.storage.k8s.io/requests.storage     0     9600Gi`

Thank you! checking again...

Thank you! checking again...

Hi @dty1er, any updates?  Do you need more information from me?

Hi @dty1er, any updates?  Do you need more information from me?

@jclynny
Sorry to be late. I found the root cause and trying to fix it.
Please wait for a bit more...

@jclynny
Sorry to be late. I found the root cause and trying to fix it.
Please wait for a bit more...

BTW I made a PR to fix the root cause on kubectl side. https://github.com/kubernetes/kubernetes/pull/97946
Now I'm working on a workaround fix on kubecolor side

BTW I made a PR to fix the root cause on kubectl side. https://github.com/kubernetes/kubernetes/pull/97946
Now I'm working on a workaround fix on kubecolor side

Hi @jclynny , I need your help.
I applied the workaround for this issue and released the latest kubecolor v0.0.9.
Can you try it and make sure the issue is fixed now?
You can update kubecolor by brew upgrade if you installed kubecolor by homebrew.
Or you can install the latest by go get command go get -u github.com/dty1er/kubecolor/cmd/kubecolor.

Hi @jclynny , I need your help.
I applied the workaround for this issue and released the latest kubecolor v0.0.9.
Can you try it and make sure the issue is fixed now?
You can update kubecolor by brew upgrade if you installed kubecolor by homebrew.
Or you can install the latest by go get command go get -u github.com/dty1er/kubecolor/cmd/kubecolor.

Certainly.  I will test and get back with you.  Thanks.

Certainly.  I will test and get back with you.  Thanks.

@dty1er Seems to work perfectly now.  Thanks for fixing this so quickly!

@dty1er Seems to work perfectly now.  Thanks for fixing this so quickly!

@jclynny
Great to hear that!
So let me close this issue now. Sorry for the delay of my response.
Thank you for using kubecolor! If you find anything else, please submit issues.

@jclynny
Great to hear that!
So let me close this issue now. Sorry for the delay of my response.
Thank you for using kubecolor! If you find anything else, please submit issues.


Unparsed address [0]

After 4 days of syncing my install is finally up to date but most addresses show "Unparsed address [0]"

I think that is normal behavior for non-standard outputs, (like OP_RETURN outputs), but it should not show that for most transactions, which have standard outputs. Could you provide an example of a tx where you are seeing this, but you don't think you should be?

Having the same issue as ByronAP, For example outputs from: f4184fc596403b9d638783cf57adfe4c75c605f6356fbc91338530e9831e9e16

@Biersteker Thanks for that txid. That helped a lot.
So the "Unparsed address[0]" part is not a bug.
Transaction f4184fc596403b9d638783cf57adfe4c75c605f6356fbc91338530e9831e9e16 redeems the output from transaction 0437cd7f8525ceed2324359c2d0ba26006d92d856a9c20fa0241106ee5a597c9.
The output on 0437cd7f8525ceed2324359c2d0ba26006d92d856a9c20fa0241106ee5a597c9 is a pay-to-public-key output. In the input section of https://insight.bitpay.com/tx/f4184fc596403b9d638783cf57adfe4c75c605f6356fbc91338530e9831e9e16, it shows as unparsed address because that transaction sent to a public key, not an address.
There is a bug in the outputs section though. In https://insight.bitpay.com/tx/0437cd7f8525ceed2324359c2d0ba26006d92d856a9c20fa0241106ee5a597c9, we show the output as a pay-to-public-key-hash output, which is wrong. This should also show up as an unparsed address instead of 12cbQLTFMXRnSzktFkuoG3eHoMeFtpTu3S.
@braydonf I haven't looked at the code yet, but I suspect we might be using the verbose getrawtransaction to fill in output info. When I run:
decoderawtransaction<PHONE_NUMBER>0000000000000000000000000000000000000000000000000000000000000000ffffffff0704ffff001d0134ffffffff0100f2052a0100000043410411db93e1dcdb8a016b49840f8c53bc1eb68a382e97b1482ecad7b148a6909a5cb2e0eaddfb84ccf9744464f82e160bfa9b8b64f9d4c03f999b8643f656b412a3ac00000000

I get this
{
  "txid": "0437cd7f8525ceed2324359c2d0ba26006d92d856a9c20fa0241106ee5a597c9",
  "size": 134,
  "version": 1,
  "locktime": 0,
  "vin": [
    {
      "coinbase": "04ffff001d0134",
      "sequence":<PHONE_NUMBER>
    }
  ],
  "vout": [
    {
      "value": 50.00000000,
      "n": 0,
      "scriptPubKey": {
        "asm": "0411db93e1dcdb8a016b49840f8c53bc1eb68a382e97b1482ecad7b148a6909a5cb2e0eaddfb84ccf9744464f82e160bfa9b8b64f9d4c03f999b8643f656b412a3 OP_CHECKSIG",
        "hex": "410411db93e1dcdb8a016b49840f8c53bc1eb68a382e97b1482ecad7b148a6909a5cb2e0eaddfb84ccf9744464f82e160bfa9b8b64f9d4c03f999b8643f656b412a3ac",
        "reqSigs": 1,
        "type": "pubkey",
        "addresses": [
          "12cbQLTFMXRnSzktFkuoG3eHoMeFtpTu3S"
        ]
      }
    }
  ]
}

which is coercing the pubkey to an address.

Thanks for digging into this @gabegattis
We should check that vout type equals pubkeyhash at https://github.com/bitpay/bitcore-node/blob/master/lib/services/bitcoind.js#L1919-1922 (or equivalent in bitcoind), especially makes sense that pay-to-publickey isn't indexed (by coercing into an address).

@braydonf Agreed. In addition, we may also want to change the code in bitcoind to only show an address if it detects the type a P2PKH or P2SH. That behavior has always bugged me.

I don't understand the logic behind not parsing them to an address

Rationale is that the address prefix 00 has the meaning of pay-to-pub-key-hash (p2pkh). And pay-to-pub-key (p2pk) actually doesn't have an address, otherwise it would be p2pkh.

yes but you should be able to create a p2pkh from a p2pk right?

You can use a pubkey to get a pubkey hash, and then encode that as an actual bitcoin address. However, it would still be incorrect to show the output as going to an address, because that is not actually what happened. The output script is a pay-to-pubkey script, not a pay-to-pubkey-hash script. Likewise, the transaction that redeems that output will have a different input script if it is redeeming a p2pk output instead of a p2pkh output.
For sake of clarity and correctness, we should not show an address in this case. There might be a good argument for making the actual pubkey as such, instead of "Unparsed address".

it should be made to be able to keep track of p2pk just as if it were p2pkh, however there is the argument that p2pk is rare...
"unparsed address" makes it sound like the system is still processing the chain or that there is a problem.

Maybe something like "unparseable script" or "non-standard script" or "unsupported script type" would be a better message.

I kind of have my reservations about doing p2pub => p2pubhash in indexing.(Because its factual incorrect) But the transaction i linked was the Hall Finney transaction.That is being referenced by pubkeyhash in the wild , which ofc isn't strict behavior . (Because its a pay to pubkey, not pay to pubkey hash.). But still it is one transaction that should be able to be looked up. pay to pubkey is rare, but for archive keeping i would suggest that it should be indexable by pubkeyhash (Even if its just wrong) and report the pubkey aswell. Reporting unparseble script would just be wrong. Because it isn't

"it should be indexable by pubkeyhash (Even if its just wrong) and report the pubkey aswel" agree

Hi everyone , Please I'm new here . Please I need help a friend sent me btc but I didn't get it and when I check on blockchain it show that my wallet is Unparsed address and the payment went to a strange wallet . Please I would appreciate your help .


Add a ground heat flux between snow and soil

Purpose
Introduce a ground heat flux between the soil and snow. This is important as it is the major heat flux the soil feels when it is covered by snow.
Introduce the same type of handing of boundary conditions for snow as for soil when multiple components are present
To-do
review
maybe @AlexisRenchon could review the ground heat flux term, and @juliasloan25 could review the prognostic_land_components and dispatch side of things (similar to the PR you reviewed where we implemented it for soil)?
Content

Introduce Snow.AtmosDrivenSnowBC, which is a direct analog of Soil.AtmosDrivenFluxBC for snow. (Future PR is to change the name of AtmosDrivenFluxBC to AtmosDrivenSoilBC)
Introduce snow_boundary_fluxes! function, a direct analog of soil_boundary_fluxes!. What these functions do depends on the values of the prognostic_land_components field of the bc.
When snow is run by itself prognostic_land_components = (;snow,), and the snow_boundary_fluxes! function treats the ground heat flux as zero [future PR could be to add in a prescribed soil component, but this can definitely wait until we have a use case]
When the snow is run with a soil model, prognostic_land_components = (;snow, :soil), and the snow_boundary_fluxes! function compute a ground heat flux. I had to add some extra aux fields to the cache for this computation in order to avoid allocations.

[ ] I have read and checked the items on the review checklist.

Thank you for the great tutorial! Could you add some text to NEWS.md? Everything looks good to me, I just noticed two small typo...

thanks for the quick review! I added to NEWS.md

This looks great!! Thank you, Kat :)

thanks for the quick review!

It may be that you cannot use where statements in single line functions?
julia> heaviside(x::FT)::FT where {FT} = heaviside(x, FT(0))

ERROR: UndefVarError: `FT` not defined
Stacktrace:
 [1] top-level scope
   @ REPL[1]:1

julia>

julia> function heaviside(x::FT)::FT where {FT}
       return heaviside(x, FT(0))
       end
julia>


Add ip and port for etcd running status check

Add ip and port for etcd running status check to avoid that etcd would not run when another etcd is running on the host.
Type: Bug Fix
Issue: #313

LGTM


Support Arc Browser

This "should" add browser support for "Arc"
I had some issues bootstrapping and running the project though and I am looking for some guidance.

Could not finishspago build because of

Cannot import value defaultExecSyncOptions from module Node.ChildProcess
  It either does not exist or the module does not export it.

it's not exported in the later versions. I do not know how to pin down a specific version in purescript or if that is even the right approach. In just removed the import and the expressions and it started to build

Did not compile

at src/Extension.purs:49:20 - 49:26 (line 49, column 20 - line 49, column 26)

  Could not match type

    Effect

  with type

    Function Int

I had to remove  import Node.Process (exit) and exit 1 call
So my current working space is a bit dirty.
I was able to install to trigger the installation of extensions though
# build project
spago build

# required to find packages
npm install

# run
# Redux DevTools
# "https://chromewebstore.google.com/detail/redux-devtools/lmhkpmbekcpmknklioeibfkpmmfibljd"
./index.js install arc lmhkpmbekcpmknklioeibfkpmmfibljd

# run
# Re-introduce google maps links to search page
# https://chromewebstore.google.com/detail/re-introduce-google-maps/mjkkdbmdflkcjmonelmlokplkgnjcnji
./index.js install arc mjkkdbmdflkcjmonelmlokplkgnjcnji

Hey, thanks for your pull request!
I appreciate you pushing through the issues while getting the project up and running. The documentation is missing a section on setting up the development environment, which probably made things trickier for you.
I've deployed the new version as a Homebrew formula.
Could you add some documentation in the code? Chrome and Edge have sections in their docs for that, but I couldn't find anything similar for Arc. Perhaps it got swept away in the flood. If you have a reference for it, it'd be awesome if you could share it.

Could you add some documentation in the code?
I couldn't find any. They are very "documentation light" are more of a veneer. They do rely on Chrome underneath so I just guessed the mechanics.
I can only offer to write a sentence that there are no docs to make it  explicit.


Support intermediate polynomials

this reuses FunctionDefinition with a new variant to encode col intermediate = e
it fails in witgen, to be fixed separately

Actually, can you also add some tests with nested intermediates?

Ofc, just added.


Inconsistent subscription ID references in samples

In some places subscription ID is referenced using the SUBID variable, in other as GUID placeholder: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX.
Please, pick one approach and stick to it.

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

ID: eee999c1-32dd-d014-40df-8027adee1258
Version Independent ID: 19a29c09-79f8-580a-841f-873e2801da56
Content: Integrate Azure Key Vault with Kubernetes
Content Source: articles/key-vault/general/key-vault-integrate-kubernetes.md
Service: key-vault
Sub-service: general
GitHub Login: @ShaneBala-keyvault
Microsoft Alias: sudbalas

@agr
Thanks for your feedback! We will investigate and update as appropriate.

Updated #please-close

Updated #please-close


Error Timeout

Please paste the output of the following command here.                                                       ```Entering/mnt/stateful_partition/crouton/chroots/precise...
/usr/bin/startxfce4: Starting X server
_XSERVTransmkdir: Owner of /tmp/.X11-unix should be set to root
X.Org X Server 1.15.1
Release Date: 2014-04-13
X Protocol Version 11, Revision 0
Build Operating System: Linux 2.6.42-75-generic x86_64 Ubuntu
Current Operating System: Linux localhost 3.10.18 #1 SMP Thu Mar 10 05:11:12 PST 2016 x86_64
Kernel command line: cros_secure console= loglevel=7 init=/sbin/init cros_secure oops=panic panic=-1 root=/dev/dm-0 rootwait ro dm_verity.error_behavior=3 dm_verity.max_bios=-1 dm_verity.dev_wait=1 dm="1 vroot none ro 1,0 2506752 verity payload=PARTUUID=8006c220-338c-5740-b705-71af8bd68db2/PARTNROFF=1 hashtree=PARTUUID=8006c220-338c-5740-b705-71af8bd68db2/PARTNROFF=1 hashstart=2506752 alg=sha1 root_hexdigest=4e9b414bae166191f327061db1e0104e14931c37 salt=6e87672096a04fb9a0ba805901d389751453d204165b651c52f73d0c74f829e0" noinitrd vt.global_cursor_default=0 kern_guid=8006c220-338c-5740-b705-71af8bd68db2 add_efi_memmap boot=local noresume noswap i915.modeset=1 tpm_tis.force=1 tpm_tis.interrupts=0 nmi_watchdog=panic,lapic
Build Date: 12 February 2015  03:37:52PM
xorg-server 2:1.15.1-0ubuntu2~precise5 (For technical support please see http://www.ubuntu.com/support)
Current version of pixman: 0.30.2
Before reporting problems, check http://wiki.x.org
to make sure that you have the latest version.
Markers: (--) probed, (**) from config file, (==) default setting,
(++) from command line, (!!) notice, (II) informational,
(WW) warning, (EE) error, (NI) not implemented, (??) unknown.
(++) Log file: "/tmp/Xorg.crouton.2.log", Time: Sat Mar 26 18:16:29 2016
(++) Using config file: "/etc/X11/xorg-dummy.conf"
(==) Using system config directory "/usr/share/X11/xorg.conf.d"
setversion 1.4 failed: Permission denied
Initializing built-in extension Generic Event Extension
Initializing built-in extension SHAPE
Initializing built-in extension MIT-SHM
Initializing built-in extension XInputExtension
Initializing built-in extension XTEST
Initializing built-in extension BIG-REQUESTS
Initializing built-in extension SYNC
Initializing built-in extension XKEYBOARD
Initializing built-in extension XC-MISC
Initializing built-in extension SECURITY
Initializing built-in extension XINERAMA
Initializing built-in extension XFIXES
Initializing built-in extension RENDER
Initializing built-in extension RANDR
Initializing built-in extension COMPOSITE
Initializing built-in extension DAMAGE
Initializing built-in extension MIT-SCREEN-SAVER
Initializing built-in extension DOUBLE-BUFFER
Initializing built-in extension RECORD
Initializing built-in extension DPMS
Initializing built-in extension X-Resource
Initializing built-in extension XVideo
Initializing built-in extension XVideo-MotionCompensation
Initializing built-in extension XFree86-VidModeExtension
Initializing built-in extension XFree86-DGA
Initializing built-in extension XFree86-DRI
Initializing built-in extension DRI2
Loading extension GLX
setversion 1.4 failed: Permission denied
/usr/bin/xinit: XFree86_VT property unexpectedly has 0 items instead of 1
crouton: version 1-20160206234800~master:daa872a0
release: precise
architecture: amd64
xmethod: xiwi
targets: xfce,xiwi
host: version 7834.60.0 (Official Build) stable-channel swanky
kernel: Linux localhost 3.10.18 #1 SMP Thu Mar 10 05:11:12 PST 2016 x86_64 x86_64 x86_64 GNU/Linux
freon: yes
Another instance of croutonclip running, waiting...
Another instance of croutontriggerd running, waiting...
Error timeout
Cannot connect to extension, retrying...
Error timeout
Cannot connect to extension, retrying...
Error timeout
Cannot connect to extension, retrying...
Error timeout
Cannot connect to extension, retrying...
Error timeout
Cannot connect to extension, retrying...
Error timeout
Cannot connect to extension, retrying...
Error timeout
Cannot connect to extension, retrying...
Error timeout
Cannot connect to extension, retrying...
Error timeout
Cannot connect to extension, retrying...
Error timeout
Cannot connect to extension, retrying...
Unable to start display, make sure the crouton extension is installed
and enabled, and up to date. (download from http://goo.gl/OVQOEt)
Running exit commands...
/usr/bin/xinit: connection to X server lost
waiting for X server to shut down (EE) Server terminated successfully (0). Closing log file.
Not unmounting /mnt/stateful_partition/crouton/chroots/precise as another instance is using it.```
Sorry if the answer to this question is obvious but I am new to crouton and have been using it the past month. Recently when ever I try to start crouton I can't connect to the extension and it says error timeout and I don't know what to do because I can't open any chroot.

@HeroBrineDRG,

Unable to start display, make sure the crouton extension is installed
and enabled, and up to date. (download from http://goo.gl/OVQOEt)

Hopefully, you may simply need install the 'crouton integration' extension as noted above.
-DennsiL


KAFKA-6819: Pt. 1 - Refactor thread-level Streams metrics

ThreadMetrics does not inherit from StreamsMetricsImpl
Bundles all thread-level sensor details in ThreadMetrics class
Extracts thread metrics to its own class
Creation and removal of Streams-related sensors bundled in StreamsMetricsImpl

Committer Checklist (excluded from commit message)

[ ] Verify design and implementation
[ ] Verify test coverage and CI build status
[ ] Verify documentation (including upgrade notes)

Call for reviews @vvcephei, @guozhangwang, @mjsax, @ableegoldman, @abbccdda, @bbejeck

@cadonna maybe you can copy the detailed description as well as the comments I left on the original PR https://github.com/apache/kafka/pull/6498 for others to review easily? Those comments are left on those key parts that may be hard to understand originally.

@guozhangwang, extended the commit message to clarify the main design of this PR. I did not follow exactly the design proposed in PR #6498.


[Bug]: Rspack cannot correctly recognize @ unobservable @ computed @ action and other decorative symbols in the mobx library

System Info
System Info
System:
MacBook Pro (13-inch, M1, 2020)
Memory:16 GB
Binaries:
Node: 18.15.0
npm: 9.5.0
Browsers:
Chrome:  131.0.6778.140
npmPackages:
@rspack/cli: ^1.1.6 => 1.1.6
@rspack/core: ^1.1.6 => 1.1.6
mobx:^5.15.7 => 5.15.7
mobx-react:^6.3.1 => 6.3.1
react:^17.0.1 => 17.0.1
react-dom:^17.0.1 => 17.0.1
Details
React  +Mobx
The loader configuration is as follows
swc-loader Set decorators: true，Compile without any errors，But The menu bar is blank because the @unobservable @computed @action decoration symbol is not correctly recognized
Remove the @ unobservable @ computed @ action decoration from the code, and the page will display normally
{
test: /.(j|t)s(x)?$/,
exclude: /node_modules/,
loader: 'builtin:swc-loader',
options: {
// js/ts编译配置
jsc: {
parser: {
// 开启ts编译
syntax:'typescript',
// 开启tsx编译
tsx: true,
// 开启@装饰器编译
decorators: true,
// 动态import
dynamicImport: true,
},
transform: {
// react运行环境配置
react: {
// dev模式打开development启动react的开发模式
development: isDevelopment,
refresh: isDevelopment,
},
// stage 1 的旧版本class decorators
legacyDecorator: true,
// 支持 ts emitDecoratorMetadata
// decoratorMetadata: true,
},
},
},
Reproduce link
No response
Reproduce Steps
Compile without any errors

But The menu bar is blank

Remove the @ unobservable @ computed @ action decoration from the code, and the page will display normally

@fandywen which version mobx you used

@fandywen which version mobx you used
@SyMind  mobx:5.15.7,mobx-react:6.3.1

@chenjiahan @inottn   Boss, Can you help me investigate the reason?

Need a reproduction repo.

SAME ISSUE!

Hello @fandywen, sorry we can't investigate the problem further without reproduction demo, please provide a repro demo by forking rspack-repro, or provide a minimal GitHub repository by yourself. Issues labeled by need reproduction will be closed if no activities in 14 days.

I have found the reason and added loose in the jsx configuration: true

SAME ISSUE!

I have found the reason and added {loose:true, decorators:true }in the jsx configuration
jsc: {
loose: true,
parser: {
// 开启ts编译
syntax:'typescript',
// 开启tsx编译
tsx: true,
// 开启@装饰器编译
decorators: true,
// decoratorsBeforeExport: true,
// 动态import
dynamicImport: true,
},
      },

Great ! it also works for me!Thanks very much!


Transfer metadata to events before emit

Metadata from commands are transferred to events and can then be used in handlers on views. But they cannot be used in apply methods on roots, as they have not been transferred yet, at the time. Would there be any problems in moving the transfer of metadata into the aggregate root before the applies are called?

no

But why did you close it then? :-O

sorry

You're soooo sending mixed signal :)

Are you still using the ability to Load in an apply method of an aggregate root, or is it just in the emitting method, you use it?

@mookid8000 if you do, I need to "flow" the metadata further down, and I'll fix that if you need it :)

I do - but the loaded root cannot Emit when it's loaded from an Apply

Oh. All good then :)


Badge count number reverts to previous value only if you set it to zero

I originally had a badge number of 2. I used BadgeAndroid.setBadge(15); in my code, and it worked. However, when I tried BadgeAndroid.setBadge(0);, the badge number reverted to 2.
Does anyone know why this might be? Is there any other info I can provide?

@gabeDevlift have you managed to fix the issue?

I have the same problem. It looks like the repository is abandoned :(

@osvald0, I've managed to handle the issue by switching to
https://github.com/zo0r/react-native-push-notification
And using
`import RNPushNotification from 'react-native-push-notification';
RNPushNotification.setApplicationIconBadgeNumber(unreadNotificationCount);
`

@osvald0, actually, that might not be the full solution. In android, the notifications stay in a tray and that was the actual reason for getting the badge number reverted. To get rid of the notifications you need to cancel them:
RNPushNotification.cancelAllLocalNotifications();

Yes, cancelAllLocalNotifications works fine.
Thanks @Froncz !

@osvald0 @Froncz Did you try this on an emulator or a physical Android device? Can you share on which model or specifications you managed to display the notifications badge?

@andresliu-mks physical device, Samsung A30 and Samsung A52.

@andresliu-mks physical device, Samsung A30 and Samsung A52.

Thank you. Did you just follow the setup and usage instructions and it worked? I can't seem to get this library working on any device @osvald0

Okay, so I found out that the badge would appear with the number you set only after receiving a push notification (I only tested this with remote, not local ones)

@Froncz thanks for sharing, but it seems like it's not functional on android emulator? or is there anyone have any idea to deal with this problem? @andresliu-mks


Fix recovery from potential crash

Current coverage is 57.26% (diff: 0.00%)

Merging #142 into master will decrease coverage by 0.10%

@@             master       #142   diff @@
==========================================
  Files            30         30
  Lines          3765       3772     +7
  Methods           0          0
  Messages          0          0
  Branches          0          0
==========================================
  Hits           2160       2160
- Misses         1461       1467     +6
- Partials        144        145     +1

Powered by Codecov. Last update 8417f36...cb6490a


Kafka commit offset drop data on failure for runners that have non-checkpointing shuffle

A user noticed that we commit Kafka offsets without any obvious checkpointing. We use a Reshuffle.byRandomKey() to cause Dataflow and the SparkRunner to checkpoint. But on runners with non-checkpointing shuffle, this risks data loss.

The modern solution is to use {}@RequiresStableInput{}. This is not perfectly/fully implemented across many runners, so we still need the explicit shuffle for now.

https://stackoverflow.com/questions/70785672/apache-beam-kafkaio-commit-offset-behaviour
Imported from Jira BEAM-13715. Original Jira may contain additional context.
Reported by: kenn.

@johnjcasey as an FYI. I believe this may still be an issue. Reshuffle is a non-checkpointing operation but it is commonly used for checkpointing due to Dataflow's history.


On github actions, always "warn Failed to detect the previous snapshot key"

on local , reg-suit sync-expected is correctly working.
but, reg-suit sync-expected  is not working correctly in github actions.
name: CI

on: [push]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    - name: Use Node.js v11
      uses: actions/setup-node@v1
      with:
        node-version: "11.0.0"
    - run: yarn install
    - name: workaround for detached HEAD
      run: |
        git checkout ${GITHUB_REF#refs/heads/} || git checkout -b ${GITHUB_REF#refs/heads/} && git pull
    - name: run reg-suit
      env:
        AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
        AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
      run: |
        yarn run test-visual

"run test-visual" call "reg-suit run".
on local

[reg-suit] info Detected the previous snapshot key: 'a7c1b4***************************************'

on github actions

[reg-suit] warn Failed to detect the previous snapshot key
[reg-suit] info Skipped to fetch the expected data because expected key is null.

by this problem, I can't compair images....
please help me.

I met same issue and found the cause.
In https://github.com/actions/checkout#checkout-v2

Only a single commit is fetched by default, for the ref/SHA that triggered the workflow.
The actions/checkout@v2 fetch only single SHA and no history.

I confirmed the issue fixed with 2 options. One is set the option fetch-depth: 0. The other is https://github.com/actions/checkout#fetch-all-history-for-all-tags-and-branches.


Integrate deprecated k8s-initiator-app features with migration-cli

User Story
As a customer i would like to have access to the same feature set ask8s-initiator-app was providing during and after CAPA migration.
First part of the node-tainting capabilities were already added: https://github.com/giantswarm/capi-migration-cli/blob/main/k8s-initiator-features/node-tainting.md
Following the same idea, there is set of remaining features to be added to the migration-cli:

audit-policy configuration - https://github.com/giantswarm/capi-migration-cli/blob/main/k8s-initiator-features/audit-policies.md
container-logs configuration - https://github.com/giantswarm/capi-migration-cli/blob/main/k8s-initiator-features/container-logs.md
admission-controller configuration - https://github.com/giantswarm/capi-migration-cli/blob/main/k8s-initiator-features/admission-controllers.md
node-tainting configuration - https://github.com/giantswarm/capi-migration-cli/blob/main/k8s-initiator-features/node-tainting.md

Acceptance Criteria

[ ] audit-policy configuration is passed to CAPA CRs during migration - https://github.com/giantswarm/capi-migration-cli/blob/main/k8s-initiator-features/audit-policies.md
[ ] container-logs configuration is passed to CAPA CRs during migration- https://github.com/giantswarm/capi-migration-cli/blob/main/k8s-initiator-features/container-logs.md
[ ] admission-controller configuration is passed to CAPA CRs during migration - https://github.com/giantswarm/capi-migration-cli/blob/main/k8s-initiator-features/admission-controllers.md
[ ] node-tainting configuration is passed to CAPA CRs during migration - https://github.com/giantswarm/capi-migration-cli/blob/main/k8s-initiator-features/node-tainting.md

Released in https://github.com/giantswarm/capi-migration-cli/releases/tag/v0.4.0


Change the API-M version found in the footer

Description
Change the APIM version in the footer to 4.4.0 across all 3 portals.
Steps to Reproduce
N/A
Affected Component
APIM
Version
4.4.0
Environment Details (with versions)
No response
Relevant Log Output
No response
Related Issues
No response
Suggested Labels
No response

Fixed by https://github.com/wso2/apim-apps/pull/774


Update InfiniteLoading.vue

Imagine that the page 1 is the last page. We should normally use the complete() trigger method. Problem is that isFirstLoad is not set to false in this case.
Cause this problem
No more results :( is displayed instead of No more data :)

Message type depending on whether the loaded method be called before call the complete method, so if there has only 1 page, just call the complete method and do not call the loaded method.

I think there is a misunderstanding (maybe from me). The scenario you answered is actually the way I do.
In a method :
       const method = this.page === this.totalPage ? 'complete' : 'loaded'

        if(null !== this.infinite_state) {
            this.infinite_state[method]()
        }

        if (method === 'complete') {
            /**
             * Because if we call complete() at the first time
             * the plugin will not set isFirstLoad to false
             */
            this.$refs.infiniteLoading.isFirstLoad = false
        }

In the case if we have only one page, the method complete() is already called as you said. But in this case, isFirstLoad is never set to false. Because we MUST call loaded() before.
It result that No more results is displayed.
Don't know if you understand what I mean ?

I see, we have to call the loaded method when we getting data, even if there is only 1 page, on the other hand,  the no-result message cannot be displayed anyway in your patch version, so it cannot pass the unit tests.
For your question, you can change your logic to solve it, like the Hacker News example in docs.


Fixing likelihoods and EP

This is a pull request to fix some problems with the Bernoulli and EP I have noticed recently.
First of all I think the signs of the Bernoulli seemed messed up, and the tests hid this problem.
In [2]: import numpy as np

In [3]: A = (np.random.randn(5,1) > 0.0)*1.0

In [4]: A
Out[4]:
array([[ 0.],
       [ 0.],
       [ 0.],
       [ 1.],
       [ 0.]])

In [5]: A = A*2 - 1

In [6]: A
Out[6]:
array([[-1.],
       [-1.],
       [-1.],
       [ 1.],
       [-1.]])

In [7]: np.where(A)
Out[7]: (array([0, 1, 2, 3, 4]), array([0, 0, 0, 0, 0]))

In [8]: np.where(A == 1)
Out[8]: (array([3]), array([0]))

We were previously doing np.where(y, this, elsethat), where I think we should be doing np.where(y==1, this, elsethat).
I have added a setting to EP which automatically resets after every step (though the default behaviour is the same), as the interface is currently confusing for doing true EP updates. I think this could be further resolved, and we could definitely do with looking at how we can speed this up, I believe the EP method could be significantly faster than it is at the moment.
The EP marginal likelihood reported is currently incorrect, this is because there is a missing term contributing to the marginal likelihood (the third and fourth term in the GPML book, p57). This won't change the optimization (as these terms are constant in the hyper parameters), but will report the marginal likelihood correctly. I have independently checked the marginal likelihoods with another GP package (GPStuff) and they appear to be correct.
I haven't been able to check this for the EPDTC code as of yet, but I believe the contributing terms should be similar? @ric70x7 can you verify this as I am not super familiar with the sparse approximation for EP? Maybe we could add an additional test where we compare the marginal likelihood with EPDTC vs EP, and check they are the same when Z=X?
Alan

Current coverage is 42.55%

Merging #279 into devel will increase coverage by +0.05% as of 3d90b1b

@@            devel    #279   diff @@
=====================================
  Files         165     165
  Stmts       14955   14984    +29
  Branches     2160    2165     +5
  Methods         0       0
=====================================
+ Hit          6356    6376    +20
- Partial       310     312     +2
- Missed       8289    8296     +7

Review entire Coverage Diff as of 3d90b1b

Powered by Codecov. Updated on successful CI builds.

Hi,
I'm sorry for the delay, I was planning to make a notebook showing how the
approximations match with the right parameters, but I just haven't got the
time.
The contributing terms for EP-DTC and EP should be similar. The comparisons
I have done so far return "similar" likelihoods.
About the test, we would just need to be careful because we might get some
numerical differences. Then we would need some criteria to define that both
cases "match".
Thanks a lot for spending the time and going through the trouble of fixing
this Alan.
Cheers,
Ricardo
2015-11-20 14:46 GMT+00:00 Max Zwiessele<EMAIL_ADDRESS>
Merged #279 https://github.com/SheffieldML/GPy/pull/279.
—
Reply to this email directly or view it on GitHub
https://github.com/SheffieldML/GPy/pull/279#event-470455088.


unable to find version v1

My old v0.1 workflow stopped working, maybe due to the version bump? Tried changing to v1 like in the readme, but getting the following:
Error: Unable to resolve action `ScaCap/code-coverage-assistant@v1`, unable to find version `v1`

the version has been off since I start using it and I can never really figure out the right version vs repo...

Looks like v1.0 works

@nyonson I have published the v1.0 last week. Sorry for the confusion, now it should all work.


Revisit blog listing page

@laneymangan in Slack: https://compilerla.slack.com/archives/C05L2B0SG06/p1717429574502599

I noticed that I'm not always able to view all of the past blog posts on our website.

Segacy had originally designed more of a filtering/pagination experience for this page. We should revisit those designs and see what we can implement quickly to make the blog listing page more usable to see older posts as we continue to post more.
A simple initial idea is a "See more" button that just un-hides a large chunk of older posts like how the case studies on the Work page function.
We can/should also link to the Atom feed of the blog on the page for easier discovery. E.g. https://compiler.la/blog/feed.xml

@machikoyasuda Mentioning myself here so I can follow this ticket, and perhaps prioritize it for the next Slush.

cc @AnthonyRollins @o-ram


Move oci out experimental

Moving all registry package out of experimental, and removing all checks and gates.
closes #9188
refs #10393

got it, I'm on it

@scottrigby done with all other experimental module


Implement VersionReq union, intersection, and simplification

This PR adds VersionReq::union and VersionReq::intersection, and thus fixes #170.
Since the naive implementation tends to produce fairly verbose bounds, it also adds a method that "simplifies" a VersionReq. It does so by first reducing each Range to the smallest range that matches all the range's predicates, and then merging overlapping ranges. For example, the VersionReq:
[ [1, <1.5], [1.2] ]

which is really
[ [>=1.0.0, <2.0.0, <1.5.0], [>=1.2.0,<2.0.0] ]

is simplified to
[ [>=1.2.0, <1.5.0] ]

I did not add automatic simplification after a call to parse, but that might be worthwhile.
I would love for this to have significantly more test-cases, so if you can think of any, please propose them here.
Also, if you have an idea for how to avoid panicking when trying to combine VersionReqs with different compats, please speak up!

/cc @Laegluin

versions.zip is a zip file containing a file with all 12665 versions and all 9427 requirements published on crates.io. It doesn't have all the forms that is allowed by this crate but it is a real data sample.

I ran some smoke tests over that data set. It found too many for me to summarize. The ugly hack of code I threw together was:

Cargo.toml
crates-index={ git = "https://github.com/frewsxcv/rust-crates-index"}
semver = { git = "https://github.com/jonhoo/semver", branch = "merge-ranges" }

main.rs
fn main() {
    let index = crates_index::BareIndex::new_cargo_default();
    let index = index.open_or_clone().unwrap();

    let mut req_set = BTreeSet::new();
    let mut ver_set = BTreeSet::new();

    for crt in index.crates() {
        for ver in crt.versions() {
            if let Ok(v) = semver::Version::parse(ver.version()) {
                ver_set.insert(v);
            } else {
                dbg![ver.version()];
            }
            for dep in ver.dependencies() {
                if let Ok(r) = semver::VersionReq::parse(dep.requirement()) {
                    req_set.insert(r);
                } else {
                    dbg![dep.requirement()];
                }
            }
        }
    }

    for (i, req1) in req_set.iter().rev().enumerate() {
        dbg!((req1.to_string(), i, i as f32 / req_set.len() as f32));
    //     let mut simp = req1.clone();
    //     simp.simplify();
    //     for ver in &ver_set {
    //         if req1.matches(ver) != simp.matches(ver) {
    //             dbg![(req1.to_string(), simp.to_string(), ver.to_string())];
    //         }
    //     }
        for req2 in req_set.range(req1..) {
            let int1 = req1.clone().intersection(req2);
            let int2 = req2.clone().intersection(req1);
            let uni1 = req1.clone().union(req2);
            let uni2 = req2.clone().union(req1);
            for ver in &ver_set {
                let int = req1.matches(ver) && req2.matches(ver);
                if int != int1.matches(ver) {
                    dbg![(
                        req1.to_string(),
                        req2.to_string(),
                        ver.to_string(),
                        int1.to_string(),
                        int
                    )];
                }
                if int != int2.matches(ver) {
                    dbg![(
                        req1.to_string(),
                        req2.to_string(),
                        ver.to_string(),
                        int2.to_string(),
                        int
                    )];
                }
                let uni = req1.matches(ver) || req2.matches(ver);
                if uni != uni1.matches(ver) {
                    dbg![(
                        req1.to_string(),
                        req2.to_string(),
                        ver.to_string(),
                        uni1.to_string(),
                        uni
                    )];
                }
                if uni != uni2.matches(ver) {
                    dbg![(
                        req1.to_string(),
                        req2.to_string(),
                        ver.to_string(),
                        uni2.to_string(),
                        uni
                    )];
                }
            }
        }
    }
}

Oh, nice! Could you share some of the problem cases you came across?

Here is the zip file of the first ~580k cases cleaned into a csv.

@Eh2406 Hmm, the first couple of cases seem suspicious if I'm reading them right:
type, req1, req2, ver, combined, correct
"int1", "<0.3.0-rc.17", "<0.4.0, >=0.1.0", "0.3.0-1", ">=0.1.0, <0.3.0-rc.17", false,
"int2", "<0.3.0-rc.17", "<0.4.0, >=0.1.0", "0.3.0-1", ">=0.1.0, <0.3.0-rc.17", false,
"uni1", "<0.3.0-rc.17", "<0.4.0, >=0.1.0", "0.3.0-1", "<0.4.0", true,
"uni2", "<0.3.0-rc.17", "<0.4.0, >=0.1.0", "0.3.0-1", "<0.4.0", true,

The intersection of <0.3.0-rc.17 and <0.4.0, >=0.1.0 is indeed >=0.1.0, <0.3.0-rc.17, so it seems like my simplification code is doing the right thing. Since correct=false I assume the expectation is that 0.3.0-1 does not match  <0.3.0-rc.17, but in that case it also should not match >=0.1.0, <0.3.0-rc.17. Yet the failing test suggests that it does. This indicates to me that there's actually a bug in the matching code.
For the union case: <0.3.0-rc.17 union <0.4.0, >=0.1.0 does indeed simplify to <0.4.0, which 0.3.0-1 should match. Which again suggests to me that there's something wrong with the matching code.
Specifically, what seems to be happening is that <0.X (without a prelease) never matches 0.Y-pre even when Y < X. That would explain both of the oddities above. In the intersection case, the <0.4 is removed, so the case starts matching (whereas the <0.4 in the original prevented it from matching). In the union case, the <0.3-rc.17 is removed in favor of the <0.4, so the case stops matching (whereas the <0.3-rc.17 in the original did match).
I think this is essentially the same as https://github.com/steveklabnik/semver/issues/172, and if I understand Steve correctly there, pre-release versions should only be selected if the major-minor-patch the pre-release is for is explicitly mentioned in the version requirements. That is, <0.4 should not match any pre-release of 0.3, whereas <0.3-pre will match any pre-release of 0.3. If that is indeed the case, that certainly makes the case for unions and intersections much more complicated, since it would mean that <0.4 is not strictly more general than <0.3-pre, and thus we have to merge ranges not globally across the version space, but within each major version.

Indeed your last paragraph describes it well. I think this is going to be a tricky problem. To belabor the examples:
<0.4.0, >=0.1.0 does not match 0.3.0-1 as the requirement does not include prereleases. So the intersection of <0.3.0-rc.17 and <0.4.0, >=0.1.0, is (I think) >=0.1.0, <0.3.0.
Similarly the union would have to be something like <0.3.0-rc.17 || <0.4.0.


fix: allowing null in cast for aggregation attributes

Forcing m[values] to be of type Map causes a null exception (in some cases). Allowing nulls fixes the problem.

Thank you! I'll create a new release soon - hopefully in the next few hours.

Released in 0.3.1


Refactored the implementation of RangeSet.

Refactored the implementation of RangeSet. The original implementation did not enforce privacy of the fields of Range, which meant that the implementation of Range could not be easily swapped out. I also added tests for all functions of RangeSet and Range. I also added several extra functions to Range that make the implementation of RangeSet a bit more legible (thing like writing range1.touches(range2) instead of range1.start() <= range2.end() && range1.end() >= range2.start()). I also favoured operator overloading over method calls, so instead of range1.minus(range2) we can write range1 - range2. I hope this PR is welcome! Let me know what you think.

There are some clippy warnings:
warning: This sequence of operators looks suspiciously like a bug.
   --> audio/src/range_set.rs:223:49
    |
223 |             if to_sub.start() <= cur.start() && cur.start() < to_sub.end() {
    |                                                 ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: I think you meant: `cur.end() < to_sub.end()`
    |
    = note: `#[warn(clippy::suspicious_operation_groupings)]` on by default
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#suspicious_operation_groupings

warning: This sequence of operators looks suspiciously like a bug.
   --> audio/src/range_set.rs:223:49
    |
223 |             if to_sub.start() <= cur.start() && cur.start() < to_sub.end() {
    |                                                 ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: I think you meant: `cur.end() < to_sub.end()`
    |
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#suspicious_operation_groupings

warning: use Vec::sort_by_key here instead
  --> audio/src/range_set.rs:45:9
   |
45 |         ranges.sort_unstable_by(|r1, r2| r1.start().cmp(&r2.start()));
   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `ranges.sort_unstable_by_key(|r1| r1.start())`
   |
   = note: `#[warn(clippy::unnecessary_sort_by)]` on by default
   = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_sort_by

error: suspicious use of binary operator in `Sub` impl
   --> audio/src/range_set.rs:276:14
    |
276 |         self += rhs;
    |              ^^
    |
    = note: `#[deny(clippy::suspicious_arithmetic_impl)]` on by default
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#suspicious_arithmetic_impl

error: aborting due to previous error; 3 warnings emitted

Ah I had seen only the first one, which is a false positive. The last two ones however are not! I fixed this and added #![allow(clippy::suspicious_operation_groupings)] to range_set.rs.

Tbh I am not convinced of all your changes, especially not the big ones.
That operator overloading would be a better choice is just one point of view. One could also argue that "adding" and "subtracting" range set are rather union and intersection of sets, so the symbols don't really fit. Since the old api worked fine, your suggestion is not objectively better, and it's not even public, I would tend to keeping it as it was.
Another change that I don't understand are the changes to Range. Using start and an unsigned length had the advantage that every possible value would be valid. Also I don't quite understand your arguments against making it fields public.
There are some improvements, but the big changes distract from those. It would be much easier to review if the diff would be smaller.
The documentations and tests are really welcome, you certainly noticed the lack of it in this repository.
My suggestion: Cut down some of your changes. If you still think there are some bigger changes necessary, let's discuss it here and add those back in separate commits.

Hi, sorry for the delayed response, but thanks for your straightforward review. I will try to reduce the diff by removing the following: operator overloading and the range with start and end.

I have reduced the diff somewhat, but a large part remains due to the privacy of start and end. I can remove that as well, but I believe that there is some sense of value in privacy when working with structs, namely:

The classical OOP argument of encapsulation. In range set, we can now not care about whether length, or start or end are a field or a function, but instead we are forced to access these 3 properties in a consistent way.
We can easily make modifications to the Range struct without breaking any further code in range_set.rs or fetch/*.

If you're not convinced I'll take it out and revert to the original implementation with 2 field accesses and 1 function of course, let me know!

@ThouCheese can you rebase so we can let the checks run and merge on success?

Hi, thanks for the ping! I had totally forgotten about this change. I will take a look at the @Johannesd3 left, resolve them and rebase.

I have resolved all comments but one, which I did not fully understand, and rebased.

The OCD in me sees this PR open every time I go to the librespot repo and wonders if it will ever be merged? It seems to have stalled out 6 months ago?

I hope @Johannesd3 returns.

I am sorry that this went into disrepair and the work that you put into this.
Cleaning up, I will close for now, but will be absolutely happy to go forward with this if you or others would update it.


Setup EasyCLA

https://easycla.lfx.linuxfoundation.org/
CLA of RICOS Co. Ltd. is here: https://github.com/ricosjp/CLA/blob/master/icla.md

CLA Assistant is set up instead of EasyCLA.


Protobuf schema is not formatted properly

[ ] Breaking change? (if so, please describe the impact and migration path for existing applications:)

What changes did you make? (Give an overview)
Issue #1346
Schema for PROTOBUF type was showing like a string, after changes it's showing in the right way.
Is there anything you'd like reviewers to focus on?
How Has This Been Tested? (put an "X" next to an item)

[x] No need to
[x] Manually(please, describe, when necessary)
[x] Unit checks
[x] Integration checks
[x] Covered by existing automation

Checklist (put an "X" next to an item, otherwise PR will fail)

[x] I have performed a self-review of my own code
[x] I have commented my code, particularly in hard-to-understand areas
[x] I have made corresponding changes to the documentation (e.g. ENVIRONMENT VARIABLES)
[x] My changes generate no new warnings(e.g. Sonar is happy)
[x] I have added tests that prove my fix is effective or that my feature works
[x] New and existing unit tests pass locally with my changes
[x] Any dependent changes have been merged

Check out Contributing and Code of Conduct

Fixes #1190

It seems it breaks messages height

Example how it looks on stand

Can confirm MessageContent height is fixed

Resolves #1415


Fix some documentation typos.

in 0.91
On Fri, Jul 10, 2015 at 4:34 PM, haguenau<EMAIL_ADDRESS>wrote:

You can view, comment on, or merge this pull request online at:
https://github.com/massemanet/eper/pull/37
Commit Summary

Fix some documentation typos.

File Changes

M doc/redbug.txt
https://github.com/massemanet/eper/pull/37/files#diff-0 (20)

Patch Links:

https://github.com/massemanet/eper/pull/37.patch
https://github.com/massemanet/eper/pull/37.diff

—
Reply to this email directly or view it on GitHub
https://github.com/massemanet/eper/pull/37.


[WIP] Render the register form fields dynamically

Checklist:

[x] My code follows the style guidelines of this project
[x] I have performed a self-review of my code
[ ] I have made corresponding changes to the documentation
[x] Any dependent changes have been merged and published in downstream modules

Documentation will be needed to update.


Improve the setup process.

Update the setup.py process to automatically build the scala assembly.
The setup process checks for the existance of 'sbt', and runs the sbt
'clean' and 'assembly' commands during build.
Setup also copies the built jar file into the system classpath during
install, so that no classpath environment needs to be set.
Install a register command to register the package with pypi via a
locally-mapped file: .pypirc, written at build time with pypi creds.

@twneale Ready for your review.

This is a mammoth contribution, and a huge improvement. Thank you!
I tested out the setup.py install ("pip install --egg ." on this branch, for the record) and the jar copy did error out due to lack of permissions, so what I'm wondering @dzwarg is whether there's a way to make "pip install py4jdbc" accept flags or additional commands when invoked so that: 1) if the jar file needs to be built it gets built, and perhaps deposited at a location specified by a CLI arg, and 2) if the user wants it copied to the system class path, perhaps they pass another flag for that?
For the default case, it's probably best to skip building the assembly jar, the typical use case being when we're running a scheduled job on jenkins and we pull a pre-built assembly jar from HDFS (including many other driver jars) to achieve a speedup. Automatically building the jar in that scenario would prolong the job quite a bit and we wouldn't even end up using the auto-built jar.
Thoughts? I think py4j follows a similar approach and leaves people on their own as far as building the jar. Their circle CI config builds it on the fly before running the tests, but setup.py expects people to separately build it.
Thank you again @dzwarg for this mighty overhaul.

Also, I was just double-checking python 2.7 type annotations, and they work but they have to be placed in comments. I'd be open to just removing all the annotations in the interests of 2.7 compatibility, which is a much bigger benefit if my view. At some future (possibly boozy) juncture we can always try to revive the annotations as comments.

@twneale Can you take a look at these command line argument changes? I added:

--with-jar: as an argument to build: True/False; as an argument to install: "system" or a file path where the jar should be installed.

If system is specified, it assumes root privileges. This is consistent with the way other installations work (install will try to install into site-packages, which require root/sudo permissions, too).

@dzwarg This is awesome, totally awesome. I'm sending you a small pull request on your branch and I think it'll be ready.


Add on crashes on boot "Killed"

Describe the bug
Add on crashes on boot (see log below). "Killed"
To reproduce
Start addon
In logs you will see some boot info and then "killed"
Expected behavior
Add on boots and stays on
Additional information
Go to Settings -> System -> Repairs -> Click on 3 dots (...) -> System Information and get Version and Installation Type to below fields;

Home Assistant Installation Type (OS - Supvervised - Core): OS

Home Assistant Core Version: 2023.11.3

Eufy Security Add-on Version: 1.7.1

Eufy Security Integration Version: 7.7.4

Debug Logs from Home Assistant (https://github.com/fuatakgun/eufy_security/discussions/624) - Without this, I will automatically resolve this issue

2023-11-29 08:41:52.120 WARNING (SyncWorker_2) [homeassistant.loader] We found a custom integration eufy_security which has not been tested by Home Assistant. This component might cause stability problems, be sure to disable it if you experience issues with Home Assistant
2023-11-29 08:41:52.122 WARNING (SyncWorker_2) [homeassistant.loader] We found a custom integration hacs which has not been tested by Home Assistant. This component might cause stability problems, be sure to disable it if you experience issues with Home Assistant

Logs from Eufy Security Add-on (either from Add-ons page of Home Assistant or Docker output):
Documentation
Configuration
Log
eufy-security-ws
s6-rc: info: service s6rc-oneshot-runner: starting
s6-rc: info: service s6rc-oneshot-runner successfully started
s6-rc: info: service fix-attrs: starting
s6-rc: info: service fix-attrs successfully started
s6-rc: info: service legacy-cont-init: starting
s6-rc: info: service legacy-cont-init successfully started
s6-rc: info: service legacy-services: starting
s6-rc: info: service legacy-services successfully started
2023-11-29 14:23:10.335  DEBUG [undefined.constructor] Loaded API
{
apieBase: 'https://security-app.eufylife.com',
country: 'US',
username: 'redacted
persistentData: {
user_id: 'redacted
email: 'redacted
nick_name: 'dom***',
device_public_keys: {},
clientPrivateKey: 'redacted
serverPublicKey: 'redacted
}
}
2023-11-29 14:23:10.614  DEBUG [EufySecurity._initializeInternals] Load previous login_hash
{
login_hash: 'redacted
}
2023-11-29 14:23:10.887  DEBUG [EufySecurityServer.start] Starting server on host <IP_ADDRESS>, port 3000
2023-11-29 14:23:10.958  INFO  [EufySecurityServer.start] Eufy Security server listening on host <IP_ADDRESS>, port 3000
2023-11-29 14:23:11.000  DEBUG [HTTPApi.login] Login and get an access token
{
token: null,
tokenExpiration: null,
options: {
force: false
}
}
2023-11-29 14:23:11.076  DEBUG [HTTPApi.request] Api request
{
method: 'post',
endpoint: 'v2/passport/login_sec',
responseType: undefined,
token: null,
data: {
ab: 'US',
client_secret_info: {
public_key: redacted
},
enc: 0,
email: 'redacted
password: '[***]',
time_zone: -21600000,
transaction: 'redacted
}
}
Killed
s6-rc: info: service legacy-services: stopping
s6-rc: info: service legacy-services successfully stopped
s6-rc: info: service legacy-cont-init: stopping
s6-rc: info: service legacy-cont-init successfully stopped
s6-rc: info: service fix-attrs: stopping
s6-rc: info: service fix-attrs successfully stopped
s6-rc: info: service s6rc-oneshot-runner: stopping
s6-rc: info: service s6rc-oneshot-runner successfully stopped

Would you share your device with me in case further debugging required? (Yes/No): ?

same problem see Connection to Eufy Security add-on is broken, retrying in background! #1020

@akicker did you get yours figured out?

No, problem still pending :-(Von meinem/meiner Galaxy gesendet
-------- Ursprüngliche Nachricht --------Von: Handcrafted Media @.> Datum: 01.12.23  23:16  (GMT+01:00) An: fuatakgun/eufy_security @.> Cc: Guss @.>, Mention @.> Betreff: Re: [fuatakgun/eufy_security] Add on crashes on boot "Killed" (Issue
#1024)
@akicker did you get yours figured out?
—Reply to this email directly, view it on GitHub, or unsubscribe.You are receiving this because you were mentioned.Message ID: @.***>

Please reach out to bropat if you are sure that your operating system is now killing the add-on for some other reason

After giving my instance more ram and CPUs it fixed the issue!

Disabling SQLite Web Addon did help 👍

I have SQLite add-on and it is not causing any issues.
So, please check your OS, add-on is being killed externally.


Audio Switcher Client Issue

Details:
Audio Switcher
Version: <IP_ADDRESS>
Operating System: Microsoft Windows NT 6.1.7601 Service Pack 1 64-bit
Administrator Privileges: True
User Comments:
Installing graphic drivers
Stacktrace:
System.UnauthorizedAccessException: Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))
   at System.Runtime.InteropServices.Marshal.ThrowExceptionForHRInternal(Int32 errorCode, IntPtr errorInfo)
   at AudioSwitcher.AudioApi.CoreAudio.PropertyStore.<get_Count>b__0()
   at AudioSwitcher.AudioApi.CoreAudio.PropertyStore.<>c__DisplayClass8.<Contains>b__7()
   at System.Threading.Tasks.Task`1.InnerInvoke()
   at System.Threading.Tasks.Task.Execute()

This is an issue with devices being updated and are in an invalid state.
I'll look at adding a new device state of invalid, and use that for the devices that aren't quite ready for queries.


Create LastTimeOnline plugin [simple version]

This plugin will allow developers to check how long user has been offline and use this knowledge to modify some parts of app beheviar.
For example if user is offlien more than one hour he cant aadd anything to cart (only to wishlist)

https://github.com/filrak/offline-timer - now everything that's left is integration to a plugin