test(negative): stress cpu/mem during volume attach detach

https://github.com/longhorn/longhorn/issues/6951

According to https://confluence.suse.com/pages/viewpage.action?spaceKey=LON&title=Negative+Testing Phase 3 - 9. Increase CPU load on the nodes and 10. High memory consumption
It first inject the negative factor:
1. Deploy multiple apps on the cluster to increase the load of the CPU or on individual node increase load on CPU.

1. Deploy multiple apps on the cluster to increase memory consumption or on individual node increase the memory consumption.

And then run the for loop to do longhorn operations:
2. Perform the operations for a time period of 15-30 mins.

So probably in these test cases we inject high cpu/memory usage first, just like what we did in control plane node network latency, and then enter the for loop. And you don't even have to deal with duplicated stress pod.

This is still a valid test case from my perspective. The user started off with an unstressed environment, and over time, there could be an increase in CPU and memory pressure. The scenario you've highlighted specifically tests the behavior of a pre-stressed environment, which I believe is also covered during the iteration of the test loop.
As for the duplicated stress pod, it's a general fix since we are keeping the LOOP_COUNT as an open parameter, so the timeout of the stress pod should reflect individual test runs and even the test run time. If not, it might terminate before the tests are completed. Do you have any concerns about that fix?


Additional model tests

Motivation and Context

Some of the required tests in pull request #4593 were missing. These additional tests ensure callback functionality in FlexibleCriterion and Annotation models.
Your Changes

Description:
New examples in flexible_criterion_spec to test overridden scale_marks callback.
New examples in annotation_spec to test modify_mark_with_deduction callback.
Type of change (select all that apply):

[ ] Bug fix (non-breaking change which fixes an issue)
[ ] New feature (non-breaking change which adds functionality)
[ ] Breaking change (fix or feature that would cause existing functionality to change)
[ ] Refactoring (internal change to codebase, without changing functionality)
[x] Test update (change that modifies or updates tests only)
[ ] Other (please specify):

Testing

Ran the rspec files in question.
Questions and Comments (if applicable)

Checklist

[x] I have performed a self-review of my own code.
[x] I have fixed any Hound bot comments (check after opening pull request).
[x] I have verified that the TravisCI tests have passed (check after opening pull request).
[ ] I have reviewed the test coverage changes reported on Coveralls (check after opening pull request).

Required documentation changes (if applicable)

Hmm, coveralls was not triggered?

I think it was just delayed.


Add interruptible operation

object ZIO {
  def interruptible[R, E, A](zio: ZIO[R, E, A]): ZIO[R with UninterruptibleEscape, Nothing, Exit[E, A]]

  def uninterruptible[R, E, A](zio: ZIO[R with UninterruptibleEscape, E, A]): ZIO[R, E, A]
}

Thanks to types, interruptible can only be nested inside uninterruptible, whereupon it returns an Exit[E, A] that reflects how the "interruptible section" evaluated.
Note that interruptible allows only localized catching of interruption. Outside the highest uninterruptible, the fiber will still be in an interrupted state and will still terminate.
Examples
Simplified Bracket
ZIO.uninterruptible {
  for {
    a    <- acquire
    exit <- use(a).interruptible.ensuring(release(a))
    b    <- IO.done(exit)
  } yield b
}

/cc @mvv

A couple of points/questions:

I would be cautious to introduce the ability to do something other than ZIO.interrupt on the effect interruption in ZIO.interruptible(effect), "eaten up" interruptions could be hard to debug. I also suspect it would make implementation a bit more tricky. Do you see it as an essential feature?

Would effect be interruptible in
def foo = { ... ZIO.interruptible(effect) ... }.uninterruptible
def bar = { ... foo ... }.uninterruptible // Author of bar does not necessarily know about foo implementation
bar

?

Would you agree that queue.take.interruptible.uninterruptible should not be interruptible after a value is dequeued from queue?

I could give implementing this a try after semantics is clarified.

A fiber interrupted will still be set into interrupted state regardless of whether it's in interruptible or uninterruptible. However, it will only actually begin the winddown process when it's not in an uninterruptible state, or when in it's in an interruptible state inside an uninterruptible state. In the latter case (uninterruptible { ... interruptible { } ... }), the fiber can be locally interrupted, bringing control back to inside the parent uninterruptible, but of course with a None value. The parent uninterruptible can decide what if anything to do about that, including merely yield IO.interrupt to pass along the interruption.

Does that make sense / seem well-defined?

Would you agree that queue.take.interruptible.uninterruptible should not be interruptible after a value is dequeued from queue?

This turns on interruptibility inside the take, so it can be interrupted inside there, and if it is, then it enters the parent as a None, who then has to deal with that.

Why Option[A] rather than an interrupted IO?

Unlike Haskell's mask* family, the .interruptible API here is not tied to the enclosing uninterruptible, so the meaning of something like this
def x = abc.interruptible

Would change non-locally depending on whether there is a surrounding .uninterruptible scope or not. This may be surprising. Purely theoretically IMHO,  the best behavior API reasoning-wise might be:
def x = IO.uninterruptibleWith {
  unmask => unmask(abc)
}

Where unmask closure provided to the user is uniquely tied to the uninterruptible scope created with uninterruptibleWith (e.g. there's an equivalent of Map[Long, InterruptionContext] with var interruptionCtxCounter: Long in FiberContext), such that even if the user cheats and returns unmask as in
IO.uninterruptibleWith(IO.succeed)

the closure would become a no-op when leaving the specific uninterruptible scope that spawned it.
It's likely overkill, but I think would give you the most reasonable, forcibly-local, semantics.

@kaishh The runtime behavior of the closure still depends on where it is applied (inside or outside the right block). So I'm not sure it changes anything.
We could, however, make it statically impossible to put interruptible anywhere except inside an uninterruptible block:
def interruptible(zio: ZIO[R, E, A]): ZIO[R with Interruptible, E, A]

def uninterruptible(zio: ZIO[R with Interruptible, E, A]): ZIO[R, E, A]

Now you have to stuff the interruptible inside the uninterruptible block, since it's the only way to eliminate Interruptible from R.

Why Option[A] rather than an interrupted IO?

Assuming the user can orElse inside the uninterruptible section, e.g. myInterruptible orElse myBackup, then they are equivalent. The use of Option forces the user to deal with the possibility that the interruptible section was in fact interrupted. Hopefully leading to better logic, because the user using the code will have to deal at the type level with the case of interruption. Rather than just silently ignore it.
I'm flexible though.

Yes, I figured that was the reason. How about Exit[Nothing, A]? That way we can also preserve the rest of the fiber structure that was interrupted.
I like the intersection with Interruptible, but that is inconsistent with the fact that everything in ZIO is interruptible (except what's uninterruptible).

This Interruptible marker could be renamed InsideUninterruptible or something. The idea is not that it is interruptible, but that it is interruptible and must occur inside an uninterruptible block to have meaning. Maybe UninterruptibleEscape.

Yes, I figured that was the reason. How about Exit[Nothing, A]? That way we can also preserve the rest of the fiber structure that was interrupted.

How about a full-on Exit[E, A]? It's weird to put the defects in one place but the failure in another place. Also you have to lose information anytime you pull a Cause apart.

Right I get you. I like the Masked/Unmasked terminology but that may be a bit obscure for anyone not into Haskell / IRQs :-P
So ZIO[R, Nothing, Exit[E, A]]? 👍

Also, I like the IO.uninterruptible { unmask =>. It makes it easier to reason about what's happening with regards to interruption. Does that satisfy the original requirement?
Everything converges to GHC's model eventually...

Also, I like the IO.uninterruptible { unmask =>. It makes it easier to reason about what's happening with regards to interruption.

I want to understand this one. How does it make reasoning easier? I suppose you only have to follow the umask thread (where it is passed, etc.) in order to see what could be interrupted. Enforcing it has now effect unless used properly could be a bit tricky.
I think that's an alternative approach to Exit[E, A]. The reason being: the Exit[E, A] forces the interruption to the value level, where you have to deal with it explicitly. You can look at the type and determine that you might not get your A out anymore, and you have to decide what to do with that in your uninterruptible section.

For added security, we could tag the R returned by interruptible with UninterruptibleEcape or something. Just so there's no way to run one of those.
Actually, it occurs to me that the taggling alone kind of solves the global reasoning problem. If you have a ZIO with UninterruptibleEscape as part of R, you know it can be interrupted.
Maybe that negates the need both for unmask as well as Exit[E, A]. The types tell you everything.

def inner(p: Promise[E, A]) = promise.await.interruptible

def outer =
  (for {
     p <- Promise.make[E, A]
    _ <- inner(p)
  } yield ()).uninterruptible

Looking at these two functions, any sort of tagging (type-level / value-level) would be sufficient to make reasoning about interruption possible. So yes, I agree.

Sorry, almost true: adding Exit or Option has an additional benefit that forces you to also deal with the value-level implications of interruption inside outer.

All right so new proposal:
def interruptible(zio: ZIO[R, E, A]): ZIO[R with UninterruptibleEscape, E, A]

def uninterruptible(zio: ZIO[R with UninterruptibleEscape, E, A]): ZIO[R, E, A]

with or without Option[A] for the interruptible one.
This formulation ensures:

You can't actually put an interruptible anywhere, except inside an uninterruptible, so its meaning never changes depending on the location because its location is constrained by types.
You will always know, by looking at types, if some code you are passed is secretly interruptible.
The fact that (2) is true prevents the need for global reasoning; local reasoning is sufficient.

Cool 👍

Interestingly, this is similar to the ZIO.lock design and somewhat to the supervision design. What's the general pattern here? Monadic regions?

I like this one better. Implementation-wise, how R with UninterruptibleEscape is supposed to be constructed in uninterruptible?
On Fri, Mar 29, 2019, 09:40 John A. De Goes<EMAIL_ADDRESS>wrote:

All right so new proposal:
def interruptible(zio: ZIO[R, E, A]): ZIO[R with UninterruptibleEscape, E, A]
def uninterruptible(zio: ZIO[R with UninterruptibleEscape, E, A]): ZIO[R, E, A]
with or without Option[A] for the interruptible one.
This formulation ensures:

You can't actually put an interruptible anywhere, except inside an
uninterruptible, so its meaning never changes depending on the location
because its location is constrained by types.
You will always know, by looking at types, if some code you are
passed is secretly interruptible.
The fact that (2) is true prevents the need for global reasoning;
local reasoning is sufficient.

—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/scalaz/scalaz-zio/issues/706#issuecomment-477886704,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AAN1eAqLMYNz2PxwE9ml6dUiSBAgwsIPks5vbbVBgaJpZM4cPzh6
.

With a cast since it's a phantom.

@iravid Yes, monadic regions.
@kaishh No need even for a cast with a cool trick I developed while prototyping ZIO[Effect with EffectAsync, E, A]. I ended up abandoning it because cost / benefit ratio didn't feel right, but looks like it may come in handy here...

@jdegoes
Unfortunately, Scala fails to infer R when
def uninterruptible[R >: LowerR, E <: UpperE, A](zio: ZIO[R with UninterruptibleEscape, E, A]): ZIO[R, E, A]

is applied to an effect that does not use interruptible, e. g.
def foo[R, E, A](zio: ZIO[R, E, A]): ZIO[R, E, (A, A)] =
  ZIO.uninterruptible(zio.flatMap(a => zio.map((a, _))))

fails with
type mismatch;
[error]  found   : scalaz.zio.ZIO[R(in method foo),E,(A, A)]
[error]  required: scalaz.zio.ZIO[R(in method uninterruptible) with scalaz.zio.InsideUninterruptible,E,(A, A)]
[error]     ZIO.uninterruptible(zio.flatMap(a => zio.map((a, _))))

@mvv You're missing a type bound on R, aren't you?

@jdegoes
Where? foo is a valid program (vs uninterruptible type signature), it just needs type parameters to be explicitly specified:
def foo[R, E, A](zio: ZIO[R, E, A]): ZIO[R, E, (A, A)] =
  ZIO.uninterruptible[R, E, A](zio.flatMap(a => zio.map((a, _))))

@mvv
We should work on type inference for this.
I clarified the (ongoing) spec above, so that instead of Option[A], it returns Exit[E, A], and am beginning to see how to implement it. Basically by tracking interrupt count and by internally using redeem to catch the full cause (modifying the conditions that allow it to do so) The tricky parts are at the boundaries (making sure the runtime stops unwinding the stack at the edge of interruptible) and making sure the interrupt -= 1 occurs in an ensuring.

@jdegoes
I still think that the whole Option/Exit thing is crummy (I personally would not need it 99% of the time). I would much prefer to have two combinators, each doing it's own thing, i.e (forget about R for a minute):
def interruptible(zio: ZIO[R, E, A]): ZIO[R, E, A]

only affects interruptibility of zio and
def evaluate(zio: ZIO[R, E, A]): ZIO[R, Nothing, Exit[E, A]]

that allows you to "catch" any Cause you want. Then, if you really need it, you can use
evaluate(interruptible(zio)).flatMap {...}

@mvv evaluate is currently named .sandbox

@kaishh @jdegoes
Less work to do ). Regardless of the user-facing type signature, interruptible can then be implemented with Finalizers only (already done that in #580). I'll try draft a PR this weekend, the UninterruptibleEscape and Exit stuff can be added on top of it.

I'm not opposed to having interruptible return the same type. It may be a little unexpected for a developer coding in an uninterruptible section to have to deal with interruption, but at least we have it in the type so it will be discoverable.

@mvv Spec clarified. Better now?
I still think how you want to use this is dangerous. 😉
In some cases the async operation will acquire the result, but before it has a chance to resume the fiber, the fiber will be interrupted, resulting in a leak of whatever resource it represents. Maybe this is ok in your application. The ultimate solution would be to use Managed, which is the only safe way of doing interruptible acquisition (because you get the cleanup action that is always run after the initial allocation). Whether you can use it depends on if you can make some "reserve token" that you can use to do cleanup. Some third-party APIs cannot have such a thing.
Anyway, despite potential for leaks if used improperly, if we do this thing correctly, it will enable use to make simpler versions of bracket and give power users a way out. While still not requiring global reasoning because of the type constraints on R.

@jdegoes
Made the PR (#724). Tackled inference for Scala, but not for Dotty. Will add tests tomorrow. Re-implemented bracket*, effectAsyncM and raceWith seem to test fine.


[feature] cron or exact time scheduler / or trigger check via webhook

Version and OS
newest docker image
Is your feature request related to a problem? Please describe.
i have an automations that run at exact time, so i need to run www site check at exact time  only once a day. current setup doesn't meet my needs
Describe the solution you'd like
to have an option to:

provide exact time the  check will run or
invoke check using webhook (for instance from home assistant)

Describe the use-case and give concrete real-world examples
i check some sites in the morning and want to run some automations now ots.more or less random run time..

duplicate https://github.com/dgtlmoon/changedetection.io/issues/164

invoke check using webhook (for instance from home assistant)

actually this is a great idea and very simple to implement, can be added to the current API https://changedetection.io/docs/api_v1/index.html

thanks so that could solve a problem with scheduled check.
if api available then i will pause check (to not run job) and then trigger change from external source at exact time.

https://changedetection.io/docs/api_v1/index.html#api-Watch-Watch
it already supports ?recheck=true when fetching single watch data


Add Profile: https://github.com/RustamovAkrom

A pull request should be created from this issue if not kindly ping @dinxsh ⚠

@RustamovAkrom


Native routing on EKS in ENI mode does not work for Pods on secondary ENIs

Is there an existing issue for this?

[X] I have searched the existing issues

What happened?
When deploying Cilium to an EKS cluster on AWS in ENI mode, the Cilium feature for extending native routing is not working for pods which have an IP from a secondary ENI. The following provides a standalone example to reproduce the problem.
Configuration files:
# EKS cluster configuration
cat <<EOF >eks.yaml
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig
metadata:
  name: cilium-test
  region: eu-central-1
  version: "1.24"
vpc:
  cidr: <IP_ADDRESS>/16
managedNodeGroups:
  - name: ng-1
    instanceType: t3.large
    desiredCapacity: 2
    privateNetworking: true
EOF

# Cilium Helm configuration
cat <<EOF >values.yaml
enableIPv4Masquerade: true
ipv4NativeRoutingCIDR: <IP_ADDRESS>/8
egressMasqueradeInterfaces: eth+
tunnel: disabled
ipv4:
  enabled: true
ipv6:
  enabled: false
bpf:
  masquerade: false
ipam:
  mode: eni
eni:
  enabled: true
EOF

# K8s deployment configuration for testing the routing
cat <<EOF >app.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp
spec:
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
        - name: myapp
          image: quay.io/cilium/json-mock:v1.3.2
EOF

Setup:
# create the cluster and connect to it
eksctl create cluster -f eks.yaml
aws eks --region eu-central-1 update-kubeconfig --name cilium-test

# delete the AWS CNI before installing Cilium and wait for it to be completely deleted
kubectl -n kube-system delete daemonset aws-node
kubectl -n kube-system wait --for=delete pod -l app.kubernetes.io/name=aws-node

# install Cilium and wait for it
helm upgrade -i cilium cilium --repo https://helm.cilium.io --version 1.12.7 -f values.yaml -n kube-system
cilium status --wait

# deploy the test app and scale it up to ensure that multiple ENIs are allocated for the cluster nodes
kubectl apply -f app.yaml
kubectl scale deployment/myapp --replicas 40

Analysis:
# watch the traffic on the eth1 interface, filtering by the IP <IP_ADDRESS> for which native routing
# should be applied according to the Helm configuration (the IP itself is fake)
kubectl debug -it cilium-2dp8s -n kube-system --image itsthenetwork/alpine-tcpdump -- tcpdump -i eth1 -vvv host <IP_ADDRESS>

# check the IP rules of to see that routing through different ENIs is configured and pick one pod
# which gets routed through the secondary interface eth1
kubectl exec -it -n kube-system cilium-2dp8s -- ip rule

# then find the pod for the ip rule above by its IP and do a curl request on it to the IP <IP_ADDRESS>
#
# in the TCP dump started above, you will see requests to <IP_ADDRESS> through the eth1 interface,
# while the source IP is from one of the cluster nodes which is on the eth0 interface
kubectl exec -it myapp-598fd55558-t7bbd -- curl https://<IP_ADDRESS>

Detected issues:

Cilium seems to route traffic from a node IP on eth0 through some other ENI (eth1, eth2, ...).
Cilium seems to apply some masquerading for IPs in the range configured to use native routing.

NOTE: I just reported a similar issue in #23933 which might be technically related to this one but it affects a different Cilium feature which is why I created separate issues.
Cilium Version
1.12.7 (1.13.0 seems to have the same issue)
Kernel Version
AWS Linux 5.10.165-143.735.amzn2.x86_64 (the same issue occurs w/ other AWS Linux distributions like Bottlerocket)
Kubernetes Version
1.24
Sysdump
cilium-sysdump-20230222-132353.zip
Relevant log output
> kubectl get pods -o wide
NAME                     READY   STATUS    RESTARTS   AGE     IP             NODE                                           NOMINATED NODE   READINESS GATES
myapp-598fd55558-2846v   1/1     Running   0          5m18s   <IP_ADDRESS>     ip-10-0-182-84.eu-central-1.compute.internal   <none>           <none>
myapp-598fd55558-2cdgs   1/1     Running   0          5m18s   <IP_ADDRESS>    ip-10-0-182-84.eu-central-1.compute.internal   <none>           <none>
myapp-598fd55558-2p5j7   1/1     Running   0          5m18s   <IP_ADDRESS>    ip-10-0-138-15.eu-central-1.compute.internal   <none>           <none>
myapp-598fd55558-4jnwx   1/1     Running   0          5m18s   <IP_ADDRESS>   ip-10-0-138-15.eu-central-1.compute.internal   <none>           <none>
myapp-598fd55558-4zx94   1/1     Running   0          5m18s   <IP_ADDRESS>   ip-10-0-138-15.eu-central-1.compute.internal   <none>           <none>
myapp-598fd55558-5v9gs   1/1     Running   0          5m18s   <IP_ADDRESS>   ip-10-0-182-84.eu-central-1.compute.internal   <none>           <none>
myapp-598fd55558-6hqs2   1/1     Running   0          5m18s   <IP_ADDRESS>    ip-10-0-182-84.eu-central-1.compute.internal   <none>           <none>
myapp-598fd55558-6w6dt   1/1     Running   0          5m18s   <IP_ADDRESS>    ip-10-0-182-84.eu-central-1.compute.internal   <none>           <none>
myapp-598fd55558-7dc6v   1/1     Running   0          5m18s   <IP_ADDRESS>     ip-10-0-138-15.eu-central-1.compute.internal   <none>           <none>
myapp-598fd55558-7w5zl   1/1     Running   0          5m18s   <IP_ADDRESS>     ip-10-0-182-84.eu-central-1.compute.internal   <none>           <none>
myapp-598fd55558-8zf5l   1/1     Running   0          5m18s   <IP_ADDRESS>    ip-10-0-182-84.eu-central-1.compute.internal   <none>           <none>
myapp-598fd55558-948sc   1/1     Running   0          5m18s   <IP_ADDRESS>     ip-10-0-182-84.eu-central-1.compute.internal   <none>           <none>
myapp-598fd55558-b8qxd   1/1     Running   0          5m29s   <IP_ADDRESS>   ip-10-0-138-15.eu-central-1.compute.internal   <none>           <none>
myapp-598fd55558-bh2xs   1/1     Running   0          5m18s   <IP_ADDRESS>    ip-10-0-182-84.eu-central-1.compute.internal   <none>           <none>
myapp-598fd55558-cflrk   1/1     Running   0          5m18s   <IP_ADDRESS>     ip-10-0-138-15.eu-central-1.compute.internal   <none>           <none>
myapp-598fd55558-dj55b   1/1     Running   0          5m18s   <IP_ADDRESS>    ip-10-0-138-15.eu-central-1.compute.internal   <none>           <none>
myapp-598fd55558-ftvq7   1/1     Running   0          5m18s   <IP_ADDRESS>   ip-10-0-182-84.eu-central-1.compute.internal   <none>           <none>
myapp-598fd55558-fvssk   1/1     Running   0          5m18s   <IP_ADDRESS>   ip-10-0-138-15.eu-central-1.compute.internal   <none>           <none>
myapp-598fd55558-fxz8q   1/1     Running   0          5m18s   <IP_ADDRESS>    ip-10-0-138-15.eu-central-1.compute.internal   <none>           <none>
myapp-598fd55558-g8drm   1/1     Running   0          5m18s   <IP_ADDRESS>     ip-10-0-182-84.eu-central-1.compute.internal   <none>           <none>
myapp-598fd55558-h6cn7   1/1     Running   0          5m18s   <IP_ADDRESS>    ip-10-0-138-15.eu-central-1.compute.internal   <none>           <none>
myapp-598fd55558-h8tm8   1/1     Running   0          5m18s   <IP_ADDRESS>    ip-10-0-138-15.eu-central-1.compute.internal   <none>           <none>
myapp-598fd55558-hmm8c   1/1     Running   0          5m18s   <IP_ADDRESS>   ip-10-0-182-84.eu-central-1.compute.internal   <none>           <none>
myapp-598fd55558-jj7rs   1/1     Running   0          5m18s   <IP_ADDRESS>   ip-10-0-182-84.eu-central-1.compute.internal   <none>           <none>
myapp-598fd55558-kb6q9   1/1     Running   0          5m18s   <IP_ADDRESS>     ip-10-0-138-15.eu-central-1.compute.internal   <none>           <none>
myapp-598fd55558-ldpl4   1/1     Running   0          5m18s   <IP_ADDRESS>    ip-10-0-182-84.eu-central-1.compute.internal   <none>           <none>
myapp-598fd55558-lxkp5   1/1     Running   0          5m18s   <IP_ADDRESS>    ip-10-0-138-15.eu-central-1.compute.internal   <none>           <none>
myapp-598fd55558-np492   1/1     Running   0          5m18s   <IP_ADDRESS>    ip-10-0-182-84.eu-central-1.compute.internal   <none>           <none>
myapp-598fd55558-pljwd   1/1     Running   0          5m18s   <IP_ADDRESS>    ip-10-0-182-84.eu-central-1.compute.internal   <none>           <none>
myapp-598fd55558-q2wpg   1/1     Running   0          5m18s   <IP_ADDRESS>   ip-10-0-138-15.eu-central-1.compute.internal   <none>           <none>
myapp-598fd55558-s9rpb   1/1     Running   0          5m18s   <IP_ADDRESS>   ip-10-0-138-15.eu-central-1.compute.internal   <none>           <none>
myapp-598fd55558-stgvx   1/1     Running   0          5m18s   <IP_ADDRESS>     ip-10-0-182-84.eu-central-1.compute.internal   <none>           <none>
myapp-598fd55558-t6zxs   1/1     Running   0          5m18s   <IP_ADDRESS>     ip-10-0-138-15.eu-central-1.compute.internal   <none>           <none>
myapp-598fd55558-t7bbd   1/1     Running   0          5m18s   <IP_ADDRESS>   ip-10-0-138-15.eu-central-1.compute.internal   <none>           <none>
myapp-598fd55558-wblbv   1/1     Running   0          5m18s   <IP_ADDRESS>    ip-10-0-138-15.eu-central-1.compute.internal   <none>           <none>
myapp-598fd55558-xfxnp   1/1     Running   0          5m18s   <IP_ADDRESS>    ip-10-0-182-84.eu-central-1.compute.internal   <none>           <none>
myapp-598fd55558-xqvlh   1/1     Running   0          5m18s   <IP_ADDRESS>    ip-10-0-182-84.eu-central-1.compute.internal   <none>           <none>
myapp-598fd55558-z5xlp   1/1     Running   0          5m18s   <IP_ADDRESS>    ip-10-0-138-15.eu-central-1.compute.internal   <none>           <none>
myapp-598fd55558-zddnc   1/1     Running   0          5m18s   <IP_ADDRESS>    ip-10-0-182-84.eu-central-1.compute.internal   <none>           <none>
myapp-598fd55558-zdrpv   1/1     Running   0          5m18s   <IP_ADDRESS>   ip-10-0-138-15.eu-central-1.compute.internal   <none>           <none>

> kubectl exec -it -n kube-system cilium-2dp8s -- ip rule
9:	from all fwmark 0x200/0xf00 lookup 2004
20:	from all to <IP_ADDRESS> lookup main
20:	from all to <IP_ADDRESS> lookup main
20:	from all to <IP_ADDRESS> lookup main
20:	from all to <IP_ADDRESS> lookup main
20:	from all to <IP_ADDRESS> lookup main
20:	from all to <IP_ADDRESS> lookup main
20:	from all to <IP_ADDRESS> lookup main
20:	from all to <IP_ADDRESS> lookup main
20:	from all to <IP_ADDRESS> lookup main
20:	from all to <IP_ADDRESS> lookup main
20:	from all to <IP_ADDRESS> lookup main
20:	from all to <IP_ADDRESS> lookup main
20:	from all to <IP_ADDRESS> lookup main
20:	from all to <IP_ADDRESS> lookup main
20:	from all to <IP_ADDRESS> lookup main
20:	from all to <IP_ADDRESS> lookup main
20:	from all to <IP_ADDRESS> lookup main
20:	from all to <IP_ADDRESS> lookup main
20:	from all to <IP_ADDRESS> lookup main
20:	from all to <IP_ADDRESS> lookup main
20:	from all to <IP_ADDRESS> lookup main
100:	from all lookup local
109:	from all fwmark 0x80/0x80 lookup main
111:	from <IP_ADDRESS> to <IP_ADDRESS>/16 lookup 11
111:	from <IP_ADDRESS> lookup 11
111:	from <IP_ADDRESS> to <IP_ADDRESS>/16 lookup 11
111:	from <IP_ADDRESS> to <IP_ADDRESS>/8 lookup 11
111:	from <IP_ADDRESS> to <IP_ADDRESS>/8 lookup 10
111:	from <IP_ADDRESS> to <IP_ADDRESS>/8 lookup 11
111:	from <IP_ADDRESS> to <IP_ADDRESS>/8 lookup 12
111:	from <IP_ADDRESS> to <IP_ADDRESS>/8 lookup 10
111:	from <IP_ADDRESS> to <IP_ADDRESS>/8 lookup 10
111:	from <IP_ADDRESS> to <IP_ADDRESS>/8 lookup 11
111:	from <IP_ADDRESS> to <IP_ADDRESS>/8 lookup 12
111:	from <IP_ADDRESS> to <IP_ADDRESS>/8 lookup 11
111:	from <IP_ADDRESS> to <IP_ADDRESS>/8 lookup 10
111:	from <IP_ADDRESS> to <IP_ADDRESS>/8 lookup 10
111:	from <IP_ADDRESS> to <IP_ADDRESS>/8 lookup 12
111:	from <IP_ADDRESS> to <IP_ADDRESS>/8 lookup 11
111:	from <IP_ADDRESS> to <IP_ADDRESS>/8 lookup 11
111:	from <IP_ADDRESS> to <IP_ADDRESS>/8 lookup 12
111:	from <IP_ADDRESS> to <IP_ADDRESS>/8 lookup 11
111:	from <IP_ADDRESS> to <IP_ADDRESS>/8 lookup 12
111:	from <IP_ADDRESS> to <IP_ADDRESS>/8 lookup 11
111:	from <IP_ADDRESS> to <IP_ADDRESS>/8 lookup 12
111:	from <IP_ADDRESS> to <IP_ADDRESS>/8 lookup 11
111:	from <IP_ADDRESS> to <IP_ADDRESS>/8 lookup 12
111:	from <IP_ADDRESS> to <IP_ADDRESS>/8 lookup 12
512:	from all to <IP_ADDRESS> lookup main
512:	from all to <IP_ADDRESS> lookup main
1024:	from all fwmark 0x80/0x80 lookup main
32766:	from all lookup main
32767:	from all lookup default

> kubectl debug -it cilium-2dp8s -n kube-system --image itsthenetwork/alpine-tcpdump -- tcpdump -i eth1 -vvv host <IP_ADDRESS>
12:28:45.072840 IP (tos 0x0, ttl 63, id 47990, offset 0, flags [DF], proto TCP (6), length 60)
    ip-10-0-138-15.eu-central-1.compute.internal.57032 > ip-10-99-99-99.eu-central-1.compute.internal.443: Flags [S], cksum 0x0204 (incorrect -> 0x6efe), seq<PHONE_NUMBER>, win 62727, options [mss 8961,sackOK,TS val<PHONE_NUMBER> ecr 0,nop,wscale 7], length 0
12:28:46.097953 IP (tos 0x0, ttl 63, id 47991, offset 0, flags [DF], proto TCP (6), length 60)
    ip-10-0-138-15.eu-central-1.compute.internal.57032 > ip-10-99-99-99.eu-central-1.compute.internal.443: Flags [S], cksum 0x0204 (incorrect -> 0x6afd), seq<PHONE_NUMBER>, win 62727, options [mss 8961,sackOK,TS val<PHONE_NUMBER> ecr 0,nop,wscale 7], length 0
12:28:48.113992 IP (tos 0x0, ttl 63, id 47992, offset 0, flags [DF], proto TCP (6), length 60)
    ip-10-0-138-15.eu-central-1.compute.internal.57032 > ip-10-99-99-99.eu-central-1.compute.internal.443: Flags [S], cksum 0x0204 (incorrect -> 0x631d), seq<PHONE_NUMBER>, win 62727, options [mss 8961,sackOK,TS val<PHONE_NUMBER> ecr 0,nop,wscale 7], length 0

Anything else?
No response
Code of Conduct

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

Hi, Did you end up to assess this issue?
We are experiencing this exact situation.

I dig into this from last week to this.
This issue and https://github.com/cilium/cilium/issues/23933 are kind of resovled by this https://github.com/cilium/cilium/pull/22000.
The root cause of the issue is cilium agent doesn't understand the AWS infra route-table setup and might pick a wrong subnet(it will pick a public subnet in your eksctl setup but with no EIP mapping from pod to EIP). You can use

Hi,
This happened with only one existing subnet. No public subnets existed in the particular eks cluster we've experienced this.
I'm currently working on putting the findings together to share, but I think the issue was related to a high rate of new connections and the fact aws lbs start reusing previous ports immediately after 60 seconds elapsed of the previous use and sometimes the entries on the time_wait state in the pods network namespaces take a bit more to clean out.

Sorry, I comment on the wrong issue. I was talking about https://github.com/cilium/cilium/issues/23933


Deduplicate common environments.

This can be especially useful for those pipelines with many cross-language transforms.

Thank you for your contribution! Follow this checklist to help us incorporate your contribution quickly and easily:

[ ] Mention the appropriate issue in your description (for example: addresses #123), if applicable. This will automatically add a link to the pull request in the issue. If you would like the issue to automatically close on merging the pull request, comment fixes #<ISSUE NUMBER> instead.
[ ] Update CHANGES.md with noteworthy changes.
[ ] If this contribution is large, please file an Apache Individual Contributor License Agreement.

See the Contributor Guide for more tips on how to make review process smoother.
To check the build health, please visit https://github.com/apache/beam/blob/master/.test-infra/BUILD_STATUS.md
GitHub Actions Tests Status (on master branch)

See CI.md for more information about GitHub Actions CI or the workflows README to see a list of phrases to trigger workflows.

R: @chamikaramj

Is this ready to be merged?

Just trying to ensure everything is green. Looks like WordCountIT.test_wordcount_it failed with
QUOTA_EXCEEDED: Instance 'beamapp-runner-0325174918-03251049-a16z-harness-8857' creation failed: Quota 'IN_USE_ADDRESSES' exceeded.  Limit: 1200.0 in region us-central1.
which isn't relevant to this change but I'm re-running to be sure it's all OK.


Add fulltext search example

No app is complete without the full-text search. https://www.algolia.com is awesome. We can sync two databases (Firebase + anything else) easily with super awesome https://github.com/firebase/firebase-queue.

Over the scope of Este. It belongs to wiki.


Filterbox in the subscription list in the publisher displays values only in the current page

Description
Filterbox in the subscription list in the publisher is only displaying values which are in the current page. All the values in the subscription list should populate the filterbox.
Steps to Reproduce

Publish an api
Create two users
Subscribe to the api multiple times through different applications : To create 2 or more pages in the subscription list
Go to subscriptions page for the api in Publisher portal.
Try to filter the Subscriptions based on the values available on the second page

Affected Component
APIM
Version
4.2.0
Environment Details (with versions)
No response
Relevant Log Output
No response
Related Issues
No response
Suggested Labels
No response

This is not reproducible in APIM 4.3.0
If you encounter this problem again or have any additional concerns, please feel free to reopen the issue or create a new one.


Image: bug fixed.

1.修复 当前src值(小图) 不在previewSrcList（大图预览列表） 中,导致第一次点击预览是空的问题.
2.目前只有第一次预览大图的时候,才支持键盘和鼠标事件.关闭后再次预览事件无效.（由于在hide的时候事件被移除）
Please make sure these boxes are checked before submitting your PR, thank you!

[x] Make sure you follow Element's contributing guide (中文 | English | Español | Français).
[x] Make sure you are merging your commits to dev branch.
[x] Add some descriptions and refer relative issues for you PR.

CI is broken? Maybe you can check your code. Thanks for your pull request anyway.


docs: Remove unused definitions

Reference
Code review checklist

We probably should still have some kind of definition of done though shouldn't we? Maybe we should make this more user friendly rather than chuck it out completely?

Good idea - do you have any suggestions? Right now it is just a wall of text we never really look into, and might be more process than we need in the group.

Given that tests have to past and code peer-reviewed before it can be merged (these are strictly enforced anyway), I'd say some of the criteria are a bit redundant. Perhaps we can have a quick discussion in our next retro?? to decide what we want or need? Some sort of list might be useful, but only if it is followed....


[Question] Is it possible to define the table name at run time?

Hi, I would like to be able to define the table name at run time. Right now, at least from what I gathered I can only specify the table name with the @Model config options , which seems to be defined only at the definition of the model itself.
Regards,

updateDynamoEasyConfig({
  tableNameResolver: (tableName: string) =>  `myPrefix-${tableName}`
 })

Please have a look here:
https://shiftcode.gitbook.io/dynamo-easy/api/dynamo-easy-config/configuration#tablenameresolver

thank you @simonmumenthaler


Fixed example queries

@mkotsabiuk : Thanks for your contribution! The author(s) have been notified to review your proposed change.

Looks good; thanks.


fix: Cohere inconsistent embeddings and documents lengths

I am looking into this issue https://github.com/deepset-ai/haystack-core-integrations/issues/283 and found a bug that I think is unrelated.
Update:
Running the code in issue https://github.com/deepset-ai/haystack-core-integrations/issues/283 shows that the changes in this branch do seem to help. See comment here.
Basically we were copying the embeddings so we'd end up with twice as many embeddings as documents. I don't think this will fix the error brought up in issue https://github.com/deepset-ai/haystack-core-integrations/issues/283, but we should avoid doing this.
Additional:

also fixed some failing integration tests

Hey @ZanSara I'm noticing that the integration tests that require a Cohere API key are not running in CI. Is this on purpose or should we be able to run them?

Hey @sjrl, thank you for this PR! Let's split the two things though:

the bugfix in one PR, so I can approve it right away, and
issue + PR for the Cohere tests, we need to address that separately and other tests might need fixing
Thank you for your help!

Thanks for this fix. When will the release be cut for https://pypi.org/project/cohere-haystack/?

released: https://pypi.org/project/cohere-haystack/0.3.1/


ui: Add package manager options to ORT Run creation form

This PR adds the ability to also set options for package managers as part of the analyzer job configuration. When using the rerun functionality, the options are copied to the new run and in the analyzer configuration section of the form, all package managers for which options are set are opened by default.
Setting options for package managers:

Options are also copied to the job configurations part of ORT run results:

Please see the commits for details.

Can we keep the checkbox in the same line as the package manager name, and not align it vertically across all options?

And a question: Are PM options maintained when rerunning? My expectation would be that they are.

Yes. By default no options are set, but as said in the description and the corr. commit message, they are maintained when rerunning.

Can we keep the checkbox in the same line as the package manager name, and not align it vertically across all options?

I am not sure, I think I need to consult @mmurto as to how to change the DOM to do this.


Improving User Experience and behaviour

Here, I noticed that several buttons are used for different functionalities to enhance the user experience. However, I can assist you in further improving it by adding alternate text to each button. The buttons include: File Download, File Upload, Apply DalleAI, and Color Picker. If you find this helpful, please assign me the task so that I can make the necessary improvements.

Lets do it but if you can make the customization page more better in UI, it will be great and this request is on my behalf. Do not worry if you're not available to do that 😊.

I'm available and ready to work on enhancing the UI of the customization page.

@neeraj542 you wanna work on the customizer page or i have to close this ?


Get a response

Is there any way to get the response (if any) that a command might generate? The documentation link isn't working.

I've fixed the link to the documentation, thank you!
In the README, you can find an example of how to run a single SSH command (and get the response) or how to open a SSH shell to run multiple commands. You can also take a look at the example project in the repo.


Feature/kanban

Origin

Kanban.vue

Changes
Creates the prop:

:column-count: [Array] - An array of values or Objects with { id, value } matching your columns' items value

:column-count =[2, 12, 0]"
:column-count =[
        { id: 2, value: 11 },
        { id: 0, value: 2 },
        { id: 1, value: 90 },
    ]

Evidences

Hi, I just found this PR involving kanban, the "Kanban" component is imported from kanban.vue, but I couldn't find this file anywhere as shown in the demo code

Hi @fabioselau077
Here it is: Kanban
Full path: docs/src/.vuepress/components/kanban.vue

Depois de comentar eu fiquei procurando até achar hahaha
Obrigado, Leo!


fix: chrome extension csp error

💻 变更类型 | Change Type

[ ] ✨ feat
[x] 🐛 fix
[ ] 💄 style
[ ] 🔨 chore
[ ] 📝 docs

🔀 变更说明 | Description of Change
After integrating the SidePanel environment into our browser plugin, we encountered a Content Security Policy (CSP) violation triggered by sending messages. Upon investigation, it was found that the issue stemmed from the use of the lodash template method. This problem occurred regardless of whether the inputTemplate was used or not, preventing message sending.
To resolve this, we modified the implementation to only use the template method when inputTemplate is utilized, which successfully fixed the error.

https://developer.chrome.com/docs/extensions/reference/manifest/content-security-policy
https://lodash.com/docs/4.17.15#template

For a more comprehensive solution to this issue in the future, an Ahead-of-Time (AOT) compilation approach is required. Fortunately, the official lodash documentation provides a solution to this problem, which can be found here: https://github.com/lodash/lodash/issues/832.
📝 补充信息 | Additional Information

感觉还需要更多的场景，我开了个 issue 后面有类似的我们都在这里面跟进好了 https://github.com/ant-design/pro-chat/issues/48

感觉还需要更多的场景，我开了个 issue 后面有类似的我们都在这里面跟进好了 #48

Chrome Sidebar Panel 机器人


Facebook graph API v2.5

Hi,
I had to create a new FB App but kept all the code the same except for updating the keys and secret.
I notice now the call made to v2.5 only returns the "name" and the "Id" if the user, not there email and everything else like it did before.
@sahat I just wonder if that is your experience of you create a new App and update all the v2.3's to 2.5 too - or anyone else for that matter. Or is the issue my new apps configure somehow (I just want the standard profile).
I read their Api and the fields are core, just wasn't sure if it breaks satellizer.
I can't lower the Api version to 2.3 either sadly.

Yeah I can confirm new apps with API 2.5 do not return email address anymore. But works fine on my existing v2.3 Facebook app.

So it seems you have to explicitly pass the fields with permissions that you want to get, otherwise it only returns Name and ID.

So a temporary solution, you will need to update your back-end URL that makes a Graph API request:
// Node.js
var graphApiUrl = 'https://graph.facebook.com/v2.3/me?fields=name,email';

Add additional fields if necessary.
I will look into how to streamline this process instead of hardcoding permissions in the URL.

I ended up using the following approach:
var fields = ['id', 'email', 'first_name', 'last_name', 'link', 'name'];
var graphApiUrl = 'https://graph.facebook.com/v2.5/me?fields=' + fields.join(',');

I didn't want to add those fields to Satellizer.js because everyone has different requirements. The nice thing is even if you, for example, do not ask for email permission when signing in with Facebook, this Graph API won't throw an error, it will simply return all other fields except an email.
99f562d540df3137dd83794283b27d6213ba8658

Hello, i noticed one weird thing with the latest version of Satellized and FB api v2.5
Once i click on "login with fb" i get the standard FB popup asking me to login. But once i login i do NOT get the permissions screen (this one:).

The popup closes and it returns a valid token to my server. However, the issue is that i didn't get the permissions screen, and i wasn't able to give permissions to the app. Therefore i can't get stuff like user email or other things, i can only get user ID and user name, because the token doesn't have proper scopes set.
If i login to my FB account, i don't see the app anywhere under my activity logs, it's like i never logged in. I tried using several different FB app IDs(canvas app, web app, etc), it was always the same.
This is the URL of the login popup that i get
https://www.facebook.com/login.php?skip_api_login=1&api_key=409617592570102&signed_next=1&next=https%3A%2F%2Fwww.facebook.com%2Fv2.5%2Fdialog%2Foauth%3Fredirect_uri%3Dhttp%253A%252F%252Fpostblazer.dev%252F%26display%3Dpopup%26scope%3Demail%252Cpublic_profile%26response_type%3Dcode%26client_id%3D409617592570102%26ret%3Dlogin&cancel_url=http%3A%2F%2Fpostblazer.dev%2F%3Ferror%3Daccess_denied%26error_code%3D200%26error_description%3DPermissions%2Berror%26error_reason%3Duser_denied%23_%3D_&display=popup
Any ideas? Thank you!

@dejan7 Assuming you are using a valid client id, client secret, redirect uri from your Facebook app, and you say you don't have this app under your Facebook account settings, then I don't see any reason why you don't see the permissions screen. I have never experienced such an issue. On many occassions, I would remove my "Satellizer Local" app from Facebook Apps, and the permissions dialog always shows up.

@sahat Yeah it's really weird, i have no clue why is this happening. I triple checked all the keys and my code. I'm looking through satellizer source too, if i manage to find the problem in satellizer's code i'll create a pull request.


Question/Feature Request: Check distribution of unique values in column

Scenario: We have a bunch of tables that each contain the same column C that has unique values in [0, 10]. Each table has a different unique distribution of those values and we want to check that the distributions are as we expect, with some tolerance.
Example:

Table 1

1: [0.4, 0.5] (at least 40% and at most 50% of values in C are = 1)

Table 2

1: [0, 0.01] (at most 1% of values in C are = 1)
2: [0.6, 1] (at least 60% of values in C are = 2)

All tables:

0: [0, 0] (no values are 0)
3-10: [0, 0.05] (at most 5% of values in C are >= 3)

How would you achieve something like this nicely in datajudge?
Thanks a lot!

Hi!
Generally speaking, if you'd like to make statements about whether two empirical, categorical distributions are drawn from the same data-generating process, something like a two-sample Chi-squared hypothesis test might be the go to. We don't have such a test implemented in datajudge as of now but would be open to if this would clearly help you.
My current understanding of your use case is that you'd like to do something different anyway - for which existing datajudge functionalities should already help.

Table 1
1: [0.4, 0.5] (at least 40% and at most 50% of values in C are = 1)

req = WithinRequirement.from_table("table1", ...)
req.add_n_rows_min_constraint(
    n_rows_min = .4 * n,
    condition = Condition(raw_string="C = 1")
)
req.add_n_rows_max_constraint(
    n_rows_min = .5 * n,
    condition = Condition(raw_string="C=1")
)

where n, the total number of rows, would need to be determined ahead of time. If this would be useful to you, we could add a relative reference value to add_n_rows_max/min_constraint - instead of only having the current, absolute one. Just lmk.
I think the other examples are analogous.
These examples are all comparing one table at a time against a fixed reference value (say 40% and 50%). One may also want to change this and compare tables against each other. This would work very similarly, using e.g. add_n_rows_max_gain_constraint and a Condition for both tables.

Thanks, relative numbers would be a useful addition here! That said, I feel like the interface in this particular case is cumbersome. It's not clear to me in what cases one specifies things in the **kwargs of an add_..._constraint method and in what cases things must go into Condition.

So far I've solved most of the checks (the lower-bound ones) using
add_numeric_between_constraint(col, n, n, lower_bound)

but that's also a little cumbersome because it only allows for a lower bound and it requires me to pass n twice.

It's not clear to me in what cases one specifies things in the **kwargs of an add_..._constraint method and in what cases things must go into Condition.

The add_x_constraint method of a WithinRequirement often has three key parameters:

column or columns: specifying that the constraint is to be applied to a specific column or collection thereof
a reference value; in this case n_rows_min or n_rows_max in a different scenario it could be the desired mean of a numeric column
a tolerance criterion; in this case nothing in a different scenario it could be the tolerated deviation from a mean.

Importantly, the reference value parameter vanishes when using BetweenRequirements.
Now these parameters rather serve the logical definition of the test - one could say the structure. The Condition rather serve to further specify what data is ingested into said test - one could say the content, a subselection of rows to feed into it.
Most importantly I would say that nothing must be done in a specific way - whatever works for you. With free text Conditions and features such as creating Requirements from free text queries we gave in to users' requests to have more flexibility. This inevitably leads to situations where the same (or a similar) thing can be done in several ways.

Thanks, relative numbers would be a useful addition here!

Sure, we can take a stab at that.

That said, I feel like the interface in this particular case is cumbersome.

If you'd like to further elaborate on what you find cumbersome, I'm all ears.

One source of confusion/annoyance is that if you go from
# Check that C=1 for at least 90% of rows
add_numeric_between_constraint(C, 1, 1, 0.9)

a small variant of this
# Check that C=1 for at least 90% and at most 95% of rows
add_n_rows_min_constraint(
    n_rows_min_rel=0.9,
    condition = Condition(raw_string="C = 1")
)
add_n_rows_max_constraint(
    n_rows_max_rel=0.95,
    condition = Condition(raw_string="C = 1")
)

you'll end up using an entirely different interface.
What adds to the confusion is that in the first example the number of rows is in the tolerance parameter whereas in the second one it is in the reference parameter, and the vice-versa with the condition C=1.
Maybe in this case it is fixed easily by adding a relative upper bound to add_numeric_between_constraint.

One source of confusion/annoyance is that if you go from [...] to a small variant of this [...] you'll end up using an entirely different interface.

I'd argue that that's to be expected since these constraints do entirely different things based on different assumptions. One might argue that using a numeric_between_constraint in this scenario is a bit of a stretch since one applies it to a categorical, i.e. not a numerical column.
More generally I would argue that if using functionality in a way it isn't intended - which is totally fine - the usage will indeed look differently from what was intended.

in the first example the number of rows is in the tolerance parameter

I figure one might interpret it that way - I wouldn't. I would consider the min_fraction parameter as a reference value. My motivation is as follows: If one was to swap this within-test with a between-test, it would vanish: one would say that one expect roughly the same mass (min_fraction) to lie between bounds a and b for both tables. A tolerance parameter, on the other hand, would persist.

One might argue that using a numeric_between_constraint in this scenario is a bit of a stretch since one applies it to a categorical

Fair point! How does my argument change if it were a numerical column and I'd like to test 2.71 <= C <= 3.14?

I would consider the min_fraction parameter as a reference value

But then what are lower_bound and upper_bound? If not reference values, are they conditions? Then why don't they go to the condition= part?

Fair point! How does my argument change if it were a numerical column and I'd like to test 2.71 <= C <= 3.14?

There I would say that I'd advise against using add_n_rows_min or n_rows_max since one would replicate with conjunction and Conditions (which one often can, given the power of free text) what add_numerical_between_constraint already does for one.
With categoricals I would a priori advise to use add_numerical_between_constraint because it wasn't built for categoricals and could therefore behave or look a little strange.

But then what are lower_bound and upper_bound? If not reference values, are they conditions? Then why don't they go to the condition= part?

They fulfill the a similar role as the column or columns parameters and could've totally gone into a Condition. Since they will be used every single time this Constraint is used, this is meant to be a more convenient option.

If this would be useful to you, we could add a relative reference value to add_n_rows_max/min_constraint - instead of only having the current, absolute one. Just lmk.

On second thought I'm no longer convinced that this would make sense. Rather, I'd suggest the following:
req = BetweenRequirement.from_table("table1", ..., "table1", ...)
req.add_n_rows_min_gain_constraint(
    constant_max_relative_loss = .4,
    condition1 = Condition(raw_string="C = 1"),
    condition2 = None,
)
req.add_n_rows_max_gain_constraint(
    constant_max_relative_loss = .5,
    condition1 = Condition(raw_string="C = 1"),
    condition2 = None,
)

Basically, the conditioned table is compared with the non-conditioned table.

Thanks! I would not be able to come up with this way of thinking about this particular check on my own. I think we will just prefer hand-written SQL in this case:
def test_c1_40_50(engine):
	total_count = engine.execute("select count(*) from T")
	c1_count = engine.execute("select count(*) from T where C=1")
	assert 0.4 <= c1_count / total_count <= 0.5

@kklein @0xbe7a does #145 implement this or is it something different?


[Tooling] configure all-contributors bot

Setup all-contributors bot to recognise contribution easily

@all-contributors please add @seanwuapps and @luka-bacic for infrastructure, code
@all-contributors please add @seanwuapps for doc and test

@all-contributors please add @luka-bacic for infrastructure, code
@all-contributors please add @seanwuapps for infrastructure, code, doc, example and test

@all-contributors please add @luka-bacic for infra and code

@all-contributors please add @luka-bacic for infra and code

@all-contributors please add @seanwuapps for infra, code, doc, example and test


Desktop screenshot

Use case
I need to take screenshots of whole desktop and send it to cloud. This is to track user activity at random intervals.

Proposal
I came to flutter desktop development to build and release for windows, Linux, and Mac.
We need these features to build real desktop applications.

There are third-party packages for this but no official functionality yet as far as I know. Labeling as a new feature request due to this.

This is not something that would be implemented within Flutter itself, or as a first-party plugin, as it's not a common need for desktop software. I recommend filing feature requests for desktop support in one or more of the existing plugins on pub.dev that take native screenshots.

There are third-party packages for this but no official functionality yet as far as I know. Labeling as a new feature request due to this.

Hello, could you tell me which package is for this? Thank you. I am new to desktop development, didn't get the search keyword.

Yes it’s from iPhone 6 , used a third party app called ibeesoft recovery
too retrieve deleted photos , Facebook messages , text messages. What your
seeing is iPhone backup memory files recovery by by ibeesoft.com
On Mon, Aug 2, 2021 at 8:03 PM Shoothzj @.***> wrote:

There are third-party packages for this but no official functionality yet
as far as I know. Labeling as a new feature request due to this.
Hello, could you tell me which package is for this? Thank you. I am new to
desktop development, didn't get the search keyword.
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
https://github.com/flutter/flutter/issues/65360#issuecomment-891410619,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AUVUAAVLZFY7BVWPNXF3ZR3T24W5JANCNFSM4Q7IHD5A
.


Logic with use of return results in dead code

https://forum.littlevgl.com/t/coding-style-use-of-return-in-functions/1731
lv_checkbox.c(168)
lv_cont.c(259)
lv_list.c(630)
lv_win.c(507)
if(info->result != NULL) return LV_RES_OK;
    else return ancestor_signal(win, sign, param);
    return LV_RES_OK;

lv_bar.c(270)
int16_t lv_bar_get_value(const lv_obj_t * bar)
{
    LV_ASSERT_OBJ(bar, LV_OBJX_NAME);

    lv_bar_ext_t * ext = lv_obj_get_ext_attr(bar);
    return ext->cur_value;
    return LV_BAR_GET_ANIM_VALUE(ext->cur_value, ext->cur_value_anim);
}

The one in lv_bar.c is a mistake; only the second statement should be there.

lv_roller.c(774)
if(res != LV_RES_OK) return res;
    return LV_RES_OK;

I've just fixed the mentioned issues. Thank you for pointing them out.
(Sorry for the noise with the commits, I desperately tried to fix the typo in the comment message :sweat_smile:)

lv_bar.c(610)
if(info->result != NULL) return LV_RES_OK;
        else return ancestor_signal(bar, sign, param);
        return LV_RES_OK;

Thanks, I've fixed both of them

lv_draw_mask.c(1042)
static lv_draw_mask_res_t lv_draw_mask_fade(lv_opa_t * mask_buf, lv_coord_t abs_x, lv_coord_t abs_y, lv_coord_t len, lv_draw_mask_fade_param_t * p)
{
    ...
    if(abs_y <= p->cfg.y_top) {
        ...
        return LV_DRAW_MASK_RES_CHANGED;
    } else if(abs_y >= p->cfg.y_bottom) {
        ...
        return LV_DRAW_MASK_RES_CHANGED;
    } else {
        ...
        return LV_DRAW_MASK_RES_CHANGED;
    }
    return LV_DRAW_MASK_RES_FULL_COVER;  <-- dead
}

Suggest either removing the returns in the conditional statements or using a stack variable for the return value.
lv_draw_blend.c(395)
lv_draw_blend.c(665)
LV_LOG_WARN("fill_blended: unsupported blend mode");
return;
break; <-- dead

I'd just remove the break but I suspect some compilers may not like a switch without breaks.

I've just run cppcheck and interestingly wasn't reported these.
Anyway, I've fixed both.

I'd just remove the break but I suspect some compilers may not like a switch without breaks.

Finally, I've left the return only as you suggested. A tend to believe it's not possible to make all the compilers happy at the same time. :smile:

Thank you.


make Buffer compatible with python 3.10 and above

Fix the error on pghoard pipeline for python 3.10 and above
E   ImportError: cannot import name 'Buffer' from 'typing_extensions' (/opt/hostedtoolcache/Python/3.10.13/x64/lib/python3.10/site-packages/typing_extensions.py)
Why this way
In Python 3.10 and later, the Buffer name is no longer provided by typing_extensions. Instead, you can use typing.ByteString or typing.MutableSequence[bytes] as a replacement for Buffer.

Codecov Report

Merging #144 (585a367) into main (1769e1b) will decrease coverage by 0.03%.
Report is 2 commits behind head on main.
The diff coverage is 100.00%.

@@            Coverage Diff             @@
##             main     #144      +/-   ##
==========================================
- Coverage   66.38%   66.35%   -0.03%
==========================================
  Files          35       35
  Lines        3879     3879
==========================================
- Hits         2575     2574       -1
- Misses       1304     1305       +1

Files Changed
Coverage Δ

rohmu/util.py
73.88% <100.00%> (-0.20%)
:arrow_down:

... and 2 files with indirect coverage changes
:mega: We’re building smart automated test selection to slash your CI/CD build times. Learn more

As per: https://github.com/Aiven-Open/pghoard/pull/601
close this PR for now.


Force compliance between ingest validation tools and assay_types.yaml including disallowing validation of mismatched assays.

Stuck from this: https://github.com/hubmapconsortium/ingest-validation-tools/pull/1007


Update secure-azure-computing-architecture.md

Updating Palo Alto naming per the company request

@kyle-hoyer : Thanks for your contribution! The author(s) have been notified to review your proposed change.

@kyle-hoyer : Thanks for your contribution! The author(s) have been notified to review your proposed change.

Looks good; merging.

Looks good; merging.


Improve CI

Codecov Report

Merging #17 into master will not change coverage by %.
The diff coverage is n/a.

@@           Coverage Diff           @@
##           master      #17   +/-   ##
=======================================
  Coverage   86.12%   86.12%
=======================================
  Files           5        5
  Lines         281      281
=======================================
  Hits          242      242
  Misses         39       39

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 7703045...09ba184. Read the comment docs.


Cleanup Task to Delete incomplete Interviews

A cleanup task should be to delete any incomplete interviews for the testing user. There are a couple of different API endpoints that might be useful here:

https://docassemble.org/docs/api.html#user_interviews_delete
https://docassemble.org/docs/api.html#user_interviews
https://docassemble.org/docs/api.html#user_user_id_interviews_delete
https://docassemble.org/docs/api.html#session_delete

Closed wrong issue, sorry

Brainstorming:
This may have an MVP and future improvements. It's possible that one interview could open another interview.

MVP: Delete only the interview initially created by the bot for the Scenario
or MVP: Delete all interviews created through the "I start the interview" Step. I recommend abstracting this further since I already see the potential for future Steps that go to interviews in different ways.
V2: Delete all interviews the bot creates during the whole run of all tests

Is it possible to use the API to give every session a tag so that we can just use the tag to delete all of the user's interviews at once? Maybe using the Project name as the tag? We probably need API access to session_tags(), which I think we'd have to write ourselves. Running as an admin can get any interview, not just the current user's interview, but we can't count on that permission level.
Note: We need to use the auth of the user running the interview, not the auth of the author's API key - sometimes authors "log in" as a different user to test different functionality. I think being in an interview and making a request without a different API key would work (never needed to try it), but can we count on being present in an interview at the time we need to delete it? The user could have navigated away from the interview.
We could change how we navigate to an interview so that each "I start the interview" (or similar) Step opens a new window/tab. When we close up a Scenario, we would delete the interview associated with that window/tab before closing it.

Given:

To delete an interview with the API, the user needs to give us an API key to delete with.
API keys should have the least permissions possible.
We should limit ALKiln as much as is reasonable.

Then:

ALKiln should assume the API key has the most limited permissions possible.
ALKiln should limit its scope as well. ALKiln should only ever try to have a "user" delete their own interview, not allow an author/account to delete any interview on the server. Use only the api/user/interviews endpoint.

Note: We are deleting the interview with API keys. Deleting robotically is slow (introducing more incidental flake) and will run into complications because at some point folks are going to log in as different users in the same test, or use some other complex behavior, and that will be much harder to account for. This is a nice-to-have, not a critical feature. We don't want to make it burdensome if we can reasonably avoid it.
Additional work our authors will have to do:

With an admin account, for the users that 1. log into interviews 2. for whom the author wants to delete old interviews, the admin must create an API key.
Add that API key to the "sign in" Step.
Add that as a GitHub secret or server config var.

Further things to consider:

[ ] Should we check the permissions of the API key instead of getting the id as a proxy for this check?

Warnings to add to the report:

[x] optional API key github/config secret name was given, but doesn't exist
[ ] optional API key env var exists, but has no value
[ ] optional API key env var exists and has a value, but its permission level doesn't allow the action (deleting interviews)

New tests to write:

[ ] Appearance of warnings
[ ] No API key var used
[ ] API key var with missing env var
[ ] Invalid API key
[ ] Valid API key
[ ] Delete interview address after failing to go to the interview
[ ] Delete the interview after successfully starting the interview


Discover state space of programs?

(Feel free to correct me if I'm misunderstanding this!)
It seems like, in order to be able to form the state S, we need to know:

The global variables in play in the script;
Their types (Z3 sorts);
Whether the constraints act on a subset of the global variables (if not, we have an error);
Whether the method atomic actions act on a subset of the global variables (if not, we have an error);
Whether the method local actions act on no global variables (if not, we have an error I guess?);

I'm not sure how we should do this. For 1–2 we could require every global to be given a top-level definition in the script, something like
global int serving;
global int ticket;

(and maybe a new command for defining local variables.)  Then, a pass after compilation can just make sure that every LVIdent references a declared global or local.
Alternatively, we could just assume the variables mentioned in atomic actions are the global variables, and infer from their use which type they have, but this could be ambiguous.  The expression to Z3 compiler currently infers types (badly).  I'm not sure I prefer inference, but it might fall under ‘be more useful’ to do it?
3–4 are trivial either way: 3 will be checked either against the global definitions or the method actions, and 4 will either be vacuously true or checked against the global definitions too.  5 should be self-evident, because the global and local variable sets should be disjoint.
Then, S seems like it'd be (at upper bound) the set of assignments from variables to members of the sort sets.

Not sure what this even means any more.  Going to can it for now.


(ubuntu 14.04) Some old requests libs do not have rq.packages.urllib3 and direclty map them to rq.exceptions.RequestException

Fixed by e002c0e066a3ae2b3de46e517df2b4353b8f1993


ESM Loader API has changed in Node 18

Node.js 18 has changed the ESM Loader API, as I'm getting a new error with<EMAIL_ADDRESS>Error [ERR_LOADER_CHAIN_INCOMPLETE]:
        "node-esm-loader 'resolve'" did not call the next hook in its chain and
        did not explicitly signal a short circuit.
        If this is intentional, include `shortCircuit: true` in the hook's return.
    at new NodeError (node:internal/errors:387:5)
    at ESMLoader.resolve (node:internal/modules/esm/loader:860:13)
    at async ESMLoader.getModuleJob (node:internal/modules/esm/loader:439:7)
    at async Promise.all (index 0)
    at async ESMLoader.import (node:internal/modules/esm/loader:541:24)
    at async loadESM (node:internal/process/esm_loader:83:5)
    at async handleMainPromise (node:internal/modules/run_main:65:12) {
  code: 'ERR_LOADER_CHAIN_INCOMPLETE'
}

All my code is still working fine under Node 17.
More information on ESM loader API changes in Node 18.6:

https://github.com/nodejs/node/releases/tag/v18.6.0

Experimental ESM Loader Hooks API
Node.js ESM Loader hooks now support multiple custom loaders, and composition is
achieved via "chaining": foo-loader calls bar-loader calls qux-loader
(a custom loader must now signal a short circuit when intentionally not
calling the next). See the ESM docs for details.
Real-world use-cases are laid out for end-users with working examples in the
article Custom ESM loaders: Who, what, when, where, why, how.
Contributed by Jacob Smith, Geoffrey Booth, and Bradley Farias - https://github.com/nodejs/node/pull/42623

Thanks for notifying! Fixed in #5 and published to npm as v0.1.2. I published a new version of node-esm-loader too which uses this new version under the hood.

awesome, thanks so much!


Outdated Visuals and Code Samples

This document describes setting up attribute based routing with net 4.61 and we're currently on 6.0. The images are from VS 2017 and the current version is 2022. Attempting to follow along with this tutorial in current technologies is difficult as things have changed a little, could we look at perhaps updating this?

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

ID: 6ebcd752-af71-c483-eebb-0745bd04fb30
Version Independent ID: 1f678d5d-230b-0ad0-c925-15b13081f553
Content: Format response data in ASP.NET Core Web API
Content Source: aspnetcore/web-api/advanced/formatting.md
Product: aspnet-core
Technology: aspnetcore-webapi
GitHub Login: @Rick-Anderson
Microsoft Alias: riande

This document describes setting up attribute based routing with net 4.61 and we're currently on 6.0.

Where  is .NET 6.41 mentioned?

The images are from VS 2017 and the current version is 2022.
What image?

If you look at the images on the page, those step you through everything and that's where it shows .net version and outdated visual studio interfaces.

that's where it shows .net version and outdated visual studio interfaces.

Can you provide a screen shot here?

Thank you for contacting us. Due to a lack of activity on this discussion issue we're closing it in an effort to keep our backlog manageable. If you believe there is a concern which hasn't been addressed, please file a new issue.


Incorrect execution of definePageMeta macro

Environment

Operating System: Linux
Node Version:     v16.20.0
Nuxt Version:     3.6.1
Nitro Version:    2.5.2
Package Manager<EMAIL_ADDRESS>Builder:          vite
User Config:      -
Runtime Modules:  -
Build Modules:    -

Reproduction
Use definePageMeta with fields that context depended (tested only layout, probably fails on other fields - if I have correct suspicions)
https://stackblitz.com/edit/nuxt-starter-9reefq?file=pages%2Findex.vue
Describe the bug
I offend this bug when tries to shortcut layout setting
definePageMeta({
  layout,  // <-- definitely known and valid
})

Then I tries to set different forms of exact same value:
definePageMeta({
  layout: layout)  // <-- works on my machine
})

Then I've started my investigation:
  // Text that I've wrote before on stackblitz

  // layout, // broken here and for me
  // layout: alias, // fails for both
  // layout: layout, // works for both (floating error - works always for me, but may fail here)
  // layout: 'default', // Works for both
  // layout: computed(() => layout), // cause graphical artifact for both
  // layout: ref(layout), // works for both
  // layout: false, // works for both (dynamic included layout)

Additional context
I assume that problem in the lazy or incorrect implementation of this macro. For my opinion, "linking" setup values occurs in wrong scope (general theory).
What I suppose you need to check

[ ] Is this error occurs only for this field, or entire macro affected (as I think, not checked)
[ ] Is this error affects all provided macro?
[ ] Is this error can be avoided via wrapping macro in decorator function (*see 1 note)
[ ] Is this error can be avoided via replacing macro by function
[ ] Is this error can be avoided via forcing macro execution (may be partially) on setup stage

Notes
Note 1
What if this error can be avoided via linking values on setup stage and evaluated as usual (instead of defer this action)
const definePageMeta(options: DefinePageMetaOptions) => {
  // Let assume that we renamed original definePageMeta to definePageMetaMacro
  definePageMetaMacro({
    layout: options.layout,
   ...
  })
}

Then, if problem in the stage of macro execution
<script setup lang="ts">

// Will be wrapped and passed to macro
definePageMeta({
  ...
})
</script>

Logs
[nuxt] [request error] [unhandled] [500] layout is not defined                                               12:14:50 AM
  at eval (./pages/index.vue:17:7)
  at ViteNodeRunner.directRequest (./node_modules/vite-node/dist/client.mjs:358:11)
  at async ViteNodeRunner.cachedRequest (./node_modules/vite-node/dist/client.mjs:214:14)
  at async ViteNodeRunner.dependencyRequest (./node_modules/vite-node/dist/client.mjs:248:12)
  at async eval (./virtual:nuxt:/home/projects/nuxt-starter-9reefq/.nuxt/routes.mjs:1:216)
  at async ViteNodeRunner.directRequest (./node_modules/vite-node/dist/client.mjs:358:5)
  at async ViteNodeRunner.cachedRequest (./node_modules/vite-node/dist/client.mjs:214:14)
  at async ViteNodeRunner.dependencyRequest (./node_modules/vite-node/dist/client.mjs:248:12)
  at async eval (./node_modules/nuxt/dist/pages/runtime/plugins/router.js:10:31)
  at async ViteNodeRunner.directRequest (./node_modules/vite-node/dist/client.mjs:358:5)

[nuxt] [request error] [unhandled] [500] layout is not defined                                               12:14:50 AM
  at eval (./pages/index.vue:17:7)
  at ViteNodeRunner.directRequest (./node_modules/vite-node/dist/client.mjs:358:11)
  at async ViteNodeRunner.cachedRequest (./node_modules/vite-node/dist/client.mjs:214:14)
  at async ViteNodeRunner.dependencyRequest (./node_modules/vite-node/dist/client.mjs:248:12)
  at async eval (./virtual:nuxt:/home/projects/nuxt-starter-9reefq/.nuxt/routes.mjs:1:216)
  at async ViteNodeRunner.directRequest (./node_modules/vite-node/dist/client.mjs:358:5)
  at async ViteNodeRunner.cachedRequest (./node_modules/vite-node/dist/client.mjs:214:14)
  at async ViteNodeRunner.dependencyRequest (./node_modules/vite-node/dist/client.mjs:248:12)
  at async eval (./node_modules/nuxt/dist/pages/runtime/plugins/router.js:10:31)
  at async ViteNodeRunner.directRequest (./node_modules/vite-node/dist/client.mjs:358:5)

[nuxt] [request error] [unhandled] [500] layout is not defined                                               12:14:50 AM
  at eval (./pages/index.vue:17:7)
  at ViteNodeRunner.directRequest (./node_modules/vite-node/dist/client.mjs:358:11)
  at async ViteNodeRunner.cachedRequest (./node_modules/vite-node/dist/client.mjs:214:14)
  at async ViteNodeRunner.dependencyRequest (./node_modules/vite-node/dist/client.mjs:248:12)
  at async eval (./virtual:nuxt:/home/projects/nuxt-starter-9reefq/.nuxt/routes.mjs:1:216)
  at async ViteNodeRunner.directRequest (./node_modules/vite-node/dist/client.mjs:358:5)
  at async ViteNodeRunner.cachedRequest (./node_modules/vite-node/dist/client.mjs:214:14)
  at async ViteNodeRunner.dependencyRequest (./node_modules/vite-node/dist/client.mjs:248:12)
  at async eval (./node_modules/nuxt/dist/pages/runtime/plugins/router.js:10:31)
  at async ViteNodeRunner.directRequest (./node_modules/vite-node/dist/client.mjs:358:5)

[nuxt] [request error] [unhandled] [500] layout is not defined                                               12:14:50 AM
  at eval (./pages/index.vue:17:7)
  at ViteNodeRunner.directRequest (./node_modules/vite-node/dist/client.mjs:358:11)
  at async ViteNodeRunner.cachedRequest (./node_modules/vite-node/dist/client.mjs:214:14)
  at async ViteNodeRunner.dependencyRequest (./node_modules/vite-node/dist/client.mjs:248:12)
  at async eval (./virtual:nuxt:/home/projects/nuxt-starter-9reefq/.nuxt/routes.mjs:1:216)
  at async ViteNodeRunner.directRequest (./node_modules/vite-node/dist/client.mjs:358:5)
  at async ViteNodeRunner.cachedRequest (./node_modules/vite-node/dist/client.mjs:214:14)
  at async ViteNodeRunner.dependencyRequest (./node_modules/vite-node/dist/client.mjs:248:12)
  at async eval (./node_modules/nuxt/dist/pages/runtime/plugins/router.js:10:31)
  at async ViteNodeRunner.directRequest (./node_modules/vite-node/dist/client.mjs:358:5)

In general, definePageMeta is a macro and is not executed in the context of the file it is located in. This is so the metadata can be accessed without running the script setup block.
However, in order to make this possible we can't take variables that are defined within the setup function and move them outside the function.
We can however do this with imports, which have implemented.
A PR to the docs would be welcome if it is unclear: see https://nuxt.com/docs/guide/directory-structure/pages/#page-metadata.


Function deduplication

This optimisation pass looks for identical functions and eliminates all but one, replacing calls appropriately.
Ideally this must be run before any other pass, to reduce compile times for all the remaining passes. However, when run before inlining, it impacts some inlining decisions. For example, functions which previously had only a single caller now may have multiple callers, thus preventing them from being inlined. While theoretically that could be good, numbers indicated otherwise. The inliner needs to be tuned before we move dedup ahead of it.
Also, the PR has a minor edit to the order in which inlining is performed on inlining candidates. We now follow lexical order rather than relying on an arbitrary order set by FxHashMap. This was necessary so that equal functions remain equal after inlining. Changing the order of inlining resulted in differences in the order and names of local variables, rendering functions
that were equal before inlining to not be anymore.
Closes #5166
Code size impact on sdk-harness contracts/scripts:

test
before
after
reduction

methods_abi
28
28
0

vec_in_abi
7892
7892
0

type_aliases
172
172
0

tx_predicate
36
36
0

tx_output_predicate
828
828
0

tx_contract
7480
7480
0

token_ops
14332
8512
40.608428691041

test_script_bytes
1140
1140
0

test_script
1620
1620
0

test_contract
6332
5140
18.8250157927985

svec_u8
35800
23640
33.9664804469274

svec_u64
34872
23640
32.2092222986924

svec_u32
35800
23640
33.9664804469274

svec_u16
35800
23640
33.9664804469274

svec_tuple
37192
25048
32.6521832652183

svec_struct
37048
24904
32.7790973871734

svec_str
37040
24896
32.7861771058315

svec_enum
37048
24904
32.7790973871734

svec_bool
35800
23640
33.9664804469274

svec_b256
37040
24896
32.7861771058315

svec_array
37768
25624
32.1542046176657

superabi_supertrait
124
124
0

superabi
124
124
0

storage_vec_to_vec
13308
8720
34.4755034565675

storage_vec_nested
51948
47968
7.66150766150766

storage_string
4620
3436
25.6277056277056

storage_map_nested
74848
57828
22.739418554938

storage_map
120600
40824
66.1492537313433

storage_init
19296
17764
7.93946932006634

storage_bytes
7140
5216
26.9467787114846

storage_access
38388
30712
19.995832030843

storage
16152
12328
23.6750866765726

script_data
392
392
0

script_bytecode
624
624
0

result_in_abi
516
516
0

registers
540
540
0

predicatepredicate_data_struct
388
388
0

predicatepredicate_data_simple
364
364
0

pow
228
228
0

parsing_logs_test_abi
28
28
0

parsing_logs
1244
1244
0

option_in_abi
516
516
0

option_field_order
2672
1804
32.4850299401198

methods_contract
4224
3984
5.68181818181818

messages
876
876
0

logging
400
400
0

hashing
18020
16836
6.57047724750278

generics_in_abi
2584
1732
32.9721362229102

evm_ec_recover
2088
2088
0

evm_test_abi
28
28
0

evm
224
224
0

ec_recover_and_match_predicate
4924
4924
0

ec_recover
2056
2048
0.389105058365759

contract_bytecode
168
168
0

context_testing_abi
28
28
0

context_caller_contract
8200
2568
68.6829268292683

context
404
404
0

configurables_in_script
252
252
0

configurables_in_contract
284
284
0

call_frames_test_abi
28
28
0

call_frames
1196
1196
0

block_test_abi
28
28
0

block
484
484
0

balance_contract
84
84
0

auth_testing_abi
28
28
0

auth_testing_contract
3012
2900
3.71845949535193

auth_caller_script
264
264
0

auth_caller_contract
176
176
0

abi_impl_methods_callable
116
116
0

There's a unit test ICE'ing. Changing this to Draft.

This PR, now, also modifies the IR infrstructure to not store AsmBlock in the arena. Details are in this commit message.


Don't make unnecessary sync updates

This is a nested update. Nested updates are bad for performance. They're also always sync, which isn't good for hydration.
In this case the whole pattern is unfortunate. Instead of a nested update, this should use getDerivedStateFromProps. But for now, this is an OK workaround that should improve perf.

Thanks, I'll address other possible improvements in this method.
@gaearon I had the idea that .setState already does this conditional internally, which would avoid unnecessary updates. Am I assuming this wrong or is there any other problem there?

نعم انه تحديث متداخل وليس مجدي بالنفع،لذا فان النمط برمته مؤسف جدا


how to save list of items to json file

tried this
const market = require('steam-market-pricing');
const fs = require('fs');
const names = [
'MP9 | Storm (Minimal Wear)',
'Sawed-Off | Origami (Well-Worn)'
];
market.getItemsPrices(730, names).then(items => {
fs.writeFileSync('./items.json', items , 'utf-8');
});
result
[object Object]

fs.writeFileSync(file, content) requires content to be a string, you are passing an Object.
To stringify an Object you can use JSON.stringify.


Move cwl-tes repo to a different organization?

As requested by @susheel
It is fine by me, but where to move?

@mr-c Not sure?
@rishidev - GA4GH perhaps?

@susheel Can I infer from your suggestion that we should move all implementations of all GA4GH APIs to the GA4GH org?

@geoffjentry No, not necessarily. Just a suggestion specifically for cwl-tes

@susheel Why would cwl-tes be different from any other implementation here?

@geoffjentry For cwl-tes, GA4GH was just a suggestion, which I now retract.
I think ELIXIR is more appropriate here, as we are the main users of this codebase.

Yes, the sponsoring organization (ELIXIR) should probably own it.

Since this project was created by OHSU, it would make sense to transfer ownership back to one of our organizations.

@adamstruck Happy with that too. Would we have the ability to fork and send you PRs?

@susheel yes of course

@adamstruck tell me the GitHub organization and I'll initiate the move

@mr-c the organization is https://github.com/ohsu-comp-bio/

@adamstruck you'll need to remove it rename your for of cwl-tes and temporarily give me permission to create repository in your organization. Or I can give you admin rights here..

@mr-c could you give me temporary admin rights to this repo so I can move it?

@adamstruck Done. Do you see the option at the bottoms of https://github.com/common-workflow-language/cwl-tes/settings

@mr-c I do not see the option. It says Organization members cannot transfer repositories.

@adamstruck

Members can now delete or transfer repositories.

Look again?

@mr-c Done. Thanks!


⚠ Samsung has degraded performance

In 1d76a8b, Samsung (https://samsung.com) experienced degraded performance:

HTTP code: 200
Response time: 2894 ms

Resolved: Samsung performance has improved in c189ac4.


Remove gs-stats to speed up npm install

Installing gc-stats takes a long time because it has to do a lot of native compilation. In order to make npm install for on-core and its dependents I propose removing it.
I think statsd was only being used to broadcast info from gc-stats and AMQP request times. So I removed that as well. I can add statsd back if this is needed for something.
@benbp @DavidjohnBlodgett @VulpesArtificem

I approve of this, but I'm also wondering whether we want to keep the statsd service in even thought it's not being used, since it's a good example of how to integrate with on-statsd?

@benbp I think so actually. I'm going to add it back in.

was looking over @rolandpoulter shoulder, so I approve! :+1:

Takes about 20 seconds to npm install now.

OMG THANK YOU

lol

:+1:

I'll take that as a :+1: @heckj


wdio bind failing at startup

My PR to alter empathy logging produced a Travis failure that looks unrelated. I haven't looked yet to see if this is a recurring or known issue.
@sjmiles as we recently updated wdio version so maybe it's related.
Starting ChromeDriver 75.0.3770.90 (a6dcaf7e3ec6f70a194cc25e8149475c6590e025-refs/branch-heads/3770@{#1003}) on port 4444
Only local connections are allowed.
Please protect ports used by ChromeDriver and related test frameworks to prevent access by malicious code.
[1564297310.383][SEVERE]: bind() failed: Cannot assign requested address (99)
[0-0] RUNNING in chrome - /shells/tests/specs/demo-test.js

Then we end up with:
[chrome  linux #0-0] 2 failing
[chrome  linux #0-0]
[chrome  linux #0-0] 1) demo pouchdb restaurants
[chrome  linux #0-0] timedout [20] waiting for "[title*="ou are free"]"
[chrome  linux #0-0] Error: timedout [20] waiting for "[title*="ou are free"]"
[chrome  linux #0-0]     at Timeout.setTimeout [as _onTimeout] (/home/travis/build/PolymerLabs/arcs/shells/tests/utils.js:107:14)
[chrome  linux #0-0]     at ontimeout (timers.js:436:11)
[chrome  linux #0-0]     at tryOnTimeout (timers.js:300:5)
[chrome  linux #0-0]     at listOnTimeout (timers.js:263:5)
[chrome  linux #0-0]     at Timer.processTimers (timers.js:223:10)
[chrome  linux #0-0]
[chrome  linux #0-0] 2) demo firebase restaurants
[chrome  linux #0-0] timedout [20] waiting for "[title*="ou are free"]"
[chrome  linux #0-0] Error: timedout [20] waiting for "[title*="ou are free"]"
[chrome  linux #0-0]     at Timeout.setTimeout [as _onTimeout] (/home/travis/build/PolymerLabs/arcs/shells/tests/utils.js:107:14)
[chrome  linux #0-0]     at ontimeout (timers.js:436:11)
[chrome  linux #0-0]     at tryOnTimeout (timers.js:300:5)
[chrome  linux #0-0]     at listOnTimeout (timers.js:263:5)
[chrome  linux #0-0]     at Timer.processTimers (timers.js:223:10)

Locally at ToT and synced to before my PR, I see these two errors:
[chrome  linux #0-0] 1) demo pouchdb gifts
[chrome  linux #0-0] timedout [20] waiting for "[title*="Check manufacturer"]"
[chrome  linux #0-0] Error: timedout [20] waiting for "[title*="Check manufacturer"]"
[chrome  linux #0-0]     at Timeout.setTimeout [as _onTimeout] (/usr/local/google/home/wkorman/workspace/arcs/shells/tests/utils.js:107:14)
[chrome  linux #0-0]     at ontimeout (timers.js:436:11)
[chrome  linux #0-0]     at tryOnTimeout (timers.js:300:5)
[chrome  linux #0-0]     at listOnTimeout (timers.js:263:5)
[chrome  linux #0-0]     at Timer.processTimers (timers.js:223:10)
[chrome  linux #0-0]
[chrome  linux #0-0] 2) demo firebase gifts
[chrome  linux #0-0] timedout [20] waiting for "[title*="Check manufacturer"]"
[chrome  linux #0-0] Error: timedout [20] waiting for "[title*="Check manufacturer"]"
[chrome  linux #0-0]     at Timeout.setTimeout [as _onTimeout] (/usr/local/google/home/wkorman/workspace/arcs/shells/tests/utils.js:107:14)
[chrome  linux #0-0]     at ontimeout (timers.js:436:11)
[chrome  linux #0-0]     at tryOnTimeout (timers.js:300:5)
[chrome  linux #0-0]     at listOnTimeout (timers.js:263:5)
[chrome  linux #0-0]     at Timer.processTimers (timers.js:223:10)

ToT is now green with a CRON build that ran ~10h ago:
https://travis-ci.org/PolymerLabs/arcs/builds/564839416
Are the new tests and/or test infra flaky? Going to leave this open for a bit to consider further.

Afaik,
[1564297310.383][SEVERE]: bind() failed: Cannot assign requested address (99)
happens just about every time on Travis, and has for a while. I've been conditioned to ignore it.

Notes that could fix that here.
Will retitle the issue to note wdio tests are exhibiting flakiness.

We are still seeing wdio flakiness on Travis. Two recent builds with examples:
@csilvestrini https://travis-ci.org/PolymerLabs/arcs/builds/583525796
@sherry-pra https://travis-ci.org/PolymerLabs/arcs/builds/583376167
The error now, however, looks different and solvable but I've not looked more closely, and I'm not sure why it would be flaky:
[0-0] 2019-09-10T22:01:02.207Z ERROR webdriver: Request failed due to session not created: session not created: This version of ChromeDriver only supports Chrome version 75
    at getErrorFromResponseBody (/home/travis/build/PolymerLabs/arcs/node_modules/webdriver/build/utils.js:371:10)
    at Request._callback (/home/travis/build/PolymerLabs/arcs/node_modules/webdriver/build/request.js:122:64)
    at Request.self.callback (/home/travis/build/PolymerLabs/arcs/node_modules/request/request.js:185:22)
    at Request.emit (events.js:189:13)
    at Request.EventEmitter.emit (domain.js:441:20)
    at Request.<anonymous> (/home/travis/build/PolymerLabs/arcs/node_modules/request/request.js:1161:10)
    at Request.emit (events.js:189:13)
    at Request.EventEmitter.emit (domain.js:441:20)
    at IncomingMessage.<anonymous> (/home/travis/build/PolymerLabs/arcs/node_modules/request/request.js:1083:12)
    at Object.onceWrapper (events.js:277:13)

I wish it would say which version of Chrome it's seeing, since it's not version 75...
My guess would be that either wdio was updated, or Chrome on Travis was updated. I'll see if I can find what version Travis has now.

We use Chrome stable on Travis, which is currently version 77. The latest version of ChromeDriver is only version 76, but it seems to work with 77. I'll bump up the version number in package.json


Speed up service_dialog initialization

This speeds up dialog initialization with a big number of dynamic fields.
How it works:

Gets empty dialog with only static fields initialized (API PR: https://github.com/ManageIQ/manageiq-api/pull/567)

Creates hash dynamicFieldsSummary with the following keys:
allDynamicFieldsToInit  - all dynamic fields that should be initialized
allFieldResponders - all dependent fields

Sends api requests for each dynamic field in allDynamicFieldsToInit apart from dependent fields

Updates dynamicFieldsSummary: removes all initialized fields from allDynamicFieldsToInit and updates dependent fields

Repeats 3-4 until allFieldResponders is empty (initDialogFields is a recursive function)

It works with multiple dialogs and tabs and allows to set fields in any order

Cc @eclarizio I guess you'll want to take a look :) (also https://github.com/ManageIQ/manageiq-api/pull/567)

Added pending core, since this depends on the API PR.
@eclarizio Aah, I missed that, yes, a similar change would have to happen in ui-classic as well, and maybe we could refactor the edges a bit, to make it possible to share more of the loading logic between the repos.
@KarinaTiurina is that something you'd be interested in doing?

still waiting for https://github.com/ManageIQ/manageiq-api/pull/567

This is already achievable by setting any individual dynamic field's "Load values on init" to false.
Unless anybody is willing to take on the work, tentatively closing.


Journal - progress record-keeping

Update here: https://colab.research.google.com/drive/1yyUmcaGckAG-WkR0Geuj9DRfrqCz_yf6?usp=sharing

Check in 5: https://www.overleaf.com/6333427533tkpkjjfbxyny
@nguyenhphilip


Select and RadioGroup overflow without manually adding className="relative"

Whenever I use Select or RadioGroup, they "overflow", causing extra scrollbars on the body (despite there being no visible overflow). This seems to be due to some absolutely positioned elements going haywire. Wrapping or making the containers relative helps contain the issue.

@Palmik Can you add screenshot or code sample

@Palmik Can you add screenshot or code sample

I had a similar problem, here is my code
I'm trying to achieve the second effect, but once I add the RadioGroup it turns into the first one.
<Sheet>
        <SheetHeader>...</SheetHeader>
	<SheetContent side={"left"}>
		{/* overflow */}
		<RadioGroup defaultValue="default">
			<Card className={"chat-list-card m-b-10 flex flex-row justify-between items-center"}>
				{/*<RadioGroupItem value="default" id="r1" />*/}

temp-ajsdh7382dbasjoiudg7h8oqh3y2

				<Toggle>
					<Pencil2Icon color="#838383" className="h-4 w-4" />
				</Toggle>
				<Toggle>
					<CrossCircledIcon color="#E5484D" className="h-4 w-4" />
				</Toggle>
			</Card>
		</RadioGroup>
		{/* I want */}
		<Card className={"chat-list-card m-b-10 flex flex-row justify-between items-center"}>

temp-ajsdh7382dbasjoiudg7h8oqh3y2

			<Toggle>
				<Pencil2Icon color="#838383" className="h-4 w-4" />
			</Toggle>
			<Toggle>
				<CrossCircledIcon color="#E5484D" className="h-4 w-4" />
			</Toggle>
		</Card>
	</SheetContent>
</Sheet>

and the singe-line css is
.singe-line {
    text-overflow: ellipsis;
    overflow: hidden;
    word-break: break-all;
    white-space: nowrap;
}

Solved, RadioGroup css display is grid change it to block and it's solved!

This issue has been automatically closed because it received no activity for a while. If you think it was closed by accident, please leave a comment. Thank you.


Dev 0.0.1rc1

Coverage increased (+0.005%) to 98.577% when pulling ecc4a5a29d0a9412b2b2d01b1423beed48335e3d on dev_0.0.1rc1 into 204552ed2bc2c7ea38b511bcac83a24a6f48a998 on master.


Readme update

Summary
Correct use of HL7® FHIR® standard registered trademark.
New behavior
None
Code changes

Change first instance of FHIR to HL7® FHIR® standard. Subsequent uses should be fine as is. Also added a footnote.

Testing guidance

Look at the trademark section in the spec here and make sure I didn't miss anything. Also check the slack thread.
npm run docs should show what the docs page looks like. Make sure the link works there!

Because it should be trademarked at least once per page, I think this should also be done in the contributing.md doc, which I can do in my PR.
I also noticed that the basic type (i.e. boolean) links in the Calculation Options section appear to be broken. They're just empty links, and I'm not sure why they're linked at all. I would probably just remove the links for basic types. Is this in scope to fix in this PR, or do you think it should be a different one?

Ooo good idea on adding to to the contributing.md doc- thanks for doing that! Regarding the basic type links, good catch! I can fix that in this PR :)


fix: total fees calculation

Related issues 🔗
https://vegaprotocol.slack.com/archives/C8WS7M50E/p1663673365339369?thread_ts=1663673045.575679&cid=C8WS7M50E

@asiaznik The fee needs to be changed in the e2e test as well:

@asiaznik The fee needs to be changed in the e2e test as well:

updated


Cannot create identity mapping

Hello,
I've been having issues following the guide. Unfortunately, due to nature of my VPC I cannot use eksctl for eks cluster creation. Instead I'm using CDK construct (https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_eks-readme.html) which creates a simple EKS cluster with 1 node.

Any ideas? Thanks in advance.

Your cluster administrator or a role with access to the cluster needs to give you access for your role. These roles are configured in the aws-auth configmap. By default, the identity that created the cluster always has access.

@ellistarn Onto the next issue...

2022-02-09T21:38:01.417Z	ERROR	controller.provisioning	Could not launch node, launching instances, getting launch template configs, getting launch templates, no security groups exist given constraints	{"commit": "df57892", "provisioner": "default"}

I have a feeling it's related to no security groups exist given constraints as I'm not seeing anywhere in the guide being set and it's a required field. Which security group is this? Of a cluster... or EC2 instance? And where is being set in the guide?
Thanks in advance!

P.S. For subnetSelector I had to steer away from karpenter.sh/discovery: clusterName tag format and stick with older tagging structure karpenter.sh/discovery/clusterName: '*' because we're using a shared VPC with other groups within the same account.
On the other hand... I'm having a hard time figuring out securityGroupSelector (karpenter.sh/discovery: 'clusterName'). Docs are suggesting that if this is not passed it will try to figure it out ( If no security groups are explicitly listed, Karpenter discovers them using the tag “kubernetes.io/cluster/MyClusterName”, similar to subnet discovery.). However... I wasn't able to create a provisioner omitting this or subnet parameter. I get errors.

I found out that cluster SG has the following tags... (I believe instruction guide should be updated with correct tag example)

I've updated provider section in my provisioner in manifest in my CDK code....

Unfortunately... I'm still getting an error... so I'm still investigating... :(

2022-02-09T22:20:23.564Z	ERROR	controller.provisioning	Could not launch node, launching instances, getting launch template configs, getting launch templates, no security groups exist given constraints	{"commit": "df57892", "provisioner": "default"}

According to docs... launch template is optional?... or is it?

@ellistarn  I've commented out launchTemplate portion but I'm still getting this error...

Ah that makes complete sense.

@ellistarn

My next step is to try LT with bottlerocket AMI :D

@ellistarn Thank you so much for all your help!!!

Glad you sorted it out! It definitely gets a bit confusing with k8s style (level triggered reconciliation) and cfn/cdk style (edge triggered updating)

ERROR controller.provisioning Could not launch node, launching instances, getting launch template configs, getting launch templates, no security groups exist given constraints {"commit": "df57892", "provisioner": "default"}

For future reference, I was getting the error above whist trying to install Karpenter 0.30.0 using aws-ia/eks-blueprints-addons/aws terraform module 1.7.2. Managed to fix the problem with following node template configuration:
resource "kubectl_manifest" "karpenter_node_template" {
  yaml_body = <<-YAML
    apiVersion: karpenter.k8s.aws/v1alpha1
    kind: AWSNodeTemplate
    metadata:
      name: default
    spec:
      subnetSelector:
        "kubernetes.io/cluster/${module.eks.cluster_name}": "owned"
      securityGroupSelector:
        "kubernetes.io/cluster/${module.eks.cluster_name}": "owned"
      instanceProfile: ${module.karpenter.instance_profile_name}
      tags:
        "karpenter.sh/discovery": "${module.eks.cluster_name}"
  YAML

  depends_on = [
    helm_release.karpenter
  ]
}