Ensure we log ContainerClose event even if only Container.dispose is called

Description
A Container can be closed, closed-then-disposed, or only disposed.  Previously there was only Container.close, and we are used to looking for the ContainerClose event in telemetry as the single event corresponding to the "end" of a container session.
Now, it's possible the container would be disposed directly without closing first.  In this case, we should still log the ContainerClose event to keep the logs consistent - that can be the single event we monitor for most cases.  And we have the ContainerDispose event to get the full picture if it's present.
Inspired by https://github.com/microsoft/FluidFramework/pull/15192#discussion_r1223736189

Converting to draft since the design is up for debate.
If we don't go this route, then we should for sure have ContainerDispose set its category the same as ContainerClose (maybe unless the container's already closed?  But you could close with Error A then later dispose with Error B)

Good feedback, I'm closing this.  I opened a few ADO items for Kian to follow up on.


About the Effective Receptive Field (ERF) visualization

Hi, thanks for your work! Can you show the code about the Effective Receptive Field (ERF) visualization in your paper. We are interested in this.

Hi, thx for your interest of this work.
The relevant code is being organized, and we will make the code available as soon as possible ;D

The code for ERF visualization is now available.
I will close this issue, and you can re-open it any time you have other issues.

Sorry, I have a simple question. I would like to know how this ERF code is used? May I ask if you can inform me? Thank you！


[fixed] Can't close Modal B on examples

Fixes #725.
Changes proposed:

can close modal B with close button

Acceptance Checklist:

[x] The commit message follows the guidelines in CONTRIBUTING.md.
[ ] Documentation (README.md) and examples have been updated as needed.
[ ] If this is a code change, a spec testing the functionality has been added.
[ ] If the commit message has [changed] or [removed], there is an upgrade path above.

Coverage remained the same at 86.56% when pulling 27b30ac1feab01880f6283c81161ac18f3b31278 on FullMoon04:fix/examples into d4a8a32ada89fd607dacf401b829f6a815a33efa on reactjs:master.

I think this should be merged, it actually fixes the issue.


HWY-59: Implement adaptive round exponent strategy

https://casperlabs.atlassian.net/browse/HWY-59
This implements the strategy described in the paper (although using the same finality threshold for the strategy, as for finalizing blocks - the paper suggests otherwise). Some refinements might be desirable in the future.

I wonder whether the whole strategy (i.e. the round success meter) should actually live outside of Highway, like the FinalityDetector does:
It's not part of the core protocol in the sense that different validators can use different strategies, as long as they are all doing roughly the right thing — increase round lengths until blocks get finalized. It could even be done manually, in theory. (It shouldn't, but it could.)
Highway could just have methods to set some target round exponent, and ActiveValidator would gradually — as far as possible, following the validity rules — adapt the round exponent accordingly.
That might be a simpler and more natural interface than the current one, where you have to put in finality information.
(Also not necessarily something for this PR, of course!)

If we won't have unit tests in this PR, I will feel much better if we test empirically that it does work.

Huh. If they don't, that would explain things :P Let me double-check.

bors r+


Multi-objective optimization support?

Hello there,
I would like to know whether the library supports multo-objective optimization? If so, could you please direct me to an example program? Thank you.

It does not. Multi-objective optimization is beyond the scope of this library.


can i use this package if my offset is stored in kafka not zk ?

can i use this package if my offset is stored in kafka not zk ?

i want to use high level consumer mode && store offset in kafka.

No, this package is built around using ZK for offset storage.


Give Interface.updatePhysicsCouplingControl() a better name

The Interface class has a placeholder for a method called updatePhysicsCouplingControl():
https://github.com/terrapower/armi/blob/d0092e8b022c593e341c09cecb4f597687222417/armi/interfaces.py#L648-L650
Typically the placeholder methods on the Interface class are put there as hooks that are called while looping over the interface stack, and so the Interface class just implements a pass and child interfaces can implement their own. But looking through the ARMI codebase, it doesn't appear that this method is ever called. So what is it?
It turns out that this method is intended to be used in a very specific way which is associated with our internal equilibrium plugin. We have an equilibrium interface, and when it is being run we don't always want all of the interfaces to be executed in the normal way. So when the equilibrium interface runs, it calls to this updatePhysicsCouplingControl() method on all of the other interfaces, each of which has the opportunity to modify its behavior for the equilibrium calculation. This is a pretty weird design choice for quite a few reasons.
But aside from the strange design choice, this method name and docstring do not give any indication of what this method is actually used for. I have the following suggestions, in order of increasing complexity:

At the least, the docstring on the parent class should be updated to indicate that the method is called from within the equilibrium plugin.
In addition to updating the docstring, the method name should be updated to make it obvious what the method is intended to be used for. Maybe something like updatePhysicsCouplingControlForEquilibrium()?
It would make a lot of sense to move the calling of the method from within our internal equilibrium interface onto the operator in ARMI. Wrap it in something like if self.cs["runType"] == operators.RunTypes.EQUILIBRIUM

The method updatePhysicsCouplingControl() is used in subclasses downstream, so that should be dealt with for option (2) above.


Sonobuoy and Rancher kubernetes engine

Hi
I run the e2e test on a rancher kubernetes cluster the result is as follow:

most of the tasks are skipped (from 4992 tasks, 4991 tasks are skipped). why?
I have one test cluster with one node as control palne-etcd-worker role.

Hi @mohjam2004.
What command did you use to run sonobuoy? It looks like you used the --mode quick flag. This mode runs only one test and is intended to be used as an initial check to ensure that the cluster is responding and is reachable before starting a longer test run.
If you omit this flag, Sonobuoy will use the default mode for the e2e plugin which is to run all the conformance tests that are non-disruptive. You can read more about the different e2e modes here: https://sonobuoy.io/docs/v0.18.4/e2eplugin/#built-in-configurations
Even if you use the default mode, you will still see a large number of skipped tests. This is because the image used by Sonobuoy to check conformance contains all the end-to-end tests for Kubernetes. Only a subset of these tests (usually less than 300) are actually required to check conformance: https://sonobuoy.io/docs/v0.18.4/faq/#why-were-so-many-tests-skipped
Most users will not need to run those additional tests unless there is specific behaviour that they wish to check in their cluster (provider specific behaviour, etc.)
I'm going to close this issue, but if you have any further problems, feel free to reopen or open another issue, or come chat to us on Slack.

Hi @zubron
You are right. Now I'm running sonobuoy on default mode to see the results.
That's kind of  you if you send me a invitation link to join rancher work space.
email<EMAIL_ADDRESS>regards

Sonobuoy's slack channel is part of the Kubernetes slack which you can join here: https://slack.k8s.io/. Once signed up, you will be able to join the Sonobuoy channel: https://kubernetes.slack.com/messages/sonobuoy


Update grpc dependency for glibc 2.30 compatibility

System information

OS Platform and Distribution (e.g., Linux Ubuntu 16.04): Arch Linux
Mobile device (e.g. iPhone 8, Pixel 2, Samsung Galaxy) if the issue happens on mobile device: n/A
TensorFlow installed from (source or binary): source
TensorFlow version: 2.0.0
Python version: 3.7.4
Installed using virtualenv? pip? conda?: n/A
Bazel version (if compiling from source): bazel 0.29.1- (@non-git)
GCC/Compiler version (if compiling from source): gcc-8 (GCC) 8.3.0
CUDA/cuDNN version: 10.1.243-1/<IP_ADDRESS>-1
GPU model and memory: NVIDIA GeForce GTX 760 4GB

Describe the problem
When building tensorflow 2.0.0 on a system with glibc version 2.30, the build fails due to a function name clash issue in grpc, which is already fixed (in https://github.com/grpc/grpc/pull/18950) and there are grpc releases available with this fix. I believe updating the grpc dependency should fix this issue in Tensorflow.
Provide the exact sequence of commands / steps that you executed before running into the problem
On Arch Linux:
cd $(mktemp -d /tmp/tensorflow-test-build-XXX)
curl -L -o PKGBUILD 'https://git.archlinux.org/svntogit/community.git/plain/trunk/PKGBUILD?h=packages/tensorflow'
makepkg

If you're not on Arch Linux, have a look at the build script in the PKGBUILD file - it contains all the environment variable definitions and build commands, and is very readable.
Any other info / logs
Include any logs or source code that would be helpful to diagnose the problem. If including tracebacks, please include the full traceback. Large logs and files should be attached.
End of build log:
...
INFO: From Compiling external/llvm/lib/DebugInfo/CodeView/TypeRecordMapping.cpp:
external/llvm/lib/DebugInfo/CodeView/TypeRecordMapping.cpp: In member function 'virtual llvm::Error llvm::codeview::TypeRecordMapping::visitKnownRecord(llvm::codeview::CVType&, llvm::codeview::VFTableShapeRecord&)':
external/llvm/lib/DebugInfo/CodeView/TypeRecordMapping.cpp:293:61: warning: 'Byte' may be used uninitialized in this function [-Wmaybe-uninitialized]
  293 |         Record.Slots.push_back(static_cast<VFTableSlotKind>(Byte >> 4));
      |                                                             ^~~~
ERROR: /tmp/bazel/michiel/output/41c10338046435fcb3c7d7f27ec34951/external/grpc/BUILD:507:1: C++ compilation of rule '@grpc//:gpr_base' failed (Exit 1)
external/grpc/src/core/lib/gpr/log_linux.cc:43:13: error: ambiguating new declaration of 'long int gettid()'
   43 | static long gettid(void) { return syscall(__NR_gettid); }
      |             ^~~~~~
In file included from /usr/include/unistd.h:1170,
                 from external/grpc/src/core/lib/gpr/log_linux.cc:41:
/usr/include/bits/unistd_ext.h:34:16: note: old declaration '__pid_t gettid()'
   34 | extern __pid_t gettid (void) __THROW;
      |                ^~~~~~
external/grpc/src/core/lib/gpr/log_linux.cc:43:13: warning: 'long int gettid()' defined but not used [-Wunused-function]
   43 | static long gettid(void) { return syscall(__NR_gettid); }
      |             ^~~~~~
INFO: Elapsed time: 744.187s, Critical Path: 41.65s
INFO: 3096 processes: 3096 local.

    Aborting...

What I've tried so far to fix this
I tried to emulate the grpc version update from https://github.com/tensorflow/tensorflow/commit/061c3597b84d45a9878b8adf831e39a5573859ec and bump grpc to v1.24.3. Since v1.19.x, which the currently referenced grpc version seems to be from, grpc has added a dependency on https://github.com/protocolbuffers/upb, and it wasn't clear to me how to add and initialise this dependency correctly in a way that's consistent with tensorflow's use of bazel. I specifically wasn't sure where to call grpc_deps()/upb_deps() from, or what equivalent action was required instead.
Context
In case it matters, I'm trying to build the Arch Linux Package from source, so that I can add 3.0 to TF_CUDA_COMPUTE_CAPABILITIES, which is required for my graphics card. I managed to do this for an earlier version of tensorflow some time ago without too much difficulty.

I'm having this exact issue. I've been trying to build version 1.13.0 for the past two days.

I may have found a workaround. I downloaded the tarball for the version of grpc that the version of tensorflow that I'm compiling uses. I extracted the tarball to ~/grpc and manually changed gettid to sys_gettid in the source code. It was only three or four edits.
I set up a local repository of grpc and added it to the WORKSPACE file as a local_repository. I commented out the grpc repository in the tensorflow/workspace.bzl file.
WORKSPACE: (added to bottom of file)
local_repository(
    name = "grpc",
    path = "/home/loophole/grpc",
)

tensorflow/workspace.bzl: (I had to change the sha256 hash and I removed the mirror.bazel.build mirror. That may not be necessary but I downloaded the file from the python.org mirror used the sha256 hash of that file, but I didn't check the hash of the one on bazel.build.)
filegroup_external(
     name = "org_python_license",
      licenses = ["notice"],  # Python 2.0
      sha256_urls = {                                                              "fcaec9796c8cc3618899b4aeb62d1a4741830b682b2d8db502a05f9b93c08937": [            "https://docs.python.org/2.7/_sources/license.rst.txt",
     ],
  },
)

These are the files that needed to have gettid changed to sys_gettid. First I used grep to see which files had gettid in them, then I used nano and pressed ctrl+w to search for gettid:
./src/core/lib/iomgr/ev_epollex_linux.cc
./grpc/src/core/lib/gpr/log_posix.cc
./grpc/src/core/lib/gpr/log_linux.cc

It's still compiling, so I don't know if it's going to work yet.

Target //tensorflow/tools/pip_package:build_pip_package up-to-date:
  bazel-bin/tensorflow/tools/pip_package/build_pip_package
INFO: Elapsed time: 12803.103s, Critical Path: 439.59s, Remote (0.00% of the time): [queue: 0.00%, setup: 0.00%, process: 0.00%]
INFO: 4414 processes: 4414 local.
INFO: Build completed successfully, 4757 total actions

Ah, that's a good workaround approach @l0ophole. There's another way to do that - letting bazel do the patching for us:

Create .patch file with the gettid rename changes using your method, or:

git clone https://github.com/grpc/grpc.git && cd grpc
git checkout 4566c2a29ebec0835643b972eb99f4306c4234a3
git cherry-pick 57586a1ca7f17b1916aed3dea4ff8de872dbf853
# resolve conflicts
git diff [--cached] > /path/to/tensorflow-2.0.0/third_party/grpc/gettid.patch

Make the following change to tensorflow/workspace.bzl:

--- a/tensorflow/workspace.bzl	2019-09-27 22:56:33.000000000 +0100
+++ b/tensorflow/workspace.bzl	2019-10-28 19:19:32.441547370 +0000
@@ -519,6 +519,7 @@
             "https://storage.googleapis.com/mirror.tensorflow.org/github.com/grpc/grpc/archive/4566c2a29ebec0835643b972eb99f4306c4234a3.tar.gz",
             "https://github.com/grpc/grpc/archive/4566c2a29ebec0835643b972eb99f4306c4234a3.tar.gz",
         ],
+        patch_file = clean_dep("//third_party/grpc:gettid.patch"),
     )

     tf_http_archive(

build.

Can you send a PR with this approach please?
Or, do you consider it worthwhile to upgrade grpc?

I would certainly prefer the grpc upgrade: currently tensorflow depends on a specific commit of grpc. This would be a good opportunity to change that dependency to a released version tag. Changing it to a dependency on a specific commit of grpc + patch feels like going in the wrong direction, unless there's a really good justification I'm not aware of - if ever had to file a bug against grpc I'd much rather do that against a released version than against effectively a custom branch.
There's the following note above the grpc dependency in workspace.bzl:
# WARNING: make sure ncteisen@ and vpai@ are cc-ed on any CL to change the below rule

Perhaps they know more (I'm not sure if those are github user ids).

@m01 thanks for the alternate approach. I had never used bazel before this trying to compile this project so I'm sure there are much better ways of patching than the way I did it. :-)
recent versions of grpc aren't affected by this issue, are they? I figured I was having issues because I was trying to compile an old version of tensorflow that had a dependency on an old version of grpc. I thought the gettid patch was already merged into the repository. I was compiling a tarball for an old version from the releases page.

I'll attempt a grpc update this week. It might take a while though.

I'm also on Arch and had the same problem when trying to build jax (which uses xla bits of tensorflow), but following @m01's approach, I managed to build it, thanks a lot!
Just in case other people want a quick temporary measure before @mihaimaruseac completes grpc update, I made a patch here https://github.com/tensorflow/tensorflow/compare/master...hi-ogawa:grpc-backport-pr-18950.
Using GitHub's ".patch" magic url, probably something like this would work:
curl -L https://github.com/tensorflow/tensorflow/compare/master...hi-ogawa:grpc-backport-pr-18950.patch | git apply

@hi-ogawa thanks for the oneliner. @mihaimaruseac maybe we can merge that while you update to latest grpc ?

Apologies for the long delay. We got this fixed now, I think (not my work, but of a concurrent contributor)

I ran into this as well, @hi-ogawa's workaround worked. Which commit fixes it in the mainline tree?

Ah, good to know, thanks!


Infinite recursion when using allowUnfree

Issue description
Using config.nixkpgs.config.allowUnfree to set videservices.xserver.videoDrivers produces this error: infinite recursion encountered, at undefined position
Steps to reproduce
Use this minimal configuration file
{ config, lib, pkgs, ... }:
{
  imports = [ ./hardware-configuration.nix ];

  boot.loader.grub.enable = true;

  nixpkgs.config.allowUnfree = true;

  services.xserver = {
      enable = true;
      videoDrivers = [ (if config.nixpkgs.config.allowUnfree then "nvidia" else "nouveau") ];
  };
}

and try to build it
> nixos-rebuild build -I nixos-config=test.nix
building Nix...
error: infinite recursion encountered, at undefined position
(use ‘--show-trace’ to show detailed location information)
building the system configuration...
error: infinite recursion encountered, at undefined position
(use ‘--show-trace’ to show detailed location information)

Technical details

System: (NixOS: nixos-version, Ubuntu/Fedora: lsb_release -a, ...)
17.09.git.be5f725 (Hummingbird)
Nix version: (run nix-env --version)
nix-env (Nix) 1.11.8
Nixpkgs version: (run nix-instantiate --eval '<nixpkgs>' -A lib.nixpkgsVersion)
"17.09pre104252.632e810"

https://nixos.org/nixos/manual/#idm140737315918016

How would I go about using that in this context?
services.xserver = {
  enable = true;
  videoDrivers = lib.mkMerge [
    (lib.mkIf config.nixpkgs.config.allowUnfree [ "nvidia" ])
    [ "nouveau" ]
  ];
};

and
services.xserver = lib.mkMerge [
  {
    enable = true;
    videoDrivers = [ "nouveau" ];
  }
  (lib.mkIf config.nixpkgs.config.allowUnfree {
    enable = true;
    videoDrivers = [ "nvidia" ];
  })
];

produce exactly the same error.

Potentially...
services.xserver.videoDrivers = lib.mkMerge ["nouveau"] (lib.mkIf config.nixpkgs.config.allowUnfree ["nvidia"]

Not sure though, haven't tested it.

That doesn't work.
Because lib.mkMerge only takes one argument. (a list)

lib.mkMerge [["nouveau"] (lib.mkIf config.nixpkgs.config.allowUnfree ["nvidia"])]

?

lib.mkMerge [["nouveau"] (lib.mkIf config.nixpkgs.config.allowUnfree ["nvidia"])]

?
EDIT: maybe switch the order so nvidia is preferred if allowUnfree

Sadly no.
I get exactly the same error.
Even when disabling the xserver and everything else.
{ config, lib, pkgs, ... }:
{
  services.xserver.videoDrivers = lib.mkMerge [["nouveau"] (lib.mkIf config.nixpkgs.config.allowUnfree ["nvidia"])];
}

> nixos-rebuild build -I nixos-config=test.nix
building Nix...
error: infinite recursion encountered, at undefined position
(use ‘--show-trace’ to show detailed location information)
building the system configuration...
error: infinite recursion encountered, at undefined position
(use ‘--show-trace’ to show detailed location information)

Aw, that's a shame. Sorry, I have no further ideas...

No problem, this issue is not very important anyway.
Thanks for your help. :+1:
Here is the output of the above config with --show-trace.
> nixos-rebuild build --show-trace -I nixos-config=test.nix
building Nix...
error: while evaluating anonymous function at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:73:45, called from /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/attrsets.nix:199:52:
while evaluating the attribute ‘value’ at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:310:9:
while evaluating the option `nix.package':
while evaluating the attribute ‘isDefined’ at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:342:5:
while evaluating anonymous function at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:331:19, called from /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:331:14:
while evaluating the attribute ‘value._type’ at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:422:73:
while evaluating the attribute ‘value.content’ at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:480:14:
while evaluating the attribute ‘default’ at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/nixos/modules/services/misc/nix-daemon.nix:71:9:
while evaluating the module argument `pkgs' in "/nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/nixos/modules/services/misc/nix-daemon.nix":
while evaluating the attribute ‘_module.args.pkgs’ at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/attrsets.nix:199:44:
while evaluating anonymous function at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:73:45, called from /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/attrsets.nix:199:52:
while evaluating the attribute ‘value’ at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:310:9:
while evaluating the option `_module.args':
while evaluating the attribute ‘mergedValue’ at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:337:5:
while evaluating anonymous function at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:337:32, called from /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:337:19:
while evaluating ‘merge’ at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/types.nix:201:20, called from /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:340:8:
while evaluating ‘mapAttrs’ at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/attrsets.nix:198:17, called from /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/types.nix:202:9:
while evaluating ‘filterAttrs’ at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/attrsets.nix:115:23, called from /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/types.nix:202:35:
while evaluating ‘concatMap’ at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/lists.nix:96:18, called from /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/attrsets.nix:116:18:
while evaluating anonymous function at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/attrsets.nix:116:29, called from undefined position:
while evaluating anonymous function at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/types.nix:202:51, called from /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/attrsets.nix:116:62:
while evaluating the attribute ‘pkgs’ at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/attrsets.nix:334:7:
while evaluating anonymous function at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/types.nix:202:86, called from /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/attrsets.nix:334:15:
while evaluating the attribute ‘optionalValue’ at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:344:5:
while evaluating ‘filterOverrides’ at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:417:21, called from /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:326:18:
while evaluating ‘concatMap’ at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/lists.nix:96:18, called from /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:423:8:
while evaluating ‘concatMap’ at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/lists.nix:96:18, called from /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:321:17:
while evaluating anonymous function at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:321:28, called from undefined position:
while evaluating ‘dischargeProperties’ at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:384:25, called from /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:322:62:
while evaluating the attribute ‘value’ at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/types.nix:207:55:
while evaluating the attribute ‘pkgs’ at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/nixos/modules/misc/nixpkgs.nix:100:5:
while evaluating anonymous function at /nix/store/crlcfqmzpgz6mdj5fnyb27wni1m7qxd9-nixos-17.09pre104252.632e810/nixos/pkgs/top-level/impure.nix:15:1, called from /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/nixos/modules/misc/nixpkgs.nix:100:25:
while evaluating anonymous function at /nix/store/crlcfqmzpgz6mdj5fnyb27wni1m7qxd9-nixos-17.09pre104252.632e810/nixos/pkgs/top-level/default.nix:20:1, called from /nix/store/crlcfqmzpgz6mdj5fnyb27wni1m7qxd9-nixos-17.09pre104252.632e810/nixos/pkgs/top-level/impure.nix:63:1:
while evaluating anonymous function at /nix/store/crlcfqmzpgz6mdj5fnyb27wni1m7qxd9-nixos-17.09pre104252.632e810/nixos/pkgs/stdenv/booter.nix:42:1, called from /nix/store/crlcfqmzpgz6mdj5fnyb27wni1m7qxd9-nixos-17.09pre104252.632e810/nixos/pkgs/top-level/default.nix:93:10:
while evaluating ‘foldr’ at /nix/store/crlcfqmzpgz6mdj5fnyb27wni1m7qxd9-nixos-17.09pre104252.632e810/nixos/lib/lists.nix:34:20, called from /nix/store/crlcfqmzpgz6mdj5fnyb27wni1m7qxd9-nixos-17.09pre104252.632e810/nixos/pkgs/stdenv/booter.nix:73:4:
while evaluating ‘fold'’ at /nix/store/crlcfqmzpgz6mdj5fnyb27wni1m7qxd9-nixos-17.09pre104252.632e810/nixos/lib/lists.nix:37:15, called from /nix/store/crlcfqmzpgz6mdj5fnyb27wni1m7qxd9-nixos-17.09pre104252.632e810/nixos/lib/lists.nix:41:8:
while evaluating ‘imap’ at /nix/store/crlcfqmzpgz6mdj5fnyb27wni1m7qxd9-nixos-17.09pre104252.632e810/nixos/lib/lists.nix:88:13, called from /nix/store/crlcfqmzpgz6mdj5fnyb27wni1m7qxd9-nixos-17.09pre104252.632e810/nixos/pkgs/stdenv/booter.nix:47:30:
while evaluating ‘reverseList’ at /nix/store/crlcfqmzpgz6mdj5fnyb27wni1m7qxd9-nixos-17.09pre104252.632e810/nixos/lib/lists.nix:273:17, called from /nix/store/crlcfqmzpgz6mdj5fnyb27wni1m7qxd9-nixos-17.09pre104252.632e810/nixos/pkgs/stdenv/booter.nix:54:6:
while evaluating anonymous function at /nix/store/crlcfqmzpgz6mdj5fnyb27wni1m7qxd9-nixos-17.09pre104252.632e810/nixos/pkgs/stdenv/default.nix:7:1, called from /nix/store/crlcfqmzpgz6mdj5fnyb27wni1m7qxd9-nixos-17.09pre104252.632e810/nixos/pkgs/top-level/default.nix:89:12:
while evaluating anonymous function at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:73:45, called from /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/attrsets.nix:199:52:
while evaluating the attribute ‘value’ at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:310:9:
while evaluating the option `nixpkgs.config':
while evaluating the attribute ‘isDefined’ at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:342:5:
while evaluating ‘filterOverrides’ at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:417:21, called from /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:326:18:
while evaluating ‘concatMap’ at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/lists.nix:96:18, called from /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:423:8:
while evaluating ‘concatMap’ at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/lists.nix:96:18, called from /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:321:17:
while evaluating anonymous function at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:321:28, called from undefined position:
while evaluating ‘dischargeProperties’ at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:384:25, called from /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:322:62:
while evaluating the attribute ‘condition’ at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:465:14:
while evaluating the attribute ‘condition’ at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:465:14:
while evaluating the attribute ‘condition’ at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:465:14:
while evaluating the attribute ‘services.xserver.videoDrivers’ at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/attrsets.nix:199:44:
while evaluating anonymous function at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:73:45, called from /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/attrsets.nix:199:52:
while evaluating the attribute ‘value’ at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:310:9:
while evaluating the option `services.xserver.videoDrivers':
while evaluating the attribute ‘isDefined’ at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:342:5:
while evaluating ‘filterOverrides’ at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:417:21, called from /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:326:18:
while evaluating ‘concatMap’ at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/lists.nix:96:18, called from /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:423:8:
while evaluating ‘concatMap’ at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/lists.nix:96:18, called from /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:321:17:
while evaluating anonymous function at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:321:28, called from undefined position:
while evaluating ‘dischargeProperties’ at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:384:25, called from /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:322:62:
while evaluating ‘concatMap’ at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/lists.nix:96:18, called from /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:386:7:
while evaluating ‘dischargeProperties’ at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:384:25, called from undefined position:
while evaluating the attribute ‘condition’ at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:465:14:
while evaluating the attribute ‘nixpkgs.config.allowUnfree’ at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/attrsets.nix:199:44:
infinite recursion encountered, at undefined position
building the system configuration...
error: while evaluating the attribute ‘config.system.build.toplevel’ at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/nixos/modules/system/activation/top-level.nix:249:5:
while evaluating ‘foldr’ at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/lists.nix:34:20, called from /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/nixos/modules/system/activation/top-level.nix:130:12:
while evaluating ‘fold'’ at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/lists.nix:37:15, called from /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/lists.nix:41:8:
while evaluating ‘showWarnings’ at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/nixos/modules/system/activation/top-level.nix:96:18, called from /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/nixos/modules/system/activation/top-level.nix:103:16:
while evaluating ‘foldr’ at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/lists.nix:34:20, called from /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/nixos/modules/system/activation/top-level.nix:96:23:
while evaluating ‘fold'’ at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/lists.nix:37:15, called from /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/lists.nix:41:8:
while evaluating the attribute ‘warnings’ at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/attrsets.nix:199:44:
while evaluating anonymous function at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:73:45, called from /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/attrsets.nix:199:52:
while evaluating the attribute ‘value’ at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:310:9:
while evaluating the option `warnings':
while evaluating the attribute ‘isDefined’ at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:342:5:
while evaluating ‘filterOverrides’ at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:417:21, called from /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:326:18:
while evaluating ‘concatMap’ at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/lists.nix:96:18, called from /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:423:8:
while evaluating ‘concatMap’ at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/lists.nix:96:18, called from /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:321:17:
while evaluating anonymous function at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:321:28, called from undefined position:
while evaluating ‘dischargeProperties’ at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:384:25, called from /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:322:62:
while evaluating the attribute ‘value’ at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:214:48:
while evaluating the attribute ‘config.warnings’ at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/nixos/modules/tasks/network-interfaces-scripted.nix:54:7:
while evaluating ‘flatten’ at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/lists.nix:107:13, called from /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/nixos/modules/tasks/network-interfaces-scripted.nix:54:18:
while evaluating ‘mapAttrsToList’ at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/attrsets.nix:223:23, called from /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/nixos/modules/tasks/network-interfaces-scripted.nix:54:27:
while evaluating the attribute ‘bonds’ at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/attrsets.nix:199:44:
while evaluating anonymous function at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:73:45, called from /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/attrsets.nix:199:52:
while evaluating ‘isType’ at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/types.nix:13:18, called from /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:74:14:
while evaluating the attribute ‘bonds’ at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:196:7:
while evaluating anonymous function at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/lists.nix:180:28, called from /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:212:23:
while evaluating anonymous function at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:212:30, called from /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/lists.nix:180:34:
while evaluating ‘isType’ at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/types.nix:13:18, called from /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:212:33:
while evaluating the attribute ‘options’ at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:202:42:
while evaluating the attribute ‘options.bonds’ at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/nixos/modules/tasks/network-interfaces.nix:562:5:
while evaluating the module argument `utils' in "/nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/nixos/modules/tasks/network-interfaces.nix":
while evaluating the attribute ‘_module.args.utils’ at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/attrsets.nix:199:44:
while evaluating anonymous function at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:73:45, called from /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/attrsets.nix:199:52:
while evaluating the attribute ‘value’ at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:310:9:
while evaluating the option `_module.args':
while evaluating the attribute ‘mergedValue’ at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:337:5:
while evaluating anonymous function at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:337:32, called from /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:337:19:
while evaluating ‘merge’ at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/types.nix:201:20, called from /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:340:8:
while evaluating ‘mapAttrs’ at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/attrsets.nix:198:17, called from /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/types.nix:202:9:
while evaluating ‘filterAttrs’ at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/attrsets.nix:115:23, called from /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/types.nix:202:35:
while evaluating ‘concatMap’ at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/lists.nix:96:18, called from /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/attrsets.nix:116:18:
while evaluating anonymous function at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/attrsets.nix:116:29, called from undefined position:
while evaluating anonymous function at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/types.nix:202:51, called from /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/attrsets.nix:116:62:
while evaluating the attribute ‘pkgs’ at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/attrsets.nix:334:7:
while evaluating anonymous function at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/types.nix:202:86, called from /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/attrsets.nix:334:15:
while evaluating the attribute ‘optionalValue’ at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:344:5:
while evaluating ‘filterOverrides’ at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:417:21, called from /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:326:18:
while evaluating ‘concatMap’ at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/lists.nix:96:18, called from /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:423:8:
while evaluating ‘concatMap’ at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/lists.nix:96:18, called from /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:321:17:
while evaluating anonymous function at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:321:28, called from undefined position:
while evaluating ‘dischargeProperties’ at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:384:25, called from /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:322:62:
while evaluating the attribute ‘value’ at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/types.nix:207:55:
while evaluating the attribute ‘pkgs’ at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/nixos/modules/misc/nixpkgs.nix:100:5:
while evaluating anonymous function at /nix/store/crlcfqmzpgz6mdj5fnyb27wni1m7qxd9-nixos-17.09pre104252.632e810/nixos/pkgs/top-level/impure.nix:15:1, called from /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/nixos/modules/misc/nixpkgs.nix:100:25:
while evaluating anonymous function at /nix/store/crlcfqmzpgz6mdj5fnyb27wni1m7qxd9-nixos-17.09pre104252.632e810/nixos/pkgs/top-level/default.nix:20:1, called from /nix/store/crlcfqmzpgz6mdj5fnyb27wni1m7qxd9-nixos-17.09pre104252.632e810/nixos/pkgs/top-level/impure.nix:63:1:
while evaluating anonymous function at /nix/store/crlcfqmzpgz6mdj5fnyb27wni1m7qxd9-nixos-17.09pre104252.632e810/nixos/pkgs/stdenv/booter.nix:42:1, called from /nix/store/crlcfqmzpgz6mdj5fnyb27wni1m7qxd9-nixos-17.09pre104252.632e810/nixos/pkgs/top-level/default.nix:93:10:
while evaluating ‘foldr’ at /nix/store/crlcfqmzpgz6mdj5fnyb27wni1m7qxd9-nixos-17.09pre104252.632e810/nixos/lib/lists.nix:34:20, called from /nix/store/crlcfqmzpgz6mdj5fnyb27wni1m7qxd9-nixos-17.09pre104252.632e810/nixos/pkgs/stdenv/booter.nix:73:4:
while evaluating ‘fold'’ at /nix/store/crlcfqmzpgz6mdj5fnyb27wni1m7qxd9-nixos-17.09pre104252.632e810/nixos/lib/lists.nix:37:15, called from /nix/store/crlcfqmzpgz6mdj5fnyb27wni1m7qxd9-nixos-17.09pre104252.632e810/nixos/lib/lists.nix:41:8:
while evaluating ‘imap’ at /nix/store/crlcfqmzpgz6mdj5fnyb27wni1m7qxd9-nixos-17.09pre104252.632e810/nixos/lib/lists.nix:88:13, called from /nix/store/crlcfqmzpgz6mdj5fnyb27wni1m7qxd9-nixos-17.09pre104252.632e810/nixos/pkgs/stdenv/booter.nix:47:30:
while evaluating ‘reverseList’ at /nix/store/crlcfqmzpgz6mdj5fnyb27wni1m7qxd9-nixos-17.09pre104252.632e810/nixos/lib/lists.nix:273:17, called from /nix/store/crlcfqmzpgz6mdj5fnyb27wni1m7qxd9-nixos-17.09pre104252.632e810/nixos/pkgs/stdenv/booter.nix:54:6:
while evaluating anonymous function at /nix/store/crlcfqmzpgz6mdj5fnyb27wni1m7qxd9-nixos-17.09pre104252.632e810/nixos/pkgs/stdenv/default.nix:7:1, called from /nix/store/crlcfqmzpgz6mdj5fnyb27wni1m7qxd9-nixos-17.09pre104252.632e810/nixos/pkgs/top-level/default.nix:89:12:
while evaluating anonymous function at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:73:45, called from /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/attrsets.nix:199:52:
while evaluating the attribute ‘value’ at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:310:9:
while evaluating the option `nixpkgs.config':
while evaluating the attribute ‘isDefined’ at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:342:5:
while evaluating ‘filterOverrides’ at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:417:21, called from /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:326:18:
while evaluating ‘concatMap’ at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/lists.nix:96:18, called from /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:423:8:
while evaluating ‘concatMap’ at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/lists.nix:96:18, called from /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:321:17:
while evaluating anonymous function at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:321:28, called from undefined position:
while evaluating ‘dischargeProperties’ at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:384:25, called from /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:322:62:
while evaluating the attribute ‘condition’ at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:465:14:
while evaluating the attribute ‘condition’ at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:465:14:
while evaluating the attribute ‘condition’ at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:465:14:
while evaluating the attribute ‘services.xserver.videoDrivers’ at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/attrsets.nix:199:44:
while evaluating anonymous function at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:73:45, called from /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/attrsets.nix:199:52:
while evaluating the attribute ‘value’ at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:310:9:
while evaluating the option `services.xserver.videoDrivers':
while evaluating the attribute ‘isDefined’ at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:342:5:
while evaluating ‘filterOverrides’ at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:417:21, called from /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:326:18:
while evaluating ‘concatMap’ at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/lists.nix:96:18, called from /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:423:8:
while evaluating ‘concatMap’ at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/lists.nix:96:18, called from /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:321:17:
while evaluating anonymous function at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:321:28, called from undefined position:
while evaluating ‘dischargeProperties’ at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:384:25, called from /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:322:62:
while evaluating ‘concatMap’ at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/lists.nix:96:18, called from /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:386:7:
while evaluating ‘dischargeProperties’ at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:384:25, called from undefined position:
while evaluating the attribute ‘condition’ at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/modules.nix:465:14:
while evaluating the attribute ‘nixpkgs.config.allowUnfree’ at /nix/var/nix/profiles/per-user/root/channels/nixos/nixpkgs/lib/attrsets.nix:199:44:
infinite recursion encountered, at undefined position

I just came across this annoying issue:
{ config, lib, pkgs, ... }:

lib.mkIf (config.networking.hostName == "Taha-Desktop-Linux") {
  fileSystems."/mnt/games" = {
    device = "/dev/disk/by-label/games";
    fsType = "ntfs-3g";
    options = [ "defaults" "noatime" "exec" "uid=1000" "gid=1000" ];
  };

  fileSystems."/mnt/array" = {
    device = pkgs.lib.mkForce "<IP_ADDRESS>:/mnt/array";
    fsType = pkgs.lib.mkForce "nfs";
    options = [ "noauto" "x-systemd.automount" "x-systemd.device-timeout=10" "timeo=14" "x-systemd.idle-timeout=1min" "noatime" ];
  };

  powerManagement = {
    enable = false;
    powertop.enable = false;
  };

  boot.loader = {
    systemd-boot.enable = true;
    efi.canTouchEfiVariables = true;
    timeout = 1;
  };

  # driver + steam
  # services.xserver.videoDrivers = [ "nvidia" ];
  hardware.opengl.driSupport32Bit = true; # 32 bit support for wine or steam
  hardware.pulseaudio.support32Bit = true; # 32 bit support for wine or steam
  environment.systemPackages = with pkgs; [ steam ];

  # workaround overclock bug
  boot.kernelParams = [ "intel_idle.max_cstate=0" ];

  # workaround motherboard bug
  systemd.services.gpefix = {
    enable = true;
    description = "Disable GPE6F interrupts";
    serviceConfig = {
      Type = "oneshot";
      ExecStart = "${pkgs.bash}/bin/bash -c \"echo disable > /sys/firmware/acpi/interrupts/gpe6F\"";
    };
    wantedBy = [ "multi-user.target" ];
  };
}

If I uncomment the # services.xserver.videoDrivers = [ "nvidia" ]; line, the infinite recursion occurs. It only happens when the lib.mkIf (config.networking.hostName == "Taha-Desktop-Linux") if condition is there.

(triage) Closing as I can't find anything actionable at the nixpkgs level about this, and the questions are most likely not relevant any longer -- if they are, feel free to post over at http://discourse.nixos.org/, where user support should be directed.

This issue has been mentioned on NixOS Discourse. There might be relevant details there:
https://discourse.nixos.org/t/infinite-recursion-encountered-by-making-module-configurable/23508/2


afile.txt is needlessly ridiculously large

What's the point in afile.txt test fixture? The test is just reading every line of that file and testing if it's not null. With the same success you can have 10 lines of random ASCII characters and not add 1800KB on top of the 1.8KB of code and make it 1000 times bigger.
If it's a stress test, then maybe just repeat the test 1000 times.
Plus, as the text reads, "Be sure to check the copyright laws for your country before downloading or redistributing this or any other Project Gutenberg eBook.". Yet this library does not come with a license agreement, and should not need one, and thus should definitely not contain any content that the copyright holder has not renounced all rights to. Therefore this book shouldn't be here even from a legal perspective.

Relevant blog post https://talbrenev.com/2019/04/16/sherlock-holmes.html

The file should just be excluded from the distributed package. You can use the files field in package.json to specify the files to distribute.


Open cache files in parallel

Summary
This is based on https://github.com/astral-sh/ruff/pull/5117.
Open cache files in parallel (again).
Test Plan
Existing tests should keep working.

Do I understand this change correctly that it mainly opens the cache "lazily" and it's our parallel traversal of the files that make the cache loading parallel?

Do I understand this change correctly that it mainly opens the cache "lazily" and it's our parallel traversal of the files that make the cache loading parallel?

Initially this was true. But with the last commit I've simplified this because I didn't really like the code. Now the caches are opened in parallel, but no longer lazily. This allows us to avoid atomic/locks in reading from the cache (to synchronize the reading of the cache).

I'm getting an error on the CI that the jupyter/R.ipynb is missing from the cache, but I can't reproduce it locally...


Add a general stats method

It would be nice if the plugin supports some kind of general stats options, like read count, mean quality, coverage metrics... This would enable more specific testing for files that do not have a stable md5sum

Added in v0.4.0


Visual interface is required for read the QR code?

Hi, thi code can used without a visual interface in linux? only accessing via ssh? The register process, read the QR, etc. Or is necessary a visual interface for read the QR for example?
I want try it in my server, but I only have ssh access.

Doing the authentication via ssh is not possible right now because this
program relies on Google Chrome for QR code authentication and other tasks.
It is possible, in theory, to have a headless browser replace Google
Chrome. But currently, you would need access to your linux server's desktop
environment/GUI to use this there.
On Tue, Mar 12, 2019, 21:41 Luigi Salas<EMAIL_ADDRESS>wrote:

Hi, thi code can used without a visual interface in linux? only accessing
via ssh? The register process, read the QR, etc. Or is necessary a visual
interface for read the QR for example?
I want try it in my server, but I only have ssh access.
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
https://github.com/zvovov/whatsapp-web/issues/29, or mute the thread
https://github.com/notifications/unsubscribe-auth/AIOr2hXWe9zwL8Mq-mU4H2qg73P5dhsBks5vV9GUgaJpZM4brRrc
.

Thanks for the answer.


Severe performance drop when using many parameters

It looks like once the number of parameters is >= 225, query() time increases by more than an order of magnitude. The exact same query without prepared statements (i.e., with simple_query and the values inlined) does not experience the same degradation. Consider the following code:
extern crate futures;
extern crate tiberius;
extern crate tokio_core;
use tokio_core::reactor::Core;
use tiberius::SqlConnection;
use tiberius::stmt::ResultStreamExt;

use std::time;

fn main() {
    let mut core = Core::new().unwrap();
    let conn = SqlConnection::connect(core.handle(), "server=tcp:<IP_ADDRESS>,1433");
    let mut conn = core.run(conn).unwrap();

    for i in 0.. {
        let n = 220 + i % 20;

        // First, use a prepared statement:
        let vals = (0..n)
            .map(|i| format!("@P{}", i + 1))
            .collect::<Vec<_>>()
            .join(",");
        let qstring = format!(
            "SELECT 1 FROM sys.tables WHERE max_column_id_used IN ({})",
            vals
        );

        // collect the parameters (they are all set to i)
        let ids = (0..n).map(|_| i).collect::<Vec<_>>();
        let ids = ids.iter().map(|a| a as &_).collect::<Vec<_>>();

        // execute with query()
        let start = time::Instant::now();
        conn = core.run(conn.query(qstring, &ids[..]).for_each_row(|_| Ok(())))
            .unwrap();
        let qtime = start.elapsed();

        // now generate the query string with the values inlined
        let vals = (0..n)
            .map(|_| format!("{}", i))
            .collect::<Vec<_>>()
            .join(",");
        let qstring = format!(
            "SELECT 1 FROM sys.tables WHERE max_column_id_used IN ({})",
            vals
        );

        // and execute with simple_query()
        let start = time::Instant::now();
        conn = core.run(conn.simple_query(qstring).for_each_row(|_| Ok(())))
            .unwrap();
        let sqtime = start.elapsed();

        println!(
            "with {} arguments: sq = {}µs, q = {}µs",
            n,
            sqtime.subsec_nanos() / 1000,
            qtime.subsec_nanos() / 1000
        );
    }
}

When running this on my local SQL server instance, I see:
with 220 arguments: sq = 16956µs, q = 108906µs
with 221 arguments: sq = 21344µs, q = 83126µs
with 222 arguments: sq = 21286µs, q = 81966µs
with 223 arguments: sq = 21157µs, q = 81691µs
with 224 arguments: sq = 21290µs, q = 82548µs
with 225 arguments: sq = 21442µs, q = 81907µs
with 226 arguments: sq = 21361µs, q = 81796µs
with 227 arguments: sq = 21791µs, q = 81995µs
with 228 arguments: sq = 21596µs, q = 81554µs
with 229 arguments: sq = 21639µs, q = 82025µs

with 220 arguments: sq = 21425µs, q = 2373µs  <- statement did not need to be re-prepared
with 221 arguments: sq = 21366µs, q = 2588µs
with 222 arguments: sq = 21203µs, q = 2567µs
with 223 arguments: sq = 21738µs, q = 2529µs
with 224 arguments: sq = 21291µs, q = 2614µs
with 225 arguments: sq = 21423µs, q = 46125µs <- but apparently these did?
with 226 arguments: sq = 21489µs, q = 44956µs
with 227 arguments: sq = 21462µs, q = 45109µs
with 228 arguments: sq = 21488µs, q = 45157µs
with 229 arguments: sq = 21472µs, q = 45142µs

When the server has had a chance to warm up, the simple_query() executions are much faster, but query() still exhibits the same behavior:
with 220 arguments: sq = 989µs, q = 46017µs
with 221 arguments: sq = 449µs, q = 45204µs
with 222 arguments: sq = 446µs, q = 42736µs
with 223 arguments: sq = 451µs, q = 42817µs
with 224 arguments: sq = 451µs, q = 42805µs
with 225 arguments: sq = 454µs, q = 42819µs
with 226 arguments: sq = 493µs, q = 42883µs
with 227 arguments: sq = 446µs, q = 46146µs
with 228 arguments: sq = 493µs, q = 42782µs
with 229 arguments: sq = 500µs, q = 46346µs

with 220 arguments: sq = 482µs, q = 2286µs
with 221 arguments: sq = 499µs, q = 2609µs
with 222 arguments: sq = 453µs, q = 2486µs
with 223 arguments: sq = 454µs, q = 2494µs
with 224 arguments: sq = 444µs, q = 2506µs
with 225 arguments: sq = 454µs, q = 43997µs
with 226 arguments: sq = 446µs, q = 42888µs
with 227 arguments: sq = 458µs, q = 42893µs
with 228 arguments: sq = 455µs, q = 42842µs
with 229 arguments: sq = 449µs, q = 42666µs

Just a few general questions, before I'll get around to look closer into this:
Are you using a --release build for those benchmarks?`#
Is that something specific to this implementation (e.g. are you aware
of any other implementation where this doesn't happen for prepared statements?)

Yes, this is with --release. I don't have another client implementation handy, so I don't know if this is a tiberius-related problem or a wider SQL Server issue. It probably isn't relevant, but I also tried running essentially the same test against MySQL just now using the Rust mysql crate, and there doesn't seem to be any such cliff there at any number of parameters.

For what it's worth, the CPU load for the client is basically 0 with both n = 224 and n = 225, whereas the CPU load of the server decreases significantly (~100% to ~30%), which sort of implies that this is at least not a processing issue in tiberius.

It also does not appear related to the length of the query. Making it more verbose does not change the n at which the issue appears.

Your benchmark BTW seems flawed:
subsec_nanos returns ONLY the nanosecond portion of the Duration.
(not the duration in nanoseconds, thats an important difference)
That means if it wraps, e.g. takes one second, you'll see something like:
with 225 arguments: sq = 21423µs, q = 46125µs <- but apparently these did?

@steffengy I'm aware, but the number of seconds was always 0, so I hid it for clarity.

I think it's likely a SQL server limitation (they limit parameters to 2100 apparently).
To be sure one could:

Test another implementation (c#, powershell, php, javascript, go, ... should be some easy ones to get running)
Profile with debug symbols, likely not very interesting
Test a debug build and check if it's exponentially worse

Is this actually only an issue with the initial preparing (as it seems)
or consistent across runs of already prepared statements?

I think it's likely a SQL server limitation (they limit parameters to 2100 apparently).

I'm not sure I follow. The threshold of 225 that I observe seems far shy of 2100?

Is this actually only an issue with the initial preparing (as it seems) or consistent across runs of already prepared statements?

Judging from this code, and from the performance of queries with fewer than 225 parameters, tiberius does not prepare the same query when it is executed again (using query()). Subsequent calls to query() should just execute the cached prepared statement again. This is indeed what is happening with query() when there are fewer than 225 parameters (see how the query time goes from ~40ms to ~2ms). However, with >=225, the queries are always slow (as if they are being prepared again on every query()).

I'm not sure I follow. The threshold of 225 that I observe seems far shy of 2100?

Sure, but that limit indicates it's not optimized for high parameter counts.

Subsequent calls to query() should just execute the cached prepared statement again

As long as the same types are passed, yes.

However, with >=225, the queries are always slow (as if they are being prepared again on every query()).

That is indeed strange.
Can you try without an IN statement?
My guess is that you're likely stressing the Query Planner, which has some kind of cut-off
point with many IN-arguments.

As long as the same types are passed, yes.

The exact same string is being generated, so I assume that counts. And the results do seem to bear that out.

Can you try without an IN expression? My guess is that you're likely stressing the Query Planner, which has some kind of cut-off point with many IN-arguments.

If that were the case, should the same cut-off apply to the simple_query() case where the entire query is generated as a single string (and so there are no parameters). It would also generate an IN with 225 "parts".

Ran it without IN now, and the same behavior occurs: query() performance drops by an order of magnitude when there are >=225 parameters.

I can't reproduce it (SQL Server 2016 on Windows):
with 220 arguments: sq = 13772µs, q = 26845µs
with 221 arguments: sq = 15325µs, q = 31239µs
with 222 arguments: sq = 15318µs, q = 29686µs
with 223 arguments: sq = 15227µs, q = 29659µs
with 224 arguments: sq = 15344µs, q = 29887µs
with 225 arguments: sq = 15274µs, q = 30487µs
with 226 arguments: sq = 15346µs, q = 29918µs
with 227 arguments: sq = 15416µs, q = 29864µs
with 228 arguments: sq = 15527µs, q = 31217µs
with 229 arguments: sq = 15517µs, q = 29967µs
with 230 arguments: sq = 15879µs, q = 29987µs
with 231 arguments: sq = 15577µs, q = 30406µs
with 232 arguments: sq = 15338µs, q = 30413µs
with 233 arguments: sq = 15462µs, q = 30332µs
with 234 arguments: sq = 15306µs, q = 30476µs
with 235 arguments: sq = 15766µs, q = 30591µs
with 236 arguments: sq = 15588µs, q = 30249µs
with 237 arguments: sq = 16408µs, q = 30513µs
with 238 arguments: sq = 15617µs, q = 30368µs
with 239 arguments: sq = 15908µs, q = 30786µs
with 220 arguments: sq = 15629µs, q = 2395µs
with 221 arguments: sq = 15724µs, q = 2421µs
with 222 arguments: sq = 15841µs, q = 2348µs
with 223 arguments: sq = 16041µs, q = 2701µs
with 224 arguments: sq = 15721µs, q = 2444µs
with 225 arguments: sq = 16094µs, q = 2506µs
with 226 arguments: sq = 15717µs, q = 2484µs
with 227 arguments: sq = 15952µs, q = 2554µs
with 228 arguments: sq = 16045µs, q = 2627µs
with 229 arguments: sq = 15977µs, q = 2522µs
with 230 arguments: sq = 15959µs, q = 2572µs
with 231 arguments: sq = 15781µs, q = 2605µs
with 232 arguments: sq = 15850µs, q = 2559µs
with 233 arguments: sq = 15795µs, q = 2583µs
with 234 arguments: sq = 15753µs, q = 2500µs
with 235 arguments: sq = 15722µs, q = 2615µs
with 236 arguments: sq = 15914µs, q = 2620µs
with 237 arguments: sq = 16183µs, q = 2538µs
with 238 arguments: sq = 15892µs, q = 2589µs
with 239 arguments: sq = 15950µs, q = 2502µs
with 220 arguments: sq = 16264µs, q = 2365µs
with 221 arguments: sq = 16033µs, q = 2598µs
with 222 arguments: sq = 15546µs, q = 2553µs
with 223 arguments: sq = 15683µs, q = 2589µs
with 224 arguments: sq = 15571µs, q = 2367µs
with 225 arguments: sq = 15622µs, q = 2420µs
with 226 arguments: sq = 15811µs, q = 2428µs
with 227 arguments: sq = 15597µs, q = 2545µs
with 228 arguments: sq = 15629µs, q = 2486µs
with 229 arguments: sq = 15617µs, q = 2426µs
with 230 arguments: sq = 15612µs, q = 2471µs
with 231 arguments: sq = 15734µs, q = 2519µs
with 232 arguments: sq = 15777µs, q = 2593µs
with 233 arguments: sq = 15707µs, q = 2492µs
with 234 arguments: sq = 15632µs, q = 2450µs
with 235 arguments: sq = 15754µs, q = 2490µs
with 236 arguments: sq = 15778µs, q = 2511µs
with 237 arguments: sq = 15870µs, q = 2452µs
with 238 arguments: sq = 15762µs, q = 2565µs
with 239 arguments: sq = 15694µs, q = 2536µs
with 220 arguments: sq = 15181µs, q = 2371µs
with 221 arguments: sq = 15565µs, q = 2916µs
with 222 arguments: sq = 16393µs, q = 2368µs
with 223 arguments: sq = 15576µs, q = 2365µs
with 224 arguments: sq = 15569µs, q = 2445µs
with 225 arguments: sq = 15695µs, q = 2379µs
with 226 arguments: sq = 15573µs, q = 2500µs
with 227 arguments: sq = 15809µs, q = 2502µs
with 228 arguments: sq = 15745µs, q = 2510µs
with 229 arguments: sq = 15540µs, q = 2508µs
with 230 arguments: sq = 15673µs, q = 2635µs
with 231 arguments: sq = 15565µs, q = 2432µs
with 232 arguments: sq = 15601µs, q = 2498µs
with 233 arguments: sq = 15845µs, q = 2551µs
with 234 arguments: sq = 15578µs, q = 2637µs
with 235 arguments: sq = 15796µs, q = 2511µs
with 236 arguments: sq = 15890µs, q = 2534µs
with 237 arguments: sq = 15845µs, q = 2578µs
with 238 arguments: sq = 16048µs, q = 2573µs
with 239 arguments: sq = 15770µs, q = 2516µs
with 220 arguments: sq = 15374µs, q = 2350µs
with 221 arguments: sq = 15724µs, q = 2426µs
with 222 arguments: sq = 15534µs, q = 2374µs
with 223 arguments: sq = 15758µs, q = 2446µs
with 224 arguments: sq = 15734µs, q = 2491µs
with 225 arguments: sq = 15617µs, q = 2496µs
with 226 arguments: sq = 15616µs, q = 2522µs
with 227 arguments: sq = 15835µs, q = 2678µs
with 228 arguments: sq = 15740µs, q = 2510µs
with 229 arguments: sq = 15830µs, q = 2576µs
with 230 arguments: sq = 15837µs, q = 2454µs
with 231 arguments: sq = 15809µs, q = 2491µs
with 232 arguments: sq = 15988µs, q = 2536µs
with 233 arguments: sq = 15882µs, q = 2599µs
with 234 arguments: sq = 15779µs, q = 2641µs
with 235 arguments: sq = 16044µs, q = 2613µs
with 236 arguments: sq = 15784µs, q = 2529µs
with 237 arguments: sq = 15721µs, q = 2555µs
with 238 arguments: sq = 15780µs, q = 2546µs
with 239 arguments: sq = 15885µs, q = 2559µs
with 220 arguments: sq = 15625µs, q = 2355µs
with 221 arguments: sq = 15564µs, q = 2479µs
with 222 arguments: sq = 15484µs, q = 2441µs
with 223 arguments: sq = 15355µs, q = 2554µs
with 224 arguments: sq = 15659µs, q = 2590µs
with 225 arguments: sq = 15761µs, q = 2486µs
with 226 arguments: sq = 15712µs, q = 2512µs
with 227 arguments: sq = 15763µs, q = 2510µs
with 228 arguments: sq = 15766µs, q = 2496µs
with 229 arguments: sq = 15661µs, q = 2428µs
with 230 arguments: sq = 15525µs, q = 2510µs
with 231 arguments: sq = 15812µs, q = 2627µs
with 232 arguments: sq = 19718µs, q = 3049µs
with 233 arguments: sq = 32111µs, q = 4120µs
with 234 arguments: sq = 21013µs, q = 5351µs
with 235 arguments: sq = 16076µs, q = 2500µs
with 236 arguments: sq = 15901µs, q = 2570µs
with 237 arguments: sq = 16011µs, q = 2501µs
with 238 arguments: sq = 15952µs, q = 2560µs
with 239 arguments: sq = 15642µs, q = 2557µs
with 220 arguments: sq = 15944µs, q = 2266µs
with 221 arguments: sq = 15751µs, q = 2648µs
with 222 arguments: sq = 15578µs, q = 2486µs
with 223 arguments: sq = 15837µs, q = 2305µs
with 224 arguments: sq = 15689µs, q = 2378µs
with 225 arguments: sq = 15767µs, q = 2703µs
with 226 arguments: sq = 15749µs, q = 2527µs
with 227 arguments: sq = 15435µs, q = 2499µs
with 228 arguments: sq = 15719µs, q = 2426µs
with 229 arguments: sq = 15545µs, q = 2602µs
with 230 arguments: sq = 15678µs, q = 2650µs
with 231 arguments: sq = 15820µs, q = 2566µs
with 232 arguments: sq = 15680µs, q = 2516µs
with 233 arguments: sq = 15959µs, q = 2541µs
with 234 arguments: sq = 15792µs, q = 2512µs
with 235 arguments: sq = 15924µs, q = 2621µs
with 236 arguments: sq = 15814µs, q = 2508µs
with 237 arguments: sq = 15783µs, q = 2579µs
with 238 arguments: sq = 15957µs, q = 2632µs
with 239 arguments: sq = 15837µs, q = 2544µs
with 220 arguments: sq = 15870µs, q = 2257µs
with 221 arguments: sq = 15746µs, q = 2496µs
with 222 arguments: sq = 15691µs, q = 2477µs
with 223 arguments: sq = 15636µs, q = 2317µs
with 224 arguments: sq = 15668µs, q = 2487µs
with 225 arguments: sq = 16694µs, q = 2492µs
with 226 arguments: sq = 16062µs, q = 3019µs
with 227 arguments: sq = 15666µs, q = 2511µs
with 228 arguments: sq = 15448µs, q = 2509µs
with 229 arguments: sq = 15719µs, q = 2388µs
with 230 arguments: sq = 15646µs, q = 2507µs
with 231 arguments: sq = 15643µs, q = 2576µs
with 232 arguments: sq = 15916µs, q = 2544µs
with 233 arguments: sq = 15772µs, q = 2499µs
with 234 arguments: sq = 15987µs, q = 2602µs
with 235 arguments: sq = 15652µs, q = 2486µs
with 236 arguments: sq = 15872µs, q = 2538µs
with 237 arguments: sq = 15899µs, q = 2606µs
with 238 arguments: sq = 15684µs, q = 2583µs
with 239 arguments: sq = 15888µs, q = 2535µs
with 220 arguments: sq = 15463µs, q = 2303µs
with 221 arguments: sq = 15256µs, q = 2358µs
with 222 arguments: sq = 15799µs, q = 2442µs
with 223 arguments: sq = 15803µs, q = 2647µs
with 224 arguments: sq = 15716µs, q = 2435µs
with 225 arguments: sq = 15754µs, q = 2423µs
with 226 arguments: sq = 15600µs, q = 2504µs
with 227 arguments: sq = 15805µs, q = 2535µs
with 228 arguments: sq = 15935µs, q = 2497µs
with 229 arguments: sq = 15701µs, q = 2548µs
with 230 arguments: sq = 15539µs, q = 2637µs
with 231 arguments: sq = 15541µs, q = 2675µs
with 232 arguments: sq = 15955µs, q = 2566µs
with 233 arguments: sq = 15931µs, q = 2483µs
with 234 arguments: sq = 15815µs, q = 2537µs
with 235 arguments: sq = 15996µs, q = 2583µs
with 236 arguments: sq = 16037µs, q = 2512µs
with 237 arguments: sq = 15679µs, q = 2576µs
with 238 arguments: sq = 16026µs, q = 2607µs
with 239 arguments: sq = 16187µs, q = 3036µs
with 220 arguments: sq = 15634µs, q = 2256µs
with 221 arguments: sq = 15537µs, q = 2305µs
with 222 arguments: sq = 15881µs, q = 2378µs
with 223 arguments: sq = 15790µs, q = 2517µs
with 224 arguments: sq = 15862µs, q = 2602µs
with 225 arguments: sq = 15555µs, q = 2508µs
with 226 arguments: sq = 15456µs, q = 2588µs
with 227 arguments: sq = 15829µs, q = 2565µs
with 228 arguments: sq = 15669µs, q = 2528µs
with 229 arguments: sq = 16042µs, q = 2465µs
with 230 arguments: sq = 15842µs, q = 2544µs
with 231 arguments: sq = 15892µs, q = 2499µs
with 232 arguments: sq = 15668µs, q = 2480µs
with 233 arguments: sq = 15443µs, q = 2537µs
with 234 arguments: sq = 15582µs, q = 2571µs
with 235 arguments: sq = 15976µs, q = 2589µs
with 236 arguments: sq = 15999µs, q = 2657µs
with 237 arguments: sq = 15772µs, q = 2495µs
with 238 arguments: sq = 15680µs, q = 2516µs
with 239 arguments: sq = 16004µs, q = 2583µs
with 220 arguments: sq = 15752µs, q = 2321µs
with 221 arguments: sq = 15539µs, q = 2406µs
with 222 arguments: sq = 15638µs, q = 2549µs
with 223 arguments: sq = 15427µs, q = 2490µs
with 224 arguments: sq = 15373µs, q = 2595µs
with 225 arguments: sq = 15793µs, q = 2513µs
with 226 arguments: sq = 15680µs, q = 2474µs
with 227 arguments: sq = 15799µs, q = 2546µs
with 228 arguments: sq = 15763µs, q = 2559µs
with 229 arguments: sq = 15611µs, q = 2483µs
with 230 arguments: sq = 15609µs, q = 2482µs
with 231 arguments: sq = 15702µs, q = 2470µs
with 232 arguments: sq = 15972µs, q = 2535µs
with 233 arguments: sq = 17315µs, q = 2564µs
with 234 arguments: sq = 25605µs, q = 4199µs
with 235 arguments: sq = 16088µs, q = 2548µs
with 236 arguments: sq = 16164µs, q = 2571µs
with 237 arguments: sq = 15826µs, q = 2542µs
with 238 arguments: sq = 15850µs, q = 2514µs
with 239 arguments: sq = 15844µs, q = 2646µs
with 220 arguments: sq = 15682µs, q = 2373µs
with 221 arguments: sq = 15624µs, q = 2478µs
with 222 arguments: sq = 15345µs, q = 2526µs
with 223 arguments: sq = 15824µs, q = 2479µs
with 224 arguments: sq = 15823µs, q = 2366µs
with 225 arguments: sq = 15767µs, q = 2472µs
with 226 arguments: sq = 16082µs, q = 2458µs
with 227 arguments: sq = 15692µs, q = 2490µs
with 228 arguments: sq = 15634µs, q = 2486µs
with 229 arguments: sq = 15692µs, q = 2469µs
with 230 arguments: sq = 15622µs, q = 2444µs
with 231 arguments: sq = 15872µs, q = 2734µs
with 232 arguments: sq = 16036µs, q = 2543µs
with 233 arguments: sq = 15945µs, q = 2436µs
with 234 arguments: sq = 15926µs, q = 2548µs
with 235 arguments: sq = 15939µs, q = 2483µs
with 236 arguments: sq = 15778µs, q = 2645µs
with 237 arguments: sq = 15838µs, q = 2578µs
with 238 arguments: sq = 15900µs, q = 2529µs
with 239 arguments: sq = 16086µs, q = 2605µs
with 220 arguments: sq = 15792µs, q = 2279µs
with 221 arguments: sq = 15804µs, q = 2405µs
with 222 arguments: sq = 16331µs, q = 2590µs
with 223 arguments: sq = 15598µs, q = 2405µs
with 224 arguments: sq = 15606µs, q = 2488µs
with 225 arguments: sq = 15585µs, q = 2481µs
with 226 arguments: sq = 15586µs, q = 2508µs
with 227 arguments: sq = 15536µs, q = 2581µs
with 228 arguments: sq = 15804µs, q = 2530µs
with 229 arguments: sq = 15774µs, q = 2518µs
with 230 arguments: sq = 15720µs, q = 2549µs
with 231 arguments: sq = 15790µs, q = 2458µs
with 232 arguments: sq = 15912µs, q = 2529µs
with 233 arguments: sq = 15871µs, q = 2500µs
with 234 arguments: sq = 15789µs, q = 2489µs
with 235 arguments: sq = 15466µs, q = 2654µs
with 236 arguments: sq = 15838µs, q = 2655µs
with 237 arguments: sq = 15778µs, q = 2508µs
with 238 arguments: sq = 15833µs, q = 2557µs
with 239 arguments: sq = 15815µs, q = 2575µs
with 220 arguments: sq = 15550µs, q = 2372µs
with 221 arguments: sq = 15605µs, q = 2368µs
with 222 arguments: sq = 15606µs, q = 2509µs
with 223 arguments: sq = 15467µs, q = 2501µs
with 224 arguments: sq = 15624µs, q = 2965µs
with 225 arguments: sq = 15470µs, q = 2409µs
with 226 arguments: sq = 15628µs, q = 2503µs
with 227 arguments: sq = 15692µs, q = 2503µs
with 228 arguments: sq = 15627µs, q = 2427µs
with 229 arguments: sq = 15790µs, q = 2608µs
with 230 arguments: sq = 15568µs, q = 2548µs
with 231 arguments: sq = 15553µs, q = 2416µs
with 232 arguments: sq = 15562µs, q = 2497µs
with 233 arguments: sq = 15508µs, q = 2557µs
with 234 arguments: sq = 16125µs, q = 2562µs
with 235 arguments: sq = 16023µs, q = 2530µs
with 236 arguments: sq = 15650µs, q = 2496µs
with 237 arguments: sq = 15634µs, q = 2534µs
with 238 arguments: sq = 15730µs, q = 2504µs
with 239 arguments: sq = 15655µs, q = 2542µs
with 220 arguments: sq = 15551µs, q = 2361µs
with 221 arguments: sq = 15424µs, q = 2478µs
with 222 arguments: sq = 15408µs, q = 2652µs
with 223 arguments: sq = 15680µs, q = 2411µs
with 224 arguments: sq = 15933µs, q = 2460µs
with 225 arguments: sq = 15877µs, q = 2496µs
with 226 arguments: sq = 15836µs, q = 2494µs
with 227 arguments: sq = 15781µs, q = 2471µs
with 228 arguments: sq = 15655µs, q = 2501µs
with 229 arguments: sq = 15598µs, q = 2509µs
with 230 arguments: sq = 15471µs, q = 2565µs
with 231 arguments: sq = 15844µs, q = 2520µs
with 232 arguments: sq = 15855µs, q = 2563µs
with 233 arguments: sq = 15652µs, q = 2544µs
with 234 arguments: sq = 15736µs, q = 2477µs
with 235 arguments: sq = 15994µs, q = 2642µs
with 236 arguments: sq = 15904µs, q = 2614µs
with 237 arguments: sq = 15547µs, q = 2542µs
with 238 arguments: sq = 15636µs, q = 2627µs
with 239 arguments: sq = 15568µs, q = 2619µs
with 220 arguments: sq = 15745µs, q = 2354µs
with 221 arguments: sq = 15789µs, q = 2306µs
with 222 arguments: sq = 15537µs, q = 2482µs
with 223 arguments: sq = 15752µs, q = 2541µs
with 224 arguments: sq = 15702µs, q = 2474µs
with 225 arguments: sq = 15601µs, q = 2521µs
with 226 arguments: sq = 15729µs, q = 2500µs
with 227 arguments: sq = 15652µs, q = 2666µs
with 228 arguments: sq = 15631µs, q = 2550µs
with 229 arguments: sq = 15495µs, q = 2430µs
with 230 arguments: sq = 15395µs, q = 2526µs
with 231 arguments: sq = 15924µs, q = 2574µs
with 232 arguments: sq = 15881µs, q = 2528µs
with 233 arguments: sq = 15496µs, q = 2605µs
with 234 arguments: sq = 15739µs, q = 2539µs
with 235 arguments: sq = 15808µs, q = 2525µs
with 236 arguments: sq = 15812µs, q = 2588µs
with 237 arguments: sq = 16154µs, q = 2677µs
with 238 arguments: sq = 16279µs, q = 2546µs
with 239 arguments: sq = 15973µs, q = 2570µs
with 220 arguments: sq = 15740µs, q = 2402µs
with 221 arguments: sq = 15503µs, q = 2515µs
with 222 arguments: sq = 15650µs, q = 2475µs
with 223 arguments: sq = 15450µs, q = 2447µs
with 224 arguments: sq = 15587µs, q = 2488µs
with 225 arguments: sq = 15706µs, q = 2516µs
with 226 arguments: sq = 15538µs, q = 2445µs
with 227 arguments: sq = 15797µs, q = 2562µs
with 228 arguments: sq = 15729µs, q = 2496µs
with 229 arguments: sq = 15740µs, q = 2498µs
with 230 arguments: sq = 15723µs, q = 2534µs
with 231 arguments: sq = 15641µs, q = 2506µs
with 232 arguments: sq = 15704µs, q = 2524µs
with 233 arguments: sq = 15912µs, q = 2573µs
with 234 arguments: sq = 16536µs, q = 2496µs
with 235 arguments: sq = 16741µs, q = 2443µs
with 236 arguments: sq = 15777µs, q = 2604µs
with 237 arguments: sq = 15785µs, q = 2555µs
with 238 arguments: sq = 15882µs, q = 2515µs
with 239 arguments: sq = 16054µs, q = 2557µs
with 220 arguments: sq = 15505µs, q = 2389µs
with 221 arguments: sq = 15543µs, q = 2442µs
with 222 arguments: sq = 15703µs, q = 2456µs
with 223 arguments: sq = 15297µs, q = 2414µs
with 224 arguments: sq = 15719µs, q = 2469µs
with 225 arguments: sq = 15762µs, q = 2568µs
with 226 arguments: sq = 15753µs, q = 2436µs
with 227 arguments: sq = 15639µs, q = 2445µs
with 228 arguments: sq = 15999µs, q = 2601µs
with 229 arguments: sq = 15884µs, q = 2618µs
with 230 arguments: sq = 15731µs, q = 2565µs
with 231 arguments: sq = 15755µs, q = 2551µs
with 232 arguments: sq = 15789µs, q = 2547µs
with 233 arguments: sq = 15578µs, q = 2525µs
with 234 arguments: sq = 15980µs, q = 2576µs
with 235 arguments: sq = 15860µs, q = 2564µs
with 236 arguments: sq = 15870µs, q = 2574µs
with 237 arguments: sq = 15788µs, q = 3015µs
with 238 arguments: sq = 15730µs, q = 2544µs
with 239 arguments: sq = 15692µs, q = 2593µs
with 220 arguments: sq = 15879µs, q = 2340µs
with 221 arguments: sq = 15665µs, q = 2332µs
with 222 arguments: sq = 15632µs, q = 2460µs
with 223 arguments: sq = 15606µs, q = 2509µs
with 224 arguments: sq = 15589µs, q = 2418µs
with 225 arguments: sq = 15586µs, q = 2512µs
with 226 arguments: sq = 15968µs, q = 2588µs
with 227 arguments: sq = 15664µs, q = 2521µs
with 228 arguments: sq = 15640µs, q = 2493µs
with 229 arguments: sq = 15680µs, q = 2569µs
with 230 arguments: sq = 15896µs, q = 2570µs
with 231 arguments: sq = 15714µs, q = 2579µs
with 232 arguments: sq = 15449µs, q = 2601µs
with 233 arguments: sq = 15379µs, q = 2534µs
with 234 arguments: sq = 15608µs, q = 2700µs
with 235 arguments: sq = 15526µs, q = 2616µs
with 236 arguments: sq = 15687µs, q = 2536µs
with 237 arguments: sq = 15563µs, q = 2630µs
with 238 arguments: sq = 15765µs, q = 2540µs
with 239 arguments: sq = 15869µs, q = 2524µs
with 220 arguments: sq = 15731µs, q = 2320µs
with 221 arguments: sq = 15477µs, q = 2477µs
with 222 arguments: sq = 15553µs, q = 2418µs
with 223 arguments: sq = 15488µs, q = 2558µs
with 224 arguments: sq = 15510µs, q = 2491µs
with 225 arguments: sq = 15397µs, q = 2420µs
with 226 arguments: sq = 15768µs, q = 2483µs
with 227 arguments: sq = 15764µs, q = 2539µs
with 228 arguments: sq = 15795µs, q = 2483µs
with 229 arguments: sq = 15669µs, q = 2434µs
with 230 arguments: sq = 15837µs, q = 2527µs
with 231 arguments: sq = 15843µs, q = 2503µs
with 232 arguments: sq = 15864µs, q = 2607µs
with 233 arguments: sq = 15678µs, q = 2502µs
with 234 arguments: sq = 15828µs, q = 2512µs
with 235 arguments: sq = 16007µs, q = 2533µs
with 236 arguments: sq = 16005µs, q = 2526µs
with 237 arguments: sq = 15668µs, q = 2494µs
with 238 arguments: sq = 15794µs, q = 2513µs
with 239 arguments: sq = 15930µs, q = 2735µs
with 220 arguments: sq = 15889µs, q = 2376µs
with 221 arguments: sq = 15572µs, q = 2379µs
with 222 arguments: sq = 15893µs, q = 2507µs
with 223 arguments: sq = 15994µs, q = 2589µs
with 224 arguments: sq = 15703µs, q = 2347µs
with 225 arguments: sq = 15660µs, q = 2512µs
with 226 arguments: sq = 15678µs, q = 2474µs
with 227 arguments: sq = 15563µs, q = 2452µs
with 228 arguments: sq = 15848µs, q = 2565µs
with 229 arguments: sq = 16139µs, q = 2600µs
with 230 arguments: sq = 15592µs, q = 2420µs
with 231 arguments: sq = 15503µs, q = 2503µs
with 232 arguments: sq = 15755µs, q = 2501µs
with 233 arguments: sq = 15668µs, q = 2543µs
with 234 arguments: sq = 15879µs, q = 2496µs
with 235 arguments: sq = 15715µs, q = 2546µs
with 236 arguments: sq = 15576µs, q = 2667µs
with 237 arguments: sq = 15798µs, q = 2684µs
with 238 arguments: sq = 15799µs, q = 2503µs
with 239 arguments: sq = 15774µs, q = 2622µs
with 220 arguments: sq = 15735µs, q = 2361µs
with 221 arguments: sq = 15470µs, q = 2468µs
with 222 arguments: sq = 15538µs, q = 2448µs
with 223 arguments: sq = 15619µs, q = 2478µs
with 224 arguments: sq = 15579µs, q = 2584µs
with 225 arguments: sq = 15872µs, q = 2519µs
with 226 arguments: sq = 15780µs, q = 2632µs
with 227 arguments: sq = 15879µs, q = 2540µs
with 228 arguments: sq = 15491µs, q = 2495µs
with 229 arguments: sq = 15774µs, q = 2517µs
with 230 arguments: sq = 15757µs, q = 2518µs
with 231 arguments: sq = 15671µs, q = 2537µs
with 232 arguments: sq = 15611µs, q = 2508µs
with 233 arguments: sq = 15509µs, q = 2529µs
with 234 arguments: sq = 15607µs, q = 2586µs
with 235 arguments: sq = 15908µs, q = 2642µs
with 236 arguments: sq = 15739µs, q = 2576µs
with 237 arguments: sq = 15537µs, q = 2512µs
with 238 arguments: sq = 15703µs, q = 2478µs
with 239 arguments: sq = 15592µs, q = 2534µs
with 220 arguments: sq = 15530µs, q = 2362µs
with 221 arguments: sq = 15841µs, q = 2429µs
with 222 arguments: sq = 15729µs, q = 2575µs
with 223 arguments: sq = 15837µs, q = 2529µs
with 224 arguments: sq = 15593µs, q = 2332µs
with 225 arguments: sq = 15637µs, q = 2582µs
with 226 arguments: sq = 15896µs, q = 2451µs
with 227 arguments: sq = 15855µs, q = 2476µs
with 228 arguments: sq = 15697µs, q = 2464µs
with 229 arguments: sq = 15505µs, q = 2458µs
with 230 arguments: sq = 15619µs, q = 2436µs
with 231 arguments: sq = 15486µs, q = 2646µs
with 232 arguments: sq = 15750µs, q = 2504µs
with 233 arguments: sq = 15649µs, q = 2575µs
with 234 arguments: sq = 15739µs, q = 2501µs
with 235 arguments: sq = 15490µs, q = 2593µs
with 236 arguments: sq = 16104µs, q = 2566µs
with 237 arguments: sq = 15959µs, q = 2518µs
with 238 arguments: sq = 15595µs, q = 2581µs
with 239 arguments: sq = 15854µs, q = 2605µs
with 220 arguments: sq = 15770µs, q = 2575µs
with 221 arguments: sq = 15610µs, q = 2316µs
with 222 arguments: sq = 15653µs, q = 2349µs
with 223 arguments: sq = 15708µs, q = 2452µs
with 224 arguments: sq = 15644µs, q = 2432µs
with 225 arguments: sq = 15637µs, q = 2399µs
with 226 arguments: sq = 15623µs, q = 2500µs
with 227 arguments: sq = 15531µs, q = 2638µs
with 228 arguments: sq = 15680µs, q = 2504µs
with 229 arguments: sq = 15410µs, q = 2529µs
with 230 arguments: sq = 15638µs, q = 2480µs
with 231 arguments: sq = 15565µs, q = 2401µs
with 232 arguments: sq = 15675µs, q = 2530µs
with 233 arguments: sq = 15639µs, q = 2495µs
with 234 arguments: sq = 15763µs, q = 2519µs
with 235 arguments: sq = 15788µs, q = 2534µs
with 236 arguments: sq = 15512µs, q = 2535µs
with 237 arguments: sq = 15416µs, q = 2506µs
with 238 arguments: sq = 15541µs, q = 2560µs
with 239 arguments: sq = 15984µs, q = 2709µs
with 220 arguments: sq = 15716µs, q = 2346µs
with 221 arguments: sq = 15762µs, q = 2439µs
with 222 arguments: sq = 16022µs, q = 2477µs
with 223 arguments: sq = 15616µs, q = 2491µs
with 224 arguments: sq = 15501µs, q = 2401µs
with 225 arguments: sq = 15427µs, q = 2390µs
with 226 arguments: sq = 15567µs, q = 2445µs
with 227 arguments: sq = 15270µs, q = 2540µs
with 228 arguments: sq = 15486µs, q = 2525µs
with 229 arguments: sq = 15732µs, q = 2486µs
with 230 arguments: sq = 15904µs, q = 2486µs
with 231 arguments: sq = 15787µs, q = 2541µs
with 232 arguments: sq = 15892µs, q = 2509µs
with 233 arguments: sq = 15593µs, q = 2493µs
with 234 arguments: sq = 15402µs, q = 2522µs
with 235 arguments: sq = 16009µs, q = 2460µs
with 236 arguments: sq = 15850µs, q = 2597µs
with 237 arguments: sq = 15669µs, q = 2493µs
with 238 arguments: sq = 15568µs, q = 2460µs
with 239 arguments: sq = 15715µs, q = 2444µs
with 220 arguments: sq = 15566µs, q = 2330µs
with 221 arguments: sq = 15574µs, q = 2580µs
with 222 arguments: sq = 15954µs, q = 2364µs
with 223 arguments: sq = 15856µs, q = 2381µs
with 224 arguments: sq = 15577µs, q = 2512µs
with 225 arguments: sq = 15713µs, q = 2579µs

Interesting. Perhaps the limit depends on the server configuration. Can you try replacing
let n = 220 + i % 20;

with
let n = 220 + i % 500;

and see if you observe a drop at a higher number of parameters?

I'm also using SQL Server 2017 on Linux, so that could be another reason why we see different results.

seems like it's around 400, yeah. Interesting.

But it actually seems okay (q relative to sq):
with 453 arguments: sq = 370µs, q = 4606µs
with 454 arguments: sq = 340µs, q = 4357µs
with 455 arguments: sq = 362µs, q = 4220µs
with 456 arguments: sq = 372µs, q = 4600µs
with 457 arguments: sq = 19583µs, q = 49094µs
with 458 arguments: sq = 19176µs, q = 49675µs
with 459 arguments: sq = 18658µs, q = 47952µs
with 460 arguments: sq = 18784µs, q = 48484µs

Oh, how curious. For me, simple_query() latency does not increase at that threshold..

PHP:
<?php
for ($i = 100; $i < 1000; $i++) {

    $conn = new PDO("sqlsrv:server=(local)");
    $conn->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

    $query = "SELECT 1 FROM sys.tables WHERE max_column_id_used IN (";
    $ids = array();
    for ($c = 0; $c < $i; $c++) {
        if ($c > 0) $query .= ",";
        $query .= "?";
        $ids[] = $c;
    }
    $query .= ")";

    $start = microtime(true);
    $stmt = $conn->prepare($query);
    $stmt->execute($ids);
    $stmt->fetchAll();
    //$stmt->execute($ids);
    $end = microtime(true);

    echo "$i took ". ($end - $start) . "\n";
}

So seems related to MSSQL:
404 took 0.0099308490753174
405 took 0.010256052017212
406 took 0.0098361968994141
407 took 0.010555028915405
408 took 0.0101478099823
409 took 0.0099310874938965
410 took 0.010159969329834
411 took 0.010158061981201
412 took 0.071446895599365
413 took 0.072839021682739
414 took 0.07230806350708

Interestingly, a very similar issue in MySQL and in another database I've been interacting with suggested to me that we might be seeing an unfortunate interplay between Nagle's algorithm and delayed ACKs. See https://github.com/blackbeam/rust-mysql-simple/issues/132#issuecomment-368090555 in particular. Setting TCP_NODELAY may help fix the issue.

I can confirm that the problem entirely disappears with the following diff applied:
diff --git a/tiberius/src/lib.rs b/tiberius/src/lib.rs
index c84a402..9d8f682 100644
--- a/tiberius/src/lib.rs
+++ b/tiberius/src/lib.rs
@@ -587,7 +587,10 @@ impl ConnectTarget {
             ConnectTarget::Tcp(ref addr) => {
                 let future = TcpStream::connect(addr, handle)
                     .from_err::<TdsError>()
-                    .map(|stream| Box::new(stream) as Box<BoxableIo>);
+                    .map(|stream| {
+                        stream.set_nodelay(true).unwrap();
+                        Box::new(stream) as Box<BoxableIo>
+                    });
                 Box::new(future)
             }
             // First resolve the instance to a port via the

I can find some reports to this, but I guess the problem is not really prevalent since usually Named Pipes are used insteadof TCP in the "windows world".
I'd be fine with setting that by default, could you just file that as PR against master?

Filed as #46. Surely on Windows TCP is still used when connecting to a remote server? That should also exhibit this same issue, as I believe Windows also uses delayed ACKs and Nagle's algorithm.

Relatedly, master has a decent number of changes (including API changes) that are not on crates.io yet. Is the plan to do another release soon-ish?

Yeah, I think that'd be a good idea. For me it's fine to just use a git dependency, but that's not the case for everyone. I think at this point it's more about getting bug fixes than it is about getting the new API, so the alternative would be to backport the fixes.


Add MAP_PRIVATE for mmap, if fs don't surport MAP_SHARED, we use MAP_PRIVATE instead

As we know, some fs don't surport MAP_SHARED, such as jffs2/logfs/9p/afs, and MAP_SHARED is not always needed, so we can use MAP_PRIVATE instead to increased usage scenario.
Signed-off-by: Shukui Yang<EMAIL_ADDRESS>

I tried testing MAP_PRIVATE locally and tests fail immediately locally.

Anymore details about the failure @benbjohnson ?


created apps.py in root folder to override the default admin site

Sir,
the earlier code was not working in Django 3.2 and was raising following error...
RuntimeError: 'reviews.apps' declares more than one default AppConfig: 'AdminConfig', 'ReviewsAdminConfig'
after removing parts of code under reviews/apps.py to rool folder under apps.py  its working fine.

there was a little correction in the code...


Allow specifying the full key version.

This means we don't need to give KMS key management IAM permissions
if you can specify the full thing.
Signed-off-by: Dan Lorenc<EMAIL_ADDRESS>

cc @priyawadhwa

looks like i need write access to this repo 😅


Scan options are being ignored

Expected Behaviour
When passing options object with custom prompt message as the third parameter to scan method, I expect to see this message when scanning
Actual Behaviour
Default message appears and my message is ignored
Reproduce Scenario (including but not limited to)
Run the sample code below and check the prompt message
Steps to Reproduce
Platform and Version
Android 7
(Android) What device vendor
LG G5 SE
Cordova CLI version and cordova platform version
Cordova 6.3.1
Platform android 7
Plugin version
0.7.1
Sample Code that illustrates the problem
    cordova.plugins.barcodeScanner.scan(
        function (result) {
            }
            alert("We got a barcode\n" +
                "Result: " + result.text + "\n" +
                "Format: " + result.format + "\n" +
                "Cancelled: " + result.cancelled);
        },
        function (error) {
            alert("Scanning failed: " + error);
        },
        {
            preferFrontCamera: false, // iOS and Android
            showFlipCameraButton: true, // iOS and Android
            showTorchButton: true, // iOS and Android
            torchOn: false, // Android, launch with the torch switched on (if available)
            prompt: "Custom Prompt Message", // Android
            resultDisplayDuration: 500, // Android, display scanned text for X ms. 0 suppresses it entirely, default 1500
            formats: "QR_CODE",
            disableAnimations: true, // iOS
            disableSuccessBeep: false // iOS and Android
        }
    );

Logs taken while reproducing problem

Any help please ?

Are you really using 0.7.1 version of the plugin? that's from 2013, that features weren't available by then

This is really weird !!
Visual studio installed version 0.7.1 I don't know why, I reinstalled the plugin and now version 6.0.8 is installed and it's working fine,
sorry for the inconvenience.


Generic query for cw3 unification

Small cw3 message update to be usable for external chains

Note: we're having an issue with coverage, possibly because tarpaulin version isn't pinned. I'll deal with it once we have a solution.


Better handling of complex trigger elements

Hi,
We've been using ezpz-tooltips in one of our projects but we've had problems when the trigger element contains child elements; for the sake of discussion let's say we have a TD -> A situation and the tooltip trigger is set on the TD.
Whenever the mouse would pass from TD onto the A, the tooltip would disappear and appear again. This may not be noticable on smaller tooltips, but we've put quite a lot of data into ours and they are also AJAX loaded, so the flicker became problematic.
To conserve server resources, we made another adjustment for ourselves: we've added a delay option to the ezpz_tooltip constructor (I can push that to the main version if you are interested) so users wouldn't accidentaly trigger the AJAX tooltips and now the tooltip hide/show bug became REALLY annoying.
Anyways, just wanted to contribute back, pull this if you agree with the changes.

Hi - I was also having problems with the flicker caused by child elements, the solution I've used simply swaps mouseover and mouseout for mouseenter and mouseleave events.

Closing due to inactivity & quite frankly the age of this pull request :laughing:


Question: How to Import existing VM to Cloudstack Managed instance?

ISSUE TYPE

Other

COMPONENT NAME

UI or API

CLOUDSTACK VERSION

4.15

CONFIGURATION

XCP-NG 8.0, Cloudstack 4.15
OS / ENVIRONMENT

N/A
SUMMARY

QUESTION:
How do I Import an Existing VM (which runs in same cluster that cloudstack manages) but not currently managed by Cloudstack - into Cloudstack managed instance?
I have several VMs that existed in our Xen/XCP environment, prior to CLoudstack installation. I would like to bring those into Cloudstack for ease of management.
One way I have found is copy the vhd file for the current VM and upload it to cloudstack as a Template, and then create a VM using that template. But that seems a bit not right way to do things.
Is there a better way/best practices way to do this?
STEPS TO REPRODUCE

EXPECTED RESULTS

ACTUAL RESULTS

@nxsbi this is currently only implemented on vmware. Your workaraound (to create a template from the external VM, register it as a template and deploy from there) is the only way at the moment as far as i know.

@nxsbi do you want to turn this into a feature request? and do you want to be involved in the work around it?

@nxsbi do you want to turn this into a feature request? and do you want to be involved in the work around it?

I am not a developer, so I cannot help with coding, but I can definitely help with testing if that helps.
It would be a nice feature to have incase someone who is currently on XCP/Xen wants to move to managed Cloudstack instance.
How can I help?

I am not a developer, so I cannot help with coding, but I can definitely help with testing if that helps.

...

How can I help?

Testing will help in the end, and how about making a more extensive functional description? investigate the vmware version design or documents of this functionality and describe how this is the same and where it differs. You can do this in a ticket here or on the wiki
tnx

@nxsbi we've the new ingestion feature you can try for VMware;
https://www.shapeblue.com/new-feature-first-look-vm-ingestion/
https://www.youtube.com/watch?v=EfAXyAF1wwM
Further there's the unmanage instance feature:
https://www.shapeblue.com/cloudstack-feature-first-look-enable-unmanaging-of-guest-instances/
For other hypervisors, the only way is to do a cold import, shortly - shutdown the VM, import the VM disk(s) as template and deploy VMs using that.
Thanks for the issue. Since this is largely a question I'm closing this.


proxmox module: parameters are mutually exclusive: clone|ostemplate|update

The changes from #35 broke the role mila.proxmox.container,
When running the role, it fails with "parameters are mutually exclusive: clone|ostemplate|update". This behavior is not documented : https://docs.ansible.com/ansible/latest/collections/community/general/proxmox_module.html.

This was added in https://github.com/ansible-collections/community.general/pull/7540


:ghost: Convert single/multi filter toolbar controls to use pf5 select

Address https://issues.redhat.com/browse/MTA-1872 & MTA-467
Upgrade our usage of the PF select component to the pf 5 supported version.
This PR both fixes the above mentioned bug & adopts the new PF select from pf5 for the shared FilterToolbar search / filter controls

Some problems I found playing with the new filter toolbars:

Deselecting an item in a filter list doesn't work / each time you click the same entry, another chip is added

application inventory page, with multiple applications available
open the name filter dropdown with or without filter text
click to select a name
name cannot be unselected here, only by clicking the x in the name chips list

The filter type drop down does not auto-close

If the multiselect filter select drop down opens from the twistee, keyboard focus is left on the checkbox.  But on selecting an item (space bar on the checkbox), focus goes back to the filter input box and any further attempt to select items with the spacebar actually types in the filter and changes the list.  Only hitting enter will allow selecting a second item, but this also closes the dropdown.

For example:
screencast-localhost_9000-2024.02.13-13_24_54.mp4

Cleaned things up a bit to more closely match this example https://www.patternfly.org/components/menus/select#multiple-typeahead-with-checkboxes & fixed most of the bugs you mentioned.