Success Modal Improvement (See details)

via @mehcode
continuation of #198

[x] We need to include more details like "Created account X with an initial balance of Y hbar" ( perhaps as subtext under "Success" )
[ ] The garland image is designed to be flush with the modal border. It looks odd hanging there.
[ ] Make the checkmark look like the modal below where its smaller, inverted, and half-out of the modal.

[ ] "Copy" should say "Copy _______ ID"
[ ] "Continue" Should say Close or Dismiss
[x] copy button should be mandatory now

I have no idea how you got a success modal to display without a message, since it's a slot from the enclosing scope :unamused:

I missed that, but vue just ignores the slots if they don't exist. Unfortunately it doesn't look like there is a way to make them mandatory either :/

#216

https://files.slack.com/files-pri/T03SN24C3-FQ4K46A15/image.png


xctool crashes before running / after building tests

Got a crash before my tests are being run using the latest HEAD (4be08360b0), possible regression of https://github.com/facebook/xctool/issues/312?
The tests were run successfully using xctool <= 0.2 and Xcode 5 a while ago...
It's an open source project of mine, you can see the full build output at Travis-CI:
https://travis-ci.org/BurritoKit/TacoShell/builds/43140089
2014-12-06 08:34:52.485 xctool[52382:2161146] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSPlaceholderArray initWithObjects:count:]: attempt to insert nil object from objects[1]'
*** First throw call stack:
(
	0   CoreFoundation                      0x00007fff92b5a64c __exceptionPreprocess + 172
	1   libobjc.A.dylib                     0x00007fff9023b6de objc_exception_throw + 43
	2   CoreFoundation                      0x00007fff929fe068 -[__NSPlaceholderArray initWithObjects:count:] + 360
	3   CoreFoundation                      0x00007fff92a646b4 +[NSArray arrayWithObjects:count:] + 52
	4   xctool                              0x00000001013b3f5a -[RunTestsAction runTestables:options:xcodeSubjectInfo:] + 2425
	5   xctool                              0x00000001013b2cfc -[RunTestsAction performActionWithOptions:xcodeSubjectInfo:] + 908
	6   xctool                              0x00000001013bf508 -[TestAction performActionWithOptions:xcodeSubjectInfo:] + 77
	7   xctool                              0x00000001013a54b5 -[XCTool run] + 2104
	8   xctool                              0x00000001013a43a8 main + 572
	9   xctool                              0x00000001013a22c4 start + 52
	10  ???                                 0x000000000000000a 0x0 + 10
)
libc++abi.dylib: terminating with uncaught exception of type NSException
[1]    52382 abort      xctool clean test -workspace Example/TacoShell.xcworkspace -scheme TacoShell

$ xctool -v
0.2.2

I checked out your project and could reproduce the issue. It feels like you test target wasn't configured correctly -- when xctool tries to grab build settings it could find several fields like FULL_PRODUCT_NAME and SDK_NAME that is why it crashes.
I tried creating new test target and xctool correctly tested it w/o crashing. I would suggest creating new test target within Xcode.

@ExtremeMan Hm, ok sounds legit, gonna check that. Nevertheless, maybe we'd need some strategy on communicating this with other devs? I've thought this is a regression and it seems there are other devs having the same issue so it might be worth talking about this / getting this out of the way. Thanks for your reply. I'll check this out and get back to you.

Nevertheless, maybe we'd need some strategy on communicating this with other devs?

So far didn't hear about this issue anymore. I think Github issue should be good enough for devs to find a problem. Closing for now. Thanks!


Upgrade gatling

Description
Provide a description of what has been changed
Checklist
Please check if applicable

[ ] Tests have been added (if applicable, ie. when operator codes are added or modified)
[ ] Relevant docs have been added or modified (if applicable, ie. when new features are added or current features are modified)

Relevant issue #

https://github.com/st-tech/gatling-operator/pull/96


Correct Windows flashing instructions

And clarify everything else.

LGTM along with my suggested changes.

Updated to incorporate suggestions from https://github.com/openaps/docs/pull/482


Add bounds and center to metadata in MBTiles file

Not a huge deal, but having the bounds and center coordinates in the metadata would make it slightly faster for my use case. My tile server indexes the MBTiles files in a given directory then uses the bounds and/or center values to find the required file when it receives a request.
Here's what tilemaker sets as metadata for those values:
bounds|-106.645646,25.837377,-93.508292,36.500704
center|-100.076969,31.169041,7

Some clarification please... are you referring to the individual VFR Sectional charts, the full VFR Sectional, or some other chart(s)?
I would also want to make sure any new enhancement would not collide with the Stratux integration feature the and "own aircraft position" recording feature (enabled in settings.) With that feature enabled, the map opens up to the last recorded position of your aircraft, as reported by Stratux.  I am assuming that with this additional bounds data in the metadata, it would have to be with Stratux integration turned off...

The reason I ask about whether you are referring to the full US sectional is that it's actually stitched together from 53 individual geotiffs which are then merged, each of which has bounds coordinates...

The FAA charts give the bounds of each chart as:
lat, lng: upper left
lat, lng: upper right
lat, lng: lower right
lat, lng: lower left
So, what would you prefer?  Upper left and Lower right, plus a calculated center?

If processing single area chart(s), the app will now add bounds and center values to the metadata table in each mbtiles database.
These new metadata fields will be not be present if processing any of the full charts, since those are actually comprised of multiple individual geotiffs which each have individual extent data, making any overall calculation of extents more involved than I have time or inclination to deal with.

P.S., also added a new settings.json key+value: centerzoomlevel which defaults to 7.   Example below.

Apologies - I was out for part of the weekend. I was specifically referring to the bounds for individual VFR sectionals. What you've added is exactly what I needed. Thank you very much!


service_builder does not use the segment physical network name for network definition

Service builder is not completely populating the network dictionary with all the values from the segments table.  The error is that the phyiscal_network_name is assumed to be defined in the top-level segment, but this is not always the case.

@richbrowne : could you add some details, using the issue template, so that we can set Priority & Severity.  Thanks.


Add a new subscription broken on Azure console

Clicking the +Add button took me to https://account.azure.com/signup?showCatalog=True&appId=Ibiza_SubscriptionsOverviewBladeCommandBar, which displays this error message:
Bad Request - Request Too Long
HTTP Error 400. The size of the request headers is too long.

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

ID: 00e898b4-045d-6977-2c67-8f328afae938
Version Independent ID: 382426d4-46d8-0a81-1a15-0e11afe6c6b4
Content: Create an additional Azure subscription
Content Source: articles/cost-management-billing/manage/create-subscription.md
Service: cost-management-billing
GitHub Login: @amberbhargava
Microsoft Alias: banders

@stuartMoorhouse Thanks for contacting us. This could be an intermittent issue. May I know the type of subscription you currently have? Could you also share a screenshot of the error message?
Couple of suggestions to try:

Try it on a different browser or in a in-pvt or incognito window. If problem persist,
Try programmatically creating Azure subscriptions.

@stuartMoorhouse Any progress on this issue? If problem, previous reply with the above requested information to understand/investigate this issue further.

Hi,
The issue is resolved when I use a different browser (Chrome). So, I assume that it is a problem using the Console with Brave,
Thanks,
Stuart
On Monday, 13 July 2020, 06:00:55 CEST, SadiqhAhmed-MSFT<EMAIL_ADDRESS>wrote:
@stuartMoorhouse Any progress on this issue? If problem, previous reply with the above requested information to understand/investigate this issue further.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub, or unsubscribe.

@stuartMoorhouse Thanks for the update! Glad to hear it is resolved :)
Closing this issue as no further action required.


testNamePattern not matching the whole test name in it statement

🐛 Bug Report
I am trying to use the whole name of the test.
My test is
describe("the capital one banner", () => {
    it("should NOT show banner if the CCM flag is OFF", () => {...})
})

I want to test whole statement i.e should NOT show banner if the CCM flag is OFF.
I am doing like
nx test <libName> --testNamePattern="should NOT show banner if the CCM flag is OFF"
This is not working. Only a single word is working and not the statement.
Even I tried nx test <libName> --testNamePattern="/should NOT show banner if the CCM flag is OFF/i" This also didn't work.
To Reproduce
Steps to reproduce the behavior:
nx test  --testNamePattern="should NOT show banner if the CCM flag is OFF".
Expected behavior
It should run the test case that is matching with the statement.

Link to repl or repo (highly encouraged)

envinfo

 System:
    OS: macOS 10.15.7
    CPU: (8) x64 Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz
  Binaries:
    Node: 14.16.1 - ~/.nvm/versions/node/v14.16.1/bin/node
    Yarn: 1.22.10 - /usr/local/bin/yarn
    npm: 6.14.12 - ~/.nvm/versions/node/v14.16.1/bin/npm
  npmPackages:
    jest: 26.6.1 => 26.6.1

The example in doc https://jestjs.io/docs/cli#--testnamepatternregex works. In your case, you should use --testNamePattern=should NOT show banner if the CCM flag is OFF without "", /. If you add "", / it won't work.
I don't think this is a bug.

Right now there's no example in the doc =(


Add lua runtime function "read_file" to read file under config.GetDataDir() directory

Add lua runtime function "read_file" to read file under config.GetDataDir() directory.
See PR #328.

I hope this PR could be useful.

PURPOSE:
I need a lua runtime function to read config files from disk directly.
HOW TO USE:
To read a file "config/game_config.json" under "config.GetDataDir()"(default is /path/to/nakama-working-directory/data), I write code like this:
local filename = "config/game_config.json"
local content = nk.read_file(filename)

if content then
    nk.logger_info("read content from "..tostring(filename)..": "..tostring(content).."")

    // you could decode json content to some object
    local some_object = nk.json_decode(content)
else
    nk.logger_info(""..tostring(filename).." is empty")
end

DETAILS:
Lua runtime function "read_file" read file "/path/to/nakama-working-directory/data/config/game_config.json" and return file content.
If this file is empty, "read_file" returns empty string.
If any error happend in go code, error will be raised.
To describe read_file function prototype clearly, in Typescript:
export declare function read_file(filename: string): string | null;
MORE EXAMPLES

read empty file

Execute this command in your shell:  touch data/config/empty.json

code like this:
local filename = "config/empty.json"
local content = nk.read_file(filename)

if content and (#content>0) then
    nk.logger_info("read content from "..tostring(filename)..": "..tostring(content).."")
    local some_object = nk.json_decode(content)
else
    nk.logger_info(""..tostring(filename).." is empty")
end

Run your game server. Then you will get log info onfig/test.json is empty.

read a file does not exist

code like this:

  local filename = "config/no_file.json"
  local content = nk.read_file(filename)

  if content and (#content>0) then
      nk.logger_info("read content from "..tostring(filename)..": "..tostring(content).."")
      local some_object = nk.json_decode(content)
  else
      nk.logger_info(""..tostring(filename).." is empty")
  end

Run your game server. Then you will get ERROR.
... ERROR: Could not complete runtime invocation
...
stack traceback:
[G]: in function 'read_file'

@ZhangGuangxu thanks for the PR.
We typically advise that one should use the runtime.env functionality to pass external info to the Lua Runtime.
I'm very interested in knowing why you need the config file in Lua? Is this Nakama's config file, or some other application?

@mofirouz
My game has dozens of config files, which are json format.
My CO save the content of the config files in DB. Then read the configs from DB in lua code.
I simply would like to read configs from disk directly.

@mofirouz
Game configs, like how much exp some user needs to upgrade from level 1 to level 2, like what I should give a user when he/she request daily bonus, and so on.

@mofirouz
Some game-logic-related configs need to be loaded on the fly, and must not restart game server.
Does runtime.env fullfill my requirement？

Apologies for not replying sooner - somehow missed the email notifications.
The issue is that Lua is a sandboxed environment. Which means no Lua code could access host resources directly. You have three options:

Write to the DB and consume from it - as you have mentioned above.
Base64 JSON content and pass through via runtime.env
Use Go (as plugins) (see here) to load files from the file system. Lua runtime and Go runtime can coexist in a project but they can't communicate to each other.

Hope this help.s

@mofirouz
My game has dozens of config files, which are json format.
My CO save the content of the config files in DB. Then read the configs from DB in lua code.
I simply would like to read configs from disk directly.

We used third-party tools to turn JSON into Lua table, which seems to be working properly at the moment.


Metal: FullscreenQuad pixel shader broken

There's a problem with repeated holes, these only look correct in the positive octant.

Fixed, reason was that Metal's fmod() behaves slightly different then GLSL's mod().


Prevent error during add() when the repo has no topic prior to running the command

If the repo does not have any topic at all, the add command would fail with the following error due to an empty line returned by list
cannot iterate over: null
The fix is to add the awk NF filter in order to remove all empty lines.

check empty topic inside the while loop in encode_topics()


Add constrained multiobjective benchmarks

Types of changes

[ ] Docs change / refactoring / dependency upgrade
[ ] Bug fix (non-breaking change which fixes an issue)
[x] New feature (non-breaking change which adds functionality)
[ ] Breaking change (fix or feature that would cause existing functionality to change)

Motivation and Context / Related issue

Adding constrained multiobjective benchmarks (please see #1059) from wikipedia page
How Has This Been Tested (if it applies)

Pareto fronts are successfully replicated for 3 cases: Binh and Korn function, Chankong and Haimes function and Test function 4.
Checklist

[ ] The documentation is up-to-date with the changes I made.
[ ] I have read the CONTRIBUTING document and completed the CLA (see CLA).
[ ] All tests passed, and additional code has been covered with new tests.

The red marks are for:

signing the CLA, which is necessary for contributing (it basically states that you understand that the code you submit will be open source)
please copy the header of one of the current files to all new file that you add
please run black nevergrad (pip install black, if need be) for the formatting, but we can see this at the very end anyway

Looks interesting. @afozk95 , do you need help ?

it looks like problems are very minor. Can you just sign the CLA and then maybe i can do the rest (headers, black) ?


add api design

What type of PR is this?
Add one of the following kinds:

documentation

What this PR does / why we need it:
Add API Design.
Basically split "Get a Slice" function into 2 steps. One is reserve a slice. Another is manage the end service access control.
Which issue(s) this PR fixes:

Fixes #
Special notes for reviewers:
Changelog input
 release-note

Additional documentation
This section can be blank.
docs

Please reviewers take a look in advance.

Generally, I am still not ok with the usage of the term 'slice', since it is against the CAMARA paradigm to hide telco complexity and allow the telco's to decide on the implementation

Hey Thortsen, understand your point. I'll kindly suggest not to discuss the term slice under each PR. https://github.com/camaraproject/NetworkSliceBooking/issues/12

I have the impression, that several comments are marked as 'resolved' without doin any changes or comments.

I have the impression, that several comments are marked as 'resolved' without doin any changes or comments.

Hi Thorsten, there are too many comments. Some of them I modified. Some of them that I don't think need changes or maybe didn't get your point, so it stay the same and I leave some comments.
No worry, if you have any suggestions, feel free to review~ I'll handle that. This is still in progress stage. And better give me some suggested modifications. @tlohmar

One suggestions is @tlohmar . May I kindly suggest that, maybe you can split your questions and your review suggestions. : ) That will be easier for me do know which are the questions, and which are modification suggestions. Thanks in advance!

@tlohmar I've listed all your comments here. Hopefully it can be more clear. Please check if there is any not included. I believe some of the questions are originated from “Mode” and “What is OTT/Aggregator" is not aligned. I will leave another comment below. After this is discussed clear, let's modify the left together.
1. Question: toB Is this an abbreviation?
-> : Yes. toB, toC means to business(eg enterprise customer), to customer(individual customer).
2. Comment: What is a NaaS API. Please add a reverence.
-> : Modified. NaaS API means CAMARA NaaS Service API.
3. Comment: Line 16, I suggest to focus on this API, e.g. 'this API allows the booking of a slice / resource with very short lead times'.
-> : Modified.
4. Question and Comment: Line20-23. 'OTT' typically not refers to an actor. What is meant here? Does OTT resolve to Over-The-Top? Is this here an Application Provider or an Application Service Provider, who is the customer (not OTT)?

[ ] -> : OTT not equals to Aggregator. This is mode question. Suggested to discuss together below.

5. Question and Comment: Line28-31. I think, OPG uses the term 'Aggregator'.

[ ] -> : OTT not equals to Aggregator. This is mode question. Suggested to discuss together below.

6. Question and Comment: Line 35-37. what is the relation between the 'Provider" and 'OTT'?
-> : Modified. Provider means Telecom Operator.
7. Question: Line 41-43. The OTT refers here to an aggregator, who then resells the service to Enterprises or Consumers, correct? Is this the B2B2B2C scenario? Operators 2 Aggregator 2 OTT 2 consumer? When correct, this is a scenario with two aggregators involved. I suggest to rename 'OTT' to 'Aggregator#2'

[ ] -> : This is mode question. Suggested to discuss together below.

8. Comment: Line57. Typo.
-> : Modified
9. Question: Line 57-60. At what time is it possible to 'Manage access control'?In my understanding, the resource (a slice or a dedicated network) has at least two states, i.e. RESERVED, ACTIVE. It should be possible to have device access control during both states.
-> : Yes.
10. Comment: Line 60-63. Which API should be used, while the reservation is 'active'? I think, API should not be named 'reserve'. Maybe 'manage'
-> : Yes.
11. Comment: Line 66-68. This can be simplified, since all the three bullets kind of say the same thing: Device Access Management may happen at any point in time while the resource is in revered-state and in active-state.
-> : Modifed.
12. Question: I am wondering about the 'may' in 'Slice Owners may have the right to allow access': What is the use-case, when the Slice Owner has NOT the right to allow access of devices? In which cases can the operator add other devices into the resource?

[ ] -> : Mode question. Discuss below.

For the mode question:

OTT and Aggregator: I believe OTT is not Aggregator. OTT is cosumer from Aggregator.

For the Mode, as Thorsten suggested,  B2B2B2C stands for Telecom Operator, to Aggregator, to toB OTT, to toC Customer. Logically this is correct. But I'm worrying this is to complex. How about sort NaaS Platform together, no matter the NaaS Platform is from Telecom Operator's NaaS Platform Portal, or it's from Aggregator's NaaS Platform Portal. Then the Mode is much clear. B2B2C. Stands for, B(CAMARA NaaS Service API) toB(OTT Enterprise) toC (End User End Customer). Any thoughts?

Thanks for the elaboration.

One suggestions is @tlohmar . May I kindly suggest that, maybe you can split your questions and your review suggestions

Hmm, I am making suggestions, e.g. "I suggest to split the "Operators / Aggregator" box into two cases". Still, the figures handle the "with aggregator" and "without aggregator" together.

Existing material can be used https://github.com/camaraproject/WorkingGroups/blob/main/Marketing/documentation/MarketingMaterial/CAMARA Presentation.pptx
Please see slide 12 and 13

Existing material can be used

https://github.com/camaraproject/WorkingGroups/blob/main/Marketing/documentation/MarketingMaterial/CAMARA Presentation.pptx Please see slide 12 and 13

Existing material can be used https://github.com/camaraproject/WorkingGroups/blob/main/Marketing/documentation/MarketingMaterial/CAMARA Presentation.pptx Please see slide 12 and 13

Thanks Bart . If every one align on this, i will modify the graph based on this.

Yes please, but also consider slide 13. As you can see the Service APIs extend into the operator environment upto the transformation function. The transformation function is outside the scope of Camara and every operator can define this transformation function in their own way to realize the intent of the Service API.

Yes totally agree. TF is out of the scope.

I hope this is not too late to comment.
There is text "The business modes of Network Slice Booking can be B2B, B2B2C.", which B2C has removed from.
I am not sure a reason why it has remove so far, however I believe B2C is a possible business mode which should be in scope.
Therefore, I would like to suggest B2C to be reverted.
Regarding figure illustration, I think we can change from "Enterprise" to "toB/toC Customer" in the figure of Mode 1.
What do you think about?

From my side，this API is for developer,  B2C model refers to the end user as developer to use this API, maybe this situation doesn't exist for the time being.

@ShutingQing Mode 2 and Model 3, I think the toC Customer will pay for app serivice with vip/svip experience supported by network slice from the OTT APPs(not OTT developer), the toC Customer indirectly pay for guaranteed network slice service.

@DanXu-ChinaTelecom: Thanks for your clarification. From perspective on how API is used by developers, I can make sense with what you mentioned that B2C model is not needed in this diagram.
@ShutingQing:  One suggestion. How about changing "toD OTT Developer" to "toD APP Developer" in Mode 2 and 3 of the diagram, because there is word "APP Developer" in the body text.

@Masa8106 Thanks Masaharu and Dan, good suggestion, let's do that.

@ShutingQing Mode 2 and Model 3, I think the toC Customer will pay for app serivice with vip/svip experience supported by network slice from the OTT APPs(not OTT developer), the toC Customer indirectly pay for guaranteed network slice service.

Yes, that's true. For here it's both correct to use toD or toB to stand for OTT/APP developers. Just to see which one is more accurate or easy to understand. toD is more direct.

I'm a bit surprised about the business model discussions within this document. The scope of CAMARA is defined as "CAMARA only works on customer-facing northbound APIs." Customer in the sense of the end customer of the API, the term application service provider (ASP) is often used here in the meantime. Business model discussions are subject of the GSMA OGW business work stream, but do not need to be repeated here in CAMARA from my perspective.
It would be good if you focus on how a customer who is consuming the Network Slice Booking API(s) would use it, independent of the type of customer. Within the picture from the CAMARA presentation (btw also part of the ProjectCharter) this are blue lines. How an aggregator (or "OTT" in your picture) will package it in own enriched products/service is out of scope.
I would also recommend to avoid telco specific terms like "OTT", this term does not make sense in a collaborative eco-system.
And on the formal side I suggest that the complete document belongs into supporting documents, the documentation folder is about documentation of the API. Also "Network Slice Booking API Introduction.pptx" need to be moved, within Documentation only markdown is expected, see ProjectStructureAndRoles (with ppt we have no version control and review process)).


Filter for object contain list returns more result thatn expected

Goals
I want to be able to filter an object by the child property (a list)
I have an object called account type
class accountType: Object{
...
account_type = ""
accounts = List
}
class Accounts: Object{
account_type = ""
account_name = ""
...
}
Expected Results
I expect to see only the parent and the child that meets the requirement
the account type with accounts filtered to only account_name that matches the filter condition
Actual Results
I receive the account_type and all its children, including these that does not meet the filter condition
Steps to Reproduce
accountsList = [Accounts(value:["account_type":"Cash","account_name":"Gift Card"]),Accounts(value:["account_type":"Cash","account_name":"Store Credit"])]
accountType = AccounType(value: ["account_type": "Cash","accounts":accountsList])
Code Sample
func searchBar(searchBar: SearchBar, didChange textField: UITextField, with text: String?) {
let searchText = textField.text!
let predicate = "ANY accounts.compoundKey CONTAINS[c] '(searchText)'"
print(predicate)
searchResult = rawData.filter(predicate)
isExpand = [Bool](repeatElement(false, count: searchResult.count))
print(searchResult[0].accounts[0].compoundKey)
print(searchResult[0].accounts[1].compoundKey)
sectionTitles = String
for i in 0..<searchResult.count{
sectionTitles.append(searchResult[i].account_type)
}
DispatchQueue.main.async{
self.tableView.reloadData()
}
}
if the search text is "gift" I'm expecting to see only account_type object return with only one record of accounts
Version of Realm and Tooling
Realm version: 2.1.2
Xcode version: 8.2.1
iOS/OSX version: 10.12
Dependency manager + version: CocoaPod
Thank you :)

@winniepooh001 It's intended behavior. The AccountType class has "Gift Card" account and "Store Credit" account as a relationship. The query that you performed means filtering the AccountType objects that match the predicate. The search text "gift" matches the AccountType object that has "Gift Card" account and "Store Credit". So the query returns the AccountType object, that has "Gift Card" account and "Store Credit".
If you'd like to filter Accounts objects, perform the query again for the accounts property.
let filteredAccounts = searchResult[0].accounts.filter("accountName CONTAINS[c] %@", "gift")

Or, add a reverse relationship property to Accounts like the following (see accountTypes property in Accounts class):
class AccountType: Object{
    ...
    dynamic var accountType = ""
    let accounts = List<Accounts>()
}
class Accounts: Object{
    ...
    dynamic var accountType = ""
    dynamic var accountName = ""
    let accountTypes = LinkingObjects(fromType: AccountType.self, property: "accounts")
}

Then query for the Accounts class like the following:
let accounts = realm.objects(Accounts.self).filter("accountName CONTAINS[c] %@", "gift")

To retrieve AccountType objects, use the reverse relationship property.
FYI: Please always use NSPredicate's substitution syntax like %@ and %K. String interpolation in Swift causes unexpected behaviors.

Thank you. In general, if the objects are all interconnected in some ways, could I have many reverse relationship (to different objects) in one object? Akin to sql  of a central mapping table.

@winniepooh001 you can define many reverse relationship in one object if that object is linked by other objects with to-many relationship, see more in docs.

Do you have any other questions or follow-up, @winniepooh001?

Thank you,


Page Curl Animation

There are a couple of Page Curl animation libraries:

https://github.com/harism/android_page_curl
https://github.com/MysticTreeGames/android-page-curl

None of them work with ViewPagers though. A page curl transition would be awesome!

Would also love to see this.
Can anyone give a hint, if and when this transition will be at least being discussed to be implemented?

Please provide any guidance on implementing curl animation in view pager.

Page curl animation view pager please....

please provide curl animation with different layout.


Dockerize App

Add dockerfile for server and client and docker-compose.yml which executes both.
Add instructions to docker setup in readme.md

This is not the right way to contribute @Anmolbansal1
If I am working on a certain issue that I had already informed you then how can you make a pull request regarding that without creating a issue?

@Tushar19varshney  you can make changes by pulling my branch from pr and commits over there if you find any error in that


FillEllipseCentered Alpha Channel isn't displayed properly

var fixationColor = Color.FromArgb(160, 255, 255, 255);
bitmap.FillEllipseCentered(point.X, point.Y, radius, radius, fixationColor.ToInt, true);
bitmap.DrawEllipseCentered(point.X, point.Y, radius, radius, _customBlack);
this is the result (the background was white):

Not sure what your ToInt method performs and which platform you test runs.
You should use the method ConvertColor which converts from a Color to the right int value using pARGB (pre-mulitplied RGB which is what the WB uses).
var fixationColor = Color.FromArgb(160, 255, 255, 255);
int fixationColorInt = WriteableBitmapExtensions.ConvertColor(fixationColor);
bitmap.FillEllipseCentered(point.X, point.Y, radius, radius, fixationColorInt, true);
bitmap.DrawEllipseCentered(point.X, point.Y, radius, radius, _customBlack);

I also tried with ConvertColor before:
var fixationColor = WriteableBitmapExtensions.ConvertColor(0.5, Colors.Red);
bitmap.FillEllipseCentered(point.X, point.Y, radius, radius, fixationColor, true);
bitmap.DrawEllipseCentered(point.X, point.Y, radius, radius, _customBlack);
This is the result on a green and blue background:

What platform is that? WPF, WinRT, ...?
Do you have a repro project?

WPF and sorry but I don't have a repo.

EllipseAlphaTest.zip

A partial fix is implemented with c2e44253e96b4b425849eecb103afcd9d98dd841
But certain parts of the circle are still drawn multiple times so it doesn't look like expected. A fix might take longer as the algorithm is quite complex.

FYI at the moment I am using FillPolygon as a workaround.

My work around for anyone with this problem:
  public static void FillCircleCenteredHacked(this WriteableBitmap bitmap, int xc, int yc, int r, int color,
        bool doAlphaBlend = false)
    {
        bitmap.FillPolygon(GenerateCircle(r*10, xc, yc, r), color, true);
    }

    private static int[] GenerateCircle(int numberOfPoints, int xc, int yc, int radius)
    {
        var points = new int[numberOfPoints * 2];

        var angleIncrement = 2 * Math.PI / numberOfPoints;
        for (var idx = 0; idx < numberOfPoints - 1; idx++)
        {
            var angle = angleIncrement * idx;
            points[2 * idx] = Convert.ToInt32(xc + radius * Math.Cos(angle));
            points[2 * idx + 1] = Convert.ToInt32(yc + radius * Math.Sin(angle));
        }

        var lastPointOffset = 2 * (numberOfPoints - 1);
        points[lastPointOffset] = points[0];
        points[lastPointOffset + 1] = points[1];

        return points;
    }

Thank you!


How does this code work?

Hello,
many thanks for this hack.  But I would like to know how it actually works?
How does the webworker keep javascript timers going?
thank you for any help

yes, it still works, thanks to Ruslan

i also want to understand how does it works? do we simply link the script before timer script.?

Hello.
Sorry for late comment.
Scripts may create frequent timers
window.setInterval(action, 10ms)

Frequent timers consume more battery
(also these timers can be used for annoying things like ads)
so browsers throttle window timers (reduce frequency, increase delay)
when tab or windows becomes background.
action() after 10ms
action() after 10ms
action() after 10ms
// tab becomes background
action() after 1000ms
action() after 1000ms
...

Although window.setInterval is slowed down,
but there seems to be several techniques that work around that.
One of them is using Worker.
Worker is created on separate thread from window's ui thread.
Seems that browsers don't throttle Worker timers.
Worker can postMessage to window,
which calls window.onmessage.
Seems that browsers don't throttle window.onmessage too.
This library overwrites window.setInterval function
and forwards setInterval call to Worker via worker.postMessage,
remembering original window callback.
Worker calls self.setInterval and worker callback
calls self.postMessage to wake window.onmessage,
which calls original window callback.
flowchart TB
    subgraph window
        a1("window.setInterval(action)")
        a2("worker.postMessage()")
        a6("worker.onmessage")
        a7("action")
    end
    subgraph worker
        a3("self.onmessage")
        a4("self.setInterval()")
        a5("self.postMessage()")
    end
    a1-->a2-->a3-->a4-->a5-->a6-->a7
    a1-. "action()" .->a6

Library script hacktimer.js overwrites window.setInterval.
It must execute before any other script.
If some other script will execute before,
it will call slow window.setInterval version.


Read unstructured domain resample

This test case extends read_domain_decomp_resample to regrid data on unstructured LFRic mesh to rectilinear grid.

I set all the tests for unstructured meshes to be known failures as they fail the tolerance test. I feel the tolerance is set to low for these tests, I could just set a tolerance which would make all the tests pass. Would that be the best thing to do? The maximum relative error for these tests are
gulfstream max relative error = 0.6005423709670573
harmonic   max relative error = 0.3918016243246943
sinusiod   max relative error = 0.028933139088239804
vortex     max relative error = 0.27763766952570046

Which are much larger than the current tolerance value of 0.005.

I set all the tests for unstructured meshes to be known failures as they fail the tolerance test. I feel the tolerance is set to low for these tests, I could just set a tolerance which would make all the tests pass. Would that be the best thing to do? The maximum relative error for these tests are
gulfstream max relative error = 0.6005423709670573
harmonic   max relative error = 0.3918016243246943
sinusiod   max relative error = 0.028933139088239804
vortex     max relative error = 0.27763766952570046

Which are much larger than the current tolerance value of 0.005.

i'd like to do a bit more digging into this and assess this tolerance value and what might be appropriate for us to target.
if we can do this as part of the review, then that's okay, but we can merge this as 'known failures' and spawn a follow up ticket to address tolerances for resampling

I set all the tests for unstructured meshes to be known failures as they fail the tolerance test. I feel the tolerance is set to low for these tests, I could just set a tolerance which would make all the tests pass. Would that be the best thing to do? The maximum relative error for these tests are
gulfstream max relative error = 0.6005423709670573
harmonic   max relative error = 0.3918016243246943
sinusiod   max relative error = 0.028933139088239804
vortex     max relative error = 0.27763766952570046

i'd like to do a bit more digging into this and assess this tolerance value and what might be appropriate for us to target.
if we can do this as part of the review, then that's okay, but we can merge this as 'known failures' and spawn a follow up ticket to address tolerances for resampling

hi @jeff-cole
i think what i would like would be to set these tolerances such that they pass for these values, and known_failures are not required.
Then i'd like to create a separate issue with the aim of justifying these tolerances, so that we can show willing, and have evidence beyond just values that worked.
does this seem reasonable to you?
ty, m


Support TLS for Redis

Adds the "tokio-native-tls-comp" feature flag to our Redis dependency.
Fixes #528.

Just doing some more testing to ensure everything is in order.


dashboard index.html templates not found

[2018-03-09 05:44:46,359] ERROR in app: Exception on / [GET]
Traceback (most recent call last):
File "/usr/lib64/python2.7/site-packages/flask/app.py", line 1982, in wsgi_app
response = self.full_dispatch_request()
File "/usr/lib64/python2.7/site-packages/flask/app.py", line 1614, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/usr/lib64/python2.7/site-packages/flask/app.py", line 1517, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/usr/lib64/python2.7/site-packages/flask/app.py", line 1612, in full_dispatch_request
rv = self.dispatch_request()
File "/usr/lib64/python2.7/site-packages/flask/app.py", line 1598, in dispatch_request
return self.view_functionsrule.endpoint
File "build/bdist.linux-x86_64/egg/simple_tensorflow_serving/server.py", line 88, in decorated
return f(*args, **kwargs)
File "build/bdist.linux-x86_64/egg/simple_tensorflow_serving/server.py", line 117, in index
model_graph_signature=str(inferenceService.model_graph_signature))
File "/usr/lib64/python2.7/site-packages/flask/templating.py", line 133, in render_template
return _render(ctx.app.jinja_env.get_or_select_template(template_name_or_list),
File "/usr/lib/python2.7/site-packages/jinja2/environment.py", line 869, in get_or_select_template
return self.get_template(template_name_or_list, parent, globals)
File "/usr/lib/python2.7/site-packages/jinja2/environment.py", line 830, in get_template
return self._load_template(name, self.make_globals(globals))
File "/usr/lib/python2.7/site-packages/jinja2/environment.py", line 804, in _load_template
template = self.loader.load(self, name, globals)
File "/usr/lib/python2.7/site-packages/jinja2/loaders.py", line 113, in load
source, filename, uptodate = self.get_source(environment, name)
File "/usr/lib64/python2.7/site-packages/flask/templating.py", line 57, in get_source
return self._get_source_fast(environment, template)
File "/usr/lib64/python2.7/site-packages/flask/templating.py", line 82, in _get_source_fast
return loader.get_source(environment, template)
File "/usr/lib/python2.7/site-packages/jinja2/loaders.py", line 171, in get_source
f = open_if_exists(filename)
File "/usr/lib/python2.7/site-packages/jinja2/utils.py", line 154, in open_if_exists
return open(filename, mode)
IOError: [Errno 20] Not a directory: '/usr/lib/python2.7/site-packages/UNKNOWN-0.0.0-py2.7.egg/simple_tensorflow_serving/templates/index.html'
INFO:werkzeug:<IP_ADDRESS> - - [09/Mar/2018 05:44:46] "GET / HTTP/1.1" 500 -

starts from  python server.py  will be ok .

It would be the problem about packing static file in python package.
Re-open and we should fix it soon.

It is fixed by https://github.com/tobegit3hub/simple_tensorflow_serving/commit/b119ce7e57d3c8e0558a85d094597d4ab276e399 .
You can try with pip install simple_tensorflow_serving>=0.2.4 now 😃


Filled out Portuguese menu options

This is a PR to solve issue #4938 .
I have added the necessary menu items that were missing as far as I can tell.
Translation checks may be needed, but its a start at filling out the entire menu for Portuguese.

@Blackweda do you know someone who can review this?
PS: if you have problems with multiple forks, you can use git remote to help to track down the remote you want to use. I mention this because you said a couple of times you deleted your fork.

@ficristo yes I can probably get someone to help confirm the translations... like I said, I'm new to using Git commands and stuff.. so I make mistakes and use the brute-force easiest way to fix things for now.


PopScope cannot exit the app

Steps to reproduce
The above code is from example, which changes the navigation method from One to Two
Navigator.of(context).pushReplacementNamed('/two');

Expected results
The app will exit
Actual results
The app went black and did not exit
Code sample
Code sample
import 'package:flutter/material.dart';

void main() => runApp(const NavigatorPopHandlerApp());

class NavigatorPopHandlerApp extends StatelessWidget {
  const NavigatorPopHandlerApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      initialRoute: '/home',
      routes: <String, WidgetBuilder>{
        '/home': (BuildContext context) => const _HomePage(),
        '/two': (BuildContext context) => const _PageTwo(),
      },
    );
  }
}

class _HomePage extends StatefulWidget {
  const _HomePage();

  @override
  State<_HomePage> createState() => _HomePageState();
}

class _HomePageState extends State<_HomePage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            const Text('Page One'),
            TextButton(
              onPressed: () {
                Navigator.of(context).pushReplacementNamed('/two');
              },
              child: const Text('Next page'),
            ),
          ],
        ),
      ),
    );
  }
}

class _PageTwo extends StatefulWidget {
  const _PageTwo();

  @override
  State<_PageTwo> createState() => _PageTwoState();
}

class _PageTwoState extends State<_PageTwo> {
  /// Shows a dialog and resolves to true when the user has indicated that they
  /// want to pop.
  ///
  /// A return value of null indicates a desire not to pop, such as when the
  /// user has dismissed the modal without tapping a button.
  Future<bool?> _showBackDialog() {
    return showDialog<bool>(
      context: context,
      builder: (BuildContext context) {
        return AlertDialog(
          title: const Text('Are you sure?'),
          content: const Text(
            'Are you sure you want to leave this page?',
          ),
          actions: <Widget>[
            TextButton(
              style: TextButton.styleFrom(
                textStyle: Theme.of(context).textTheme.labelLarge,
              ),
              child: const Text('Nevermind'),
              onPressed: () {
                Navigator.pop(context, false);
              },
            ),
            TextButton(
              style: TextButton.styleFrom(
                textStyle: Theme.of(context).textTheme.labelLarge,
              ),
              child: const Text('Leave'),
              onPressed: () {
                Navigator.pop(context, true);
              },
            ),
          ],
        );
      },
    );
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            const Text('Page Two'),
            PopScope(
              canPop: false,
              onPopInvoked: (bool didPop) async {
                if (didPop) {
                  return;
                }
                final bool shouldPop = await _showBackDialog() ?? false;
                if (context.mounted && shouldPop) {
                  Navigator.pop(context);
                }
              },
              child: TextButton(
                onPressed: () async {
                  final bool shouldPop = await _showBackDialog() ?? false;
                  if (context.mounted && shouldPop) {
                    Navigator.pop(context);
                  }
                },
                child: const Text('Go back'),
              ),
            ),
          ],
        ),
      ),
    );
  }
}

Screenshots or Video

Screenshots / Video demonstration

Logs
Logs
[Paste your logs here]

Flutter Doctor output
Doctor output
Flutter assets will be downloaded from https://storage.flutter-io.cn. Make sure you trust this source!
[√] Flutter (Channel stable, 3.19.3, on Microsoft Windows [版本 10.0.19045.4170], locale zh-CN)
    • Flutter version 3.19.3 on channel stable at D:\flutter
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision ba39319843 (9 days ago), 2024-03-07 15:22:21 -0600
    • Engine revision 2e4ba9c6fb
    • Dart version 3.3.1
    • DevTools version 2.31.1
    • Pub download mirror https://pub.flutter-io.cn
    • Flutter download mirror https://storage.flutter-io.cn

[√] Windows Version (Installed version of Windows is version 10 or higher)

[√] Android toolchain - develop for Android devices (Android SDK version 34.0.0)
    • Android SDK at D:\Android\Sdk
    • Platform android-34, build-tools 34.0.0
    • Java binary at: D:\Android\Android Studio\jbr\bin\java
    • Java version OpenJDK Runtime Environment (build 17.0.9+0--11185874)
    • All Android licenses accepted.

[X] Chrome - develop for the web (Cannot find Chrome executable at .\Google\Chrome\Application\chrome.exe)
    ! Cannot find Chrome. Try setting CHROME_EXECUTABLE to a Chrome executable.

[√] Visual Studio - develop Windows apps (Visual Studio Community 2022 17.8.3)
    • Visual Studio at D:\Microsoft Visual Studio\2022\Community
    • Visual Studio Community 2022 version 17.8.34330.188
    • Windows 10 SDK version 10.0.22621.0

[√] Android Studio (version 2023.2)
    • Android Studio at D:\Android\Android Studio
    • Flutter plugin can be installed from:
       https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
       https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 17.0.9+0--11185874)

[√] Connected device (3 available)
    • sdk gphone64 x86 64 (mobile) • emulator-5554 • android-x64    • Android 14 (API 34) (emulator)
    • Windows (desktop)            • windows       • windows-x64    • Microsoft Windows [版本 10.0.19045.4170]
    • Edge (web)                   • edge          • web-javascript • Microsoft Edge 121.0.2277.106

[!] Network resources
    X An HTTP error occurred while checking "https://github.com/": Connection closed before full header was received

! Doctor found issues in 2 categories.

GIF： https://github-production-user-asset-6210df.s3.amazonaws.com/58471330/313457157-3a9fd7a7-c600-451d-85d2-7d0fc5dc4d56.gif?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAVCODYLSA53PQK4ZA%2F20240317%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20240317T084135Z&X-Amz-Expires=300&X-Amz-Signature=22979fd3c6a67b5efe0cae624d3083515c7c72bb5057c3c07696435d9c88fe71&X-Amz-SignedHeaders=host&actor_id=58471330&key_id=0&repo_id=31792824

I am facing the same issue with Go router.
when the last page is in the stack it should close the app on context.pop() (in case of go router) or Navigator.pop(context).
the app is moving to the background and not terminating.
I even tried SystemNavigator.pop() it's not working as well.

Try
await SystemChannels.platform.invokeMethod('SystemNavigator.pop')

Under the hood SystemNavigator.pop() is calling the same thing then what's the difference between this and that

@ilgnefz
Check https://docs.flutter.dev/release/breaking-changes/android-predictive-back and see if it helps in your case or not.


Upload app on PyPi

Update pypi with 1.4.6 version, please.

The 1.4.6 version is on pypi already: https://pypi.python.org/pypi?:action=display&name=django-pydash-app&version=1.4.6


A needed help About Es expection "without one being designated as a write index" when creating a new profile task

Please answer these questions before submitting your issue.

Why do you submit this issue?
[X] Question or discussion

Question

What do you want to know?
Similarly with #4729  ，I find an errors  "The write index may be explicitly disabled using is_write_index=false or the alias points to multiple indices without one being designated as a write index" when creating a new profile task. However I am sure that I have pulled the lastest code in master branch.

There are multiple indices with alias "profile_task" in my Es and the latest "Write Index" also exists

If "profile_task-20200516" is set as  "is_write_index" = true, it will work without this error.  But other metrics indexes with the same alias can work well without doing this.
It is also a TTL Bug?  Would you mind to share some suggestions to deal with it?

All indexes should be created based on the template. This seems very strange.

Seems I could reproduce this issue locally, but don't know why for now.


fix(controller): fix assignment to constant variable when assigning mwb month

:tada: This PR is included in version 1.1.1 :tada:
The release is available on GitHub release
Your semantic-release bot :package::rocket:


Backport issue(#1156) and issue(#1057) to branch opendistro-1.6

opensearch-security pull request intake form
Please provide as much details as possible to get feedback/acceptance on your PR quickly

Category: (Enhancement, New feature, Bug fix, Test fix, Refactoring, Maintenance, Documentation)
Backporting

Github Issue # or road-map entry, if available:

Description of changes:

Why these changes are required?

What is the old behavior before changes and new behavior after changes? (Please add any example/logs/screen-shot if available)

Testing done: (Please provide details of testing done: Unit testing, integration testing and manual testing)

Setup Instructions

8.Is it backport from main branch? (If yes, please add backport PR # and commits #)
Yes,

#1156  and commit hash is : 9adcd2010ad7d0d693704227eb7db31ae72e841d

#1057 and commit hash is : 70a4f700518c06fb24cac1b01a22dad33d6fad8e
By making a contribution to this project, I certify that:
(a) The contribution was created in whole or in part by me and I
have the right to submit it under the open source license
indicated in the file; or
(b) The contribution is based upon previous work that, to the best
of my knowledge, is covered under an appropriate open source
license and I have the right under that license to submit that
work with modifications, whether created in whole or in part
by me, under the same open source license (unless I am
permitted to submit under a different license), as indicated
in the file; or
(c) The contribution was provided directly to me by some other
person who certified (a), (b) or (c) and I have not modified
it.
(d) I understand and agree that this project and the contribution
are public and that a record of the contribution (including all
personal information I submit with it, including my sign-off) is
maintained indefinitely and may be redistributed consistent with
this project or the open source license(s) involved.
By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.
For more information on following Developer Certificate of Origin and signing off your commits, please check here.

Codecov Report

Merging #1267 (334a405) into opendistro-1.6 (fa034d1) will increase coverage by 0.08%.
The diff coverage is 75.75%.

@@                 Coverage Diff                  @@
##             opendistro-1.6    #1267      +/-   ##
====================================================
+ Coverage             62.79%   62.88%   +0.08%
- Complexity             2953     2967      +14
====================================================
  Files                   229      231       +2
  Lines                 16326    16377      +51
  Branches               3054     3062       +8
====================================================
+ Hits                  10252    10298      +46
- Misses                 4493     4495       +2
- Partials               1581     1584       +3

Impacted Files
Coverage Δ

...arch/security/ssl/OpenDistroSecuritySSLPlugin.java
82.05% <0.00%> (ø)

...ort/OpenDistroSecuritySSLTransportInterceptor.java
0.00% <0.00%> (ø)

...lasticsearch/security/support/ConfigConstants.java
90.00% <ø> (ø)

...rch/security/setting/OpenDistroDynamicSetting.java
60.00% <60.00%> (ø)

...ticsearch/security/configuration/CompatConfig.java
38.23% <66.66%> (+10.64%)
:arrow_up:

.../security/setting/TransportPassiveAuthSetting.java
80.00% <80.00%> (ø)

...ty/transport/OpenDistroSecurityRequestHandler.java
71.64% <83.33%> (+0.91%)
:arrow_up:

...arch/security/filter/OpenDistroSecurityFilter.java
64.33% <88.88%> (+3.14%)
:arrow_up:

...asticsearch/security/OpenDistroSecurityPlugin.java
82.35% <100.00%> (+0.11%)
:arrow_up:

...ch/security/ssl/transport/OpenDistroSSLConfig.java
100.00% <100.00%> (+9.52%)
:arrow_up:

... and 9 more

Continue to review full report at Codecov.

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


The Great ESM Migration

Overture
Please see full commit messages for more context on the changes you see.
This is for ActionMenu only. Let's get one package right first. If you dig it, we'll expand to the rest of packagekind.
Once approved, I do not plan to merge but to do more commits and merge all the packages in one PR.
A couple other links re the file extensions (TS-specific) that might be helpful:

https://github.com/microsoft/TypeScript/issues/16577#issuecomment-754941937
https://github.com/microsoft/TypeScript/issues/16577#issuecomment-703190339

Note: Build is broken. Note avatar build:css busted. This is because the change to build makes it esm compatible only. Once we update all the packages to be esm, we should be set.

@danethurber Ditto, I would have thought tsc would do it. In the linked issues to the TS project, you can see the maintainers saying that rewriting the files like that is no in line with their project philosophy.


[FEATURE] Built in HTTP server provider

Something that has long been discussed and requested amongst the community is the ability to have built in providers and autolinking for some of the most common providers. In order to keep this narrowly scoped, this issue lays out how to support providers and autolinking for a http server. However, the learnings here should inform how to build this for other common providers.
What we need
To add a built in http provider, we're going to need to implement a few things. Most of these can be done separately from each other.
Runtime support for http server
In the runtime crate, we need to add an http server (likely via hyper so it can be as performant as possible) implementation to the runtime implementations we provide to components. This will need to take configuration that identifies which port to listen on. Routing will be done via the Host header, which will map to the component ID that is given when starting a component. The host will not take care of any DNS routing or other information and the only requirement will be that the Host header is set. So if you were running a component with the ID of foobar on localhost with the wasmcloud host listening on port 8080, a curl request would look something like this:
curl -H 'Host: foobar:8080' http://localhost:8080

If possible, the builtin http server should still route to a component running on another host if that component isn't running locally.
The exact implementation details don't matter here too much, the main requirement is that the host only listens on a single port and then can do some basic routing to a component
API handler changes (non-breaking)
The other large change will be support in the host for autolinking to a default provider. Starting and stopping a component should also now have a step to see if a default provider is running. Right now, this will just be for HTTP, but in the future, it would check for all configured autolinking interfaces. If the default provider is running, it will put a link for that provider into the lattice. This is because we still want the actual linking relationship defined and auditable via link.
For the put_link endpoints, ff a user then puts another link between the component and a provider of the same interface, the autolink should be deleted (for now this is just the one interface, but we'll need more advanced logic in the future that can recreate an autolink for a subset of interfaces that might not have been "overridden" by a user-created link, but we'll cross that bridge when we need to). This means we will now need to store an additional boolean field (probably called something like autolink) with the link information in the data store. We can use this field to identify whether or not that was automatically linked. To start, this should not be added to the public API, so we can evolve it if needed as we continue to grow our use of autolinking and default providers.
Please note that if a user wants to keep both a link to a default provider and a different provider (such as when having an ingress provider that routes traffic from the internet and using the default provider when on intranet or for debugging), they will need to explicitly link to the builtin as well as to the other provider. This applies to both imperative commands with wash or within a wadm manifest.
The name of the builtin should have a special prefix: builtin:. So for the http, this would be builtin:http-server. When we add more of these, they should follow a similar pattern
New flags on the host binary
These features will require 2 new flags to be added to the host binary. Please consider these suggestions and feel free to modify in implementation:

--http <port>: This flag will enable the built in http server to listen on the given port
--autolink: To start, this flag will be a boolean that enables autolinking for the builtin http. In the future, we can extend this with additional configuration. See the last section in this issue for more information

PLEASE NOTE: Neither of these features will be on by default in the binary. See the next section for more information on how it will be used with things like wash and docker.
Later on we might add a flag like --builtins that let you enable multiple and deprecate the --http flag, but since http servers are core to so many services, I don't think it is a bad thing to have that flag around until at least 2.0
Wash and helm chart updates
Obviously one of the biggest use cases for this new feature would be in developer workflows. As such, wash up should enable the builtin http by default with autolink enabled as well.
For our helm chart, the default should also be to enable builtin http. This should make the "kick the tires" mode easy when people install the wasmcloud-operator for the first time.
Security implications
One important thing to note is that all invocations of the component that are done locally should still run through the policy service. This means we will need to generate a "synthetic" invocation that gets passed into the policy logic.
To avoid accidental exposure of a component when autolinking is enabled, the policy service can be used to deny or allow starting specific components if a host has autolinking turned on. Support for this information will need to be added to the policy service data structures. The other option for high security deploys is to not enable any of the autolinking.
Unknowns/open for discussion
Probably the biggest unknown here is whether or not we still need to show some sort of invocation on the wrpc topics for purposes of logging/tracking in the case where the http request is handled locally. As mentioned in the security implications section, we will still generate synthetic invocations that are passed to the policy service, but some users may prefer to have that invocation still be published on the wire for logging purposes. This could be done on a special topic like wrpc.builtin.wasi:http.incoming-handler (note: this is totally not a valid topic, just writing it out to illustrate the point). I'm curious if anyone has any feedback here.
Things we can gloss over for now
As we continue to add more autolinking support for any arbitrary provider, we probably need a way to configure this that isn't just with flags/env vars as that would get really ugly to be mapping specific interfaces to providers and then what the autolink should look like. This means we'll probably need a way to express this within the config service and/or a separate host config file. However, the goal of this initial implementation will just be to get the logic working with a single builtin http provider

Thanks for writing this down, all sounds good to me!
Just have one question regarding the design here:

If possible, the builtin http server should still route to a component running on another host if that component isn't running locally.

If I understand this correctly, you're suggesting that if, let's say there are 2 hosts running on two separate machines (virtual or otherwise, e.g. two containers), A and B.

Both A and B have a builtin HTTP server running.
A serves foo:8080
B serves bar:8080

If A receives call for bar:8080, it proxies the request to B.
If the above is the correct understanding, then it seems like it would require, essentially, building a (very minimal) DNS service running on NATS, right? It appears that such system would imply some non-determinism, e.g. if we introduced a host C, which would also serve bar:8080, which host would the request received by A routed to? (I'm guessing that the non-determinism here is actually a desired feature, since that would allow for failover, 0-downtime upgrades and such)

@rvolosatovs My thinking was that since we're still requiring linking you could just publish it out just like the http provider does. So in your example, if A got a call for component bar (which is running on B or C), the host could then look up the link to that component and send it via the normal wRPC mechanism if it wasn't present on the machine.
One of the reasons I thought about when keeping the link is that in the future we might want to allow users to specify their own default providers/built ins, which could be normal providers. But even if we don't go down that route, using the link to route if it isn't found locally preserves the same behavior people expect currently.
Did I misunderstand what you were saying or does that help clarify what I meant?

@rvolosatovs My thinking was that since we're still requiring linking you could just publish it out just like the http provider does. So in your example, if A got a call for component bar (which is running on B or C), the host could then look up the link to that component and send it via the normal wRPC mechanism if it wasn't present on the machine.
One of the reasons I thought about when keeping the link is that in the future we might want to allow users to specify their own default providers/built ins, which could be normal providers. But even if we don't go down that route, using the link to route if it isn't found locally preserves the same behavior people expect currently.
Did I misunderstand what you were saying or does that help clarify what I meant?

I saw the Host header being used for routing and assumed that would be domain name based, rather than component ID.
I'm concerned about (ab-?) using the Host header for specifying the component ID, in fact, I believe this would break most web applications, since it's generally expected that Host header is specified exactly once in all HTTP/1.1 requests.
A request sent to example.com:8080 served by component foobar would have 2 with this design.
If we do want to use a header for this, I think we need to use a custom one. Potentially we could specify the original host in X-Forwarded-Host like a proxy would do, but I doubt that's what developers would expect. I don't think the component name should appear anywhere in the incoming HTTP request at all.
I generally don't think that the client should be able to select the component that would serve it's request, rather, it seems like the HTTP server plugin should either act as a proxy (using the domain name, not component ID), i.e. mapping Host header values to component IDs or only allow associating a single port with a single component.
What I'm saying is, that as an application developer, I should be able to write a component, which handles HTTP requests to foo.example.com and bar.example.com, served by wasmCloud listening on e.g. port 8080. I could use a reverse proxy, for example, to set up TLS for me and expose my service on actual domains and ports routing requests to localhost:8080. I would, ideally, not want to have to specify any extra config for this to work, in other words, I would not want to have to provision my component ID anywhere in my proxy config.
In cases without a proxy, I'm not sure how this would work in practice at all, since it appears that calling anything would require a custom header set at all times.

The lightweight nature of Wasm components in WasmCloud allows us to host a large number of components in a wasmHost . I dont think it should maintain the limitation of having to open a separate port for each component that serves requests over http.
There are some restrictions in some private cloud environments where you cannot open ports on demand for security reasons.
A single http server running on port 8080 should be able to handle http requests routed to any component.
In case of a reverse proxy implementation, there has to be some place in wasmCloud where the mapping of the route to componentId is maintained.
I think the thought process behind having to specify the component id in the header is to make this builtin lightweight because there would not be a need to maintain a mapping of routes to componentId's in that case.
The WADM anyways has the route information and component id details. Can wasmcloud just use this information to derive the component id based on the route instead of the client explicitly having to specify a certain host header with the component id?

If we do want to allow multiple components to share a port for MVP, I think the simplest and least surprising implementation would allow domain names to be specified as part of component/link metadata.
For example, a component foo could be configured to serve requests to *.example.com and example.com. A component bar could be configured with myexample.com. In result:

foo.example.com would be routed to foo
test.example.com would be routed to foo
example.com would be routed to foo
myexample.com would be routed to bar
foo.myexample.com would not be routed
foo.bar.example.com would not be routed

That's the lightweight DNS approach I mentioned.
What do you think?

So when linking to the builtin provider, would it expect to have config like DOMAINS=*.example.com,example.com? I think I'm ok with that!

So when linking to the builtin provider, would it expect to have config like DOMAINS=*.example.com,example.com? I think I'm ok with that!

Actually the domain name doesnt need to change .
In a real use case, the domain is 'something.example.com' . only the path will change .
eg :
'http://something.example.com/foo' will be routed to foo
'http://something.example.com/bar' will be routed to bar

Another important feature in this builtin should be to add the capability for the component to directly write to the outputStream od the incoming httpRequest.
When i check the invocationParams struct today , I only see the request body for http here :
https://github.com/wasmCloud/wasmCloud/blob/main/crates/host/src/wasmbus/mod.rs#L210
If we can pass the responseWriter down to the component, the component will be able to write the response directly . This will increase the throughput of the router component if any and also be more performant.
It will also make the wasmCloud host more flexible as components will directly be able to handle streaming without having to modify core components of the wasmCloud host.

Another important feature in this builtin should be to add the capability for the component to directly write to the outputStream od the incoming httpRequest.
When i check the invocationParams struct today , I only see the request body for http here :
https://github.com/wasmCloud/wasmCloud/blob/main/crates/host/src/wasmbus/mod.rs#L210
If we can pass the responseWriter down to the component, the component will be able to write the response directly . This will increase the throughput of the router component if any and also be more performant.
It will also make the wasmCloud host more flexible as components will directly be able to handle streaming without having to modify core components of the wasmCloud host.

Components already use streaming for all HTTP functionality, the body type in that enum is actually the stream, that the component writes to.

'http://something.example.com/foo' will be routed to foo
'http://something.example.com/bar' will be routed to bar

This feels more like an L7 router where the component name is the top level of the path. I am not sure if that is going to be the best design or not for a built in


teleplot via remote monitor

Hey,
Just wanted to ask if there is a way to use this tool with "remote monitor" in VSCode and PlatformIO? I have an ESP32 connected to an Rpi3 running pio remote agent. Uploading firmware remotely and also remote monitor from my development-PC (Win11) is working. I dont know how to get teleplot running, so that it plots data from my ESP32.

Hi,
Teleplot can plot telemetry comming from Serial ports and UDP packets. If the ESP32 is not connected to the PC that runs the teleplot server, you won't be able to open the serial port.
However, as you are using an ESP32, probably connected to the same network than your PC, sending UDP packets to your PC ip should be possible! this is explainend here (not a lot of words, but not much to do!)

Take care, when using UDP packets, the > character should not be prefixed to telemetries. for more detatils check the format specifications here: https://github.com/nesnes/teleplot/blob/main/README.md#telemetry-format


path of configuration file

Add the possibility to specify the path of the configuration files as argument of the application. This gives more flexibility when installing the applications on paths with no write permissions.

Done. Uses the parameter --configPath=


Support data path translation for pipeline access

Now that the VAST-P1 paper has been submitted, we wish to move onto analysis of the full VAST dataset using the latest pipeline version. We don't want to simply replace the existing pipeline with the new version since the existing pipeline runs have been used for publications and we may need to access it in future. Instead, we'd like to serve both the existing VAST-P1 pipeline instance and a new instance that uses the latest pipeline and corrected survey data.
To achieve this, I have been working on cleaning up the infrastructure of our Nimbus deployments. I've settled on supporting running our various services (e.g. the pipeline, JupyterHub, metadata, etc) in containers to simplify their management. One of the main advantages to this approach is that we can create multiple instances of these services on the same Nimbus VM while keeping them isolated and portable, which addresses the problem outlined above.
However, this containerised approach introduces a new problem: the vast-tools pipeline module assumes it is being run on the same system as the pipeline which is not true for containers. The containers may be running on the same physical system, but they are isolated from the perspective of the processes running within the containers. Currently, vast-tools.pipeline.Pipeline allows the user to change where it looks for the pipeline runs using the project_dir kwarg, but again this assumes that the data paths the pipeline used will be the same on the Jupyter server.
In order for vast-tools to access pipeline runs and their associated data, the single-user Jupyter servers spawned by JupyterHub will need to access the pipeline working directory (runs), raw image directory (survey data), and the home data directory (additional data that may have been provided by a user). These paths are defined in the pipeline .env file as PIPELINE_WORKING_DIR, RAW_IMAGE_DIR, and HOME_DATA_ROOT/<username>/HOME_DATA_DIR, respectively. These directories must be accessible to the spawned single-user Jupyter servers, but since the paths could clash between pipeline instances, the mount/bind points should be unique and not necessarily the same as the originals. Therefore, some user-defined translations of the data file paths is required.
To illustrate the problem, consider that we have 3 pipeline instances: a v0.2.0, v1.0.0, and v1.1.0 instance. All of these instances contain several runs and users wish to access runs from all instances for analysis on JupyterHub using vast-tools.
The instances were configured with the following data path settings:
# v0.2.0
PIPELINE_WORKING_DIR=/mnt/pipeline-runs/runs
RAW_IMAGE_DIR=/data/pilot
# note that the home data feature was not implemented for this version

# v1.0.0
PIPELINE_WORKING_DIR=/data/vast-pipeline/vast-pipeline/pipeline-runs
RAW_IMAGE_DIR=/data/vast-survey/pilot_corrected_racs_cres
HOME_DATA_DIR=vast-pipeline-extra-data
HOME_DATA_ROOT=/data/vast-user-home-data

# v1.1.0
PIPELINE_WORKING_DIR=/data/vast-pipeline/vast-pipeline/pipeline-runs
RAW_IMAGE_DIR=/data/vast-survey/pilot_corrected_racs_cres
HOME_DATA_DIR=vast-pipeline-extra-data
HOME_DATA_ROOT=/data/vast-user-home-data

Note that since the pipeline can be run in a container, the data paths are arbitrary. For example, the data paths for the v1.0.0 and v1.1.0 instances above are exactly the same, but this doesn't mean they point to the same physical files as they could be mounted from different sources.
If we want the Jupyter servers to be able to access runs from all of these pipeline instances, the above data paths must be mounted to the single-user Jupyter servers. I can see two ways to do this:

Bind all configured data paths to the same location. e.g. /mnt/pipeline-runs/runs from the v0.2.0 instance is bound to /mnt/pipeline-runs/runs on the single-user Jupyter servers. This simple approach will work only if the instances have unique data paths, which in this example is not true.

Bind all configured data paths to arbitrary unique locations. e.g. /mnt/pipeline-runs/runs from the v0.2.0 instance is bound to /data/pipeline-v0.2.0/runs on the single-user Jupyter servers. Since each bind target may now be unique, clashes between the v1.0.0 and v1.1.0 paths are avoided. However, vast-tools will now fail to find some files as it retrieves some data paths from the parquet files which contain the original absolute data paths from the pipeline instance. For example, the measurements are read from the measurement parquets which are located using the paths stored in the images parquet, which are absolute paths on the pipeline instance, not the Jupyter server instance.

The latter option is more flexible but requires changes to vast-tools to translate the original data paths to the new bind targets.
My proposed solution is to add a data_paths: Dict[str, str] kwarg to Pipeline.__init__ (open to renaming suggestions) that is used to translate the data paths on-the-fly when accessing the data. Continuing the example from above, a Pipeline object could be created for the v0.2.0 instance with:
from vasttools.pipeline import Pipeline

pipeline_v020 = Pipeline(
    project_dir="/data/pipeline-v0.2.0/runs",
    data_paths={
        "/mnt/pipeline-runs/runs": "/data/pipeline-v0.2.0/runs",
        "/data/pilot": "/data/pipeline-v0.2.0/survey-data",
    }
)

Whenever a path that begins with /mnt/pipeline-runs/run or /data/pilot, it will be translated to /data/pipeline-v0.2.0/runs and /data/pipeline-v0.2.0/survey-data respectively. We may also want to add another environment variable, similar to VAST_DATA_DIR and PIPELINE_WORKING_DIR, that could act as a default in case no kwargs are passed to Pipeline.__init__. We would also publish the data path mappings on the wiki so users can look up the required paths for each available pipeline instance.
Anyone more familiar with vast-tools see a problem with this approach?

Closing this issue as it was decided to solve it using JupiterHub because of the versioning requirements. Please reopen @marxide if this is not the case.


test: fix some integration tests which haven't deleted containers created before

Signed-off-by: mathspanda<EMAIL_ADDRESS>
Ⅰ. Describe what this PR did
Some of integration tests haven't correctly deleted containers created before at the end.
Ⅱ. Does this pull request fix one issue?

None
Ⅲ. Why don't you add test cases (unit test/integration test)? (你真的觉得不需要加测试吗？)
Just fix integration test.
Ⅳ. Describe how to verify it

make integration-test
start pouchd
pouch ps -a and there is nothing

Ⅴ. Special notes for reviews
None

 Thank you for your submission, we really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.You have signed the CLA already but the status is still pending? Let us recheck it.

@mathspanda Thanks a lot for your contribution. That is great. In addition,

LGTM


[bug]:  "LNWL: unable to fetch transaction" error after upgrading to 0.16.1-beta

Background
Upgraded (built myself) to 0.16.1-beta, started to see unable to fetch transaction errors just after restart:
2023-04-26 20:58:49.259 [INF] LTND: Version: 0.16.1-beta commit=v0.16.1-beta, build=production, logging=default, debuglevel=info,LNWL=debug,HSWC=trace
2023-04-26 20:58:49.260 [INF] LTND: Active chain: Bitcoin (network=mainnet)
2023-04-26 20:58:49.264 [INF] LTND: Pprof listening on <IP_ADDRESS>:9000
2023-04-26 20:58:49.346 [INF] RPCS: RPC server listening on <IP_ADDRESS>:10009
2023-04-26 20:58:49.370 [INF] RPCS: gRPC proxy started at <IP_ADDRESS>:8080
2023-04-26 20:58:49.371 [INF] LTND: Opening the main database, this might take a few minutes...
2023-04-26 20:58:49.371 [INF] LTND: Opening bbolt database, sync_freelist=false, auto_compact=true
2023-04-26 20:58:49.379 [INF] CHDB: Compacting database file at /home/lnd/.lnd/data/graph/mainnet/channel.db
2023-04-26 20:59:53.309 [INF] CHDB: DB compaction of /home/lnd/.lnd/data/graph/mainnet/channel.db successful, 286453760 -> 193302528 bytes (gain=1.48x)
2023-04-26 20:59:53.310 [INF] CHDB: Swapping old DB file from /home/lnd/.lnd/data/graph/mainnet/temp-dont-use.db to /home/lnd/.lnd/data/graph/mainnet/channel.db
2023-04-26 20:59:53.460 [INF] CHDB: Compacting database file at /home/lnd/.lnd/data/chain/bitcoin/mainnet/macaroons.db
2023-04-26 20:59:53.486 [INF] CHDB: DB compaction of /home/lnd/.lnd/data/chain/bitcoin/mainnet/macaroons.db successful, 32768 -> 32768 bytes (gain=1.00x)
2023-04-26 20:59:53.491 [INF] CHDB: Swapping old DB file from /home/lnd/.lnd/data/chain/bitcoin/mainnet/temp-dont-use.db to /home/lnd/.lnd/data/chain/bitcoin/mainnet/macaroons.db
2023-04-26 20:59:53.498 [INF] CHDB: Compacting database file at /home/lnd/.lnd/data/graph/mainnet/sphinxreplay.db
2023-04-26 21:00:13.311 [INF] CHDB: DB compaction of /home/lnd/.lnd/data/graph/mainnet/sphinxreplay.db successful, 47603712 -> 42123264 bytes (gain=1.13x)
2023-04-26 21:00:13.319 [INF] CHDB: Swapping old DB file from /home/lnd/.lnd/data/graph/mainnet/temp-dont-use.db to /home/lnd/.lnd/data/graph/mainnet/sphinxreplay.db
2023-04-26 21:00:13.391 [INF] LTND: Creating local graph and channel state DB instances
2023-04-26 21:00:13.429 [INF] CHDB: Checking for schema update: latest_version=29, db_version=29
2023-04-26 21:00:13.431 [INF] CHDB: Checking for optional update: prune_revocation_log=false, db_version=0: prune revocation log
2023-04-26 21:00:13.432 [INF] LTND: Database(s) now open (time_to_open=1m24.053012836s)!
2023-04-26 21:00:13.432 [INF] LTND: Attempting automatic wallet unlock with password provided in file
2023-04-26 21:00:17.453 [INF] LNWL: Opened wallet
2023-04-26 21:00:17.826 [INF] CHRE: Primary chain is set to: bitcoin
2023-04-26 21:00:37.985 [ERR] LNWL: unable to fetch transaction <redacted> for mempool: -5: No such mempool or blockchain transaction. Use gettransaction for wallet transactions.
2023-04-26 21:00:51.137 [ERR] LNWL: unable to fetch transaction <redacted> for mempool: -5: No such mempool or blockchain transaction. Use gettransaction for wallet transactions.
2023-04-26 21:00:51.157 [ERR] LNWL: unable to fetch transaction <redacted> for mempool: -5: No such mempool or blockchain transaction. Use gettransaction for wallet transactions.
<more of those [ERR]>...

Restarted lnd agian, restarted bitcoind - did not help.
I do see this line in bitcoind log thought:
BlockUntilSyncedToCurrentChain: txindex is catching up on block notifications

Maybe this could be related? Anyway, previous lnd version worked.
Your environment

0.16.1-beta from git
Linux odroid-hc1 6.1.0-0.deb11.6-armmp-lpae #1 SMP Debian 6.1.15-1~bpo11+1 (2023-03-16) armv7l GNU/Linux
bitcoind v24.0.1
built with Go 1.19.7

Steps to reproduce
Not sure, I just built and restarted lnd.
Expected behaviour
lnd shoud start successfully without spamming logs with [ERR].
Actual behaviour
lnd spams log with unable to fetch transaction and seems to stop after that.

Yes, but I wouldn't recommend you do so as 0.16.1 has important bug fixes. That log is benign also, we'll start to see if certain transactions are already in the mempool now so we can trigger some HTLC resolution behavior sooner if needed. It's just an optimization though: things still work just slower if we don't see relevant stuff in the mempool.

That log is benign also

But after these messages, no other log messages appear. If I try to invoke lncli, I just get:
[lncli] rpc error: code = Unknown desc = the RPC server is in the process of starting up, but not yet ready to accept calls

Or you mean I have to wait wayyy longer to lnd start to "work"? I got impression as if it "hung".

Finally, after spending 30 minutes of CPU time (TIME column in htop), lnd started scanning blocks and is now acceping RPC calls.
I would call it rather big performance regression.

Ah I didn't realize in your case it was impeding node start up. How large is the mempool of your node? You can find that with getmempoolinfo. Also any relevant hardware starts re CPU/RAM?

getmempoolinfo:
{
  "loaded": true,
  "size": 140758,
  "bytes": 95010858,
  "usage": 286763824,
  "total_fee": 3.81544136,
  "maxmempool": 300000000,
  "mempoolminfee": 0.00000100,
  "minrelaytxfee": 0.00000100,
  "incrementalrelayfee": 0.00001000,
  "unbroadcastcount": 0,
  "fullrbf": true
}

It's Odroid-HC1 ARM machine. Samsung Exynos5422 ARM® Cortex™-A15 Quad 2.0GHz/Cortex™-A7 Quad 1.4GHz with 2GB of RAM and SSD.

Thanks, also I assume bitcoind is running on that same machine?

@Roasbeef yes.

It's 1,5GB usage:

And ~100MB of swap with rather rare swap in/out events:
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 2  0 110260  48344  17364 339668    0    0     0     2    2    2  7  3 90  0  0
 1  0 110260  56344  17224 334120    0   48  2992   292 2830 1495 24  2 73  1  0
 2  0 110260  56092  17232 334232    0    0     0    20 1376  986 16  1 83  0  0
 2  0 110260  56092  17240 334232    0    0     0    20 1414  980 20  1 79  0  0
 1  0 110260  55588  17376 334336    0    0   240    20 1048  718 15  1 85  0  0
 2  0 110260  55588  17388 334500    0    0   160    20 1026  721 14  1 85  0  0
 1  0 110260  55336  17412 334484    0    0    32   180 1423 1148 15  1 83  0  0
 2  0 110260  55084  17420 334620    0    0    88    20 1538 1164 15  1 83  0  0
 1  0 110260  55084  17428 334652    0    0    40    20 1280  945 15  1 84  0  0
 2  0 110260  55084  17436 335372    0    0   776    20 1300  886 15  1 84  0  0
 2  0 110260  53056  17452 335664    0    0   292    20 1498 1161 17  2 81  0  0
 4  0 110260  53056  17476 335720    0    0     0   428 2857 1756 23  2 76  0  0
 2  0 110260  56896  17488 335708    0    0    92    20 3389 1660 31  3 67  0  0
 4  5 110260  56860  17496 335832    0    0   596    20 1660 1102 17  1 82  0  0
 6  0 110260  49484  17504 336764    4    0   396    20 4494 4831 33  4 63  0  0
 7  0 110516  52996  16836 316576   32  240<PHONE_NUMBER>7 21073 58 15 27  0  0
 4  0 110516  46496  15700 287232   72   36<PHONE_NUMBER>5 20506 45 17 38  0  0
 1  0 110516  54276  14880 267240   20   32   868    52 11683 13139 55 10 35  0  0
 3  0 110516  53520  14892 267348    0    0   112    20 7245 12135 13  9 78  0  0
 3  0 110516  53520  14900 267452    0    0     0    20 6245 10357 12  8 80  0  0
 5  0 110516  53268  14908 267632    0    0   248    20 6569 10505 13  8 79  0  0
 4  0 110516  53016  14952 267888    0    0<PHONE_NUMBER> 11115 13  9 78  0  0
 3  0 110516  53016  14968 267872    4    0   196    20 6207 10542 13  8 79  0  0
 1  0 110516  49996  14976 268428    0    0   780    20 7155 11119 12 10 78  0  0
 2  0 110516  49996  14984 268908    0    0    64    20 6170 9141 14  7 79  0  0
 2  0 110516  49772  15000 269376    0    0   564    20 6277 8745 15  6 79  0  0
 2  0 110516  46092  15024 272072    0    0  2608   428 6584 8397 12 10 78  0  0

And it seems lnd usages is capped ant full core since upgrade:

And it seems bitcoind memory usage is growing since ugprade:

Here to report the same issue; my node hung on startup, spinning and eating up a ton of CPU cycles. I ended up switching back to 0.16.0 because it wasn't clear if the node would finish startup. In fact, when I tried to stop the node via lncli, I got an error...
2023-04-27 21:22:32.071 [INF] LNWL: Opened wallet
2023-04-27 21:22:32.200 [INF] CHRE: Primary chain is set to: bitcoin
2023-04-27 21:23:15.854 [ERR] LNWL: unable to fetch transaction 5007cff6805d203a3638472f4383a65e845602c23937fe33700d301fa12549a7 for mempool: -5: No such mempool transaction. Use -txindex or provide a block hash to enable blockchain transaction queries. Use gettransaction for wallet transactions.
2023-04-27 21:23:40.267 [ERR] LNWL: unable to fetch transaction e694fb5030cac143c172f309a205b82ef9df64b967d99937d27e72ae1ec76fbb for mempool: -5: No such mempool transaction. Use -txindex or provide a block hash to enable blockchain transaction queries. Use gettransaction for wallet transactions.
2023-04-27 21:23:43.487 [ERR] LNWL: unable to fetch transaction baaae30f29a3d85e2ffe28097a79415b4517f6411259937e6e240374f293e7df for mempool: -5: No such mempool transaction. Use -txindex or provide a block hash to enable blockchain transaction queries. Use gettransaction for wallet transactions.
2023-04-27 21:23:43.494 [ERR] LNWL: unable to fetch transaction f56ebb87f68dea10f22a3bff77b9875d72668870a6983d8102061399003303ed for mempool: -5: No such mempool transaction. Use -txindex or provide a block hash to enable blockchain transaction queries. Use gettransaction for wallet transactions.
2023-04-27 21:23:43.622 [ERR] LNWL: unable to fetch transaction b9dca5f8a8adb6a4190fc7335903d94bfb4c8a1f421515fe115f693845d8d8bc for mempool: -5: No such mempool transaction. Use -txindex or provide a block hash to enable blockchain transaction queries. Use gettransaction for wallet transactions.
2023-04-27 21:24:38.931 [ERR] RPCS: [/lnrpc.Lightning/StopDaemon]: the RPC server is in the process of starting up, but not yet ready to accept calls

For the record this node does NOT have txindex enabled.

This PR should help to resolve things (async+parallel), we're looking to quickly do a 0.16.2 release to ameliorate the issue: https://github.com/lightningnetwork/lnd/pull/7641

And it seems bitcoind memory usage is growing since ugprade:

That's interesting...the main change here is hitting getrawtransaction along with getrawmepool a bit more, but C++ memory management shouldn't hold onto these bytes, unless there's a memory leak. Or perhaps the extra transactions are being cached somewhere?

@Talkless you can also decrease the polling interval with this flag: --bitcoind.txpollinginterval=1m. The default is 10 seconds right now.

Branch with the fixes is here for those able to test it out: https://github.com/lightningnetwork/lnd/pull/7644
Summary of changes:

Start up isn't blocked on the new mempool logic (now async)
Increased polling interval to 60 seconds
Some processing now done in parallel

@Roasbeef I've built 0.16.2-beta tag and startup now is blazing fast! Did not change any settings.

My log is spamming [ERR] LNWL: unable to fetch transaction about 20 times a second for 20 minutes now.