NGSILD-Tenant Header Bad Request. Tenants are Strings and not IRIs.

Stellio: 2.10.2
I create a new tenant with the name openiot
curl -L -X POST 'http://localhost:8080/ngsi-ld/v1/entityOperations/upsert/?options=update' \
-H 'Content-Type: application/ld+json' \
-H 'NGSILD-Tenant: openiot' \
--data-raw '[
        {
            "@context": "http://context/ngsi-context.jsonld",
            "id": "urn:ngsi-ld:Device:filling002",
            "type": "FillingLevelSensor",
            "filling": {
                "type": "Property",
                "value": 0.96,
                "unitCode": "C62",
                "accuracy": {
                    "type": "Property",
                    "value": 0.05
                },
                "observedAt": "2024-01-12T13:28:33.867Z"
            }
        }
    ]'

Stellio responds:
{
  "detail": "The supplied identifier was expected to be an URI but it is not: openiot (tenant)",
  "type": "https://uri.etsi.org/ngsi-ld/errors/BadRequestData",
  "title": "The request includes input data which does not meet the requirements of the operation"
}

Nowhere in the NGSI-LD specification is it stated that a tenant must be a URI - it is usually defined as a String, so openiot is valid:

6.3.14 Tenant specification
If the system implementing the NGSI-LD API supports multi-tenancy as described in clause 4.14 and clause 5.5.10, the
tenant, to which the NGSI-LD HTTP operation is targeted, is specified as the HTTP header "NGSILD-Tenant", whose
value is the String identifying the tenant.

Table 5.2.9-1: CSourceRegistration data type definition

tenant String -  Identifies the tenant that has to be specified in all requests to the Context Source that are
related to the information registered in this Context Source Registration

Compare this with id in the same table which is restricted to an IRI.

`id String Valid URI. -  At creation time, if it is not provided, it will be assigned during registration process

Seems it has changed between 1.6.1 and 1.7.1, because 1.6.1 states in 6.3.14:
If the system implementing the NGSI-LD API supports multi-tenancy as described in clause 4.14 and clause 5.5.10, the
tenant, to which the NGSI-LD HTTP operation is targeted, is specified as the HTTP header "NGSILD-Tenant", whose
value is the tenant URI.

PS: Stellio does not support on-the-fly creation of tenants (which is an optional behavior, as said in 5.5.10): https://stellio.readthedocs.io/en/latest/user/multitenancy.html

Fair point - it looks like the NGSI-LD spec has changed between 1.6.1. and 1.7.1
6.3.14 Tenant specification

If the system implementing the NGSI-LD API supports multi-tenancy as described in
clause 4.14 and clause 5.5.10, the tenant, to which the NGSI-LD HTTP operation is targeted,
is specified as the HTTP header "NGSILD-Tenant",
- whose value is the tenant URI.
+ whose value is the String identifying the tenant.
In case the target tenant is the default tenant, the HTTP header is omitted.
If the HTTP header "NGSILD-Tenant" is present in the HTTP request, it shall also be present
in HTTP response. This also applies to HTTP notifications sent as a result of subscriptions
with an "NGSILD-Tenant" HTTP header (clause 6.3.8).

5.5.10 seems clear enough.

5.5..10
A tenant is represented in form of a String. How the tenant is specified for an API operation is protocol binding specific.
How tenants are created, is implementation-specific.
One implementation option is to support the implicit creation of tenants.

I'm trying to integrate an IoT Agent (which requires a Tenant) with Stellio.Two questions remain however:

Can the Tenant name be loosened from a URI to a String somehow? (following 1.7.1)
How to set up a docker-compose to set up a  tenant as supported?

1. Can the Tenant name be loosened from a URI to a String somehow? (following 1.7.1)

On its way: https://github.com/stellio-hub/stellio-context-broker/pull/1081
As it is a feature and a (minor) breaking change (due to the renaming of tenant URI to tenant name in config properties), I will release a 2.11.0 for this. I already have a major PR to be merged today (#1073), so this one will come next (mid week if everything goes well with the other).

2. How to set up a `docker-compose` to set up a  tenant as supported?

I added more details in https://stellio.readthedocs.io/en/latest/user/multitenancy.html on how to do it (I will update it when the relaxing of tenant names is available). Let me know.

2.11.0 has been released last Monday. The points discussed in the issue are addressed now.
Closing the issue, re-open if needed.


Use SampleBuilder in save-to-webm example

Description
UDP jitter is removed before saving to WebM by using SampleBuilder.
Also, add a link to save-to-webm example from top README.

awesome :) thanks again for the webm library! I have directed lots of users to it, I think it is helping people build lots of cool things.


Add Pen Blocks

The Blocks that i added is:
"Clear" Block
"Stamp" Block
"Pen Down" Block
"Pen Up" Block
"Change Pen Color by (Number)" Block
"Set Pen Color to (Number)" Block
"Change Pen Shade to (Number)" Block
"Set Pen Shade to (Number)" Block
"Change Pen Size to (Number)" Block
"Set Pen Size to (Number)" Block
The only Block that's not added is:
"Set Pen Color to (Color)" Block

Now with Sound Blocks

This looks awesome! Thank you @joaoh1!!

A couple of other minor comments, but looks good to me. @thisandagain ?

tmickel, actually, "Set Pen Color to [Color]" is not added, and "Set Pen Color to [Number]" is after "Change Pen Color by [Number]"

I see, makes sense!

Can i include Variables at this Pull Request?

@joaoh1 do you mean variable blocks? I think you're welcome to make some of those, but probably best to put it in a separate PR :) Also - we have some design work to do for variable blocks, so as a warning, your work might get overwritten.

This looks great. Thank you for sending this along. If you don't mind, I'd prefer to merge this as-is with the few minor adjustments we have noted. If we could isolate each PR to a single block category it makes it much easier for us to review & merge.

This is great. Thanks! 👍


General Grievance: Watch allemandfreres.ch

General Grievance requests the watch of the watch_keyword allemandfreres\.ch. See the MS search here and the Stack Exchange search in text, in URLs, and in code.

allemandfreres\.ch has been seen in 0 true positives, 0 false positives, and 0 NAAs.

Approved by Spevacus in Charcoal HQ


Feature request

Could you please add an option to center these buttons too?

Not actively developing this app or taking feature requests but will take pull requests


gerrit-393100-2

As always 😫 On GitHub always all patches from gerrit failing.

So maybe we should remove or adjust .travis.yml and appveyor.yml, to be more resistant to failing?


wasm-pack test --firefox does not work on macOS

From https://github.com/lumen/lumen/pull/549/checks?check_run_id=1029683108#step:12:170
Running headless tests in Firefox on `http://<IP_ADDRESS>:49367/`
Try find `webdriver.json` for configure browser's capabilities:
Not found
Starting new webdriver session...

driver status: signal: 9
driver stdout:
<PHONE_NUMBER>752	geckodriver	INFO	Listening on <IP_ADDRESS>:49367

Error: non-200 response code: 500
{"value":{"error":"unknown error","message":"Invalid Content-Type","stacktrace":""}}
error: test failed, to rerun pass '--test web'
Error: Running Wasm tests with wasm-bindgen-test failed
Caused by: failed to execute `cargo test`: exited with exit code: 1
  full command: "cargo" "test" "--target" "wasm32-unknown-unknown"

Keeping open in anticipation of the M1 build of FF to test


[$250] Track expenses - Unavailable workspace shown &app crashes if select share it with my accountant

If you haven’t already, check out our contributing guidelines for onboarding and email<EMAIL_ADDRESS>to request to join our Slack channel!

Version Number: 1.4.80-9
Reproducible in staging?: Y
Reproducible in production?: Y
If this was caught during regression testing, add the test name, ID and link from TestRail: https://expensify.testrail.io/index.php?/tests/view/4605669
Logs: https://stackoverflow.com/c/expensify/questions/4856
Issue reported by: Applause-Internal team
Action Performed:

Open the app and log in with a new account
Tap FAB > Track Expenses
Enter the amount and complete the expense creation
Navigate to self DM
Select "Share it with my accountant" in actionable whisper
On confirmation page tap Submit

Expected Result:
The new workspace name displayed in on the confirmation page and user is able to proceed to the participant page
Actual Result:
The Unavailable workspace is displayed on the confirmation page and the app crashes after tapping "Submit"
Workaround:
Unknown
Platforms:

Which of our officially supported platforms is this issue occurring on?

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

Screenshots/Videos
https://github.com/Expensify/App/assets/115492554/17054e6b-1b4a-46a0-bf77-8360c8522071

View all open jobs on GitHub
Upwork Automation - Do Not Edit

Upwork Job URL: https://www.upwork.com/jobs/~016f7ddb2eef36b28f
Upwork Job ID:<PHONE_NUMBER>417504843
Last Price Increase: 2024-06-07

Issue OwnerCurrent Issue Owner: @akinwale

We think this issue might be related to the #collect project.

@akinwale mind giving this proposal a review?

We can move forward with @dominictb's proposal here.
🎀👀🎀 C+ reviewed.

I'm unassigning since I'm headed out on extended leave after today. When the PR is approved Melvin should auto-assign a new internal engineer to review it.

Payment summary:

Contributor: @dominictb $250 paid via Upwork
Reviewer: @akinwale $250 paid via Upwork

@akinwale can you complete the checklist when you get a chance?

[x]  [@akinwale] The PR that introduced the bug has been identified. Link to the PR:
[x]  [@akinwale] The offending PR has been commented on, pointing out the bug it caused and why, so the author and reviewers can learn from the mistake. Link to comment:
[x]  [@akinwale] A discussion in #expensify-bugs has been started about whether any other steps should be taken (e.g. updating the PR review checklist) in order to catch this type of bug sooner. Link to discussion:

Not a regression.

[x]  [@akinwale] Determine if we should create a regression test for this bug.
[x]  [@akinwale] If we decide to create a regression test for the bug, please propose the regression test steps to ensure the same bug will not reach production again.

Regression Test Steps

Launch Expensify.
Login with a brand new account.
Open the global create menu and select Track Expenses.
Enter an amount and finish creating the expense.
Navigate to the self-DM report.
Select "Share it with my accountant" from the list of actions in the self-DM.
Verify that the name of the new workspace (not Unavailable workspace) is displayed on the confirmation page.
On the confirmation page, click or tap Submit.
Verify that the app does not crash.

Do we agree 👍 or 👎?

All set


Constant time addition and multiplication

useful for crypto applications

According to this discussion, it is probably out of reach for rust and llvm in general


Performance Metrics Services Failing on Aurora

Describe the bug
All pm*.service services are failing on aurora 40 dx.
What did you expect to happen?
Not to fail
Output of rpm-ostree status
State: idle
AutomaticUpdates: stage; rpm-ostreed-automatic.timer: last run 2min 9s ago
Deployments:
● ostree-image-signed:docker://ghcr.io/ublue-os/aurora-dx:40
                   Digest: sha256:1a3ee751b17828dd0817be97e4bf78079bfe9e6a9c12a51420089a7adf3847b8
                  Version: 40.20240409.0 (2024-04-09T16:52:14Z)

  ostree-image-signed:docker://ghcr.io/ublue-os/aurora-dx:40
                   Digest: sha256:a0f4b4ff75311dee095dc2ee22b10dc90a168bd8119952226c3feb3ebf7a9328
                  Version: 40.20240409.0 (2024-04-09T15:40:42Z)

Extra information or context
No response

https://github.com/ublue-os/bluefin/pull/1155


Prohibit protobuf message value copies

Description
Value copies of protobuf messages will result in a vet error in a future version of the protobuf library. Add a roxvet analyzer to prohibit them, and fix all found occurrences.
Checklist

[ ] Investigated and inspected CI test results
[x] ~Unit test and regression tests added~
[x] ~Evaluated and added CHANGELOG entry if required~
[x] ~Determined and documented upgrade steps~
[x] ~Documented user facing changes (create PR based on openshift/openshift-docs and merge into rhacs-docs)~

If any of these don't apply, please comment below.
Testing Performed

CI
Ran make roxvet locally

/retest

/retest

/test


Display versions of CUDA libraries

Ref #2569.
>>> cupy.show_config()
CuPy Version          : 7.0.0rc1
CUDA Root             : /usr/local/cuda
CUDA Build Version    : 9020
CUDA Driver Version   : 9020
CUDA Runtime Version  : 9020
cuBLAS Version        : 9020
cuFFT Version         : 9020
cuRAND Version        : 9020
cuSOLVER Version      : (9, 2, 0)
cuSPARSE Version      : 9020
NVRTC Version         : (9, 2)
cuDNN Build Version   : 7500
cuDNN Version         : 7500
NCCL Build Version    : 2307
NCCL Runtime Version  : 2307

Let's get rid of details argument and always print all the information.

Related? #756

Related? #756
Ah, this was intended to be closed in the initial impl of show_config.

Let's get rid of details argument and always print all the information.
Removed it.

For later reference: in my environment automatically-created handles consume additional 56 MiB (on GTX TITAN X), but we think its acceptable as show_config() is mainly used for diagnosis purpose.

This would be really great to have. Thanks for working on it @kmaehashi! 😄

In my environment, cupy becomes unable to import.
$ python -c 'import cupy'
...
ImportError: CuPy is not correctly installed.

If you are using wheel distribution (cupy-cudaXX), make sure that the version of CuPy you installed matches with the version of CUDA on your host.
Also, confirm that only one CuPy package is installed:
  $ pip freeze

If you are building CuPy from source, please check your environment, uninstall CuPy and reinstall it with:
  $ pip install cupy --no-cache-dir -vvvv

Check the Installation Guide for details:
  https://docs-cupy.chainer.org/en/latest/install.html

original error: /data2/work/w/repos/cupy2/cupy/cuda/cusparse.cpython-38-x86_64-linux-gnu.so: undefined symbol: cusparseSbsric02_bufferSizeExt

@niboshi I think the build issue is unrelated to this PR (it is one of a symbol removed in CUDA 10.1 Update 2), so could you try rebuilding?

@kmaehashi Sorry it looks like so. It happens in master (acd7010bf225dab2d0e5fb8306c8988e822af300) too.

Thanks, fixed as suggested.

Jenkins, test this please

Jenkins CI test (for commit e1511971e8aae3b61cc15e9d2465477b44b19b3d, target branch master) succeeded!

LGTM

@niboshi This pull-request is marked as to-be-backported, but the corresponding backport PR could not be found. Could you check?


cabal.project: use multiple subdirs

I think we'll need some help with CI.

Made some updates to this that should hopefully get it building in CI...


Issue 292 : Add schema and instances for body system (BodySystem)

As a general note, we always prioritize the definition over the description and the definition should be as short as possible (pref. only one single sentence).

Great suggestions Ulrike. I made the changes in this commit 92e4bfdf9a9f19351b4ea396f20d59dd0fd5bdab

For consistency we should probably redo this one and change the Schema to OrganismSystem (to match OrganismSubstance; which is also not fixed yet)


README make files and variables since 1.30 clearer

CI failure is likely due to T197576. Do we want to wait for that to be resolved before we merge this?


User access is not set when create new VDC

See below blueprint.
Repository:
ssh<EMAIL_ADDRESS>-p7122 (password: 4GgwKh3iB)
cd /optvar/cockpit_repos/test2

Expected result is that the user jdelrue gets granted user access to the VDC, which is not the case; see result in the screenshot.
Blueprint:
g8client__cl:
  url: 'be-scale-1.demo.greenitglobe.com'
  login: 'cockpit_api_user'
  password: 'cockpit12345'
  account: 'Account of Yves'

uservdc__jdelrue:
  g8client: 'cl'
  email<EMAIL_ADDRESS>  provider: 'itsyouonline'

vdc__testvdc2:
  g8client: 'cl'
  location: 'be-scale-1'
  maxMemoryCapacity: 128
  maxDiskCapacity: 10
  maxCPUCapacity: 5
  maxNumPublicIP: 5
  account: 'Account of Yves'
  uservdc:
    - 'jdelrue'

Result:
https://be-scale-1.demo.greenitglobe.com/CBGrid/Cloud Space?id=198

After having restarted a run, to user access got corrected.
We haven't been able to reproduce afterwards, so we close for now.

I've been able to reproduce, see: `/optvar/cockpit_repos/37a1Evolutyves/blueprints``
It seems you get this problem if the uservdc and vdc definitions are in separate blueprints.
Should AYS be able to cope with this?

Explicitly numbering the blueprints doesn't help...
See /optvar/cockpit_repos/test6:
root@vm-352:/optvar/cockpit_repos/test6# ls blueprints/ -1
1_client.yaml
2_uservdc.yaml
3_vdc.yaml

See result: https://be-scale-1.demo.greenitglobe.com/CBGrid/Cloud Space?id=217

And using one single blueprint doesn't solve the problem neither...
See /optvar/cockpit_repos/test7
Blueprint:
g8client__artiliumadmin:
  url: 'be-scale-1.demo.greenitglobe.com'
  login: 'cockpit_api_user'
  password: 'cockpit12345'
  account: 'Account of Artilium'

uservdc__yves:
  g8client: 'artiliumadmin'
  email<EMAIL_ADDRESS>  provider: 'itsyouonline'

vdc__test7:
  g8client: 'artiliumadmin'
  location: 'be-scale-1'
  maxMemoryCapacity: 64
  maxDiskCapacity: 1024
  maxCPUCapacity: 10
  maxNumPublicIP: 1
  account: 'Account of Artilium'
  uservdc:
    - 'yves'

actions:
  - action: install

Result: https://be-scale-1.demo.greenitglobe.com/CBGrid/Cloud Space?id=219

I thinks this issue is duplicated by this
https://github.com/0-complexity/openvcloud/issues/682
and this
https://github.com/Jumpscale/ays_jumpscale8/issues/153

Yes, I will request an update to 2.1.7 now :-)


Translated usecontext.md

This is the second of the five files I translated.

No response from author


_all call broken due to full hostname being included in the pagination values

Would be great to have this merged, we just ran into same issue in higher environment once the query returned too many users.


Generate Release notes Build tasks doesn't appear to show up as an available task

On release 1.3.22, after adding the extension to my vsts instance, I don't see the option in my build tasks under Utilites or "All Items". Perhaps I'm missing something?

I just retested with a VSTS account that did not have it previously installed, this is the process I used (I assume it is the same as your)

Logged into VSTS instance
When to marketplace, picked the extension, pressed install button and selected my VSTS instance and confirmed installation
On https://.visualstudio.com/_admin/_apps/hub/ms.vss-extmgmt-web.manageExtensions-collection?tab=Manage&status=active# I could see the generate release note extension
I went to a build and in edit mode and tried to add a new task, the generate release notes task could be found in the 'all' list and the 'utilities' list

So it seems OK to me, but that said, whilst testing last week I did see some propagation delays between publishing a new version and it appearing, so you maybe suffering a similar issue?

Great! Yeah those are the same steps that I followed as well! VSTS was being grumpy yesterday, so maybe there is some lingering infrastructure ickyness still lurking. I'll wait till the morning and see if maybe it pops up! Thx for answering back to quick! This is a pretty awesome extension! I really have a use for it!

Any luck as yet, has the task appeared?

I'm seeing exactly the same behavior.  It is listed as installed but I cannot select it from a build definition.

Jwestes - I am assuming you are on VSTS. Now some time has passed has the task appeared? i.e. is it just slow?
I have others using the task without an issue, so this is strange you two have had this problem.
I am checking with Microsoft to see if there are any known issue that could cause this.

I am also on VSTS and am encountering the same. It shows up as being installed but never appears in the add task window. I've looked under the "All" category and each individual category.

For a little more information it doesn't show up when using the default build agent or the VSTS MacInCloud OSX build agent. I have included some screen shots of what the agent capabilities are (if that helps in any way).

It won't work for a MAC as it is PowerShell based, longer term aim to add Node version but don't have the time at present (there is an issue about this).
Much of my testing has been on the hosted build agent, so it should work there

It has been 24 hours and it is still not showing up.  I am using a Default build agent that is hosted in our company's data center. Could that have anything to do with it?

Can't see why, as when defining the build tasks it has not got anywhere near an agent, it is all server at that point.
I have a call open with MS, see if they have ideas

That's what I thought, but I saw that you said you had been doing your testing with the Hosted build pool so I figured I would mention it.

There are a number of you are suffering this issue with tasks not appearing, I am in discussion with MS to try to work out why.
If you are suffering the problem could you let me know your VSTS instance name so MS can look into why you don't see the task, either pop them in this thread or email me directly at<EMAIL_ADDRESS>

I have just heard back from Microsoft and they think the issue of not seeing a task could be due to do to unfortunate timing of the installation of the extension on when VSTS got updated. They recently changed the mechanism to install extensions and think that may have affected your extension. Can you please try installing it again Please let me know if you still face the issue, telling the the VSTS instance name helps with tracing the ussyes

I just removed and reinstalled and I still don't see it in my list of available build steps.  I'll wait a bit and try it again.
Jason<EMAIL_ADDRESS>Date: Tue, 7 Jun 2016 09:56:44 -0700
From<EMAIL_ADDRESS>To<EMAIL_ADDRESS>CC<EMAIL_ADDRESS><EMAIL_ADDRESS>Subject: Re: [rfennell/vNextBuild] Generate Release notes Build tasks doesn't appear to show up as an available task (#11)
I have just heard back from Microsoft and they think the issue of not seeing a task could be due to do to unfortunate timing of the installation of the extension on when VSTS got updated. They recently changed the mechanism to install extensions and think that may have affected your extension. Can you please try installing it again Please let me know if you still face the issue, telling the the VSTS instance name helps with tracing the ussyes
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub, or mute the thread.

OK I will report that back and keep digging

I have had a similar issue on my test VSTS instance where I test the private builds of my extension. It seems that the issue was a failed install of the task(s), though the extension says it share/installed ok. Another symptom was of you look at the list of extensions installed on your VSTS instance no un-install/disable buttons are shown
I fixed it by unsharing the private extension and then reinstalling i.e. started again.
For a public extension I think the bets option will be uninstall and try again - sorry I don't have a better answer

I have tried uninstalling and reinstalling once already and it did not work.  I have just uninstalled again and I will leave it until tomorrow before I reinstall.  Just to see if that helps.

I just did a test install on a clean VSTS instance, installed OK, but did take a minute or two appear in the task list

I installed Wednesday and checked this morning before uninstalling and it still was not listed.

I removed it this morning, reinstalled at lunch and waited until bed to check.  It's working!

Great news, hope it lives up to the expectation after all of that !

I'll give it another shot tomorrow.
On Mon, Jun 13, 2016, 3:40 AM Richard Fennell<EMAIL_ADDRESS>wrote:

Great news, hope it lives up to the expectation after all of that !
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/rfennell/vNextBuild/issues/11#issuecomment-225520687,
or mute the thread
https://github.com/notifications/unsubscribe/AE1QyYhhhs2tMre55dIgbn5gtegx_lRUks5qLRdigaJpZM4Il-MY
.

I will assume this issue is resolved if I don't hear anything in 7 days


chore(core): update dependencies

Updates all dependenices

looks like CRDB change something in their testserver: https://github.com/zitadel/zitadel/actions/runs/8200828636/job/22428419605?pr=7517#step:8:590


Query: SQL for queries which are projecting out single result from collection in projection

var query = db.Users.Select(
        u => new
        {
            u.Text,
            T = u.Notifications.FirstOrDefault()
        })
    .ToList();

Generates following SQL
info: Microsoft.EntityFrameworkCore.Database.Command[20101]
      Executed DbCommand (0ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
      SELECT [u].[Text], [u].[Id]
      FROM [Users] AS [u]
info: Microsoft.EntityFrameworkCore.Database.Command[20101]
      Executed DbCommand (3ms) [Parameters=[@_outer_Id='1'], CommandType='Text', CommandTimeout='30']
      SELECT TOP(1) [n].[Id], [n].[Message], [n].[UserId]
      FROM [Notifications] AS [n]
      WHERE @_outer_Id = [n].[UserId]

It is N+1 queries. Since there is FirstOrDefault operator (hence only 1 related row max), instead of going through 2 queries form like include, we can just do cross apply (which include tries to avoid with 2 queries) since there is no duplicated data.
Expected SQL:
SELECT [u].[Text], [u].[Id], [t].[Id], [t].[Message], [t].[UserId]
FROM [Users] AS [u]
CROSS APPLY (
	SELECT TOP(1) [n].[Id], [n].[Message], [n].[UserId]
	FROM [Notifications] AS [n]
	WHERE [u].[Id] = [n].[UserId]
) AS [t]

Can we get an ETA on this fix? Right now, we have several lateral joins (cross/outer apply) and it's resulting in N + 1 queries. If there are a 100 rows, it results in 101 queries instead of 1 query. Sometimes, we have several lateral joins....this can results in 100s of queries just for 1 query. It increases the CPU usage and increases the latency.
In Entity Framework 6, this would be 1 query (for 100 rows).....in Entity Frame Core 2.1 Final, it's 101 queries (for 100 rows).
Example:
SELECT Courses.CourseId, Courses.Category, LastDetail.*
FROM Courses
OUTER APPLY
(
SELECT Details.Title, Details.Status, Details.Created
FROM Details
WHERE Details.CourseId = Course.CourseId
ORDER BY Details.Created DESC
) LastDetail
LINQ:
var query = (from c in db.Courses
let ld = (from ld in db.Details
where ld.CourseId == c.CourseId
orderby ld.Created descending
select new  { ld.Title, ld.Status, ld.Created }).FirstOrDefault()
select new { c.CourseId, c.Category, LastDetail = (ld == null) ? null : ld}).ToList()
Rewriting the "LINQ" for all these queries "just to make it work" is costly and not a good solution.

@xmlapi Do you have an example of "we have to let ld = from db.Details.Where().OrderBy().FirstOrDefault() and then left join again to db.Details." I am facing this issue and we cannot wait for 3.0
Thank's

It's too bad this got postponed. But thanks for the update.

Hi,
Any possibility to have this issue fixed as soon as possible, in the next minor/major release ?
Thank you

@zulander1 It's currently in the 3.0 milestone, which realistically is the best we can hope to do at this point.

While people on the OLD EF can write queries...I have to use the OLD EF to generate the best query...then copy the resulting working SQL query and use FromSQL...and hack away to make this usable.
Needless to say this is the single most painful slowdown of programming since switching to .NET Core.
I have to say that for any non-basic queries this platform so far is pretty much useless. The main reason being this unacceptable performance loss due to generated multiple queries which SQL server can otherwise process in a second given the proper SQL syntax.
On the other hand I've refreshed my TSQL skills due to this bug. So I guess that's a "plus"

It also seems to break .Distinct(). In EF6, since my query was done all in SQL Server, the DISTINCT was done there too and I would get one result back. But now because of this N+1 query, the Distinct() is called in C# and doesn't remove duplicates because while the objects all have the same property values, they are different objects.

Hi,
I'm having the same issue. As many to many is not already supported, creating a request to retrieve information from this kind of relationship like Role and User dbset, it will make N+1 queries.
Steps to reproduce
Context = new MainContext();

var request = Context.Users.Select(data => new UserDTO
{
	Id = data.Id,
	Roles = data.UserRoles.Select(x => x.Role.Name),
})
.ToList(); // We also tried without it

// Foreach to demonstrate request executing in console
foreach (var item in request)
{
	var roles = item.Roles;
}

Console.ReadLine();

Further technical details
EF Core version: 2.1.4
Database Provider: Microsoft.EntityFrameworkCore.SqlServer
Operating system: W10
IDE: Visual Studio 2017 15.8.9

Same issue of @muchman...

Triage: we need to make this work for Sqlite also--so try window function or SQlite specific re-write.

@muchman and @Dona278 issues are fixed in the latest bits - previously member pushdown (pushing member access that happens after FirstOrDefault, before it) only worked on one level of navigation access. In the new pipeline logic is recursive so arbitrary depth of navigation chains are supported

Does this work with includes and sub where now?


url duration is not reflected in the link

For example, if I change the time from 3:38 to 3:35, the link still redirects to 3:38

Did you change the time like this screenshot?

RemNote : left click on the link
Youtube : copy the url on YouTube, example : https://www.youtube.com/watch?v=rRfwyzikM6M&t=218
RemNote : right click on the link
Paste the link into the input
Calculate the time in seconds, example 3:35 = 215
Edit the t= part, example : https://www.youtube.com/watch?v=rRfwyzikM6M&t=215
Valid with enter or the button Link to Website

The link is not 3:38, it is only a name. In fact, the link is like name, RemNote uses the markdown language, for example [3:38](https://www.youtube.com/watch?v=rRfwyzikM6M&t=218).
You could make a new timestamp with the plugin and move the child notes into this.

The plugin uses the timestamp from the url, but it could be the name too.
If the project is edited. The user could lie, it could work with the plugin, but the link will be incorrect.
[0:50](https://www.youtube.com/watch?v=rRfwyzikM6M&t=100)
Plugin : 0:50
Link : 1:40

The plugin uses the timestamp from the url, but it could be the name too.
If the project is edited. The user could lie, it could work with the plugin, but the link will be incorrect.
[0:50](https://www.youtube.com/watch?v=rRfwyzikM6M&t=100) Plugin : 0:50 Link : 1:40

Yep i mean that

In fact, it is already possible to lie to the plugin.
The plugin design has to respect the "read and create" permissions. It is a choice to limit the risks. The plugin needs the "modify" permission to add a function that corrects the link. It could be more powerful with more permissions. It is not possible as it is.

You can use this plugin to update a link.
https://update-rem-timestamp.glitch.me
height: 100
width: 150
permissions: read, create, modify
location: popup
I could use this code later.

update link is not working now


Wasmtime wasi-streams: input-stream should be result-oriented

Done in https://github.com/bytecodealliance/wasmtime/pull/7090


[Relay] Ensure nested higher-order functions are treated correctly

This PR addresses an issue that @MarisaKirisame brought to my attention (and indeed, resulted in a TODO in code that was merged into mainline). Namely, if a higher-order function (e.g., a polymorphic id function) were nested inside another function, it could cause type-checking to fail because Relay presently only supports polymorphism at the top level.
This PR attempts to solve that problem by instantiating any nested polymorphic types whenever they occur in type inference. As it happens, doing this inside Unify() in the type checker handles almost all cases, though I would appreciate any review as to whether there may be missing cases. (Or suggestions as to what might be a less clumsy approach to this problem.)

Thanks, @slyubomirsky this is merged, please request reviewers next time


support ES6 features!

as long as it is supported by esprima it should be fairly easy to add it. (eg. ArrowFunctionExpression)

Esprima 2.0 was released 20 days ago, which has (partial) ES6 support. 6 days ago class support was added to the master branch.

@lukescott just tested<EMAIL_ADDRESS>and it only introduced a single regression to the esformatter tests.. and it is definitely an edge case (probably related to EmptyStatement not existing anymore on the AST)

I just published<EMAIL_ADDRESS>which uses<EMAIL_ADDRESS>so now we can start adding tests and support for ES6 features \o/

:tada: :tada: :tada:

Thank you @millermedeiros :)

What about replacing esprima by babel (which supports more ES6 features afaik) ?
Is that possible? I can help, if it is not too complicated.

:+1:

@RaitoBezarius babel uses acorn internally and we would have the same issues with the token ranges (would require changes to the way we detect the start/end of nodes). right now we are trapped with esprima v2.
it would be helpful if we had new bugs for each ES6 feature that we don't format properly yet, with input and expected outuput. I don't even know which features are supported by esprima at the moment...

I believe we covered all the ES6 features on v0.7; if anything else is missing/wrong please open as a separate bugs. Thanks.

Thank you @millermedeiros :)

good work :+1:

Is there possibility that esformatter does not support static class properties (it is included by Babel in stage 0)?

@tommmyy for now we can only support features that are implemented by espree. which doesn't support experimental features so far.


Separator glitch when using vibrancy effect

Hi,
When using a table view with a vibrancy separator effect, the separator of the cell being swiped becomes white.
This is caused by the "screenshot" being perform on the whole cell instead of on the cell's content view. I believe a screenshot of a vibrancy separator will always produce the wrong result.
Another related issue occurs when swiping on a cell with separator insets. In this case, the separator (screenshot) is moving along with the cell being swiped.

Suggestion:
Before performing a swipe, do not take a screenshot of the whole cell. Instead, take a screenshot of the cell's content view. This will replicate the behavior of Apple's Mail app (separators do not move during a swipe).
I can do a PR if you want.

yes please :)


How to get the (preferred/current) MTU?

For optimal TX segment size, I would like to obtain the current MTU setting, but I'm not sure how to do this via the flutter_blue API.

@paulreimer Did you find a solution for this?

No, unfortunately I wasn't able to get the actual MTU -- I am still using a default MTU of 23 to be safe (but would very much like to be able to confirm & use a higher MTU).

Hi @paulreimer @pbaker5
This functionality has been added in PR #363
Please try it out and let me know any feedback.


Component name clears when you change component type

Whenever you change the component type, the name is reset. Its a bit annoying.

This change was made directly to the main branch. Closing.

Huh, this isn't a bug, I actually added code to clear the name in this case. I don't know what I was on about but this is removed in the dev branch.

This was merged into main.


fix(Slider): Fixed vertical & horizontal slider icons misalignment

Closes #753
Moved from PR #754

Removed the hardcoded width in slider.html for the min and max labels of the horizontal and vertical sliders. Replaced it with styling in the slider.scss. (as mentioned here)
Fixed vertical slider's max and min labels misallginment as mentioned in #753
Also, improved the alignment of the min and the max labels in the horizontal slider (as they were similar to what was done to fix the vertical slider)

TODO

[x] Change base of PR to v1 branch

I'm surprised why all the tests are not showing up or running for this PR. It currently says 1 successful check. But it is not running the visual tests. Is this expected?

I'm surprised why all the tests are not showing up or running for this PR. It currently says 1 successful check. But it is not running the visual tests. Is this expected?

Because you are merging to v1 branch, no the main.


Add extra keys to EC2 describe-addresses operation

Description
Added two new keys for the describe-addresses response:

PrivateIPAddress;
NetworkInterfaceOwnerId.

Updated comment with outdated cloudformation link.
closes #4088.

@gmcrocetti The failing test is probably just flaky, but it would be good to get some confirmation on that. Would you mind merging in the latest master? Fingers crossed that will fix it

It failed again :crying_cat_face: . But due to a completely unrelated reason (SQS) ...

I couldn't reproduce it locally (Just ran the tests_ec2 module). Looks like there's a test or fixture creating an extra address. I'm filtering by the allocation-id now, therefore, should be only one.

Codecov Report

Merging #5306 (911ec51) into master (ab045f5) will decrease coverage by 0.00%.
The diff coverage is n/a.

@@            Coverage Diff             @@
##           master    #5306      +/-   ##
==========================================
- Coverage   95.99%   95.99%   -0.01%
==========================================
  Files         704      704
  Lines       69903    69907       +4
==========================================
+ Hits        67102    67104       +2
- Misses       2801     2803       +2

Flag
Coverage Δ

servertests
36.03% <ø> (-0.01%)
:arrow_down:

unittests
95.92% <ø> (-0.01%)
:arrow_down:

Flags with carried forward coverage won't be shown. Click here to find out more.

Impacted Files
Coverage Δ

moto/ec2/models/elastic_ip_addresses.py
94.37% <ø> (ø)

moto/ec2/responses/elastic_ip_addresses.py
98.41% <ø> (ø)

moto/codepipeline/models.py
99.08% <0.00%> (-0.92%)
:arrow_down:

moto/iam/models.py
95.40% <0.00%> (-0.07%)
:arrow_down:

moto/sns/models.py
97.22% <0.00%> (ø)

moto/iam/responses.py
98.78% <0.00%> (ø)

moto/rds/models.py
93.97% <0.00%> (+0.01%)
:arrow_up:

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 ab045f5...911ec51. Read the comment docs.

Looks like that fixed it. Thanks @gmcrocetti!

Thanks a lot for the help o/


Unable to add labels to self_managed_node_group

Description
Please provide a clear and concise description of the issue you are encountering, and a reproduction of your configuration (see the examples/* directory for references that you can copy+paste and tailor to match your configs if you are unable to copy your exact configuration). The reproduction MUST be executable by running terraform init && terraform apply without any further changes.
If your request is for a new feature, please use the Feature request template.

[x] ✋ I have searched the open/closed issues and my issue is not listed.

⚠ Note
Before you submit an issue, please perform the following first:

Remove the local .terraform directory (! ONLY if state is stored remotely, which hopefully you are following that best practice!): rm -rf .terraform/
Re-initialize the project root to pull down modules: terraform init
Re-attempt your terraform plan or apply and check if the issue still persists

Versions

Module version [Required]:

Terraform version:

Terraform v1.1.8

Provider version(s):

+ provider registry.terraform.io/hashicorp/aws v4.10.0
+ provider registry.terraform.io/hashicorp/cloudinit v2.2.0
+ provider registry.terraform.io/hashicorp/kubernetes v2.10.0
+ provider registry.terraform.io/hashicorp/tls v3.3.0

Reproduction Code [Required]

I have used the following manifest in this file
provider "aws" {
  region = local.region
}

provider "kubernetes" {
  host                   = module.eks.cluster_endpoint
  cluster_ca_certificate = base64decode(module.eks.cluster_certificate_authority_data)

  exec {
    api_version = "client.authentication.k8s.io/v1alpha1"
    command     = "aws"
    # This requires the awscli to be installed locally where Terraform is executed
    args = ["eks", "get-token", "--cluster-name", module.eks.cluster_id]
  }
}

locals {
  name            = "eks-cluster"
  cluster_version = "1.22"
  region          = "us-west-2"

  tags = {
    Example    = local.name
    GithubRepo = "terraform-aws-eks"
    GithubOrg  = "terraform-aws-modules"
  }
}

data "aws_caller_identity" "current" {}

################################################################################
# EKS Module
################################################################################

module "eks" {
  source = "../.."

  cluster_name                    = local.name
  cluster_version                 = local.cluster_version
  cluster_endpoint_private_access = true
  cluster_endpoint_public_access  = true

  cluster_addons = {
    coredns = {
      resolve_conflicts = "OVERWRITE"
    }
    kube-proxy = {}
    vpc-cni = {
      resolve_conflicts = "OVERWRITE"
    }
  }

  cluster_encryption_config = [{
    provider_key_arn = "arn:aws:XXX"
    resources        = ["secrets"]
  }]

  vpc_id     = module.vpc.vpc_id
  subnet_ids = module.vpc.private_subnets

  # Self managed node groups will not automatically create the aws-auth configmap so we need to
  create_aws_auth_configmap = true
  manage_aws_auth_configmap = true

  # Extend cluster security group rules
  cluster_security_group_additional_rules = {
    egress_nodes_ephemeral_ports_tcp = {
      description                = "To node 1025-65535"
      protocol                   = "tcp"
      from_port                  = 1025
      to_port                    = 65535
      type                       = "egress"
      source_node_security_group = true
    }
  }

  # Extend node-to-node security group rules
  node_security_group_additional_rules = {
    ingress_self_all = {
      description = "Node to node all ports/protocols"
      protocol    = "-1"
      from_port   = 0
      to_port     = 0
      type        = "ingress"
      self        = true
    }
    egress_all = {
      description      = "Node all egress"
      protocol         = "-1"
      from_port        = 0
      to_port          = 0
      type             = "egress"
      cidr_blocks      = ["<IP_ADDRESS>/0"]
      ipv6_cidr_blocks = ["::/0"]
    }
  }

  self_managed_node_group_defaults = {
    disk_size = 20

  }

  self_managed_node_groups = {

    # Complete
    nodes = {
      name            = "nodes"
      use_name_prefix = false
      key_name = "XXXX"

      subnet_ids = module.vpc.public_subnets

      min_size     = 1
      max_size     = 7
      desired_size = 1

      labels = {
        GithubRepo = "terraform-aws-eks"
        GithubOrg  = "terraform-aws-modules"
      }
      ami_id               = "ami-0e1e876e558c727f4"
      bootstrap_extra_args = "--kubelet-extra-args '--max-pods=110'"

      pre_bootstrap_user_data = <<-EOT
      export CONTAINER_RUNTIME="containerd"
      export USE_MAX_PODS=false
      echo "foo"
      export FOO=bar
      EOT

      bootstrap_extra_args = "--kubelet-extra-args '--node-labels=node.kubernetes.io/lifecycle=spot'"

      post_bootstrap_user_data = <<-EOT
      echo "you are free little kubelet!"
      cd /tmp
      sudo yum install -y https://s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/linux_amd64/amazon-ssm-agent.rpm
      sudo systemctl enable amazon-ssm-agent
      sudo systemctl start amazon-ssm-agent
      EOT

      disk_size     = 30
      instance_type = "t3.medium"

      launch_template_name            = "eks-nodes"
      launch_template_use_name_prefix = true
      launch_template_description     = "Self managed node group example launch template"

      ebs_optimized          = true
      vpc_security_group_ids = [aws_security_group.additional.id]
      enable_monitoring      = true

      metadata_options = {
        http_endpoint               = "enabled"
        http_tokens                 = "required"
        http_put_response_hop_limit = 2
        instance_metadata_tags      = "disabled"
      }

      create_iam_role          = true
      iam_role_name            = "eks-manage-nodegroup"
      iam_role_use_name_prefix = false
      iam_role_description     = "Self managed node group role"
      iam_role_tags = {
        Purpose = "Protector of the kubelet"
      }
      iam_role_additional_policies = [
        "arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryReadOnly"
      ]

      create_security_group          = true
      security_group_name            = "self-managed-node-group-complete-example"
      security_group_use_name_prefix = false
      security_group_description     = "Self managed node group complete example security group"
      security_group_rules = {
        phoneOut = {
          description = "Hello CloudFlare"
          protocol    = "udp"
          from_port   = 53
          to_port     = 53
          type        = "egress"
          cidr_blocks = ["<IP_ADDRESS>/32"]
        }
        phoneHome = {
          description                   = "Hello cluster"
          protocol                      = "udp"
          from_port                     = 53
          to_port                       = 53
          type                          = "egress"
          source_cluster_security_group = true # bit of reflection lookup
        }
      }
      security_group_tags = {
        Purpose = "Protector of the kubelet"
      }

      timeouts = {
        create = "80m"
        update = "80m"
        delete = "80m"
      }

      tags = {
        ExtraTag = "Self managed node group complete example"
      }
    }
  }

  tags = local.tags
}

################################################################################
# Supporting Resources
################################################################################

module "vpc" {
  source  = "terraform-aws-modules/vpc/aws"
  version = "~> 3.0"

  name = local.name
  cidr = "<IP_ADDRESS>/19"

  azs             = ["${local.region}a", "${local.region}b", "${local.region}c"]
  private_subnets = ["<IP_ADDRESS>/22", "<IP_ADDRESS>/22", "<IP_ADDRESS>/22"]
  public_subnets  = ["<IP_ADDRESS>/22", "<IP_ADDRESS>/22", "<IP_ADDRESS>/22"]

  enable_nat_gateway   = true
  single_nat_gateway   = true
  enable_dns_hostnames = true

  enable_flow_log                      = true
  create_flow_log_cloudwatch_iam_role  = true
  create_flow_log_cloudwatch_log_group = true

  public_subnet_tags = {
    "kubernetes.io/cluster/${local.name}" = "shared"
    "kubernetes.io/role/elb"              = 1
  }

  private_subnet_tags = {
    "kubernetes.io/cluster/${local.name}" = "shared"
    "kubernetes.io/role/internal-elb"     = 1
  }

  tags = local.tags
}

resource "aws_security_group" "additional" {
  name_prefix = "${local.name}-additional"
  vpc_id      = module.vpc.vpc_id

  ingress {
    from_port = 22
    to_port   = 22
    protocol  = "tcp"
    cidr_blocks = [
      "<IP_ADDRESS>/8",
      "<IP_ADDRESS>/12",
      "<IP_ADDRESS>/16",
    ]
  }

  tags = local.tags
}

resource "tls_private_key" "this" {
  algorithm = "RSA"
}

resource "aws_key_pair" "this" {
  key_name   = local.name
  public_key = tls_private_key.this.public_key_openssh
}

# This policy is required for the KMS key used for EKS root volumes, so the cluster is allowed to enc/dec/attach encrypted EBS volumes
data "aws_iam_policy_document" "ebs" {
  # Copy of default KMS policy that lets you manage it
  statement {
    sid       = "Enable IAM User Permissions"
    actions   = ["kms:*"]
    resources = ["*"]

    principals {
      type        = "AWS"
      identifiers = ["arn:aws:iam::${data.aws_caller_identity.current.account_id}:root"]
    }
  }

  # Required for EKS
  statement {
    sid = "Allow service-linked role use of the CMK"
    actions = [
      "kms:Encrypt",
      "kms:Decrypt",
      "kms:ReEncrypt*",
      "kms:GenerateDataKey*",
      "kms:DescribeKey"
    ]
    resources = ["*"]

    principals {
      type = "AWS"
      identifiers = [
        "arn:aws:iam::${data.aws_caller_identity.current.account_id}:role/aws-service-role/autoscaling.amazonaws.com/AWSServiceRoleForAutoScaling", # required for the ASG to manage encrypted volumes for nodes
        module.eks.cluster_iam_role_arn,                                                                                # required for the cluster / persistentvolume-controller to create encrypted PVCs
      ]
    }
  }

  statement {
    sid       = "Allow attachment of persistent resources"
    actions   = ["kms:CreateGrant"]
    resources = ["*"]

    principals {
      type = "AWS"
      identifiers = [
        "arn:aws:iam::${data.aws_caller_identity.current.account_id}:role/aws-service-role/autoscaling.amazonaws.com/AWSServiceRoleForAutoScaling", # required for the ASG to manage encrypted volumes for nodes
        module.eks.cluster_iam_role_arn,                                                                                # required for the cluster / persistentvolume-controller to create encrypted PVCs
      ]
    }

    condition {
      test     = "Bool"
      variable = "kms:GrantIsForAWSResource"
      values   = ["true"]
    }
  }
}

Steps to reproduce the behavior:

Are you using workspaces?
no

Have you cleared the local cache (see Notice section above)?
yes

List steps in order that led up to the issue you encountered*

$ terraform init

$ terraform plan -out state.tfplan

Expected behavior

I want to add kubernetes labels to eks cluster nodes group.
Actual behavior

When I plan the changes, I get this error:
Terminal Output Screenshot(s)

╷
│ Error: Unsupported argument
│
│   on ../../node_groups.tf line 364, in module "self_managed_node_group":
│  364:   labels                    = try(each.value.labels, var.self_managed_node_groups.labels, null)
│
│ An argument named "labels" is not expected here.

Additional context
The label configuration parameter for the self_managed_node_groups does not exist in this file, although it exists for the eks_managed node groups.
So I tried to add this line under self_managed_node_group section:
labels                    = try(each.value.labels, var.self_managed_node_groups.labels, null)

I am getting the error given above.
I think these should be a feature to add specific label to node groups based on the requirements.

K8s labels are only supported in this manner through the EKS managed node group service. For self managed node groups you have to pass to the bootstrap script via user data like https://github.com/terraform-aws-modules/terraform-aws-eks/blob/681e00aafea093be72ec06ada3825a23a181b1c5/examples/self_managed_node_group/main.tf?rgh-link-date=2022-04-15T21%3A25%3A55Z#L142

@bryantbiggs I tried to add labels using bootstrap_extra_args but still, I was not able to find the labels on the Kubernetes nodes.

Note:
In order to provide multiple arguments to --kubelet-extra-args, provide all the arguments under the same single quote
Example:
 bootstrap_extra_args = "--kubelet-extra-args ' --max-pods=110 --node-labels=node.kubernetes.io/lifecycle=spot' "

In the above example these params are under the same single quote:

--max-pods=110
node-labels=node.kubernetes.io/lifecycle=spot

In my case i was providing them separately and kubelet was only picking the first one.


Missing functionality: hotkey search

Zulip does not offer a hotkey for switching to the main search bar.
In the discussion on Zulip about the integration of this feature, the forward slash character has emerged as the best option for such a hotkey. When pressed, the main search bar would be selected and its content highlighted.

I think we already have a "/" hotkey, so I'm confused by this issue.  Is this for the browser app?


0.9.0, batch rendering, async, server-side

Implements interop call batching (resolves #13)
Switches to async model
Adds support for server-side Razor Components (addresses #12)
Updates to 0.9.0 (resolves #22)

Sorry for the massive PR that touches so much code, but it seemed necessary to do so in order to fully address the big issues. I made an attempt to implement the changes you've discussed in #12 and #13. I'll provide a rundown of the major changes and my reasoning:
In order to support Razor Components server-side, I updated the dependency to the latest version (0.9.0) and changed the base class of BECanvasComponent to ComponentBase (which supports both Blazor client-side and Razor Components server-side). The required updating the project to the .NET Core 3.0 preview. I altered the CI build to use that SDK.
Since the static, synchronous JSRuntime.Current has been deprecated in favor of injecting IJSRuntime and making async calls (the only option for server-side), I refactored the entire library to adopt an async approach. In most cases I left the synchronous API in place, and those methods now wrap the async calls, but are marked as Obsolete with a message recommending that users switch to the async version. In the case of property setters, wrapped async calls can result in unresponsive UI, so I opted instead for a breaking change: read-only properties with async property setter methods.
I implemented a simple call batching solution. "Fire-and-forget" calls which do not return values (both property setters and method calls) execute immediately if there are no pending interop calls, and otherwise are stored in a list until the latest interop call completes. Access is synchronized with a SemaphoreSlim to avoid threading issues.
Calls which return a value are never batched: it created a negative performance impact, instead of an improvement, when I attempted to implement a callback mechanism that cached incoming calls, awaited results, matched them to initial callers, then dispatched callback messages.
Server-side code and WebGL don't work well together. Because of the server-side rendering mechanism, the last draw operation overrides all previous operations. I implemented a solution which allows users to explicitly group calls into batches, using BeginBatchAsync and EndBatchAsync API calls, analogous to BeginUpdate and EndUpdate desktop UI APIs. I'm not satisfied that this solution will resolve all the potential problems, and I admit that I didn't run any extensive WebGL tests (animation, etc), I just made sure that the basic tests already present were working.
Speaking of tests, I added a second test project for server-side Razor Components. I also renamed the existing test project to reflect the fact that it's the client-side version (and updated it to v0.9.0).
Server-side Razor Components currently has a bug (aspnet/AspNetCore#6349) which I'm sure you're aware of, that prevents component libraries from loading static files. It seems based on the status of that item that they're close to releasing a fix, but in the meantime I added steps to the Typescript project's MSBuild which copies the compiled .js file directly to a dist folder in the server-side test project's wwwroot, and also places a copy at the root of the solution (for easy user downloading).
I updated the README to reflect all the changes.
I also incidentally made a change that I believe @jorolf suggested earlier: I added rules to .editorconfig to reflect the underscore naming convention in use throughout most of the library, and updated a few variable names that didn't already adhere to it.
I realize that what I've attempted here may be way off-base from what you have in mind. If you prefer not to adopt this massive PR, feel free to simply copy any bits of code you find useful.

Thanks for the PR. I'll have a look over the week and get back to you as soon as possible.

any updates on this PR?
What is the ETA?

@jorolf I don't have any benchmarks, no. I assume that using the synchronous calls would be slightly faster. The smart batching system should keep the difference small in client-side situations where the calls are able to execute almost synchronously as it is.
I decided to move entirely away from using the synchronous JS interop instance based on Microsoft's guidance: "We recommend that most JavaScript interop libraries use the async APIs to ensure that the libraries are available in all scenarios, client-side or server-side." They do say "most," though, and a library like this one may be a good candidate for making an exception.
There do seem to be ways to detect at runtime whether an app is running client-side or server-side. We could dynamically detect when the code is running client-side, and call the synchronous JS interop methods on the static instance when possible.
Or we could just leave the old API calls synchronous and leave it up to callers to use them appropriately. We would provide user guidance in the README and the code comments that explains that the async calls work in any situation, but the synchronous calls fail in server-side code. It would be the library consumer's responsibility to call the correct APIs based on their situation, or implement their own runtime detection strategy if they wanted to handle both cases.
I think any of those scenarios would be fine, really.

Any update on merging and packaging this?

I just started playing around with Blazor, so my understanding is still very superficial. Sorry If what I describe below is not as in depth as it could be.
I tried this pull request out because I need a version of BlazorExtensions/Canvas that works with the Blazor 0.9. In my test application I have a for loop in C# calling 14400 times FillRectAsync on a Canvas2DContext.
When I run my code without BeginBatchAsync();, it takes 22 seconds to complete the drawing.
When I run my code with BeginBatchAsync();, it takes 12 seconds.
I also tried using a StringBuilder to concatenate a single string with the 14400 javascript fillRect calls. I then passed the string to a single InvokeAsync call, having a javascript function execute all the commands by running a single eval call. With this "crude" approach, the whole drawing takes only 2 seconds to complete.
These results seem to point to callBatch having space for significant optimization. They also show that batching calls is likely a very good idea and necessary for complex drawings.

@matteo-prosperi Your StringBuilder method certainly seems to perform much better. I wonder if you would see any additional performance boost from using new Function rather than eval?
I'm concerned about the security implications of directly exposing an eval (or Function) call that accepts arbitrary strings. You would need to introduce some kind of sanitizing on the server side that ensured all calls were pre-approved canvas API calls. I'm not confident that I could write such a thing properly, without leaving any exploits. Parsing the entire string to sanitize it would almost certainly mitigate the performance gains to some extent. I'm honestly not sure whether it would still be faster or not.
You might want to create your own fork, either from master or from mine. You can try replacing the current logic with your StringBuilder mechanism, and see what you can do in terms of security. I'd be more than happy to step aside and withdraw my PR in favor of yours if you build a better system.

@WilStead I tried the new Function approach and the drawing time seems the same as when using eval.
I would love to be able to contribute an implementation but I don't have nearly enough understanding of JavaScript or TypeScript to help here.
I am not sure what the security implications of running code from a string would be here. It is my understanding that there is no "server side" involved running this code. I tried reading articles about eval and new Function and I understand that it should be somewhat safe to eval code that you generate yourself. But I am not an expert.

Note that @matteo-prosperi approach only works when you're using simple types like numbers or strings. However when you're using types like arrays or images it breaks/doesn't work because you can't convert them into executable javascript code. (Well maybe you could but that would be really inefficient)

@matteo-prosperi It is generally safe to eval code you write yourself. The problem here is that in a Blazor JS interop scenario, you must expose the method that the C# code calls on a global variable. That means anybody viewing a website with the component could open their console and call that function with any string they like.
On a production website that involves non-trivial business logic, a skilled hacker could cause practically any amount of trouble with the power to execute any javascript they please.

@jorolf Yes, I agree. I didn't mean to suggest a solution, just to provide a performance baseline for batch operations and let you know that it is reasonable to achieve at least a 5X performance boost for some scenarios by playing with the way javascript invokations are performed.
@WilStead I am not sure I understand your point. I don't think any page, probably even one without any javascript at all, is safe from a user injecting code in his own browser instance using the developer tools. But this is not my field of expertise, so I will not push this further. Also I am not really suggesting to go ahead with such an implementation, I just wanted to provide a performance reference other more elegant implementations can try to reach or surpass.

@WilStead I investigated this more to try identifying what are the reasons for the perfomance differences.
As you can see, in my example above, I was using a List<object[]> (coverted to object[][] before passing it to javascript) to represent the batch of operations.
When changing the data type from object[] to your CanvasBatchedCallInfo struct (no other change) the drawing time goes up to 7-10 seconds. The time remains high even if I remove the code on the javascript side *leaving just an empty javascript method), suggesting that converting classes and structs to javascript objects is very onerous (much more than converting arrays).
The number of calls on the C# side (FillRectAsync->CallMethodAsync->BatchMethodCallAsync->BatchCallAsync) also seems to have a significant effect on performances (I don't know how much this could be caused by Blazor not being optimized yet).
Finally adding/removing async and locking on the SemaphoreSlim doesn't seem to have any significant effect on performances.
I hope you will find this information useful. :-)

Just out of curiosity: is there a performance difference between using a class or a struct for CanvasBatchedCallInfo?

@jorolf I tried using both a class and a struct and it didn't really make any difference.

@matteo-prosperi That is definitely helpful information. I took some time to refactor the code to use object arrays instead of the custom struct, and to reduce the method call chain by a couple of steps. Hopefully that will lead to a significant performance boost.
Unfortunately, I also attempted to update my PR to the latest blazor preview version (3.0.0-preview4), and I am no longer able to build and run the project successfully. The new blazor js throws websocket-related client disconnection errors.
It may be wise to wait until the final asp.net 3.0 release. We should be getting a release date at Build next month, supposedly sometime during the second half of this year. Even though client-side blazor isn't expected for the first release, server-side is supposed to be included. Hopefully the API shape at least will be less fluid for both scenarios. Then I can update this to a PR that targets a release version, instead of preview bits that keep changing.

Hello @WilStead
Can you update the PR to the preview 4?
Thank you!

@galvesribeiro I did some work to update the project to preview 4, but it seems the CI build fails now. I wasn't able to see detailed logs to troubleshoot. Everything builds and the test projects are running correctly on two of my own systems.

Thank you very much @WilStead for this huge PR! 💃
Will make a release later tonight!
Thanks!


Use of unresolved identifier 'MinLengthRule'

For some reason other rules work, but this one doesn't.
validator.registerField(emailField, rules: [RequiredRule(), EmailRule()])
validator.registerField(passwordField, rules: [RequiredRule(), MinLengthRule(length: 6)])
```

Also happens with RegexRule...

Are you using this with a cocoapod?

Looks like I needed to make the class public. Thanks for finding that!

Fixed in #16


remove QnA Maker Regex is problematic and will often fail

as relates to microsoft/botbuilder-dotnet#534

This has already been removed. Closing issue.


I am getting file sizes exceed error while running dotnetframework cookbook

I have copied the dotnet exe package to my local shared folder and gave the URL path but the package is copied to the node under chache folder and it shows file sizes exceed 10000000 bytes, diff output suppressed. Not sure if the limit set anywhere in cookbook? and dot net is not getting installed. It only getting copied to the node cache folder. Can someone help please.

What .NET version are you installing?
What Windows version?
What's the Chef run output?
What's the .NET framework installer log file output, if any?

The .NET installer log file will be in your temp directory named the same as the .NET installer with a .html file extension.

Hi Sneal
It got installed now but windows_reboot didn't work. I use .net 4.6.1 and OS Win 2012R2.
The console was showing the windows_reboot resource is deprecated. Please use the reboot resource in chef client 12.

You need to ensure you have the windows::reboot_handler in your run list. The deprecation warning is legitimate, however it doesn't affect functionality.

I opened a new issue for the deprecation warning #35


[terra-notification-dialog] Renaming, expanding, and adding props

Summary
Addresses https://github.com/cerner/terra-framework/issues/328

Adds a 'content' node prop to allow for more diverse messages in notification dialog
Renames 'message' prop to 'startMessage', this message will appear before the new 'content' prop
Adds an 'endMessage' prop for a message to appear after 'content'
Renames 'primaryAction' prop to 'acceptAction'
Renames 'secondaryAction' prop to 'rejectAction',
Adds a required 'buttonOrder' prop to allow 'acceptAction' and 'rejectAction' to be be reordered.
Adds an 'emphasizedAction' prop that determines whether the 'acceptAction', 'rejectAction' , or neither is emphasized. Defaults to neither.

Includes some fixes to navigation-prompt to properly consume the new props.
Thanks for contributing to Terra.
@cerner/terra

The notification dialog readme still has the old props shown in the usage section. https://terra-framework-deploye-pr-899.herokuapp.com/components/terra-notification-dialog/notification-dialog/notification-dialog
We should just delete that section.

@jmsv6d

The notification dialog readme still has the old props shown in the usage section. https://terra-framework-deploye-pr-899.herokuapp.com/components/terra-notification-dialog/notification-dialog/notification-dialog
We should just delete that section.

deleted here https://github.com/cerner/terra-framework/pull/899/commits/0e740a9d8a8c476f1a4779b8f61e72b9b79d9835

On functional review the following issue were identified:
-Safari: Selecting Tab when Notification Dialog is open places focus in the browser URL
-Firefox: When the Notification Dialog is closed the triggering button loses focus.

On functional review the following issue were identified:
-Safari: Selecting Tab when Notification Dialog is open places focus in the browser URL
-Firefox: When the Notification Dialog is closed the triggering button loses focus.

-Safari: Only seeing this in Safari 13+ both on this PR deployment and live, upon poking around a bit the issue seemed to happen whenever we tried to tab to a button, may be related to https://github.com/cerner/terra-core/pull/2740, gonna snoop around a bit.
-Firefox: Replicated on live deployment, seems to be pre-existing issue so probably expected behavior

-Safari: Issue seems to be caused due to an option in safari for allowing keyboard navigation not being turned on.

Following investigation the issues have been identified as a device settings issue for the Safari navigation issue and the Firefox issue was existing prior to this PR and will be fixed separately.  No further issues identified at this time.  Functional review complete.


NPC's trigger join/leave

1.19.2
When an NPC loads and unloads from the playerlist it causes the the mod to trigger the player.join and player.leave notifications. I've only tested this with the Citizens NPC plugin. I don't know if this happens for any others.

Thanks for reporting it! I confirmed it, just didn't cross my mind to test with a plugin like that and it makes sense it does that, due to how it works.
I wanna try and find a solution that would ideally not drop support for offline-mode servers or LAN servers (for these notifications), so I'll need to look into it a bit further when I have a bit of time.

Alrighty, do whatever you need to do.

Is this mod still being maintained?

I don't see a reason to close this as either atm.

Similar issue: Any update of Styled Player List triggers player.join.
And this mod has settings to refresh every X ticks and/or every chat messages (in order to update player name color, [Prefix] and so on), so it's unbearable to have join notification enabled on servers using it.

OK, so I did a couple of things to combat this issue.
Try the latest version and let me know if it's still a problem!
This commit should also fix @Xampa5's issue, but that one was happening for a different reason, so if that's still a problem, it might be best to make a separate issue.
Server mods that add NPCs that look like players basically tell clients the NPC is a player, so it's kinda hard to distinguish between them client-side. I tested with a few server mods/plugins, but there's a chance there's one out there that could still cause issues. If someone finds one, feel free to make an issue and include the mod/plugin name and any other info you may have.


feat(masked errors): rebuild temporary repair as share-able permanent gateway errorhandler

Goal
Changed scope: this now addresses a new work requirement surfaced in slack discussions - the ability for multiple gateways to use the same bug repair. This PR is updated to in theory support that new request. The original bug tickets' scope has been completed already.
Repair gateway-specific masking errors and add some "integration" tests that reflect the HTTP-based, Javascript class-stripping issues of passing our custom Errors from the subgraph to the gateway.
The repair (hopefully temporary) is to simply have an additional if/else path that acts on GraphQL type & the extensions.code value being something we don't want masked.
Note: making PR and pushing tests alone first to confirm the capture the bad behavior of the gateway, then pushing a possible repair. You can see the 'internal error' masking occurring in this test run: https://github.com/Pocket/apollo-utils/actions/runs/4365108384/jobs/7633288751 (had to alter some of the jest config to forceexit since the http servers aren't closing cleanly - entirely open to ideas on how to better repair that).
Issues:

https://getpocket.atlassian.net/browse/INFRA-1041

Notes:
First, the heart of the issue is that Gateway is making HTTP requests to Subgraphs & getting JSON response back, which loses javascript context on errors.
This makes the request: https://github.com/apollographql/federation/blob/4f6d7bde74c537ea85d0a5435986bedf29a21e7f/gateway-js/src/executeQueryPlan.ts#L481
This checks for errors in the request JSON: https://github.com/apollographql/federation/blob/4f6d7bde74c537ea85d0a5435986bedf29a21e7f/gateway-js/src/executeQueryPlan.ts#L494
This does some further SubGraph Error handling: https://github.com/apollographql/federation/blob/4f6d7bde74c537ea85d0a5435986bedf29a21e7f/gateway-js/src/executeQueryPlan.ts#L882
In particular, see this relevant to us note about error types: https://github.com/apollographql/federation/blob/4f6d7bde74c537ea85d0a5435986bedf29a21e7f/gateway-js/src/executeQueryPlan.ts#L905
where our JSON response gets cast as a generic GraphQLError: https://github.com/apollographql/federation/blob/4f6d7bde74c537ea85d0a5435986bedf29a21e7f/gateway-js/src/executeQueryPlan.ts#L909
In order to fully test this issue, I ran gateway and a few services (including shareable lists) locally. Here are some findings of the request & error responses being passed between the two:
HTTP requests & responses
Shareable Lists API
RECV <<< POST / localhost {
  query: 'mutation Mutation__shareable_lists_api__0($data:CreateShareableListInput!){createShareableList(data:$data){title description status moderationStatus}}',
  variables: {
    data: {
      title: 'charlow-test5',
      description: 'making test public collections'
    }
  },
  operationName: 'Mutation__shareable_lists_api__0'
}
SEND >>> 200 {"errors":[{"message":"A list with the title \"charlow-test5\" already exists","locations":[{"line":1,"column":76}],"path":["createShareableList"],"extensions":{"code":"BAD_USER_INPUT","stacktrace":["UserInputError: A list with the title \"charlow-test5\" already exists","    at new CustomGraphQLError (/Users/charlow/Work/src/github.com/pocket/shareable-lists-api/node_modules/@pocket-tools/apollo-utils/dist/errorHandler/errorHandler.js:30:9)","    at new UserInputError (/Users/charlow/Work/src/github.com/pocket/shareable-lists-api/node_modules/@pocket-tools/apollo-utils/dist/errorHandler/errorHandler.js:71:9)","    at createShareableList (/Users/charlow/Work/src/github.com/pocket/shareable-lists-api/dist/database/mutations/ShareableList.js:19:15)","    at async executeMutation (/Users/charlow/Work/src/github.com/pocket/shareable-lists-api/dist/public/resolvers/mutations/utils.js:10:12)","    at async createShareableList (/Users/charlow/Work/src/github.com/pocket/shareable-lists-api/dist/public/resolvers/mutations/ShareableList.js:7:12)"]}}],"data":{"createShareableList":null}}

Gateway / Client API
RECV <<< POST / localhost {
  operationName: 'Mutation',
  variables: {
    data: {
      title: 'charlow-test5',
      description: 'making test public collections'
    }
  },
  query: 'mutation Mutation($data: CreateShareableListInput!) {\n' +
    '  createShareableList(data: $data) {\n' +
    '    title\n' +
    '    description\n' +
    '    status\n' +
    '    moderationStatus\n' +
    '  }\n' +
    '}\n'
}
SEND >>> 200 {"errors":[{"message":"Internal server error","path":["createShareableList"],"extensions":{"code":"INTERNAL_SERVER_ERROR"}}],"data":{"createShareableList":null}}

GraphQL Events Upon Mutation Request
Shareable Lists API
info: { message:{"id":"a79af572-b89a-43c8-acef-139c6a60dc59","event":"request","operationName":"Mutation__shareable_lists_api__0","query":"mutation Mutation__shareable_lists_api__0($data:CreateShareableListInput!){createShareableList(data:$data){title description status moderationStatus}}","variables":{"data":{"title":"charlow-test5","description":"making test public collections"}}}, timestamp: 2023-03-06 20:40:23:4023 }
debug: { message:{"id":"a79af572-b89a-43c8-acef-139c6a60dc59","event":"parsingDidStart"}, timestamp: 2023-03-06 20:40:23:4023 }
debug: { message:{"id":"a79af572-b89a-43c8-acef-139c6a60dc59","event":"validationDidStart"}, timestamp: 2023-03-06 20:40:23:4023 }
debug: { message:{"id":"a79af572-b89a-43c8-acef-139c6a60dc59","event":"didResolveOperation","operationName":"Mutation__shareable_lists_api__0"}, timestamp: 2023-03-06 20:40:23:4023 }
debug: { message:{"id":"a79af572-b89a-43c8-acef-139c6a60dc59","event":"responseForOperation","response":{"http":{"headers":{}}}}, timestamp: 2023-03-06 20:40:23:4023 }
debug: { message:{"id":"a79af572-b89a-43c8-acef-139c6a60dc59","event":"executionDidStart"}, timestamp: 2023-03-06 20:40:23:4023 }
error: { message:{"id":"a79af572-b89a-43c8-acef-139c6a60dc59","event":"errors","errors":[{"message":"A list with the title \"charlow-test5\" already exists","locations":[{"line":1,"column":76}],"path":["createShareableList"],"extensions":{"code":"BAD_USER_INPUT"}}]}, timestamp: 2023-03-06 20:40:23:4023 }
debug: { message:{"id":"a79af572-b89a-43c8-acef-139c6a60dc59","event":"response"}, timestamp: 2023-03-06 20:40:23:4023 }

Client API
info: { message:{"id":"8dffe46b-4201-4074-983a-42b7c6de9243","event":"request","operationName":"Mutation","query":"mutation Mutation($data: CreateShareableListInput!) { createShareableList(data: $data) { title description status moderationStatus } } ","variables":{"data":{"title":"charlow-test5","description":"making test public collections"}}}, timestamp: 2023-03-06 20:40:23:4023 }
debug: { message:{"id":"8dffe46b-4201-4074-983a-42b7c6de9243","event":"parsingDidStart"}, timestamp: 2023-03-06 20:40:23:4023 }
debug: { message:{"id":"8dffe46b-4201-4074-983a-42b7c6de9243","event":"validationDidStart"}, timestamp: 2023-03-06 20:40:23:4023 }
debug: { message:{"id":"8dffe46b-4201-4074-983a-42b7c6de9243","event":"didResolveOperation","operationName":"Mutation"}, timestamp: 2023-03-06 20:40:23:4023 }
debug: { message:{"id":"8dffe46b-4201-4074-983a-42b7c6de9243","event":"responseForOperation","response":{"http":{"headers":{}}}}, timestamp: 2023-03-06 20:40:23:4023 }
debug: { message:{"id":"8dffe46b-4201-4074-983a-42b7c6de9243","event":"executionDidStart"}, timestamp: 2023-03-06 20:40:23:4023 }
error: { message:{"id":"8dffe46b-4201-4074-983a-42b7c6de9243","event":"errors","errors":[{"message":"A list with the title \"charlow-test5\" already exists","path":["createShareableList"],"extensions":{"code":"BAD_USER_INPUT","stacktrace":["UserInputError: A list with the title \"charlow-test5\" already exists","    at new CustomGraphQLError (/Users/charlow/Work/src/github.com/pocket/shareable-lists-api/node_modules/@pocket-tools/apollo-utils/dist/errorHandler/errorHandler.js:30:9)","    at new UserInputError (/Users/charlow/Work/src/github.com/pocket/shareable-lists-api/node_modules/@pocket-tools/apollo-utils/dist/errorHandler/errorHandler.js:71:9)","    at createShareableList (/Users/charlow/Work/src/github.com/pocket/shareable-lists-api/dist/database/mutations/ShareableList.js:19:15)","    at async executeMutation (/Users/charlow/Work/src/github.com/pocket/shareable-lists-api/dist/public/resolvers/mutations/utils.js:10:12)","    at async createShareableList (/Users/charlow/Work/src/github.com/pocket/shareable-lists-api/dist/public/resolvers/mutations/ShareableList.js:7:12)"],"serviceName":"shareable-lists-api"}}]}, timestamp: 2023-03-06 20:40:23:4023 }
debug: { message:{"id":"8dffe46b-4201-4074-983a-42b7c6de9243","event":"response"}, timestamp: 2023-03-06 20:40:23:4023 }
info: { message:{"id":"da508cdb-2183-489f-ba9e-09ffa828a2a0","event":"request","operationName":"IntrospectionQuery","query":"query IntrospectionQuery { __schema { queryType { name } mutationType { name } subscriptionType { name } types { ...FullType } directives { name description locations args { ...InputValue } } } } fragment FullType on __Type { kind name description fields(includeDeprecated: true) { name description args { ...InputValue } type { ...TypeRef } isDeprecated deprecationReason } inputFields { ...InputValue } interfaces { ...TypeRef } enumValues(includeDeprecated: true) { name description isDeprecated deprecationReason } possibleTypes { ...TypeRef } } fragment InputValue on __InputValue { name description type { ...TypeRef } defaultValue } fragment TypeRef on __Type { kind name ofType { kind name ofType { kind name ofType { kind name ofType { kind name ofType { kind name ofType { kind name ofType { kind name } } } } } } } } ","variables":{}}, timestamp: 2023-03-06 20:40:23:4023 }

Manual Type Logging around Error
Shareable Lists API
formattedError value, type, & class instance:
{
  message: 'A list with the title "charlow-test5" already exists',
  locations: [ { line: 1, column: 76 } ],
  path: [ 'createShareableList' ],
  extensions: {
    code: 'BAD_USER_INPUT',
    stacktrace: [
      'UserInputError: A list with the title "charlow-test5" already exists',
      '    at new CustomGraphQLError (/Users/charlow/Work/src/github.com/pocket/shareable-lists-api/node_modules/@pocket-tools/apollo-utils/dist/errorHandler/errorHandler.js:30:9)',
      '    at new UserInputError (/Users/charlow/Work/src/github.com/pocket/shareable-lists-api/node_modules/@pocket-tools/apollo-utils/dist/errorHandler/errorHandler.js:71:9)',
      '    at createShareableList (/Users/charlow/Work/src/github.com/pocket/shareable-lists-api/dist/database/mutations/ShareableList.js:19:15)',
      '    at async executeMutation (/Users/charlow/Work/src/github.com/pocket/shareable-lists-api/dist/public/resolvers/mutations/utils.js:10:12)',
      '    at async createShareableList (/Users/charlow/Work/src/github.com/pocket/shareable-lists-api/dist/public/resolvers/mutations/ShareableList.js:7:12)'
    ]
  }
}
object
Object

Error value, type, & class instance:
UserInputError: A list with the title "charlow-test5" already exists
    at new CustomGraphQLError (/Users/charlow/Work/src/github.com/pocket/shareable-lists-api/node_modules/@pocket-tools/apollo-utils/dist/errorHandler/errorHandler.js:30:9)
    at new UserInputError (/Users/charlow/Work/src/github.com/pocket/shareable-lists-api/node_modules/@pocket-tools/apollo-utils/dist/errorHandler/errorHandler.js:71:9)
    at createShareableList (/Users/charlow/Work/src/github.com/pocket/shareable-lists-api/dist/database/mutations/ShareableList.js:19:15)
    at async executeMutation (/Users/charlow/Work/src/github.com/pocket/shareable-lists-api/dist/public/resolvers/mutations/utils.js:10:12)
    at async createShareableList (/Users/charlow/Work/src/github.com/pocket/shareable-lists-api/dist/public/resolvers/mutations/ShareableList.js:7:12) {
  path: [ 'createShareableList' ],
  locations: [ { line: 1, column: 76 } ],
  extensions: { code: 'BAD_USER_INPUT' }
}
object
GraphQLError

Client API / Gateway
formattedError value, type, & class instance:
{
  message: 'A list with the title "charlow-test5" already exists',
  path: [ 'createShareableList' ],
  extensions: {
    code: 'BAD_USER_INPUT',
    stacktrace: [
      'GraphQLError: A list with the title "charlow-test5" already exists',
      '    at downstreamServiceError (/Users/charlow/Work/src/github.com/pocket/client-api/node_modules/@apollo/gateway/src/executeQueryPlan.ts:909:12)',
      '    at /Users/charlow/Work/src/github.com/pocket/client-api/node_modules/@apollo/gateway/src/executeQueryPlan.ts:498:9',
      '    at Array.map (<anonymous>)',
      '    at sendOperation (/Users/charlow/Work/src/github.com/pocket/client-api/node_modules/@apollo/gateway/src/executeQueryPlan.ts:497:38)',
      '    at processTicksAndRejections (node:internal/process/task_queues:96:5)',
      '    at async /Users/charlow/Work/src/github.com/pocket/client-api/node_modules/@apollo/gateway/src/executeQueryPlan.ts:378:41',
      '    at async executeNode (/Users/charlow/Work/src/github.com/pocket/client-api/node_modules/@apollo/gateway/src/executeQueryPlan.ts:318:9)',
      '    at async /Users/charlow/Work/src/github.com/pocket/client-api/node_modules/@apollo/gateway/src/executeQueryPlan.ts:133:27',
      '    at async /Users/charlow/Work/src/github.com/pocket/client-api/node_modules/@apollo/gateway/src/index.ts:820:28',
      '    at async execute (/Users/charlow/Work/src/github.com/pocket/client-api/node_modules/@apollo/server/src/requestPipeline.ts:520:22)'
    ],
    serviceName: 'shareable-lists-api'
  }
}
object
Object

Error value, type, & class instance:
GraphQLError: A list with the title "charlow-test5" already exists
    at downstreamServiceError (/Users/charlow/Work/src/github.com/pocket/client-api/node_modules/@apollo/gateway/src/executeQueryPlan.ts:909:12)
    at /Users/charlow/Work/src/github.com/pocket/client-api/node_modules/@apollo/gateway/src/executeQueryPlan.ts:498:9
    at Array.map (<anonymous>)
    at sendOperation (/Users/charlow/Work/src/github.com/pocket/client-api/node_modules/@apollo/gateway/src/executeQueryPlan.ts:497:38)
    at processTicksAndRejections (node:internal/process/task_queues:96:5)
    at async /Users/charlow/Work/src/github.com/pocket/client-api/node_modules/@apollo/gateway/src/executeQueryPlan.ts:378:41
    at async executeNode (/Users/charlow/Work/src/github.com/pocket/client-api/node_modules/@apollo/gateway/src/executeQueryPlan.ts:318:9)
    at async /Users/charlow/Work/src/github.com/pocket/client-api/node_modules/@apollo/gateway/src/executeQueryPlan.ts:133:27
    at async /Users/charlow/Work/src/github.com/pocket/client-api/node_modules/@apollo/gateway/src/index.ts:820:28
    at async execute (/Users/charlow/Work/src/github.com/pocket/client-api/node_modules/@apollo/server/src/requestPipeline.ts:520:22) {
  path: [ 'createShareableList' ],
  locations: undefined,
  extensions: {
    code: 'BAD_USER_INPUT',
    stacktrace: [
      'UserInputError: A list with the title "charlow-test5" already exists',
      '    at new CustomGraphQLError (/Users/charlow/Work/src/github.com/pocket/shareable-lists-api/node_modules/@pocket-tools/apollo-utils/dist/errorHandler/errorHandler.js:30:9)',
      '    at new UserInputError (/Users/charlow/Work/src/github.com/pocket/shareable-lists-api/node_modules/@pocket-tools/apollo-utils/dist/errorHandler/errorHandler.js:71:9)',
      '    at createShareableList (/Users/charlow/Work/src/github.com/pocket/shareable-lists-api/dist/database/mutations/ShareableList.js:19:15)',
      '    at async executeMutation (/Users/charlow/Work/src/github.com/pocket/shareable-lists-api/dist/public/resolvers/mutations/utils.js:10:12)',
      '    at async createShareableList (/Users/charlow/Work/src/github.com/pocket/shareable-lists-api/dist/public/resolvers/mutations/ShareableList.js:7:12)'
    ],
    serviceName: 'shareable-lists-api'
  }
}
object
GraphQLError

Unwrapped Error value, type, & class instance:
{
  message: 'A list with the title "charlow-test5" already exists',
  locations: [ { line: 1, column: 76 } ],
  path: [ 'createShareableList' ],
  extensions: {
    code: 'BAD_USER_INPUT',
    stacktrace: [
      'UserInputError: A list with the title "charlow-test5" already exists',
      '    at new CustomGraphQLError (/Users/charlow/Work/src/github.com/pocket/shareable-lists-api/node_modules/@pocket-tools/apollo-utils/dist/errorHandler/errorHandler.js:30:9)',
      '    at new UserInputError (/Users/charlow/Work/src/github.com/pocket/shareable-lists-api/node_modules/@pocket-tools/apollo-utils/dist/errorHandler/errorHandler.js:71:9)',
      '    at createShareableList (/Users/charlow/Work/src/github.com/pocket/shareable-lists-api/dist/database/mutations/ShareableList.js:19:15)',
      '    at async executeMutation (/Users/charlow/Work/src/github.com/pocket/shareable-lists-api/dist/public/resolvers/mutations/utils.js:10:12)',
      '    at async createShareableList (/Users/charlow/Work/src/github.com/pocket/shareable-lists-api/dist/public/resolvers/mutations/ShareableList.js:7:12)'
    ]
  }
}
object
Object

Double Unwrapped Error value, type, & class instance:
{
  message: 'A list with the title "charlow-test5" already exists',
  locations: [ { line: 1, column: 76 } ],
  path: [ 'createShareableList' ],
  extensions: {
    code: 'BAD_USER_INPUT',
    stacktrace: [
      'UserInputError: A list with the title "charlow-test5" already exists',
      '    at new CustomGraphQLError (/Users/charlow/Work/src/github.com/pocket/shareable-lists-api/node_modules/@pocket-tools/apollo-utils/dist/errorHandler/errorHandler.js:30:9)',
      '    at new UserInputError (/Users/charlow/Work/src/github.com/pocket/shareable-lists-api/node_modules/@pocket-tools/apollo-utils/dist/errorHandler/errorHandler.js:71:9)',
      '    at createShareableList (/Users/charlow/Work/src/github.com/pocket/shareable-lists-api/dist/database/mutations/ShareableList.js:19:15)',
      '    at async executeMutation (/Users/charlow/Work/src/github.com/pocket/shareable-lists-api/dist/public/resolvers/mutations/utils.js:10:12)',
      '    at async createShareableList (/Users/charlow/Work/src/github.com/pocket/shareable-lists-api/dist/public/resolvers/mutations/ShareableList.js:7:12)'
    ]
  }
}
object
Object

closed in favor of https://github.com/Pocket/client-api/pull/348 as the temporary solution at the time.


Changed history_count_mode ENUM setup

I have revised the branch and your implementation now works with the ENUMS as suggested in the pull request. Can you merge the pull request into your branch and then reopen the pull request https://github.com/hapifhir/hapi-fhir-jpaserver-starter/pull/500 again?

@sabukar-fn what do you think about the implementation?

Looks good to me!

I have revised the branch and your implementation now works with the ENUMS as suggested in the pull request. Can you merge the pull request into your branch and then reopen the pull request hapifhir#500 again?

I no longer have access to the sabukar-fn github account, so you're better off just creating a new PR with this code.