Return 0 when call openblas

Now we want to porting openblas to Tizen platform.
I have finished to build the libopenblas_armv7-r0.3.1.dev.a in Tizen platform, but when i call the api of blas, it return 0, for example:
int dim = 2;
float a[2] = {1.0,2.0};
float b[2]={1.0,1.0};
printf ("%f\n",cblas_sdot(dim, a, 1, b, 0));
it return 3.000000 in my linux openblas.
But when i run it in Tizen openblas, it return 0.000000.
I have attached my build log, can you help me to check this issue?Thank you very much~
openblas-build.txt

build cmd:
make TARGET=ARMV7

the build log is as follow:
cc -O2 -DMAX_STACK_ALLOC=2048 -marm -Wall -DF_INTERFACE_GFORT -fPIC -DNO_WARMUP -DMAX_CPU_NUMBER=1 -DMAX_PARALLEL_NUMBER=1 -mfpu=vfpv3 -march=armv7-a -DASMNAME=cblas_sdot -DASMFNAME=cblas_sdot_ -DNAME=cblas_sdot_ -DCNAME=cblas_sdot -DCHAR_NAME="cblas_sdot_" -DCHAR_CNAME="cblas_sdot" -DNO_AFFINITY -I.. -I. -UDOUBLE  -UCOMPLEX -DCBLAS -c dot.c -o cblas_sdot.o
cc -c -O2 -DMAX_STACK_ALLOC=2048 -marm -Wall -DF_INTERFACE_GFORT -fPIC -DNO_WARMUP -DMAX_CPU_NUMBER=1 -DMAX_PARALLEL_NUMBER=1 -mfpu=vfpv3 -march=armv7-a -DASMNAME=sdot_k -DASMFNAME=sdot_k_ -DNAME=sdot_k_ -DCNAME=sdot_k -DCHAR_NAME="sdot_k_" -DCHAR_CNAME="sdot_k" -DNO_AFFINITY -I.. -UDOUBLE  -UCOMPLEX -UCOMPLEX -UDOUBLE ../kernel/arm/sdot_vfp.S -o sdot_k.o
Tizen is like new platform,it is  arm 32bit

Build was done in qemu it seems. Which cpu did you tell it to emulate ? It showed test failures in CHERK and SAMAX that I did not see on real ARMV7 hardware, but not in SDOT. What hardware does your actual Tizen platform run, and - silly question I know - are you sure that your test linked against the libopenblas you just built, and not some other version of BLAS ?

for the last question, sure ,i have modified openBLAS code and add logs, to do one simple test.
Only build two .o file and link it as one simple lib like this:
cc -O2 -DMAX_STACK_ALLOC=2048 -marm -Wall -DF_INTERFACE_GFORT -fPIC -DNO_WARMUP -DMAX_CPU_NUMBER=1 -DMAX_PARALLEL_NUMBER=1 -mfpu=vfpv3 -march=armv7-a -DASMNAME=cblas_sdot -DASMFNAME=cblas_sdot_ -DNAME=cblas_sdot_ -DCNAME=cblas_sdot -DCHAR_NAME="cblas_sdot_" -DCHAR_CNAME="cblas_sdot" -DNO_AFFINITY -I.. -I. -UDOUBLE  -UCOMPLEX -DCBLAS -c dot.c -o cblas_sdot.o
cc -c -O2 -DMAX_STACK_ALLOC=2048 -marm -Wall -DF_INTERFACE_GFORT -fPIC -DNO_WARMUP -DMAX_CPU_NUMBER=1 -DMAX_PARALLEL_NUMBER=1 -mfpu=vfpv3 -march=armv7-a -DASMNAME=sdot_k -DASMFNAME=sdot_k_ -DNAME=sdot_k_ -DCNAME=sdot_k -DCHAR_NAME="sdot_k_" -DCHAR_CNAME="sdot_k" -DNO_AFFINITY -I.. -UDOUBLE  -UCOMPLEX -UCOMPLEX -UDOUBLE ../kernel/arm/sdot_vfp.S -o sdot_k.o
ar  -ru libopenblas_haswellp-r0.3.1.dev.a cblas_sdot.o  ../kernel/sdot_k.o
ranlib  libopenblas_haswellp-r0.3.1.dev.a
Now libopenblas_haswellp-r0.3.1.dev.a only include cblas_sdot.o  ../kernel/sdot_k.o
so it can offer this api:  cblas_sdot
after that ,i build one simple test app, when it run in linux, it can print the right answer.
When i run it in tizen, it print 0.0000.
Build in linux :
cc -O2 -DMAX_STACK_ALLOC=2048 -Wall -m64 -DF_INTERFACE_GFORT -fPIC -DSMP_SERVER -DNO_WARMUP -DMAX_CPU_NUMBER=8 -DMAX_PARALLEL_NUMBER=1 -DASMNAME=cblas_sdot -DASMFNAME=cblas_sdot_ -DNAME=cblas_sdot_ -DCNAME=cblas_sdot -DCHAR_NAME="cblas_sdot_" -DCHAR_CNAME="cblas_sdot" -DNO_AFFINITY -I.. -I. -UDOUBLE  -UCOMPLEX -DCBLAS -c dot.c -o cblas_sdot.o
cc -c -O2 -DMAX_STACK_ALLOC=2048 -Wall -m64 -DF_INTERFACE_GFORT -fPIC -DSMP_SERVER -DNO_WARMUP -DMAX_CPU_NUMBER=8 -DMAX_PARALLEL_NUMBER=1 -DASMNAME=sdot_k -DASMFNAME=sdot_k_ -DNAME=sdot_k_ -DCNAME=sdot_k -DCHAR_NAME="sdot_k_" -DCHAR_CNAME="sdot_k" -DNO_AFFINITY -I.. -UDOUBLE  -UCOMPLEX -UCOMPLEX -UDOUBLE ../kernel/x86_64/sdot.c -o sdot_k.o
ar  -ru libopenblas_haswellp-r0.3.1.dev.a cblas_sdot.o  ../kernel/sdot_k.o
ranlib  libopenblas_haswellp-r0.3.1.dev.a
i think it is same build steps.
One more question, when i build it in Tizen, it looks to make the .o  with this:
../kernel/arm/sdot_vfp.S -o sdot_k.o
and in sdot_vfp.S, there is no API like CNAME, so i think maybe this api "sdot_k"  is missed?
If it select the right file to build sdot_k.o?

You could try running nm on your libopenblas.a to check that sdot_k is defined, but I guess your minimalistic libopenblas.a should probably work. (At least I am not aware that the build process for ARMV7 is fundamentally different from x86_64). Perhaps try using the generic C implementation from arm/dot.c instead of sdot_vfp.S to build sdot_k.o in case there is something special with the vfp support in your target cpu. (In the normal build process, this is selected in KERNEL.ARMV5 (which is indirectly included in KERNEL.ARMV7 and overriden by the SDOTKERNEL=sdot_vfp.S line there).

Change (or just comment out) that line in kernel/arm/KERNEL.ARMV7 (and possibly the lines for DDOTKERNEL etc as well, depending on what further tests with cblas_ddot, cdot, zdot show). Or build for TARGET=ARMV5 if you want to avoid the assembly kernels completely for now.

but our platform is armv7, i am not sure it can work if i use target=armv5 ..

"ARMV5" for OpenBLAS mostly means "use the generic C kernels everywhere", which may still be reasonably fast if your compiler is good. But you are right that there are also some differences in the block sizes chosen for loop unrolling in param.h. So for now just set SDOTKERNEL=dot.c in KERNEL.ARMV7 (or comment out the line that sets it to dot_vfp.S in KERNEL.ARMV6). If you find other problems you can always look up in KERNEL.ARMV5 what the non-assembly version is named.
(Maybe there is a bug in the current dot_vfp.S that just happens to be harmless on the Cortex processors, or the cpu in your Tizen box needs an additional register save/restore around vfp calls
that is not necessary on other hardware)

Dear martin-frbg
Thank you very much~
i will have a try and tell your the result~

Is there any hardware info available for what you are targeting ? All I seem to find are the artik boards that appear to have regular CortexA7 or A9 cpus.

now the target is locked in our company, i will tell you in 6/26, because tomorrow i need to go to hospital~
Thank you

@martin-frbg
This is our device info:
bash-3.2#  cat /proc/cpuinfo
processor       : 0
BogoMIPS        : 52.00
Features        : fp asimd evtstrm aes pmull sha1 sha2 crc32
CPU implementer : 0x41
CPU architecture: 8
CPU variant     : 0x0
CPU part        : 0xd03
CPU revision    : 4
processor       : 1
BogoMIPS        : 52.00
Features        : fp asimd evtstrm aes pmull sha1 sha2 crc32
CPU implementer : 0x41
CPU architecture: 8
CPU variant     : 0x0
CPU part        : 0xd03
CPU revision    : 4
processor       : 2
BogoMIPS        : 52.00
Features        : fp asimd evtstrm aes pmull sha1 sha2 crc32
CPU implementer : 0x41
CPU architecture: 8
CPU variant     : 0x0
CPU part        : 0xd03
CPU revision    : 4
processor       : 3
BogoMIPS        : 52.00
Features        : fp asimd evtstrm aes pmull sha1 sha2 crc32
CPU implementer : 0x41
CPU architecture: 8
CPU variant     : 0x0
CPU part        : 0xd03
CPU revision    : 4
processor       : 4
BogoMIPS        : 52.00
Features        : fp asimd evtstrm aes pmull sha1 sha2 crc32
CPU implementer : 0x41
CPU architecture: 8
CPU variant     : 0x0
CPU part        : 0xd03
CPU revision    : 4
processor       : 5
BogoMIPS        : 52.00
Features        : fp asimd evtstrm aes pmull sha1 sha2 crc32
CPU implementer : 0x41
CPU architecture: 8
CPU variant     : 0x0
CPU part        : 0xd03
CPU revision    : 4
processor       : 6
BogoMIPS        : 52.00
Features        : fp asimd evtstrm aes pmull sha1 sha2 crc32
CPU implementer : 0x41
CPU architecture: 8
CPU variant     : 0x0
CPU part        : 0xd09
CPU revision    : 2
processor       : 7
BogoMIPS        : 52.00
Features        : fp asimd evtstrm aes pmull sha1 sha2 crc32
CPU implementer : 0x41
CPU architecture: 8
CPU variant     : 0x0
CPU part        : 0xd09
CPU revision    : 2
Hardware        : Lux
Revision        : 0003
Serial          : 52006d9bb267a43f

Seems your cpu does not offer vfp support (at least as far as the linux kernel is concerned) ? The "CPU architecture: 8" on the other hand makes me wonder if this is actually a 64bit, ARMV8 architecture.

No, it is a 32bit, ARMV7 architecture i think~  :)

Seems the sdot_vfp.S is broken, I see the same wrong result now on a Cortex-A17. @ashwinyes, can you help here ? Perhaps it is simply not returning the result in the expected register(s) since the addition of softfp support.

CPU part : 0xd09   --> This is Cortex-A73 which is ARMv8
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.100048_0002_04_en/jfa1406793219596.html
You can also look at features which contains asimd which is a ARMv8 feature and architecture is 8 which indicates Aarch64.
But having said that, Cortex A73 can run 32-bit ARM code.
Can you try building. Do a clean build.
make TARGET=ARMV7 ARM_SOFTFP_ABI=1

Just as an aside, on my A17 that also shows the problem,  __ARM_PCS_VFP is defined, and building with ARM_SOFTFP_ABI=1 is not possible with the linaro default gcc (missing stubs-soft.h). Seems I still have not grasped the various fp modes (this is an asus tinkerboard, so compilation runs locally in linux)

Thanks for the detailed explanation. The problem does indeed appear to be much older, and is probably "only" about missing support for the special case of INCY being zero (taking a too early exit perhaps).

Indeed it appears to be the early exit to sdot_kernel_L999 after the cmp INC_Y, #0 that is causing this (same over-optimization in ddot, and almost certainly c/zdot as well). Seems to have gone unnoticed for years (but is not from original libGoto2, as it did not yet support ARM).


set up?

Guys, How to set it up? Can somebody write full manual? I used Karabiner Elements version, when it was needed to "write the keys" by my myself. I changed the ssd and now I need to set up this program again. I am downloading, installing KE and after I'm going to the application with the window of Karabiner - Elements Preferences. I want to switch Enter to the Shift_R, but it is not working. Maybe I'm doing something wrong? Please, help, because I need to work, and this program is nice, thats why I chose it. P.S. Sorry for mad skill of English language.

Follow this instruction.
https://github.com/tekezo/Karabiner-Elements/blob/master/usage/README.md#how-to-configure-karabiner-elements


PR: Remember undocked state of plugins when closed and allow to close Outline when the Editor is maximized or in an Editor window

Description of Changes

If a plugin is closed when it's undocked by going to View > Panes, then it'll be automatically undocked when made visible again.
Add a new Close action to the Options menu of undocked plugins, so that this new functionality can be more easily discovered by users.
If a plugin is closed while undocked, also close it when clicking on the Close button of its window. This means that if users want to dock it again, they'll need to click on the Dock action of the respective plugin.
Allow users to close the Outline when shown next to the maximized editor and in editor windows. This required migrating EditorMainWindow to the new API.
Rename Unlock position in the Options menu of plugins to Move to another position. This is because Unlock and Undock differ by a single letter in English, so it's quite easy to click on one of those actions when you really want to click on the other (I made that mistake constantly while working on this PR).

API changes

Use SpyderMenuMixin to create main window menus. That allows to easily access and use them in other places (e.g. in EditorMainwindow).
Make render method of SpyderToolbar public. This follows a similar change done for SpyderMenu.
Add toolbar_id to the constructor of ApplicationToolbar. That allows to more easily create those toolbars.
Register toolbar toggle view actions in ACTION_REGISTRY to access them easily (e.g. for testing).

Visual changes
New close when undocked functionality

New close action in undocked plugins

Changes in EditorMainWindow

Issue(s) Resolved
Fixes #16265.
Affirmation
By submitting this Pull Request or typing my (user)name below,
I affirm the Developer Certificate of Origin
with respect to all commits and content included in this PR,
and understand I am releasing the same under Spyder's MIT (Expat) license.

I certify the above statement is true and correct: @ccordoba12.

Leaving this for 5.4.1 so I can gather feedback from other devs during our developers meeting.

@dalthviz, this is finally ready for review. It ended up being a big PR because I decided to migrate EditorMainWindow to the new API to allow users to close the Outline when working with it. I also expanded our test suite to cover the new functionality added here.

@jitseniesen, this is ready for another review. About your comments:

When the Outline pane is undocked, there is still an "Undock" action in its options menu, and clicking that leads to a core dump.

Thanks for noticing it. I was able to easily reproduce it and it should be fixed now.

I would change "Move to another position" to "Move", because moving something means moving it to another position. I don't think I have ever seen this spelled out in a menu.

Great suggestion! I implemented it in one of my last commits.

I don't like that "Close" in options menu of undocked panes is different from the "Close" button. The latter sometimes hides and sometimes docks. But this seems a conscious decision on your part, so fair enough.

We'll see what users think about this UX.

If I maximize the editor pane and then click on View > Window Layouts > Spyder default layout, the result is strange and kind of halfway between the maximized layout and the default layout. But this is probably not related to the PR.

Great catch! Although not related to the changes here (as you suspected), I took the opportunity to fix it as well.

Since the failure in our tests was already fixed by PR #22100, I'm going to merge this one.


Update on wake up QUESTION

@maximkulkin
I am thinking about to make a door sensor.
ESP8266 will be in sleep when i run the HomeKit app and normally it will not get update.
Is there any trick to bypass or send a fake update?

Not that I am aware of. If controller does not connect to accessory (and connection is supposed to be initiated by controller), there is no way to let controllers know. Best bet is to use bridge devices that do not sleep and are always connected.

@maximkulkin Thanks.
Maybe it is possible with a Bluetooth thing..
As you said using a bridge is exact solution.

i started building battery sensors, i have not finished the project yet but it is working.  the concept is the following door sensor consists of a small Arduino with a LoRa module that uses a 3v battery and sends data to esp with a LoRa module.  esp is configured as a bridge and is permanently plugged in.  In this way, the esp can accept multiple sensors and motion sensors.


Build(deps-dev): Bump @testing-library/dom from 8.14.0 to 8.16.0 (#3737)

Pull request opened by the merge tool on behalf of #3737

Merged in 7a5defb9339953efda947bba6aef083360c6d1c6


CV event detection?

I forget if we discussed this over email, but is event detection for the CV (consonant-vowel) task on the agenda? I think this would just be based on the microphone and/or speaker channels. I think that might be one of the last main functions to replicate the old version of the GUI.
There was a way that people were previously evaluating when stop/starts were (I heard it was a bunch of thresholding, etc.), and heard from Matt that it wasn't exactly ideal. I'd be happy to explore some better options to implement. Let me know what you think!

@jrliu95  yes it is on the plan, but thanks for creating an Issue for that, so we can discuss it here.
I'm working on getting the Periodograms working before that, that will be the next task!

@jrliu95 you can now use the event detector for files with audio stimuli and subjects response at CV tasks.
Tools -> CV event detection
It will open a window for you to try the auto-detect parameters in a small piece of your data, and then you can run it for the whole audio signal.
After this, start and stop intervals for both stimulus and responses are saved in the file. You can generate the grid ERPs aligned with stimulus and responses too.
Let me know what do you think of it!

I'll close it, please let me know if something needs change so I reopen the issue

I'm getting an error saying that there's no audio data in the NWB file. I have the microphone and both speakers as TimeSeries (named microphone, speaker1, and speaker2). Is there a specific naming convention I need to change?

yes, both microphone and speaker data should be saved as TimeSeries:

'Microphone CV' in nwb.acquisition
'Speaker CV' in nwb.stimulus

Is it possible to keep them all under acquisition? There are 4 analog channels on our recording rig, and sometimes there are no speakers, or button press is on analog 1, or the mic is not connected--so there are too many conditions to code for and I'd rather keep this general. I'm adding an option to my code to change the default analog labels, with the defaults being ['microphone', 'speaker1', 'speaker2', 'anin4']. Is it possible for you to change the event detection to use microphone and speaker1 under nwb.acquisition?
I could also add a statement that if the default labels are to be used, that the speakers go under nwb.stimulus.

sure, that's simple to change! I think the most important is to be close to the standards in your lab.
One thing to notice, though, is the coherence with the groups within the NWB file, for example, saving speaker data, which is in fact stimulus, in acquisition group, might be misleading.
Can you let me know once you decide on this, then I change it to follow your decision?

Good point, okay I will change it so that microphone and anin4 will remain under nwb.acquisition and any label that has "speaker" in it will be under nwb.stimulus. CV blocks should be using the default labels, so you would just need microphone under nwb.acquisition and speaker1 under nwb.stimulus.

@jrliu95 it should be working now!

Great! Few things:
It looks like you can set the microphone to anything under acquisition, this could be useful in the future. But could you change it so that it defaults to microphone? It had defaulted to anin4, I just changed it in the drop-down selection.
It looks like it's only picking up on the speaker induced events? I know that the speaker events get subtracted from the mic channel, but it doesn't seem like the speaking events are being picked up in the mic channel.
Also, the first speaker event is capturing the start sound. That uniform tone at the beginning of the speaker channel (and it will be at the end too) is the stop/start tone that is played at the beginning and end of tasks, it shouldn't be considered an event. I'm not sure if these are things can be changed purely with the 'width' and 'threshold' parameters. Let me know what you think!

Oh, actually now that I zoomed in, it looks like the red microphone events are being picked up in the almost exact intervals between blue speaker events. Is this how it's designed?

@jrliu95 it looks like the fan was blowing on the mic during recording. It's hard to pull apart events when that happens. Maybe your more advanced methods are a good way to handle this. If you want to implement logmmse and pyAudioAnalysis feel free to create a PR and we'd be happy to merge it.

Gotcha, just want to confirm whether this was the case generally for creating CV ERPs in the Matlab GUI, i.e. that speaking events could be be much longer (in fact more than double in some cases) than they actually were. If so, then that's fine for now (I'm supposed to present a tutorial on this in 2 weeks to the lab) and I can try to implement better audio detection when I get time.

My recollection was that when the microphone was in a good recording
environment that the script found the beginning and end successfully. We
rarely used the end time though.
On Wed, Jul 24, 2019 at 4:52 PM Jessie Liu<EMAIL_ADDRESS>wrote:

Gotcha, just want to confirm whether this was the case generally for
creating CV ERPs in the Matlab GUI, i.e. that speaking events could be be
much longer (in fact more than double in some cases) than they actually
were. If so, then that's fine for now (I'm supposed to present a tutorial
on this in 2 weeks to the lab) and I can try to implement better audio
detection when I get time.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/luiztauffer/ecogVIS/issues/21?email_source=notifications&email_token=AAGOEEQWJIFLBC4TS37UFU3QBDFIVA5CNFSM4H6NLFC2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOD2XW6EI#issuecomment-514813713,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AAGOEEWWLD5DIYRYJV36QILQBDFIVANCNFSM4H6NLFCQ
.

--
Ben Dichter, PhD
Data Science Consultant

I've updated, it only gets the microphone acquisition now.
It's easy to change that behaviour to get all TimeSeries types under acquisition, though, just uncomment/comment these lines in subDialogs.py
#if type(self.parent.model.nwb.acquisition[resp]).__name__ == 'TimeSeries':
            if resp == 'microphone':

Great, thanks!


Update Orebfuscator

Looking at Imprex' releases, we can update to 5.3.1.

Completed with 5048283e418f7f2201e9bb2b269ba1a4b20e02cf


Rails 5 issue nokogiri (1.6.8)

C:/RailsInstaller/Ruby2.2.0/lib/ruby/gems/2.2.0/cache/nokogiri-1.6.8-x86-mingw32.gem.
It may be corrupted.
An error occurred while installing nokogiri (1.6.8), and Bundler cannot
continue.
Make sure that gem install nokogiri -v '1.6.8' succeeds before bundling.
In Gemfile:
activeadmin was resolved to 1.0.0.pre4, which depends on
rails was resolved to 5.0.0, which depends on
actioncable was resolved to 5.0.0, which depends on
actionpack was resolved to 5.0.0, which depends on
actionview was resolved to 5.0.0, which depends on
rails-dom-testing was resolved to 2.0.1, which depends on
nokogiri

Hi, nokogiri-1.6.8-x86-mingw32.gem may have not been downloaded correctly, you will need to remove it and make sure that bundler is able to download the correct file incase you have a proxy or firewall.

ping @akshay18496 were you able to resolve your issue?

I'm closing this for now. If you're still experiencing your original issue don't be afraid to re-open this ticket.


Netty DNS Resolver cannot handle DNS Response with A, AAAA and NS records: SearchDomainUnknownHostException

Context
We are using Netty in our Java applications running on Azure Container Apps (which runs on top of Kubernetes internally).
Our application regularly calls a dependency, always using the same request.
Actual behavior
The longer DNS response produces the following Netty error:
 io.netty.resolver.dns.DnsResolveContext$SearchDomainUnknownHostException: Failed to resolve 'xyz.xyz-xyz.location.azurecontainerapps.io' [A(1)] and search domain query for configured domains failed as well: [k8se-apps.svc.cluster.local, svc.cluster.local, cluster.local]
	at io.netty.resolver.dns.DnsResolveContext.finishResolve(DnsResolveContext.java:1088)
	at io.netty.resolver.dns.DnsResolveContext.tryToFinishResolve(DnsResolveContext.java:1035)
	at io.netty.resolver.dns.DnsResolveContext.query(DnsResolveContext.java:422)
	at io.netty.resolver.dns.DnsResolveContext.access$700(DnsResolveContext.java:66)
	at io.netty.resolver.dns.DnsResolveContext$2.operationComplete(DnsResolveContext.java:493)
	at io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:590)
	at io.netty.util.concurrent.DefaultPromise.notifyListeners0(DefaultPromise.java:583)
	at io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:559)
	at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:492)
	at io.netty.util.concurrent.DefaultPromise.setValue0(DefaultPromise.java:636)
	at io.netty.util.concurrent.DefaultPromise.setFailure0(DefaultPromise.java:629)
	at io.netty.util.concurrent.DefaultPromise.tryFailure(DefaultPromise.java:118)
	at io.netty.resolver.dns.DnsQueryContext.tryFailure(DnsQueryContext.java:261)
	at io.netty.resolver.dns.DnsQueryContext$4.run(DnsQueryContext.java:208)
	at io.netty.util.concurrent.PromiseTask.runTask(PromiseTask.java:98)
	at io.netty.util.concurrent.ScheduledFutureTask.run(ScheduledFutureTask.java:153)
	at io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:174)
	at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:167)
	at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:470)
	at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:403)
	at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997)
	at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
	at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
	at java.base/java.lang.Thread.run(Unknown Source)
Caused by: io.netty.resolver.dns.DnsNameResolverTimeoutException: [32843: /<IP_ADDRESS>:53] DefaultDnsQuestion(xyz.xyz-xyz.location.azurecontainerapps.io. IN A) query '32843' via UDP timed out after 5000 milliseconds (no stack trace available)

Expected behavior
The DNS resolution should work without error.
Steps to reproduce
Simulate the above DNS response packet and pass to Netty.
OS version
ubuntu 22.04

One surprising thing we found so far is that we can see sporadic DNS responses that are very large. They exceed the regular 512 bytes. Some responses use EDNS or even TCP for very large responses.
They all have in common, that the response contains a authority section with a lot of root server entries.

@mayrstefan @danowensdev thanks a lot for the details. I will have a look.

Also I am correct that it does try query for an A record when it receive the extra details ?

@danowensdev @mayrstefan also can you include a capture of such a response ? Like what is in which section of the response ?

This as a screenshot of such a large response. We can see the response contains 13 root servers in the authority section and 23 ip (v4 and v6) addresses for them in the additional records

Sorry: additional records contains "only" 22 IPs and 1 OPT record for EDNS (did not fit on the screen when taking the screenshot)

Does the answer match the query domain name ? Also does the cname and a match ?

Yes, they match the query. We get two different answers in this azure infrastructure
Short one:
Frame 38903: 157 bytes on wire (1256 bits), 157 bytes captured (1256 bits)
Ethernet II, Src: 82:24:a2:63:85:15 (82:24:a2:63:85:15), Dst: e2:49:80:e2:87:96 (e2:49:80:e2:87:96)
Internet Protocol Version 4, Src: <IP_ADDRESS>, Dst: <IP_ADDRESS>
User Datagram Protocol, Src Port: 53, Dst Port: 34634
Domain Name System (response)
    Transaction ID: 0x8c36
    Flags: 0x8180 Standard query response, No error
        1... .... .... .... = Response: Message is a response
        .000 0... .... .... = Opcode: Standard query (0)
        .... .0.. .... .... = Authoritative: Server is not an authority for domain
        .... ..0. .... .... = Truncated: Message is not truncated
        .... ...1 .... .... = Recursion desired: Do query recursively
        .... .... 1... .... = Recursion available: Server can do recursive queries
        .... .... .0.. .... = Z: reserved (0)
        .... .... ..0. .... = Answer authenticated: Answer/authority portion was not authenticated by the server
        .... .... ...0 .... = Non-authenticated data: Unacceptable
        .... .... .... 0000 = Reply code: No error (0)
    Questions: 1
    Answer RRs: 2
    Authority RRs: 0
    Additional RRs: 1
    Queries
    Answers
        alias.example.net: type CNAME, class IN, cname target.example.net
        target.example.net: type A, class IN, addr <IP_ADDRESS>
    Additional records
        <Root>: type OPT
    [Request In: 38902]
    [Time: 0.006753000 seconds]

Long one
Frame 39157: 1440 bytes on wire (11520 bits), 1440 bytes captured (11520 bits)
Ethernet II, Src: 82:24:a2:63:85:15 (82:24:a2:63:85:15), Dst: e2:49:80:e2:87:96 (e2:49:80:e2:87:96)
Internet Protocol Version 4, Src: <IP_ADDRESS>, Dst: <IP_ADDRESS>
User Datagram Protocol, Src Port: 53, Dst Port: 58298
Domain Name System (response)
    Transaction ID: 0x2796
    Flags: 0x8180 Standard query response, No error
        1... .... .... .... = Response: Message is a response
        .000 0... .... .... = Opcode: Standard query (0)
        .... .0.. .... .... = Authoritative: Server is not an authority for domain
        .... ..0. .... .... = Truncated: Message is not truncated
        .... ...1 .... .... = Recursion desired: Do query recursively
        .... .... 1... .... = Recursion available: Server can do recursive queries
        .... .... .0.. .... = Z: reserved (0)
        .... .... ..0. .... = Answer authenticated: Answer/authority portion was not authenticated by the server
        .... .... ...0 .... = Non-authenticated data: Unacceptable
        .... .... .... 0000 = Reply code: No error (0)
    Questions: 1
    Answer RRs: 2
    Authority RRs: 13
    Additional RRs: 23
    Queries
    Answers
        alias.example.net: type CNAME, class IN, cname target.example.net
        target.example.net: type A, class IN, addr <IP_ADDRESS>
    Authoritative nameservers
        <Root>: type NS, class IN, ns e.root-servers.net
        <Root>: type NS, class IN, ns h.root-servers.net
        <Root>: type NS, class IN, ns d.root-servers.net
        <Root>: type NS, class IN, ns f.root-servers.net
        <Root>: type NS, class IN, ns m.root-servers.net
        <Root>: type NS, class IN, ns l.root-servers.net
        <Root>: type NS, class IN, ns c.root-servers.net
        <Root>: type NS, class IN, ns g.root-servers.net
        <Root>: type NS, class IN, ns i.root-servers.net
        <Root>: type NS, class IN, ns j.root-servers.net
        <Root>: type NS, class IN, ns a.root-servers.net
        <Root>: type NS, class IN, ns b.root-servers.net
        <Root>: type NS, class IN, ns k.root-servers.net
    Additional records
        l.root-servers.net: type AAAA, class IN, addr 2001:500:9f::42
        m.root-servers.net: type AAAA, class IN, addr 2001:dc3::35
        h.root-servers.net: type A, class IN, addr <IP_ADDRESS>
        l.root-servers.net: type A, class IN, addr <IP_ADDRESS>
        j.root-servers.net: type AAAA, class IN, addr 2001:503:c27::2:30
        k.root-servers.net: type AAAA, class IN, addr 2001:7fd::1
        k.root-servers.net: type A, class IN, addr <IP_ADDRESS>
        a.root-servers.net: type AAAA, class IN, addr 2001:503:ba3e::2:30
        f.root-servers.net: type AAAA, class IN, addr 2001:500:2f::f
        g.root-servers.net: type A, class IN, addr <IP_ADDRESS>
        f.root-servers.net: type A, class IN, addr <IP_ADDRESS>
        i.root-servers.net: type A, class IN, addr <IP_ADDRESS>
        g.root-servers.net: type AAAA, class IN, addr 2001:500:12::d0d
        d.root-servers.net: type A, class IN, addr <IP_ADDRESS>
        h.root-servers.net: type AAAA, class IN, addr 2001:500:1::53
        e.root-servers.net: type AAAA, class IN, addr 2001:500:a8::e
        m.root-servers.net: type A, class IN, addr <IP_ADDRESS>
        d.root-servers.net: type AAAA, class IN, addr 2001:500:2d::d
        j.root-servers.net: type A, class IN, addr <IP_ADDRESS>
        e.root-servers.net: type A, class IN, addr <IP_ADDRESS>
        i.root-servers.net: type AAAA, class IN, addr 2001:7fe::53
        a.root-servers.net: type A, class IN, addr <IP_ADDRESS>
        <Root>: type OPT
    [Request In: 39156]
    [Time: 0.007641000 seconds]

It currently looks like the long one is creating the issue. We don't know why we get different answers for the same query but as both are valid responses both should work.

For completeness. This is how the query looks like
Frame 39156: 84 bytes on wire (672 bits), 84 bytes captured (672 bits)
Ethernet II, Src: e2:49:80:e2:87:96 (e2:49:80:e2:87:96), Dst: 82:24:a2:63:85:15 (82:24:a2:63:85:15)
Internet Protocol Version 4, Src: <IP_ADDRESS>, Dst: <IP_ADDRESS>
User Datagram Protocol, Src Port: 58298, Dst Port: 53
Domain Name System (query)
    Transaction ID: 0x2796
    Flags: 0x0100 Standard query
        0... .... .... .... = Response: Message is a query
        .000 0... .... .... = Opcode: Standard query (0)
        .... ..0. .... .... = Truncated: Message is not truncated
        .... ...1 .... .... = Recursion desired: Do query recursively
        .... .... .0.. .... = Z: reserved (0)
        .... .... ...0 .... = Non-authenticated data: Unacceptable
    Questions: 1
    Answer RRs: 0
    Authority RRs: 0
    Additional RRs: 1
    Queries
        alias.example.net: type A, class IN
    Additional records
        <Root>: type OPT
    [Response In: 39157]

@normanmaurer is the query a fqdn or not ?

Can you also share how you build the DnsNameResolver ? I tried to reproduce with a unit test but no luck so far :/

@normanmaurer is the query a fqdn or not ?

This is a FQDN

@mayrstefan also maybe you can take a Wireshark dump of the query and response so I could "replay it"

@danowensdev Can we reproduce this issue with a public DNS name/IP that we can share in this issue?

netty-13660.zip
I extracted a query with a long and a short response and tried to anonymize it (so checksums will be wrong)
Another interessting thing is that the DNS queries reuse the same port (as we can see from other DNS queries in that pcap file). We correlated this issue to the long responses. But correlation is not always causation. Might this be related to #12842 or #11993?

@mayrstefan can you also show me how you build the DnsNameResolver so I can ensure I try to use the same settings when reproducing ?

@danowensdev can you provide more details? I'm to far away from the developers. My guess would be that just the default settings were used (or whatever Sring Boot uses as a default). As a current work around the JVM DNS resolution is used which seems to be stable.

@mayrstefan I tried to replay the data but it fails while trying to decode it which might be because you modified it... Unfortunately without the ability to decode the bytes directly it will not be easy for me :/

Actually ignore that... that was my fault. Looking into it as we speak. That said the configuration would still be helpful to know

Actually what version of netty is this ? In converted your example to a unit test but it just works with latest 4.1 code

also I wonder if you could enable debug logging four our DNSResolver so we could see if the response was received by our handler at all.

@mayrstefan @danowensdev can you provide the extra details I asked for ? Without more details I will not be able to look into it further

Hi @normanmaurer, apologies for the delay in response. To the questions:

We have reproduced the error with Netty version 4.1.100.Final.
We will enable the DNSResolver logging and will let you know how it appears.
We don't instantiate DnsNameResolver ourselves; we use the default Netty resolver in reactor.

So far I got a response from one development team:
the good case shows request and response in the logs:
[id: 0xdb57a705] WRITE: UDP, [58759: /<IP_ADDRESS>:53], DefaultDnsQuestion(xyz.some-example.io. IN A)

and
[id: 0xdb57a705] RECEIVED: UDP [58759: /<IP_ADDRESS>:53], DatagramDnsResponse(from: /<IP_ADDRESS>:53, id: 58759, QUERY(0), NoError(0), RD RA)
DefaultDnsQuestion(xyz.some-example.io. IN A)
DefaultDnsRawRecord(xyz.some-example.io. 60 IN A 4B)
DefaultDnsRawRecord(OPT flags:0 udp:4096 0B)

the bad case only has a request and is missing the response in the logs
[id: 0xa52f1cfe] WRITE: UDP, [56341: /<IP_ADDRESS>:53], DefaultDnsQuestion(xyz.some-example.io. IN A)

Sadly we don't have a tcpdump to check if there was a response or not.

hmm so in this case we never receive the response. Which means there is not much we can do

@mayrstefan Would it be possible to verify if the packets can be observed via Wireshark when you see the timeout ?

Sorry this took so long. I got a tcpdump and some logs from a different application team this friday. Initially I was not able to correlate both files. But today I had a fresh look and found something that looks wrong:
"TimeGenerated [UTC]","ContainerGroupName_s",level,message,logger,thread,stacktrace,"Log_s"
"24.11.2023, 13:34:58.965","myapp-mymodule-dev--ub3gsqi-657f7d7b68-8zwcb",DEBUG,"[id: 0xf415959e] WRITE: UDP, [50672: /<IP_ADDRESS>:53], DefaultDnsQuestion(gateway.test.idnow.de. IN A)","io.netty.resolver.dns.DnsQueryContext","reactor-tcp-epoll-1",,"{""@timestamp"":""2023-11-24 14:34:58.369"",""@version"":""1"",""message"":""[id: 0xf415959e] WRITE: UDP, [50672: /<IP_ADDRESS>:53], DefaultDnsQuestion(gateway.test.idnow.de. IN A)"",""logger_name"":""io.netty.resolver.dns.DnsQueryContext"",""thread_name"":""reactor-tcp-epoll-1"",""level"":""DEBUG"",""level_value"":10000,""trace_id"":""0b25d06d48db187727f0dcf26ae7c5cc"",""trace_flags"":""01"",""span_id"":""c3abda40b8df7891""}"
"24.11.2023, 13:34:58.965","myapp-mymodule-dev--ub3gsqi-657f7d7b68-8zwcb",DEBUG,"[id: 0x4c9cd4f2] WRITE: UDP, [18643: /<IP_ADDRESS>:53], DefaultDnsQuestion(xyz.photocollect.io. IN A)","io.netty.resolver.dns.DnsQueryContext","reactor-tcp-epoll-1",,"{""@timestamp"":""2023-11-24 14:34:58.402"",""@version"":""1"",""message"":""[id: 0x4c9cd4f2] WRITE: UDP, [18643: /<IP_ADDRESS>:53], DefaultDnsQuestion(xyz.photocollect.io. IN A)"",""logger_name"":""io.netty.resolver.dns.DnsQueryContext"",""thread_name"":""reactor-tcp-epoll-1"",""level"":""DEBUG"",""level_value"":10000,""trace_id"":""d521478a44797cd6eba00c4bec4f36cc"",""trace_flags"":""01"",""span_id"":""43f6194bfba73404""}"
"24.11.2023, 13:35:03.964","myapp-mymodule-dev--ub3gsqi-657f7d7b68-8zwcb",ERROR,"An error occurred while checking Route https://gateway.test.idnow.de/api/v1/xyzautodltest: error=WebClientRequestException Failed to resolve 'gateway.test.idnow.de' [A(1)] and search domain query for configured domains failed as well: [k8se-apps.svc.cluster.local, svc.cluster.local, cluster.local] (Cause: io.netty.resolver.dns.DnsResolveContext$SearchDomainUnknownHostException: Failed to resolve 'gateway.test.idnow.de' [A(1)] and search domain query for configured domains failed as well: [k8se-apps.svc.cluster.local, svc.cluster.local, cluster.local])","de.xyz.myapp.module.status.IDNowConnectionCheckItem","xyz Systemstatus Timer [ID Now]","<#3b5a240f> i.n.resolver.dns.DnsNameResolverTimeoutException: [50672: /<IP_ADDRESS>:53] DefaultDnsQuestion(gateway.test.idnow.de. IN A) query '50672' via UDP timed out after 5000 milliseconds (no stack trace available)
Wrapped by: <#5064d387> i.n.r.d.DnsResolveContext$SearchDomainUnknownHostException: Failed to resolve 'gateway.test.idnow.de' [A(1)] and search domain query for configured domains failed as well: [k8se-apps.svc.cluster.local, svc.cluster.local, cluster.local]
	at io.netty.resolver.dns.DnsResolveContext.finishResolve(DnsResolveContext.java:1097)
	at io.netty.resolver.dns.DnsResolveContext.tryToFinishResolve(DnsResolveContext.java:1044)
	at io.netty.resolver.dns.DnsResolveContext.query(DnsResolveContext.java:432)
	at io.netty.resolver.dns.DnsResolveContext.access$700(DnsResolveContext.java:66)
	at io.netty.resolver.dns.DnsResolveContext$2.operationComplete(DnsResolveContext.java:500)
	at io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:590)
	at io.netty.util.concurrent.DefaultPromise.notifyListeners0(DefaultPromise.java:583)
	at io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:559)
	at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:492)
	at io.netty.util.concurrent.DefaultPromise.setValue0(DefaultPromise.java:636)
	at io.netty.util.concurrent.DefaultPromise.setFailure0(DefaultPromise.java:629)
	at io.netty.util.concurrent.DefaultPromise.tryFailure(DefaultPromise.java:118)
	at io.netty.resolver.dns.DnsQueryContext.finishFailure(DnsQueryContext.java:348)
	at io.netty.resolver.dns.DnsQueryContext$5.run(DnsQueryContext.java:290)
	at io.netty.util.concurrent.PromiseTask.runTask(PromiseTask.java:98)
	at io.netty.util.concurrent.ScheduledFutureTask.run(ScheduledFutureTask.java:153)
	at io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:173)
	at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:166)
	at i.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:470)
	at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:416)
	at i.n.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997)
	at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
	at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
	... 1 frames excluded
Wrapped by: <#cd07aee3> o.s.w.r.function.client.WebClientRequestException: Failed to resolve 'gateway.test.idnow.de' [A(1)] and search domain query for configured domains failed as well: [k8se-apps.svc.cluster.local, svc.cluster.local, cluster.local]
	at o.s.w.r.f.c.ExchangeFunctions$DefaultExchangeFunction.lambda$wrapException$9(ExchangeFunctions.java:136)
	Suppressed: r.c.publisher.FluxOnAssembly$OnAssemblyException:
Error has been observed at the following site(s):
	*__checkpoint ⇢ Request to GET https://gateway.test.idnow.de/api/v1/xyzautodltest [DefaultWebClient]
Original Stack Trace:
		at o.s.w.r.f.c.ExchangeFunctions$DefaultExchangeFunction.lambda$wrapException$9(ExchangeFunctions.java:136)
		at reactor.core.publisher.MonoErrorSupplied.subscribe(MonoErrorSupplied.java:55)
		at reactor.core.publisher.Mono.subscribe(Mono.java:4495)
		at r.c.publisher.FluxOnErrorResume$ResumeSubscriber.onError(FluxOnErrorResume.java:103)
		... 4 frames excluded
		at reactor.core.publisher.FluxPeek$PeekSubscriber.onError(FluxPeek.java:222)
		... 4 frames excluded
		at reactor.core.publisher.FluxPeek$PeekSubscriber.onError(FluxPeek.java:222)
		... 4 frames excluded
		at reactor.core.publisher.FluxPeek$PeekSubscriber.onError(FluxPeek.java:222)
		... 4 frames excluded
		at reactor.core.publisher.MonoNext$NextSubscriber.onError(MonoNext.java:93)
		... 4 frames excluded
		at r.core.publisher.MonoFlatMapMany$FlatMapManyMain.onError(MonoFlatMapMany.java:204)
		... 4 frames excluded
		at reactor.core.publisher.FluxPeek$PeekSubscriber.onError(FluxPeek.java:222)
		... 8 frames excluded
		at r.c.p.FluxContextWrite$ContextWriteSubscriber.onError(FluxContextWrite.java:121)
		... 4 frames excluded
		at r.c.publisher.FluxOnErrorResume$ResumeSubscriber.onError(FluxOnErrorResume.java:106)
		... 4 frames excluded
		at r.core.publisher.MonoIgnoreThen$ThenIgnoreMain.onError(MonoIgnoreThen.java:278)
		at r.core.publisher.MonoIgnoreThen$ThenIgnoreMain.subscribeNext(MonoIgnoreThen.java:231)
		at r.core.publisher.MonoIgnoreThen$ThenIgnoreMain.onComplete(MonoIgnoreThen.java:203)
		... 3 frames excluded
		at reactor.core.publisher.FluxPeek$PeekSubscriber.onComplete(FluxPeek.java:260)
		... 3 frames excluded
		at r.core.publisher.Operators$ScalarSubscription.request(Operators.java:2547)
		at reactor.core.publisher.FluxPeek$PeekSubscriber.request(FluxPeek.java:138)
		at r.core.publisher.MonoIgnoreThen$ThenIgnoreMain.onSubscribe(MonoIgnoreThen.java:134)
		... 4 frames excluded
		at reactor.core.publisher.FluxPeek$PeekSubscriber.onSubscribe(FluxPeek.java:171)
		... 4 frames excluded
		at reactor.core.publisher.MonoJust.subscribe(MonoJust.java:55)
		at reactor.core.publisher.MonoDeferContextual.subscribe(MonoDeferContextual.java:55)
		at reactor.core.publisher.Mono.subscribe(Mono.java:4495)
		at r.core.publisher.MonoIgnoreThen$ThenIgnoreMain.subscribeNext(MonoIgnoreThen.java:263)
		at reactor.core.publisher.MonoIgnoreThen.subscribe(MonoIgnoreThen.java:51)
		at reactor.core.publisher.Mono.subscribe(Mono.java:4495)
		at r.c.publisher.FluxOnErrorResume$ResumeSubscriber.onError(FluxOnErrorResume.java:103)
		... 4 frames excluded
		at reactor.core.publisher.SerializedSubscriber.onError(SerializedSubscriber.java:124)
		at r.c.p.FluxRetryWhen$RetryWhenMainSubscriber.whenError(FluxRetryWhen.java:225)
		at r.c.p.FluxRetryWhen$RetryWhenOtherSubscriber.onError(FluxRetryWhen.java:274)
		... 188 frames truncated
	Suppressed: java.lang.Exception: #block terminated with an error
		at reactor.core.publisher.BlockingSingleSubscriber.blockingGet(BlockingSingleSubscriber.java:103)
		at reactor.core.publisher.Mono.block(Mono.java:1712)
		at d.s.myapp.module.status.IDNowConnectionCheckItem.update(IDNowConnectionCheckItem.java:42)
		at d.s.c.systemstatus.model.impl.DefaultSubsystem$1.run(DefaultSubsystem.java:159)
		at java.util.TimerThread.mainLoop(Unknown Source)
		at java.util.TimerThread.run(Unknown Source)
","{""@timestamp"":""2023-11-24 14:35:03.374"",""@version"":""1"",""message"":""An error occurred while checking Route https://gateway.test.idnow.de/api/v1/xyzautodltest: error=WebClientRequestException Failed to resolve 'gateway.test.idnow.de' [A(1)] and search domain query for configured domains failed as well: [k8se-apps.svc.cluster.local, svc.cluster.local, cluster.local] (Cause: io.netty.resolver.dns.DnsResolveContext$SearchDomainUnknownHostException: Failed to resolve 'gateway.test.idnow.de' [A(1)] and search domain query for configured domains failed as well: [k8se-apps.svc.cluster.local, svc.cluster.local, cluster.local])"",""logger_name"":""de.xyz.myapp.module.status.IDNowConnectionCheckItem"",""thread_name"":""xyz Systemstatus Timer [ID Now]"",""level"":""ERROR"",""level_value"":40000,""stack_trace"":""<#3b5a240f> i.n.resolver.dns.DnsNameResolverTimeoutException: [50672: /<IP_ADDRESS>:53] DefaultDnsQuestion(gateway.test.idnow.de. IN A) query '50672' via UDP timed out after 5000 milliseconds (no stack trace available)\nWrapped by: <#5064d387> i.n.r.d.DnsResolveContext$SearchDomainUnknownHostException: Failed to resolve 'gateway.test.idnow.de' [A(1)] and search domain query for configured domains failed as well: [k8se-apps.svc.cluster.local, svc.cluster.local, cluster.local]\n\tat io.netty.resolver.dns.DnsResolveContext.finishResolve(DnsResolveContext.java:1097)\n\tat io.netty.resolver.dns.DnsResolveContext.tryToFinishResolve(DnsResolveContext.java:1044)\n\tat io.netty.resolver.dns.DnsResolveContext.query(DnsResolveContext.java:432)\n\tat io.netty.resolver.dns.DnsResolveContext.access$700(DnsResolveContext.java:66)\n\tat io.netty.resolver.dns.DnsResolveContext$2.operationComplete(DnsResolveContext.java:500)\n\tat io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:590)\n\tat io.netty.util.concurrent.DefaultPromise.notifyListeners0(DefaultPromise.java:583)\n\tat io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:559)\n\tat io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:492)\n\tat io.netty.util.concurrent.DefaultPromise.setValue0(DefaultPromise.java:636)\n\tat io.netty.util.concurrent.DefaultPromise.setFailure0(DefaultPromise.java:629)\n\tat io.netty.util.concurrent.DefaultPromise.tryFailure(DefaultPromise.java:118)\n\tat io.netty.resolver.dns.DnsQueryContext.finishFailure(DnsQueryContext.java:348)\n\tat io.netty.resolver.dns.DnsQueryContext$5.run(DnsQueryContext.java:290)\n\tat io.netty.util.concurrent.PromiseTask.runTask(PromiseTask.java:98)\n\tat io.netty.util.concurrent.ScheduledFutureTask.run(ScheduledFutureTask.java:153)\n\tat io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:173)\n\tat io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:166)\n\tat i.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:470)\n\tat io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:416)\n\tat i.n.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997)\n\tat io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)\n\tat io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)\n\t... 1 frames excluded\nWrapped by: <#cd07aee3> o.s.w.r.function.client.WebClientRequestException: Failed to resolve 'gateway.test.idnow.de' [A(1)] and search domain query for configured domains failed as well: [k8se-apps.svc.cluster.local, svc.cluster.local, cluster.local]\n\tat o.s.w.r.f.c.ExchangeFunctions$DefaultExchangeFunction.lambda$wrapException$9(ExchangeFunctions.java:136)\n\tSuppressed: r.c.publisher.FluxOnAssembly$OnAssemblyException: \nError has been observed at the following site(s):\n\t*__checkpoint ⇢ Request to GET https://gateway.test.idnow.de/api/v1/xyzautodltest [DefaultWebClient]\nOriginal Stack Trace:\n\t\tat o.s.w.r.f.c.ExchangeFunctions$DefaultExchangeFunction.lambda$wrapException$9(ExchangeFunctions.java:136)\n\t\tat reactor.core.publisher.MonoErrorSupplied.subscribe(MonoErrorSupplied.java:55)\n\t\tat reactor.core.publisher.Mono.subscribe(Mono.java:4495)\n\t\tat r.c.publisher.FluxOnErrorResume$ResumeSubscriber.onError(FluxOnErrorResume.java:103)\n\t\t... 4 frames excluded\n\t\tat reactor.core.publisher.FluxPeek$PeekSubscriber.onError(FluxPeek.java:222)\n\t\t... 4 frames excluded\n\t\tat reactor.core.publisher.FluxPeek$PeekSubscriber.onError(FluxPeek.java:222)\n\t\t... 4 frames excluded\n\t\tat reactor.core.publisher.FluxPeek$PeekSubscriber.onError(FluxPeek.java:222)\n\t\t... 4 frames excluded\n\t\tat reactor.core.publisher.MonoNext$NextSubscriber.onError(MonoNext.java:93)\n\t\t... 4 frames excluded\n\t\tat r.core.publisher.MonoFlatMapMany$FlatMapManyMain.onError(MonoFlatMapMany.java:204)\n\t\t... 4 frames excluded\n\t\tat reactor.core.publisher.FluxPeek$PeekSubscriber.onError(FluxPeek.java:222)\n\t\t... 8 frames excluded\n\t\tat r.c.p.FluxContextWrite$ContextWriteSubscriber.onError(FluxContextWrite.java:121)\n\t\t... 4 frames excluded\n\t\tat r.c.publisher.FluxOnErrorResume$ResumeSubscriber.onError(FluxOnErrorResume.java:106)\n\t\t... 4 frames excluded\n\t\tat r.core.publisher.MonoIgnoreThen$ThenIgnoreMain.onError(MonoIgnoreThen.java:278)\n\t\tat r.core.publisher.MonoIgnoreThen$ThenIgnoreMain.subscribeNext(MonoIgnoreThen.java:231)\n\t\tat r.core.publisher.MonoIgnoreThen$ThenIgnoreMain.onComplete(MonoIgnoreThen.java:203)\n\t\t... 3 frames excluded\n\t\tat reactor.core.publisher.FluxPeek$PeekSubscriber.onComplete(FluxPeek.java:260)\n\t\t... 3 frames excluded\n\t\tat r.core.publisher.Operators$ScalarSubscription.request(Operators.java:2547)\n\t\tat reactor.core.publisher.FluxPeek$PeekSubscriber.request(FluxPeek.java:138)\n\t\tat r.core.publisher.MonoIgnoreThen$ThenIgnoreMain.onSubscribe(MonoIgnoreThen.java:134)\n\t\t... 4 frames excluded\n\t\tat reactor.core.publisher.FluxPeek$PeekSubscriber.onSubscribe(FluxPeek.java:171)\n\t\t... 4 frames excluded\n\t\tat reactor.core.publisher.MonoJust.subscribe(MonoJust.java:55)\n\t\tat reactor.core.publisher.MonoDeferContextual.subscribe(MonoDeferContextual.java:55)\n\t\tat reactor.core.publisher.Mono.subscribe(Mono.java:4495)\n\t\tat r.core.publisher.MonoIgnoreThen$ThenIgnoreMain.subscribeNext(MonoIgnoreThen.java:263)\n\t\tat reactor.core.publisher.MonoIgnoreThen.subscribe(MonoIgnoreThen.java:51)\n\t\tat reactor.core.publisher.Mono.subscribe(Mono.java:4495)\n\t\tat r.c.publisher.FluxOnErrorResume$ResumeSubscriber.onError(FluxOnErrorResume.java:103)\n\t\t... 4 frames excluded\n\t\tat reactor.core.publisher.SerializedSubscriber.onError(SerializedSubscriber.java:124)\n\t\tat r.c.p.FluxRetryWhen$RetryWhenMainSubscriber.whenError(FluxRetryWhen.java:225)\n\t\tat r.c.p.FluxRetryWhen$RetryWhenOtherSubscriber.onError(FluxRetryWhen.java:274)\n\t\t... 188 frames truncated\n\tSuppressed: java.lang.Exception: #block terminated with an error\n\t\tat reactor.core.publisher.BlockingSingleSubscriber.blockingGet(BlockingSingleSubscriber.java:103)\n\t\tat reactor.core.publisher.Mono.block(Mono.java:1712)\n\t\tat d.s.myapp.module.status.IDNowConnectionCheckItem.update(IDNowConnectionCheckItem.java:42)\n\t\tat d.s.c.systemstatus.model.impl.DefaultSubsystem$1.run(DefaultSubsystem.java:159)\n\t\tat java.util.TimerThread.mainLoop(Unknown Source)\n\t\tat java.util.TimerThread.run(Unknown Source)\n""}"
"24.11.2023, 13:35:03.964","myapp-mymodule-dev--ub3gsqi-657f7d7b68-8zwcb",ERROR,"An error occurred while checking URL https://xyz.photocollect.io/apiv1: error=WebClientRequestException Failed to resolve 'xyz.photocollect.io' [A(1)] and search domain query for configured domains failed as well: [k8se-apps.svc.cluster.local, svc.cluster.local, cluster.local] (Cause: io.netty.resolver.dns.DnsResolveContext$SearchDomainUnknownHostException: Failed to resolve 'xyz.photocollect.io' [A(1)] and search domain query for configured domains failed as well: [k8se-apps.svc.cluster.local, svc.cluster.local, cluster.local])","de.xyz.myapp.module.photocollect.PhotoCollectConnectionCheckItem","xyz Systemstatus Timer [PhotoCollect]","<#3b5a240f> i.n.resolver.dns.DnsNameResolverTimeoutException: [18643: /<IP_ADDRESS>:53] DefaultDnsQuestion(xyz.photocollect.io. IN A) query '18643' via UDP timed out after 5000 milliseconds (no stack trace available)
Wrapped by: <#5063766a> i.n.r.d.DnsResolveContext$SearchDomainUnknownHostException: Failed to resolve 'xyz.photocollect.io' [A(1)] and search domain query for configured domains failed as well: [k8se-apps.svc.cluster.local, svc.cluster.local, cluster.local]
	at io.netty.resolver.dns.DnsResolveContext.finishResolve(DnsResolveContext.java:1097)
	at io.netty.resolver.dns.DnsResolveContext.tryToFinishResolve(DnsResolveContext.java:1044)
	at io.netty.resolver.dns.DnsResolveContext.query(DnsResolveContext.java:432)
	at io.netty.resolver.dns.DnsResolveContext.access$700(DnsResolveContext.java:66)
	at io.netty.resolver.dns.DnsResolveContext$2.operationComplete(DnsResolveContext.java:500)
	at io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:590)
	at io.netty.util.concurrent.DefaultPromise.notifyListeners0(DefaultPromise.java:583)
	at io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:559)
	at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:492)
	at io.netty.util.concurrent.DefaultPromise.setValue0(DefaultPromise.java:636)
	at io.netty.util.concurrent.DefaultPromise.setFailure0(DefaultPromise.java:629)
	at io.netty.util.concurrent.DefaultPromise.tryFailure(DefaultPromise.java:118)
	at io.netty.resolver.dns.DnsQueryContext.finishFailure(DnsQueryContext.java:348)
	at io.netty.resolver.dns.DnsQueryContext$5.run(DnsQueryContext.java:290)
	at io.netty.util.concurrent.PromiseTask.runTask(PromiseTask.java:98)
	at io.netty.util.concurrent.ScheduledFutureTask.run(ScheduledFutureTask.java:153)
	at io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:173)
	at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:166)
	at i.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:470)
	at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:413)
	at i.n.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997)
	at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
	at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
	... 1 frames excluded
Wrapped by: <#c7e92506> o.s.w.r.function.client.WebClientRequestException: Failed to resolve 'xyz.photocollect.io' [A(1)] and search domain query for configured domains failed as well: [k8se-apps.svc.cluster.local, svc.cluster.local, cluster.local]
	at o.s.w.r.f.c.ExchangeFunctions$DefaultExchangeFunction.lambda$wrapException$9(ExchangeFunctions.java:136)
	Suppressed: r.c.publisher.FluxOnAssembly$OnAssemblyException:
Error has been observed at the following site(s):
	*__checkpoint ⇢ Request to GET https://xyz.photocollect.io/apiv1 [DefaultWebClient]
Original Stack Trace:
		at o.s.w.r.f.c.ExchangeFunctions$DefaultExchangeFunction.lambda$wrapException$9(ExchangeFunctions.java:136)
		at reactor.core.publisher.MonoErrorSupplied.subscribe(MonoErrorSupplied.java:55)
		at reactor.core.publisher.Mono.subscribe(Mono.java:4495)
		at r.c.publisher.FluxOnErrorResume$ResumeSubscriber.onError(FluxOnErrorResume.java:103)
		... 4 frames excluded
		at reactor.core.publisher.FluxPeek$PeekSubscriber.onError(FluxPeek.java:222)
		... 4 frames excluded
		at reactor.core.publisher.FluxPeek$PeekSubscriber.onError(FluxPeek.java:222)
		... 4 frames excluded
		at reactor.core.publisher.FluxPeek$PeekSubscriber.onError(FluxPeek.java:222)
		... 4 frames excluded
		at reactor.core.publisher.MonoNext$NextSubscriber.onError(MonoNext.java:93)
		... 4 frames excluded
		at r.core.publisher.MonoFlatMapMany$FlatMapManyMain.onError(MonoFlatMapMany.java:204)
		... 4 frames excluded
		at reactor.core.publisher.FluxPeek$PeekSubscriber.onError(FluxPeek.java:222)
		... 8 frames excluded
		at r.c.p.FluxContextWrite$ContextWriteSubscriber.onError(FluxContextWrite.java:121)
		... 4 frames excluded
		at r.c.publisher.FluxOnErrorResume$ResumeSubscriber.onError(FluxOnErrorResume.java:106)
		... 4 frames excluded
		at r.core.publisher.MonoIgnoreThen$ThenIgnoreMain.onError(MonoIgnoreThen.java:278)
		at r.core.publisher.MonoIgnoreThen$ThenIgnoreMain.subscribeNext(MonoIgnoreThen.java:231)
		at r.core.publisher.MonoIgnoreThen$ThenIgnoreMain.onComplete(MonoIgnoreThen.java:203)
		... 3 frames excluded
		at reactor.core.publisher.FluxPeek$PeekSubscriber.onComplete(FluxPeek.java:260)
		... 3 frames excluded
		at r.core.publisher.Operators$ScalarSubscription.request(Operators.java:2547)
		at reactor.core.publisher.FluxPeek$PeekSubscriber.request(FluxPeek.java:138)
		at r.core.publisher.MonoIgnoreThen$ThenIgnoreMain.onSubscribe(MonoIgnoreThen.java:134)
		... 4 frames excluded
		at reactor.core.publisher.FluxPeek$PeekSubscriber.onSubscribe(FluxPeek.java:171)
		... 4 frames excluded
		at reactor.core.publisher.MonoJust.subscribe(MonoJust.java:55)
		at reactor.core.publisher.MonoDeferContextual.subscribe(MonoDeferContextual.java:55)
		at reactor.core.publisher.Mono.subscribe(Mono.java:4495)
		at r.core.publisher.MonoIgnoreThen$ThenIgnoreMain.subscribeNext(MonoIgnoreThen.java:263)
		at reactor.core.publisher.MonoIgnoreThen.subscribe(MonoIgnoreThen.java:51)
		at reactor.core.publisher.Mono.subscribe(Mono.java:4495)
		at r.c.publisher.FluxOnErrorResume$ResumeSubscriber.onError(FluxOnErrorResume.java:103)
		... 4 frames excluded
		at reactor.core.publisher.SerializedSubscriber.onError(SerializedSubscriber.java:124)
		at r.c.p.FluxRetryWhen$RetryWhenMainSubscriber.whenError(FluxRetryWhen.java:225)
		at r.c.p.FluxRetryWhen$RetryWhenOtherSubscriber.onError(FluxRetryWhen.java:274)
		... 188 frames truncated
	Suppressed: java.lang.Exception: #block terminated with an error
		at reactor.core.publisher.BlockingSingleSubscriber.blockingGet(BlockingSingleSubscriber.java:103)
		at reactor.core.publisher.Mono.block(Mono.java:1712)
		at d.s.m.a.p.PhotoCollectConnectionCheckItem.update(PhotoCollectConnectionCheckItem.java:39)
		at d.s.c.systemstatus.model.impl.DefaultSubsystem$1.run(DefaultSubsystem.java:159)
		at java.util.TimerThread.mainLoop(Unknown Source)
		at java.util.TimerThread.run(Unknown Source)
","{""@timestamp"":""2023-11-24 14:35:03.403"",""@version"":""1"",""message"":""An error occurred while checking URL https://xyz.photocollect.io/apiv1: error=WebClientRequestException Failed to resolve 'xyz.photocollect.io' [A(1)] and search domain query for configured domains failed as well: [k8se-apps.svc.cluster.local, svc.cluster.local, cluster.local] (Cause: io.netty.resolver.dns.DnsResolveContext$SearchDomainUnknownHostException: Failed to resolve 'xyz.photocollect.io' [A(1)] and search domain query for configured domains failed as well: [k8se-apps.svc.cluster.local, svc.cluster.local, cluster.local])"",""logger_name"":""de.xyz.myapp.module.photocollect.PhotoCollectConnectionCheckItem"",""thread_name"":""xyz Systemstatus Timer [PhotoCollect]"",""level"":""ERROR"",""level_value"":40000,""stack_trace"":""<#3b5a240f> i.n.resolver.dns.DnsNameResolverTimeoutException: [18643: /<IP_ADDRESS>:53] DefaultDnsQuestion(xyz.photocollect.io. IN A) query '18643' via UDP timed out after 5000 milliseconds (no stack trace available)\nWrapped by: <#5063766a> i.n.r.d.DnsResolveContext$SearchDomainUnknownHostException: Failed to resolve 'xyz.photocollect.io' [A(1)] and search domain query for configured domains failed as well: [k8se-apps.svc.cluster.local, svc.cluster.local, cluster.local]\n\tat io.netty.resolver.dns.DnsResolveContext.finishResolve(DnsResolveContext.java:1097)\n\tat io.netty.resolver.dns.DnsResolveContext.tryToFinishResolve(DnsResolveContext.java:1044)\n\tat io.netty.resolver.dns.DnsResolveContext.query(DnsResolveContext.java:432)\n\tat io.netty.resolver.dns.DnsResolveContext.access$700(DnsResolveContext.java:66)\n\tat io.netty.resolver.dns.DnsResolveContext$2.operationComplete(DnsResolveContext.java:500)\n\tat io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:590)\n\tat io.netty.util.concurrent.DefaultPromise.notifyListeners0(DefaultPromise.java:583)\n\tat io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:559)\n\tat io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:492)\n\tat io.netty.util.concurrent.DefaultPromise.setValue0(DefaultPromise.java:636)\n\tat io.netty.util.concurrent.DefaultPromise.setFailure0(DefaultPromise.java:629)\n\tat io.netty.util.concurrent.DefaultPromise.tryFailure(DefaultPromise.java:118)\n\tat io.netty.resolver.dns.DnsQueryContext.finishFailure(DnsQueryContext.java:348)\n\tat io.netty.resolver.dns.DnsQueryContext$5.run(DnsQueryContext.java:290)\n\tat io.netty.util.concurrent.PromiseTask.runTask(PromiseTask.java:98)\n\tat io.netty.util.concurrent.ScheduledFutureTask.run(ScheduledFutureTask.java:153)\n\tat io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:173)\n\tat io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:166)\n\tat i.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:470)\n\tat io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:413)\n\tat i.n.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997)\n\tat io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)\n\tat io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)\n\t... 1 frames excluded\nWrapped by: <#c7e92506> o.s.w.r.function.client.WebClientRequestException: Failed to resolve 'xyz.photocollect.io' [A(1)] and search domain query for configured domains failed as well: [k8se-apps.svc.cluster.local, svc.cluster.local, cluster.local]\n\tat o.s.w.r.f.c.ExchangeFunctions$DefaultExchangeFunction.lambda$wrapException$9(ExchangeFunctions.java:136)\n\tSuppressed: r.c.publisher.FluxOnAssembly$OnAssemblyException: \nError has been observed at the following site(s):\n\t*__checkpoint ⇢ Request to GET https://xyz.photocollect.io/apiv1 [DefaultWebClient]\nOriginal Stack Trace:\n\t\tat o.s.w.r.f.c.ExchangeFunctions$DefaultExchangeFunction.lambda$wrapException$9(ExchangeFunctions.java:136)\n\t\tat reactor.core.publisher.MonoErrorSupplied.subscribe(MonoErrorSupplied.java:55)\n\t\tat reactor.core.publisher.Mono.subscribe(Mono.java:4495)\n\t\tat r.c.publisher.FluxOnErrorResume$ResumeSubscriber.onError(FluxOnErrorResume.java:103)\n\t\t... 4 frames excluded\n\t\tat reactor.core.publisher.FluxPeek$PeekSubscriber.onError(FluxPeek.java:222)\n\t\t... 4 frames excluded\n\t\tat reactor.core.publisher.FluxPeek$PeekSubscriber.onError(FluxPeek.java:222)\n\t\t... 4 frames excluded\n\t\tat reactor.core.publisher.FluxPeek$PeekSubscriber.onError(FluxPeek.java:222)\n\t\t... 4 frames excluded\n\t\tat reactor.core.publisher.MonoNext$NextSubscriber.onError(MonoNext.java:93)\n\t\t... 4 frames excluded\n\t\tat r.core.publisher.MonoFlatMapMany$FlatMapManyMain.onError(MonoFlatMapMany.java:204)\n\t\t... 4 frames excluded\n\t\tat reactor.core.publisher.FluxPeek$PeekSubscriber.onError(FluxPeek.java:222)\n\t\t... 8 frames excluded\n\t\tat r.c.p.FluxContextWrite$ContextWriteSubscriber.onError(FluxContextWrite.java:121)\n\t\t... 4 frames excluded\n\t\tat r.c.publisher.FluxOnErrorResume$ResumeSubscriber.onError(FluxOnErrorResume.java:106)\n\t\t... 4 frames excluded\n\t\tat r.core.publisher.MonoIgnoreThen$ThenIgnoreMain.onError(MonoIgnoreThen.java:278)\n\t\tat r.core.publisher.MonoIgnoreThen$ThenIgnoreMain.subscribeNext(MonoIgnoreThen.java:231)\n\t\tat r.core.publisher.MonoIgnoreThen$ThenIgnoreMain.onComplete(MonoIgnoreThen.java:203)\n\t\t... 3 frames excluded\n\t\tat reactor.core.publisher.FluxPeek$PeekSubscriber.onComplete(FluxPeek.java:260)\n\t\t... 3 frames excluded\n\t\tat r.core.publisher.Operators$ScalarSubscription.request(Operators.java:2547)\n\t\tat reactor.core.publisher.FluxPeek$PeekSubscriber.request(FluxPeek.java:138)\n\t\tat r.core.publisher.MonoIgnoreThen$ThenIgnoreMain.onSubscribe(MonoIgnoreThen.java:134)\n\t\t... 4 frames excluded\n\t\tat reactor.core.publisher.FluxPeek$PeekSubscriber.onSubscribe(FluxPeek.java:171)\n\t\t... 4 frames excluded\n\t\tat reactor.core.publisher.MonoJust.subscribe(MonoJust.java:55)\n\t\tat reactor.core.publisher.MonoDeferContextual.subscribe(MonoDeferContextual.java:55)\n\t\tat reactor.core.publisher.Mono.subscribe(Mono.java:4495)\n\t\tat r.core.publisher.MonoIgnoreThen$ThenIgnoreMain.subscribeNext(MonoIgnoreThen.java:263)\n\t\tat reactor.core.publisher.MonoIgnoreThen.subscribe(MonoIgnoreThen.java:51)\n\t\tat reactor.core.publisher.Mono.subscribe(Mono.java:4495)\n\t\tat r.c.publisher.FluxOnErrorResume$ResumeSubscriber.onError(FluxOnErrorResume.java:103)\n\t\t... 4 frames excluded\n\t\tat reactor.core.publisher.SerializedSubscriber.onError(SerializedSubscriber.java:124)\n\t\tat r.c.p.FluxRetryWhen$RetryWhenMainSubscriber.whenError(FluxRetryWhen.java:225)\n\t\tat r.c.p.FluxRetryWhen$RetryWhenOtherSubscriber.onError(FluxRetryWhen.java:274)\n\t\t... 188 frames truncated\n\tSuppressed: java.lang.Exception: #block terminated with an error\n\t\tat reactor.core.publisher.BlockingSingleSubscriber.blockingGet(BlockingSingleSubscriber.java:103)\n\t\tat reactor.core.publisher.Mono.block(Mono.java:1712)\n\t\tat d.s.m.a.p.PhotoCollectConnectionCheckItem.update(PhotoCollectConnectionCheckItem.java:39)\n\t\tat d.s.c.systemstatus.model.impl.DefaultSubsystem$1.run(DefaultSubsystem.java:159)\n\t\tat java.util.TimerThread.mainLoop(Unknown Source)\n\t\tat java.util.TimerThread.run(Unknown Source)\n""}"

The matching part of the tcpdump is this

So far I noticed the following:

the logfile contains two queries at the same time
there is only one query in the tcpdump file
there is a response that does not seem to be processed by Netty

In the excerpt I got from the application log I can find this pattern multiple times: two queries in the application log at exactly the same time with only one of them in the tcpdump. There is always a response but in Netty both queries fail.

The links in #13705 are very interesting: especially the weavework blog post with the problem description:

A problem occurs when two UDP packets are sent via the same socket at the same time from different threads.
UDP is a connection-less protocol, so no packet is sent as a result of the connect(2) syscall (opposite to TCP) and thus, no conntrack entry has been created after the call

This would explain what we can see in my previous comment: Netty reporting two DNS UDP writes but only one being captured in the tcpdump

I will try to find some time tomorrow to dig into all the informations etc. Thanks again!

Thinking about it also the two other issues I referenced point into the same direction: they were about Redisson and reading these we can find the following ideas

using different source ports which would translate into using different sockets
protecting the socket from concurrent access using a semaphore

The last one was tried to approach differently with PR #13014 by @trustin

@mayrstefan so from my understanding after reading all the reports is that we sent multiple queries at once. Like for example we send an A and AAAA query. What I dont understand is that it mention it only happens when requests are send concurrently (via multiple threads). This is not the case for us as everything is always dispatched to the socket via the EventLoop so it's single threaded. What I am missing ?

@mayrstefan would it be possible for you to test a patched netty version or to configure the DnsNameResolver in a specific way ? What we could try is to disable sendmmsg and see if we can still reproduce the problem

Our applications use Spring Boot in a Container to run in Azure Container Apps. So I guess the easiest thing is to overwrite the netty libs in the Docker container with a patched version. I'm out of office for the next weeks so we need @danowensdev to communicate the details what to do to our application developers.
I also found #9793 which looks surprisingly similar. Looking at the last comments suggesting adding a sync() - what if the issue is hidden in the buffering when writing to the udp socket? Maybe having multiple threads with DNS queries just increase the chance of having two queries/connects(?) in the buffer before being flushed.
I'm no developer and I have no understanding how this stuff all works. I'm just trying to connect to dots and guess what could be related to each other. Currently the most promising theory seems to be around parallel writes to the udp socket - but I might be wrong.

@mayrstefan thats not related.

In one of the above stacktraces we see that "io.netty.channel.epoll.EpollEventLoop" is used. I guess that when we disable native transport sendmmsg should not be used anymore. Is there a Java option for Netty to always use NIO instead of a native transport?
Else I'll ask our developers to try -Dreactor.netty.native=false and we wait if the next stacktrace still contains epoll or NIO. I hope this also affects the DNS resolver.

For netty it should be:
-Dio.netty.transport.noNative=true

Issue is also present with NIO. I just got this from one of our developers:
io.netty.resolver.dns.DnsResolveContext$SearchDomainUnknownHostException: Failed to resolve 'example-app' [A(1)] and search domain query for configured domains failed as well: [k8se-apps.svc.cluster.local, svc.cluster.local, cluster.local]
at io.netty.resolver.dns.DnsResolveContext.finishResolve(DnsResolveContext.java:1097)
Suppressed: The stacktrace has been enhanced by Reactor, refer to additional information below:
Error has been observed at the following site(s):
*__checkpoint ⇢ com.example.app.gateway.filter.ReactiveHiddenInternalRequestsFilter [DefaultWebFilterChain]
*__checkpoint ⇢ com.example.app.gateway.filter.AutomaticRequestFilter [DefaultWebFilterChain]
*__checkpoint ⇢ com.example.app.gateway.filter.AddTraceparentToResponseFilter [DefaultWebFilterChain]
*__checkpoint ⇢ org.springframework.boot.actuate.web.exchanges.reactive.HttpExchangesWebFilter [DefaultWebFilterChain]
*__checkpoint ⇢ org.springframework.cloud.gateway.filter.WeightCalculatorWebFilter [DefaultWebFilterChain]
*__checkpoint ⇢ AuthorizationWebFilter [DefaultWebFilterChain]
*__checkpoint ⇢ ExceptionTranslationWebFilter [DefaultWebFilterChain]
*__checkpoint ⇢ LogoutWebFilter [DefaultWebFilterChain]
*__checkpoint ⇢ ServerRequestCacheWebFilter [DefaultWebFilterChain]
*__checkpoint ⇢ SecurityContextServerWebExchangeWebFilter [DefaultWebFilterChain]
*__checkpoint ⇢ ReactorContextWebFilter [DefaultWebFilterChain]
*__checkpoint ⇢ HttpHeaderWriterWebFilter [DefaultWebFilterChain]
*__checkpoint ⇢ ServerWebExchangeReactorContextWebFilter [DefaultWebFilterChain]
*__checkpoint ⇢ org.springframework.security.web.server.WebFilterChainProxy [DefaultWebFilterChain]
*__checkpoint ⇢ org.springframework.web.filter.reactive.ServerHttpObservationFilter [DefaultWebFilterChain]
*__checkpoint ⇢ HTTP GET "/api/v1/status" [ExceptionHandlingWebHandler]
Original Stack Trace:
at io.netty.resolver.dns.DnsResolveContext.finishResolve(DnsResolveContext.java:1097)
at io.netty.resolver.dns.DnsResolveContext.tryToFinishResolve(DnsResolveContext.java:1044)
at io.netty.resolver.dns.DnsResolveContext.query(DnsResolveContext.java:432)
at io.netty.resolver.dns.DnsResolveContext.access$700(DnsResolveContext.java:66)
at io.netty.resolver.dns.DnsResolveContext$2.operationComplete(DnsResolveContext.java:500)
at io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:590)
at io.netty.util.concurrent.DefaultPromise.notifyListeners0(DefaultPromise.java:583)
at io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:559)
at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:492)
at io.netty.util.concurrent.DefaultPromise.setValue0(DefaultPromise.java:636)
at io.netty.util.concurrent.DefaultPromise.setFailure0(DefaultPromise.java:629)
at io.netty.util.concurrent.DefaultPromise.tryFailure(DefaultPromise.java:118)
at io.netty.resolver.dns.DnsQueryContext.finishFailure(DnsQueryContext.java:348)
at io.netty.resolver.dns.DnsQueryContext$5.run(DnsQueryContext.java:290)
at io.netty.util.concurrent.PromiseTask.runTask(PromiseTask.java:98)
at io.netty.util.concurrent.ScheduledFutureTask.run(ScheduledFutureTask.java:153)
at io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:173)
at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:166)
at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:470)
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:569)
at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997)
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.base/java.lang.Thread.run(Unknown Source)
Caused by: io.netty.resolver.dns.DnsNameResolverTimeoutException: [22807: /<IP_ADDRESS>:53] DefaultDnsQuestion(example-app.k8se-apps.svc.cluster.local. IN A) query '22807' via UDP timed out after 5000 milliseconds (no stack trace available)

Jumping onto the thread.
@mayrstefan Based on your message (https://github.com/netty/netty/issues/13660#issuecomment-1779933019 )

..They exceed the regular 512 bytes. Some responses use EDNS or even TCP for very large responses. ..

This seems like a case of DNS response getting truncated over UDP. If that's correct,  then Netty by default does not upgrade to TCP, unless you've passed the socketChannelFactory or socketChannelType https://github.com/netty/netty/issues/13616. The stack-traces you've posted look familiar to me when we had run into the UDP truncation case.
For reference, you can look at how Redisson fixed it (issue: https://github.com/redisson/redisson/issues/5137 , commit: https://github.com/redisson/redisson/commit/75a6cf25d211b5de9961816603530297ad7906fa)

@yomr from what I know about Microsoft Azure they have a very strange network: everythings is configured with a MTU of 1500. But internally every packet exceeding 1400 Byte gets fragmented. As long as those fragemented packets are received in order there is no problem. But out of order packets get thrown away. For TCP you can spot that Microsoft must be doing some kind of TCP-MSS clamping to avoid the fragmentation. But that does not work with UDP.
So I would have also guessed some kind of UDP fragementation/corruption issue. But for some stacktraces I got from our developers they also provided me a tcpdump. There I can see the full response packet which would speak against that theory

According to https://github.com/reactor/reactor-netty/blob/b921d2e6696f0e0c2937cf213eb9531db61a15fc/reactor-netty-core/src/main/java/reactor/netty/transport/NameResolverProvider.java#L552-L553 TCP fallback is enabled by default in reactor-netty. But I guess as long as the response fits into the 4096 byte for EDNS we will not see TCP being used. Maybe if we would reduce maxPayloadSize ...

For netty it should be:
-Dio.netty.transport.noNative=true

This solved my issue, thank you

interesting... so for @Keerthanaa-K its solved without using the native transport but not for @mayrstefan 😕

Hello, has this issue been resolved? I'm experiencing the same problem.

I'm experiencing the same issue and having a very hard time reproducing it locally; however, I can quite reliably reproduce it when running in a GitHub Action.
This is one of the runs that failed: https://github.com/attocash/node/actions/runs/10873707832/job/30170123443
This is the test: https://github.com/attocash/node/blob/release/0.x/src/test/kotlin/cash/atto/node/IPv6Test.kt
Interestingly, the issue only happens with IPv6.

@rotilho my guess is that because of the larger IPv6 request/response packets it is more likely to be affected by this issue. And I think Github actions also run in Azure infrastructure which is similar to the one Azure Container Apps is using.

It's worth checking #13757 since that resolves some DNS resolution issues in Netty. Example in Pulsar: https://github.com/apache/pulsar/pull/23590 . Requires setting socketChannelType.


Fix plugin library link (#260 was already fixed)

Fixed FAQ link to plugin library (it still mentioned it would exist in the future).

Thanks. Would you mind changing it to “Plugin Marketplace” though? That’s what we used on the page and in the blog post.

Done!


Handle rate limiting for large operations

Summary
We're working with a customer who is running GKE and Argo Workflows for data processing workloads. Occasionally, the CPU and memory on the workflow controller grows exponentially causing the workflow controller to crash. We think this is being caused by the pod cleanup being rate limited by the GKE API and the internal queue backing up, but we're not sure because there isn't clear logging telling us that it's happening
Note: We spoke with @sarabala1979 during the last contributors' meeting about a similar issue. I'm creating this issue to track out work around getting better logging around rate limiting
Use Cases
This would be useful for users whose K8s distro has some sort of rate limiting to have better insights on what's happening during the CPU/memory buildup

Message from the maintainers:
Love this enhancement proposal? Give it a 👍. We prioritise the proposals with the most 👍.

During our sync today, we discussed adding batch methods based on labels for deleting large numbers of Kubernetes resources as a potential solution. Additionally, we reached the conclusion that this might be caused by the pod informer getting backed in addition to or instead of the queue

Assigning to @isubasinghe. We spoke about Delete Collection on our sync. Combined with a label selector for the list option, we think this is a good way to avoid rate limiting

Okay so having had a look at this, I'm not convinced this has a (nice || easy) solution. There is no way to manually delete a collection of pods, without accidentally deleting ones yet to be completed unless we delete them after we label them as completed. For the labelling to happen, we need to add them to the work queues anyway, it is plausible that this may solve the issue for some workflows, but we would be just kicking the can along the road. The reason it may help is because we will pretty much half the items added to the queue but obviously if we double the amount of pods generated in a workflow, we will once again rediscover this problem.
There are some solutions here, we could introduce a deleteStrategy field in the YAML that indicates to skip all the queuing and do a big batch deletion whenever the workflow itself is completed.
The other solution is to get rid of the workqueues all together, I am not really sure why they are even needed in the first place honestly. The workflow controller is just a single process as far as I am aware (please verify this), it reads and writes to the queue, this seems to be a waste of compute in addition to rate limitation problems. The queues do make sense if we ever expand to more than one controller, but in the case that the same process does the writing and the reading, I believe it to be just pure overhead.

Thanks for diving in, @isubasinghe! Let's split this up into a short-term solution and a medium-term solution. In the short term, I think your idea about skipping the queueing and doing a big batch deletion whenever the workflow is completed is very viable. I'd suggest the following adjustments on the implementation though which should prevent us from needing a deleteStrategy field:

When a workflow is deleted, batch delete all the pods and bypass the work queue
We could use the podGC field to specify an OnWorkflowCompletion option that allows the user to tell Argo to batch delete the pods and keep the workflow in memory

We should look at potentially deprecating the work queues as a medium term solution since it's a broader refactor with a lot more surface area and much more potential for breakages
What are your thoughts @isubasinghe?
cc @mostaphaRoudsari @AntoineDao

Circling back, I spoke with @sarabala1979 during the issue triage sync, and we decided that the above referenced implementation of batch deleting pods on workflow deletion and adding the OnWorkflowCompletion option to podGC is a good solution. @isubasinghe, can you go ahead and begin work on it?

@JPZ13 Yeah that sounds like a good solution to me. I'm working on it now.

I've looked at the PR as @sarabala1979 's request. I would like to know - could we use the DeleteCollection API?

I've looked at the PR as @sarabala1979 's request. I would like to know - could we use the DeleteCollection API?

Hi @alexec - the PR does use delete collection on this line: https://github.com/argoproj/argo-workflows/pull/10379/files#diff-e06997e9396a4f740b36a747e168e49b12a757c9cbbce910d20903fde8b7beceR126
Could we move discussion of this PR to the PR itself? I'm also going to close all of the draft PRs to make sure we have  a single source of truth for discussion on this going forward

https://github.com/argoproj/argo-workflows/issues/12659 means that twice as many pods could be going into cleanup queue than they should


Unit tests should be run in some background worker that has access to the DB

Unnecessary after #1606.


Decouple language parsers from Lapce itself

I've become interested in contributing to Lapce, but I've run into a very serious design issue with how language parsing and extensions work together.
The Problem
Let's say I need to add support for a hypothetical language Foo. While lapce-core/language.rs already describes this process, it includes pushing updates to Lapce itself. While Foo could have its own language support via. a 3rd party extension, the syntax for Foo would be coupled to Lapce. This makes it harder for extension developers to get started/make updates, and puts increased pressure on Lapce's maintainers by their dependents.
The Solution(s)
Lapce should allow extension developers to provide their own language syntax. The three options I came up with are:

A tmlanguage.json or similar format. Flattest learning curve for extension developers, but hard to maintain (damn you, regex) and not extensible enough for large packages (could use in conjunction with any of the latter options)
A static lexer/parser like IntelliJ. Provides instant highlighting and is language-agnostic.
A semantic highlighter like VSCode. Allows dynamic highlighting, easier integration with inlay/type hints, but depends entirely on the language server.

Thanks for bringing this up.
With the help of tree-sitter, adding new language support to Lapce is a trivial task. But I do get that needing to modify the core to add language support doesn't feel right.
We do support LSP (semantic highlighting is already supported, inlay/type hints on the way). And I think providing LSP server for the hypothetical language is the best way, because it can provide nearly all the language support you can think of. Also, it's editor independent. So it can be used for vim, emacs, VSCode etc, and vice versa.

@dzhou121 Thanks, that clears up things a bit. It's still worth considering adding support for something like tmlanguage.json for extension developers who don't need something as complex as semantic highlighting.

I'm really excited about this project, so kudos to all the great work. But I echo that the ability to implement syntax highlighting outside of the core is a "must have" before I switch over. Decoupling my ability to add highlighting for various mainstream & esoteric languages and improve upon them outside of having package releases would allow independence and speed.
I don't necessarily care how this gets accomplished (LSP or other) but simply that I have an ecosystem of highlighting plugins that operate independently of the core editor and that I'm able to discover & install easily.


[Create New Issue]: Macros in C

Description
I would like to add documentation for the various Macros in C.
Domain
C/CPP
Type of Contribution
Documentation
Code of Conduct

[X] I follow Contributing Guidelines & Code of conduct of this project.

/assign

@Suvraneel sir please assign me this issue. I would love to work on this!

Closing this issue as it got fixed in #2575


Increasing ELLIPSE2-N ekf_euler output frequency to 1khz

Hi,
I am using your ROS package to receive data from ELLIPSE2-N.
Currently I am able to receive ekf_euler at about 103hz after changing the config file. I actually don't need the GPS or BARO fusion, just need the Euler angles.

Is it possible to increase the frquency to 1khz?
At this moment, even though I set the frequency to be 200hz, but it is about 103 frames per second, is it because of serial baud rate? (how can I change this?)

Thanks in advance.

Hey,
Sorry for late reply.
Which version of the driver are you currently using (The release or devel branch one) ?
Do you have other output defined or only the ekf_euler ?

Hi Erwan,
I am using the version that is installed using "apt-get install ros-kinetic(melodic)-sbg-driver" (http://wiki.ros.org/sbg_driver).
Basically, I need the angular velocities that I get by subscribing to imu_data topic using ROS, and attitude that I get by subscribing to ekf_euler topic.
I am receiving only 92 fps, even after increasing the serial port speed.
Also, the frames have delay (about milliseconds), I am not sure how much, but it reduces the performance of the whole system.
Thanks,

So you're using the master version of the driver ? (2.0.0)
Can I see your configuration file ?
How do you measure your frequency ?

And for the error, someone told me about it as well, for some reasons, my cmake version didn't cahce the typo error, it is corrected now !

About the version, it seems to me 1.1.7?
:~$ apt-show-versions ros-kinetic-sbg-driver
ros-kinetic-sbg-driver:amd64/xenial 1.1.7-0xenial-20191214-110155+0000 uptodate
ros-kinetic-sbg-driver:arm64 not installed
ros-kinetic-sbg-driver:i386 not installed

About the frequency:
I measure it using rostopic hz 'topic name'
That being said, I am testing our system using other IMUs also, by looking at the results, I can see SBG is more accurate, but data arrive slower and with a delay (I said that by looking at the behaviour of the system and my experience with other IMUs).
This is my configuration file:
# Configuration file for SBG Ellipse
# YAML

# Ellipse-A - Magnetic-based
# Ellipse-E - External GNSS
# Ellipse-N - GNSS-based
# Ellipse-D - Dual-antenna GNSS

uartConf:
  # Port Name
  portName: "/dev/ttyUSB0"

  # Baude rate (4800 ,9600 ,19200 ,38400 ,115200 [default],230400 ,460800 ,921600)
  baudRate: 460800

  # Port Id
  # 0 PORT_A: Main communication interface. Full duplex.
  # 1 PORT_B: Auxiliary input interface for RTCM
  # 2 PORT_C: Auxiliary communication interface. Full duplex.
  # 3 PORT_D: Auxiliary input interface
  # 4 PORT_E: Auxiliary input/output interface
  portID: 0

# Sensor Parameters
sensorParameters:
  # Initial latitude (°)
  initLat: 48.419727
  # Initial longitude (°)
  initLong: -4.472119
  # Initial altitude (above WGS84 ellipsoid) (m)
  initAlt: 100.0
  # Year at startup
  year: 2018
  # month in year at startup
  month: 03
  # day in month at startup
  day: 10

  # Montion profile ID
  # 1 GENERAL_PURPOSE Should be used as a default when other profiles do not apply
  # 2 AUTOMOTIVE      Dedicated to car applications
  # 3 MARINE          Used in marine and underwater applications
  # 4 AIRPLANE        For fixed wings aircraft
  # 5 HELICOPTER      For rotary wing aircraft
  motionProfie: 1

# IMU_ALIGNMENT_LEVER_ARM
imuAlignementLeverArm:
  # IMU X axis direction in vehicle frame
  # 0 ALIGNMENT_FORWARD   IMU Axis is turned in vehicle's forward direction
  # 1 ALIGNMENT_BACKWARD  IMU Axis is turned in vehicle's backward direction
  # 2 ALIGNMENT_LEFT      IMU Axis is turned in vehicle's left direction
  # 3 ALIGNMENT_RIGHT     IMU Axis is turned in vehicle's right direction
  # 4 ALIGNMENT_UP        IMU Axis is turned in vehicle's up direction
  # 5 ALIGNMENT_DOWN      IMU Axis is turned in vehicle's down direction
  axisDirectionX: 0
  # IMU Y axis direction in vehicle frame
  # 0 ALIGNMENT_FORWARD   IMU Axis is turned in vehicle's forward direction
  # 1 ALIGNMENT_BACKWARD  IMU Axis is turned in vehicle's backward direction
  # 2 ALIGNMENT_LEFT      IMU Axis is turned in vehicle's left direction
  # 3 ALIGNMENT_RIGHT     IMU Axis is turned in vehicle's right direction
  # 4 ALIGNMENT_UP        IMU Axis is turned in vehicle's up direction
  # 5 ALIGNMENT_DOWN      IMU Axis is turned in vehicle's down direction
  axisDirectionY: 3
  # Residual roll error after axis alignment rad
  misRoll: 0
  # Residual pitch error after axis alignment rad
  misPitch: 0
  # Residual yaw error after axis alignment rad
  misYaw: 0
  # X Primary lever arm in IMU X axis (once IMU alignment is applied) m
  leverArmX: 0
  # Y Primary lever arm in IMU Y axis (once IMU alignment is applied) m
  leverArmY: 0
  # Z Primary lever arm in IMU Z axis (once IMU alignment is applied) m
  leverArmZ: 0

# AIDING_ASSIGNMENT
# Note: GNSS1 module configuration can only be set to an external port on Ellipse-E version.
# Ellipse-N users must set this module to MODULE_INTERNAL. On the other hand, rtcmModule is only
# available for Ellipse-N users. This module must be set to MODULE_DISABLED for other users.
aidingAssignment:
  # GNSS module port assignment:
  # 255 Module is disabled
  # 1 Module connected on PORT_B
  # 2 Module connected on PORT_C
  # 3 Module connected on PORT_D
  # 5 Module is connected internally
  gnss1ModulePortAssignment: 255
  # GNSS module sync assignment:
  # 0 Module is disabled
  # 1 Synchronization is done using SYNC_IN_A pin
  # 2 Synchronization is done using SYNC_IN_B pin
  # 3 Synchronization is done using SYNC_IN_C pin
  # 4 Synchronization is done using SYNC_IN_D pin
  # 5 Synchronization is internal
  # 6 Synchronization is done using SYNC_OUT_A pin
  # 7 Synchronization is done using SYNC_OUT_B pin
  gnss1ModuleSyncAssignment: 0
  # RTCM input port assignment for Ellipse-N DGPS
  rtcmPortAssignment: 255
  # Odometer module pin assignment
  # 0 Odometer is disabled
  # 1 Odometer connected only to ODO_A (unidirectional).
  # 2 Odometer connected to both ODO_A (signal A) and ODO_B (Signal B or direction) for bidirectional odometer.
  odometerPinAssignment: 0

magnetometer:
  # Magnetometer model ID
  # 201 Should be used in most applications
  # 202 Should be used in disturbed magnetic environment
  magnetometerModel: 201
  # Magnetometer rejection mode
  # 0 Measurement is not taken into account
  # 1 Measurement is rejected if inconsistent with current estimate (depending on error model)
  # 2 Measurement is always accepted
  magnetometerRejectMode: 1

  # Theses parameters are only used for a calibration run
  calibration:
    # 1 2D Tell the device that the magnetic calibration will be performed with limited motions.
    #     This calibration mode is only designed to be used when roll and pitch motions are less than ± 5°.
    #     To work correctly, the device should be rotated through at least a full circle.
    # 2 3D Tell the device to start a full 3D magnetic calibration procedure. The 3D magnetic calibration offers the best accuracy
    mode: 2

    # 0 LOW_BW Use this parameter in case of strong magnetic noise during calibration.
    #     Motion during calibration is then limited to slow rotations.
    # 1 MEDIUM_BW Tell the device that medium dynamics will be observed during the magnetic calibration process.
    #     It can be used in case of medium magnetic noise during calibration process. Medium dynamics are used during calibration.
    # 2 HIGH_BW This parameter is suitable to most applications. It can be used when the dynamics during calibration are relatively high.
    bandwidth: 2

# GNSS configuration
# Note: Pitch and Yaw offsets as well as antenna distance parameters should only be considered in
# case of dual antenna GNSS receiver. It can be left to 0 otherwise.
gnss:
  # Gnss Model Id
  # 101 Used on Ellipse-N to setup the internal GNSS in GPS+GLONASS
  # 102 Default mode for Ellipse-E connection to external GNSS
  # 103 Used on Ellipse-N to setup the internal GNSS in GPS+BEIDOU
  # 104 Used on Ellipse-E to setup a connection to ublox in read only mode.
  # 106 Used on Ellipse-E to setup a connection to Novatel receiver in read only mode.
  # 107 Used on Ellipse-D by default
  gnss_model_id: 102

  #GNSS antenna lever arm in IMU X axis (m)
  leverArmX: 0
  #GNSS antenna lever arm in IMU Y axis (m)
  leverArmY: 0
  #GNSS antenna lever arm in IMU Z axis (m)
  leverArmZ: 0
  #Pitch offset for dual antenna GNSS (rad)
  pitchOffset: 0
  #Yaw offset for dual antenna GNSS (rad)
  yawOffset: 0
  #Distance between two GNSS antennas (m)
  antennaDistance: 0

  # Rejection mode for position
  # 0 Measurement is not taken into account
  # 1 Measurement is rejected if inconsistent with current estimate (depending on error model)
  # 2 Measurement is always accepted
  posRejectMode: 1
  # Rejection mode for velocity (see posRejectMode values)
  velRejectMode: 1
  # Rejection mode for true heading (see posRejectMode values)
  hdtRejectMode: 1

# Odometer configuration
odom:
  # Odometer's gain Pulses/m
  gain: 4800
  # User gain average error (%)
  gain_error: 0.1
  # Odometer's direction
  # 0: positive
  # 1: negative
  direction: 0

  # Odometer lever arm in IMU X axis (m)
  leverArmX: 0
  # Odometer lever arm in IMU Y axis (m)
  leverArmY: 0
  # Odometer lever arm in IMU Z axis (m)
  leverArmZ: 0

  # Odometer rejection mode
  # 0 Measurement is not taken into account
  # 1 Measurement is rejected if inconsistent with current estimate (depending on error model)
  # 2 Measurement is always accepted
  rejectMode: 1

# ToDo: event & CAN configuration

############################### Output configuration ###############################
# 0 Output is disabled
# 1 Output is generated at 200Hz
# 2 Output is generated at 100Hz
# 4 Output is generated at 50Hz
# 8 Output is generated at 25Hz
# 10 Output is generated at 20Hz
# 20 Output is generated at 10Hz
# 40 Output is generated at 5Hz
# 200 Output is generated at 1Hz
# 10000 Pulse Per Second. Same mode as above.
# 10001 Output sent when a new data is available.
# 10002 Output is generated when a new virtual odometer event occurs
# 10003 Output is generated on a Sync In A event
# 10004 Output is generated on a Sync In B event
# 10005 Output is generated on a Sync In C event
# 10006 Output is generated on a Sync In D event
output:
  # Time Reference
  # 0 No external time reference is used. Internal clock is used instead.
  # 1 The system will be synchronized on the clock input observed at SYNC_IN_A pin.
  # 2 The system will be synchronized GPS PPS signal, (see GPS module assignment)
  timeReference: 0

  # Status general, clock, com aiding, solution, heave
  log_status: 1
  # Includes IMU status, acc., gyro, temp delta speeds and delta angles values
  log_imu_data: 1
  # Includes roll, pitch, yaw and their accuracies on each axis
  log_ekf_euler: 1
  # Includes the 4 quaternions values
  log_ekf_quat: 0
  # Position and velocities in NED coordinates with the accuracies on each axis
  log_ekf_nav: 0
  # Heave, surge and sway and accelerations on each axis for up to 4 points
  log_ship_motion: 1
  # Provides UTC time reference
  log_utc_time: 1
  # Magnetic data with associated accelerometer on each axis
  log_mag: 1
  # Magnetometer calibration data (raw buffer)
  log_mag_calib: 0
  # GPS velocities from primary or secondary GPS receiver
  log_gps1_vel: 0
  # GPS positions from primary or secondary GPS receiver
  log_gps1_pos: 0
  # GPS true heading from dual antenna system
  log_gps1_hdt: 0
  # GPS 1 raw data for post processing.
  log_gps1_raw: 0
  # Provides odometer velocity
  log_odo_vel: 0
  # Event A/B/C/D Event markers sent when events are detected on a sync in pin
  log_event_a: 0
  log_event_b: 0
  log_event_c: 0
  log_event_d: 0
  # Barometric altimeter output
  log_pressure: 0

  # Node frequency (Hz) (if set to 0, the node will decide the most appropriate frequency to run)
  frequency: 200

Yes, I also changed it to capital V!
Thanks,

Huges changes have been made on the current repository version (2.0.0) regarding the message handling, so I recommend you to use this version (which should be available via apt-get soon).

Just wondering how it automatically goes to 200 hz even though I am using the default uart setting file which sets the output to be 25 hz.

If you didn't reconfigure your device, even if the settings file is set to 25Hz, as your Ellipse is currently sending data at 200Hz.
A parameter is available in the config file to configure again your device with the driver.

Okay, great!
Can I get data higher than 200 Hz per second?

It is not possible to configure sbg output at more than 200Hz.


CDR from pm_icecon

Brings in the CLI and other logic specific to the CDR from pm_icecon. See the associated PR for that repo here: https://github.com/nsidc/pm_icecon/pull/27

Note that we expect tests to fail on this branch until  https://github.com/nsidc/pm_icecon/pull/27 is merged.