Humidifier & Fresh Air Intake Control

First I just want to say...THANK YOU. Once I got this installed and setup I was able to implement a lot of automation ideas I had in my head just around heating and A/C alone.
My 8920W is also connected to my fresh air intake and humidifier.
Are there currently any plans to implement control of these components? Is there anything I could do to assist in development of the feature?

Hi, glad I can help! Nice to hear you're getting good use out of it.
Can you tell me what you are looking to do with the humidifier and fresh air? Are you looking to set the humidifier/dehumidifier setpoints? And for fresh air, is it the 3/24 hour event that you're looking to trigger?
If those are the items, I should be able to add them, the problem is just that I don't have those components, so I can't really test. The more detail you provide the better, so that I can cross-reference with the protocol docs.

Sure - so I have an Airthings Air Quality Unit and I want to build automations using certain values.
Examples:
If CO² exceeds X value, turn on fresh air to lower levels.
If humidity exceeds X inside, and air is x drier outside, turn on fresh air.
If outdoor temp exceeds indoor temp by X, turn off fresh air.
(In either case, since there's no permanent on option for fresh air,  I'd use the 24-hour mode as a proxy and then have the automation set it to Off after reaching whatever set point.)
As I'm typing this, I realize that more of my ideas revolve around fresh air than humidity, which I usually leave on and set at a specific value anyway. It would still be nice to control though.

@ShinobiAlchemist I apologize for taking over your GitHub issue for an unrelated issue, I also have the 8920w model but have been unable to connect to it, what port did you find your thermostat on?

Yes, I do see it as a sensor. (Also my model is 8840. They look so similar haha.)
Screenshot for reference!

It seems that 8920W is not your home model. It is 8840 which has the option for Home Automation.
I have 8920W which doesn't have the home automation option. Spoke with Aprilaire customer representative.

It seems that 8920W is not your home model. It is 8840 which has the option for Home Automation.
I have 8920W which doesn't have the home automation option. Spoke with Aprilaire customer representative.

Thanks love. I did address that in my previous comment 🙂

Just pointing it out for someone who has similar setup and spent about 1 hour figuring out why some option isn't present for their Thermostat.
Make it index friendly as well :)

See the comment above!
On Wed, Mar 29, 2023, 12:13 PM Matthew FitzGerald-Chamberlain <
@.***> wrote:

Gotcha, I should be able to get those functions added. Just working on
some code quality items currently, but that shouldn't be a big lift.
For humidity, if your Aprilaire system has the humidity sensor installed,
you should see it listed as a sensor. Controlling, I should be able to do
that with the climate entity, but interestingly it only supports humidity,
not dehumidifier in the climate entity. So it might end up as a different
entity. I'll think that through.
—
Reply to this email directly, view it on GitHub
https://github.com/chamberlain2007/aprilaire-ha/issues/14#issuecomment-1488995619,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AR54WAS2LLZVAKHX5SX6H2DW6RUVFANCNFSM6AAAAAAWLJLRJQ
.
You are receiving this because you were mentioned.Message ID:
@.***>

Just pointing it out for someone who has similar setup and spent about 1 hour figuring out why some option isn't present for their Thermostat.
Make it index friendly as well :)

Good point!

Thanks for the input y'all. I did ask Aprilaire if they could provide a list of the thermostat models and their corresponding model number from the protocol, but they did not have that information. If you (or anyone) is able to get a thermostat added but the model doesn't show up on the device page, let me know with the number that is shown and I can get it added to the table.

@ShinobiAlchemist I have completed the humidity/dehumidity, fresh air and air cleaning.

Humidity will appear on the climate entity detail if supported
Dehumidity is a new service as home assistant does not yet support humidity ranges in the UI like it does with temperatures
There is a service for triggering and canceling fresh air ventilation and air cleaning

Please test this if possible with your devices by enabling Beta mode for the integration and installing the latest. https://hacs.xyz/docs/faq/beta/
I don't have humidity or air cleaning on my physical system, so while I tested against a mock server, I don't have a physical device to test those against.
Please let me know if you have a chance to test and if there are any issues. Ideally I would like to release this 1-2 weeks from now.

I wish I could test this out but the model I have doesn't support Automation but it has Humidity and air cleaning. Cheers though. Excellent progress.
I also was able to connect Google Assistant SDK + Home Assistant (Automation + Scripts) + Generic thermostat.
I'll create a config in the future and maybe you could include that as an extra link for folks having 8920W Aprilaire.

I've been running the beta since the evening I got the message:
Humidifier
I moved the humidifier slider to 35 and it changed on the unit but the app
went back to reflecting 45. After that sliding it didn't produce any
changes at all on the unit.
Fresh Air
I'm still not able to control that one.
A/C
Normal
Is there anything special you'd like me to do to help you troubleshoot?
On Tue, Apr 25, 2023, 7:30 PM Matthew FitzGerald-Chamberlain <
@.***> wrote:

@ShinobiAlchemist https://github.com/ShinobiAlchemist I have completed
the humidity/dehumidity, fresh air and air cleaning.

Humidity will appear on the climate entity detail if supported
Dehumidity is a new service as home assistant does not yet support
humidity ranges in the UI like it does with temperatures
There is a service for triggering and canceling fresh air
ventilation and air cleaning

Please test this if possible with your devices by enabling Beta mode for
the integration and installing the latest. https://hacs.xyz/docs/faq/beta/
I don't have humidity or air cleaning on my physical system, so while I
tested against a mock server, I don't have a physical device to test those
against.
Please let me know if you have a chance to test and if there are any
issues. Ideally I would like to release this 1-2 weeks from now.
—
Reply to this email directly, view it on GitHub
https://github.com/chamberlain2007/aprilaire-ha/issues/14#issuecomment-1522674371,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AR54WAVD6JKP3GIHBA76GO3XDCCDTANCNFSM6AAAAAAWLJLRJQ
.
You are receiving this because you were assigned.Message ID:
@.***>

Thanks for testing it out!

When you say "in the app" do you mean in the Aprilaire app? Are you sure that you are looking at the current humidity setpoint, and not the current humidity? Can you try using the Climate: Set humidity service directly? Are there any errors in the HA log when you do this?
For fresh air, do you see the new services in the HA developer tools? Should say Aprilaire: Trigger fresh air event and Aprilaire: Cancel fresh air event. What happens when you try to use the services?

Absolutely!
In the app meaning via Home Assistant on my phone.
Yes, where I'm looking says target humidity. The thermostat appears to
respond immediately to me moving the slider the 1st time just fine but
there seems to be a delay in HA reporting back the new status, and allowing
me to pick a different value.
The only error that I've seen happens shortly after restarting HA:
This error originated from a custom integration.
Logger: custom_components.aprilaire
Source: runner.py:179
Integration: Aprilaire (documentation, issues)
First occurred: 8:17:40 PM (1 occurrences)
Last logged: 8:17:40 PM
Received NACK for attribute 7
The humidity service works fine.
The fresh air service works fine.
Supported_features: 4125
On Sat, Apr 29, 2023, 3:44 PM Matthew FitzGerald-Chamberlain <
@.***> wrote:

Thanks for testing it out!

When you say "in the app" do you mean in the Aprilaire app? Are you
sure that you are looking at the current humidity setpoint, and not the
current humidity? Can you try using the Climate: Set humidity service
directly? Are there any errors in the HA log when you do this?
For fresh air, do you see the new services in the HA developer
tools? Should say Aprilaire: Trigger fresh air event and Aprilaire: Cancel
fresh air event. What happens when you try to use the services?

—
Reply to this email directly, view it on GitHub
https://github.com/chamberlain2007/aprilaire-ha/issues/14#issuecomment-1528888671,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AR54WAQ4QXJ5KSNWCSS4ACTXDWKTTANCNFSM6AAAAAAWLJLRJQ
.
You are receiving this because you were mentioned.Message ID:
@.***>

Will do!
On Mon, May 1, 2023, 8:57 AM Matthew FitzGerald-Chamberlain <
@.***> wrote:

Ah, thanks for that info. A close reading of their docs revealed that
setting the humidifier/dehumidifier setpoints doesn't trigger the COS for
those attributes, which is strange. I will add an explicit read when they
are changed which should work fine. Keep an eye out for a new version in
HACS in the next day or two.
—
Reply to this email directly, view it on GitHub
https://github.com/chamberlain2007/aprilaire-ha/issues/14#issuecomment-1529865621,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AR54WAQG6HKNB37PGND6BG3XD7MNVANCNFSM6AAAAAAWLJLRJQ
.
You are receiving this because you were mentioned.Message ID:
@.***>

@ShinobiAlchemist I've pushed a new beta release which you should be able to update to in HACS. Let me know if this resolves the humidity issue.
Apart from the humidity issue, is there anything else outstanding regarding this issue?

Yes the humidity issue is resolved.
The temperature output is behaving oddly though. I changed it down to 69°
and the thermostat responded correctly. However, when I changed it back up
to 75° the thermostat set at 74 and when I changed it to 76, the thermostat
set at 75.
On Mon, May 1, 2023, 5:32 PM Matthew FitzGerald-Chamberlain <
@.***> wrote:

@ShinobiAlchemist https://github.com/ShinobiAlchemist I've pushed a new
beta release which you should be able to update to in HACS. Let me know if
this resolves the humidity issue.
Apart from the humidity issue, is there anything else outstanding
regarding this issue?
—
Reply to this email directly, view it on GitHub
https://github.com/chamberlain2007/aprilaire-ha/issues/14#issuecomment-1530679164,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AR54WASUKF3BUS65IDAT5GLXEBIYBANCNFSM6AAAAAAWLJLRJQ
.
You are receiving this because you were mentioned.Message ID:
@.***>

I also noticed this morning that the target temperature section lost it's
current value and arrow buttons:
[image: image.png]
On Wed, May 3, 2023 at 7:22 AM Kadeem Hinton @.***>
wrote:

Yes the humidity issue is resolved.
The temperature output is behaving oddly though. I changed it down to 69°
and the thermostat responded correctly. However, when I changed it back up
to 75° the thermostat set at 74 and when I changed it to 76, the thermostat
set at 75.
On Mon, May 1, 2023, 5:32 PM Matthew FitzGerald-Chamberlain <
@.***> wrote:

@ShinobiAlchemist https://github.com/ShinobiAlchemist I've pushed a
new beta release which you should be able to update to in HACS. Let me know
if this resolves the humidity issue.
Apart from the humidity issue, is there anything else outstanding
regarding this issue?
—
Reply to this email directly, view it on GitHub
https://github.com/chamberlain2007/aprilaire-ha/issues/14#issuecomment-1530679164,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AR54WASUKF3BUS65IDAT5GLXEBIYBANCNFSM6AAAAAAWLJLRJQ
.
You are receiving this because you were mentioned.Message ID:
@.***>

--
Kadeem F. Hinton
@.***
This electronic message contains information generated solely for the
intended recipients. Any unauthorized interception of this message or the
use or disclosure of the information it contains may violate the law and
subject the violator to civil or criminal penalties. If you believe you
have received this message in error, please notify the sender and delete
the email immediately.

I'll check to make sure, but this is most likely due to the way that the Aprilaire protocol works with Celcius vs Fahrenheit. The protocol only accepts Celcius values with a resoluton of 0.5C, so there are values that are possible in the UI that are not possible to represent correctly. Additionally, the thermostat can modify the requested temperature to enforce deadband limitations.

@ShinobiAlchemist Good catch, that was actually a long-standing rounding error. Should be fixed in the latest beta.
Could you share the screenshot in Github? It won't come through when you email a comment. If it's not related to the humidification/fresh air work, could you please open a new issue? I'd like to get this release out the door.

It's related. I've updated the pic in the previous comment just.

Looks like in your screenshot that it is in Off mode, in which case it is correct to not show the temperature controls.

HA! Rookie mistake. In that case I think we are good to go!

Excellent! Bit more testing on my end, but expect the new version to be released in the next few days.
Thanks a ton for your help with this!

This has been deployed as version 0.6.0. Thanks again for your help!


[BD-46] docs: Form.Group example fix

Description
https://github.com/openedx/paragon/issues/1306
example is using isValid, yet the feedback text says “incorrect” (it should say “correct”)
Deploy Preview
https://deploy-preview-1315--paragon-openedx.netlify.app/components/form/form-group/
Merge Checklist

[ ] If your update includes visual changes, have they been reviewed by a designer? Send them a link to the Netlify deploy preview, if applicable.
[x] Does your change adhere to the documented style conventions?
[ ] Do any prop types have missing descriptions in the Props API tables in the documentation site (check deploy preview)?
[ ] Were your changes tested using all available themes (see theme switcher in the header of the deploy preview, under the "Settings" icon)?
[x] Were your changes tested in the example app?
[ ] Is there adequate test coverage for your changes?
[ ] Consider whether this change needs to reviewed/QA'ed for accessibility (a11y). If so, please add wittjeff and adamstankiewicz as reviewers on this PR.

Post-merge Checklist

[ ] Verify your changes were released to NPM at the expected version.
[ ] If you'd like, share your contribution in #show-and-tell.
[ ] 🎉 🙌 Celebrate! Thanks for your contribution.

@Inferato 🎉 Your pull request was merged!  Please take a moment  to answer a two question survey so we can improve your experience in the future.

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

npm package (@latest dist-tag)
GitHub release

Your semantic-release bot :package::rocket:


Document whiteList for testing in generateThemeSite script

May I suggest a small change in the Testing a theme with the build script section on the README.
Can we add:

In case a theme requires their own content, while testing, you should add your theme to the whiteList in _script/generateThemeSite.sh

I understand that we mentioned it here

If a theme demo requires its own content structure to function or if it is meant for a specialist use case, we will be more than glad to review your theme and accomodate its demo.

but it was easily missed, on how to test this while getting the theme reviewed.

That would indeed be helpful! I couldn't figure this out for my own theme and ended up posting my submission without the demo working.

Hello @rhnvrm and @gevhaz,
thank you for your feedback. In #866 I've started working on a shell script to speed up build times during reviews by building the theme site only with the reviewed theme, thus decreasing the total build time. The option whitelisting a theme is already outlined in the shell script.
However, the content of the mentioned section in the README would have to be updated accordingly as well. In this process I would highlight the possibility of whitelisting a theme as well.
However: this should not be interpreted as a carte blanche. Whitelisting should remain an exception in case the hugoBasicExample isn't suiting.

I've updated the section accordingly. See here


Improve date picker in ag-grid column filters

The Chore
Currently we date pickering in ag-grid is done by native picker of the browsers. Despite few advantages of such solution (easy handling of the mobile view, easy maintenance) it provides more potential problems:

native date picker looks differently in each browser
no easy possibility of potential enhancement - no place for error messages, tooltips etc.
view not consistent with selected theme
small sizes of buttons are more difficult for  the user to use
"popup in popup" solutions imply hard usability

It is to be considered, if better solution would be to use external library for date picker, like ie react-datepicker. Despite the overhead of the amount of code it offers quite good features: flexible api, possibility of get exactly what we need. We could get unified view of UI.
So instead current solution:

we could get IMHO better one:

Tasks

[ ] Design UX use-case
[ ] Implementation in date-range-filter and other possibly places
[ ] add use-case to the UI-toolkit library

Additional details / background info

The other weaknesses of native date pickers are:

not supportitng time picker in safari and firefox
undeterministic behaviour of displaying empty value :-(


Fix the sidebar's top-padding to fix Home button's corner radius

Before / After:

This also helps align the start of the sidebar's items, to the start/top edge of the main content area.

No longer required, seems to have been fixed some other way in https://github.com/rlaphoenix/spicetify-fluent/commit/5d299510c7de2dcc553f79ffbc1730a09f2aadcf


Current injection

Updates the current injection notebook from the version in nemos to include a section on using the basis for current injection history.

We can only actually deploy to github pages from main, but with the action here, we can check that the website builds. It will still need to be deployed locally, unfortunately.


Read Only DB accesses are not parallelized

Describe the bug
I have a multi-threaded program that needs to query the state very often. I thus use a LatestStateProvider (or HistoricalStateProvider) put under an Arc that I share across threads. As those are read-only providers, there should not be any issue with multi-threading. However, I noticed that the db access is not parallelized at all when doing this, it takes exactly the same time as if all the queries were done in series.
I compared with re-creating a state provider in each thread, and the performances were much better (actually parallelized), but it is not very convenient.
I don't know if this behaviour is intended. If it is, what would be the correct way to have a state provider sharable between threads that would actually parallelize db accesses?
Steps to reproduce

Create a ProviderFactory with a database opened using open_db_read_only.
Compare the performances between:

Create a provider let provider = Arc::new(provider_factory.latest()?);, start some threads and in each one of them query random storages on an Arc::clone of the provider.
Start some threads, and in each one of them create a provider  let provider = provider_factory.latest()?; and then query random storages on that provider.

Node logs
No response
Platform(s)
Linux (x86)
What version/commit are you on?
alpha.21
What database version are you on?
1
What type of node are you running?
Archive (default)
What prune config do you use, if any?
No response
If you've built Reth from source, provide the full command you used
No response
Code of Conduct

[X] I agree to follow the Code of Conduct

Seems like this might be belonging on alloy.

Seems like this might be belonging on alloy.

There are "providers" in reth; used for low-level interaction with the DB.
https://github.com/paradigmxyz/reth/blob/09de0ac13d99648f5662a6b15cebfacff010d0ae/crates/storage/provider/src/providers/state/latest.rs#L124-L130

Yes you need to open a separate transaction per thread via the factory's latest() method.
One transaction, even if shared across threads, will block / not give you perf improvements.

Reopening in case MDBX NOTLS affects this.


Upgrade Gradle Plugin and dependency errors in Camera2Basic

When trying to build Camera2Basic in a more up-to-date version of Android Studio, I received errors for the version of gradle and the gradle plugin. Upgrading gradle caused some build errors as the namespace requirements had changed between versions.
This patch updates those versions and fixes the namespaces in Camera2Basic so users can run the tutorial app on current versions of Android Studio.
All existing tests pass and the build successfully runs on my Google Pixel 9 Pro XL running Android 15.

Closed due to previous fix for this issue: https://github.com/android/camera-samples/pull/585


Test with dmd-nightly instead of beta

Because that's really what I wanted to do originally.
Beta are not frequent enough to be in the CI.
Also do the same thing for LDC.

Green

Why is codecov "failing". Is there a rule set that it should never go negative?

The problem is then on the PR page the PR will look red when it's actually green..

The problem is then on the PR page the PR will look red when it's actually green..

Yep. I'll see what I can do.


Feature Request - Include value from Radarr

I would like to see the value "titleSlug" from the Radarr-request added in Influx as soon as the service runs. I don't need to update the field afterwards, I simply just need the "titleSlug" value.

@source011 so added as a column correct?

Can you explain "Radarr-request added"?

@source011 so added as a column correct?

Yes as a column, sorry for not being specific.

Can you explain "Radarr-request added"?

Sorry, I meant to add the "titleSlug" from the GET-request from Radarr in to a column.

@source011 I pushed a commit to nightly. Can you test it out and verify that is what you need?


Config problem

Hello !
I'm sorry I'm rather new with node and mongodb but it seems I got a issue here :
When I'm done with everything, trying to launch indes.js doesn't seem to work. I did the whole tutorial in the readme.md but it seems that it can't connect to the redis ip. Could you help me to find a way to fix this or tell me where I made a mistake ?
Here is the thing I mentionned before :

Thank you !

Did you run the redis server?

Sevrino's comment tells you the solution, so I'm closing this issue.


fix(Tooltip): remove extra outter div

Closes #1096
Closes IBM/carbon-components-react#
{{short description}}
Changelog
New

{{new thing}}

Changed

{{change thing}}

Removed

{{removed thing}}

We have been using <></> in place of writing out React.fragment

Can someone merge? Don't have write access here


feat: check if latest runner is installed

Closes #1096
Summary of Changes
Check whether the latest matching runner version is installed. If it's not, offer to update it.

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

npm package (@latest dist-tag)
npm package (@latest dist-tag)
v0.13.0
GitHub release

Your semantic-release bot :package::rocket:


Tags section, .gitignore, config update, see descirption

Tags section moved to sidebar above the keywords section
Empty (!) /log + /temp directory added to git (ready for UNIX like systems)
Added ability to specify database port in config.local.neon

@paveljanda Good job. Could you please provide some screenshot? :-)

:+1:

Jupííí


vue-tsc error on nested ref parameters when a nested function is added in a reactive object

Vue version
2.7.14
Link to minimal reproduction
https://codesandbox.io/s/autumn-bird-4dsir9?file=/src/index.ts
Steps to reproduce
No step needed, just hover red underlined isAdult and first to see the ts(2322) error.
What is expected?
no error
What is actually happening?
Unwraping is not working as expected
System Info
No response
Any additional comments?
What is stranger is that I found that it's not related to sayHi() but I get the errors when I add any function at any level of the object me. Knowing that when I serve/build my app everything works fine and no erros whatsoever in the browser's console.

use arrow function instead.
sayHi: () => {
      console.log("Hi !");
    }


Create .npmignore

Removes travis config and tests from published package

https://github.com/sindresorhus/detect-indent/blob/master/package.json#L18-L20
cd node_modules/detect-indent/
ls
index.js license package.json readme.md

Oops! Sorry about that. Was looking at an old version in my node_modules
folder I think. Thanks
On Wed, Apr 13, 2016 at 1:22 PM, Kevin Mårtensson<EMAIL_ADDRESS>wrote:

Closed #16 https://github.com/sindresorhus/detect-indent/pull/16.
—
You are receiving this because you authored the thread.
Reply to this email directly or view it on GitHub
https://github.com/sindresorhus/detect-indent/pull/16#event-626129224

No worries :cat:


Use 'ijk as short form for i, j, k for single letter variable names and single digit positive numbers

Depends on https://github.com/PistonDevelopers/dyon/issues/294 and https://github.com/PistonDevelopers/dyon/issues/295.
Example:
// Matrix determinant.
det(A) = sum i, j, k, p, q, r {
    ε([i, j, k]) * ε([p, q, r]) * A[i][p] * A[j][q] * A[k][r] / 6
}

Could be written as:
// Matrix determinant.
det(A) = sum 'ijkpqr { ε(['ijk]) ε(['pqr]) A['ip] A['jq] A['kr] / 6 }

It makes it more readable because of syntax highlighting.
This require less typing when passing arguments to a function, such as Kronecker delta δ('ij):
// Gets a list of changed vectors, used to compute partial differentials.
deltas(v, eps) = {
    n := len(v)
    sift i n, j n { v[j] + δ('ij) eps }
}

Can also be used for single digit positive numbers:
// 3x3 matrix identity.
id3x3() = [['100]['010]['001]]

4D vectors:
z := ('001)

The first idea was to type a'ijk instead of a[i, j, k], but changed it to a['ijk] to make it more consistent with other cases. However, I am not sure this saves enough characters.
Perhaps just add the a'ijk version?
// Matrix determinant.
det(A) = sum i, j, k, p, q, r { ε([i, j, k]) ε([p, q, r]) A'ip A'jq A'kr / 6 }

I think this adds too many ways of parsing code. Want to keep the language simple.
Closing.


whitespace handling

Currently the whitespace feature of shopify liquid {%-   -%} seems like it is not supported in liquid.cr so generated artifacts have a lot of whitespace and many empty lines if  IF expressions are used within loops.

I guess you're talking about that feature : https://help.shopify.com/themes/liquid/basics/whitespace
I think it will require to update the parser : src/liquid/parser.cr

https://github.com/TechMagister/liquid.cr/pull/30


Simple.Odata.Client gets 'The required instance annotation odata.context was not found' exception after successful Patch

I am working on an ASP.Net Core 2.1 MVC website and I am using the Simple.OData.V4.Client v 5.6.2 to call an ASP.NET Core 2.2 API hosted in Azure. The API implements Microsoft.AspNetCore.OData v7.1.0
When I make a PATCH call from the client, the API correctly patches the record but when the client receives the response, I get the following error;
An unhandled exception occurred while processing the request.
ODataException: The required instance annotation 'odata.context' was not found at the beginning of a response payload.
Microsoft.OData.JsonLight.ODataJsonLightDeserializer.ReadContextUriAnnotation(ODataPayloadKind payloadKind, PropertyAndAnnotationCollector propertyAndAnnotationCollector, bool failOnMissingContextUriAnnotation)

The API is designed to return a "204 No Content" (as per https://www.odata.org guidelines) and so, of course, there is no 'odata.context' in the response payload.
I have searched Google using the error message and it seems that there should be a way to deal with this in the ODataClientSettings. However, so far I have had no luck.
I tried...
oDataClientSettings.IncludeAnnotationsInResults = false;

But that made no difference in the error.
I also tried...
oDataClientSettings.PayloadFormat = ODataPayloadFormat.Json;

Again, with no difference in the error.
Here is my Edit method that calls the PATCH API endpoint.
    [HttpPost]
    public async Task<IActionResult> Edit(EditAddressComplianceCodeViewModel editVm, string cancel)
    {
        if (!string.IsNullOrEmpty(cancel))
        {
            return RedirectToAction("Index", "AddressComplianceCodes");
        }

        if (!ModelState.IsValid) return View(editVm);

        try
        {
            var tokenSource = new CancellationTokenSource();
            var token = tokenSource.Token;

            var accessToken = await _psUtils.GetApiAccessToken(token);

            var oDataClientSettings = SetODataToken(_psUtils.GetBaseUspsReferenceApiUrl(), accessToken);
            oDataClientSettings.IncludeAnnotationsInResults = false;
            oDataClientSettings.PayloadFormat = ODataPayloadFormat.Json;

            var client = new ODataClient(oDataClientSettings);

            var response = await client.For<AddressComplianceCode>()
                .Key(editVm.Code)
                .Set(new
                {
                    editVm.Description,
                })
                .UpdateEntryAsync(token); //<-- ODataException occurs when this block of code is executed.

            _logger.LogInformation($"User ID [{User.Identity.Name}] edited the Address Compliance Code reocrd for code [{response.Code}].");

            return RedirectToAction("Index", "AddressComplianceCodes");

        }
        catch (Exception ex)
        {
            var message = $"An exception has occurred trying to edit the Address Compliance Code record for [{editVm.Code}].";
            _logger.LogError(ex, message);
            throw;
        }

    }

The expected result is that the edit would be applied to the record and the page would redirect to the list of records. The edit does get applied to the record in the database by the API, however, I get the ODataException at the point indicated in the code above. It does not hit the _logger line.
When I test the API in Postman, I get a successful 204 No Content status and an empty response body (as I would expect for a 204 response)
Any Ideas?

 I had to use...
.UpdateEntryAsync(resultRequired: false, cancellationToken: token)
... else I would get a "Named arguments cannot precede positional" error.
Thanks!


Build fixes

This fixes a number of issues with the build system. I actually implemented these back in February, but didn't get around to creating a PR until now.
Automatically set driver version from artifact version
The version of the driver was hard coded in AthenaDatabaseMetaData which causes the tests to fail when bumping the version during the release process. To fix this we create a properties file, and tell Maven to write the project version to this file. Then we load and parse the version number from this properties file.
I have tried various other solutions that involve replacing the version in the code directly, but none of them works when running the unit tests.
Rename release profile
For some reason the "release" profile is always active, which causes it to try to sign the jar file even when doing a simple mvn install. Not sure what activates it, but renaming it seems to prevent it from happening.
Only specify HTML5 javadoc in version 1.9 or higher
When building the jar in Java 8 it fails because the -html5 flag is not supported.
Move to next snapshot release
This should have been done after the last release.

That being said, It feels like the version-number thing is very complex, and something basically every project would need to solve. Is there really no better way to handle this?

The solution I have implemented here is based on the top answer to this StackOverflow post: https://stackoverflow.com/questions/3697449/retrieve-version-from-maven-pom-xml-in-code


Tests fail if assembly is strong named

I'm trying to use Coverlet against an assembly that is strong named. When running those tests on the .NET 4.6.1 target, I get many errors similar to this:
Failed   Tests.MinMax.Min_AsyncSelector_Int32_4
Error Message:
 System.TypeInitializationException : The type initializer for 'Tests.AsyncEnumerableTests' threw an exception.
---- System.IO.FileLoadException : Could not load file or assembly 'System.Linq.Async, Version=<IP_ADDRESS>, Culture=neutral, PublicKeyToken=94bc3704cddfc263' or one of its dependencies. Strong name signature could not be verified.  The assembly may have been tampered with, or it was delay signed but not fully signed with the correct private key. (Exception from HRESULT: 0x80131045)
Stack Trace:
   at Tests.AsyncEnumerableTests..ctor()
   at Tests.MinMax..ctor()
----- Inner Stack Trace -----
   at Tests.AsyncEnumerableTests..cctor()

Is there a way to make this work?

Looks like this is caused by xUnit's app domains. For dotnet test, it can be disabled with the following argument and it works: -- RunConfiguration.DisableAppDomain=true

@tonerdo maybe we should document?

The workaround I've used is to drop this app.config file into the test directory, which prevents xunit shadow copying.
If coverlet fundamentally has to change the assembly being instrumented, I don't see an alternative. But I wonder why this is necessary, as I think other coverage tools don't require this. Do they hook into the CLR's profiler APIs to rewrite IL on-the-fly instead of rewriting the assembly?

@AArnott that config file works for .NET Framework based tests, but I don't believe it is used for the .NET Core-based ones. The RunSettings/ command-line parameter I mention above does work though.

but I don't believe it is used for the .NET Core-based ones

That doesn't matter. This failure doesn't occur in .NET Core anyway because .NET Core never validates signatures on strong name assemblies. So a .NET Framework-only workaround is all that's required.

If coverlet fundamentally has to change the assembly being instrumented, I don't see an alternative. But I wonder why this is necessary, as I think other coverage tools don't require this. Do they hook into the CLR's profiler APIs to rewrite IL on-the-fly instead of rewriting the assembly?

Uh...I'm curious to know how do they do without touch asm, if you've more detail or some docs share please.

Here's one introductory link : http://blog.monstuff.com/archives/000058.html


PHP 7 on Travis-CI (re-redux)

This is a version of #7270 (which was in turn a rebased version of #7263), rebased against master, to support PHP 7.
I have tested both against a nightly version from 2 weeks ago, as well as the Coercive STH patch. The latterwhich provided me with a number of issues in the ZF2 codebase with regard to passing invalid arguments to internal functions, and the bulk of the commits in this branch address those, keeping compatibility with PHP 5 versions as well as PHP 7 nightly.
There is one issue I've found in Zend\Stdlib\ArrayUtils::filter(): apparently, PHP 7 nightly has a regression in its array_filter implementation; the third argument, which indicates whether to pass values only, keys only, or both to the composed callback, is ignored, causing one test case to fail.
Otherwise, this version should be ready to merge anytime.

Only failure on PHP 7 at this point is with Zend\Stdlib\ArrayUtils::filter(), which is due to a regression in PHP 7's array_filter() implementation, which I have reported here: https://bugs.php.net/bug.php?id=69299

This change will require some documentation:

Zend\Filter\Int is deprecated (int is a reserved keyword in PHP 7); Zend\Filter\ToInt is preferred.
Zend\I18n\Validator\Int is deprecated; Zend\I18n\Validator\IsInt is preferred.
Zend\I18n\Validator\Float is deprecated (float is a reserved keyword in PHP 7); Zend\I18n\Valdidator\IsFloat is preferred.
Zend\Db\Sql\Ddl\Column\Float is deprecated; Zend\Db\Sql\Ddl\Column\Floating is preferred.
Zend\XmlRpc\Value\String has been renamed to Zend\XmlRpc\Value\Text (string is a reserved keyword in PHP 7). This should only affect developers who are directly instantiating XML-RPC value objects, which is so uncommon as to not warrant a BC shim.

For filters and validators, if you are pulling them from the plugin managers, you will continue to be able to do so under the old names, and the new class will be resolved; if you are instantiating them directly, you will receive a deprecation notice indicating the new class to use.

all is well! As @DASPRiD has reviewed, I'll merge, and push an RC3 immediately.

So, @DASPRiD pointed out two more PHP RFCs that would affect this:

https://wiki.php.net/rfc/reserve_more_types_in_php_7
https://wiki.php.net/rfc/reserve_even_more_types_in_php_7

I found 5 more classes that will need shims for forward and backwards compat:

Zend\Form\Annotation\Object
Zend\Filter\Null
Zend\Paginator\Adapter\Null
Zend\Mail\Transport\Null

I'll work on these now. Until those are ready, I'm marking this as WIP.

:+1: Thanks!!


receive signals from *kill command and handle them

Currently we have:
sudo pkill -USR1 swhkd for pausing keystate check loop
sudo pkill -USR2 swhkd for resuming it
sudo pkill -HUP swhkd for reloading config
Todo:

[x] Also pause and resume swhks
(btw is this necessary? If yes, I've already done something with trait that can send signals by string to swhks through socket)
[x] Add another signal for pausing temporarily. By using temporarily I mean using an internal keybind (maybe something like super + shift + escape to resume swhkd when paused) This may be necessary because currently if we pause swhkd using a hotkey, there's no way for us to resume it with a swhkd hotkey.

❤

This looks good to me, I took a rough glance at it for now. Will do a proper review tomorrow morning!
@angelofallars your thoughts?

Hi @EdenQwQ if some documentation could be added to readme.md, then it would be amazing.

Hi @EdenQwQ if some documentation could be added to readme.md, then it would be amazing.

Added docs here: https://github.com/waycrate/swhkd/pull/54/commits/e6a61a92665840dd138c63558907d7b526553983


Authorization issue with SSRS 2019

Hi All, I am trying to make the Custom security sample work on SSRS 2019 environment but it is failing with the below error. I am able to Authenticate the user but Authorization is not working and user is unable to get any permissions either on Folder or Reports.
"Could not load folder contents
You are not allowed to view this folder. Contact your administrator to obtain the necessary permissions."

Adding to the above, please find environment details on which I am implementing Custom security sample.
SQL Server:- Microsoft SQL Server 2019 (RTM) - 15.0.2000.5 (X64)
SQL Server Edition:-Microsoft Corporation  Enterprise Edition
OS:- Windows Server 2019 Datacenter 10.0  (Build 17763: )
SSRS:- SQL Server Enterprise (15.0.1102.861)

were you able to solve this issue?
I have the same problem. I am able to authorize administrators by adding their names to the configuration file.
But how do I add users to the Browser role, for example? If I log as an administrator, and I use the security settings, and I try to add a user I added to the custom database to any default role, I get this message back: The user or group name 'xxxyyyy' is not recognized.

I got the same problem. I am using the custom security code, the user is registered in a db table. how to grant the user to the report server site/folder ?


Move usage of optimistic locking 'version' out of payload

Optimistic locking semantics are already built into the HTTP protocol.
Return ETag header on GET
Request:
GET /api/workitems/12

Response
200
Content-Type: application/json
ETag: "0"

{ "fields": {...}}

Update object with correct v
Request:
PUT /api/workitems/12
If-Match: "0"

{ "fields": {...}}

Response
200
Content-Type: application/json
ETag: "1"

{ "fields": {...}}

Update object with wrong v
Request:
PUT /api/workitems/12
If-Match: "0"

{ "fields": {...}}

Response
412 Precondition Failed
Content-Type: application/json

Only get body if ETag has changed
Request:
GET /api/workitems/12
If-Non-Match: "0"

Response
200
Content-Type: application/json
ETag: "1"

{ "fields": {...}}

Don't return body if ETag match
Request:
GET /api/workitems/12
If-Non-Match: "1"

Response
304
Content-Type: application/json

I have edited the description to use workitems in the URL end points.


Accessing cvat remotely via ssh tunnelling

Hi.  I have the latest (as of today) version of the code.  I have an AWS EC2 instance with CVAT installed.  I connect to it via ssh tunneling to circumvent for the time being the need to open required ports on AWS:
ssh -L 8010:localhost:8010 cvat
My docker-compose.yml file has two changes:
environment:
CVAT_HOST: XXX.XX.XX.XX <- the elastic IP of the EC2 instance
ports:
"8010:80"
When I connect to localhost:8010 on my local host,. I get a 404 Not Found (nginx/1.16.1) response from the server.
I get the same response when I try to connect to localhost:8010/admin
One question about this, is setting CVAT_HOST to the elastic IP the correct procedure?
When I do ifconfig on the server, I get an eth0 ip address which differs from the elastic IP - I tried using that as well but that also did not work.
Do I need to do something special to support connecting to CVAT via ssh tunnelling?
Any other thoughts for what could be wrong?

I resolved this by just setting ports on AWS and connecting through the elastic IP. You can close this question.


Large Grids cause 0 for diagonals

Using a Gridsize of > 2^15 for x causes the lower and upper diagonal to be zero in imaginary
and real part!

Issue resolved: Missing Kernel call!


URL-safe Base64 support

With Base64 support coming to the standard library, there probably isn't any need for us to maintain the Tuulbox support.
I'll create a PR shortly that marks Tuulbox's Base64 support as deprecated.

Marked Tuulbox's Base64 functions as deprecated via #239.

Closing as we don't plan to maintain base64 (in favor of official support).


fix: change subcategory format

Motivation
The previous subcategory format had issues where the subcategory had to be an object. This means that all subcategories' siblings all have to be subcategories. In reality it should be possible to mix non-subcategories into the same layer.
Have you read the Contributing Guidelines on pull requests?
Yes
Test Plan
Unit tests.
Example of subcategories in action:

Related PRs
#892

@endiliey I basically rewrote the whole subcategory implementation because I just realized it only allows adding subcategories at the bottom of a category. I had to change the Blog metadata format also because it was using the same <SideNav /> component.
If you get the chance please patch and test it! 😄

Yes, we'd have to add that feature in. Even if we add it in, the UX will not be ideal because the page does a full refresh and the expanded/collapsed state will be lost upon transition to new pages. Hence, I'm not that inclined on adding it. Any better ideas?

I wouldn't mind too much of getting it collapsed every time the page is opened. Remembering the state would be nice to have, but not a must IMO.


Move the exception namespace.

Q
A

Branch?
v2.0(master)

Bug fix?
No

New feature?
No

Deprecations?
No

Internal Changed?
Yes

Removed
No

Tests pass?
No

Doc pr?
No

The commit moved the Exception namespace, Moved from CatLib.Support to CatLib.Exception

Codecov Report

Merging #258 into master will not change coverage.
The diff coverage is 77.77%.

@@           Coverage Diff           @@
##           master     #258   +/-   ##
=======================================
  Coverage   90.21%   90.21%
=======================================
  Files          35       35
  Lines        2401     2401
=======================================
  Hits         2166     2166
  Misses        235      235

Impacted Files
Coverage Δ

src/CatLib.Core/Support/Arr.cs
97.48% <ø> (ø)
:arrow_up:

src/CatLib.Core/CatLib/Facade.cs
94.87% <ø> (ø)
:arrow_up:

src/CatLib.Core/Container/BindData.cs
95% <ø> (ø)
:arrow_up:

src/CatLib.Core/Support/Stream/CombineStream.cs
92.2% <ø> (ø)
:arrow_up:

src/CatLib.Core/Container/ExtendContainer.cs
69.39% <ø> (ø)
:arrow_up:

src/CatLib.Core/CatLib/Application.cs
98.07% <ø> (ø)
:arrow_up:

src/CatLib.Core/Exception/RuntimeException.cs
50% <ø> (ø)

src/CatLib.Core/Support/Extension/ExtendStream.cs
89.74% <ø> (ø)
:arrow_up:

src/CatLib.Core/EventDispatcher/EventDispatcher.cs
96.49% <ø> (ø)
:arrow_up:

src/CatLib.Core/Container/Bindable.cs
96.22% <ø> (ø)
:arrow_up:

... and 4 more

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 9268aa0...5c43ece. Read the comment docs.


minSize of CupertinoButton cannot below 44.0

Steps to Reproduce

Add a CupertinoButton to App
Set the minSize to the value below 44.0

CupertinoButton(
  minSize: 22.0,
  child: Row(
    children: <Widget>[
      Image(image: AssetImage('assets/icon_reply.webp'), width: 18.0, height: 18.0),
      child: Text(this.replyCount, style: TextStyle(fontSize: 14.0, color: Colors.black87)),
    ],
  ),
),

Run app, and we found that the CupertinoButton's height is still 44.0.

Logs

Since it's the minSize not the maxSize, I think it's working as intended.
If you want to set the height to lower than 44.0, you can do it with setting the top and bottom padding to 0 or whatever value you want to set like below
CupertinoButton(
    minSize: 22.0,
    onPressed: _incrementCounter,
    color: Colors.blue,
    padding: EdgeInsets.fromLTRB(16.0, 0.0, 16.0, 0.0),
    child: Text("Hello", style: TextStyle(fontSize: 14.0, color: Colors.white)),
),

The Cupertino button follows the guidelines of https://developer.apple.com/design/human-interface-guidelines/ios/visual-design/adaptivity-and-layout/ . Touch targets should not be smaller that 44 by 44 on iOS. We might be missing an assert here

@jonahwilliams Thanks. In some cases we need a smaller button. The guideline may not satisfy the desire.

The CupertinoButton adheres to Apple specs but in the end, it's just a glorified GestureDetector. Since Flutter is highly composable, if you look at the CupertinoButton source, it would be fairly easy to re-create a custom button type that adheres to any desired standards.


Ctrl+Right Arrow goes to end of current word, not the start of the next one.

Issue Type: Bug
Select a word. Press Ctrl+RightArrow. Cursor goes to the end of the current word. I expect it to go to the beginning of the next one.
Ctrl+Left Arrow works correctly, it always goes to the start of the previous word.
Just to be sure, I checked in NotePad and Microsoft Word. Ctrl+Right Arrow goes to the beginning of the next word.
Azure Data Studio version: azuredatastudio 1.38.0 (dff93c4736269ef2a7e8a225737a0d8354bf0246, 2022-07-26T23:56:16.217Z)
OS version: Windows_NT x64 10.0.19044
Restricted Mode: No

System Info

Item
Value

CPUs
Intel(R) Xeon(R) CPU E3-1505M v5 @ 2.80GHz (8 x 2808)

GPU Status
2d_canvas: enabledgpu_compositing: enabledmultiple_raster_threads: enabled_onoop_rasterization: enabledopengl: enabled_onrasterization: enabledskia_renderer: enabled_onvideo_decode: enabledvulkan: disabled_offwebgl: enabledwebgl2: enabled

Load (avg)
undefined

Memory (System)
31.80GB (20.91GB free)

Process Argv

Screen Reader
no

VM
57%

Extensions (9)

Extension
Author (truncated)
Version

admin-pack
Mic
0.0.2

agent
Mic
0.48.0

dacpac
Mic
1.10.1

import
Mic
1.5.0

profiler
Mic
0.11.0

query-history
Mic
0.2.1

azdata-sanddance
msr
3.3.0

sql-search
Red
0.4.1

vscodeintellicode
Vis
1.2.1

This is the default behavior, you can change it by changing your keybindings :
Default key binding :

If you clear this and instead set ctrl + right arrow to cursorWordStartRight then you should get the behavior you want.

Thank you!


Feature/local environment

What does this PR do?
Setup a local docker-environment for the gateway. It includes the /users endpoint of the auth-service as a fixture.
Gateway is accessible through port 8888, the auth service itself through 8887. The datastores are exposed through their own ports for debugging purposes.

@italolelis: You're right. I keep forgetting this is an open source thing. We need to start getting used to that =/


[PW41] Add body part regression base

Since all changes are implemented, I think we can continue with the test procedure now @surajpaib once you're back ;)

Great! Lets discuss this in person and move ahead. Working on the autoseg part soon too.

@LennyN95 What would you need for the tests? Some samples from IDC and corresponding outputs, correct?


BreakingChanges.md file for ionic v4

Hi,
Everything is perfect in BREAKING.md file but only one thing is not perfect it is small mistake made in the document i.e in overlays there is new and old Usage  example but for new Usage it should be async/await and old usage it was not there, please check that

Thanks! This is fixed now: https://github.com/ionic-team/ionic/commit/30646d8ad08be0bec41c8c32821947882fe2a58c


prevent ctr from creating tags with forbidden characters

check if the target tag that is to be created using ctr image tag is valid and does not contain any forbidden characters.
Fixes #8844

/cc @dmcgowan
There is also an alternate solution for this that I can think of as described here https://github.com/containerd/containerd/issues/8844#issuecomment-1673131683

/cc @samuelkarp

I think my preference is the alternate approach you outlined in https://github.com/containerd/containerd/issues/8844#issuecomment-1673131683; validating in the service would prevent any client from creating an invalid tag rather than just ctr.  But @dmcgowan might have a different opinion since that's arguably a breaking change.

/ok-to-test

We have intentionally not added any sort of image name validation in the image service, this should be done by clients or components interacting with the registry. The reason being that the definition of a valid tag is highly contextual. We don't need to block users from creating a tag with + and running a container with that. If a user tries to push such a tag, then the tag validation is based on what is supported by the registry.
What is the use case trying to be prevented here though? ctr is not a tool we expect end users to use, we generally don't add extra guardrails around it since users are expected to interact with CRI/Docker/Nerdctl for their use cases.

Also related (have not looked at the code in this PR yet, but the PR description caught my eye);

https://github.com/containerd/containerd/issues/7986

Isnt this defined as per the OCI spec?

It is defined for image distribution and for the layout annotations, maybe elsewhere as well. We always aim to support the super set for local image management though and our data model and API really has no limitation on what the image name could be. The expectation is that image name is enforced via build tooling, registry limitations, and what is supported via import. Tag was an operation we initially didn't allow in ctr because of the belief that images creation would be done elsewhere. With support for tagging and image creation, it is still the responsibility of the user or tool to pick the right format for how the image is intended to be used.

for that we will have to do the tagging via transfer API right, which is not enabled by default.

We could switch the default for tagging to use the transfer API

The images tagged by ctr with invalid tags cannot be seen by CRI as those tags are omitted

Maybe they don't even need to be omitted. CRI does not support push anyway. Any attempt to pull or refresh the image from a registry will not succeed though.

I am LGTM on this if we add support for --force or some other flag to get around the reference check. Also update the reference package import from #9034

Will update it. Better than --force, I think we can have a --skip-reference-check  for the tag command or common for all commands which can then be used to ignore the check.

Should we also add a proper release note as this is a breaking change for the ctr images tag command.?

Can I get another round of review on the PR? Have addressed all the comments.

@samuelkarp Can you take a look once again. I have made the changes as suggested.


Site documentation is old

Prerequisites

[X] I have searched for duplicate or closed issues
[X] I have validated any HTML to avoid common problems
[X] I have read the contributing guidelines

Describe the issue
When I google for "bootstrap flex", I am redirected to https://getbootstrap.com/docs/4.2/utilities/flex/
When I select for the newer version, why is there no V5? When I click on the "there is newer version", why am I redirected to a different site? When I click go to newer, why am I on the homepage after? Why do I need to find my doc page AGAIN? Do you guys need support on how to do this? Do you guys know how url's work?
Reduced test cases
asd
What operating system(s) are you seeing the problem on?
Windows
What browser(s) are you seeing the problem on?
No response
What version of Bootstrap are you using?
5

Thanks for reporting this issue @bcheung4589
This is known and already referenced in https://github.com/twbs/bootstrap/issues/28581
I'm closing it as duplicate

THEN FIX IT. ITS BEEN 5 YEARS!!!


LogFactory should not use TCCL when locating logging implementation: can cause NoClassDefFoundError: org/slf4j/LoggerFactory

What version of Flyway are you using?
5.0.7.
Which client are you using? (Command-line, Java API, Maven plugin, Gradle plugin, SBT plugin, ANT tasks)
Java API.
What database are you using (type & version)?
MySQL, Oracle DB, multiple versions.
What operating system are you using?
Linux, OS/X
TL;DR
org.flywaydb.core.api.logging.LogFactory uses the Thread Context Class Loader (TCCL) when discovering which logging APIs/backends are available for its own logging.  It should not do this as the TCCL is not subsequently used to load the logging-API, which is loaded as-normal by the classloader of LogFactory itself, which is not necessarily the same classloader with the same class-visibility.  This can lead to a NoClassDefFoundError: org/slf4j/LoggerFactory, especially in certain JavaEE packaging scenarios.
Problem demonstration
This problem was noticed in a real application-scenario, but can be simplified and reproduced as-follows:

Package a Java EE application as an EAR.  For simplicity it contains some common libraries (including Flyway) and a single web-application (WAR).
The web-application uses Flyway, either directly or wrapped in some other logic.  The important factor is that it is desired to deploy Flyway to some parent-classloader - either the EAR's libs, or some application-server/domain common-classloader.
The WAR file has SLF4J packaged for its own logging.
SLF4J is not deployed in the parent classloader where Flyway is deployed.

When Flyway is first classloaded, it initializes its own logging, and uses the TCCL classloader for detection of the available logging APIs (SLF4J, Apache Commons Logging), but when loading the API-wrapper e.g. Slf4jLogCreator, normal classloading is used, which is not the TCCL.  In the above scenario this will yield:
Caused by: java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory
    at org.flywaydb.core.internal.util.logging.slf4j.Slf4jLogCreator.createLogger(Slf4jLogCreator.java:27)
    at org.flywaydb.core.api.logging.LogFactory.getLog(LogFactory.java:82)
    at org.flywaydb.core.internal.util.ClassUtils.<clinit>(ClassUtils.java:37)
    at org.flywaydb.core.internal.util.FeatureDetector.isSlf4jAvailable(FeatureDetector.java:96)
    at org.flywaydb.core.api.logging.LogFactory.getLog(LogFactory.java:71)
    at org.flywaydb.core.internal.util.FeatureDetector.<clinit>(FeatureDetector.java:25)
    at org.flywaydb.core.api.logging.LogFactory.getLog(LogFactory.java:68)
    at org.flywaydb.core.Flyway.<clinit>(Flyway.java:72)
    at test.flywaydb.ContextListener.contextInitialized(ContextListener.java:26)

Code
LogFactory creates a FeatureDetector passing the TCCL as the classloader to be used in feature-tests.  Later at https://github.com/flyway/flyway/blob/master/flyway-core/src/main/java/org/flywaydb/core/api/logging/LogFactory.java#L72 a Slf4jLogCreator is instantiated directly using LogFactory's classloader, which is not necessarily the TCCL, leading to the possibility of a NCDFE.
Analysis
In a JavaEE application the TCCL will often be set to a leaf classloader e.g a WebappClassLoader with visibility of parent classloaders, and perhaps other libraries like SLF4J.  It is reasonable that Flyway might be loaded by some parent/shared classloader.  It should not use the TCCL classloaders when testing what classes it can load for itself e.g. for the purposes of obtaining a logging-API, since the TCCL may be a child classloader with classes not-visible to Flyway.  This is the case in a JavaEE deployment where FLyway is loaded by a classloader which is a parent to the TCCL e.g. an EarLibClassLoader .

Thanks for pointing out the inconsistency.
I guess we have two choices:

Load each individual LogCreator using the TCCL as well
Expose a setClassLoader(ClassLoader) on LogFactoryand use that ClassLoader both for detection and LogCreator instantiation. Default to TCCL if not set.

What do you think? Which one would you favor and why?

Thanks for the follow-up and questions.
Before deciding how the TCCL should be used - it would be useful (to me anyway) to understand why it was introduced in the first-place, especially for the logging-case.  Is there any brief write-up (other than in the following linked issues)?
History: FeatureDetector and ClassUtils.isPresent first learnt to be passed a ClassLoader in https://github.com/flyway/flyway/commit/8c800dfcb954840d52ab7c6c271e049162c301a7 and it seems issues #626 and #696 were drivers.  Before that the normal classloader was used.
I figured logging in Flyway code (and location/configuration of logging-apis) would be mostly an internal-affair, but I do notice that at one point logging was moved from the internal to public API - maybe to support extension and plugins (I'm not familiar-enough with Flyway to know)?
Note that LogCreator and all of LogFactory is static.  If it is allowed to be deployed to a shared-classloader and called by multiple applications/modules with their context-classloaders, we could end-up with a race where the first-caller to getLog brings their available logging-API.
So in-summary, I'm interested in knowing what the TCCL provides here.  Maybe it is access to resource configuration-files for the logging API that only exist in the child/context classloader.  Just seems like for something as fundamental as logging, Flyway should be self-sufficient within its own classloader.

Logging is part of the public API to allow Java migrations, custom resolvers and executors, Java callbacks, etc to use the same logging abstraction and work flawlessly across environments (API, Maven, CLI, etc).
Flyway's own ClassLoader may not be sufficient as the logging framework it loads most likely needs access to its config file which resides somewhere within your app.
I am currently leaning towards option 2. This lets users like you define initialize their classloader with what they need (this would have to be very early on ear startup) and keeps the existing behavior for everyone else.

Let me think on it a bit and maybe run a test or two.  Of course these sorts of problems only occur if Flyway is in a shared/common classloader, parent of the TCCLs.
Central to my concern is that LogFactory logCreator is static, so there is currently a potential first-caller-wins if there are multiple child applications/classloaders ... the first to call getLog will make the decision on available logging-libraries, and its classloader and classes will be loaded for logging (and retained for the life of Flyway's classloader).  Applications might make their first getLog call in a different order across different system start-ups.
If option 2, all applications would need to take great care in setting the classloader before logging is initialized ... noting that classloading Flyway triggers this.  If TCCL remains a default then any single application code-path that doesn't follow this (including any third-party libraries) would immediately invalidate the option which will be silently-ignored.
As I say I'll think on it some more, unless you are in a hurry to proceed.

Not in a hurry. I'm hoping to address this in the coming month to get it out as part of Flyway 5.1. If we miss that window, it'll be 5.2. No biggie.

Note that you can work around this in 5.0.7 by manually calling LogFactory.setLogCreator() as the first thing on ear startup.

I still wasn't 100% clear on what the required logging behaviour is, so I updated the issue with a section Desired behaviour (Flyway logging) - DRAFT.
Please review.  I'm wondering whether the requirements for the shared-classloader behaviour are too ambitions ... do we shoot for completely independent logging-configurations, or settle for first-initializer-wins?

@javabrett To be honest with you, using different logging frameworks for different wars in an ear is just asking for trouble and creating an unnecessary mess. Also this situation is very rare. I am therefore now leaning towards my suggestion 1.

The different logging-frameworks was an obtuse/general example I agree.  But won't there be also be simpler examples of logging configuration cross-wires ... if Application A is using SLF4J -> log4j and logging to a.log and Application B same but logging to b.log ... won't it be true that Flyway will log everything it does to either a.log or b.log, depending on which application initialises logging first?
That might be acceptable, but will probably best be documented.  Or is that not going to happen with the current code if Flyway is deployed to a shared/parent classloader?
I'm interested in how either option 1 or 2 are going to create the right classloading partitioning.  Maybe dynamic proxies will help.

Well let's not start solving theoretical problems here and stick to the issue at hand. Would my suggestion 1 solve your specific issue?

Loading Slf4jLogCreator (or whichever is the active LogCreator based on which API is found in the TCCL) into the TCCL (or something wrapping it) will solve the problem, since it will then go-on to load org.slf4j.LoggerFactory and the rest of the dependencies.
But given the set-up above, where Flyway is not in the direct scope of the TCCL (it is deployed into a parent classloader of the TCCL), this won't just be a matter of asking the TCCL to load that class, since it will delegate to the parent which will load it and then the NCDFE occurs.  You are likely already aware of that.
So I'm not sure what is planned - I would expect a non-trivial partitioning classloader would need to be injected to bridge between the classloaders.  Or as I say maybe there is something that can be done with dynamic proxies.
If we let the current classloader (rather than the TCCL) do the test for logging APIs, it will only find APIs that are visible to Flyway.  I would hope that in the (perhaps typical) case where Flyway and its caller are co-deployed to the same-classloader this would behave exactly as it does now.  What would change is that what is currently not-working would never work, that is, logging would never be controlled by a child classloader application, and if the deployer wanted to control Flyway logging when it is loaded in a parent, they would be responsible for supplying the logging API and configuration.

The individual logcreators are now also instantiated using the TCCL. Please build the latest sources and confirm this is now working for you.

Thanks for the update and the code-change.  I tested this with a local master build to 0-SNAPSHOT and it does not fix the problem with this type of deployment-scenario, but I also did not expect it to.
Here's the new stacktrace:
Mar 15, 2018 1:16:06 PM test.flywaydb.ContextListener contextInitialized
    SEVERE: Exception in contextInitialized
    java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory
        at org.flywaydb.core.internal.util.logging.slf4j.Slf4jLogCreator.createLogger(Slf4jLogCreator.java:27)
        at org.flywaydb.core.api.logging.LogFactory.getLog(LogFactory.java:86)
        at org.flywaydb.core.internal.util.ClassUtils.<clinit>(ClassUtils.java:37)
        at org.flywaydb.core.internal.util.FeatureDetector.isSlf4jAvailable(FeatureDetector.java:96)
        at org.flywaydb.core.api.logging.LogFactory.getLog(LogFactory.java:75)
        at org.flywaydb.core.internal.util.FeatureDetector.<clinit>(FeatureDetector.java:25)
        at org.flywaydb.core.api.logging.LogFactory.getLog(LogFactory.java:72)
        at org.flywaydb.core.Flyway.<clinit>(Flyway.java:76)
        at test.flywaydb.ContextListener.contextInitialized(ContextListener.java:29)
        at org.apache.catalina.core.StandardContext.contextListenerStart(StandardContext.java:5043)
        at com.sun.enterprise.web.WebModule.contextListenerStart(WebModule.java:592)
        at org.apache.catalina.core.StandardContext.start(StandardContext.java:5612)
        at com.sun.enterprise.web.WebModule.start(WebModule.java:540)
        at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:917)
        at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:900)
        at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:684)
        at com.sun.enterprise.web.WebContainer.loadWebModule(WebContainer.java:2044)
        at com.sun.enterprise.web.WebContainer.loadWebModule(WebContainer.java:1690)
        at com.sun.enterprise.web.WebApplication.start(WebApplication.java:107)
        at org.glassfish.internal.data.EngineRef.start(EngineRef.java:122)
        at org.glassfish.internal.data.ModuleInfo.start(ModuleInfo.java:291)
        at org.glassfish.internal.data.ApplicationInfo.start(ApplicationInfo.java:352)
        at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:500)
        at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:219)
        at org.glassfish.deployment.admin.DeployCommand.execute(DeployCommand.java:491)
        at com.sun.enterprise.v3.admin.CommandRunnerImpl$2$1.run(CommandRunnerImpl.java:540)
        at com.sun.enterprise.v3.admin.CommandRunnerImpl$2$1.run(CommandRunnerImpl.java:536)
        at java.security.AccessController.doPrivileged(Native Method)
        at javax.security.auth.Subject.doAs(Subject.java:360)
        at com.sun.enterprise.v3.admin.CommandRunnerImpl$2.execute(CommandRunnerImpl.java:535)
        at com.sun.enterprise.v3.admin.CommandRunnerImpl$3.run(CommandRunnerImpl.java:566)
        at com.sun.enterprise.v3.admin.CommandRunnerImpl$3.run(CommandRunnerImpl.java:558)
        at java.security.AccessController.doPrivileged(Native Method)
        at javax.security.auth.Subject.doAs(Subject.java:360)
        at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:557)
        at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:1465)
        at com.sun.enterprise.v3.admin.CommandRunnerImpl.access$1300(CommandRunnerImpl.java:110)
        at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1847)
        at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1723)
        at com.sun.enterprise.admin.cli.embeddable.DeployerImpl.deploy(DeployerImpl.java:133)
        at test.flywaydb.DeployTest.deploy(DeployTest.java:30)

The reason this doesn't work is because you can't just make Slf4jLogCreator et. al. be classloaded by the TCCL just by asking for that.  In the deployment scenario in this issue, Flyway is deployed to a shared/parent classloader.  So classes such as Slf4jLogCreator are not even directly visible to the TCCL (only via its parent), because I deployed Flyway libs to my EAR lib and not my WAR WEB-INF/lib.  So when the TCCL is asked to classload Slf4jLogCreator it doesn't see it in its classpath, so it delegates to its parent classloader in the normal fashion, which does have that class.  But it does not have the logger libraries in this case.  The JVM will attempt to load the dependencies of Slf4jLogCreator using the classloader which loaded that class, which is the parent classloader.
If I add a little debug output:
diff --git a/flyway-core/src/main/java/org/flywaydb/core/api/logging/LogFactory.java b/flyway-core/src/main/java/org/flywaydb/core/api/logging/LogFactory.java
index ca97e6ee..185fe439 100644
--- a/flyway-core/src/main/java/org/flywaydb/core/api/logging/LogFactory.java
+++ b/flyway-core/src/main/java/org/flywaydb/core/api/logging/LogFactory.java
@@ -69,6 +69,7 @@ public class LogFactory {
     public static Log getLog(Class<?> clazz) {
         if (logCreator == null) {
             ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
+            System.out.println("TCCL: " + classLoader);
             FeatureDetector featureDetector = new FeatureDetector(classLoader);
             if (featureDetector.isAndroidAvailable()) {
                 logCreator = ClassUtils.instantiate(AndroidLogCreator.class.getName(), classLoader);
@@ -83,6 +84,8 @@ public class LogFactory {
             }
         }

+        System.out.println("logCreator ClassName: " + logCreator.getClass().getName());
+        System.out.println("logCreator ClassLoader: " + logCreator.getClass().getClassLoader());
         return logCreator.createLogger(clazz);
     }
-}
\ No newline at end of file
+}

... I see this:
Gradle suite > Gradle test > test.flywaydb.DeployTest.deploy STANDARD_OUT
    TCCL: WebappClassLoader (delegate=true; repositories=WEB-INF/classes/)
    TCCL: WebappClassLoader (delegate=true; repositories=WEB-INF/classes/)
    TCCL: WebappClassLoader (delegate=true; repositories=WEB-INF/classes/)
    logCreator ClassName: org.flywaydb.core.internal.util.logging.slf4j.Slf4jLogCreator
    logCreator ClassLoader: EarLibClassLoader :

Showing that the TCCL (WebappClassLoader) does not load Slf4jLogCreator, EarLibClassLoader does.

Ok, I have decided to mark this as won't fix.
You can fix your scenario by either moving the logging libraries to the ear or Flyway to the war. Both are much more sane and consistent options than what you have now. Alternatively you can also supply sour own logcreator via the setLogCreator on LogFactory as well.


Pulls devices from cloud but not seen in HA

Hi,
I have checked the log and it gets devices, but I cant access them in HA.
I know im probalb eis doing something wrong, I just cant see what wrong..
2020-11-04 10:21:05  DEBUG    main          SysInfo: {'version': '0.117.2', 'dev': False, 'hassio': True, 'virtualenv': False, 'python_version': '3.8.6', 'docker': True, 'arch': 'x86_64', 'os_name': 'Linux', 'os_version': '5.4.72', 'supervisor': '2020.10.1', 'host_os': 'HassOS 4.15', 'chassis': 'vm', 'docker_version': '19.03.11'}
2020-11-04 10:21:05  DEBUG    main          LOCAL mode start
2020-11-04 10:21:08  DEBUG    sonoff_cloud  5 devices loaded from the Cloud Server
2020-11-04 10:21:08  DEBUG    main          Init force_update for attributes: {'temperature', 'power'}
2020-11-04 10:21:08  DEBUG    main          Init auto sensors for: ['temperature', 'humidity', 'power', 'current', 'voltage', 'rssi']

try remove .sonoff.json and restart

Problem is still actual?

Thanks for the amazing component.
I am experiencing a similar problem, with a new device (RFBridge) not appearing in HA.
I have been using the component for a while with a CH4 and everything was working with the CH4 appearing in HA after a restart. Unfortunately after adding a RFBridge to the eWink app I have note been able to get it to appear in HA.
Debugging steps to date:

I have removed the .sonoff.json file,
I have set reload to always
I have turned on debug
Restarted multiple times

2020-12-27 17:41:57 DEBUG (MainThread) [custom_components.sonoff.sonoff_cloud] Redirect to region: us 2020-12-27 17:42:01 DEBUG (MainThread) [custom_components.sonoff.sonoff_cloud] 2 devices loaded from the Cloud Server 2020-12-27 17:42:01 DEBUG (MainThread) [custom_components.sonoff] 10007c591d == Init | {'uiid': 28, 'extra': {'manufacturer': 'Sonoff', 'model': 'RF_Bridge', 'sw_version': 'PSF-BRA-GL v3.5.0'}, 'params': {'sledOnline': 'on', 'init': 1, 'fwVersion': '3.5.0', 'rssi': -37, 'cmd': 'transmit', 'rfChl': 3, 'version': 8, 'staMac': '84:0D:8E:66:13:25', 'setState': 'arm', 'rfList': [{'rfChl': 0, 'rfVal': '1662014003A245C885'}, {'rfChl': 1, 'rfVal': '1680013603A245C88A'}, {'rfChl': 2, 'rfVal': '15E00154038445C886'}, {'rfChl': 3, 'rfVal': '1676014003A245C883'}], 'timers': [], 'only_device': {'ota': 'success'}, 'ssid': 'thedarkweb', 'bssid': '00:00:00:00:00:00', 'cloud': 'online'}}
020-12-27 17:49:10 DEBUG (Sonoff_LAN) [custom_components.sonoff.sonoff_local] Zeroconf Removed: eWeLink_1000baaee3._ewelink._tcp.local. 2020-12-27 17:49:10 DEBUG (Sonoff_LAN) [custom_components.sonoff.sonoff_local] Zeroconf Removed: eWeLink_10007c591d._ewelink._tcp.local. 2020-12-27 17:49:10 DEBUG (MainThread) [custom_components.sonoff.sonoff_local] 1000baaee3 => Local4 | Check offline with timeout 20s 2020-12-27 17:49:10 DEBUG (MainThread) [custom_components.sonoff.sonoff_local] 10007c591d => Local4 | Check offline with timeout 20s 2020-12-27 17:49:11 DEBUG (MainThread) [custom_components.sonoff.sonoff_local] 1000baaee3 => Local4 | {'cmd': 'info'} <= {'seq': 24, 'sequence': '1609051750996', 'error': 0} 2020-12-27 17:49:11 DEBUG (MainThread) [custom_components.sonoff.sonoff_local] 1000baaee3 => Local4 | Welcome back! 2020-12-27 17:49:11 DEBUG (MainThread) [custom_components.sonoff.sonoff_local] 10007c591d => Local4 | {'cmd': 'info'} <= {'seq': 4, 'sequence': '1609051750999', 'error': 400} 2020-12-27 17:49:11 DEBUG (MainThread) [custom_components.sonoff.sonoff_local] 10007c591d => Local4 | Welcome back!
When I trigger a button within the eWink app I get a result like this in the log
2020-12-27 17:58:18 DEBUG (MainThread) [custom_components.sonoff.sonoff_cloud] 10007c591d <= Cloud3 | {'action': 'update', 'deviceid': '10007c591d', 'apikey': 'XXX', 'userAgent': 'app', 'sequence': '1609052298319', 'params': {'cmd': 'transmit', 'rfChl': 3}, 'tempRec': '10007c591d'}

I am exhibiting the same exact symptoms
Brand new Sonoff Basic R2. Just setup the integration.
.sonoff.json is getting created.
Turning on DEBUG shows good local connection and updates on switch status change via physical button.
Nothing showing in HASS Logs.
The "sonoff.send_command" service is even working; just not importing as a device.

Check entities list. Search 10007c591d


Change creation form

The initial step should be choosing the palette group name. This creates the group
Afterwards palettes may be added, each palette has its own form, so they are created sending the group id
The palette edition URL should contain the id, this will ease reusing them on the query view

Some of those changes require knowing the group id.
Change creation so palettes are created and then added to a group.


Play full ver. of Haruhikage

[ ] Play Hakurikage full ver.

TODO: ASAP

Currently occupied. Assign @IskXCr.

On Dec 23, 2024, at 18:47, Site Fan @.***> wrote:
TODO: ASAP
—
Reply to this email directly, view it on GitHub https://github.com/SUSTech-ISACG-Association/ShinxSU7/issues/2#issuecomment-2559427374, or unsubscribe https://github.com/notifications/unsubscribe-auth/AIEUOJ6WLZV5HOZVNCWXACL2G7S5PAVCNFSM6AAAAABUCXOITGVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDKNJZGQZDOMZXGQ.
You are receiving this because you were assigned.

Done. Thanks.


Add and document use of Spack environment for development

Provide a minimal spack environment file for providing an environment for AdePT development. Largely identical to that for the Celeritas project for commonality, with some differences:

Latest AdePT examples require Geant4 11.1, or more specifically, the Flush() abstract function of G4VFastSimulationModel.
AdePT can only be built/used with CUDA, which becomes a hard required spec of the environment and all packages.

Update README with setup instructions for both Spack and the existing LCG devAdePT view from CVMFS. Note requirements where known.

The CI fails tests needing GDML files. I cannot see the errors/warnings during compilation, but I suspect the files could not be downloaded in the build directory:
7/36 Test  #7: RaytraceBenchmarkCPU .............***Failed    0.03 sec
 From getStringOpt: ret=</mnt/build/sftnight/workspace/AdePT-CI/build/trackML.gdml>
INFO: using default 0 for option -cache_depth
VGDML: VALIDATION ERROR! invalid document structure at line: 1

This could be due to the previous merge which for some reason did not catch this problem

O.k., looks like the CI issue was resolved by rebasing on master which included #238.


Displaying value on page outside controlled form

How Do I display value on page outside controlled form? I have used the examples, but unable to see how to a display value on page outside the controlled form function.

@diomededavid you can use the values property return by the useForm hook.


Microk8s crashes when attempting to join cluster

I'm attempting to set up a mixed architecture microk8s cluster. I have an x86 node that I'm using as the starting leader node and 2 rasppi4b nodes.
Attempting to join one of the pik8s nodes has failed 3 times and worked once.
The latest attempt looked like:
buntu@pidev2:~$ microk8s join <IP_ADDRESS>:25000/<token>
Contacting cluster at <IP_ADDRESS>
Waiting for this node to finish joining the cluster. ..
ubuntu@pidev2:~$ microk8s status
microk8s is not running. Use microk8s inspect for a deeper inspection.
ubuntu@pidev2:~$ microk8s inspect
Inspecting Certificates
Inspecting services
  Service snap.microk8s.daemon-cluster-agent is running
  Service snap.microk8s.daemon-containerd is running
  Service snap.microk8s.daemon-apiserver is running
  Service snap.microk8s.daemon-apiserver-kicker is running
  Service snap.microk8s.daemon-control-plane-kicker is running
  Service snap.microk8s.daemon-proxy is running
  Service snap.microk8s.daemon-kubelet is running
  Service snap.microk8s.daemon-scheduler is running
  Service snap.microk8s.daemon-controller-manager is running
  Copy service arguments to the final report tarball
Inspecting AppArmor configuration
Gathering system information
  Copy processes list to the final report tarball
  Copy snap list to the final report tarball
  Copy VM name (or none) to the final report tarball
  Copy disk usage information to the final report tarball
  Copy memory usage information to the final report tarball
  Copy server uptime to the final report tarball
  Copy current linux distribution to the final report tarball
  Copy openSSL information to the final report tarball
  Copy network configuration to the final report tarball
Inspecting kubernetes cluster
  Inspect kubernetes cluster
Inspecting juju
  Inspect Juju
Inspecting kubeflow
  Inspect Kubeflow

 WARNING:  IPtables FORWARD policy is DROP. Consider enabling traffic forwarding with: sudo iptables -P FORWARD ACCEPT
The change can be made persistent with: sudo apt-get install iptables-persistent
WARNING:  Docker is installed.
File "/etc/docker/daemon.json" does not exist.
You should create it and add the following lines:
{
    "insecure-registries" : ["localhost:32000"]
}
and then restart docker with: sudo systemctl restart docker
Building the report tarball
  Report tarball is at /var/snap/microk8s/1892/inspection-report-20210109_232609.tar.gz
ubuntu@pidev2:~$ microk8s status
microk8s is not running. Use microk8s inspect for a deeper inspection.

This is the second attempt on this node. The second attempt on a another rasppi node succeeded.
The nodes are identical (set up with ansible) and I've verified I can connect from both to the leader node on 25000. ufw is not running on any node.
I'll attach the inspection reports as soon as I figure out ow to get githbu to let me.

Well, github hates me so: https://drive.google.com/drive/folders/1Q1gPFVpJBnewOLCEDn01Uq0EgckT4pvo?usp=sharing

Well, github hates me so: https://drive.google.com/drive/folders/1Q1gPFVpJBnewOLCEDn01Uq0EgckT4pvo?usp=sharing

Looking at the logs journalctl -u snap.microk8s.daemon-cluster-agent I see this strange error https://pastebin.ubuntu.com/p/Yjgt5CsxTp/
What can you tell me about the nodes? Are the ansible scripts available online?

Looking at the logs journalctl -u snap.microk8s.daemon-cluster-agent I see this strange error https://pastebin.ubuntu.com/p/Yjgt5CsxTp/
What can you tell me about the nodes? Are the ansible scripts available online?

They're ubuntu 20.04 running on raspberry pi B 4gb, they used to be joined to a different cluster, but I completely uninstalled and re-installed microk8s before attempting to join them to this cluster.
https://github.com/sean-abbott/pi-k8s/tree/add_dev_cluster/ansible
(that repo should have no private info available, so please let me know if I missed something)
The recent work to set them up is in the linked branch.

They're ubuntu 20.04 running on raspberry pi B 4gb, they used to be joined to a different cluster, but I completely uninstalled and re-installed microk8s before attempting to join them to this cluster.
https://github.com/sean-abbott/pi-k8s/tree/add_dev_cluster/ansible
(that repo should have no private info available, so please let me know if I missed something)
The recent work to set them up is in the linked branch.

Do you want the logs from the node where I ran "add-node'?

Do you want the logs from the node where I ran "add-node'?

I'm a +1 for this issue.
I've just had a node fall out of the cluster and I can't add it back. microk8s stop/reset and snap remove --purge does not work. I always get a return code of 0 after i run the microk8s join call, but when tailing the snap.microk8s.daemon-apiserver.service logs on any of the nodes already in the cluster, i see messages like this:
Jan 12 22:21:25 node01 microk8s.daemon-apiserver[64883]: I0112 22:21:25.106599   64883 clientconn.go:948] ClientConn switching balancer to "pick_first"
Jan 12 22:21:38 node01 microk8s.daemon-apiserver[64883]: I0112 22:21:38.844459   64883 log.go:181] [ERROR] dqlite: proxy: first: remote -> local: read tcp node01IPV4:19001->node03IPV4:53250: read: connection reset by peer

where node03 is the node I wish to (re-)add to the cluster and node01 is the node i'm currently viewing the log on.
And when i check on the node that was attempting to join, this is what I see:
root@node03:/home/karl# microk8s status
microk8s is not running. Use microk8s inspect for a deeper inspection.
root@node03:/home/karl# microk8s inspect
Inspecting Certificates
Inspecting services
  Service snap.microk8s.daemon-cluster-agent is running
  Service snap.microk8s.daemon-containerd is running
  Service snap.microk8s.daemon-apiserver is running
  Service snap.microk8s.daemon-apiserver-kicker is running
  Service snap.microk8s.daemon-control-plane-kicker is running
  Service snap.microk8s.daemon-proxy is running
  Service snap.microk8s.daemon-kubelet is running
  Service snap.microk8s.daemon-scheduler is running
  Service snap.microk8s.daemon-controller-manager is running
  Copy service arguments to the final report tarball
Inspecting AppArmor configuration
Gathering system information
  Copy processes list to the final report tarball
  Copy snap list to the final report tarball
  Copy VM name (or none) to the final report tarball
  Copy disk usage information to the final report tarball
  Copy memory usage information to the final report tarball
  Copy server uptime to the final report tarball
  Copy current linux distribution to the final report tarball
  Copy openSSL information to the final report tarball
  Copy network configuration to the final report tarball
Inspecting kubernetes cluster
  Inspect kubernetes cluster
Inspecting juju
  Inspect Juju
Inspecting kubeflow
  Inspect Kubeflow

Building the report tarball
  Report tarball is at /var/snap/microk8s/1910/inspection-report-20210113_023002.tar.gz

inspection-report-20210113_023002.tar.gz

I'm a +1 for this issue.
I've just had a node fall out of the cluster and I can't add it back. microk8s stop/reset and snap remove --purge does not work. I always get a return code of 0 after i run the microk8s join call, but when tailing the snap.microk8s.daemon-apiserver.service logs on any of the nodes already in the cluster, i see messages like this:
Jan 12 22:21:25 node01 microk8s.daemon-apiserver[64883]: I0112 22:21:25.106599   64883 clientconn.go:948] ClientConn switching balancer to "pick_first"
Jan 12 22:21:38 node01 microk8s.daemon-apiserver[64883]: I0112 22:21:38.844459   64883 log.go:181] [ERROR] dqlite: proxy: first: remote -> local: read tcp node01IPV4:19001->node03IPV4:53250: read: connection reset by peer

where node03 is the node I wish to (re-)add to the cluster and node01 is the node i'm currently viewing the log on.
And when i check on the node that was attempting to join, this is what I see:
root@node03:/home/karl# microk8s status
microk8s is not running. Use microk8s inspect for a deeper inspection.
root@node03:/home/karl# microk8s inspect
Inspecting Certificates
Inspecting services
  Service snap.microk8s.daemon-cluster-agent is running
  Service snap.microk8s.daemon-containerd is running
  Service snap.microk8s.daemon-apiserver is running
  Service snap.microk8s.daemon-apiserver-kicker is running
  Service snap.microk8s.daemon-control-plane-kicker is running
  Service snap.microk8s.daemon-proxy is running
  Service snap.microk8s.daemon-kubelet is running
  Service snap.microk8s.daemon-scheduler is running
  Service snap.microk8s.daemon-controller-manager is running
  Copy service arguments to the final report tarball
Inspecting AppArmor configuration
Gathering system information
  Copy processes list to the final report tarball
  Copy snap list to the final report tarball
  Copy VM name (or none) to the final report tarball
  Copy disk usage information to the final report tarball
  Copy memory usage information to the final report tarball
  Copy server uptime to the final report tarball
  Copy current linux distribution to the final report tarball
  Copy openSSL information to the final report tarball
  Copy network configuration to the final report tarball
Inspecting kubernetes cluster
  Inspect kubernetes cluster
Inspecting juju
  Inspect Juju
Inspecting kubeflow
  Inspect Kubeflow

Building the report tarball
  Report tarball is at /var/snap/microk8s/1910/inspection-report-20210113_023002.tar.gz

inspection-report-20210113_023002.tar.gz

Could you look in /var/snap/microk8s/current/var/kubernetes/backend/cluster.yaml to see if the node that is failing to join is already referenced there?

Could you look in /var/snap/microk8s/current/var/kubernetes/backend/cluster.yaml to see if the node that is failing to join is already referenced there?

On the lead node, where I ran "add-node"?
On Wed, Jan 13, 2021 at 4:47 AM Konstantinos Tsakalozos <
<EMAIL_ADDRESS>wrote:

Could you look in
/var/snap/microk8s/current/var/kubernetes/backend/cluster.yaml to see if
the node that is failing to join is already referenced there?
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/ubuntu/microk8s/issues/1880#issuecomment-759333538,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AAKWJV6EPY6GF3QTKQEZB6DSZVT4BANCNFSM4V36QOKA
.

On the lead node, where I ran "add-node"?
On Wed, Jan 13, 2021 at 4:47 AM Konstantinos Tsakalozos <
<EMAIL_ADDRESS>wrote:

Could you look in
/var/snap/microk8s/current/var/kubernetes/backend/cluster.yaml to see if
the node that is failing to join is already referenced there?
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/ubuntu/microk8s/issues/1880#issuecomment-759333538,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AAKWJV6EPY6GF3QTKQEZB6DSZVT4BANCNFSM4V36QOKA
.

Yep, i have the "already added" node present as well:
root@node01:/home/karl# cat /var/snap/microk8s/current/var/kubernetes/backend/cluster.yaml | grep -A2 "88.53"
- Address: xx.yy.88.53:19001
  ID:<PHONE_NUMBER>5405994632
  Role: 1

Yep, i have the "already added" node present as well:
root@node01:/home/karl# cat /var/snap/microk8s/current/var/kubernetes/backend/cluster.yaml | grep -A2 "88.53"
- Address: xx.yy.88.53:19001
  ID:<PHONE_NUMBER>5405994632
  Role: 1

Interesting, mine is showing as Role: 0. No idea what that diff means.
On Wed, Jan 13, 2021 at 1:57 PM Karl Q<EMAIL_ADDRESS>wrote:

Yep, i have the "already added" node present as well:
root@node01:/home/karl# cat /var/snap/microk8s/current/var/kubernetes/backend/cluster.yaml | grep -A2 "88.53"

Address: xx.yy.88.53:19001
ID:<PHONE_NUMBER>5405994632
Role: 1

—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/ubuntu/microk8s/issues/1880#issuecomment-759650640,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AAKWJV4XM5VBSIBMJACMZFTSZXUIBANCNFSM4V36QOKA
.

Interesting, mine is showing as Role: 0. No idea what that diff means.
On Wed, Jan 13, 2021 at 1:57 PM Karl Q<EMAIL_ADDRESS>wrote:

Yep, i have the "already added" node present as well:
root@node01:/home/karl# cat /var/snap/microk8s/current/var/kubernetes/backend/cluster.yaml | grep -A2 "88.53"

Address: xx.yy.88.53:19001
ID:<PHONE_NUMBER>5405994632
Role: 1

—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/ubuntu/microk8s/issues/1880#issuecomment-759650640,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AAKWJV4XM5VBSIBMJACMZFTSZXUIBANCNFSM4V36QOKA
.

Interesting, mine is showing as Role: 0. No idea what that diff means.

If i had to guess, it's the flag for primary or backup/standby.  When i run microk8s status i get 3 IPs as "datastore master" and 3 as "datastore stand by". The Role: 0 matches up perfectly with the active nodes and Role: 1 matches up perfectly with the standby nodes.

Interesting, mine is showing as Role: 0. No idea what that diff means.

If i had to guess, it's the flag for primary or backup/standby.  When i run microk8s status i get 3 IPs as "datastore master" and 3 as "datastore stand by". The Role: 0 matches up perfectly with the active nodes and Role: 1 matches up perfectly with the standby nodes.

The command to forcefully remove a dqlite (the datastore) node from the cluster is:
/snap/microk8s/current/bin/dqlite -s file:///var/snap/microk8s/current/var/kubernetes/backend/cluster.yaml -c /var/snap/microk8s/current/var/kubernetes/backend/cluster.crt -k /var/snap/microk8s/current/var/kubernetes/backend/cluster.key -f json k8s ".remove <node-ip-with-port-19001>"

The  <node-ip-with-port-19001> is the Address you see in cat /var/snap/microk8s/current/var/kubernetes/backend/cluster.yaml.
I am interested to understand how the cluster got into this state so we can guard against it. Would anyone of you recall the exact steps you took? I am looking for a way to reproduce this problem.

The command to forcefully remove a dqlite (the datastore) node from the cluster is:
/snap/microk8s/current/bin/dqlite -s file:///var/snap/microk8s/current/var/kubernetes/backend/cluster.yaml -c /var/snap/microk8s/current/var/kubernetes/backend/cluster.crt -k /var/snap/microk8s/current/var/kubernetes/backend/cluster.key -f json k8s ".remove <node-ip-with-port-19001>"

The  <node-ip-with-port-19001> is the Address you see in cat /var/snap/microk8s/current/var/kubernetes/backend/cluster.yaml.
I am interested to understand how the cluster got into this state so we can guard against it. Would anyone of you recall the exact steps you took? I am looking for a way to reproduce this problem.

I literally ran the ansible that I linked. When the ansible playbook to
create the cluster failed, I stopped and restarted microk8s and tried again
on the first pi node, and it worked. I then proceeded to manually try the
second and it failed.
Completely fresh install.
On Thu, Jan 14, 2021 at 5:39 AM Konstantinos Tsakalozos <
<EMAIL_ADDRESS>wrote:

The command to forcefully remove a dqlite (the datastore) node from the
cluster is:
/snap/microk8s/current/bin/dqlite -s file:///var/snap/microk8s/current/var/kubernetes/backend/cluster.yaml -c /var/snap/microk8s/current/var/kubernetes/backend/cluster.crt -k /var/snap/microk8s/current/var/kubernetes/backend/cluster.key -f json k8s ".remove "
The  is the Address you see in cat
/var/snap/microk8s/current/var/kubernetes/backend/cluster.yaml.
I am interested to understand how the cluster got into this state so we
can guard against it. Would anyone of you recall the exact steps you took?
I am looking for a way to reproduce this problem.
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/ubuntu/microk8s/issues/1880#issuecomment-760111637,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AAKWJVZ2MFQAGXMH6GKQ5QLSZ3CWNANCNFSM4V36QOKA
.

I literally ran the ansible that I linked. When the ansible playbook to
create the cluster failed, I stopped and restarted microk8s and tried again
on the first pi node, and it worked. I then proceeded to manually try the
second and it failed.
Completely fresh install.
On Thu, Jan 14, 2021 at 5:39 AM Konstantinos Tsakalozos <
<EMAIL_ADDRESS>wrote:

The command to forcefully remove a dqlite (the datastore) node from the
cluster is:
/snap/microk8s/current/bin/dqlite -s file:///var/snap/microk8s/current/var/kubernetes/backend/cluster.yaml -c /var/snap/microk8s/current/var/kubernetes/backend/cluster.crt -k /var/snap/microk8s/current/var/kubernetes/backend/cluster.key -f json k8s ".remove "
The  is the Address you see in cat
/var/snap/microk8s/current/var/kubernetes/backend/cluster.yaml.
I am interested to understand how the cluster got into this state so we
can guard against it. Would anyone of you recall the exact steps you took?
I am looking for a way to reproduce this problem.
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/ubuntu/microk8s/issues/1880#issuecomment-760111637,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AAKWJVZ2MFQAGXMH6GKQ5QLSZ3CWNANCNFSM4V36QOKA
.

The command to forcefully remove a dqlite (the datastore) node from the cluster is:
/snap/microk8s/current/bin/dqlite -s file:///var/snap/microk8s/current/var/kubernetes/backend/cluster.yaml -c /var/snap/microk8s/current/var/kubernetes/backend/cluster.crt -k /var/snap/microk8s/current/var/kubernetes/backend/cluster.key -f json k8s ".remove <node-ip-with-port-19001>"

Thanks. This is a lot better than the the hacky 'add fake node' approach I was going to try.  I assume that i'll need to manually edit the yml file as well?

I am interested to understand how the cluster got into this state so we can guard against it. Would anyone of you recall the exact steps you took? I am looking for a way to reproduce this problem.

I would like to know as well... I didn't even notice that the node fell out until I posted this. The node03 node was running fine until all of a sudden it was not. When i ran microk8s inspect the api server was not running and it had the typically unhelpful output as seen here.

The command to forcefully remove a dqlite (the datastore) node from the cluster is:
/snap/microk8s/current/bin/dqlite -s file:///var/snap/microk8s/current/var/kubernetes/backend/cluster.yaml -c /var/snap/microk8s/current/var/kubernetes/backend/cluster.crt -k /var/snap/microk8s/current/var/kubernetes/backend/cluster.key -f json k8s ".remove <node-ip-with-port-19001>"

Thanks. This is a lot better than the the hacky 'add fake node' approach I was going to try.  I assume that i'll need to manually edit the yml file as well?

I am interested to understand how the cluster got into this state so we can guard against it. Would anyone of you recall the exact steps you took? I am looking for a way to reproduce this problem.

I would like to know as well... I didn't even notice that the node fell out until I posted this. The node03 node was running fine until all of a sudden it was not. When i ran microk8s inspect the api server was not running and it had the typically unhelpful output as seen here.

i can confirm this problem, i setup microk8s on proxmox vm's with ubuntu server 20.04 lts and when joining a node, i had repeated crashes of the first node

This worked for me:
firewall-cmd --add-port=19001/tcp --permanent
firewall-cmd --reload

The command to forcefully remove a dqlite (the datastore) node from the cluster is:
/snap/microk8s/current/bin/dqlite -s file:///var/snap/microk8s/current/var/kubernetes/backend/cluster.yaml -c /var/snap/microk8s/current/var/kubernetes/backend/cluster.crt -k /var/snap/microk8s/current/var/kubernetes/backend/cluster.key -f json k8s ".remove <node-ip-with-port-19001>"

The  <node-ip-with-port-19001> is the Address you see in cat /var/snap/microk8s/current/var/kubernetes/backend/cluster.yaml.
I am interested to understand how the cluster got into this state so we can guard against it. Would anyone of you recall the exact steps you took? I am looking for a way to reproduce this problem.

You can reproduce it by adding a worker node to the cluster, creating a deployment that runs on the newly added node then changing the hostname and /etc/hosts of said node.