text:
Update openapi-circe-yaml to 0.11.2

About this PR
📦 Updates com.softwaremill.sttp.apispec:openapi-circe-yaml from 0.11.0 to 0.11.2
📜 GitHub Release Notes - Version Diff
Usage
✅ Please merge!
I'll automatically update this PR to resolve conflicts as long as you don't change it yourself.
If you'd like to skip this version, you can just close this PR. If you have any feedback, just mention me in the comments below.
Configure Scala Steward for your repository with a .scala-steward.conf file.
Have a fantastic day writing Scala!

⚙ Adjust future updates
Add this to your .scala-steward.conf file to ignore future updates of this dependency:
updates.ignore = [ { groupId = "com.softwaremill.sttp.apispec", artifactId = "openapi-circe-yaml" } ]

Or, add this to slow down future updates of this dependency:
dependencyOverrides = [{
  pullRequests = { frequency = "30 days" },
  dependency = { groupId = "com.softwaremill.sttp.apispec", artifactId = "openapi-circe-yaml" }
}]

labels: library-update, early-semver-minor, semver-spec-patch, version-scheme:early-semver, commit-count:1

:warning: Please install the  to ensure uploads and comments are reliably processed by Codecov.
Codecov Report
All modified and coverable lines are covered by tests :white_check_mark:

Project coverage is 50.00%. Comparing base (1bc1deb) to head (9ce6bc0).

:exclamation: Your organization needs to install the Codecov GitHub app to enable full functionality.
Additional details and impacted files
@@           Coverage Diff            @@
##           develop     #567   +/-   ##
========================================
  Coverage    50.00%   50.00%
========================================
  Files            5        5
  Lines           84       84
  Branches         1        1
========================================
  Hits            42       42
  Misses          42       42

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.

authors: codecov-commenter usommerl


text:
ValueError: ('name cannot be None', <class 'zeep.xsd.elements.element.Element'>)

https://github.com/utkarshohm/mf-platform-bse/blob/4a20cd9e2c58586fddcfb68957604553be73797a/api.py#L1103
Link to zeep element.py- https://github.com/mvantellingen/python-zeep/blob/master/src/zeep/xsd/elements/element.py

@ankit167 Have you found the solution yet?

header = zeep.xsd.Element(
        "Header",
        zeep.xsd.ComplexType(
            [
                zeep.xsd.Element(
                    "{http://www.w3.org/2005/08/addressing}Action", zeep.xsd.String()
                ),
                zeep.xsd.Element(
                    "{http://www.w3.org/2005/08/addressing}To", zeep.xsd.String()
                ),
            ]
        ),
    )

This should be the revised code.

source: gharchive/issue

repo: utkarshohm/mf-platform-bse

license: MIT

license_type: permissive

license_source: github-api


text:
USB 3.2 controller in QEMU guest

I am in the process of adding a egpu as a usb device to a windows 11 vm on a macos host. It would be great if I could get the full bandwidth of the device passed through. This would require a usb 3.2 controller option in utm. Please add the option for a usb 3.2 controller in utm.

There are three different versions of USB 3.2 (yes the spec name is hot trash).
USB 3.2 Gen 1 (aka the old "USB 3.0", 5Gbps) is supported via an XHCI device in QEMU.
I don't believe Gen 2 (10Gbps) or Gen 3 (20Gpbs) are currently supported upstream in QEMU; UTM would be blocked on waiting for that to be added.

@techpro2004 Are you certain your eGPU works with USB 3.2 or would it need Thunderbolt 3?

I don't believe Gen 2 (10Gbps) or Gen 3 (20Gpbs) are currently supported upstream in QEMU; UTM would be blocked on waiting for that to be added.

Really? Then how are people doing this 4 years ago? https://www.reddit.com/r/VFIO/comments/am10z3/success_thunderbolt_egpu_passthrough_on_dell_9560/
Or is this host-OS specific?

I don't believe Gen 2 (10Gbps) or Gen 3 (20Gpbs) are currently supported upstream in QEMU; UTM would be blocked on waiting for that to be added.

Really? Then how are people doing this 4 years ago? https://www.reddit.com/r/VFIO/comments/am10z3/success_thunderbolt_egpu_passthrough_on_dell_9560/
Or is this host-OS specific?

The link you shared is about a very different version of QEMU and a somewhat different use case. In the link above, someone is using the KVM backend to pass through a PCIe device. "KVM" is a "kernel virtual machine" and relies on the x86 CPU virtualization features. It is not available on Mac hosts (at least those with Apple Silicon).
On Mac, UTM uses the HVF & SPICE "backend" layers, which currently lack the features as mentioned above.

@conath Interesting, and good to know. I've previously used QEMU to pass through PCIe and USB controllers similar to the above using a command like below, so I didn't know if it was possible to do the same with the Thunderbolt 3 controller:
	sudo qemu-system-x86_64 \
	-name $vmname,process=$vmname \
	-machine type=q35,accel=kvm \
	-cpu host,kvm=off,hv_vendor_id=1234567890ab,hv_vapic,hv_time,hv_relaxed,hv_spinlocks=0x1fff \
	-smp 6,sockets=1,cores=3,threads=2 \
	-m 8G \
	-mem-path /dev/hugepages \
	-mem-prealloc \
	-balloon none \
	-rtc clock=host,base=localtime \
	-vga none \
	-nographic \
	-serial none \
	-parallel none \
	-soundhw hda \
	-usb \
	-device usb-host,vendorid=0x045e,productid=0x02e6 \
	-device usb-host,vendorid=0x045e,productid=0x02ea \
	-device usb-host,vendorid=0x045e,productid=0x02fe \
	\
	-device usb-host,vendorid=0x0bda,productid=0x8153 \
	\
	-device usb-host,vendorid=0x0a12,productid=0x0001 \
	\
	-device usb-host,vendorid=0x0424,productid=0x274d \
	-device usb-host,vendorid=0x0bb4,productid=0x0306 \
	-device usb-host,vendorid=0x0bb4,productid=0x2744 \
	\
	-device vfio-pci,host=01:00.0,multifunction=on \
	-device vfio-pci,host=01:00.1 \
	-drive if=pflash,format=raw,readonly,file=/usr/share/OVMF/OVMF_CODE.fd \
	-drive if=pflash,format=raw,file=/tmp/my_vars.fd \
	-boot order=dc \
	-drive id=disk0,if=virtio,cache=none,format=qcow2,file=/storage/KVM/Windows10/windows10vm.qcow2 \
	-drive id=disk1,if=virtio,cache=none,format=qcow2,file=/storage/KVM/Windows10/windows10vm_games.qcow2 \
	\
	-object input-linux,id=mouse1,evdev=/dev/input/by-id/usb-Logitech_USB_Receiver-if02-event-mouse \
	-object input-linux,id=kbd,evdev=/dev/input/by-id/usb-Logitech_USB_Receiver-event-kbd,grab_all=on,repeat=on \
	\
	-netdev type=tap,id=net0,ifname=vmtap0,vhost=on \
	-device virtio-net-pci,netdev=net0,mac=00:16:3e:00:01:01

This was for a high-performance gaming use-case.

KVM is a Linux specific thing. There’s only HVF on macOS.

authors: Fmstrat conath ideologysec osy techpro2004

repo: utmapp/UTM


text:
Hide and show Measurements

Is there any way toggle the visibility of the Measurements

ctrl + shift + h

authors: sahin utom

repo: utom/sketch-measure

license: mit

license_source: bigquery


text:
sketch 61.2 导出规范卡死

Sketch 61.2
Sketch Measure 2.8.1
导出时卡死，无法完成导出。

Sketch 61.2
Sketch Measure 2.8.1
导出时卡死，无法完成导出。

发现问题所在了，如果组件库里的组件，设置了背景，并勾选了“包含于实例”，会导致该组件无法导出，只要把此选项去掉即可。

This suggestion of removing the background color in instances worked for me, thanks. But it's an illogical and unsustainable long-term solution for sketch measure, @utom . It would be good to get it fixed...

authors: bduffley simon-shaw


text:
android build error "Activity cannot be converted to Godot"

hello
when i try to build my project for android i receive an error
Task :compileDebugJavaWithJavac FAILED
project/android/fmod/src/FmodSingleton.java:32: error: incompatible types: Activity cannot be converted to Godot

i had to add implementation instead of compile() and make my build.gradle immutable or else it would change the file back and tell me that there was no compile() methods.

Hello !
What is your godot version ?

Hello ! What is your godot version ?
godot 3.4.4

@sneekee-stache can you try to replace demo/android/fmod/src/FmodSingleton.java by this one: https://github.com/utopia-rise/fmod-gdnative/blob/bugfix/android-export-plugin/demo/android/fmod/src/FmodSingleton.java ? To see if it fix it on your side

@piiertho it work, the project build itself but i don't have any sound playing on my phone, it play the sound on my pc tho.

@sneekee-stache @piiertho can this be closed?

@sneekee-stache @piiertho can this be closed?

No, not until https://github.com/utopia-rise/fmod-gdnative/pull/119 is merged.

authors: bitbrain piiertho sneekee-stache

repo: utopia-rise/fmod-gdnative


text:
Feature/signal registration

This implements signals and their registration.
Get back signals code from kotlin-native implem (maybe need to be centralized in a common artifact ?).
This fix mapping from JVM variant type to Wire type.
This adds GodotError class and fake VariantArray.
This does not implements signal binds, this needs real VariantArray implem.

Okay for merge.
Note: Might be necessary to rework the string manipulation for the name properties in Signal.

I agree with this. There is maybe a way we can improve this like what we did with constructors. We should open an improvement issue.

source: gharchive/pull-request

repo: utopia-rise/godot-jvm


text:
Adding selection and number of characters to display

Hi I think your directive is really helpful.
However, I had some requirements in terms of how it would behave for example I wanted different display for different naming type:
'uttesh Ranjit' ==> UR
'Aidan Vandier Sat' ==> AV
'Gael Magma Do Borneo' ==> GM
'Adrian Di Bisumbio' ==> AB
"Antoine" ==> AN
"Antoine Kouroki" ==> AK
"Adrien Kou" ==> AK

for that I built and tested the function in the following pull request
The code might not be the most efficient but it does the job, if you are okay with it I was wondering if it could be added to your directive?

Thanks @AKFourSeven for the update,
just a small correction is needed in the code
add this value in params object
multiWord : attrs.multiword
and your html will accept an extra attribute for multiword which will look like this
 <ng-letter-avatar data="C" height="70" width="70" shape="round" avatarborder="true" multiWord="true"></ng-letter-avatar>
@uttesh great job on dude.

@AKFourSeven  thanks for the PR man, need to check with other changes i'm doing on this plugin, planing to add this feature in the new/existing, working on revamp of the plugin with code clean up.

@sudhindrapc @uttesh thanks for both of your feedback.
I have updated the code with multiWord missing.
Lemme know how this goes, I would be happy to have an update of this directive with this feature out of the box!

@AKFourSeven updated the library with first name and last name avatar changes, setting the existing attribute 'charCount' to '2' will generate the first name and last name combined avatar. if only first name is present and charCount is 2 then it will generate for the first 2 letters.

Meaning you have accepted the pull request ?

@AKFourSeven no , there was a branch conflict and i made few other changes code cleanup/format and functions. thanks

@uttesh okay I see, well glad it still did help.

authors: AKFourSeven sudhindrapc uttesh

repo: uttesh/ngletteravatar


text:
chmod accepts invalid mode string

$ touch foo
$ ls -lh foo
-rw-r----- 1 tavianator tavianator 0 Mar 24 21:08 foo
$ ./target/debug/deps/chmod u=rwxg=rx ./foo
$ ls -lh foo
-r-xr----- 1 tavianator tavianator 0 Mar 24 21:08 foo
$ chmod u=rwxg=rx ./foo
chmod: invalid mode: ‘u=rwxg=rx’
Try 'chmod --help' for more information.

Noticed this when writing https://github.com/uutils/findutils/pull/154.  chmod shouldn't accept u=rwxg=rx, there needs to be a comma: u=rwx,g=rx.  I'm not sure how chmod is interpreting it, but it doesn't act like the comma version.
POSIX gives a grammar for symbolic modes in the chmod docs: https://pubs.opengroup.org/onlinepubs/9699919799/utilities/chmod.html

It seems that this issue has been resolved, as running the command ./target/debug/coreutils chmod u=rwxg=rx ./foo currently results in an error message: chmod: invalid operator (expected +, -, or =, but found g). Additionally, the file permissions for foo do not change as shown in the issue example.
Perhaps the error message could be updated to include the comma operator by changing it to chmod: invalid operator (expected +, -, =, or , but found g) ?

This is where the error is thrown:
https://github.com/uutils/coreutils/blob/862a2df924eabf9c2c99dae520b1d4d78e361b57/src/uucore/src/lib/features/mode.rs#L90-L102
If I understand correctly, that mode module only handles the parsing of a singular mode, at least I can't see any splitting on , characters. So maybe it would be confusing to add an error message involving , somewhere where none of the parsing involves , characters. But I don't really know of a better place either.

The , is parsed here:
https://github.com/uutils/coreutils/blob/862a2df924eabf9c2c99dae520b1d4d78e361b57/src/uu/chmod/src/chmod.rs#L337
I think it might be nice to unify those. There could be a parse function which returns a Vec of modes, which then also gives a better error.

authors: Ideflop fritzrehde tavianator tertsdiepraam

repo: uutils/coreutils


text:
fix two clippy warnings

Just small stylistic things.

wow I even didn't know such syntax exists

if let is just syntactic sugar for a match with one arm (and optionally an else arm without pattern destructuring). There's also while let, which can sometimes be useful.

@llogiq honestly I wondered about let Some alike in haskell

You may want to read up on patterns. :smile: Those things are ludicrously powerful.

authors: Heather llogiq


text:
Add configuration to exclude certain branches from check against upstream

This is to produce clean report which does not mention branches known for their specific role (which should not necessarily appear upstream).
The configuration should accept regex as some of the branches have complex names (due their automatic creation).

Specifying list of regex-es in local_branch_filters filters corresponding local branches.
The issue is closed.

repo: uvsmtid/git-group


text:
TN-1617

Implements /api/report/questionnaire_status

Hello @pbugni! Thanks for submitting the PR.

There are no PEP8 issues in the file portal/models/qb_status.py !

In the file portal/views/reporting.py, following                are the PEP8 issues :

Line 283:5: E303 too many blank lines (2)

There are no PEP8 issues in the file tests/__init__.py !

There are no PEP8 issues in the file tests/test_assessment_status.py !

There are no PEP8 issues in the file tests/test_reporting.py !

@pbugni You've got a conflict FYI

As per the current file listing:  "These merge commits were added into this branch cleanly."
Closing this PR - apparently the changes were already merged.

authors: ivan-c pbugni pep8speaks


text:
Multi Windows support

The current implementation works for one window only

done

repo: uwerat/qpagbm


text:
I'm not getting the root node to get the AST. Do I need to manually print the AST ??

Since I'm trying to get the AST elements . I'm unable to get them. If you have any suggestions please help!

Hi @panky1998 ,
you should be able to call getCtx on each ASG element to retrieve the corresponding AST element. So for each ASG element there should be an AST element named ctx. The AST ctx element should always be an ANTLR class.
The interface is in ASGElement.java

Best
Ulrich

An arbitrary example for such a call would be this line.

Hi @uwol ,
As you said I'm calling each AST element with getCtx(). But when I'm trying to call AST elements it is returning numbers. Am I calling in improper way? Please help me as am a novice...
         // navigate on ASG
        CompilationUnit compilationUnit = program.getCompilationUnit("HelloWorld");
        ProgramUnit programUnit = compilationUnit.getProgramUnit();
        DataDivision dataDivision = programUnit.getDataDivision();
        DataDescriptionEntry dataDescriptionEntry = dataDivision
        .getWorkingStorageSection().getDataDescriptionEntry("ITEMS");
        Integer levelNumber = dataDescriptionEntry.getLevelNumber();

        System.out.println("Compilation unit => "+compilationUnit.getCtx());
        System.out.println("Program Unit => "+programUnit.getCtx());
        System.out.println("Data Division => "+dataDivision.getCtx());
        System.out.println("Data Description Entry => "+dataDescriptionEntry.getCtx());
        System.out.println("Level number =--> "+levelNumber);

I'm getting output as
Compilation unit => [1198]
Program Unit => [1201 1198]
Data Division => [1211 1201 1198]
Data Description Entry => [3171 2286 2005 1997 1211 1201 1198]
Level number =--> 1
Regards,
Pankaj

Hi @panky1998 ,
this is correct, those are the ANTLR ParserRuleContext elements. In Eclipse debugger you can introspect them.
You can use them to navigate to children, to the parent element etc. For this the normal ANTLR documentation applies, nothing COBOL- or ProLeap-specific.
Best
Ulrich

repo: uwol/proleap-cobol-parser


text:
datepicker wrong caret position

Expected behaviour
The caret should be show according to location of text field
Actual behaviour
Tell us what happens instead.
Datepicker version used
try latest version which is i guess  1.6.4
Example code

same problem with me

Try this:
https://github.com/uxsolutions/bootstrap-datepicker/issues/1602

authors: JohnnyVidales mubbashar pudjamansyurin

repo: uxsolutions/bootstrap-datepicker


text:
Print cloud-init logs when a deployment fails

@rjmateus  Can we print cloud-init logs when a deployment fails in that way?
Maybe we must contribute in the libvirt provider for it? Somewhere here?
https://github.com/dmacvicar/terraform-provider-libvirt/blob/main/libvirt/resource_libvirt_domain.go
https://github.com/dmacvicar/terraform-provider-libvirt/blob/main/libvirt/resource_libvirt_cloud_init.go
The idea is to append it to this error message:
â”‚ Error: Error: couldn't retrieve IP address of domain.Please check following:
â”‚ 1) is the domain running proplerly?
â”‚ 2) has the network interface an IP address?
â”‚ 3) Networking issues on your libvirt setup?
â”‚  4) is DHCP enabled on this Domain's network?
â”‚ 5) if you use bridge network, the domain should have the pkg qemu-agent installed
â”‚ IMPORTANT: This error is not a terraform libvirt-provider error, but an error caused by your KVM/libvirt infrastructure configuration/setup
â”‚  timeout while waiting for state to become 'all-addresses-obtained' (last state: 'waiting-addresses', timeout: 5m0s)
â”‚
â”‚   with module.cucumber_testsuite.module.debian-minion.module.minion.module.host.libvirt_domain.domain[0],
â”‚   on /home/jenkins/jenkins-build/workspace/manager-Head-dev-acceptance-tests-NUE/results/sumaform/backend_modules/libvirt/host/main.tf line 68, in resource "libvirt_domain" "domain":
â”‚   68: resource "libvirt_domain" "domain" {

You mean that we have colored output?

You mean that we have colored output?

hahaha nono
I want the files /var/log/cloud-init.log and /var/log/cloud-init-output.log printed as part of the sumaform deployment, together with the message that I shared.

See an example of the information they provide:
Cloud-init v. 20.2-8.48.1 running 'modules:config' at Mon, 28 Feb 2022 10:09:23 +0000. Up 32.66 seconds.
Retrieving repository 'os_pool_repo' metadata [.done]
Building repository 'os_pool_repo' cache [....done]
All repositories have been refreshed.
Loading repository data...
Reading installed packages...
'qemu-guest-agent' is already installed.
Package 'qemu-guest-agent' is not available in your repositories. Cannot reinstall, upgrade, or downgrade.
Resolving package dependencies...

The following 5 NEW packages are going to be installed:
  avahi libavahi-common3 libavahi-core7 libdaemon0 nss-mdns

5 new packages to install.
Overall download size: 348.8 KiB. Already cached: 0 B. After the operation, additional 894.7 KiB will be used.
Continue? [y/n/v/...? shows all options] (y): y
Retrieving package libavahi-common3-0.8-150400.4.4.x86_64 (1/5),  42.3 KiB ( 51.2 KiB unpacked)
Retrieving: libavahi-common3-0.8-150400.4.4.x86_64.rpm [done]
Retrieving package libdaemon0-0.14-1.23.x86_64 (2/5),  29.4 KiB ( 59.4 KiB unpacked)
Retrieving: libdaemon0-0.14-1.23.x86_64.rpm [done]
Retrieving package libavahi-core7-0.8-150400.4.4.x86_64 (3/5), 101.5 KiB (220.8 KiB unpacked)
Retrieving: libavahi-core7-0.8-150400.4.4.x86_64.rpm [done]
Retrieving package avahi-0.8-150400.4.4.x86_64 (4/5), 136.0 KiB (431.2 KiB unpacked)
Retrieving: avahi-0.8-150400.4.4.x86_64.rpm [done]
Retrieving package nss-mdns-0.14.1-150400.8.3.x86_64 (5/5),  39.7 KiB (132.0 KiB unpacked)
Retrieving: nss-mdns-0.14.1-150400.8.3.x86_64.rpm [done]

Checking for file conflicts: [.......done]
(1/5) Installing: libavahi-common3-0.8-150400.4.4.x86_64 [.....done]
(2/5) Installing: libdaemon0-0.14-1.23.x86_64 [.....done]
(3/5) Installing: libavahi-core7-0.8-150400.4.4.x86_64 [..........done]
(4/5) Installing: avahi-0.8-150400.4.4.x86_64 [...........done]
Additional rpm output:
Updating /etc/sysconfig/avahi ...
Created symlink /etc/systemd/system/dbus-org.freedesktop.Avahi.service -> /usr/lib/systemd/system/avahi-daemon.service.
Created symlink /etc/systemd/system/multi-user.target.wants/avahi-daemon.service -> /usr/lib/systemd/system/avahi-daemon.service.
Created symlink /etc/systemd/system/sockets.target.wants/avahi-daemon.socket -> /usr/lib/systemd/system/avahi-daemon.socket.

(5/5) Installing: nss-mdns-0.14.1-150400.8.3.x86_64 [..........done]
Failed to start qemu-ga@virtio\x2dports-org.qemu.guest_agent.0.service: Unit qemu-ga@virtio\x2dports-org.qemu.guest_agent.0.service not found.
Cloud-init v. 20.2-8.48.1 running 'modules:final' at Mon, 28 Feb 2022 10:09:25 +0000. Up 34.03 seconds.
2022-02-28 10:09:31,188 - util.py[WARNING]: Failed running /var/lib/cloud/instance/scripts/runcmd [5]
2022-02-28 10:09:31,195 - cc_scripts_user.py[WARNING]: Failed to run module scripts-user (scripts in /var/lib/cloud/instance/scripts)
2022-02-28 10:09:31,196 - util.py[WARNING]: Running module scripts-user (<module 'cloudinit.config.cc_scripts_user' from '/usr/lib/python3.6/site-packages/cloudinit/config/cc_scripts_user.py'>) failed
ci-info: no authorized SSH keys fingerprints found for user sles.
Cloud-init v. 20.2-8.48.1 finished at Mon, 28 Feb 2022 10:09:31 +0000. Datasource DataSourceNoCloud [seed=/dev/sr0][dsmode=net].  Up 40.28 seconds

@srbarrios we don't control the log from the sumaform side. That would need changes to the terraform libvirt provider.
I'm not sure if this issue should be reported here. Upstream may not accept a change like this, because this is not a domain creation problem, is a cloud-init problem, inside the machine (I don't even know if the provider can get data from the disk inside the machine).
As far as I know, all data the provides retrieve is obtained from libvirt.

@rjmateus it's true we do not control it, still we could just echo it from salt script (if ever we get to that stage)

@moio Good point. Do you think we should echo that always, and should by the first state to apply (since cloud-init runs at start-up)?

Please try and take a look, if you find it too verbose it could be behind a flag.

I'm not sure this is possible at libvirt provider side: it has no idea whether cloud-init is used or not.
Even with the assumption that cloud-init is used, the provider would need access inside the VM to check for the logs. And we are precisely in a situation where it is impossible to access inside the VM, be it via the network or via qemu-agent...

authors: Bischoff moio nodeg rjmateus srbarrios

repo: uyuni-project/sumaform


text:
change tools repo for RHEL based os to use EL8

Signed-off-by: Ricardo Mateus rmateus@suse.com
What does this PR change?
Centos tools repository are out of support and we should use EL8 tool for all rhel based systems from now on.

I have made changes according to your comment.
I also changed the cloud-init repo


text:
DNS分流不起作用

你正在使用哪个版本的 V2Ray？
V2Ray 5.3.0

你的使用场景是什么？
Chrome通过Socks/VMess访问网站

你看到的异常现象是什么？
在设置DNS分流时，将baidu.com通过https://2.2.2.2/dns-query来解析，正常应该是无法访问百度，实际依然正常访问。

你期待看到的正常表现是怎样的？
设置DNS分流后，无法正常访问百度。
请附上你的配置

服务端配置：
{
  "log": {
    "access": "/var/log/v2ray/access.log",
    "error": "/var/log/v2ray/error.log",
    "loglevel": "Warning"
  },
  "inbounds": [
    {
      "port": 443,
      "listen": "0.0.0.0",
      "protocol": "vmess",
      "settings": {
        "clients": [
          {
            "id": "xxxxxxxxxxxxxxxxxxxxxxxxxxxx",
            "alterId": 0
          }
        ]
      }
    },
    {
      "port": 553,
      "protocol": "shadowsocks",
      "settings": {
        "method": "aes-128-gcm",
        "ota": true,
        "password": "xxxxxxxxxxxxxxxxx"
      }
    }
  ],
  "outbounds": [
    {
      "tag": "INTERNET_OUT",
      "protocol": "freedom",
      "settings": {
        "domainStrategy": "UseIPv4"
      }
    },
    {
      "tag": "WARP-GO_INTERFACE",
      "protocol": "freedom",
      "settings": {
        "domainStrategy": "AsIs"
      },
      "streamSettings": {
        "sockopt": {
          "interface": "WARP",
          "tcpFastOpen": true
        }
      },
      "sendThrough": "172.16.0.2"
    }
  ],
  "routing": {
    "rules": [
      {
        "type": "field",
        "outboundTag": "WARP-GO_INTERFACE",
        "domain": [
          "domain:ip.sb",
          "domain:ip.gs",
          "domain:openai.com",
          "domain:ai.com"
        ]
      },
      {
        "type": "field",
        "outboundTag": "INTERNET_OUT",
        "network": "udp,tcp"
      }
    ]
  },
  "dns": {
    "nameServer": [
      {
        "address": {
          "address": "https+local://1.1.1.1/dns-query"
        }
      }
    ],
    "domainMatcher": "mph",
    "queryStrategy": "USE_IP4",
    "fallbackStrategy": "Disabled"
  }
}

客户端配置：
{
  "dns": {
    "fallbackStrategy": "disabled_if_any_match",
    "servers": [
      {
        "address": "https://2.2.2.2/dns-query",
        "domains": ["domain:baidu.com"],
        "queryStrategy": "use_ip4"
      }
    ],
    "tag": "dns"
  },
  "inbounds": [
    {
      "listen": "127.0.0.1",
      "port": 1080,
      "protocol": "socks",
      "settings": { "udp": true },
      "sniffing": {
        "destOverride": ["http", "tls", "quic"],
        "enabled": true,
        "metadataOnly": false,
        "routeOnly": true
      },
      "tag": "socks-in"
    },
    {
      "listen": "127.0.0.1",
      "port": 1081,
      "protocol": "http",
      "sniffing": {
        "destOverride": ["http", "tls", "quic"],
        "enabled": true,
        "metadataOnly": false,
        "routeOnly": true
      },
      "tag": "http-in"
    }
  ],
  "log": { "loglevel": "debug" },
  "outbounds": [
    {
      "domainStrategy": "UseIPv4",
      "mux": { "concurrency": 8, "enabled": true },
      "protocol": "vmess",
      "settings": {
        "vnext": [
          {
            "address": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
            "port": 1234,
            "users": [
              {
                "alterId": 0,
                "id": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
                "security": "auto"
              }
            ]
          }
        ]
      },
      "streamSettings": {
        "network": "tcp",
        "tcpSettings": { "header": { "type": "none" } }
      },
      "tag": "proxy"
    },
    { "protocol": "freedom", "tag": "direct" },
    { "protocol": "freedom", "tag": "bypass" },
    { "protocol": "blackhole", "tag": "block" },
    {
      "protocol": "dns",
      "proxySettings": { "tag": "proxy", "transportLayer": true },
      "settings": {
        "address": "8.8.8.8",
        "network": "tcp",
        "port": 53,
        "userLevel": 1
      },
      "tag": "dns-out"
    }
  ],
  "policy": {
    "levels": { "1": { "connIdle": 30 } },
    "system": { "statsOutboundDownlink": true, "statsOutboundUplink": true }
  },
  "routing": {
    "domainMatcher": "mph",
    "domainStrategy": "IPIfNonMatch",
    "rules": [
      { "ip": ["223.5.5.5"], "outboundTag": "direct", "type": "field" },
      {
        "inboundTag": ["socks-in", "http-in"],
        "outboundTag": "dns-out",
        "port": "53",
        "type": "field"
      },
      {
        "domain": ["domain:xxxxxxxxxxxxxxx"],
        "outboundTag": "proxy",
        "type": "field"
      },
      {
        "ip": ["geoip:cn", "geoip:private"],
        "outboundTag": "bypass",
        "type": "field"
      },
      {
        "domain": [
          "geosite:cn",
          "geosite:google-cn",
          "domain:xxxxxxxxxxxxxxxx"
        ],
        "outboundTag": "bypass",
        "type": "field"
      },
      { "outboundTag": "proxy", "port": "0-65535", "type": "field" }
    ]
  },
  "stats": {}
}

请附上出错时软件输出的错误日志

服务器端错误日志：
运行正常，无错误日志。

客户端错误日志：
[Warning] V2Ray 5.3.0 started
[Info] [3737653397] proxy/http: request to Method [CONNECT] Host [www.baidu.com:443] with URL [//www.baidu.com:443]
127.0.0.1:13786 accepted [tcp:www.baidu.com:443]  [http-in -> bypass]
[Info] [3737653397] app/dispatcher: sniffed domain: www.baidu.com for tcp:www.baidu.com:443
[Info] [3737653397] app/dispatcher: taking detour [bypass] for [tcp:www.baidu.com:443]
[Info] [3737653397] proxy/freedom: opening connection to tcp:www.baidu.com:443
[Info] [3737653397] transport/internet/tcp: dialing TCP to tcp:www.baidu.com:443
[Info] [1504060505] proxy/http: request to Method [CONNECT] Host [gimg3.baidu.com:443] with URL [//gimg3.baidu.com:443]
[Info] [1504060505] app/dispatcher: sniffed domain: gimg3.baidu.com for tcp:gimg3.baidu.com:443
[Info] [1504060505] app/dispatcher: taking detour [bypass] for [tcp:gimg3.baidu.com:443]
127.0.0.1:13788 accepted [tcp:gimg3.baidu.com:443]  [http-in -> bypass]
[Info] [1504060505] proxy/freedom: opening connection to tcp:gimg3.baidu.com:443
[Info] [1504060505] transport/internet/tcp: dialing TCP to tcp:gimg3.baidu.com:443
[Info] [287825781] proxy/http: request to Method [CONNECT] Host [hectorstatic.baidu.com:443] with URL [//hectorstatic.baidu.com:443]
[Info] [287825781] app/dispatcher: sniffed domain: hectorstatic.baidu.com for tcp:hectorstatic.baidu.com:443
127.0.0.1:13789 accepted [tcp:hectorstatic.baidu.com:443]  [http-in -> bypass]
[Info] [287825781] app/dispatcher: taking detour [bypass] for [tcp:hectorstatic.baidu.com:443]
[Info] [287825781] proxy/freedom: opening connection to tcp:hectorstatic.baidu.com:443
[Info] [287825781] transport/internet/tcp: dialing TCP to tcp:hectorstatic.baidu.com:443
[Info] [1678260574] proxy/http: request to Method [CONNECT] Host [mbd.baidu.com:443] with URL [//mbd.baidu.com:443]
127.0.0.1:13792 accepted [tcp:mbd.baidu.com:443]  [http-in -> bypass]
[Info] [1678260574] app/dispatcher: sniffed domain: mbd.baidu.com for tcp:mbd.baidu.com:443
[Info] [1678260574] app/dispatcher: taking detour [bypass] for [tcp:mbd.baidu.com:443]
[Info] [1678260574] proxy/freedom: opening connection to tcp:mbd.baidu.com:443
[Info] [1678260574] transport/internet/tcp: dialing TCP to tcp:mbd.baidu.com:443
[Info] [2549319657] proxy/http: request to Method [CONNECT] Host [passport.baidu.com:443] with URL [//passport.baidu.com:443]
[Info] [2549319657] app/dispatcher: sniffed domain: passport.baidu.com for tcp:passport.baidu.com:443
[Info] [2549319657] app/dispatcher: taking detour [bypass] for [tcp:passport.baidu.com:443]
127.0.0.1:13794 accepted [tcp:passport.baidu.com:443]  [http-in -> bypass]
[Info] [2549319657] proxy/freedom: opening connection to tcp:passport.baidu.com:443
[Info] [2549319657] transport/internet/tcp: dialing TCP to tcp:passport.baidu.com:443

请附上访问日志

没有baidu相关日志

其它相关的配置文件（如 Nginx）和相关日志
如果 V2Ray 无法启动，请附上 --test 命令的输出
如果 V2Ray 服务运行异常，请附上 journal 日志

这个Inbound里的Sniffer，从你的连接中嗅探出了baidu.com:

    {
      "listen": "127.0.0.1",
      "port": 1081,
      "protocol": "http",
      "sniffing": {
        "destOverride": ["http", "tls", "quic"],
        "enabled": true,
        "metadataOnly": false,
        "routeOnly": true
      },
      "tag": "http-in"
    }

路由规则中，你的Domain Strategy是IPIfNonMatch，所以在第一轮规则匹配中，以下规则不会被匹配，因为destOverride使得该连接的现目标是baidu.com，原始的目标IP没有了：

      {
        "ip": ["geoip:cn", "geoip:private"],
        "outboundTag": "bypass",
        "type": "field"
      },

当第一轮没有一个规则成功匹配时，才会进行第二轮匹配，并且在该规则下使用内置DNS去解析baidu.com，从而进行IP匹配。

所以第一轮规则匹配中，会命中以下规则：

      {
        "domain": [
          "geosite:cn",
          "geosite:google-cn",
          "domain:xxxxxxxxxxxxxxxx"
        ],
        "outboundTag": "bypass",
        "type": "field"
      }

这个路径规则会匹配嗅探出的baidu.com，从而使用bypass Outbound进行连接。因为已经匹配成功了，所以不需要再用内置DNS进行解析。这就是IPIfNonMatch的意义，用于减少DNS解析次数，提高性能。

{ "protocol": "freedom", "tag": "bypass" },

Bypass作为一个Freedom Outbound，也有Domain Strategy，默认为AsIs，即直接用嗅探出的baidu.com在操作系统中建立连接。此时baidu.com是被操作系统的DNS解析逻辑处理的，因此你的系统DNS若不指向V2Ray的DNS，则不会被内置DNS解析。因此，https://2.2.2.2/dns-query全程没有被使用到。
如果将bypass的DomainStrategy设置为UseIP/UseIPv4/UseIPv6的话，则会使用内置DNS进行解析，应该会出现符合你预期的行为。

将{ "protocol": "freedom", "tag": "bypass" }更改为以下内容后，还是能访问百度，只不过速度慢了点，日志中也出现了错误。
{
    "protocol": "freedom",
    "settings": { "domainStrategy": "UseIPv4" },
    "tag": "bypass"
 }

日志：
[Warning] V2Ray 5.3.0 started
127.0.0.1:10153 accepted [tcp:www.baidu.com:443]  [http-in -> bypass]
[Error] app/dns: failed to retrieve response > Post "https://2.2.2.2/dns-query": context deadline exceeded
127.0.0.1:10161 accepted [tcp:hectorstatic.baidu.com:443]  [http-in -> bypass]
[Error] app/dns: failed to retrieve response > Post "https://2.2.2.2/dns-query": context deadline exceeded
127.0.0.1:10166 accepted [tcp:passport.baidu.com:443]  [http-in -> bypass]
[Error] app/dns: failed to retrieve response > Post "https://2.2.2.2/dns-query": context deadline exceeded

If your intention is to block this site, domain rules may be a more optimal choice than dispatching the DNS queries to an invalid address, as the built-in DNS is not used by the external clients, which may use, or resort to DoH, operating system DNS or cache to resolve the correct IP.

My intention is to use the specified DNS to resolve some domains, not to block them and just use baidu.com to test. This problem still happens after using ipconfig /flushdns to clean DNS cache.

将{ "protocol": "freedom", "tag": "bypass" }更改为以下内容后，还是能访问百度，只不过速度慢了点，日志中也出现了错误。
{
    "protocol": "freedom",
    "settings": { "domainStrategy": "UseIPv4" },
    "tag": "bypass"
 }

日志：
[Warning] V2Ray 5.3.0 started
127.0.0.1:10153 accepted [tcp:www.baidu.com:443]  [http-in -> bypass]
[Error] app/dns: failed to retrieve response > Post "https://2.2.2.2/dns-query": context deadline exceeded
127.0.0.1:10161 accepted [tcp:hectorstatic.baidu.com:443]  [http-in -> bypass]
[Error] app/dns: failed to retrieve response > Post "https://2.2.2.2/dns-query": context deadline exceeded
127.0.0.1:10166 accepted [tcp:passport.baidu.com:443]  [http-in -> bypass]
[Error] app/dns: failed to retrieve response > Post "https://2.2.2.2/dns-query": context deadline exceeded

检查了一下源代码，这是预期现象：
https://github.com/v2fly/v2ray-core/blob/0c5abc7e53aed41480dd2a07f611bd34c753e880/proxy/freedom/freedom.go#L107-L111
https://github.com/v2fly/v2ray-core/blob/0c5abc7e53aed41480dd2a07f611bd34c753e880/proxy/freedom/freedom.go#L67-L80
https://github.com/v2fly/v2ray-core/blob/0c5abc7e53aed41480dd2a07f611bd34c753e880/transport/internet/dialer.go#L82-L87
也即当内置DNS没能解析出IP地址时，不会修改访问目标baidu.com，将保持AsIs的行为使用baidu.com进行访问。

确实是这个原因，多谢大佬详细解答，配置正确的DNS后解析正常了。

authors: EsuRt Vigilans


text:
DNS servers with same tag in a SINGLE configuration file got unexpected merged

What version of V2Ray are you using?
master build
V2Ray 5.15.1 (V2Fly, a community-driven edition of V2Ray.) Custom (go1.22.2 linux/amd64)
What's your scenario of using V2Ray?
Not related
What problems have you encountered?
Multiple DNS servers with same tag in a single configuration file are unexpected merged into one, with all domain rules merged together, and the last server's address & settings taken effect.
What's your expectation?
According to documentation here, same-tag-merging in slices should only take effect on inbounds and outbounds.
so DNS servers with same tag in a single configuration file should be all preserved.
Please attach your configuration here
What I typed in v4 configuration:
{
// omitted

  "dns": {
    "queryStrategy": "UseIPv4",
    "fallbackStrategy": "disabled-if-any-match",
    "domainMatcher": "mph",
    "servers": [
      {
         "address": "aaa.bbb.ccc.ddd", // DNS from ISP
         "port": 53,
         "domains": [
           "geosite:cn"
         ],
         "tag": "dns-domestic"
      },
      {
         "address": "114.114.114.114", // 114 public DNS as backup
         "port": 53,
         "domains": [
           "geosite:cn"
         ],
         "tag": "dns-domestic",
      },
      {
         "address": "https://1.1.1.1/dns-query", // Cloudflare DoH as default fallback
         "tag": "dns-international",
      }
    ]
  },
  "routing": {
    "domainStrategy": "IPIfNonMatch",
    "domainMatcher": "mph",
    "rules": [
      // omitted
      {
        "type": "field",
        "inboundTag": "dns-domestic",
        "outboundTag": "direct"   // always direct sent domestic site DNS queries
      },
      {
        "type": "field",
        "inboundTag": "dns-international",
        "outboundTag": "proxy"  // proxy international cf DoH queries
      }
      // omitted
    ]
  }

// omitted
}

What I actually got after configuration parsed:
{
// omitted

  "dns": {
    "queryStrategy": "UseIPv4",
    "fallbackStrategy": "disabled-if-any-match",
    "domainMatcher": "mph",
    "servers": [
      {
         "address": "114.114.114.114", // got overwritten by the last one
         "port": 53,
         "domains": [
           "geosite:cn",
           "geosite:cn"  // Yes, it even has the same domain rule repeated twice
         ],
         "tag": "dns-domestic",
      },
      {
         "address": "https://1.1.1.1/dns-query", // Cloudflare DoH as default fallback
         "tag": "dns-international",
      }
    ]
  },
  "routing": {
    "domainStrategy": "IPIfNonMatch",
    "domainMatcher": "mph",
    "rules": [
      // omitted
      {
        "type": "field",
        "inboundTag": "dns-domestic",
        "outboundTag": "direct"   // always direct send domestic site DNS queries
      },
      {
        "type": "field",
        "inboundTag": "dns-international",
        "outboundTag": "proxy"  // proxy international cf DoH queries
      }
      // omitted
    ]
  }

// omitted
}

What I actually got after configuration parsed:
What is your reproduction steps for What I actually got after configuration parsed? How is the second configuration generated/printed?

What are your reproduction steps for What I actually got after configuration parsed? How is the second configuration generated/printed?

The actual effective configuration is exported by adding stdout print code before+after config load.
It can also be verified by adding some print code during config build.
From what I have seen, the issue reported here can be easily reproduced with v4 JSON config format.
Other config formats are not tested.

@povsister Can reproduce with v2ray convert.
However, dns tags do not work this way, the tag is only used for routing, and not participating in DNS server selection. It should be more like a bug with the parsing logic of v2ray convert, rather than the DNS itself.
Can you check whether you can get expected behavior without any sorts of merging, just run with the config as-is?

However, dns tags do not work this way. The tag is only used for routing, and not participating in DNS server selection.

I know exactly what i am doing.
I have two domestic DNS servers(one as primary and one as backup) with same rules/tags configured within the DNS server list, and I am intending to identitify and direct send domestic DNS traffic.
I have read the code of DNS processing, and I am sure those 2 domestic servers will be used in sequence for domestic sites.

it should be more like a bug with the parsing logic of v2ray convert, rather than the DNS itself.

I agree with that, too.
As I have mentioned the "merging" behaviour referred in documentation, I don't think the same-tag-merging shoud be applied to DNS configurations.

Can you check whether you can get expected behavior without any sorts of merging, just run with the config as-is?

I am using a workaround right now, by configuring different tag on different servers.
It works as expected now.
For example:
{
// omitted

  "dns": {
    "queryStrategy": "UseIPv4",
    "fallbackStrategy": "disabled-if-any-match",
    "domainMatcher": "mph",
    "servers": [
      {
         "address": "aaa.bbb.ccc.ddd", // DNS from ISP
         "port": 53,
         "domains": [
           "geosite:cn"
         ],
         "tag": "dns-domestic"
      },
      {
         "address": "114.114.114.114", // 114 public DNS as backup
         "port": 53,
         "domains": [
           "geosite:cn"
         ],
         "tag": "dns-domestic-backup", //  <- WORKAROUND HERE
      },
      {
         "address": "https://1.1.1.1/dns-query", // Cloudflare DoH as default fallback
         "tag": "dns-international",
      }
    ]
  },
  "routing": {
    "domainStrategy": "IPIfNonMatch",
    "domainMatcher": "mph",
    "rules": [
      // omitted
      {
        "type": "field",
        "inboundTag": ["dns-domestic", "dns-domestic-backup"], // <- Don't forget to add tag here.
        "outboundTag": "direct"   // always direct sent domestic site DNS queries
      },
      {
        "type": "field",
        "inboundTag": "dns-international",
        "outboundTag": "proxy"  // proxy international cf DoH queries
      }
      // omitted
    ]
  }

// omitted
}

See it. I would seek some time to look into the code and propose a fix for it.

authors: Vigilans povsister