Add CronWorkflow.update, add unit tests

Pull Request Checklist

[x] Fixes #679
[x] Tests added
[ ] Documentation/examples added
[x] Good commit messages and/or PR title

Description of PR
Include methods (update and lint) to the CronWorkflow object - to match WorkflowTemplate.
cc @elliotgunton

Hey @iameskild - you'll need to rebase and push with signoff to pass the DCO check. You can run these to fix it:
git rebase HEAD~1 --signoff
git push --force-with-lease

Thanks @elliotgunton! Added my sign-off to the commit :)


Adapt base integrator, saved and result classes to new solvers structure

Closes DYN-238.
In light of new sepropagator and meproagator methods the Result internal classes are updated to avoid having meaningless Nones.
Related to this, a few new internal classes are introduced to avoid code duplication. For instance new integrators are added SolveIntegrator, PropagatorIntegrator, SolveExpmIntegrator and PropagatorExpmIntegrator which e.g. for SolveIntegrator contain methods relevant for both sesolve and mesolve regardless of the integration scheme (whether expm or diffrax).

@dkweiss31 two quick tips for your next PRs 😉

for PR labels (and linear issues) we always pick one kind (one of organization, bug, feature, performance) and one theme (the one with emojis, e.g. 🌀 solvers, 🫴 utils, etc...)
to automatically link and refer to linear issues you must use magic keywords (see attached screenshot), e.g. "Closes DYN-238" and linear will automatically link the issue to the PR

from https://linear.app/docs/github?tabs=206cad22125a
I need to write a complete CONTRIBUTING.md guide including these guidelines. 😇

Thanks, that's great! I think we should move to using interfaces rather than subclassing to clarify what's happening with the multiple inheritance everywhere. Currently the ntegrator class includes saving logic + equation SE/ME logic, and solver logic, all mixed and matched under the same inheritance scheme. With interfaces we can split the base class into three interfaces, which will be easier to follow and help us choose better names (rather than calling everything an integrator). I'll take care of it. 😊
A few minor commits on top, happy to merge if you agree @dkweiss31.

@dkweiss31 two quick tips for your next PRs 😉

for PR labels (and linear issues) we always pick one kind (one of organization, bug, feature, performance) and one theme (the one with emojis, e.g. 🌀 solvers, 🫴 utils, etc...)
to automatically link and refer to linear issues you must use magic keywords (see attached screenshot), e.g. "Closes DYN-238" and linear will automatically link the issue to the PR

Thank you for the heads up!

Thanks, that's great! I think we should move to using interfaces rather than subclassing to clarify what's happening with the multiple inheritance everywhere. Currently the integrator class includes saving logic + equation SE/ME logic, and solver logic, all mixed and matched under the same inheritance scheme. With interfaces we can split the base class into three interfaces, which will be easier to follow and help us choose better names (rather than calling everything an integrator). I'll take care of it. 😊
A few minor commits on top, happy to merge if you agree @dkweiss31.

I think that's a great idea, I do find myself getting confused sometimes about who inherits what and from where...


HTTP Operator and sensor

New, clean pull request for issue #92 , not riddled with rebase artifacts.

History for this here:
https://github.com/airbnb/airflow/pull/99

Should be complete now.

timeout is now by default 0, which means that the server decides when to break the connection. The majority of servers have this specified at around 1-3 minutes, unless it's a keepAlive or streaming connection. Do you want to use a default timeout anywhere, or leave it as is?
'template_fields' is very basic and includes one param. I don't know how this works in depth. Could you have a look if that should be extended please?
same for 'template_ext'
is ui_color ok?
template_fields for sensor?

I'm happy if you take it as is and add what you need, if that makes it easier.

Awesome! I think this is solid as far as I can tell. A few details:

I'd throw endpoint in template_fields for sensor as well. template_fields is a bad name for this feature, but the idea is that sometime between the __init__ and the execute method is run, the object attributes in that list get templated. So say if someone would want a date in their endpoint they would have to use templating for that, as in endpoint = "/apiv2/user/getmodified/{{ execution_date.isoformat()[:10].replace("-", "") }}"
add an entry in docs/code.rst for your 2 operators and hook to show up in the API part of the documentation
a unit test would be nice in airflow/tests/core.py

Another thought (outside the scope of this PR) is around authentication. I read the requests library part about sessions and authentication and it seem like people could graft that onto the hook you wrote eventually to support different types of authentication.

If something is needed for authentication, let's identify how and what and create an issue for it.
I did not run the process to create docs (never done that), please evaluate if that's necessary.
The http_default connection here is google.com. Obviously that needs to be present for this to work. How do you document this, or do you create a default connection in the installer?
If the sensor fails in the test, it will poll forever. Is there a max_retries so the test fail or succeed at some point (mostly useful for CI).

Awesome. This is coming together nicely!

I run the doc updates when uploading a new version to Pypi, so don't worry about it.
*Here's where the http_default connection belongs. https://github.com/airbnb/airflow/blob/master/airflow/utils.py#L81
BaseSensorOperator has a timeout param (https://github.com/airbnb/airflow/blob/master/airflow/operators/sensors.py#L33), that should work nicely, 5 or 10 seconds should be enough

I added a timeout and initdb now creates a http_default connection for google.com .
I ran the tests before and they errored when example_http_operator is in the example_dags, because the constructor is looking for it (when not supplied). The hive and other operators are not part of example dags, so they don't get imported and don't create that error. Maybe better to remove the example_http_operator or put it in a different folder.
I tried to get the sensor to error by changing the response_check to False, but that didn't work. The output gets eaten up too, so I can't see what's happening. The test always appears to succeed for the sensor, this could an issue with the testing platform (does it check for the return value for a sensor?).

I fetched your branch to run some tests and ended changing things around a bit. The main thing was the missing force=True in the operator run call. Without force=True, the operator doesn't re-run as it knows it has succeeded in the past.
https://github.com/airbnb/airflow/commit/d0f16b103b0131236b1d8ad6b9fb1237855dcad9
I think everything else look fine at this point, if you want to keep iterating you can bring this commit to your PR, or I can just merge my local branch as is. I think you get "credited" for your commits in any case.

Please go ahead with the merge from your local branch and then close this PR. Anything else that's needed, let's create a separate issue and pr for that.

![img] (http://www.reactiongifs.com/r/tghf.gif)


Changed default: preload_content=False

Fixes #436. Hopefully this will be backwards compatible to nearly all users. Slated for v1.10.
If there are any concerns, please raise them. :) /cc @Lukasa @sigmavirus24

If we get rid of the .data property, how can we still get the contents? The documentation is mentioning the data property, but nothing more. If this property is removed, the documentation should make it clear on what is the new way of accessing that content. Even better, the alternative should be provided before .data is removed.

@alecz20 You'll be able to .read() instead of .data.

I am trying to figure out how to replace the calls to .data with .read() in my code but I get empty strings. With .data I get a bytes object.
The response is raw binary. This is with 1.9.1 btw.

See the title of this issue. :) you need preload_content=False.
On Jan 14, 2015 2:49 PM, "alecz20"<EMAIL_ADDRESS>wrote:

I am trying to figure out how to replace the calls to .data with .read()
in my code but I get empty strings. With .data I get a bytes object.
The response is raw binary. This is with 1.9.1 btw.
—
Reply to this email directly or view it on GitHub
https://github.com/shazow/urllib3/pull/468#issuecomment-70008488.

Thank you for creating this pull request, unfortunately, for one reason or
another it has become stale. We are declaring PR bankruptcy (see #1370) to
better focus our limited volunteer resources. If you still think this PR is
relevant and useful, please comment and let us know!


Warning from website container.

Problem:
Step to reproduce: https://github.com/kubernetes/website#running-the-website-using-a-container
When I am running container to serve docs from local, getting below warning
WARN 2022/05/14 10:23:07 Failed to get translated string for language "zh" and ID "post_create_issue": %!s(<nil>)
WARN 2022/05/14 10:23:07 Failed to get translated string for language "zh" and ID "print_entire_section": %!s(<nil>)
WARN 2022/05/14 10:23:07 Failed to get translated string for language "zh" and ID "post_last_mod": %!s(<nil>)
WARN 2022/05/14 10:23:07 Failed to get translated string for language "zh" and ID "post_edit_this": %!s(<nil>)
WARN 2022/05/14 10:23:07 Failed to get translated string for language "zh" and ID "post_create_child_page": %!s(<nil>)
WARN 2022/05/14 10:23:07 Failed to get translated string for language "zh" and ID "post_create_issue": %!s(<nil>)
WARN 2022/05/14 10:23:07 Failed to get translated string for language "zh" and ID "print_entire_section": %!s(<nil>)
WARN 2022/05/14 10:23:07 Failed to get translated string for language "zh" and ID "post_last_mod": %!s(<nil>)
WARN 2022/05/14 10:23:07 Failed to get translated string for language "zh" and ID "post_edit_this": %!s(<nil>)
WARN 2022/05/14 10:23:07 Failed to get translated string for language "zh" and ID "post_create_child_page": %!s(<nil>)
WARN 2022/05/14 10:23:07 Failed to get translated string for language "zh" and ID "post_create_issue": %!s(<nil>)
WARN 2022/05/14 10:23:07 Failed to get translated string for language "zh" and ID "print_entire_section": %!s(<nil>)
WARN 2022/05/14 10:23:07 Failed to get translated string for language "zh" and ID "post_last_mod": %!s(<nil>)
WARN 2022/05/14 10:23:07 Failed to get translated string for language "zh" and ID "post_edit_this": %!s(<nil>)
WARN 2022/05/14 10:23:07 Failed to get translated string for language "zh" and ID "post_create_child_page": %!s(<nil>)
WARN 2022/05/14 10:23:07 Failed to get translated string for language "zh" and ID "post_create_issue": %!s(<nil>)
WARN 2022/05/14 10:23:07 Failed to get translated string for language "zh" and ID "print_entire_section": %!s(<nil>)
WARN 2022/05/14 10:23:07 Failed to get translated string for language "zh" and ID "post_last_mod": %!s(<nil>)
WARN 2022/05/14 10:23:07 Failed to get translated string for language "zh" and ID "post_edit_this": %!s(<nil>)
WARN 2022/05/14 10:23:07 Failed to get translated string for language "zh" and ID "post_create_child_page": %!s(<nil>)
WARN 2022/05/14 10:23:07 Failed to get translated string for language "zh" and ID "post_create_issue": %!s(<nil>)
WARN 2022/05/14 10:23:07 Failed to get translated string for language "zh" and ID "print_entire_section": %!s(<nil>)
WARN 2022/05/14 10:23:07 Failed to get translated string for language "zh" and ID "post_last_mod": %!s(<nil>)
WARN 2022/05/14 10:23:07 Failed to get translated string for language "zh" and ID "post_edit_this": %!s(<nil>)
WARN 2022/05/14 10:23:07 Failed to get translated string for language "zh" and ID "post_create_child_page": %!s(<nil>)
WARN 2022/05/14 10:23:07 Failed to get translated string for language "zh" and ID "post_create_issue": %!s(<nil>)
WARN 2022/05/14 10:23:07 Failed to get translated string for language "zh" and ID "print_entire_section": %!s(<nil>)
WARN 2022/05/14 10:23:07 Failed to get translated string for language "zh" and ID "post_last_mod": %!s(<nil>)
WARN 2022/05/14 10:23:07 Failed to get translated string for language "zh" and ID "post_edit_this": %!s(<nil>)
WARN 2022/05/14 10:23:07 Failed to get translated string for language "zh" and ID "post_create_child_page": %!s

Proposed Solution:
NONE

/language zh

This is an issue to be resolved. Docsy replaced 'zh' with 'zh-cn'. This needs a huge amount of refactoring to the website. We plan to do that after the 1.24 doc changes are well sync'ed. Stay tuned.

/close


WHY DIS ALYWAYS COMING

Describe your bug here.
when i done compile 0.5.1 i see da fps counter is big and a memory on da top, after i in why their is add -git overther this da name version : "Pysch Engine 0.5.1-git"
Command Prompt/Terminal logs (if existing)
No response
Are you modding a build from source or with Lua?
Source
What is your build target?
Windows
Did you edit anything in this build? If so, mention or summarize your changes.
no i dont editing files

You can disable it in the options. You can close this issue too, now.


Introduce font-variant-numeric token type

Is your feature request related to a problem? Please describe.
When I'm designing tables, I want to use tabular numerals in all columns with numbers and dates.
Using tabular numerals makes the numbers in a column align vertically because each numeral has the same width.
Many fonts support this, and Figma also has a setting for this under Type setting > Details > Numbers > Style.
Describe the solution you'd like
As a solution, I would like a token type for the CSS property font-variant-numeric.
This CSS property provides different ways of displaying numbers, fractions, and ordinal markers.
Describe alternatives you've considered
Currently, the only way to achieve this today is to define separate typography tokens for table text with a monospaced font.
This is not ideal, as it deviates from the visual style.

This request has been moved to our new feedback tool. Go check out https://tokensstudio.featurebase.app/ to create a free account. You can upvote and comment on existing posts, make a new request, and subscribe to be notified when requests move into our roadmap.

Added to Featurebase Roadmap : 🪙 Expand token types


Added Subhendu Dash

Added my profile "Subhendu Dash" to public\data.
File name: subhendudash02.json

@Panquesito7 Corrected the changes👍


Fix for preventing the nav menu from closing when not a container

Clicking on a selected child menu item three times causes the nav menu to misbehave and close the submenu. This fix prevents that and will now only close submenus when the container topic is clicked.

Thank you. The code LGTM. Could you fix the indent?


[PORT] [OAuth]do not set signInLink to empty when OAuthAppCredentials is set

Port this change from botbuilder-dotnet/master branch:
https://github.com/microsoft/botbuilder-dotnet/pull/3564

When OAuthAppCredentials is passed in as part OAuthPromptSettings, do not set SignInLink to be empty as Emulator/other first party channels will ignore this and get a SignInLink without the additional OAuthAppCredentials setting.
Changed projects

Microsoft.Bot.Builder.Dialogs

closing since this has been completed https://github.com/microsoft/botbuilder-js/pull/1907


Ban trigger not working

Hey, so the ban trigger is no longer working not sure if it could be problem with Steam or something else but I add the command as !ban, invite the bot in a group chat and type !ban (steam3ID) and nothing happens. Any ideas what could be wrong?

I belive you must do it as a steamid64. I may add something in the future
which will automatically convert it to the correct format.
Steamid64:<PHONE_NUMBER>1343023
On Jun 17, 2016 07:38, "GhostGamerE"<EMAIL_ADDRESS>wrote:

Hey, so the ban trigger is no longer working not sure if it could be
problem with Steam or something else but I add the command as !ban, invite
the bot in a group chat and type !ban (steam3ID) and nothing happens. Any
ideas what could be wrong?
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
https://github.com/Steam-Chat-Bot/SteamChatBot/issues/3, or mute the
thread
https://github.com/notifications/unsubscribe/AI-FCgsPH-I95JjLaOeEnp_RcP1A48C5ks5qMpU-gaJpZM4I4UW-
.

Thanks it worked! But it was working with steam3ID and steamID32 and now the only one that works is SteamID64


Template Files

Hi I don't know if this is the right place for it.
But I want to share with you my Entitas Templatefiles for Unity!
EntitasTemplates.zip
Just copy the files in the .zip to:
"Unity Install Directory"\Editor\Data\Resources\ScriptTemplates
(You need to restart Unity to load this files correctly)
Now you can create entitas Components/ Systems even faster, like Monobehaviour scripts!

@sschmid
Maby you can integrate this in your setup or migration tool or something!
Kind regards
Spy-Shifty

Awesome! Thanks. I linked this issue here
Wiki - Tools and Extensions
so people can find it better.

Rad, thanks for this! If you're on Mac OSX here's some install instructions:
Right-click your Unity.app and click Show Package Contents and copy / move the files to: Contents/Resources/ScriptTemplates/*

https://github.com/gd2020/EntitasTemplates
I made it as a plugin so that it makes us possible to use this without setup.


Check for required environment variables

LGTM, but I'll let John do the merge.  He's more familiar with this part.

PTAL

What is the emoji for lgtm? :) :accept:


Connection reset by peer error

Observation:
Important: we also see 276 cases of could not receive data from client: Connection reset by peer in a few hours in production
Staging/dev:
about 5 % of tenants running pgbench fail with "fatal: Run was aborted; the above results are incomplete."
Analysis of proxy and compute logs shows that the root cause looks like issues in proxy<->compute connection, because:

in compute we see a disconnection much earlier
proxy detects disconnections a few seconds later
we see could not receive data from client: Connection reset by peer

Steps to reproduce
With 500 Postgres compute instances active associated with a single page server (default suspension timeout):

start 50 pgbench clients per minute (so overall the 500 tenants stay active because we have 50 coming per minute and 50 going due to suspension)

Note that this happens in staging during test of ./cloudbench productionlike_bench init --config productionlike_warmup.yaml --apikey <secret>, see https://github.com/neondatabase/cloud/blob/1da98ec0e262fb49c7b85127b1e447c45bd64499/bench/internal/controllers/productionlikecontroller/bench/productionlikebenchinit.go
Expected result
Each pgbench runs to completion as the other 95 % do.
Actual result
Approximately 5 % of pgbench runs fail with connection reset by peer.
Environment
Staging and Prod
Logs, links
client side (cloud bench):
2024-01-24T13:58:11.184Z        DEBUG   cloudbench      Will execute PGPASSWORD=<secret> pgbench -f pgbench_custom_readonly_txn.sql@1 --random-seed=42 -s 1 -c 1 -D neon_sleep_time=2 -D neon_num_aid_keys=500 --protocol=prepared -n --time 60 postgresql://peterbendel@ep-damp-cell-91680705.eu-west-1.aws.neon.build:5432/neondb?sslmode=require in directory /home/ubuntu/cloud/bench/cmd/cloudbench/cmd/productionlikebench/configurations/default     {"unit": 3546}

2024-01-24T14:04:11.214Z        ERROR   cloudbench      execution of unit failed        {"unit": 3546, "error": "output is \"pgbench: setting random seed to 42\\npgbench (14.10 (Ubuntu 14.10-0ubuntu<IP_ADDRESS>), server 15.5)\\npgbench: error: client 0 aborted in command 5 (SQL) of script 0; perhaps the backend died while processing\\ntransaction type: pgbench_custom_readonly_txn.sql\\nscaling factor: 1\\nquery mode: prepared\\nnumber of clients: 1\\nnumber of threads: 1\\nduration: 60 s\\nnumber of transactions actually processed: 1302\\nlatency average = 276.126 ms\\ninitial connection time = 287.787 ms\\ntps = 3.621529 (without initial connection time)\\npgbench: fatal: Run was aborted; the above results are incomplete.\\n\", err is exit status 2"}

https://neonprod.grafana.net/explore?schemaVersion=1&panes=%7B%22dab%22:%7B%22datasourc[…]968000000%22,%22to%22:%221706140799000%22%7D%7D%7D&orgId=1
https://neonprod.grafana.net/explore?schemaVersion=1&panes=%7B%22pnf%22:%7B%22datasourc[…]22from%22:%22now-6h%22,%22to%22:%22now%22%7D%7D%7D&orgId=1
https://neonprod.grafana.net/explore?schemaVersion=1&panes=%7B%22pnf%22:%7B%22datasourc[…]22from%22:%22now-6h%22,%22to%22:%22now%22%7D%7D%7D&orgId=1
2024-01-24T14:04:11.213550Z ERROR per-client task finished with an error: Connection reset by peer (os error 104) session_id=a52efa22-75a6-48d0-bf29-cf6baee67a83
Internal discussion
https://neondb.slack.com/archives/C039YKBRZB4/p1706104412540999?thread_ts=1704534532.501369&cid=C039YKBRZB4
https://neondb.slack.com/archives/C060N3SEF9D/p1706107025142509

We need to investigate the effect on customers. For now it is a P1

Anna, as discussed, please find out if this is still a problem.

Please re-open should this still be an issue for pgbench. Closing tentatively.


Customize controls design + autohide function

Description:
Hi there! When using VR viewers the back button and the line in the middle never disappears. Is there a way to autohide them? And show again if any touch or mousemove event is detected?
Also i would like to change the image for back button and settings gear.
But i kinda get lost in the code and kind find the exact part to edit.
Additional Information:

webvr-polyfill version: 0.10.10
Browser name/version/release channel: Chrome WebView / 70 / stable
Operating System: Android

Hmm so it's drawn using webgl. The rendering of the components appears on
CardboardUI.prototype.onResize call. So i was able to tweak that there.
Gonna find a way to make them fade if untouched for about 10 seconds.
Any ideas?

@StarStep stuck on the same thing. Any leads here?


swift-module-digester: diagnose type witness type changes when checking ABI stability.

@swift-ci please smoke test

@DougGregor @rjmccall as we had discussed before, this patch should teach the ABI checker to diagnose any type witness type changes.

@swift-ci please smoke test and merge

@swift-ci please smoke test

@swift-ci please smoke test

@swift-ci please smoke test

@swift-ci please smoke test and merge

Thanks.  I don't really feel like I understand this code well enough to review it.


fix enrichments v2

Exact same thing as https://github.com/SkyCryptWebsite/SkyCrypt/pull/1653 but without conflicts 👀
Closes #1653
Fixes #1652

@MartinNemi03 I recreated metal's PR (https://github.com/SkyCryptWebsite/SkyCrypt/pull/1653) since the old one was a mess with all the conflicts and it was just a couple changes...
old PR already had 2 approvals so this can be merged right away 😄


[Fix]: Central Pane changes when refreshing expensify classic page

Details

Fixed Issues

$ https://github.com/Expensify/App/issues/38865
PROPOSAL: https://github.com/Expensify/App/issues/38865#issuecomment-2016520578
Tests

Same as QA

[x] Verify that no errors appear in the JS console

Offline tests

Won't be able to perform offline as if we refresh page offline then we get internet not found from the browser
QA Steps

Navigate to Settings - Switch to Expensify Classic
Choose any option
Now refresh page

Observe that the Central Pane Remains constant as opposed to current bug that it changes

[x] Verify that no errors appear in the JS console

PR Author Checklist

[x] I linked the correct issue in the ### Fixed Issues section above
[x] I wrote clear testing steps that cover the changes made in this PR

[x] I added steps for local testing in the Tests section
[x] I added steps for the expected offline behavior in the Offline steps section
[x] I added steps for Staging and/or Production testing in the QA steps section
[x] I added steps to cover failure scenarios (i.e. verify an input displays the correct error message if the entered data is not correct)
[x] I turned off my network connection and tested it while offline to ensure it matches the expected behavior (i.e. verify the default avatar icon is displayed if app is offline)
[x] I tested this PR with a High Traffic account against the staging or production API to ensure there are no regressions (e.g. long loading states that impact usability).

[x] I included screenshots or videos for tests on all platforms
[x] I ran the tests on all platforms & verified they passed on:

[x] Android: Native
[x] Android: mWeb Chrome
[x] iOS: Native
[x] iOS: mWeb Safari
[x] MacOS: Chrome / Safari
[x] MacOS: Desktop

[x] I verified there are no console errors (if there's a console error not related to the PR, report it or open an issue for it to be fixed)
[x] I followed proper code patterns (see Reviewing the code)

[x] I verified that any callback methods that were added or modified are named for what the method does and never what callback they handle (i.e. toggleReport and not onIconClick)
[x] I verified that the left part of a conditional rendering a React component is a boolean and NOT a string, e.g. myBool && <MyComponent />.
[x] I verified that comments were added to code that is not self explanatory
[x] I verified that any new or modified comments were clear, correct English, and explained "why" the code was doing something instead of only explaining "what" the code was doing.
[x] I verified any copy / text shown in the product is localized by adding it to src/languages/* files and using the translation method

[x] If any non-english text was added/modified, I verified the translation was requested/reviewed in #expensify-open-source and it was approved by an internal Expensify engineer. Link to Slack message:

[x] I verified all numbers, amounts, dates and phone numbers shown in the product are using the localization methods
[x] I verified any copy / text that was added to the app is grammatically correct in English. It adheres to proper capitalization guidelines (note: only the first word of header/labels should be capitalized), and is either coming verbatim from figma or has been approved by marketing (in order to get marketing approval, ask the Bug Zero team member to add the Waiting for copy label to the issue)
[x] I verified proper file naming conventions were followed for any new files or renamed files. All non-platform specific files are named after what they export and are not named "index.js". All platform-specific files are named for the platform the code supports as outlined in the README.
[x] I verified the JSDocs style guidelines (in STYLE.md) were followed

[x] If a new code pattern is added I verified it was agreed to be used by multiple Expensify engineers
[x] I followed the guidelines as stated in the Review Guidelines
[x] I tested other components that can be impacted by my changes (i.e. if the PR modifies a shared library or component like Avatar, I verified the components using Avatar are working as expected)
[x] I verified all code is DRY (the PR doesn't include any logic written more than once, with the exception of tests)
[x] I verified any variables that can be defined as constants (ie. in CONST.js or at the top of the file that uses the constant) are defined as such
[x] I verified that if a function's arguments changed that all usages have also been updated correctly
[x] If any new file was added I verified that:

[x] The file has a description of what it does and/or why is needed at the top of the file if the code is not self explanatory

[x] If a new CSS style is added I verified that:

[x] A similar style doesn't already exist
[x] The style can't be created with an existing StyleUtils function (i.e. StyleUtils.getBackgroundAndBorderStyle(theme.componentBG))

[x] If the PR modifies code that runs when editing or sending messages, I tested and verified there is no unexpected behavior for all supported markdown - URLs, single line code, code blocks, quotes, headings, bold, strikethrough, and italic.
[x] If the PR modifies a generic component, I tested and verified that those changes do not break usages of that component in the rest of the App (i.e. if a shared library or component like Avatar is modified, I verified that Avatar is working as expected in all cases)
[x] If the PR modifies a component related to any of the existing Storybook stories, I tested and verified all stories for that component are still working as expected.
[x] If the PR modifies a component or page that can be accessed by a direct deeplink, I verified that the code functions as expected when the deeplink is used - from a logged in and logged out account.
[x] If the PR modifies the UI (e.g. new buttons, new UI components, changing the padding/spacing/sizing, moving components, etc) or modifies the form input styles:

[x] I verified that all the inputs inside a form are aligned with each other.
[x] I added Design label and/or tagged @Expensify/design so the design team can review the changes.

[x] If a new page is added, I verified it's using the ScrollView component to make it scrollable when more elements are added to the page.
[x] If the main branch was merged into this PR after a review, I tested again and verified the outcome was still expected according to the Test steps.

Screenshots/Videos

MacOS: Chrome / Safari
https://github.com/Expensify/App/assets/110545952/a47b86d0-db64-48a8-9c07-171f05ecea14

iOS: mWeb Safari
https://github.com/Expensify/App/assets/110545952/07546757-2c4a-4443-aa44-3ebb261aee61

iOS: Native
Not Reproducible as we cannot refresh screen on native

Android: mWeb Chrome
https://github.com/Expensify/App/assets/110545952/15ee77a3-cbcb-4c1a-91cd-48b1585a88a5

Android: Native
Not Reproducible as we cannot refresh screen on native

MacOS: Desktop
Not Reproducible

What's going on here. Why it says I merged it?

I see no approval here and any review from Internal team, and without that it's impossible to merge. I am pretty sure, i did not. Is something wrong with github?

very sorry I didn't see this one yet - FWIW it didn't show up in my K2 because my review was never requested. it looks like there was an instance of the same bug which was not fixed in this PR, so let's continue in the issue


Select box caret icon misplaced

Hey guys, thought you might wanna know. When validation on a select input fails, the caret icon shifts down (see the image)

Cheers!

Thanks for the heads up @MadRabbit


chore: add github action to test node tests

I haven't set up the coveralls stuff yet,   but this should be the first step in getting GH Actions to run our tests

@lholmquist I think we can merge this.
And I can work on coveralls later , I've added coveralls on oratrix and license-reporter :+1:

@helio-frota sounds good.   i saw you figured it out :+1:


feat: Support Google's Gemini

can we also add openrouter as available LLM API provider as well? It pretty much has every LLM API from anyone, and the switch cost would be minimized too..

Hi, we'll add support for custom OpenAI endpoints soon. Thanks!

@chenyuz3 You can now use OpenRouter through our OpenAI-compatible endpoints. See our wiki for more details.


IdP config | Don't provide option to configure SHARED IdP

Current Behavior

Expected Behavior

for Identity Provider with identityProviderTypeId SHARED the configure option and the according overlay should be displayed because the SHARED IdP can't be configured.
the user shouldn't be shown a option that's not viable
Steps To Reproduce

Detected in v2.3.0-RC4

Hi @MaximilianHauer @evegufy
i tested this issue it's working fine. Can you close this issue.
Attached screenshots for references


SelectNodes doesn't find some nodes by XPath

1. Description
HAP doesn't find some nodes
2. Exception
No exception
3. Fiddle or Project
Fiddle: https://dotnetfiddle.net/BbdvBN
4. Any further technical details

HAP version: 1.11.45
NET version: net6.0

Hello @synapsechain ,
Thank you for reporting, I can confirm that I get the same issue and have no problem retrieving some other elements by class name on this page.
We will investigate it.
Best Regards,
Jon

Sponsorship
Help us improve this library
Performance Libraries
context.BulkInsert(list, options => options.BatchSize = 1000);
Entity Framework Extensions • Dapper Plus
Runtime Evaluation
Eval.Execute("x + y", new {x = 1, y = 2}); // return 3
C# Eval Function

Hello @synapsechain ,
If you look the source code, you will see that the a element is in a script tag. This means this is considered as a script (used for creating template).
I believe you want the HTML once it is loaded. Since you use .NET6.0, we recommend selenium to grab to interact with HTML  (tutorial) as our library only parse the source html
Best Regards,
Jon

Thank you, Jon


Capacitor Bank + ComputerCraft problem

Hey there.
I'm currently trying to setup my reactor control with computercraft.
My script checks a connected capacitor bank and stops the reactor at 90% capacitor level.
It worked fine the last time i used it, but now i cant connect the capacitor bank.
For some reason its not possible to activate the modem connected to the capacitor bank.
Is there any known bug that i cant find? Or is there anything that has changed about that?
Sorry for my bad english, i hope its not to hard to understand.

Capacitor Banks do not support CC integration, but the mod Computronics allows that. Perhaps you uninstalled that mod between now and the last time you tried?

I never had Computronics installed.


Create PRIME CLI Grep Tool

We need a tool that will let us parse an HL7 or CSV message via the command line and do a few things:

Search for a value in a specific segment or segments in an HL7 message: ./prime grep --input sample-hl7-message.hl7 --fields "MSH-4,SPM-2" --equals "12D1212123"
Search for a value in a specific row in a CSV message: ./prime grep --input sample-csv-message.csv --input-schema primedatainput/pdi-covid-19 --fields "Ordering_facility_name" --eq "Roosevelt General Hospital"

As executed above, the tool would just output the matching lines to the terminal. You could also include a switch to output the file to a new file by doing this:
HL7
./prime grep --input sample-hl7-message.hl7 --fields "MSH-4,SPM-2" --equals "12D1212123" --output <PATH TO FILE>  --output-format HL7_BATCH
Executing the above would create an HL7 batch file with the correct header and footer information at the path provided.
CSV
./prime grep --input sample-csv-message.csv --input-schema primedatainput/pdi-covid-19 --fields "Ordering_facility_name" --eq "Roosevelt General Hospital" --output-schema direct/experity-covid-19 --output <PATH TO FILE> --output-format CSV
Executing above would output a CSV file to the path provided with the output schema selected. If no output-schema is selected the input schema is used by default. The file would also output the correct header as well.
Additional search operators include:

like - Does a case-insensitive search
contains - Does a search inside each field
neq - Matches any field that does not equal the search value
not-like - Does an negative case-insensitive search
regex - Executes a regex against the field to look for matching values

In addition, the grep command should allow us to pass in a wild card path to input multiple files and then merge them into a single file.

Would the search result output the entire segment or csv record? If output to a file for HL7, could it include the entire message or at least an option for that?

@brick-green-agile6 the goal would be to have it output the entire row/message by default. We could add an option to only output a selection of segments or columns.

@brandonnava we did not build this. It would be nice to have when things go bad and we need to resend specific messages. But that hasn't happened recently. There's not a high value use case in normal day-to-day operations.


elan device error

when i am booting i am having elan device error please help me

can you give the photo of the error


No daily batch load to BigQuery since 2024-09-01

The daily batch load to BigQuery dataset public-data-finance.crypto_polygon has seemed to stop running since 2024-09-01. Is there anyway we could resume this job?

This is true. We are waiting to see whether Polygon will re-enable the pipeline or not. In the meantime, I updated the README.md.
https://github.com/blockchain-etl/polygon-etl/pull/211


P2S VPN Article in VWAN Document

P2S VPN page In VWAN article is shown.
But my understanding is this page is for just Point to Site VPN and NOT VWAN VPN.
For example, VWAN Point-to-Site VPN scale unit doesn't support SSTP.
This is confusing.

Document Details
⚠ Do not edit this section. It is required for docs.microsoft.com ➟ GitHub issue linking.

ID: a3113b20-0f6c-988e-444b-eff387f3ffef
Version Independent ID: ded2a816-93c7-a4b3-1ec2-c29ce86cd492
Content: About Azure Point-to-Site VPN connections
Content Source: articles/vpn-gateway/point-to-site-about.md
Service: vpn-gateway
GitHub Login: @cherylmc
Microsoft Alias: cherylmc

@kariyukisusumu , We are looking into this query and will update you as soon as possible.

@kariyukisusumu , Appreciate your patience. The doc you are referring to is no more available in that section. Azure VWAN supports only IKEV2 and OPENVPN.
We are closing this issue for now. If there are further questions regarding this matter, please reply and we will gladly continue the discussion.


Add super user - 7

[Auto generated]
Number: [#7]

hive-claim-manager(g9SF9)[PR 7]: Closing issue for PR: Add super user.
PR was closed.


GraphQLObject field attribute like serde's serialize_with

When creating graphql objects using the GraphQLObject custom derive which have types that do not implement GraphQLType you end up being forced to use the #[juniper::graphql_object] proc macro and redefine methods to expose each and every field manually. It would be useful to have a #[graphql(transform = "fn_name")] field attribute that would allow users to transform the type into another ie. u64 (snowflake) to string.
example:
/// User id struct from library, so it is impossible to derive GraphQLType
pub struct UserId(pub u64);

#[derive(GraphQLObject)]
struct GraphQLObj {
    normal_string: String,
    #[graphql(transform = "ToString::to_string")]
    custom_type: UserId
}

This improvement would probably be a better solution to #553 if #769 gets implemented

Another solution could be to enable a way to make a type that implements Display implement GraphQLType


Upgrade to rails 4.2

For: https://trello.com/c/V1vsZygp/155-upgrade-rails-on-imminence
This pretty much involved upgrading almost ever dependency of the app.  We try to do as much of it before the upgrade as possible, but some of them we can only do as part of the rails bump (mongoid, formtastic, inherited_resources - I'm looking at you).  There are some extra notes about each upgrade step in the commits, so it may be worth reviewing commit-by-commit for context on some changes.
The app now uses minitest instead of test-unit and that changes how the default rake task works.  When you run bundle rake the cucumber features run first and then the tests run afterwards.  This is because minitest invokes itself with an at_exit hook rather than running the tests at the time we run the test task.  This is a bit annoying, but can't really be helped.
This will require some changes to deployment / infrastructure repos:

PR on both puppet to setup secret key as an env var (it is referenced in secrets.yml)
PR on deployment to add the secret key value
PR on alphagov-deployment to ask the deploy scripts to stop running whenever (remove require whenever/capistrano and any other references to whenever).

We may also need to review how the details for mongoid.yml in production are set up.  Unlike asset-manager we didn't already use ENV for setting things, but maybe we should?  If we want to we need to add a production stanza to mongoid.yml and issue PRs for puppet and deployment to setup those vars, and (presumably) a PR to alphagov-deployment to stop overwriting mongoid.yml.  If we don't want to at this stage we'll still need a PR on alphagov-deployment to change what the overwritten mongoid.yml looks like as with mongoid 4 things have changed.

Imminence puppet config for SECRET_KEY_BASE done in https://github.gds/gds/puppet/pull/3610.

References to whenever removed in https://github.gds/gds/alphagov-deployment/pull/1104.

LGTM :+1:


Pulling Title/Subtitle/Text from Hero Cards after Button Click (Node.js)

hey everybody,
I'm struggling to exctract information from hero cards. I want to f.e. save the title of a card after the button was hit, but I can't figure out how to access the information inside of the hero card.
If I call session.message.text for the example card below, it only returns the String of the Button - in this case 'Artikel kaufen'. But I want to get the title - is this even possible?
msg.attachmentLayout(builder.AttachmentLayout.carousel)

msg.attachments([

new
builder.HeroCard(session)

.title('Nike Girls Sneaker - Roshe One')

.subtitle('High Performance Sneaker')

.text('Some text')

.images([builder.CardImage.create(session,
'some.jpg')])

.buttons([builder.CardAction.postBack(session,
'Artikel kaufen',
'In den Warenkorb legen')])

session.send(msg);

@JoelReehe  try with below logic, it will resolved your problem,
`
var array = [];
var heroCard= new builder.HeroCard(session);
heroCard.title(playCorousalType[count]);
heroCard.images([builder.CardImage.create(session, url)]);
// heroCard.tap(builder.CardAction.openUrl(session, url));
heroCard.buttons([builder.CardAction.imBack(session, 'Artikel kaufen', "Select")]);
array.push(thumbnailCard);
}
    if (array != undefined && array.length > 0) {
        var msg = new builder.Message(session)
            .textFormat(builder.TextFormat.xml)
            .attachmentLayout(builder.AttachmentLayout.carousel)
            .attachments(array);
        builder.Prompts.choice(session, msg, 'Artikel kaufen');`

@JoelReehe Check out this article on Handling button input.
When you click on a button there is no "event handler" as you might expect in a traditional web application.  The button click sends a message to your bot, so you need to set up a dialog configured with a trigger action. Essentially, you do this by using a keyword in your button imBack message, such as "buy" or "kaufen".

The following example shows a bot for a fictional t-shirt company and shows how to send a carousel of cards in response to the user saying “show shirts”.

// Create your bot with a function to receive messages from the user
// Create bot and default message handler
var bot = new builder.UniversalBot(connector, function (session) {
    session.send("Hi... We sell shirts. Say 'show shirts' to see our products.");
});

// Add dialog to return list of shirts available
bot.dialog('showShirts', function (session) {
    var msg = new builder.Message(session);
    msg.attachmentLayout(builder.AttachmentLayout.carousel)
    msg.attachments([
        new builder.HeroCard(session)
            .title("Classic White T-Shirt")
            .subtitle("100% Soft and Luxurious Cotton")
            .text("Price is $25 and carried in sizes (S, M, L, and XL)")
            .images([builder.CardImage.create(session, 'http://petersapparel.parseapp.com/img/whiteshirt.png')])
            .buttons([
                builder.CardAction.imBack(session, "buy classic white t-shirt", "Buy")
            ]),
        new builder.HeroCard(session)
            .title("Classic Gray T-Shirt")
            .subtitle("100% Soft and Luxurious Cotton")
            .text("Price is $25 and carried in sizes (S, M, L, and XL)")
            .images([builder.CardImage.create(session, 'http://petersapparel.parseapp.com/img/grayshirt.png')])
            .buttons([
                builder.CardAction.imBack(session, "buy classic gray t-shirt", "Buy")
            ])
    ]);
    session.send(msg).endDialog();
}).triggerAction({ matches: /^(show|list)/i });

This example uses the Message class to build a carousel. The carousel is comprised of a list of HeroCard classes that contain an image, text, and a single button that triggers buying the item. Clicking the Buy button triggers sending a message so we need to add a second dialog to catch the button click.

The buyButtonClick dialog will be triggered any time a message is received that starts with “buy” or “add” and is followed by something containing the word “shirt”. The dialog starts by using a couple of regular expressions to look for the color and optional size shirt that the user asked for. This added flexibility lets you support both button clicks and natural language messages from the user like “please add a large gray shirt to my cart”. If the color is valid but the size is unknown, the bot prompts the user to pick a size from a list before adding the item to the cart. Once the bot has all the information it needs, it puts the item onto a cart that’s persisted using session.userData and then sends the user a confirmation message.

// Add dialog to handle 'Buy' button click
bot.dialog('buyButtonClick', [
    function (session, args, next) {
        // Get color and optional size from users utterance
        var utterance = args.intent.matched[0];
        var color = /(white|gray)/i.exec(utterance);
        var size = /\b(Extra Large|Large|Medium|Small)\b/i.exec(utterance);
        if (color) {
            // Initialize cart item
            var item = session.dialogData.item = {
                product: "classic " + color[0].toLowerCase() + " t-shirt",
                size: size ? size[0].toLowerCase() : null,
                price: 25.0,
                qty: 1
            };
            if (!item.size) {
                // Prompt for size
                builder.Prompts.choice(session, "What size would you like?", "Small|Medium|Large|Extra Large");
            } else {
                //Skip to next waterfall step
                next();
            }
        } else {
            // Invalid product
            session.send("I'm sorry... That product wasn't found.").endDialog();
        }
    },
    function (session, results) {
        // Save size if prompted
        var item = session.dialogData.item;
        if (results.response) {
            item.size = results.response.entity.toLowerCase();
        }

        // Add to cart
        if (!session.userData.cart) {
            session.userData.cart = [];
        }
        session.userData.cart.push(item);

        // Send confirmation to users
        session.send("A '%(size)s %(product)s' has been added to your cart.", item).endDialog();
    }
]).triggerAction({ matches: /(buy|add)\s.*shirt/i });


Roll Plugins from 0f1c20dd25c0 to 622ba57c3960 (3 revisions)

https://github.com/flutter/plugins/compare/0f1c20dd25c0...622ba57c3960
2020-12-22<EMAIL_ADDRESS>[camera] Add implementations for the torch flash mode. (flutter/plugins#3338)
2020-12-22<EMAIL_ADDRESS>Make sure saveTo returns a Future (flutter/plugins#3363)
2020-12-22<EMAIL_ADDRESS>Fix documentation (flutter/plugins#3362)
If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/flutter-plugins-flutter-autoroll
Please CC<EMAIL_ADDRESS>on the revert to ensure that a human
is aware of the problem.
To report a problem with the AutoRoller itself, please file a bug:
https://bugs.chromium.org/p/skia/issues/entry?template=Autoroller+Bug
Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+doc/master/autoroll/README.md

Commit queue failed; closing this roll.


⚠ gorzdrav.org has degraded performance

In d97d465, gorzdrav.org (https://gorzdrav.org) experienced degraded performance:

HTTP code: 200
Response time: 6300 ms

Resolved: gorzdrav.org performance has improved in 435f56b.


Running XCODE build Natively

Required Information
When Xcode build task is run on the Apple M1 machine it is using Rosetta to run the build instead of running natively. PLease provide an option to configure or some alternatives
Question, Bug, or Feature?
Type: Feature
Enter Task Name: Xcode
Environment

Server - Azure Pipelines

Agent - Private:

Any update


Unbound 1.20 Cachedb broken?

Anyone else runs the actual unbound 1.20.0 where the  cachedb don't work properly anymore?
My avg ttl goes up to 50-60ms from 4-5ms.
My setup is on a Rasperry Pi 4:
AGH (cache disabled)- Unbound (with redis cachedb) - DNScrypt
AdGuardHome resolve with <IP_ADDRESS>:53 / [::1]:53 to Unbound  ->
Unbound resolve from CacheDB or DNSCrypt with forward-addr: <IP_ADDRESS>@6053 / forward-addr: ::1@6053
Since the update from 1.19.3 to 1.20.0 there is something broken. Compiled exactly the same.
All queries are 25-30ms, although obviously the cache responds with "get".
DBSize also growning and the log from unbound is without errors.
On verbostiy lvl 4 there are entries with info: redis ;; ->>HEADER<<- so i expect that unbound resolve from cachedb, but AdGuardHome show me over 30-50ms for example resolves.
The setup is the same but something doesn't work anymore correctly... It seems that unbound doesn't respect the cache entries and resolve again...
I'm back to 1.19.3 and everything works fine again...see screenshot.
Compiling Code:
./configure --build=aarch64-linux-gnu --prefix=/usr --includedir=\${prefix}/include --infodir=\${prefix}/share/info --libdir=\${prefix}/lib/aarch64-linux-gnu --mandir=\${prefix}/share/man --localstatedir=/var --runstatedir=/run --sysconfdir=/etc --with-chroot-dir= --with-dnstap-socket-path=/run/dnstap.sock --with-libevent --with-libhiredis --with-libnghttp2 --with-pidfile=/run/unbound.pid --with-pythonmodule --with-pyunbound --with-rootkey-file=/var/lib/unbound/root.key --disable-dependency-tracking --disable-flto --disable-maintainer-mode --disable-option-checking --disable-rpath --disable-silent-rules --enable-cachedb --enable-dnstap --enable-subnet --enable-systemd --enable-tfo-client --enable-tfo-server CFLAGS="-O2"
With 1.19.3

With 1.20.0

What could be happening is that the setup includes options that now act differently for cachedb, since the release. The release fixes problems that cachedb has with them, and it works, and this may be the cause of the change. Or perhaps it is going wrong because of the change.
There was a new option introduced, cachedb-check-when-serve-expired: yes in 1.20.0, it defaults to on. If that option is disabled, then the old behaviour should appear perhaps. But I think it is likely better enabled, because then serve expired options should work properly, also with cachedb.
In particular, if cachedb is configured but also serve-expired with the serve-expired-client-timeout, then the serve-expired-client-timeout is now respected. And that means that an expired response is not sent immediately from the cachedb, but instead it attempts to fully resolve the query within the time interval. And if this works, in the case queries take 17 - 25 ms, then that answer is used. For the case the time increase with a couple msec makes it look like that could be what is going on. If it was to fail and take a longer time the cachedb expired response is then used.
So it could be that for the server the expired options have started working because of the new expired and cachedb fixes in 1.20.0, and for this reason it spends time looking up stuff, instead of immediately responding with expired answers from cachedb. If also edns client subnet is involved, there are other fixes with cachedb and serve-expired and that as well.

So here is my Unbound Configuration -- maybe i  miss something that should be changed with the new build:
server:
verbosity: 1
statistics-interval: 0
statistics-cumulative: no
extended-statistics: yes

#Modul Configuration
module-config: "validator cachedb iterator"

# |Root|
auto-trust-anchor-file: "/var/lib/unbound/root.key"
root-hints: "/var/lib/unbound/root.hints"

# Minimize logs
# Do not print one line per query to the log
log-queries: no
# Do not print one line per reply to the log
log-replies: no
# Do not print log lines that say why queries return SERVFAIL to clients
log-servfail: no
# Do not print log lines to inform about local zone actions
log-local-actions: no
# Do not print log lines that say why queries return SERVFAIL to clients
#logfile: /dev/null
#LogFile
logfile: "/var/log/unbound.log"

interface: <IP_ADDRESS>
interface: ::0
#interface-automatic: yes
do-ip4: yes
do-udp: yes
do-tcp: yes
do-ip6: yes
prefer-ip6: yes

# Only give access to recursion clients from LAN IPs
#access-control: <IP_ADDRESS>/32 allow
#access-control: <IP_ADDRESS>/16 allow
#access-control: fc00::/7 allow
#access-control: fd80::/7 allow
#access-control: fe80::/7 allow
#access-control: ::1/128 allow

# Ensure privacy of local IP ranges
private-address: <IP_ADDRESS>/16
private-address: <IP_ADDRESS>/16
private-address: <IP_ADDRESS>/12
private-address: <IP_ADDRESS>/8
private-address: fd00::/8
private-address: fe80::/10

# Unbound local queries needs to be off if using stubby or dnscrypt
do-not-query-localhost: no

use-caps-for-id: yes
harden-glue: yes
harden-large-queries: yes
harden-dnssec-stripped: yes
harden-below-nxdomain: yes
harden-algo-downgrade: yes
harden-short-bufsize: yes
harden-referral-path: no
aggressive-nsec: yes

target-fetch-policy: "-1 -1 -1 -1 -1"

edns-buffer-size: 1232

rrset-roundrobin: yes
val-clean-additional: yes

cache-min-ttl: 0
cache-max-ttl: 86400

# Prefetch
prefetch: yes
prefetch-key: yes
serve-expired: yes
serve-expired-reply-ttl: 0
so-reuseport: yes

hide-identity: yes
hide-version: yes
http-user-agent: "DNS"

do-daemonize: no
qname-minimisation: yes
deny-any: no
minimal-responses: yes

# Performance
num-threads: 4

# Cache/Slabs Settings
neg-cache-size: 4m
msg-cache-size: 128m
msg-cache-slabs: 8
rrset-cache-size: 256m
rrset-cache-slabs: 8
key-cache-size: 8m
key-cache-slabs: 8
infra-cache-slabs: 8
num-queries-per-thread: 4096
outgoing-range: 8192

incoming-num-tcp: 1000
outgoing-num-tcp: 1000

so-rcvbuf: 8m
so-sndbuf: 8m

unwanted-reply-threshold: 100000

server:
forward-zone:
	name: "."

# DNScrypt proxy
forward-addr: <IP_ADDRESS>@6053
forward-addr: ::1@6053

cachedb:
backend: redis
redis-server-path: "/var/run/redis/redis.sock"
redis-timeout: 100
redis-expire-records: no

Yes those are the changes that make things different, and the new config option can control them; if that option is turned to a different value it should behave in a different manner. And perhaps in the old manner, but I can also not be sure because I do not know what it did before and now. Perhaps it is possible to find out what it did before and now, for one query, with verbosity: 5 and then look at the output to see what it did before and what it does now.
The cachedb function changed to fix it to make this possible, previously it would not actually pick up expired data from cachedb correctly, if serve expired is enabled, but instead pick it up as briefly valid data. The change makes it pick up the data and set it expired.
Another change is perhaps that it can ignore the expired contents from the cache, in order to check the cachedb, perhaps redis is the slow component, and now that it incorporates the expired data as expired, it ignores it the next lookup, because it is expired and checks cachedb again for possibly fresh data.

Mhm.. maybe I've wait for other build and watch where it's going. Otherwise, Unbound is left on version 1.19.3. The build at least runs smoothly - at least I mean that😅

Mhm.. maybe I've wait for other build and watch where it's going. Otherwise, Unbound is left on version 1.19.3. The build at least runs smoothly - at least I mean that😅

I'm a bit confused about the cachedb-check-when-serve-expired option. From my understanding, this option is intended to check whether there are unexpired caches in the cachedb. If I set serve-expired-ttl: 0, which disables the limit, does this option become meaningless, merely adding an extra checking step that causes delays in the processing flow? Should I turn it off?

I’m encountering the same behavior with my docker setup for unbound in combination with redis. When cachedb-check-when-serve-expired is set to yes (default), queries getting a resolve time of like 20ms after some time has passed since last query (I have serve expired enabled with 24h as max TTL). When cachedb-check-when-serve-expired is set to no the expected behavior is happening, queries are instantly served from cache. Would this indicate that searching the cachedb/redis takes up to 20ms?

I don't know, but this will not make sense. The cachedb via socket is really fast and in the build 1.19.3 you can see via logs that the queries are answered from redis. The cache from unbound It's no longer active when you work with Redis. Or did I overlook something?
Fact is - in the build 1.20 is something wrong.. and the cachedb is definitely broken. The new settings are redundant and very confusing...

@whyisthisbroken i always thought redos was only used as second level cache. So unbound still uses the in memory cache, with a fallback to redis if the no record is found in the in memory cache. But I indeed see lookups to redid even when the in memory cache should have the record. I’m unsure what the new option really does…

I hope that some developer gives some clarification and can explain in an understandable way what has now been changed and why the behavior is completely different...
Until then I'll stick with 1.19.3. It just works

I hope that some developer gives some clarification and can explain in an understandable way what has now been changed and why the behavior is completely different...
Until then I'll stick with 1.19.3. It just works

Experimented a little today. When I set cachedb-check-when-serve-expired to no, queries are served immediately, even when expired. This is the expected behavior. However, when I restart unbound the same query will not immediately be returned from redis, from the logs it looks like a normal resolve takes place, which is strange in my opinion, from my understanding it should just serve the query from redis as stale record. This way using redis is only useful for non expired queries.

This is the result with 1.20 I've run now for 12h...
That's not what it should be - look all the cache misses

I'll go back to 1.19.3 - I don't know what's wrong, but as long no dev reports or a new version comes up i will not test it any further

Hi, thanks for the response.
The last part of your explanation is where I'm having trouble. When you set serve-expired-client-timeout to 0 (disabling it), serve-expired to true and cachedb-check-when-serve-expired to no, I would expect the existing expired record van de cachedb to be returned immediatelly after a reload (when the memory cache is gone). It should not wait on a new resolve, because serve-expired-client-timeout is set to 0.
But instead this response takes a couple of tens of milliseconds, indicating it waiting for a resolve. I'm not sure if this is a bug or I'm misunderstanding something.

Well with the new option to no, it does the previous behaviour. So that would be the same as 1.19 does.
Perhaps redis is that slow, that could be visible from the logs to see what part is slow. It would be useful to have an option that logs milliseconds for that, but log-time-ascii does not do it. Or it is resolving before the expired response but I also do not know why it would, but see below how I do, if that is broken, intend to then remove the option altogether and not fix it.
Regardless of these issues, the fix with the new option yes it really a mandatory fix. Without it the serve-expired-client-timeout does not work. Also without it the information about a domain can fluctuate between different versions of the zone, once it is updated and also expired. The fix improves consistency and makes the serve expired options actually work, so the option turned on is a nicety. Realistically I think it should be removed and the current default the only choice, also the 1.19 behaviour, regardless of whether it was nice for you, has to go, because the bug has to be fixed for it. That said, it should also work, in this case. Once we figure out what that is, or what the problem, if any, is in this case.

I was not specifically referring to 1.19. I myself do not have the option to test that version at the moment. I was just wondering how the current setting works. I will try to look in the logging if I can find something about slowness.
The problem I had with setting cachedb-check-when-serve-expired to yes, is that now and then some expired entries did take additional time to resolve which could indeed indicate a problem with redis. I would have to investigate this further.

Well if the cache has an expired message, then with the new option enabled, it will actually check cachedb for a fresh new message. This is perhaps the change in behaviour that is the trouble.

So if I understood that correctly and I set "Check cachedb" to "No", even after a restart is no longer accessed by Unbound?So the whole Redis story would be superfluous and since it is no longer checked whether data is in the DB. This results in the Redis completely unnecessary, because the time for Redis is sometimes slower than if I let it resolve again from Unbound...
Well... I think I go without redis and use unbound without persistent cache...maybe the best and fastest solution.

I’ve checked the logs again, from what I can see the time is coming from cached entries which needs validation before being served:
[1715628891] unbound[1:1] debug: Serve expired: Trying to reply with expired data
[1715628891] unbound[1:1] debug: Serve expired: unchecked entry needs validation
This causes a resolve to happening sometimes, which explains the time elapsed. But I wonder what the purpose is of having a cachedb if eventually a resolve is needed anyway.

Based on the conversation, I wonder if the cachedb-check-when-serve-expired option is unnecessary for a single-instance setup of Unbound. Here is my understanding:

No Cached Result in Unbound: If there's no cached result in Unbound, it should check Redis for a cache. If Redis has a valid cache, it would provide the result unquestionably. If the Redis cache is expired, whether to use this expired result depends on the serve-expired-ttl setting. This behavior seems unrelated to the cachedb-check-when-serve-expired option.

Valid Cached Result in Unbound: If Unbound has a valid cached result, it will return this result directly, which again, has no relation to the cachedb-check-when-serve-expired option.

Expired Cached Result in Unbound: Here's where it gets interesting. In my understanding, the cachedb-check-when-serve-expired option would matter in this case. If set to no, it should behave like the first scenario, where the use of the expired result depends on the serve-expired-ttl setting, without checking Redis. If set to yes, it might try to check Redis for a non-expired result. This seems ideal; however, theoretically, if I'm running a single-instance of Unbound with Redis, and Redis data is always lagging behind Unbound, then checking seems unnecessary. Because if there is fresher data, it would definitely exist in Unbound’s cache rather than in Redis’s cache. Therefore, any data expired in Unbound’s cache would likely also be expired in Redis’s cache, if it exists at all.

Based on this analysis, it seems to me that this option would only add unnecessary Redis checks for a single-instance of Unbound. I'm not sure if my understanding is correct. It's just a summary based on the conversation and developers' explanations. Please feel free to correct any errors.

@kkkgo You are mostly right indeed. That’s why the option cachedb-check-when-serve-expired is mandatory in this case and in your situation it would probably be better to set it to no.
In step 3 it is theoretically possible to have fresh records if your restart unbound which will delete the in memory cache. But today’s TTL’s are so low that this chance is also low.
So basically the option cachedb-check-when-serve-expired is useful in the end and I don’t think it should be left out. The only thing I wonder is why there happens to be a resolve after getting the item out of the cachedb, in my opinion it should be served immediately if serve-expired is enabled and the time is within serve-expired-ttl.

@jcbvm  When you restart Unbound, it's essentially equivalent to scenario 1, as described above. In this case, I believe it is unrelated to the cachedb-check-when-serve-expired option.

So, for me the issue is closed. But I left it open for others.
I completely removed redis. So I don't have this high resolution times...
For me, Redis is no longer an alternative than a secondary cache with the new options. It's not worth looking for an entry via Redis if it's faster to resolve again.

Yes, these changes appear to completely break the use of cachedb.  Prior to 1.20.0, I used cachedb + redis to provide a cache following a restart of the Unbound service or reboot of the DNS server, but now Unbound essentially doesn't use redis at all.
Instead of returning an entry from the redis cache following a reboot, Unbound does to do a lookup instead (?), even if the lookup takes a long time (e.g., 200ms on some test domains).  This all happens even if "serve-expired-client-timeout" is set to zero (and I have "service-expired-ttl" set to "259200" as well).  Maybe there is some millisecond comparison going on in Unbound, but I have to believe that a 200ms DNS lookup is a couple of orders of magnitude slower than looking up an entry from redis...

In have a log file here with verbosity 4. It looks at the cached and finds an item. But instead of serving it right away it starts resolving. Inhale serve-expired-client-timeout on 0 and serve-expired-ttl on 1 day.
Example.log

What I am seeing is that if the cachedb entry hasn't expired, it returns the cachedb entry and doesn't resolve and is done - so this situation works correctly.  However, if the cachedb entry has expired, now in 1.20.0 it ignores the cachedb entry and resolves instead, blocking the return of the record until it is resolved, and then it returns the new resolved records.
It shouldn't do this if "serve-expired-client-timeout" is zero and "serve-expired-ttl" is set to 1-3 days, right?  Why doesn't it return the expired record with TTL 0 and then resolve in background, like it did previously to 1.20.0?  This new behavior makes cachedb useless except for cases where the Unbound cache happens to be cleared within the record's TTL (?), which seems to be very unlikely to normally occur...?
[1715966761] unbound[2363:3] info: ::1 www.st.com. A IN
[1715966761] unbound[2363:3] debug: mesh_run: start
[1715966761] unbound[2363:3] debug: validator[module 0] operate: extstate:module_state_initial event:module_event_new
[1715966761] unbound[2363:3] info: validator operate: query www.st.com. A IN
[1715966761] unbound[2363:3] debug: validator: pass to next module
[1715966761] unbound[2363:3] debug: mesh_run: validator module exit state is module_wait_module
[1715966761] unbound[2363:3] debug: cachedb[module 1] operate: extstate:module_state_initial event:module_event_pass
[1715966761] unbound[2363:3] debug: redis_lookup of 25B7D0C0AE8DC78B407DBAD8372071F1E2B8D5C31FB47D8DBA65D2C05FAC8F22
[1715966761] unbound[2363:3] debug: redis_lookup found 213 bytes
[1715966761] unbound[2363:3] debug: cachedb msg expired
[1715966761] unbound[2363:3] debug: cachedb msg adjusted down by -1
[1715966761] unbound[2363:3] info: redis ;; ->>HEADER<<- opcode: QUERY, rcode: NOERROR, id: 0
;; flags: qr rd ra ; QUERY: 1, ANSWER: 5, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
www.st.com.     IN      A

;; ANSWER SECTION:
www.st.com.     0       IN      CNAME   www.st.com.edgekey.net.
www.st.com.edgekey.net. 0       IN      CNAME   www.st.com.edgekey.net.globalredir.akadns.net.
www.st.com.edgekey.net.globalredir.akadns.net.  0       IN      CNAME   e40218.b.akamaiedge.net.
e40218.b.akamaiedge.net.        0       IN      A       <IP_ADDRESS>
e40218.b.akamaiedge.net.        0       IN      A       <IP_ADDRESS>

;; AUTHORITY SECTION:

;; ADDITIONAL SECTION:
;; MSG SIZE  rcvd: 186

[1715966761] unbound[2363:3] debug: Serve expired: Trying to reply with expired data
[1715966761] unbound[2363:3] debug: Serve expired: unchecked entry needs validation
[1715966761] unbound[2363:3] debug: mesh_run: cachedb module exit state is module_wait_module
[1715966761] unbound[2363:3] debug: iterator[module 2] operate: extstate:module_state_initial event:module_event_pass
[1715966761] unbound[2363:3] debug: process_request: new external request event
[1715966761] unbound[2363:3] debug: iter_handle processing q with state INIT REQUEST STATE
[1715966761] unbound[2363:3] info: resolving www.st.com. A IN
[1715966761] unbound[2363:3] debug: request has dependency depth of 0
[1715966761] unbound[2363:3] info: priming . IN NS
[1715966761] unbound[2363:3] debug: mesh_run: iterator module exit state is module_wait_subquery
[1715966761] unbound[2363:3] debug: iterator[module 2] operate: extstate:module_state_initial event:module_event_pass
[1715966761] unbound[2363:3] info: iterator operate: query . NS IN
[1715966761] unbound[2363:3] debug: iter_handle processing q with state QUERY TARGETS STATE
[1715966761] unbound[2363:3] info: processQueryTargets: . NS IN
[1715966761] unbound[2363:3] debug: processQueryTargets: targetqueries 0, currentqueries 0 sentcount 0
[1715966761] unbound[2363:3] info: DelegationPoint<.>: 13 names (0 missing), 26 addrs (0 result, 26 avail) parentNS
[1715966761] unbound[2363:3] info:   A.ROOT-SERVERS.NET. * A AAAA
[1715966761] unbound[2363:3] info:   B.ROOT-SERVERS.NET. * A AAAA
[1715966761] unbound[2363:3] info:   C.ROOT-SERVERS.NET. * A AAAA
[1715966761] unbound[2363:3] info:   D.ROOT-SERVERS.NET. * A AAAA
[1715966761] unbound[2363:3] info:   E.ROOT-SERVERS.NET. * A AAAA
[1715966761] unbound[2363:3] info:   F.ROOT-SERVERS.NET. * A AAAA
              ...

For what it's worth (which is almost certainly not very much), undoing one of the changes made in https://github.com/NLnetLabs/unbound/commit/7c5e765b3bb281a3a66741c1f340a0ba6162142c appears to work around these new issues with cachedb being broken for the "serve-expired-client-timeout: 0" case:
--- cachedb.c   2024-05-19 10:13:35.595468320 -0700
+++ cachedb.c   2024-05-19 10:20:36.734117348 -0700
@@ -827,7 +827,8 @@
                 * TODO: this needs revisit. The expired data stored from cachedb has
                 * 0 TTL which is picked up by iterator later when looking in the cache.
                 */
-               if(qstate->env->cfg->serve_expired && msg_expired) {
+               if(qstate->env->cfg->serve_expired && msg_expired &&
+                       qstate->env->cfg->serve_expired_client_timeout) {
                        qstate->return_msg = NULL;
                        qstate->ext_state[id] = module_wait_module;
                        /* The expired reply is sent with

With this change everything works again, just like it used to (i.e., prior to 1.20.0).

The commit https://github.com/NLnetLabs/unbound/commit/fbdc06ebc451aa27d45358e8c17cf458cb364132 contains a fix for the example log and for the excerpt posted. It sets the dnssec validation status of the expired cachedb contents to insecure. This allows it to be returned to the client when DNSSEC is enabled. Otherwise it would need dnssec validation, but the message is expired and the validator does not work on that; it works on currently looked up data. With the fix, I think, it is going to make the two examples return an expired reply straight away, and then also continue to resolve. The fixup suggested points in the right direction, but is not the fix to use; it would return a full reply but not resolve a fresh entry.

Hi @wcawijngaards, thanks for the change!  I have a couple of questions:  Will this change work with DNSSEC validation disabled (as I am not using DNSSEC)?  It does seem to be okay for this case.  Also, this change requires "cachedb-check-when-serve-expired" to be enabled, correct?
I did some quick tests and this new change appears to address the issue, albeit behavior is now a bit different than in 1.19.x (?).  I just want to confirm:  Instead of returning a zero (0) TTL from the cachedb result, it now returns the value for "serve-expired-reply-ttl" (which appears to make more sense than zero anyway).
Thank you!

I have the same question. Does this fix address the case when cachedb-check-when-serve-expired is set to yes? If I set cachedb-check-when-serve-expired to no, will it have the same effect? In a scenario where the in-memory cache always has fresher DNS records than Redis, wouldn't it be more appropriate to set it to no?

Yes it would work with validation disabled. In fact, things should already work for that. It requires the cachedb-check-when-serve-expired. It could apply when that is disabled too, but I wanted to preserve the old behaviour that you are asking for.
That the serve-expired-reply-ttl is honored, is a new feature for the cachedb-check-when-serve-expired option, also the serve-expired-client-timeout works. It is nice that it works.
Supposedly when cachedb-check-when-serve-expired is disabled, then it should already be working like in previous versions and no change needed. Hence the fix does not change that.

Thank you for taking the time for this issue and for the provided fix.

+1 @wcawijngaards - the new behavior does work nicely, thank you very much for looking into this and addressing it!


test-branch/execute-job/wrong-comment-on-pr/b836c654-6a94-42e7-8baf-713b466ba59d

PR for testing 7ae95f32d591848f6e3713d70dab2c22ceeb0327

comment 1


Wrong CVL shown on GUI Parameters page on 1.2.20240309dev

Describe the bug
In the parameters page on GUI instead of the programed CVL or any reduced value computed by the driver, its showing a value that could be either SOC_RESET_VOLTAGE or CELL_VOLTAGES_WHILE_CHARGING   =.
How to reproduce
Just set thouse 3 values different, reload the driver and check the CVL in Parameters page.
Expected behavior
It should show the CVL, 3.6v x 4cells 14.4V, in my setup. or a reduced parameter computed depending on the driver setup (reduced figure).

Driver version
1.1.20240309dev
Venus OS device type
Cerbo GX
Venus OS version
3.14
BMS type
Smart BMS (LLT, JBD, Overkill Solar)
Cell count
4
Battery count
1
Connection type
Bluetooth
Config file
[DEFAULT]

; If you want to add custom values/settings, then check the values/settings you want to change in "config.default.ini"
; and insert them below to persist future driver updates.

; Example (remove the semicolon ";" to uncomment and activate the value/setting):
MAX_BATTERY_CHARGE_CURRENT = 150.0
MAX_BATTERY_DISCHARGE_CURRENT = 150.0
MIN_CELL_VOLTAGE   = 2.900
MAX_CELL_VOLTAGE   = 3.600
FLOAT_CELL_VOLTAGE = 3.400
BLUETOOTH_BMS = LltJbd_Ble A5:C2:37:05:95:9E, LltJbd_Ble A5:C2:37:05:95:B6
BLUETOOTH_USE_USB = True
SOC_RESET_VOLTAGE  = 3.610
SOC_RESET_AFTER_DAYS =30
LINEAR_LIMITATION_ENABLE = True
LINEAR_RECALCULATION_EVERY = 120
LINEAR_RECALCULATION_ON_PERC_CHANGE = 5
CVCM_ENABLE = True
CCCM_CV_ENABLE = True
DCCM_CV_ENABLE = True
CELL_VOLTAGES_WHILE_CHARGING   = 3.61, 3.55, 3.50, 3.45
MAX_CHARGE_CURRENT_CV_FRACTION =    0, 0.05,  0.5,   1
CELL_VOLTAGES_WHILE_DISCHARGING   = 2.70, 2.80, 2.90, 3.10
MAX_DISCHARGE_CURRENT_CV_FRACTION =    0,  0.1,  0.5,    1
TEMPERATURES_WHILE_CHARGING      =    0,    2,    5,   10,   12,  15, 20, 45,  48,  55,    60, 65
MAX_CHARGE_CURRENT_T_FRACTION    = 0.00, 0.11, 0.11, 0.37, 0.5 , 0.5,  1,  1, 0.8, 0,5,  0.27,  0
TEMPERATURES_WHILE_DISCHARGING   = -35,  -30,  -15,  -10,   -5,    0,    5,   10,   15,   20,  25,  60, 65
MAX_DISCHARGE_CURRENT_T_FRACTION =0.00, 0.13, 0.25, 0.63, 1.00, 1.06, 1.13, 1.22, 1.32, 1.41, 1.5, 1.5,  0
SOC_WHILE_CHARGING                 =  100,   99,   81,   80
MAX_CHARGE_CURRENT_SOC_FRACTION    = 0.80, 0.80, 0.80, 1.00
SOC_WHILE_DISCHARGING              =    0,    5,   10,   15,   20
MAX_DISCHARGE_CURRENT_SOC_FRACTION = 0.00, 0.10, 0.20, 0.50, 1.00
CCCM_SOC_ENABLE = False
DCCM_SOC_ENABLE = False
TIME_TO_GO_ENABLE = True
TIME_TO_SOC_POINTS = 30, 20, 0
TIME_TO_SOC_VALUE_TYPE = 2
TIME_TO_SOC_RECALCULATE_EVERY = 180
TIME_TO_SOC_INC_FROM = False
TEMP_BATTERY = 1
TEMP_1_NAME = T Celdas
BATTERY_CELL_DATA_FORMAT = 1
SOC_LOW_WARNING = 30
SOC_LOW_ALARM   = 20

Relevant log output
none

2024-03-11 14:35:59.986961500 INFO:SerialBattery:publish config values = True
2024-03-11 14:37:38.928582500 ERROR:SerialBattery:>>> ERROR: BMS send insufficient data. Received 40 expected 41
2024-03-11 14:38:34.949524500 ERROR:SerialBattery:>>> ERROR: BMS send insufficient data. Received 40 expected 41
2024-03-11 14:38:47.894933500
2024-03-11 14:38:47.894941500 INFO:Bluetooth details
2024-03-11 14:38:47.998967500 Attempting to disconnect from A5:C2:37:05:95:B6
2024-03-11 14:38:47.998977500 Successful disconnected
tail: /data/log/dbus-blebattery.1/current has been replaced; following end of new file
2024-03-11 14:38:53.133639500
2024-03-11 14:38:55.751758500 INFO:SerialBattery:
2024-03-11 14:38:55.752660500 INFO:SerialBattery:Starting dbus-serialbattery
2024-03-11 14:38:55.755409500 INFO:SerialBattery:Venus OS v3.14
2024-03-11 14:38:55.756286500 INFO:SerialBattery:dbus-serialbattery v1.2.20240309dev
2024-03-11 14:39:12.593260500 INFO:SerialBattery:Init of LltJbd_Ble at A5:C2:37:05:95:B6
2024-03-11 14:39:12.593269500 INFO:SerialBattery:Test of LltJbd_Ble at A5:C2:37:05:95:B6
2024-03-11 14:39:20.046435500 INFO:SerialBattery:Connection established to LltJbd_Ble
2024-03-11 14:39:20.047454500 INFO:SerialBattery:Battery LltJbd_Ble connected to dbus from ble_a5c2370595b6
2024-03-11 14:39:20.048338500 INFO:SerialBattery:========== Settings ==========
2024-03-11 14:39:20.049284500 INFO:SerialBattery:> Connection voltage: 13.3V | Current: 13.87A | SoC: 54.07%
2024-03-11 14:39:20.050267500 INFO:SerialBattery:> Cell count: 4 | Cells populated: 4
2024-03-11 14:39:20.051130500 INFO:SerialBattery:> LINEAR LIMITATION ENABLE: True
2024-03-11 14:39:20.052041500 INFO:SerialBattery:> MIN CELL VOLTAGE: 2.9V | MAX CELL VOLTAGE: 3.6V
2024-03-11 14:39:20.052925500 INFO:SerialBattery:> MAX BATTERY CHARGE CURRENT: 150.0A | MAX BATTERY DISCHARGE CURRENT: 150.0A
2024-03-11 14:39:20.053877500 INFO:SerialBattery:> MAX BATTERY CHARGE CURRENT: 160.0A | MAX BATTERY DISCHARGE CURRENT: 160.0A (read from BMS)
2024-03-11 14:39:20.054928500 INFO:SerialBattery:> CVCM:     True
2024-03-11 14:39:20.055939500 INFO:SerialBattery:> CCCM CV:  True  | DCCM CV:  True
2024-03-11 14:39:20.056975500 INFO:SerialBattery:> CCCM T:   True  | DCCM T:   True
2024-03-11 14:39:20.058007500 INFO:SerialBattery:> CCCM SOC: False | DCCM SOC: False
2024-03-11 14:39:20.059056500 INFO:SerialBattery:Serial Number/Unique Identifier: a5c2370595b6
2024-03-11 14:39:23.618286500 INFO:SerialBattery:Found existing battery with DeviceInstance = 3
2024-03-11 14:39:24.120707500 INFO:SerialBattery:DeviceInstance = 3
2024-03-11 14:39:24.123071500 INFO:SerialBattery:PID file created successfully: /var/tmp/dbus-serialbattery_3.pid
2024-03-11 14:39:24.124043500 INFO:SerialBattery:Used DeviceInstances = ['1', '2', '3']
2024-03-11 14:39:24.125264500 INFO:SerialBattery:com.victronenergy.battery.ble_a5c2370595b6
2024-03-11 14:39:24.276508500 [CHG] Device A5:C2:37:05:95:B6 RSSI: -60
2024-03-11 14:39:24.276518500 [CHG] Device A5:C2:37:05:95:B6 RSSI: -62
2024-03-11 14:39:25.734962500 INFO:SerialBattery:publish config values = True

Any other information that may be helpful
No response

Sorry I can't follow you. You set SOC_RESET_VOLTAGE  = 3.610 which is with 4 cells exactly 14.44 V.
Absorption/Bulk & SoC Reset = SOC_RESET_VOLTAGE * cell_count
Absorption/Bulk = MAX_CELL_VOLTAGE * cell_count
Float = FLOAT_CELL_VOLTAGE * cell_count

Next weekend I'm planing to go and check settings. Now I'm confused about your reply. Lack of knowledge from my side sure. I though soc reset is related to the 100% reset of SOC. Functionality I shouldn't be using as not active in config.ini. Will have a look this weekend.  Sorry for the prompt.

Functionality I shouldn't be using as not active in config.ini.

Did you read the config.default.ini descriptions?
https://github.com/Louisvdw/dbus-serialbattery/blob/ac892a108ee8623effeac23ff64c899d0de32c18/etc/dbus-serialbattery/config.default.ini#L44-L54
You set SOC_RESET_AFTER_DAYS =30.

Yes, ofc. How come if not....
But some times we mesh... im not planing to implement this functionality.  I'm testing step by step. Now I'm with temperature compensation as single battery temperature ntc was fixed short time a go. Next will be SOC CCL limitations and with that I'll have my CATL 228A cells specs all programed.
If you want we may remove all this issue as is not a Bug and rather my failure.

I already switched it from a bug to a support request.


Update README.md

Fix documentation referencing distutils. See https://github.com/uwescience/shablona/issues/7 for discussion.

Thanks!

Thanks!


Chain devil has a wrong Challenge Rating

The Chain Devil's CR is listed in the json as 11, but in the actual SRD, it's 8.

On checking again, there are a few other things incorrect about the Chain Devil.  The passive perception is listed as 8 instead of 11, and its saving throw modifiers aren't specified (should be Con +7, Wis +4, Cha +5).
Were these lists hand-made or generated?  If the generator has issues with things (perhaps the Bone Devil has an issue because the page wraps before the stat block), other monsters might have issues when their stat blocks aren't where expected.

I'm 100% not sure how the lists were made. I assume hand-made? But really unsure since I didn't create it. I just stumbled into maintaining it 😅 .
I don't think the saving throw modifiers are specified on any monsters at this point. But it would be great to see them.
I'll spin up a quick PR with the CR and perception changes on Chain Devil though.

The saving throw modifiers are specified on at least some other monsters as {attribute}_save.  See, for instance: https://github.com/adrpadua/5e-database/blob/master/5e-SRD-Monsters.json#L10706
I was looking into possibly generating the monster json from the source SRD, but the PDF isn't very parseable, unfortunately.

I've added those fixes at least. It seems like we're missing for others though? There also might be a better way to organize that data.

Oh you're right, we do have the saves like that whenever we have it in the MM.

I guess it's only in there if the save is different then the base modifier. Fixed.


[FLINK-35401][Connectors/Sqs] Add Sqs Table API connector

Purpose of the change
Implements the Table API for the Sqs Sink Connector.
Verifying this change

Added unit tests
Manually verified by running the SQS connector against real SQS resoruce.

Significant changes
(Please check any boxes [x] if the answer is "yes". You can first publish the PR and check them afterwards, for convenience.)

[x] Dependencies have been added or upgraded
[x] Public API has been changed (Public API is any class annotated with @Public(Evolving))
[ ] Serializers have been changed
[x] New feature has been introduced

If yes, how is this documented? FLINK-36079

@hlteoh37 Since you reviewed the datastream connector, could you please take a look?

@hlteoh37 Thanks for the review, Addressed now!

@hlteoh37 gentle reminder if you have any other feedback

Have the sink been implemented without considering the implementation of the source?

@hlteoh37 thanks, I guess there is an intermittent issue with the CI.
@maoxingda The SqsDynamicTableFactory could be extended to create Table Api for source, this is usually the pattern, this ofc is pending the datastream implementation for sqs source.

@maoxingda We do have an SQS source being implemented. However, at this time, it is not ready to be released yet. https://cwiki.apache.org/confluence/display/FLINK/FLIP-477+Amazon+SQS+Source+Connector
The reason is that the Source is much more complex than the Sink (given the exactly-once semantics)


Add produce filter that can validate records meet some criteria

Type of change

Enhancement / new feature

Description
Some organisations might want stronger guards against invalid records being produced to Kafka. The existing schema support is client side and there is no protection against some client coming along and pushing unexpected bytes to your topic, which could require manual intervention at the consumer if it cannot progress past the unexpected record.
If the filter finds any invalid records in a Produce request:

If the filter finds that all topic-partition data in a request has any invalid record in them, it generates a response marking all topic-partitions as failed with error and responds to the client without proxying.
If the request has a transactionalId, it generates a response marking all topic-partitions as failed with error and responds to the client without proxying.
If the user has specified that they do not want to forward partial produce data,i t generates a response marking all topic-partitions as failed with error and responds to the client without proxying.
If the user has specified that they do want to forward partial produce data then all topic-partitions containing only valid records are sent to the proxied broker. When the response from the broker is intercepted, all failed topic-partitions are augmented into the response with corresponding error codes and messages.

This feature is built on the assumption that one topic should have one validator. We use Rules to determine which validation to apply to a given topic. By iterating through the rules in the order they are declared, checking if a topic's name matches each rule, we locate the first matching rule. If no rule is matched this way we can configure a default validation rule to be applied. Note: the rules application is calculated once per topic and then cached in a map.
For example, this configuration has a rule for topic "one" and topic "two", plus a customised default rule:
- type: ProduceValidator
  config:
    defaultRule:
      valueRule:
        allowNulls: true
        allowEmpty: false
    rules:
    - topicNames:
      - one
      valueRule:
        syntacticallyCorrectJson:
          validateObjectKeysUnique: true
    - topicNames:
      - two
      valueRule:
        allowNulls: false
        allowEmpty: false

The first validation implemented is JSON syntax validation, checking if the value is well-formed JSON. The user can optionally enable it to validate the uniqueness of keys in JSON objects.
This is built with flexibility in the YAML configuration and implementation in mind, so that further validations can be plugged in later. For example it would be great to integrate with Schema registries to check that the data is encoded using a schema.

I've been hacking on apicurio integration and it has exposed some things that might be worth changing about the APIs.
When you use Apicurio's kafka-client integration (using default apicurio producer config), it uses the message headers to pass schema groupId/artifactId/version. The BytebufValidatorinterface currently only knows about a buffer and length to read from it. So we either need to pass down the headers, or we could find some alternative like removing theBytebufValidatorinterface and useRecordValidatorto do the same work. So we would makeRecordValidators` that can configurably target the key or value. This feels better to me as we will have the entire record available for future Validators to work with.

How will the filter handle compressed records?  I think by default it should be prepared to uncompress the record so it can be subjected to the validations.  This should probably be configurable too.

How will the filter handle compressed records? I think by default it should be prepared to uncompress the record so it can be subjected to the validations. This should probably be configurable too.

Compression is at the RecordBatch level, it transparently decompresses them when you iterate over the Records of the batch. So we should be working with decompressed bytes already. I'll check this tomorrow though.

Have confirmed all JsonSyntaxValidationIT cases pass if you set compression.type=gzip


checkToggleState macro has dangling else.

#define CHECK_TOGGLE_STATE(state, enum) if(!oldState || oldState->mDesc.state != mDesc.state) if(mDesc.state) glEnable(enum); else glDisable(enum)

is used in three places (defined in gfxGLStateBlock.cpp), and needs the addition of at least one set of curly braces. I'm fairly sure that else should be attached to the inner if, but a second pair of eyes would be good.

should throw in { } for clarity yeah. although I'm pretty sure from eyeballing it the else is hitting the second if.

Indeed. It should be changed to something like this:
#define CHECK_TOGGLE_STATE(state, enum) \
   if(!oldState || oldState->mDesc.state != mDesc.state) \
   { \
      if(mDesc.state) \
         glEnable(enum); \
      else \
         glDisable(enum) \
   }

What I ended up doing this end (and aparantly forgot to throw over) is
#define CHECK_TOGGLE_STATE(state, enum) if(!oldState || oldState->mDesc.state != mDesc.state) {if(mDesc.state) glEnable(enum); else glDisable(enum);}
That satisfy folks?


kong2tf -g typically used in combination with gateway dump --with-id

Explain that the -g flag is typically used in combination withdeck gateway dump --with-id.
Checklist

[x] Review label added
[ ] Conditional version tags added, if applicable.

@mheap https://github.com/Kong/deck/pull/1448


Move EmsRefresh spec helper methods to core

Move these helper methods of of the vmware repo to core.  VMware and
Azure have similar methods and every provider with graph and classic
refresh can benefit from these methods.
This can be used to confirm the exact correctness of inventory between
two different methods, e.g. classic then graph refresh or full refresh
then targeted refresh:
Example:
  it "Classic same as graph refresh" do
    stub_settings_merge(:ems_refresh => {:scvmm => {:inventory_object_refresh => true}})
    EmsRefresh.refresh(@ems)
    inventory_after_graph_refresh = serialize_inventory

    stub_settings_merge(:ems_refresh => {:scvmm => {:inventory_object_refresh => false}})
    EmsRefresh.refresh(@ems)
    inventory_after_classic_refresh = serialize_inventory

    assert_inventory_not_changed(inventory_after_classic_refresh, inventory_after_graph_refresh)
  end

  1) ManageIQ::Providers::Microsoft::InfraManager::Refresher Classic same as graph refresh
     Failure/Error: assert_inventory_not_changed(inventory_after_classic_refresh, inventory_after_graph_refresh)

       GuestDevice ID [46000000000313]
       expected: {"id"=>46000000000313, "device_name"=>"Ethernet", "device_type"=>"ethernet", "location"=>"PCI bus 16, device 0, function 1", "filename"=>nil, "hardware_id"=>46000000000425, "mode"=>nil, "controller_type"=>"ethernet", "size"=>nil, "free_space"=>nil, "size_on_disk"=>nil, "address"=>"5C:F3:FC:1C:86:1E", "switch_id"=>46000000000049, "lan_id"=>nil, "model"=>"Broadcom BCM5709S NetXtreme II GigE (NDIS VBD Client) #52", "iscsi_name"=>nil, "iscsi_alias"=>nil, "present"=>true, "start_connected"=>true, "auto_detect"=>nil, "uid_ems"=>"96b9ae95-267d-4f54-a231-1fc9f8a044d2", "chap_auth_enabled"=>nil, "manufacturer"=>nil, "field_replaceable_unit"=>nil, "parent_device_id"=>nil, "vlan_key"=>nil, "vlan_enabled"=>nil, "peer_mac_address"=>nil}
       got:      {"id"=>46000000000313, "device_name"=>"Ethernet", "device_type"=>"ethernet", "location"=>"PCI bus 16, device 0, function 1", "filename"=>nil, "hardware_id"=>46000000000425, "mode"=>nil, "controller_type"=>"ethernet", "size"=>nil, "free_space"=>nil, "size_on_disk"=>nil, "address"=>"5C:F3:FC:1C:86:1E", "switch_id"=>nil, "lan_id"=>nil, "model"=>"Broadcom BCM5709S NetXtreme II GigE (NDIS VBD Client) #52", "iscsi_name"=>nil, "iscsi_alias"=>nil, "present"=>true, "start_connected"=>true, "auto_detect"=>nil, "uid_ems"=>"96b9ae95-267d-4f54-a231-1fc9f8a044d2", "chap_auth_enabled"=>nil, "manufacturer"=>nil, "field_replaceable_unit"=>nil, "parent_device_id"=>nil, "vlan_key"=>nil, "vlan_enabled"=>nil, "peer_mac_address"=>nil}
       Diff:
       @@ -22,7 +22,7 @@
        "size" => nil,
        "size_on_disk" => nil,
        "start_connected" => true,
       -"switch_id" => nil,
       +"switch_id" =><PHONE_NUMBER>0049,
        "uid_ems" => "96b9ae95-267d-4f54-a231-1fc9f8a044d2",
        "vlan_enabled" => nil,
        "vlan_key" => nil,

Follow ups:
https://github.com/ManageIQ/manageiq-providers-scvmm/pull/112
https://github.com/ManageIQ/manageiq-providers-vmware/pull/396

@agrare Can you look at the rubocops...I think it's complaining because it thinks you double-indented...
            expect(item_before).to eq(item_after), <<~SPEC_FAILURE
                #{model} ID [#{item_before["id"]}]
                expected: #{item_before}
                got:      #{item_after}
#           ^^   -------------------------------------- indent 1
#             ^^ -------------------------------------- indent 2
              SPEC_FAILURE

@Fryguy :+1: done

I'll merge as is, since this is a copy from providers, but we may want to consider a future change where we build up all of the items and present them all (or at least the first 10 or something).  This way it's not a death of 1000 cuts as you fix the item presented, and then the next item fails, etc, etc.

Looks like a sporadic failure


Enhance search matching

Games with common names can easily get multiple results. Sometimes the expected result won't even be a result returned by the api:

Paginate through results as needed
Better method of selecting a default result than just using the first result.

Updated search results list to sort by name similarity - https://github.com/sharkusmanch/playnite-pcgamingwiki-metadata-provider/blob/603f239c380b47b3b5d37ade0087b894eebc99b9/PCGWClient.cs#L87


Only update devel

Hi there,
I would very much appreciate some help on how to only update --devel packages.
I assumed the following should work to update only --devel packages:
 pacaur -u --devel

However, this also includes "normal" AUR packages for which an update is available.
Many thanks for your advice.
Robert

@rmarquis
Thanks! The --ignore`` flag seems sufficient as I only wanted to prevent dropbox` from updating.


fix: move @types/i18next-fs-backend dep to dev-deps

Purpose
Avoid having "@types/i18next-fs-backend"  as a dep.
tldr; if latest@types/i18next-fs-backend" (> 1.1.0), it will install i18next v21... we'll have both versions hoisted. I suspect packages managers (yarn/npm/pnpm), webpack (4/5), node resolutions (ssr) to give different results leading to bugs like https://github.com/isaachinman/next-i18next/issues/1443
Possible explanation
Why the @types/i18next-fs-backend": "^1.0.0" is problematic here.

1.0.0 depends on i18next 19 (that will be installed)
1.0.1 (no deps)
1.1.2 depends on i18next 21 (that will be installed)

PS: There's not yet official types for i18next-fs-backend, see https://github.com/i18next/i18next-fs-backend/issues/20
I'm not sure about the move to devDeps, I could have locked it to 1.0.1 but I haven't seen a re-export of it. So it should be fine. (@isaachinman can you confirm ?, Otherwise we could lock the version or move it to optional peer-deps. If some projects relies on those types, they might have to explicitly add them, not technically a BC but who knows ?)
I've set version to ~1.0.0 in dev-deps...
When next-18next supports i18next v21, it might need to be updated to ^1.1.0.
Possible fixes.
Will probably fix this https://github.com/isaachinman/next-i18next/issues/1443 and hopefully this https://github.com/i18next/react-i18next/issues/1379
I could not give a reproduction example, but here's the explanation here: https://github.com/belgattitude/nextjs-monorepo-example/pull/510 (I could reproduce it partially, but on prod I'm using a different version of yarn so I'm not sure, my workaround was to add i18next: ^20 explicitly).
Extra
I realized that the example was loading i18next 19 too... Changed the lock: https://github.com/isaachinman/next-i18next/pull/1467/commits/b3c55979a3e27f61f9868c415b6cf3de87db44a1

I can confirm it would close this one too https://github.com/i18next/react-i18next/issues/1379.
In the meantime
  "resolutions": {
    "@types/i18next-fs-backend": "1.1.0", // this would be anough
    "i18next": "^20.6.1" // or to be safe
  },

You'll need to yarn install again.

I don't understand what you are suggesting. You just need to move the dependency from deps into dev deps, and do yarn install && yarn run-example.


Refactoring with three goals in mind: readability, learn it and facilitate writing of more testing scenarios.

I have made a few changes on the main source code of this package and a few (lot?) of changes on the test structure. But both of them are quite simple.
First, about index.js, I have made the following changes:

Moved every single match to a function of its own (one for custom, one for paths, one for extensions and one for methods).
Tried to leave the export declaration as clean as possible, with a few comments to help the reader.

Now about the tests:

I have created a folder scenarios to hold different files that represent different sets of tests.
I have created a function, runTests, that encapsulated the logic to run these different tests.

The second step was taken to avoid repeating a lot of app = koa(), app.use(...) and etc.
I assure that no functionality was changed and only more and more tests were added. I'm willing to create a typescript definition on DefinitelyTyped repository to facilitate those who are using Typescript.

Sounds like good changes mate. I will review tomorrow, it is getting late in here.
Could you please update travis to use latest node? It complains about ES6 stuff.

If you want, @Foxandxss, we can schedule a quick meeting where I explain the changes that I made.

What can I say, best PR of the year.

No need, I saw what you did, absolutely fantastic.