GDExtension: CallableCustom equal and less operators are not invoked

Godot version
4.2-dev (e0ee985f647273dbac6d05c46cefe3a69460fa55)
System information
Windows 10
Issue description
Continuation of a discussion from recently merged #79005. Not confirmed to be a bug, but it's unclear how the API is being used.
Custom callables in GDExtension allow several functions to be defined. I tested the following:

✔ call_func
❔ is_valid_func (not yet tested)
✔ free_func
✔ hash_func
❌ equal_func (custom function specified but not invoked)
❌ less_than_func (unclear when this could be invoked, as Callable doesn't support < operator)
✔ to_string_func

From the original discussion:

less_than_func is used primarily when callables are placed in a container such as an ordered map or set.

You mean in Godot's own C++ code?
Because that ordering relation isn't anyhow exposed to GDExtension, as Array is unordered and Dictionary is a hashmap...

I'm a bit surprised that equal_func isn't being called for you tho, I don't have an explanation.

Is it called for you? If yes, in which context?
I tried 3 different scenarios, none of which calls my custom equal_func:

callable == callable
Variant(callable) == Variant(callable)
insert two same keys into a dictionary

hardcoded the hash_func to a constant, which is indeed invoked
so the hash map should resort to equality for bucket selection, but it doesn't use my function

Steps to reproduce
See above
Minimal reproduction project
N/A

less_than_func is used primarily when callables are placed in a container such as an ordered map or set.

You mean in Godot's own C++ code?

Yes

I'm a bit surprised that equal_func isn't being called for you tho, I don't have an explanation.

Is it called for you? If yes, in which context?

It's called for me during callable to signal connection / disconnection. I think equally via variant equally operator was also working, but it's been awhile and I can't actually check this very moment.
I don't know if this is relevant for your case, but the function pointers for these functions must match on both callables or they won't be called.

The compare equal function is only invoked if it's not the same exact callable, if the pointers equal it returns true immediately

The compare equal function is only invoked if it's not the same exact callable, if the pointers equal it returns true immediately (false for <), they must also have the exact same compare functions

This explains it! Even if not very intuitive, this makes sense. We definitely have to document this (I would keep this issue open to track that).

Some questions remain though, mainly about  <. maiself mentioned:

less_than_func is used primarily when callables are placed in a container such as an ordered map or set.
Yes [in Godot's own C++ code].

Also here, I'd like to clarify semantics and document them in the header:

I made some observations from GDExtension. Are these all correct and intended?

Callable doesn't expose an operator < in the JSON.
Variant::evaluate() fails accordingly when comparing two callables.
Array::sort() with multiple callables does not invoke the user-defined operator <.

Can we define precisely in which scenarios less_than_func is used?
Godot internally has a get_compare_less_func() for various Callable types.
Can someone with better insights explain the semantics?

What are the implications if a GDExtension binding developer does not provide a less_than_func?
Can anything break?

Same as 3. but for equal_func?

3. What are the implications if a GDExtension binding developer does not provide a less_than_func?
Can anything break?
4. Same as 3. but for equal_func?

The current doc comments in gdextension_interface.h already address that both less_than_func and equal_func are optional, and that if they aren't specified a default will be provided:
	 * `hash_func`, `equal_func`, and `less_than_func` are optional. If not provided both `call_func` and
	 * `callable_userdata` together are used as the identity of the callable for hashing and comparison purposes.

In godot-cpp, the default is fine, because the full identity of a callable is defined by the address of the call_func and callable_userdata. The binding author will need to evaluate if that's true in their case too, or if they need to dig deeper into the callable_userdata or something.

I did some more research on @Bromeon's other questions:

1. I made some observations from GDExtension. Are these all correct and intended?

Callable doesn't expose an operator < in the JSON.
Variant::evaluate() fails accordingly when comparing two callables.
Array::sort() with multiple callables does not invoke the user-defined operator <.

Yes, this appears to be correct, and it all comes back to the same thing. In variant_op.cpp, we never register an OperatorEvaluatorLess for Callable. I can only assume this is intentional - not too many variant types have registered an OperatorEvaluatorLess.

2. Can we define precisely in which scenarios less_than_func is used?
Godot internally has a get_compare_less_func() for various Callable types.
Can someone with better insights explain the semantics?

This one was the biggest mystery to me personally.
Digging around, I can see it used in Object::Connection::operator<():
bool Object::Connection::operator<(const Connection &p_conn) const {
	if (signal == p_conn.signal) {
		return callable < p_conn.callable;
	} else {
		return signal < p_conn.signal;
	}
}

It's also used in CustomCallableBind / CustomCallableUnbind:

In CallableCustomBind::_less_func() where it does:if (a->callable < b->callable) {
	return true;
} else if (b->callable < a->callable) {
	return false;
}

In CallableCustomUnbind::_less_func() where it does:if (a->callable < b->callable) {
	return true;
} else if (b->callable < a->callable) {
	return false;
}

However, those serve the same purpose as our less_than_func, so the mystery remains.
I tried commenting out both Callable::operator<() and Object::Connection::operator<() and compiling the engine to see if I'd get any errors. It turned up only one place where it's actually used:

In SceneState::_parse_connections() (which is part of scene saving) where it does:	List<Node::Connection> conns;
	p_node->get_signal_connection_list(E.name, &conns);

	conns.sort();

So, I guess we have to have it because it's a required part of CallableCustom (ie CallableCustom::get_compare_less_func() is a pure virtual function), but it seems it's only currently actually used for ordering the connections when saving scenes. :-)
However, if at some point in the future any part of the engine put a Callable or Object::Connection in an ordered list, or in a normal list and sorted it, then this function would get called.

Wow, thanks a lot for your investigation 👍

In godot-cpp, the default is fine, because the full identity of a callable is defined by the address of the call_func and callable_userdata. The binding author will need to evaluate if that's true in their case too, or if they need to dig deeper into the callable_userdata or something.

That sounds like a good default. To clarify, this is godot-cpp and not Godot itself?

So, I guess we have to have it because it's a required part of CallableCustom (ie CallableCustom::get_compare_less_func() is a pure virtual function), but it seems it's only currently actually used for ordering the connections when saving scenes. :-)
However, if at some point in the future any part of the engine put a Callable or Object::Connection in an ordered list, or in a normal list and sorted it, then this function would get called.

Great summary! That is indeed a very niche use case at the moment. I'm probably not going to expose < to the Rust user, some arbitrary but deterministic ordering relation by the library should be enough.
For == and hash(), it seems there is more direct impact.

That sounds like a good default. To clarify, this is godot-cpp and not Godot itself?

Godot doesn't provide a default - CallableCustom::get_compare_equal_func() and CallableCustom::hash() are both pure virtual functions.
It's the code for GDExtension added by Mai's PR that provides the defaults:

For equals: https://github.com/godotengine/godot/pull/79005/files#diff-75926029058e1a3a1999b3709fc144c7b1227af5a023f3dab87c0a07d1e07f26R61
For hash: https://github.com/godotengine/godot/pull/79005/files#diff-75926029058e1a3a1999b3709fc144c7b1227af5a023f3dab87c0a07d1e07f26R178

But godot-cpp is able to use those defaults to implement callable_mp() and callable_mp_static(). I actually have plans to add support to godot-cpp for allowing developers to make their own custom callable types, and for that, it won't use the defaults.


Universal cable issues with IC2 EU energy sources.

Universal cables don't deliver power from industrial craft 2 power sources like batbox or any generator even though they connect to the output.
Batbox and MFFS can still be charged with Universal cables.
IC2 version 2.2.645 experimental

How to set import mode?


xdm Updates 120720a

Changed the "branch" class to the "location" class.
https://github.com/adobe/xdm/issues/1017

closing per new meta tags and measure updates

closing per new meta tags and measure updates


Research Distribution of cli

Never done something like this, sooo how do I distribute this? How does Mason work? Or Brew?

with the help of https://github.com/goreleaser/goreleaser there are now binaries in a release 🥳


Unable to open VM if another VM is open with VirtualBox

Dear All,
My apologies for the several issues raised on the same day.
When I have a VM open inside VirtualBox, and if I try to use quickemu, I am getting the below error message.
ioctl(KVM_CREATE_VM) failed: 16 Device or resource busy
qemu-system-x86_64: failed to initialize KVM: Device or resource busy

Is it safe to assume that at a time, only either quickemu or virtualbox can be open ?

This is not a bug with QEMU or Quickemu. You can not have multiple hypervisors accessing VT-d at the same time.

Thank you for your response.


Compilation fails with Swift 1.2 (Xcode 6.3 beta)

Compiling PromiseKit in Xcode 6.3 fails because of new breaking language changes.
@mxcl Do you have something in the pipeline for 1.2 support? I know that there is a tool to convert from 1.1 to 1.2 automatically, and I guess we could detect the compiler version and if/else the affected parts of the code.
I'll spend some time on it this week.

@ldiqual I don't know if you have already seen it but just wanted to point out that there is a branch for swift 1.2 support. You might want to base your work on that one if you are tinkering this week, happy hacking :)

I started a branch called swift-1.2 and reached impassable compile issues. I got the attention of the Swift people on Twitter and they agreed that something in Swift itself needs to be fixed, so we'll just have to wait on the next beta I'm afraid.

If you want, you can check out the branch and try to find workarounds. I tried to find some, and eventually decided it wasn't going to happen.

I see, thanks for the details. Let's hope that improvements will come in the next beta, incremental compilation and no-crashes are really what play with my nerves now :/

Compiles with Xcode 6.3 beta2


Stream Enabled Clients Do Not Need Close Handler

The call to EventBroker.prototype.client checks the given client
instance for streamEnabled. If "true", the client is passed to
_streamEnabledClient where it has "close" and "unsubscribe" event
handlers added. If the client is not streamEnabled the event
handlers are not added.
This means that the _subscribe method only needs to make sure to
call unsubscribe on the "close" event of clients that are not
streamEnabled.

This PR is to address Issue #351

👍


Added Candy Crush Game

Close #270
Made a candy crush game using html css and javascript
Here's it's functioning and link
https://poulavbhowmick03.github.io/CandyCrush/

@Dharmesh177 Check out

@Dharmesh177 @Shreyaar12  Please have a look at it

Hey @Dharmesh177 please merge this pr

@Dharmesh177 please merge the PR

Add rules in the game page

You mean in the readme file?

@PoulavBhowmick03 there is some minor bug like when i start game defaut score is 7 there and if we move unmatch pair then paired swapped but it shouldn't

and you still not added rule in your game
suggestion : put one page of rule and start btn as well as you can add some music while pair match and animation etc


fix: ensure that runc version added is the same used/supported by

What this PR does / why we need it:
To ensure that runc version added is the same used/supported so that we might fix the currently issues reported within.
Which issue(s) this PR fixes:
Fixes # https://github.com/replicatedhq/kURL/pull/2998
Special notes for your reviewer:
The documentation and the reason for the specific versions pinned are described via comments.
Steps to reproduce
Does this PR introduce a user-facing change?
fix: ensure that containerd addons versions will be shipped with the respective supported runc version. Containerd addon versions >= 1.6.4 will be built with runc version `v1.1.4` instead of `v1.0.0-rc95`

Does this PR require documentation?

Analyse of errors faced
test-addons (containerd, 1.6.4, pr-3766-772f45f) / test-addon
In this case the failure is correct because the version is incompatible.
Internal task open for we check if we can improve the tests [62721]

It looks like most errors are failures to downgrade or failures when checking the version changed on an upgrade although its upgrading to the same version.
The airgap unpacking errors I believe are due to a deployment resetting the connection but I am not sure.


"Priseaca" is listed in the drop-down menu

Description:
"Priseaca" is listed in the drop-down menu alongside its corresponding county and commune, according to the law
Precondition:
The website is up an running.

Step 1
Type "Priseaca" in the search bar.

Expected results
The location is listed in the drop-down menu as "Priseaca, Argeș (Coșești)".


Rewrite tokenization to tokenize motions rather than individual inputs

This is more of a memo than a proper bug report, but I wanted to leave a note to myself as for how to go about rewriting this.
Iguana's tokenization is a process where it takes a command (such as D, DF, F, a) and converts it into an internal intermediate form (to be exact, a string of characters called tokens such as 2,6,3,a). This works, but it runs into problems when combined with merge() in the case of multiple commands being assigned to the same move.
Because merge() works on a per-character basis, the result is that individual inputs get appended to eachother, and the results can look really messy.
Take, for example, this snippet from Warusaki3's CvS Juni:
[Command]
name = "アースダイレクト1"
command = ~F, D, B, U, x
time = 40

[Command]
name = "アースダイレクト1"
command = ~F, D, B, U, ~x
time = 40

[Command]
name = "アースダイレクト1"
command = ~D, B, U, F, x
time = 40

[Command]
name = "アースダイレクト1"
command = ~D, B, U, F, ~x
time = 40

[Command]
name = "アースダイレクト1"
command = ~B, U, F, D, x
time = 40

[Command]
name = "アースダイレクト1"
command = ~B, U, F, D, ~x
time = 40

[Command]
name = "アースダイレクト1"
command = ~U, F, D, B, x
time = 40

[Command]
name = "アースダイレクト1"
command = ~U, F, D, B, ~x
time = 40

[Command]
name = "アースダイレクト1"
command = ~F, U, B, D, x
time = 40

[Command]
name = "アースダイレクト1"
command = ~F, U, B, D, ~x
time = 40

[Command]
name = "アースダイレクト1"
command = ~D, F, U, B, x
time = 40

[Command]
name = "アースダイレクト1"
command = ~D, F, U, B, ~x
time = 40

[Command]
name = "アースダイレクト1"
command = ~B, D, F, U, x
time = 40

[Command]
name = "アースダイレクト1"
command = ~B, D, F, U, ~x
time = 40

[Command]
name = "アースダイレクト1"
command = ~U, B, D, F, x
time = 40

[Command]
name = "アースダイレクト1"
command = ~U, B, D, F, ~x
time = 40

; ...

[State -1, reppuken]
type = ChangeState
value = 1500
triggerall = !var(59)
triggerall = roundstate = 2
triggerall = Command = "アースダイレクト1" || Command = "アースダイレクト2" || Command = "アースダイレクト3"
; ...

All of those above アースダイレクト1 commands are variations of the 360 motion (2684 in numpad notation), and logically one would just compress all of them down to "do a circle motion then press a button". merge(), however, goes on a per-character basis, and being met with all of those variations (along with the other two sets I've removed from the above snippet) decides instead to concatenate them all together into this hilariously unweildy mess:
reppuken			_F_+_D_+_D_+_B_+_B_+_U_+_U_+_F_+_F_+_D_+_D_+_B_+_B_+_U_+_U_D_+_B_+_B_+_U_+_U_+_F_+_F_+_U_+_U_+_F_+_F_+_D_+_D_+_B_+_XBB_+_U_+_U_+_F_+_F_+_D_+_D_+_B_+_B_+_U_+_U_+_F_+_F_+_D_+_D_U_+_F_+_F_+_D_+_D_+_B_+_B_+_D_+_D_+_B_+_B_+_U_+_U_+_F_+_F^X

Clearly, this isn't ideal! The solution that IGOCLG used (and that I want to reimplement into Iguana) is to instead tokenize motions. That way, instead of combining every input, Iguana would instead combine every motion, which should result in WAY less absurd results.
I think the best way to approach this from a coding standpoint would be to use Go's strings.Split function to split at every comma, analyze each splice, build together a new string of tokens, and then check for motions before returning.

Okay, so it appears that Juni's case is a bit more complicated as it uses variants of 360 motions that don't have 100%-equivalent glyphs in IKEMEN (namely 6248 and 4862). Despite this, I rewrote tokenize() anyways since it should be an improvement nonetheless!


Chore: Add MIT license

Added MIT license to project.
License is the same as https://raw.githubusercontent.com/react-native-community/react-native-cli/master/LICENSE with updated year

Thx!!


rewrite unittest to use slingContext and re-enable 2 more testcases

Pull Request Test Coverage Report for Build 3587

0 of 0   changed or added relevant lines in 0 files are covered.
No unchanged relevant lines lost coverage.
Overall coverage increased (+0.3%) to 44.149%

Totals

Change from base Build 3563:
0.3%

Covered Lines:
10153

Relevant Lines:
22997

💛  - Coveralls


Verification Key Downloaded Insecurely

Going through the docs on installation and noticed that the public key is downloaded via http instead of https. I tried to get the file using https but received an error from the server
Here is the relevant line in the docs.
https://github.com/openxpki/openxpki/commit/e661664924fa0c087432acd6411c54f7905a243b#diff-dce4048f760a2254db20f3a78d7fcfa1R34
Please consider serving this key securely, or publish it to a key server, or at least include the fingerprint in the docs.

or not...

Sorry I dont get your comment, anything that I did wrong or you suggest to improve?
keyservers dont provide any trust, so there is no benefit for me...

Sorry! I totally didn't see the commit. It looks great.


Getting Error Code 12018

While creating a subscriber I am getting error code 12018 from ET. Can you please let me know what does it mean?
Or How can I get a sample SOAP envelope that this gem creates while sending request?

Can you provide the stack trace?

I am getting this in body of response.
{:create_response=>{:results=>{:status_code=>"Error", :status_message=>"ResubscribeFailed", :ordinal_id=>"0", :error_code=>"12018", :new_id=>"0", :object=>{:partner_key=>nil, :object_id=>nil, :email_address=>"xxxxxxx", :subscriber_key=>"xxxxxxx", :status=>"Active", :"@xsi:type"=>"Subscriber"}}, :request_id=>"xxxxxxxxxxxx", :overall_status=>"Error", :@xmlns=>"http://exacttarget.com/wsdl/partnerAPI"}}

May be the subscriber you are tying to create is already been there.

I checked it and its not present there. Can you please let me know how can I get SOAP envelope of request. I can get the SOAP envelope of response but I need envelope for request.

I still don't know why this error is coming. But I am now able to find request envelope.

Can you provide payload so that I can recreate the issue and will help you in a better way.


Which exception should be raised when directly accessing vstimecmp from VS and VU mode?

Hi,
The Sstc extention says:
"When this extension is implemented and STCE in menvcfg is zero, an attempt to access stimecmp or
vstimecmp in a mode other than M-mode raises an illegal instruction exception, "
The H-extension says:
"When V=1, an attempt to read or write a VS
CSR directly by its own separate CSR address causes a virtual-instruction exception."
I'm wondering which exception should be raised when directly accessing vstimecmp when V=1?

Hi @gfavor , thanks for the quick response!
Can I interpret it this way?
when menvcfg.STCE is 0, stimecmp is disabled (considered unimplemented or non-existent)
when henvcfg.STCE is 0, vstimecmp is disabled.
Accesing a disabled/unimplemented/non-existent CSR always raises illegal instruction exception
Thereforce, when this extension is implemented and STCE in menvcfg is zero, accessing vstimecmp from VS/VS modes raises illegal instruction.
The accurate expression of H-extension should be:
"When V=1, an attempt to read or write a enabled VS
CSR directly by its own separate CSR address causes a virtual-instruction exception."

Yes to when menvcfg.STCE=0.  But the second paragraph says that when menvcfg.STCE=1 AND henvcfg.STCE=0, then vstimecmp is disabled.
The Priv spec does not require that unimplemented are trapped with an Illegal Instriction exception.  They simply have a default definition of Reserved - which allows a fair amount of implementation freedom.
I'm not sure what your "The accurate expression of H-extension should be ..." statement is trying to point out that isn't clearly defined by the ISA specs?
The spec says that a vstimecmp access raises an illegal instruction exception irrespective of mode (other than M-mode) if menvcfg.STCE=0, and raises a virtual instruction exception when menvcfg.STCE=1 and henvcfg.STCE=0 and V=1.  Conversely, when V=1 and menvcfg.STCE=1 and henvcfg.STCE=1 and hence stimecmp is accessible, then there should not be an exception.
As an orthogonal and general matter, the H extension says:
When V=1, an attempt to read or write a VS CSR directly by its own separate CSR address causes a virtual-instruction exception. (Attempts from U-mode cause an illegal-instruction exception as usual.)

I don't understand why you say the statement of H-extension is "orthogonal".
It appears to me the statements of Sstc-extension and H-extension are conflicting, in other words, Sstc does not strictly follow H.
For accessing vstimecmp directly from VS-mode or VU-mode (i.e. V = 1) when both H-extension and Sstc-extension are implemented, H-extension requires to raise virtual exception, but Sstc-extension says an illegal instruction exception will be raised if menvcfg.STCE is zero.
Is it allowed that some CSRs don't need to follow the statement of  H-extension? i.e "When V=1, an attempt to read or write a VS CSR directly by its own separate CSR address causes a virtual-instruction exception."
If it is allowed, maybe the statement can be changed to "Unless otherwise specified, when V=1, an attempt to read or write a VS CSR directly by its own separate CSR address causes a virtual-instruction exception."

Menvcfg.STCE takes priority over what the H extension says.  This is clear because when menvcfg.STCE=0, Sstc must appear to not be implemented.  At which point the H extension saying that "accessing vstimecmp when V=1 and Sstc is implemented raises an exception" (irrespective of the exception type) is not applicable - since Sstc is not implemented.

The H extension talks about the CSRs instroduced by the H extension and what it states is right.
The H extension also provides a more general HS-qualified rule. The HS-qualified rule states that an instruction, such as one that accesses a CSR, will cause a virtual-instruction exception instead of an illegal instruction exception if the attempted instruction is HS-qualified, i.e. valid to execute in HS-mode, but the instruction is prevented from executing at V=1 due to insufficient privilege or being disabled by a hypervisor CSR such as henvcfg or hcounteren.
The instruction to access vstimecmp would not be HS-qualfied if menvcfg.STCE was 0 since HS-mode itself cannot access it. When it is HS-qualified, i.e. menvcfg.STCE is 1, an access to vstimecmp from V=1 would still not be allowed since vstimecmp requires HS-mode privilege. However, now since the instruction is HS-qualified it will cause a virtual-instruction exception instead of an illegal instruction exception.

Thanks for clarifying!


Download arrow color changed to white

Fixes: https://openedx.atlassian.net/browse/MA-1726
Here's how it looks now @aleffert

@1zaman @BenjiLee @bguertin quik review anyone :smile:

:cool:

:+1:


Are groups needed even for just one container ?

Hello there, great work on this project, looking forward to using this.
I have a few questions, which I hope you might also find useful to add to the readme, or as a separate FAQ section for clarity on how Lazytainer works -

Do I have to define this for each and  every container even if there is no "group" of containers and just one independent container (for e.g portainer) ? It would be nice if this is optional and only needed when groups of containers need to brought up/down together ?

- "lazytainer.group.<yourGroupName>.<property>=value"

I was thinking if I could create just one default group for single containers and map them all to the same group.However would that mean all the unrelated single containers will come up together when I want to use just one of them ?
Is there a better way of doing this ?

In cases where multiple containers are assigned to the same group - is there any way for me to control the ordering in which the containers are brought up ? For example lets say i have [ database and app ] containers assigned to group app1 - how can I ensure that the database container comes up first before the app container ? Also, will Lazytainer take care of waiting for the db container to be up first before starting up the app container ?

Related but slightly different question - Does Lazytainer automatically look for the 'depends_on' in docker compose and ensure that the depends_on container is up ? And if its not then Lazytaner will bring up the dependency first before the app container ?

Would it possible for you to add a diagram of how Lazytainer works, what the primary configuration that drive its behavior, how it checks up/down status, how it decides to bring up the containers along with ordering /etc details ? A flowchart / sequence diagram showing the internal flow of logic will be a great resource for learning about the project.

For a use-case where Lazytainer is used in combination with status monitors like UptimeKuma, etc. - Is there a way to tell Lazytainer to not spin up any containers for requests from specific containers / ipaddresses / etc ? Otherwise just the requests from UptimeKuma will keep the containers on all the time. So a way to say igonore requests from specific applications from starting up a container will be very useful.

As a newcomer to Lazytainer, I think it may be useful to add another detailed example file with multiple containers showing examples of how to configure these ordering / dependencies among containers, along with combination of app+db to be up/down together, and few other single containers that can be up/down independently.
@vmorganp - Appreciate your replies / suggestions in advance !

Do I have to define this for each and every container even if there is no "group" of containers

For now, yes. I'll look into adding a sort of "default" so that this can be handled automatically without the syntax overhead

would that mean all the unrelated single containers will come up together when I want to use just one of them ?

yes.

For example lets say i have [ database and app ] containers assigned to group app1 - how can I ensure that the database container comes up first before the app container ? [...] Does Lazytainer automatically look for the 'depends_on' in docker compose

I actually don't know. I'd be curious to see how that is handled. If you get to test it, please let me know, otherwise I'll test it eventually.

Would it possible for you to add a diagram of how Lazytainer works

Probably.

Is there a way to tell Lazytainer to not spin up any containers for requests from specific containers / ipaddresses / etc?

I don't think so. Someone smarter than me could probably hack it, but it require a ton of extra code compared to what is there currently. If you want to create a PR for it, I'd be happy to approve it, but it's unlikely I'll write it myself.

I think it may be useful to add another detailed example file with multiple containers showing examples of how to configure these ordering / dependencies among containers, along with combination of app+db to be up/down together,

I agree. Once we determine what this behavior looks like I'd be happy to go in and add an example that uses it.

Thanks for the reply @vmorganp ! Will give Lazytainer a spin over the coming weeks and see how I go.

another question @vmorganp - based on this reddit link

This implies that you need to run one instance of lazytainer for each container listening to a port, correct?

Is this still the case ? From the recent examples, I assume one Lazytainer container can be used to up/down multiple different containers, as long as there is a group based separation / relation configured ?

another question @vmorganp - based on this reddit link

This implies that you need to run one instance of lazytainer for each container listening to a port, correct?

Is this still the case ? From the recent examples, I assume one Lazytainer container can be used to up/down multiple different containers, as long as there is a group based separation / relation configured ?

Correct.

I just did a quick experiment with the depends_on attribute, and it looks like if you had an app and a database container, they would come up in a healthy way, assuming same group and proper depends ons and whatnot. I'll see about getting a documented example. Is there a particular service you would like for me to do that with?

Thank you for checking it out ! Its great news that its working in a healthy way.
For examples - I was asking this question with mariadb and n8n in mind. Though any combination of app and db where db comes up first on wake up should be following the same.

I am trying to get started with a simple example but it looks like I am missing something either network related or ports related, as I am unable to get the requests to reach Lazytainer container.
I do notice in lazytainer logs that the labels are getting picked up, and lazytainer is also able to stop the container after the configured time (lazytainer logs below).
I have also managed to get it working with containernursery - able to reach the dozzle application ui.
Where as with Lazytainer - The request is failing when caddy seem to be attempting to send to lazytainer.
Am I missing something with ports / networking ? Keen to get this working with Lazytainer, so any suggestions is appreciated.
The error I see in caddy logs is -
ERR ts=1694201011.88857 logger=http.log.error msg=dial tcp <IP_ADDRESS>:80: connect: connection refused request={"remote_ip":"<IP_ADDRESS>","remote_port":"54120","client_ip":"<IP_ADDRESS>","proto":"HTTP/2.0","method":"GET","host":"logs.local.host","uri":"/","headers":{"Accept-Language":["en-US,en;q=0.5"],"Sec-Ch-Ua-Mobile":["?0"],"Te":["trailers"],"User-Agent":["Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/<IP_ADDRESS> Safari/537.36 Edg/114.0.1788.0  uacq"],"Upgrade-Insecure-Requests":["1"],"Sec-Fetch-Site":["same-site"],"Sec-Fetch-User":["?1"],"Sec-Ch-Ua":["\"Edge\";v=\"114\", \"Chromium\";v=\"114\", \"Not=A?Brand\";v=\"24\""],"If-None-Match":["W/\"c10-rb1ovmNRTTLgreSYuaLTCwfLARY\""],"Accept":["text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8"],"Dnt":["1"],"Sec-Fetch-Dest":["document"],"Sec-Fetch-Mode":["navigate"],"Sec-Ch-Ua-Platform":["\"macOS\""],"Accept-Encoding":["gzip, deflate, br"]},"tls":{"resumed":false,"version":772,"cipher_suite":4865,"proto":"h2","server_name":"homer.local.host"}} duration=0.001106202 status=502 err_id=jy7a5qmir err_trace=reverseproxy.statusError (reverseproxy.go:1248)

The set up is -
browser -> caddy (self signed certs) -> lazytainer -> dozzle

OR

browser -> caddy (self signed certs) -> containernursery -> dozzle

Here is my docker compose -
version: "3.4"

services:

  caddy:
    image: lucaslorentz/caddy-docker-proxy:latest
    container_name: caddy
    restart: always
    environment:
      - CADDY_INGRESS_NETWORKS=default
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - /certs:/certs
    ports:
      - 80:80
      - 443:443
      - 443:443/udp

  lazytainer:
    image: ghcr.io/vmorganp/lazytainer:latest
    container_name: lazytainer
    restart: always
    environment:
      - VERBOSE=false
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
    ports:
      - 80
    labels:
      caddy: lazytainer.local.host
      caddy.reverse_proxy: "lazytainer"
      caddy.tls: "/certs/cert.pem /certs/certkey.pem"
      lazytainer.group.dozzle.ports: 8080
      lazytainer.group.dozzle.inactiveTimeout: 180
      lazytainer.group.dozzle.minPacketThreshold: 1

  containernursery:
    image: ghcr.io/itsecholot/containernursery:latest
    container_name: containernursery
    restart: always
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - ${pwd}/cn/:/usr/src/app/config
    ports:
      - 80
    labels:
      caddy: containernursery.local.host
      caddy.reverse_proxy: "containernursery"
      caddy.tls: "/certs/cert.pem /certs/certkey.pem"
    depends_on:
      - caddy

  dozzle:
    image: amir20/dozzle:latest
    container_name: dozzle
    restart: always
    environment:
      - DOZZLE_NO_ANALYTICS=true
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
    ports:
      - 8080
    labels:
      caddy: logs.local.host
      caddy.reverse_proxy: "lazytainer"
      # caddy.reverse_proxy: "containernursery"
      caddy.tls: "/certs/cert.pem /certs/certkey.pem"
      lazytainer.group: dozzle

Lazytainer logs -
30 / 180 seconds without an active client or sufficient traffic on running container
60 / 180 seconds without an active client or sufficient traffic on running container
90 / 180 seconds without an active client or sufficient traffic on running container
120 / 180 seconds without an active client or sufficient traffic on running container
150 / 180 seconds without an active client or sufficient traffic on running container
180 / 180 seconds without an active client or sufficient traffic on running container
INFO: 2023/09/08 19:58:15 group.go:90: stopped container  /dozzle

Container nursery is currently integrating with caddy, with caddy acting as your proxy.
Lazytainer is it's own proxy (doesn't currently integrate with others, like traefik, caddy, nginx, etc...)
This isn't working because your network_mode on your target container (dozzle) should be set to service:lazytainer

thanks for the reply @vmorganp - that makes so much sense now, after spending a bunch of time thinking something was wrong with  my compose file.
Are there any plans to make lazytainer work with other proxies in future ?
That would allow for utilizing all the benefits of having a reverse proxy (for what a reverse proxy is good at) and then allow lazytainer as a "resource manager" of sorts to help keep system resource utilization to lower levels.

Any plans to make lazytainer work with other proxies

unlikely that I'll write it, but I'd approve a PR


add error module (fixes #95)

Coverage increased (+0.1%) to 91.784% when pulling 375a27865eaf3db58e02ffa41deeb7ac7ca2bd7c on error-mod-95 into 722def8b2c6150632f0e05a48b5819848429dbaa on master.

Coverage increased (+0.1%) to 91.784% when pulling 375a27865eaf3db58e02ffa41deeb7ac7ca2bd7c on error-mod-95 into 722def8b2c6150632f0e05a48b5819848429dbaa on master.

Coverage increased (+0.1%) to 91.784% when pulling 2ddae226083b5e7c3bea92c56337cc644ed3eaae on error-mod-95 into 722def8b2c6150632f0e05a48b5819848429dbaa on master.

Coverage decreased (-0.02%) to 91.633% when pulling 6d710b502f6c775225f9efccb11a5a11c2b20dc7 on error-mod-95 into 722def8b2c6150632f0e05a48b5819848429dbaa on master.

Coverage decreased (-0.02%) to 91.633% when pulling 6d710b502f6c775225f9efccb11a5a11c2b20dc7 on error-mod-95 into 722def8b2c6150632f0e05a48b5819848429dbaa on master.

Coverage decreased (-0.02%) to 91.633% when pulling 6d710b502f6c775225f9efccb11a5a11c2b20dc7 on error-mod-95 into 722def8b2c6150632f0e05a48b5819848429dbaa on master.

Coverage decreased (-0.02%) to 91.633% when pulling b0e85833f1f17091b9b654f10b611abaeedf1c39 on error-mod-95 into 722def8b2c6150632f0e05a48b5819848429dbaa on master.

Coverage decreased (-0.2%) to 91.481% when pulling 640910b89af20221b3f03082b8a3c76f860db872 on error-mod-95 into 722def8b2c6150632f0e05a48b5819848429dbaa on master.


MessageReceiverState Error : Not receiving events from some partitions

Package Name: azure-eventhub
Package Version: 5.12.0
Package Name: azure-eventhub-checkpointstoreblob-aio
Package Version: 1.1.4
Operating System: Linux
Python Version: 3.9.1

Describe the bug
I have a Evenethub consumer client that streams data into a snowflake table running inside an azure container instance . The Eventhub has 6 partitions which the consumer client can fetch events from  when started.
However after a couple of hours , the client stops receiving events from one or more partitions .
When the container is manually restarted  the client is bale to claim ownership of those partitions again and the stream is resumed .
To Reproduce
Steps to reproduce the behavior:

I am using boilerplate code from the documentation with a little modification to process and insert events into snowflake

Expected behavior
continue to receive events from all partitions
LOGS
INFO:__main__:Received events from partition: 1
INFO:uamqp.c_uamqp:CBS error occurred on connection b'EHReceiver-xxxxxxxxxxx-partition0'.
INFO:uamqp.receiver:Receiver link failed to open - expecting to receive DETACH frame.
INFO:uamqp.connection:Connection b'EHReceiver-xxxxxxxxxxx-partition0' state changed from <ConnectionState.OPENED: 9> to <ConnectionState.CLOSE_RCVD: 10>
INFO:uamqp.receiver:Message receiver b'receiver-link-734198d4-db38-4768-877f-71d72b919bd7' state changed from <MessageReceiverState.Error: 5> to <MessageReceiverState.Error: 5> on connection: b'EHReceiver-xxxxxxxxxxx-partition0'
INFO:uamqp.connection:Connection b'EHReceiver-xxxxxxxxxxx-partition0' state changed from <ConnectionState.CLOSE_RCVD: 10> to <ConnectionState.END: 13>
INFO:uamqp.receiver:Message receiver b'receiver-link-734198d4-db38-4768-877f-71d72b919bd7' state changed from <MessageReceiverState.Error: 5> to <MessageReceiverState.Error: 5> on connection: b'EHReceiver-xxxxxxxxxxx-partition0'
INFO:uamqp.connection:Received Connection close event: b'amqp:connection:forced'
Connection: b'EHReceiver-xxxxxxxxxxx-partition0'
Description: b"The connection was closed by container 'af980dee699c43f3a9d903a9fcd72432_G4' because it did not have any active links in the past 60000 milliseconds. TrackingId:af980dee699c43f3a9d903a9fcd72432_G4, SystemTracker:gateway5, Timestamp:2024-06-06T09:00:42"
Details: None
INFO:uamqp.c_uamqp:b'SSL channel closed in decode_ssl_received_bytes.' (b'/project/src/vendor/azure-uamqp-c/deps/azure-c-shared-utility/adapters/tlsio_openssl.c':b'decode_ssl_received_bytes':886)
INFO:uamqp.c_uamqp:b'Error callback received in unexpected state' (b'/project/src/vendor/azure-uamqp-c/src/saslclientio.c':b'on_underlying_io_error':243)
INFO:uamqp.c_uamqp:b'Error in decode_ssl_received_bytes.' (b'/project/src/vendor/azure-uamqp-c/deps/azure-c-shared-utility/adapters/tlsio_openssl.c':b'on_underlying_io_bytes_received':935)

INFO:uamqp.async_ops.connection_async:Shutting down connection b'EHReceiver-xxxxxxxxxxx-partition0'.
INFO:uamqp.authentication.cbs_auth_async:Shutting down CBS session on connection: b'EHReceiver-xxxxxxxxxxx-partition0'.
INFO:uamqp.authentication.cbs_auth_async:Auth closed, destroying session on connection: b'EHReceiver-xxxxxxxxxxx-partition0'.
INFO:uamqp.authentication.cbs_auth_async:Finished shutting down CBS session on connection: b'EHReceiver-xxxxxxxxxxx-partition0'.
INFO:uamqp.c_uamqp:b'send called while not open' (b'/project/src/vendor/azure-uamqp-c/src/saslclientio.c':b'saslclientio_send_async':1181)
INFO:uamqp.c_uamqp:b'Cannot send encoded bytes' (b'/project/src/vendor/azure-uamqp-c/src/connection.c':b'on_bytes_encoded':268)
INFO:uamqp.c_uamqp:b'saslclientio_close called while not open' (b'/project/src/vendor/azure-uamqp-c/src/saslclientio.c':b'saslclientio_close_async':1130)
INFO:uamqp.c_uamqp:b'xio_close failed' (b'/project/src/vendor/azure-uamqp-c/src/connection.c':b'on_bytes_encoded':272)
INFO:uamqp.connection:Connection b'EHReceiver-xxxxxxxxxxx-partition0' state changed from <ConnectionState.END: 13> to <ConnectionState.END: 13>
INFO:uamqp.connection:Connection b'EHReceiver-xxxxxxxxxxx-partition0' state changed from <ConnectionState.END: 13> to <ConnectionState.END: 13>
INFO:uamqp.c_uamqp:b'saslclientio_close called while not open' (b'/project/src/vendor/azure-uamqp-c/src/saslclientio.c':b'saslclientio_close_async':1130)
INFO:uamqp.c_uamqp:b'xio_close failed' (b'/project/src/vendor/azure-uamqp-c/src/connection.c':b'connection_close':1437)
INFO:uamqp.async_ops.connection_async:Connection shutdown complete b'EHReceiver-xxxxxxxxxxx-partition0'.
INFO:uamqp.connection:Connection b'EHReceiver-xxxxxxxxxxx-partition0' state changed from <ConnectionState.START: 0> to <ConnectionState.START: 0>
INFO:uamqp.connection:Connection b'EHReceiver-xxxxxxxxxxx-partition0' state changed from <ConnectionState.START: 0> to <ConnectionState.START: 0>
Received events from partition: 5
INFO:__main__:Received events from partition: 5
Received events from partition: 3
INFO:__main__:Received events from partition: 3

INFO:uamqp.async_ops.client_async:Keeping 'ReceiveClientAsync' connection alive. b'EHReceiver-xxxxxxxxxxx-partition0'
INFO:uamqp.connection:Connection b'EHReceiver-xxxxxxxxxxx-partition0' state changed from <ConnectionState.START: 0> to <ConnectionState.END: 13>
INFO:uamqp.connection:Connection with ID b'EHReceiver-xxxxxxxxxxx-partition0' unexpectedly in an error state. Closing: False, Error: None
INFO:uamqp.c_uamqp:b'AMQP management instance not open' (b'/project/src/vendor/azure-uamqp-c/src/amqp_management.c':b'amqp_management_close':1061)
INFO:uamqp.c_uamqp:CBS for connection b'EHReceiver-xxxxxxxxxxx-partition0' completed opening with status: 2
WARNING:uamqp.async_ops.connection_async:ConnectionClose('ErrorCodes.UnknownError: Connection in an unexpected error state.')
INFO:uamqp.async_ops.client_async:Connection keep-alive for 'ReceiveClientAsync' failed: ConnectionClose('ErrorCodes.UnknownError: Connection in an unexpected error state.').
INFO:uamqp.receiver:Message receiver b'receiver-link-4e45327d-1d30-465b-bae4-ff5816f2331f' state changed from <MessageReceiverState.Idle: 1> to <MessageReceiverState.Opening: 2> on connection: b'EHReceiver-xxxxxxxxxxx-partition0'
INFO:uamqp.receiver:Receiver link failed to open - expecting to receive DETACH frame.
WARNING:uamqp.async_ops.connection_async:ConnectionClose('ErrorCodes.UnknownError: Connection in an unexpected error state.')
INFO:uamqp.async_ops.client_async:CBS session pending b'EHReceiver-xxxxxxxxxxx-partition0'.
INFO:uamqp.async_ops.client_async:Closing exclusive connection b'EHReceiver-xxxxxxxxxxx-partition0'.
Received events from partition: 5
INFO:__main__:Received events from partition: 5
Received events from partition: 1
INFO:__main__:Received events from partition: 1
INFO:uamqp.async_ops.connection_async:Shutting down connection b'EHReceiver-xxxxxxxxxxx-partition0'.
INFO:uamqp.authentication.cbs_auth_async:Shutting down CBS session on connection: b'EHReceiver-xxxxxxxxxxx-partition0'.
INFO:uamqp.c_uamqp:Token put complete with result: 2, status: 0, description: b'CBS Session closed.', connection: b'EHReceiver-xxxxxxxxxxx-partition0'
INFO:uamqp.authentication.cbs_auth_async:Auth closed, destroying session on connection: b'EHReceiver-xxxxxxxxxxx-partition0'.
INFO:uamqp.authentication.cbs_auth_async:Finished shutting down CBS session on connection: b'EHReceiver-xxxxxxxxxxx-partition0'.
INFO:uamqp.c_uamqp:b'send called while not open' (b'/project/src/vendor/azure-uamqp-c/src/saslclientio.c':b'saslclientio_send_async':1181)
INFO:uamqp.c_uamqp:b'Cannot send encoded bytes' (b'/project/src/vendor/azure-uamqp-c/src/connection.c':b'on_bytes_encoded':268)
INFO:uamqp.c_uamqp:b'saslclientio_close called while not open' (b'/project/src/vendor/azure-uamqp-c/src/saslclientio.c':b'saslclientio_close_async':1130)
INFO:uamqp.c_uamqp:b'xio_close failed' (b'/project/src/vendor/azure-uamqp-c/src/connection.c':b'on_bytes_encoded':272)
INFO:uamqp.connection:Connection b'EHReceiver-xxxxxxxxxxx-partition0' state changed from <ConnectionState.END: 13> to <ConnectionState.END: 13>
INFO:uamqp.connection:Connection b'EHReceiver-xxxxxxxxxxx-partition0' state changed from <ConnectionState.END: 13> to <ConnectionState.END: 13>
INFO:uamqp.c_uamqp:b'saslclientio_close called while not open' (b'/project/src/vendor/azure-uamqp-c/src/saslclientio.c':b'saslclientio_close_async':1130)
INFO:uamqp.c_uamqp:b'xio_close failed' (b'/project/src/vendor/azure-uamqp-c/src/connection.c':b'connection_close':1437)
INFO:uamqp.async_ops.connection_async:Connection shutdown complete b'EHReceiver-xxxxxxxxxxx-partition0'.

Additional context
using uamqp_transport=True

Thank you for the feedback @Benniah. A few questions for you

From this log line because it did not have any active links in the past 60000 milliseconds it seems that something is blocking the creation of links after opening a connection. Are there any processes running or is the container running out of resources?
Does this error happen when you pass in uamqp_transport=False

Hi @kashifkhan  ,

Based on the Azure container Instance resource monitor , resources do not seem constrained .
Regarding processes , we do have an async task to process events before inserting into snowflake.
I will give uamqp_transport=False a try and let you know

@Benniah based on #2 , is it possible if that task is slowing down things enough that there is a delay on the network?

HI @kashifkhan ,
here are a couple of changes i made recently and observations i made about the event stream .

increased container memory size to 8 although previous size of 4 was not an issue
using uamqp_transport=False

**OBSERVATIONS**

- we are now receiving far less events than what was set for prefetch(50000) and max_batch_size(25000) . With uamqp_transport=True , this was not an issue and we got  huge batches of data .
- There is a new error but it seems to recover right after

**LOGS**
INFO:__main__:Processed batch in 2.49 seconds
Received events from partition: 3
INFO:__main__:Received events from partition: 3
Loaded 4 records into Snowflake
INFO:__main__:Loaded 4 records into Snowflake
INFO:azure.core.pipeline.policies.http_logging_policy:Request URL: 'REDACTED'
Request method: 'PUT'
Request headers:
    'x-ms-encryption-algorithm': 'REDACTED'
    'x-ms-version': 'REDACTED'
    'Accept': 'application/xml'
    'x-ms-meta-offset': 'REDACTED'
    'x-ms-meta-sequencenumber': 'REDACTED'
    'x-ms-date': 'REDACTED'
    'x-ms-client-request-id': 'e0cb99ae-241e-11ef-8f55-00155d304e97'
    'User-Agent': 'azsdk-python-storage-blob/12.7.1 Python/3.9.1 (Linux-<IP_ADDRESS>-microsoft-standard-x86_64-with-glibc2.28)'
    'Authorization': 'REDACTED'
No body was attached to the request
INFO:azure.eventhub._pyamqp.aio._link_async:An error occurred when detaching the link: AMQPConnectionError('Error condition: ErrorCondition.SocketError\n Error Description: Can not read frame due to exception: [Errno 104] Connection reset by peer')
INFO:azure.eventhub._pyamqp.aio._link_async:Link state changed: <LinkState.ATTACHED: 3> -> <LinkState.DETACHED: 0>
INFO:azure.eventhub._pyamqp.aio._link_async:An error occurred when detaching the link: AMQPConnectionError('Error condition: ErrorCondition.SocketError\n Error Description: Can not read frame due to exception: [Errno 104] Connection reset by peer')
INFO:azure.eventhub._pyamqp.aio._link_async:Link state changed: <LinkState.ATTACHED: 3> -> <LinkState.DETACHED: 0>
INFO:azure.eventhub._pyamqp.aio._management_link_async:Management link receiver state changed: <LinkState.ATTACHED: 3> -> <LinkState.DETACHED: 0>
INFO:azure.eventhub._pyamqp.aio._link_async:An error occurred when detaching the link: AMQPConnectionError('Error condition: ErrorCondition.SocketError\n Error Description: Can not read frame due to exception: [Errno 104] Connection reset by peer')
INFO:azure.eventhub._pyamqp.aio._link_async:Link state changed: <LinkState.ATTACHED: 3> -> <LinkState.DETACHED: 0>
INFO:azure.eventhub._pyamqp.aio._management_link_async:Management link sender state changed: <LinkState.ATTACHED: 3> -> <LinkState.DETACHED: 0>
INFO:azure.eventhub._pyamqp.aio._session_async:An error occurred when ending the session: AMQPConnectionError('Error condition: ErrorCondition.SocketError\n Error Description: Can not read frame due to exception: [Errno 104] Connection reset by peer')
INFO:azure.eventhub._pyamqp.aio._session_async:Session state changed: <SessionState.MAPPED: 3> -> <SessionState.UNMAPPED: 0>
INFO:azure.eventhub._pyamqp.aio._connection_async:An error occurred when closing the connection: AMQPConnectionError('Error condition: ErrorCondition.SocketError\n Error Description: Can not read frame due to exception: [Errno 104] Connection reset by peer')
INFO:azure.eventhub._pyamqp.aio._connection_async:Connection state changed: <ConnectionState.OPENED: 9> -> <ConnectionState.END: 13>
Loaded 4 records into Snowflake
INFO:__main__:Loaded 4 records into Snowflake
INFO:azure.core.pipeline.policies.http_logging_policy:Request URL: 'Redacted'
INFO:__main__:Processed batch in 2.49 seconds
Received events from partition: 3
INFO:__main__:Received events from partition: 3
Loaded 4 records into Snowflake
INFO:__main__:Loaded 4 records into Snowflake
INFO:azure.core.pipeline.policies.http_logging_policy:Request URL: 'REDACTED'
Request method: 'PUT'
Request headers:
    'x-ms-encryption-algorithm': 'REDACTED'
    'x-ms-version': 'REDACTED'
    'Accept': 'application/xml'
    'x-ms-meta-offset': 'REDACTED'
    'x-ms-meta-sequencenumber': 'REDACTED'
    'x-ms-date': 'REDACTED'
    'x-ms-client-request-id': 'e0cb99ae-241e-11ef-8f55-00155d304e97'
    'User-Agent': 'azsdk-python-storage-blob/12.7.1 Python/3.9.1 (Linux-<IP_ADDRESS>-microsoft-standard-x86_64-with-glibc2.28)'
    'Authorization': 'REDACTED'
No body was attached to the request
INFO:azure.eventhub._pyamqp.aio._link_async:An error occurred when detaching the link: AMQPConnectionError('Error condition: ErrorCondition.SocketError\n Error Description: Can not read frame due to exception: [Errno 104] Connection reset by peer')
INFO:azure.eventhub._pyamqp.aio._link_async:Link state changed: <LinkState.ATTACHED: 3> -> <LinkState.DETACHED: 0>
INFO:azure.eventhub._pyamqp.aio._link_async:An error occurred when detaching the link: AMQPConnectionError('Error condition: ErrorCondition.SocketError\n Error Description: Can not read frame due to exception: [Errno 104] Connection reset by peer')
INFO:azure.eventhub._pyamqp.aio._link_async:Link state changed: <LinkState.ATTACHED: 3> -> <LinkState.DETACHED: 0>
INFO:azure.eventhub._pyamqp.aio._management_link_async:Management link receiver state changed: <LinkState.ATTACHED: 3> -> <LinkState.DETACHED: 0>
INFO:azure.eventhub._pyamqp.aio._link_async:An error occurred when detaching the link: AMQPConnectionError('Error condition: ErrorCondition.SocketError\n Error Description: Can not read frame due to exception: [Errno 104] Connection reset by peer')
INFO:azure.eventhub._pyamqp.aio._link_async:Link state changed: <LinkState.ATTACHED: 3> -> <LinkState.DETACHED: 0>
INFO:azure.eventhub._pyamqp.aio._management_link_async:Management link sender state changed: <LinkState.ATTACHED: 3> -> <LinkState.DETACHED: 0>
INFO:azure.eventhub._pyamqp.aio._session_async:An error occurred when ending the session: AMQPConnectionError('Error condition: ErrorCondition.SocketError\n Error Description: Can not read frame due to exception: [Errno 104] Connection reset by peer')
INFO:azure.eventhub._pyamqp.aio._session_async:Session state changed: <SessionState.MAPPED: 3> -> <SessionState.UNMAPPED: 0>
INFO:azure.eventhub._pyamqp.aio._connection_async:An error occurred when closing the connection: AMQPConnectionError('Error condition: ErrorCondition.SocketError\n Error Description: Can not read frame due to exception: [Errno 104] Connection reset by peer')
INFO:azure.eventhub._pyamqp.aio._connection_async:Connection state changed: <ConnectionState.OPENED: 9> -> <ConnectionState.END: 13>
Loaded 4 records into Snowflake
INFO:__main__:Loaded 4 records into Snowflake
INFO:azure.core.pipeline.policies.http_logging_policy:Request URL: 'REDACTED'
Request method: 'PUT'
Request headers:
    'x-ms-encryption-algorithm': 'REDACTED'
    'x-ms-version': 'REDACTED'
    'Accept': 'application/xml'
    'x-ms-meta-offset': 'REDACTED'
    'x-ms-meta-sequencenumber': 'REDACTED'
    'x-ms-date': 'REDACTED'
    'x-ms-client-request-id': 'e10e0db6-241e-11ef-8f55-00155d304e97'
    'User-Agent': 'azsdk-python-storage-blob/12.7.1 Python/3.9.1 (Linux-<IP_ADDRESS>-microsoft-standard-x86_64-with-glibc2.28)'
    'Authorization': 'REDACTED'
No body was attached to the request
Loaded 4 records into Snowflake
INFO:__main__:Loaded 4 records into Snowflake
INFO:azure.core.pipeline.policies.http_logging_policy:Request URL: 'REDACTED'
Request method: 'PUT'
Request headers:
    'x-ms-encryption-algorithm': 'REDACTED'
    'x-ms-version': 'REDACTED'
    'Accept': 'application/xml'
    'x-ms-meta-offset': 'REDACTED'
    'x-ms-meta-sequencenumber': 'REDACTED'
    'x-ms-date': 'REDACTED'
    'x-ms-client-request-id': 'e1518456-241e-11ef-8f55-00155d304e97'
    'User-Agent': 'azsdk-python-storage-blob/12.7.1 Python/3.9.1 (Linux-<IP_ADDRESS>-microsoft-standard-x86_64-with-glibc2.28)'
    'Authorization': 'REDACTED'
No body was attached to the request
INFO:azure.core.pipeline.policies.http_logging_policy:Response status: 200
Response headers:
    'Content-Length': '0'
    'Last-Modified': 'Thu, 06 Jun 2024 16:07:30 GMT'
    'Etag': '"0x8DC8642C4736420"'
    'Server': 'Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0'
    'x-ms-request-id': 'e9770aff-d01e-00d2-512b-b8bb46000000'
    'x-ms-client-request-id': 'e03c2a58-241e-11ef-8f55-00155d304e97'
    'x-ms-version': 'REDACTED'
    'x-ms-request-server-encrypted': 'REDACTED'
    'Date': 'Thu, 06 Jun 2024 16:07:29 GMT'
Processed batch in 3.47 seconds
INFO:__main__:Processed batch in 3.47 seconds
Received events from partition: 4
INFO:__main__:Received events from partition: 4
Loaded 4 records into Snowflake
INFO:__main__:Loaded 4 records into Snowflake
INFO:azure.core.pipeline.policies.http_logging_policy:Request URL: 'REDACTED'
Request method: 'PUT'
Request headers:
    'x-ms-encryption-algorithm': 'REDACTED'
    'x-ms-version': 'REDACTED'
    'Accept': 'application/xml'
    'x-ms-meta-offset': 'REDACTED'
    'x-ms-meta-sequencenumber': 'REDACTED'
    'x-ms-date': 'REDACTED'
    'x-ms-client-request-id': 'e19625f2-241e-11ef-8f55-00155d304e97'
    'User-Agent': 'azsdk-python-storage-blob/12.7.1 Python/3.9.1 (Linux-<IP_ADDRESS>-microsoft-standard-x86_64-with-glibc2.28)'
    'Authorization': 'REDACTED'
No body was attached to the request
INFO:azure.core.pipeline.policies.http_logging_policy:Response status: 200
Response headers:
    'Content-Length': '0'
    'Last-Modified': 'Thu, 06 Jun 2024 16:07:30 GMT'
    'Etag': '"0x8DC8642C4B26D00"'
    'Server': 'Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0'
    'x-ms-request-id': '9a7575f5-e01e-004d-5e2b-b8d52e000000'
    'x-ms-client-request-id': 'e07c6104-241e-11ef-8f55-00155d304e97'
    'x-ms-version': 'REDACTED'
    'x-ms-request-server-encrypted': 'REDACTED'
    'Date': 'Thu, 06 Jun 2024 16:07:30 GMT'
Processed batch in 2.67 seconds
INFO:__main__:Processed batch in 2.67 seconds
Received events from partition: 2
INFO:__main__:Received events from partition: 2
INFO:azure.core.pipeline.policies.http_logging_policy:Response status: 200
Response headers:
    'Content-Length': '0'
    'Last-Modified': 'Thu, 06 Jun 2024 16:07:31 GMT'
    'Etag': '"0x8DC8642C50186B9"'
    'Server': 'Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0'
    'x-ms-request-id': '72ed1b41-301e-0098-022b-b86642000000'
    'x-ms-client-request-id': 'e0cb99ae-241e-11ef-8f55-00155d304e97'
    'x-ms-version': 'REDACTED'
    'x-ms-request-server-encrypted': 'REDACTED'
    'Date': 'Thu, 06 Jun 2024 16:07:30 GMT'
Processed batch in 2.28 seconds
INFO:__main__:Processed batch in 2.28 seconds
Received events from partition: 0
INFO:__main__:Received events from partition: 0
INFO:azure.core.pipeline.policies.http_logging_policy:Response status: 200
Response headers:
REDACTED'
Request method: 'PUT'
Request headers:
    'x-ms-encryption-algorithm': 'REDACTED'
    'x-ms-version': 'REDACTED'
    'Accept': 'application/xml'
    'x-ms-meta-offset': 'REDACTED'
    'x-ms-meta-sequencenumber': 'REDACTED'
    'x-ms-date': 'REDACTED'
    'x-ms-client-request-id': 'e10e0db6-241e-11ef-8f55-00155d304e97'
    'User-Agent': 'azsdk-python-storage-blob/12.7.1 Python/3.9.1 (Linux-<IP_ADDRESS>-microsoft-standard-x86_64-with-glibc2.28)'
    'Authorization': 'REDACTED'
No body was attached to the request
Loaded 4 records into Snowflake
INFO:__main__:Loaded 4 records into Snowflake
INFO:azure.core.pipeline.policies.http_logging_policy:Request URL: 'REDACTED'
Request method: 'PUT'
Request headers:
    'x-ms-encryption-algorithm': 'REDACTED'
    'x-ms-version': 'REDACTED'
    'Accept': 'application/xml'
    'x-ms-meta-offset': 'REDACTED'
    'x-ms-meta-sequencenumber': 'REDACTED'
    'x-ms-date': 'REDACTED'
    'x-ms-client-request-id': 'e1518456-241e-11ef-8f55-00155d304e97'
    'User-Agent': 'azsdk-python-storage-blob/12.7.1 Python/3.9.1 (Linux-<IP_ADDRESS>-microsoft-standard-x86_64-with-glibc2.28)'
    'Authorization': 'REDACTED'
No body was attached to the request
INFO:azure.core.pipeline.policies.http_logging_policy:Response status: 200
Response headers:
    'Content-Length': '0'
    'Last-Modified': 'Thu, 06 Jun 2024 16:07:30 GMT'
    'Etag': '"0x8DC8642C4736420"'
    'Server': 'Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0'
    'x-ms-request-id': 'e9770aff-d01e-00d2-512b-b8bb46000000'
    'x-ms-client-request-id': 'e03c2a58-241e-11ef-8f55-00155d304e97'
    'x-ms-version': 'REDACTED'
    'x-ms-request-server-encrypted': 'REDACTED'
    'Date': 'Thu, 06 Jun 2024 16:07:29 GMT'
Processed batch in 3.47 seconds
INFO:__main__:Processed batch in 3.47 seconds
Received events from partition: 4
INFO:__main__:Received events from partition: 4
Loaded 4 records into Snowflake
INFO:__main__:Loaded 4 records into Snowflake
INFO:azure.core.pipeline.policies.http_logging_policy:Request URL: 'REDACTED'
Request method: 'PUT'
Request headers:
    'x-ms-encryption-algorithm': 'REDACTED'
    'x-ms-version': 'REDACTED'
    'Accept': 'application/xml'
    'x-ms-meta-offset': 'REDACTED'
    'x-ms-meta-sequencenumber': 'REDACTED'
    'x-ms-date': 'REDACTED'
    'x-ms-client-request-id': 'e19625f2-241e-11ef-8f55-00155d304e97'
    'User-Agent': 'azsdk-python-storage-blob/12.7.1 Python/3.9.1 (Linux-<IP_ADDRESS>-microsoft-standard-x86_64-with-glibc2.28)'
    'Authorization': 'REDACTED'
No body was attached to the request
INFO:azure.core.pipeline.policies.http_logging_policy:Response status: 200
Response headers:
    'Content-Length': '0'
    'Last-Modified': 'Thu, 06 Jun 2024 16:07:30 GMT'
    'Etag': '"0x8DC8642C4B26D00"'
    'Server': 'Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0'
    'x-ms-request-id': '9a7575f5-e01e-004d-5e2b-b8d52e000000'
    'x-ms-client-request-id': 'e07c6104-241e-11ef-8f55-00155d304e97'
    'x-ms-version': 'REDACTED'
    'x-ms-request-server-encrypted': 'REDACTED'
    'Date': 'Thu, 06 Jun 2024 16:07:30 GMT'
Processed batch in 2.67 seconds
INFO:__main__:Processed batch in 2.67 seconds
Received events from partition: 2
INFO:__main__:Received events from partition: 2
INFO:azure.core.pipeline.policies.http_logging_policy:Response status: 200
Response headers:
    'Content-Length': '0'
    'Last-Modified': 'Thu, 06 Jun 2024 16:07:31 GMT'
    'Etag': '"0x8DC8642C50186B9"'
    'Server': 'Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0'
    'x-ms-request-id': '72ed1b41-301e-0098-022b-b86642000000'
    'x-ms-client-request-id': 'e0cb99ae-241e-11ef-8f55-00155d304e97'
    'x-ms-version': 'REDACTED'
    'x-ms-request-server-encrypted': 'REDACTED'
    'Date': 'Thu, 06 Jun 2024 16:07:30 GMT'
Processed batch in 2.28 seconds
INFO:__main__:Processed batch in 2.28 seconds
Received events from partition: 0
INFO:__main__:Received events from partition: 0
INFO:azure.core.pipeline.policies.http_logging_policy:Response status: 200
Response headers:

Hi @kashifkhan ,
I made a few changes to the client and got rid of that async task that was preprocessing events and i think you are right about it interfering with the network somehow . I just started a fresh data stream that has been running for a while now with no issues .
I have a dashboard to track the lag from each partition in snowflake .
I will monitor this over the weekend . hopefully nothing changes .

Thank you for the update @Benniah . If we get this issue resolved, I'm still interested in the odd behavior when you went to uamqp_transport=False, if its not a bother would you be able to share some detail logs, Ill send you the code on how to instrument.

Hi @kashifkhan ,
So the event stream run fine over the weekend until today when i noticed i slight lag in one partition . After taking a look at the logs , i found the following which seems to be connection related :
INFO:uamqp.async_ops.connection_async:Shutting down connection b'EHReceiver-xxxxxxxx-partition0'.
INFO:uamqp.authentication.cbs_auth_async:Shutting down CBS session on connection: b'EHReceiver-xxxxxxxx-partition0'.
INFO:uamqp.c_uamqp:Token put complete with result: 2, status: 0, description: b'CBS Session closed.', connection: b'EHReceiver-xxxxxxxx-partition0'
INFO:uamqp.c_uamqp:CBS for connection b'EHReceiver-xxxxxxxx-partition0' completed opening with status: 3
INFO:uamqp.authentication.cbs_auth_async:Auth closed, destroying session on connection: b'EHReceiver-xxxxxxxx-partition0'.
INFO:uamqp.authentication.cbs_auth_async:Finished shutting down CBS session on connection: b'EHReceiver-xxxxxxxx-partition0''.
INFO:uamqp.c_uamqp:b'send called while not open' (b'/project/src/vendor/azure-uamqp-c/src/saslclientio.c':b'saslclientio_send_async':1181)
INFO:uamqp.c_uamqp:b'Cannot send encoded bytes' (b'/project/src/vendor/azure-uamqp-c/src/connection.c':b'on_bytes_encoded':268)
INFO:uamqp.connection:Connection b'EHReceiver-xxxxxxxx-partition0' state changed from <ConnectionState.START: 0> to <ConnectionState.END: 13>
INFO:uamqp.connection:Connection b'EHReceiver-xxxxxxxx-partition0' state changed from <ConnectionState.END: 13> to <ConnectionState.END: 13>
INFO:uamqp.c_uamqp:b'saslclientio_close called while not open' (b'/project/src/vendor/azure-uamqp-c/src/saslclientio.c':b'saslclientio_close_async':1130)
INFO:uamqp.c_uamqp:b'xio_close failed' (b'/project/src/vendor/azure-uamqp-c/src/connection.c':b'connection_close':1437)
INFO:uamqp.async_ops.connection_async:Connection shutdown complete b'EHReceiver-xxxxxxxx-partition0'.
INFO:uamqp.connection:Connection b'EHReceiver-xxxxxxxx-partition0' state changed from <ConnectionState.START: 0> to <ConnectionState.START: 0>
INFO:uamqp.connection:Connection b'EHReceiver-xxxxxxxx-partition0' state changed from <ConnectionState.START: 0> to <ConnectionState.START: 0>

It goes on for a while without recovering and since this is not logged as a critical error , my on_error handler is not called . FYI restarting the container resolves the issue .

@Benniah the error logs are just saying that the connection is closed and its not able to write to that stream. Are there any signs of stuff on the network being wonky during that time ?
Would you be able to turn on debug logging to see if there is something more happening ?
import logging
import sys

handler = logging.StreamHandler(stream=sys.stdout)
logger = logging.getLogger('azure.eventhub')
logger.setLevel(logging.DEBUG)
logger.addHandler(handler)

logger2 = logging.getLogger('uamqp')
logger2.setLevel(logging.DEBUG)
logger2.addHandler(handler)

...

from azure.eventhub import EventHubConsumerClient

consumer = EventHubConsumerClient(..., logging_enable=True)

Hi @kashifkhan ,
when say 'write to that stream' are you referring to the Blobstorage checkpointing ?

Thank you for the information @Benniah

Sorry when I meant "write to the stream" I meant the socket.
Looking at the logs, this line The connection was inactive for more than the allowed 240000 milliseconds and is closed by container stands out to me. Are you seeing any pauses for that amount of time or more. This error comes from the service and is a default timeout. It could be happening if message processing is taking a lot of time leading to no activity for that period of time.
As a test could you try reducing the batch size and see if this impacts it
I also want to reproduce this on my side to have something more concrete -> is there any pattern or sequence that causes this to happen in a repeatable way?

Hi @kashifkhan ,
Yes , regarding the pauses , there are occasional data bursts which lead to extra processing time exceeding that 240000 milliseconds limit .
I have tested this code in parallel on our DEV eventhub which produces less messages and we don't experience that there . The data stream remains persistent for all partitions even with AMQP transport protocol ( the only issue i have there is that we get less events even though a higher prefetch and batch size is specified )
FYI , on DEV we have just 300-400 messages coming in whereas on PRD 30K-80K messages

@Benniah Thanks for testing out if reducing the batch size would help. One thing about prefetch and max batch size is that they dont guarantee exactly that amount will be received. The clients are designed to return back asap with as many messages as possible, so they are not waiting until that max limit is hit.
I was trying to repro this on my side and I noticed something missing from your logs
Keeping 'ReceiveClientAsync' connection alive. b'EHReceiver-021163af-6223-4422-9bd7-673e5ab3df53-partition0' - which is our keep alive functionality.
I changed my code to time.sleep(240) instead of await asyncio.sleep(240) and then was able to get the disconnection message from the service. The client was able to re-connect and resume receiving.
Is there anything during processing or any other parts that could be blocking the event loop hence stopping the background keep alive from running?

Hi  @kashifkhan ,
thanks for the info .
We do get the Keeping connection alive  LOGS as well .
Sorry for not including that section of the logs .
Connection b'EHReceiver-2de305c6-0a88-403c-998b-3ee65f647cd4-partition0' state changed from <ConnectionState.HDR_EXCH: 3> to <ConnectionState.OPEN_SENT: 7>
Connection b'EHReceiver-2de305c6-0a88-403c-998b-3ee65f647cd4-partition0' state changed from <ConnectionState.OPEN_SENT: 7> to <ConnectionState.CLOSE_RCVD: 10>
b'AMQP management instance not open' (b'/project/src/vendor/azure-uamqp-c/src/amqp_management.c':b'amqp_management_close':1061)
CBS for connection b'EHReceiver-2de305c6-0a88-403c-998b-3ee65f647cd4-partition0' completed opening with status: 2
Connection b'EHReceiver-2de305c6-0a88-403c-998b-3ee65f647cd4-partition0' state changed from <ConnectionState.CLOSE_RCVD: 10> to <ConnectionState.END: 13>
Received Connection close event: b'amqp:internal-error'
Connection: b'EHReceiver-2de305c6-0a88-403c-998b-3ee65f647cd4-partition0'
Description: b"An AMQP error occurred (condition='amqp:internal-error')."
Details: None
b'SSL channel closed in decode_ssl_received_bytes.' (b'/project/src/vendor/azure-uamqp-c/deps/azure-c-shared-utility/adapters/tlsio_openssl.c':b'decode_ssl_received_bytes':886)
b'Error callback received in unexpected state' (b'/project/src/vendor/azure-uamqp-c/src/saslclientio.c':b'on_underlying_io_error':243)
b'Error in decode_ssl_received_bytes.' (b'/project/src/vendor/azure-uamqp-c/deps/azure-c-shared-utility/adapters/tlsio_openssl.c':b'on_underlying_io_bytes_received':935)
Processed batch in 16.62 seconds
CBS session pending b'EHReceiver-2de305c6-0a88-403c-998b-3ee65f647cd4-partition0'.
Closing exclusive connection b'EHReceiver-2de305c6-0a88-403c-998b-3ee65f647cd4-partition0'.
Received events from partition: 4
Loaded 1515 records into Snowflake
Shutting down connection b'EHReceiver-2de305c6-0a88-403c-998b-3ee65f647cd4-partition0'.
Shutting down CBS session on connection: b'EHReceiver-2de305c6-0a88-403c-998b-3ee65f647cd4-partition0'.
Token put complete with result: 2, status: 0, description: b'CBS Session closed.', connection: b'EHReceiver-2de305c6-0a88-403c-998b-3ee65f647cd4-partition0'
Auth closed, destroying session on connection: b'EHReceiver-2de305c6-0a88-403c-998b-3ee65f647cd4-partition0'.
Finished shutting down CBS session on connection: b'EHReceiver-2de305c6-0a88-403c-998b-3ee65f647cd4-partition0'.
b'send called while not open' (b'/project/src/vendor/azure-uamqp-c/src/saslclientio.c':b'saslclientio_send_async':1181)
b'Cannot send encoded bytes' (b'/project/src/vendor/azure-uamqp-c/src/connection.c':b'on_bytes_encoded':268)
b'saslclientio_close called while not open' (b'/project/src/vendor/azure-uamqp-c/src/saslclientio.c':b'saslclientio_close_async':1130)
b'xio_close failed' (b'/project/src/vendor/azure-uamqp-c/src/connection.c':b'on_bytes_encoded':272)
Connection b'EHReceiver-2de305c6-0a88-403c-998b-3ee65f647cd4-partition0' state changed from <ConnectionState.END: 13> to <ConnectionState.END: 13>
Connection b'EHReceiver-2de305c6-0a88-403c-998b-3ee65f647cd4-partition0' state changed from <ConnectionState.END: 13> to <ConnectionState.END: 13>
b'saslclientio_close called while not open' (b'/project/src/vendor/azure-uamqp-c/src/saslclientio.c':b'saslclientio_close_async':1130)
b'xio_close failed' (b'/project/src/vendor/azure-uamqp-c/src/connection.c':b'connection_close':1437)
Connection shutdown complete b'EHReceiver-2de305c6-0a88-403c-998b-3ee65f647cd4-partition0'.
Processed batch in 70.43 seconds
Connection b'EHReceiver-2de305c6-0a88-403c-998b-3ee65f647cd4-partition0' state changed from <ConnectionState.START: 0> to <ConnectionState.START: 0>
Connection b'EHReceiver-2de305c6-0a88-403c-998b-3ee65f647cd4-partition0' state changed from <ConnectionState.START: 0> to <ConnectionState.START: 0>
Processed batch in 4.16 seconds
Processed batch in 41.75 seconds
Processed batch in 140.66 seconds
Processed batch in 15.61 seconds
Received events from partition: 2
Loaded 3240 records into Snowflake
Keeping 'ReceiveClientAsync' connection alive. b'EHReceiver-a82f465f-8a9e-4218-8649-a477d7a7cd2b-partition5'
Keeping 'ReceiveClientAsync' connection alive. b'EHReceiver-6f4e191a-6254-4510-9f5e-2e6beeb1e10b-partition3'
Keeping 'ReceiveClientAsync' connection alive. b'EHReceiver-8125bfc3-de7e-437f-8fcd-d4f529a327fe-partition4'
Keeping 'ReceiveClientAsync' connection alive. b'EHReceiver-38e19bdc-2037-483e-8bcb-11205e65d3bc-partition1'
Keeping 'ReceiveClientAsync' connection alive. b'EHReceiver-d7dab39c-3bf2-49c9-81d7-83c627746393-partition2'
Received events from partition: 1
Loaded 1248 records into Snowflake
Received events from partition: 4
Loaded 1149 records into Snowflake
Received events from partition: 5
Loaded 5000 records into Snowflake
Received events from partition: 3
Loaded 2526 records into Snowflake
Keeping 'ReceiveClientAsync' connection alive. b'EHReceiver-2de305c6-0a88-403c-998b-3ee65f647cd4-partition0'
Processed batch in 44.14 seconds
Received events from partition: 1
Loaded 5000 records into Snowflake
Processed batch in 54.48 seconds
Processed batch in 88.64 seconds
Received events from partition: 2
Loaded 5000 records into Snowflake
Keeping 'ReceiveClientAsync' connection alive. b'EHReceiver-d7dab39c-3bf2-49c9-81d7-83c627746393-partition2'
Keeping 'ReceiveClientAsync' connection alive. b'EHReceiver-38e19bdc-2037-483e-8bcb-11205e65d3bc-partition1'
Keeping 'ReceiveClientAsync' connection alive. b'EHReceiver-a82f465f-8a9e-4218-8649-a477d7a7cd2b-partition5'
Keeping 'ReceiveClientAsync' connection alive. b'EHReceiver-6f4e191a-6254-4510-9f5e-2e6beeb1e10b-partition3'
Keeping 'ReceiveClientAsync' connection alive. b'EHReceiver-8125bfc3-de7e-437f-8fcd-d4f529a327fe-partition4'
Keeping 'ReceiveClientAsync' connection alive. b'EHReceiver-2de305c6-0a88-403c-998b-3ee65f647cd4-partition0'
Processed batch in 52.74 seconds
Received events from partition: 5
Loaded 5000 records into Snowflake
Processed batch in 74.01 seconds
CBS authentication timeout on connection: b'EHReceiver-2de305c6-0a88-403c-998b-3ee65f647cd4-partition0'.
Processed batch in 34.56 seconds
Received events from partition: 2
Loaded 719 records into Snowflake
Processed batch in 3.45 seconds
Received events from partition: 4
Loaded 2022 records into Snowflake
Keeping 'ReceiveClientAsync' connection alive. b'EHReceiver-d7dab39c-3bf2-49c9-81d7-83c627746393-partition2'
Keeping 'ReceiveClientAsync' connection alive. b'EHReceiver-38e19bdc-2037-483e-8bcb-11205e65d3bc-partition1'
Keeping 'ReceiveClientAsync' connection alive. b'EHReceiver-a82f465f-8a9e-4218-8649-a477d7a7cd2b-partition5'
Keeping 'ReceiveClientAsync' connection alive. b'EHReceiver-6f4e191a-6254-4510-9f5e-2e6beeb1e10b-partition3'
Keeping 'ReceiveClientAsync' connection alive. b'EHReceiver-8125bfc3-de7e-437f-8fcd-d4f529a327fe-partition4'
Received events from partition: 3
Loaded 5000 records into Snowflake
Processed batch in 95.43 seconds
Received events from partition: 1
Loaded 3752 records into Snowflake
CBS session pending b'EHReceiver-2de305c6-0a88-403c-998b-3ee65f647cd4-partition0'.
Closing exclusive connection b'EHReceiver-2de305c6-0a88-403c-998b-3ee65f647cd4-partition0'.
Received events from partition: 2
Loaded 5000 records into Snowflake
Processed batch in 28.21 seconds
Shutting down connection b'EHReceiver-2de305c6-0a88-403c-998b-3ee65f647cd4-partition0'.
Shutting down CBS session on connection: b'EHReceiver-2de305c6-0a88-403c-998b-3ee65f647cd4-partition0'.
Token put complete with result: 2, status: 0, description: b'CBS Session closed.', connection: b'EHReceiver-2de305c6-0a88-403c-998b-3ee65f647cd4-partition0'
CBS for connection b'EHReceiver-2de305c6-0a88-403c-998b-3ee65f647cd4-partition0' completed opening with status: 3
Auth closed, destroying session on connection: b'EHReceiver-2de305c6-0a88-403c-998b-3ee65f647cd4-partition0'.
Finished shutting down CBS session on connection: b'EHReceiver-2de305c6-0a88-403c-998b-3ee65f647cd4-partition0'.
b'send called while not open' (b'/project/src/vendor/azure-uamqp-c/src/saslclientio.c':b'saslclientio_send_async':1181)
b'Cannot send encoded bytes' (b'/project/src/vendor/azure-uamqp-c/src/connection.c':b'on_bytes_encoded':268)
Connection b'EHReceiver-2de305c6-0a88-403c-998b-3ee65f647cd4-partition0' state changed from <ConnectionState.START: 0> to <ConnectionState.END: 13>
Connection b'EHReceiver-2de305c6-0a88-403c-998b-3ee65f647cd4-partition0' state changed from <ConnectionState.END: 13> to <ConnectionState.END: 13>
b'saslclientio_close called while not open' (b'/project/src/vendor/azure-uamqp-c/src/saslclientio.c':b'saslclientio_close_async':1130)
b'xio_close failed' (b'/project/src/vendor/azure-uamqp-c/src/connection.c':b'connection_close':1437)
Connection shutdown complete b'EHReceiver-2de305c6-0a88-403c-998b-3ee65f647cd4-partition0'.
Connection b'EHReceiver-2de305c6-0a88-403c-998b-3ee65f647cd4-partition0' state changed from <ConnectionState.START: 0> to <ConnectionState.START: 0>
Connection b'EHReceiver-2de305c6-0a88-403c-998b-3ee65f647cd4-partition0' state changed from <ConnectionState.START: 0> to <ConnectionState.START: 0>
Received events from partition: 1
Loaded 2117 records into Snowflake
Keeping 'ReceiveClientAsync' connection alive. b'EHReceiver-38e19bdc-2037-483e-8bcb-11205e65d3bc-partition1'
Keeping 'ReceiveClientAsync' connection alive. b'EHReceiver-a82f465f-8a9e-4218-8649-a477d7a7cd2b-partition5'
Keeping 'ReceiveClientAsync' connection alive. b'EHReceiver-6f4e191a-6254-4510-9f5e-2e6beeb1e10b-partition3'
Keeping 'ReceiveClientAsync' connection alive. b'EHReceiver-8125bfc3-de7e-437f-8fcd-d4f529a327fe-partition4'
Keeping 'ReceiveClientAsync' connection alive. b'EHReceiver-d7dab39c-3bf2-49c9-81d7-83c627746393-partition2'
Processed batch in 7.21 seconds
Received events from partition: 1
Loaded 5000 records into Snowflake
Processed batch in 86.23 seconds
Received events from partition: 3
Loaded 5000 records into Snowflake
Processed batch in 112.84 seconds
Received events from partition: 4
Loaded 5000 records into Snowflake
Keeping 'ReceiveClientAsync' connection alive. b'EHReceiver-2de305c6-0a88-403c-998b-3ee65f647cd4-partition0'
Processed batch in 103.67 seconds
Received events from partition: 2
Loaded 5000 records into Snowflake
Processed batch in 70.89 seconds
Received events from partition: 3
Loaded 5000 records into Snowflake
CBS authentication timeout on connection: b'EHReceiver-2de305c6-0a88-403c-998b-3ee65f647cd4-partition0'.
Keeping 'ReceiveClientAsync' connection alive. b'EHReceiver-38e19bdc-2037-483e-8bcb-11205e65d3bc-partition1'
Keeping 'ReceiveClientAsync' connection alive. b'EHReceiver-a82f465f-8a9e-4218-8649-a477d7a7cd2b-partition5'
Keeping 'ReceiveClientAsync' connection alive. b'EHReceiver-6f4e191a-6254-4510-9f5e-2e6beeb1e10b-partition3'
Keeping 'ReceiveClientAsync' connection alive. b'EHReceiver-8125bfc3-de7e-437f-8fcd-d4f529a327fe-partition4'
Keeping 'ReceiveClientAsync' connection alive. b'EHReceiver-d7dab39c-3bf2-49c9-81d7-83c627746393-partition2'
Processed batch in 244.22 seconds
Processed batch in 141.22 seconds
Received events from partition: 1
Loaded 2883 records into Snowflake
Processed batch in 118.03 seconds
Received events from partition: 4
Loaded 314 records into Snowflake
Processed batch in 86.78 seconds
Processed batch in 55.24 seconds
Received events from partition: 3
Loaded 2474 records into Snowflake
Processed batch in 14.89 seconds
Keeping 'ReceiveClientAsync' connection alive. b'EHReceiver-38e19bdc-2037-483e-8bcb-11205e65d3bc-partition1'
Keeping 'ReceiveClientAsync' connection alive. b'EHReceiver-a82f465f-8a9e-4218-8649-a477d7a7cd2b-partition5'
Keeping 'ReceiveClientAsync' connection alive. b'EHReceiver-6f4e191a-6254-4510-9f5e-2e6beeb1e10b-partition3'
Keeping 'ReceiveClientAsync' connection alive. b'EHReceiver-8125bfc3-de7e-437f-8fcd-d4f529a327fe-partition4'
Keeping 'ReceiveClientAsync' connection alive. b'EHReceiver-d7dab39c-3bf2-49c9-81d7-83c627746393-partition2'
CBS session pending b'EHReceiver-2de305c6-0a88-403c-998b-3ee65f647cd4-partition0'.
Closing exclusive connection b'EHReceiver-2de305c6-0a88-403c-998b-3ee65f647cd4-partition0'.
Received events from partition: 5
Loaded 5000 records into Snowflake
Shutting down connection b'EHReceiver-2de305c6-0a88-403c-998b-3ee65f647cd4-partition0'.
Shutting down CBS session on connection: b'EHReceiver-2de305c6-0a88-403c-998b-3ee65f647cd4-partition0'.
Token put complete with result: 2, status: 0, description: b'CBS Session closed.', connection: b'EHReceiver-2de305c6-0a88-403c-998b-3ee65f647cd4-partition0'
CBS for connection b'EHReceiver-2de305c6-0a88-403c-998b-3ee65f647cd4-partition0' completed opening with status: 3
Auth closed, destroying session on connection: b'EHReceiver-2de305c6-0a88-403c-998b-3ee65f647cd4-partition0'.
Finished shutting down CBS session on connection: b'EHReceiver-2de305c6-0a88-403c-998b-3ee65f647cd4-partition0'.
b'send called while not open' (b'/project/src/vendor/azure-uamqp-c/src/saslclientio.c':b'saslclientio_send_async':1181)
b'Cannot send encoded bytes' (b'/project/src/vendor/azure-uamqp-c/src/connection.c':b'on_bytes_encoded':268)
Connection b'EHReceiver-2de305c6-0a88-403c-998b-3ee65f647cd4-partition0' state changed from <ConnectionState.START: 0> to <ConnectionState.END: 13>
Connection b'EHReceiver-2de305c6-0a88-403c-998b-3ee65f647cd4-partition0' state changed from <ConnectionState.END: 13> to <ConnectionState.END: 13>
b'saslclientio_close called while not open' (b'/project/src/vendor/azure-uamqp-c/src/saslclientio.c':b'saslclientio_close_async':1130)
b'xio_close failed' (b'/project/src/vendor/azure-uamqp-c/src/connection.c':b'connection_close':1437)
Connection shutdown complete b'EHReceiver-2de305c6-0a88-403c-998b-3ee65f647cd4-partition0'.
Processed batch in 35.38 seconds
Connection b'EHReceiver-2de305c6-0a88-403c-998b-3ee65f647cd4-partition0' state changed from <ConnectionState.START: 0> to <ConnectionState.START: 0>
Connection b'EHReceiver-2de305c6-0a88-403c-998b-3ee65f647cd4-partition0' state changed from <ConnectionState.START: 0> to <ConnectionState.START: 0>
Received events from partition: 2
Loaded 5000 records into Snowflake
Received events from partition: 4
Loaded 5000 records into Snowflake
Keeping 'ReceiveClientAsync' connection alive. b'EHReceiver-38e19bdc-2037-483e-8bcb-11205e65d3bc-partition1'
Keeping 'ReceiveClientAsync' connection alive. b'EHReceiver-6f4e191a-6254-4510-9f5e-2e6beeb1e10b-partition3'
Keeping 'ReceiveClientAsync' connection alive. b'EHReceiver-d7dab39c-3bf2-49c9-81d7-83c627746393-partition2'
Keeping 'ReceiveClientAsync' connection alive. b'EHReceiver-8125bfc3-de7e-437f-8fcd-d4f529a327fe-partition4'
Keeping 'ReceiveClientAsync' connection alive. b'EHReceiver-a82f465f-8a9e-4218-8649-a477d7a7cd2b-partition5'
Received events from partition: 3
Loaded 1472 records into Snowflake
Processed batch in 52.12 seconds
Received events from partition: 5
Loaded 5000 records into Snowflake
Processed batch in 22.73 seconds
Received events from partition: 4
Loaded 5000 records into Snowflake
Processed batch in 31.43 seconds
Received events from partition: 3
Loaded 5000 records into Snowflake
Processed batch in 119.54 seconds
Processed batch in 61.72 seconds
Received events from partition: 2
Loaded 5000 records into Snowflake
Keeping 'ReceiveClientAsync' connection alive. b'EHReceiver-38e19bdc-2037-483e-8bcb-11205e65d3bc-partition1'
Keeping 'ReceiveClientAsync' connection alive. b'EHReceiver-d7dab39c-3bf2-49c9-81d7-83c627746393-partition2'
Keeping 'ReceiveClientAsync' connection alive. b'EHReceiver-2de305c6-0a88-403c-998b-3ee65f647cd4-partition0'
Keeping 'ReceiveClientAsync' connection alive. b'EHReceiver-8125bfc3-de7e-437f-8fcd-d4f529a327fe-partition4'
Keeping 'ReceiveClientAsync' connection alive. b'EHReceiver-a82f465f-8a9e-4218-8649-a477d7a7cd2b-partition5'
Keeping 'ReceiveClientAsync' connection alive. b'EHReceiver-6f4e191a-6254-4510-9f5e-2e6beeb1e10b-partition3'
Processed batch in 37.87 seconds
Processed batch in 14.62 seconds
Received events from partition: 3
Loaded 3528 records into Snowflake
Processed batch in 12.29 seconds
Processed batch in 6.56 seconds
Connection b'EHReceiver-2de305c6-0a88-403c-998b-3ee65f647cd4-partition0' state changed from <ConnectionState.START: 0> to <ConnectionState.HDR_SENT: 2>
Received events from partition: 1
Loaded 5000 records into Snowflake
Received events from partition: 3
Loaded 3083 records into Snowflake
Received events from partition: 2
Loaded 5000 records into Snowflake
Received events from partition: 5

Hi @Benniah , current how many receivers are set up ? Maybe having one for each partition could alleviate things
Largely from the logs ( given keep alive is going ) the service doesn't get any communication from the clients and disconnects them. It should recover and continue
Are there any network events showing up on your end ?


Dependency update

Update requirements to use newer versions of flask.
Flask forms, needed to be updated to use depreciated classes.
Fixing #370

Coverage decreased (-1.3%) to 73.049% when pulling c59607564ae1ad74e46fbc39ca097d825165f8e6 on mterzo:dep_update into ac44aefea412022c9a9b7c23d048f8e73e5ca999 on voxpupuli:master.


Add python bindings Block Model geometry type

Rename Grid2 python classes to distinguish from Grid3 classes

Is sub-block mode covered by the bindings? https://gmggroup.github.io/omf-rust/rust/omf/enum.Subblocks.html#variant.Regular.field.mode

I don't think so. I'll look at how to add that.


Table components

Creates Paragon table components that are platform agnostic and compatible with react-table.
Currently very much a work in progress.

Coverage decreased (-7.1%) to 80.715% when pulling 8b0f8a65f257547d14745abb97f5c8d7dd3f1e2b on table-components into bf7c776f01ec0ef66ca51a012df3a723d27efa37 on master.

Coverage decreased (-7.1%) to 80.715% when pulling 8b0f8a65f257547d14745abb97f5c8d7dd3f1e2b on table-components into bf7c776f01ec0ef66ca51a012df3a723d27efa37 on master.

Great work! A few minor questions and thoughts, but nothing that I think needs addressing now.
I see coverage on testing isn't meeting the threshold. If it seems like a huge effort to get the coverage up I think we can merge despite the decrease.

Great work! A few minor questions and thoughts, but nothing that I think needs addressing now.
I see coverage on testing isn't meeting the threshold. If it seems like a huge effort to get the coverage up I think we can merge despite the decrease.

:tada: This PR is included in version 12.7.0 :tada:
The release is available on:

npm package (@latest dist-tag)
GitHub release

Your semantic-release bot :package::rocket:

:tada: This PR is included in version 12.7.0 :tada:
The release is available on:

npm package (@latest dist-tag)
GitHub release

Your semantic-release bot :package::rocket:


[ci] Split out module tests/e2e

Is this a BUG REPORT or FEATURE REQUEST?:
/kind cleanup
What happened:
go.mod  is pretty crowded, mostly due to the fact that e2e tests depend on k8s.io/kubernetes. This is not just being crowded, but also makes linting and unit-testing more difficult than necessary. e.g. a plain go test starts e2e tests, making development in IDEs hard.
What you expected to happen:

go test just runs unit tests
go.mod only contains "real" dependencies
golangci-lint does not lint e2e tests by default
seamless usage of go tool and IDEs

How to reproduce it:
Anything else we need to know?:
cloud-provider-vsphere and
cloud-provider-aws also factored out an e2e module.
Environment:

openstack-cloud-controller-manager(or other related binary) version:
OpenStack version:
Others:

/kind cleanup

/assign

/hold
Let's first cut a release-1.24 branch!?


Fix Link Defaults verb not appearing on entities that lack DeviceNetwork components

About the PR
Split OnAddAlternativeSaveDeviceVerb into 3, LinkSink and LinkSource components now will make the "Link Defaults" alt verb appear.
An alternative solution to #32688, fixes the underlying issue instead of only fixing the conveyor belt.
Why / Balance
Fixes conveyors default linking by not requiring an extraneous component to be present to create the verb.
Also fixes the verb not appearing any other entity that uses LinkSink/LinkSource but not DeviceNetwork
Technical details

Adds two new event subscribers, OnAddAlternativeSinkVerb and OnAddAlternativeSourceVerb,
pulls the existing code from OnAddAlternativeSaveDeviceVerb into them
some of the conditionals are adjusted to prevent the verb appearing twice

Media

https://github.com/user-attachments/assets/6a2a773a-733e-417e-a2ad-acc5f5a9568c

Requirements

[X] I have read and am following the Pull Request and Changelog Guidelines.
[X] I have added media to this PR or it does not require an ingame showcase.

Breaking changes

No known breaking changes
Changelog

:cl:

fix: Fixed Link Defaults on conveyors, you can now mass link by alt-clicking

Mass bolting sec as malf borg will go crazy :trollface:


5.1 Feedback:  Same protocol with different name seems to have same name in the app

Overview
I uploaded multiple protocols. In one instance, I uploaded one protocol with the name Johns Hopkins, and another Johns Hopkins (1), but in the app, they populate with the same name, so I can’t tell the difference.

Current Behavior
Changing the file name does not reflect on upload.
Expected Behavior
Changed file name does reflect on upload.
Steps To Reproduce
No response
Operating system
Mac
Robot setup or anything else?
No response

The current behavior is to only show the metadata protocolName if present and completely ignore filenames.
While more complicated, I think the most intuitive solution would be:

If protocolName is unique, show it only
If protocolName is not unique, show it followed by the filename (separated by en dash or parentheses)
If there is no protocolName, fall back to the filename

Of course, you could still import protocols with the same metadata name and filename — at that point distinguishing by timestamp seems sensible though.

Expected behavior
Eds feature request #2 - @mikecardarelli

New protocol naming ticket: https://app.zenhub.com/workspaces/app--ui-5f6248dba845b000139aa767/issues/opentrons/opentrons/10175


Ys SEVEN regression, game displays white screen on boot and then black screen with white text boxes on main menu

When you boot the game it displays a pure white screen. When you get to the main menu it is a black screen with white boxes where text should be. I performed a bisect and found the problem commit to be c12cd1952cf8593f3f6064f7b785c7fc7bcf1c74
This was done in Proton using everything else frozen except for the DXVK directory.
Software information
Ys Seven, fresh install
System information

GPU: Nvidia RTX 3060TI
Driver: 515.65.01
Proton version: 7.0-4
DXVK version: e4fd5e9e8d335e8a2c0814829207cbd421f7e40e dxvk (v1.10.3)

Log files

d3d9.log:
Ys7_d3d9.log

Just fixed an hour ago hehe https://github.com/doitsujin/dxvk/commit/bfd47ec8767e7589f86ce4b54372669da2963907
But thanks for wanting to take time bisecting it anyway :+1: :slightly_smiling_face:

We just fixed that.
https://github.com/doitsujin/dxvk/commit/bfd47ec8767e7589f86ce4b54372669da2963907


Is it possible to remove the shadow around the selected tab?

It would be really cool if we could get rid of the shadow around the selected tab.
Opaque selected tab:

Transparent selected tab (for pointing out the shadow):

Firefox 133.0 (aarch64)
MacOS 15.1.1 (24B91)

Hello! @rasitayaz, it’s only achievable with custom CSS theme.
.tab-background:is([selected], [multiselected]) {
    box-shadow: none !important;
}

With the CSS theme:

thanks a bunch!


Create subfolder for 2nd version

[x] Create /viz
[x] Have a root html referring to the new version

Done in 2dae7d96a6d6da604c580765e2aca3869d473f0c


provide NDEBUG version of macro NC_CHECK which does not use code file name

Part of #1323.
Provide NDEBUG version of macro NC_CHECK which does not use code file name.

The question is: does it fix the problem?

Well I hope it will fix some of them. @sebastic can you build this branch and see how many of the warnings it clears up?

It solved the issue for nccopy & ncdump, the issues in the other files remain.


fix(cli): Fix problem with missing http(s) in endpoint flag during keptn auth

…n auth
Signed-off-by: odubajDT<EMAIL_ADDRESS>

This PR

fixes problem with missing http(s):// in --endpoint during keptn auth

Related Issues

Fixes #6013

@bacherfl or @warber can you look at this when you have time? Thanks.

@thisthat thanks for approval, can it be merged or is any action on my side needed?


Image url not being rendered in dynamic template

Issue Summary
I'm trying to send an image url into a dynamic template. I have something like this
Template:
Hello {{user}}
<img src="{{photo}}">

Node
    const message = {
      to: adminEmails,
      from<EMAIL_ADDRESS>',
      templateId: 'my template id',
      dynamic_template_data: {
         user: 'Me',
         photo: 'https://my_image_url.png'
      }
    };
    return mailer.send(message);

When the email is received, the image tag does not have the src property (it prints the user just fine), I don't know why. I need to make this with dynamic urls.
Steps to Reproduce
1 Create a transactional template with code editor
2 Create an img tag such as
3 Send an url in that variable
Not sure if this is a bug or I got lost in the docs, apologies if this is a misuse.
Technical details:

"@sendgrid/helpers": "6.3.0",
Node 10.10

I'm closing this since I had my "Don't display images" on my gmail account. I apologize. It is working as intended


Integration seems to have issues with S.M.A.R.T. enabled

Describe the issue
A clear and concise description of what the issue is.
-->When setting up  integration  with S.M.A.R.T. enabled the integration fails.
How to reproduce the issue
Enable S.M.A.R.T. in the configuration of the integration
Steps to reproduce the behavior:

Go to '...'
Click on '....'
See error

Expected behavior
Integration to connect to my OMV server
Screenshots

Software versions

Home Assistant version: HA 2023.6.1
openmediavault integration version: v1.4.1
openmediavault software version: v6.4.3-1

Diagnostics data

Traceback/Error logs
This error originated from a custom integration.
Logger: homeassistant.config_entries
Source: custom_components/openmediavault/apiparser.py:53
Integration: OpenMediaVault (documentation, issues)
First occurred: 18:31:36 (1 occurrences)
Last logged: 18:31:36
Error setting up entry NAS for openmediavault
Traceback (most recent call last):
File "/usr/src/homeassistant/homeassistant/config_entries.py", line 387, in async_setup
result = await component.async_setup_entry(hass, self)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/config/custom_components/openmediavault/init.py", line 35, in async_setup_entry
await controller.async_update()
File "/config/custom_components/openmediavault/omv_controller.py", line 184, in async_update
await self.hass.async_add_executor_job(self.get_smart)
File "/usr/local/lib/python3.11/concurrent/futures/thread.py", line 58, in run
result = self.fn(*self.args, **self.kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/config/custom_components/openmediavault/omv_controller.py", line 350, in get_smart
tmp_data = parse_api(
^^^^^^^^^^
File "/config/custom_components/openmediavault/apiparser.py", line 157, in parse_api
data = fill_vals(data, entry, uid, vals)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/config/custom_components/openmediavault/apiparser.py", line 289, in fill_vals
data[uid][_name] = from_entry(entry, _source, default=_default)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/config/custom_components/openmediavault/apiparser.py", line 53, in from_entry
ret = int(ret)
^^^^^^^^
ValueError: invalid literal for int() with base 10: '16278h+57m+13.531s'
Additional context
To resolve disable S.M.A.R.T. in the configuration of the integration and reboot homeassistant

can you check smart manually and see what kind of field is "16278h+57m+13.531s"?

Hi,
it seems to be field 240 - Head_flying_hours
[image: image.png]
On Tue, Jun 13, 2023 at 10:23 AM Tomaae @.***> wrote:

can you check smart manually and see what kind of field is
"16278h+57m+13.531s"?
—
Reply to this email directly, view it on GitHub
https://github.com/tomaae/homeassistant-openmediavault/issues/124#issuecomment-1588285744,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AQ6PQODBU3ZVGLVNYXFAPJTXK6XH3ANCNFSM6AAAAAAZDCJPII
.
You are receiving this because you authored the thread.Message ID:
@.***>


Feature/style unstyled areas

This branch adds or improves styles for some of the thus-far-left-behind areas of the extension, most prominently the color picker modals and the options page.

The extension now uses the Open Sans font. You deserve so much more than system fonts.
Entry color picker modals are now styled to match the rest of the extension. Sometimes it's just nice to belong, you know?
The extension's options now open in their own page.
The options page is now styled to match the rest of the extension. Consider it a housewarming gift.
Updates to the option page's enabled search engines are now reflected in real time. Flipping switches has never been so fun!
You can now export your current extension data as a JSON file. Be sure to print it out and frame it for maximum preparedness.

Oh, and this branch addresses issue #26!


virtualised select : How to make searchable on specific label

Hi ,
Consider i have data for options like this
ObjectCodes : [{
Id: 1002
Code: "897"
Description: "truck"
CodeDescription: "897 - truck"
},
{
Id: 1089
Code: "807"
Description: "bus"
CodeDescription: "898 - bus"
},
{
Id: 8990
Code: "342"
Description: "car"
CodeDescription: "342- car"
}]
and my virtualised select is like below in react
<VirtualizedSelect
required
options={this.props.masterData.ObjectCodes}
value={this.state.selectedObjectCode1}
labelKey="CodeDescription"
placeholder="Select Object Code 1"
onChange={selectedObjectCode1 =>
this.setState({
selectedObjectCode1,
hasErrorSelectedObjectCode1: false
})
}
searchable={true}
simpleValue
valueKey="Id"
/>
when we search for 897  then it displays all the 3 records as it will search for the entire array (whats available in options attribute), here i want to be able to give search only on lablekey (CodeDescription). How can we achieve this.
BR/Sandesh Kirani

Here is the codesandbox link : codesandbox.io/s/virtualised-select-dbl2l , here search for 89 then we see all 3 get filtered as 89 is matches with ID and Code. Here i am looking at a way that i need to enable search only on CodeDescription (i.e., what ever mentioned in labelkey attribute, search should happen only on that)