Closed andyvandesand closed 11 months ago
Thanks for submitting. I will try to reproduce it.
Could it be possible that you use Edit all
and Create Rule
at the same time?
From the error message it looks like that something is iterating through all rules and in between one or more rules are changed, which should not happen.
Thanks for the quick reply!
No, I’m just adding a whole lot of rules in – haven’t used “edit all” at all so far. Sometimes I can add 3 rules in a row, and then sometimes it fails for every rule I add 3 times in a row, there doesn’t seem to be much logic to it. I know, the best problems to solve…
From: Alexander Preibisch @.> Sent: Saturday, August 26, 2023 6:11 PM To: TheAxelander/OpenBudgeteer @.> Cc: andyvandesand @.>; Author @.> Subject: Re: [TheAxelander/OpenBudgeteer] Exception when adding rules (Issue #165)
Thanks for submitting. I will try to reproduce it.
Could it be possible that you use Edit all and Create Rule at the same time?
From the error message it looks like that something is iterating through all rules and in between one or more rules are changed, which should not happen.
— Reply to this email directly, view it on GitHub https://github.com/TheAxelander/OpenBudgeteer/issues/165#issuecomment-1694249304 , or unsubscribe https://github.com/notifications/unsubscribe-auth/APK7D3KZMFZRS56RIIYIKPDXXHDS7ANCNFSM6AAAAAA37N7EQM . You are receiving this because you authored the thread. https://github.com/notifications/beacon/APK7D3PC3UAU33MCP6EH5R3XXHDS7A5CNFSM6AAAAAA37N7EQOWGG33NNVSW45C7OR4XAZNMJFZXG5LFINXW23LFNZ2KUY3PNVWWK3TUL5UWJTTE7QYVQ.gif Message ID: @. @.> >
Also no difference on whether there’s 1 or 2 mapping rules – still sometimes fails and sometimes doesn’t.
From: Alexander Preibisch @.> Sent: Saturday, August 26, 2023 6:11 PM To: TheAxelander/OpenBudgeteer @.> Cc: andyvandesand @.>; Author @.> Subject: Re: [TheAxelander/OpenBudgeteer] Exception when adding rules (Issue #165)
Thanks for submitting. I will try to reproduce it.
Could it be possible that you use Edit all and Create Rule at the same time?
From the error message it looks like that something is iterating through all rules and in between one or more rules are changed, which should not happen.
— Reply to this email directly, view it on GitHub https://github.com/TheAxelander/OpenBudgeteer/issues/165#issuecomment-1694249304 , or unsubscribe https://github.com/notifications/unsubscribe-auth/APK7D3KZMFZRS56RIIYIKPDXXHDS7ANCNFSM6AAAAAA37N7EQM . You are receiving this because you authored the thread.Message ID: @.***>
Can you share which database you use (Sqlite or MYSql)?
11.0.2-MariaDB-1:11.0.2+maria~ubu2204
From: Alexander Preibisch @.> Sent: Saturday, August 26, 2023 6:28 PM To: TheAxelander/OpenBudgeteer @.> Cc: andyvandesand @.>; Author @.> Subject: Re: [TheAxelander/OpenBudgeteer] Exception when adding rules (Issue #165)
Can you share which database you use (Sqlite or MYSql)?
— Reply to this email directly, view it on GitHub https://github.com/TheAxelander/OpenBudgeteer/issues/165#issuecomment-1694252330 , or unsubscribe https://github.com/notifications/unsubscribe-auth/APK7D3O6EH7VASWDIJ2FVK3XXHFSTANCNFSM6AAAAAA37N7EQM . You are receiving this because you authored the thread. https://github.com/notifications/beacon/APK7D3KVIJ6YOXKNISL7Z2DXXHFSTA5CNFSM6AAAAAA37N7EQOWGG33NNVSW45C7OR4XAZNMJFZXG5LFINXW23LFNZ2KUY3PNVWWK3TUL5UWJTTE7Q6SU.gif Message ID: @. @.> >
Thanks, I try to dig in several directions to get any idea what could be the root cause here.
Do you access the site directly (e.g. 192.168.178.123:8080) or using a domain (bucket.example.com) in combination with a reverse proxy (like Traefik or Nginx Proxy Manager)?
I’m using Traefik on portainer. Mariadb is on host network, openbudgeteer is forwarded.
From: Alexander Preibisch @.> Sent: Saturday, August 26, 2023 6:46 PM To: TheAxelander/OpenBudgeteer @.> Cc: andyvandesand @.>; Author @.> Subject: Re: [TheAxelander/OpenBudgeteer] Exception when adding rules (Issue #165)
Thanks, I try to dig in several directions to get any idea what could be the root cause here.
Do you access the site directly (e.g. 192.168.178.123:8080) or using a domain (bucket.example.com) in combination with a reverse proxy (like Traefik or Nginx Proxy Manager)?
— Reply to this email directly, view it on GitHub https://github.com/TheAxelander/OpenBudgeteer/issues/165#issuecomment-1694255282 , or unsubscribe https://github.com/notifications/unsubscribe-auth/APK7D3LXPE4MDBWVW4Z4IO3XXHHWXANCNFSM6AAAAAA37N7EQM . You are receiving this because you authored the thread.Message ID: @.***>
Alright. Can you check if WebSockets support is activated for OpenBudgeteer. I experienced some issues in the past if this was not active.
Sorry how do I do that? -------- Original message --------From: Alexander Preibisch @.> Date: 26/8/23 19:01 (GMT+08:00) To: TheAxelander/OpenBudgeteer @.> Cc: andyvandesand @.>, Author @.> Subject: Re: [TheAxelander/OpenBudgeteer] Exception when adding rules (Issue #165) Alright. Can you check if WebSockets support is activated for OpenBudgeteer. I experienced some issues in the past if this was not active.
—Reply to this email directly, view it on GitHub, or unsubscribe.You are receiving this because you authored the thread.Message ID: @.***>
I'm not completely familiar with Traefik as I'm using Nginx Proxy Manager, on some sites it says it works automatically, others provide some special settings.
Just to see if this is really the root cause, I would propose that you try to access the site directly via IP and see if the errors still pop up. If not then it's most probably an issue within Traefik.
Oh sorry you meant in traefik, gotcha. Will try. -------- Original message --------From: Alexander Preibisch @.> Date: 26/8/23 19:13 (GMT+08:00) To: TheAxelander/OpenBudgeteer @.> Cc: andyvandesand @.>, Author @.> Subject: Re: [TheAxelander/OpenBudgeteer] Exception when adding rules (Issue #165) I'm not completely familiar with Traefik as I'm using Nginx Proxy Manager, on some sites it says it works automatically, others provide some special settings. Just to see if this is really the root cause, I would propose that you try to access the site directly via IP and see if the errors still pop up. If not then it's most probably an issue within Traefik.
—Reply to this email directly, view it on GitHub, or unsubscribe.You are receiving this because you authored the thread.Message ID: @.***>
Nah sorry, just tried directly without traefik, same issue.
From: Alexander Preibisch @.> Sent: Saturday, August 26, 2023 7:13 PM To: TheAxelander/OpenBudgeteer @.> Cc: andyvandesand @.>; Author @.> Subject: Re: [TheAxelander/OpenBudgeteer] Exception when adding rules (Issue #165)
I'm not completely familiar with Traefik as I'm using Nginx Proxy Manager, on some sites it says it works automatically, others provide some special settings.
Just to see if this is really the root cause, I would propose that you try to access the site directly via IP and see if the errors still pop up. If not then it's most probably an issue within Traefik.
— Reply to this email directly, view it on GitHub https://github.com/TheAxelander/OpenBudgeteer/issues/165#issuecomment-1694266898 , or unsubscribe https://github.com/notifications/unsubscribe-auth/APK7D3L7GZ5JVN33FPJXL5LXXHK5RANCNFSM6AAAAAA37N7EQM . You are receiving this because you authored the thread.Message ID: @.***>
Damn, ok. I still need to play around, couldn't reproduce it so far...
Sorry I haven’t done much .net stuff in docker, more than happy to debug if I can, but can you attach to an instance in a container? I assume you can somehow?
From: Alexander Preibisch @.> Sent: Saturday, August 26, 2023 7:35 PM To: TheAxelander/OpenBudgeteer @.> Cc: andyvandesand @.>; Author @.> Subject: Re: [TheAxelander/OpenBudgeteer] Exception when adding rules (Issue #165)
Damn, ok. I still need to play around, couldn't reproduce it so far...
— Reply to this email directly, view it on GitHub https://github.com/TheAxelander/OpenBudgeteer/issues/165#issuecomment-1694298524 , or unsubscribe https://github.com/notifications/unsubscribe-auth/APK7D3I3TEHULAMAFUQQHS3XXHNOJANCNFSM6AAAAAA37N7EQM . You are receiving this because you authored the thread. https://github.com/notifications/beacon/APK7D3PU2CQYMQNEOFVMPTLXXHNOJA5CNFSM6AAAAAA37N7EQOWGG33NNVSW45C7OR4XAZNMJFZXG5LFINXW23LFNZ2KUY3PNVWWK3TUL5UWJTTE7TYZY.gif Message ID: @. @.> >
To be honest even with debugging I see a challenge in identifying the issue based on the error message. Normally it's quite easy to reproduce exceptions, as they are either based on a certain data constellation or on actions done on the Web interface.
But here it just pops up occasionally and the issue is most probably due to overlapping traffic between Browser and Server (Container). Not easy to trace such things.
Yeah I understand. But to give you an idea of scale, I’m entering about 200 rules here and getting the error probably for 7 out of 10 entries. It just gives me the generic “An error has occurred. This application may no longer respond until reloaded. http://budget.vds.home/ Reload” and won’t do anything until I refresh. I assume that’s just the generic error handler.
Practically it’s no big deal at all, I just hit F5 and can continue with the next entry, but yeah something is playing up.
I just noticed that some buckets don’t seem to be throwing up exceptions as frequently as others. If you’re interested, here’s my list of buckets:
BucketGroupId Name Position
2 Dining, Bars & Cafes 13
3 Entertainment 12
4 Groceries 11
5 Shopping 10
6 Finance 9
7 Gifts & Donations 8
8 Travel 7
9 Health 6
10 House 5
11 Kids 4
12 Transport 3
13 Utilities 2
14 Work 1
BucketId Name BucketGroupId ValidFrom IsInactive IsInactiveFrom ColorCode
1 Income 0 1990-01-01 00:00:00.000000 0 9999-12-31 00:00:00.000000 NULL
2 Transfer 0 1990-01-01 00:00:00.000000 0 9999-12-31 00:00:00.000000 NULL
3 Union 14 2023-08-01 00:00:00.000000 0 9999-12-31 23:59:59.999999 Transparent
4 LOL Insurance 14 2023-08-01 00:00:00.000000 0 9999-12-31 23:59:59.999999 Transparent
5 Work - Expenses 14 2023-08-01 00:00:00.000000 0 9999-12-31 23:59:59.999999 Transparent
6 Dry Cleaning 14 2023-08-01 00:00:00.000000 0 9999-12-31 23:59:59.999999 Transparent
7 Electricity 13 2023-08-01 00:00:00.000000 0 9999-12-31 23:59:59.999999 Transparent
8 Gas 13 2023-08-01 00:00:00.000000 0 9999-12-31 23:59:59.999999 Transparent
9 Water 13 2023-08-01 00:00:00.000000 0 9999-12-31 23:59:59.999999 Transparent
10 Internet 13 2023-08-01 00:00:00.000000 0 9999-12-31 23:59:59.999999 Transparent
11 Mobile 13 2023-08-01 00:00:00.000000 0 9999-12-31 23:59:59.999999 Transparent
12 Utilities - Other 13 2023-08-01 00:00:00.000000 0 9999-12-31 23:59:59.999999 Transparent
13 Parking 12 2023-08-01 00:00:00.000000 0 9999-12-31 23:59:59.999999 Transparent
14 Registration 12 2023-08-01 00:00:00.000000 0 9999-12-31 23:59:59.999999 Transparent
15 Fuel 12 2023-08-01 00:00:00.000000 0 9999-12-31 23:59:59.999999 Transparent
16 Car - Service 12 2023-08-01 00:00:00.000000 0 9999-12-31 23:59:59.999999 Transparent
17 Transport - Other 12 2023-08-01 00:00:00.000000 0 9999-12-31 23:59:59.999999 Transparent
18 Fines 12 2023-08-01 00:00:00.000000 0 9999-12-31 23:59:59.999999 Transparent
19 Public Transport 12 2023-08-01 00:00:00.000000 0 9999-12-31 23:59:59.999999 Transparent
20 Music Lessons 11 2023-08-01 00:00:00.000000 0 9999-12-31 23:59:59.999999 Transparent
21 Kids - Sports 11 2023-08-01 00:00:00.000000 0 9999-12-31 23:59:59.999999 Transparent
22 WPS 11 2023-08-01 00:00:00.000000 0 9999-12-31 23:59:59.999999 Transparent
23 SCBC 11 2023-08-01 00:00:00.000000 0 9999-12-31 23:59:59.999999 Transparent
24 Rates 10 2023-08-01 00:00:00.000000 0 9999-12-31 23:59:59.999999 Transparent
25 Upkeep 10 2023-08-01 00:00:00.000000 0 9999-12-31 23:59:59.999999 Transparent
26 GP 9 2023-08-01 00:00:00.000000 0 9999-12-31 23:59:59.999999 Transparent
27 Dentist 9 2023-08-01 00:00:00.000000 0 9999-12-31 23:59:59.999999 Transparent
28 Pharmacies 9 2023-08-01 00:00:00.000000 0 9999-12-31 23:59:59.999999 Transparent
29 Health - Other 9 2023-08-01 00:00:00.000000 0 9999-12-31 23:59:59.999999 Transparent
30 Tithe 7 2023-08-01 00:00:00.000000 0 9999-12-31 23:59:59.999999 Transparent
31 Church Donations 7 2023-08-01 00:00:00.000000 0 9999-12-31 23:59:59.999999 Transparent
32 Missions 7 2023-08-01 00:00:00.000000 0 9999-12-31 23:59:59.999999 Transparent
33 Savings 6 2023-08-01 00:00:00.000000 0 9999-12-31 23:59:59.999999 Transparent
34 Tax Return 6 2023-08-01 00:00:00.000000 0 9999-12-31 23:59:59.999999 Transparent
35 Health Insurance 6 2023-08-01 00:00:00.000000 0 9999-12-31 23:59:59.999999 Transparent
36 Interest 6 2023-08-01 00:00:00.000000 0 9999-12-31 23:59:59.999999 Transparent
37 Cashout 6 2023-08-01 00:00:00.000000 0 9999-12-31 23:59:59.999999 Transparent
38 Investment 6 2023-08-01 00:00:00.000000 0 9999-12-31 23:59:59.999999 Transparent
39 Mortgage 6 2023-08-01 00:00:00.000000 0 9999-12-31 23:59:59.999999 Transparent
40 Home Insurance 6 2023-08-01 00:00:00.000000 0 9999-12-31 23:59:59.999999 Transparent
41 Car Insurance 6 2023-08-01 00:00:00.000000 0 9999-12-31 23:59:59.999999 Transparent
42 Fees 6 2023-08-01 00:00:00.000000 0 9999-12-31 23:59:59.999999 Transparent
43 Clothes 5 2023-08-01 00:00:00.000000 0 9999-12-31 23:59:59.999999 Transparent
44 Shopping - Home 5 2023-08-01 00:00:00.000000 0 9999-12-31 23:59:59.999999 Transparent
45 Shopping - Other 5 2023-08-01 00:00:00.000000 0 9999-12-31 23:59:59.999999 Transparent
47 Personal Care 5 2023-08-01 00:00:00.000000 0 9999-12-31 23:59:59.999999 Transparent
48 Presents 5 2023-08-01 00:00:00.000000 0 9999-12-31 23:59:59.999999 Transparent
49 Woolworths 4 2023-08-01 00:00:00.000000 0 9999-12-31 23:59:59.999999 Transparent
50 Coles 4 2023-08-01 00:00:00.000000 0 9999-12-31 23:59:59.999999 Transparent
51 Aldi 5 2023-08-01 00:00:00.000000 0 9999-12-31 23:59:59.999999 Transparent
52 Fruit & Veg 4 2023-08-01 00:00:00.000000 0 9999-12-31 23:59:59.999999 Transparent
53 Alcohol 4 2023-08-01 00:00:00.000000 0 9999-12-31 23:59:59.999999 Transparent
54 Costco 4 2023-08-01 00:00:00.000000 0 9999-12-31 23:59:59.999999 Transparent
55 Groceries - Other 4 2023-08-01 00:00:00.000000 0 9999-12-31 23:59:59.999999 Transparent
56 Dog 4 2023-08-01 00:00:00.000000 0 9999-12-31 23:59:59.999999 Transparent
57 Family Activities 3 2023-08-01 00:00:00.000000 0 9999-12-31 23:59:59.999999 Transparent
58 Hobbies 3 2023-08-01 00:00:00.000000 0 9999-12-31 23:59:59.999999 Transparent
59 Entertainment - Sports 3 2023-08-01 00:00:00.000000 0 9999-12-31 23:59:59.999999 Transparent
60 Online Services 3 2023-08-01 00:00:00.000000 0 9999-12-31 23:59:59.999999 Transparent
61 Takeout 2 2023-08-01 00:00:00.000000 0 9999-12-31 23:59:59.999999 Transparent
62 Coffee 2 2023-08-01 00:00:00.000000 0 9999-12-31 23:59:59.999999 Transparent
63 Paradox 2 2023-08-01 00:00:00.000000 0 9999-12-31 23:59:59.999999 Transparent
64 Lunch 2 2023-08-01 00:00:00.000000 0 9999-12-31 23:59:59.999999 Transparent
65 Restaurants 2 2023-08-01 00:00:00.000000 0 9999-12-31 23:59:59.999999 Transparent
66 Bars 2 2023-08-01 00:00:00.000000 0 9999-12-31 23:59:59.999999 Transparent
From: Alexander Preibisch @.> Sent: Saturday, August 26, 2023 8:04 PM To: TheAxelander/OpenBudgeteer @.> Cc: andyvandesand @.>; Author @.> Subject: Re: [TheAxelander/OpenBudgeteer] Exception when adding rules (Issue #165)
To be honest even with debugging I see a challenge in identifying the issue based on the error message. Normally it's quite easy to reproduce exceptions, as they are either based on a certain data constellation or on actions done on the Web interface.
But here it just pops up occasionally and the issue is most probably due to overlapping traffic between Browser and Server (Container). Not easy to trace such things.
— Reply to this email directly, view it on GitHub https://github.com/TheAxelander/OpenBudgeteer/issues/165#issuecomment-1694326399 , or unsubscribe https://github.com/notifications/unsubscribe-auth/APK7D3IA35SHHPSSUOX2MDLXXHQZ5ANCNFSM6AAAAAA37N7EQM . You are receiving this because you authored the thread.Message ID: @.***>
Thanks for sharing. This “An error has occurred. This application may no longer respond [..]” at the bottom is at the end an unhandled exception and as you said reloading helps.
But if I understood correctly the data have been saved, it's just the Web Site rendering that crashes...
Yep that’s correct.
From: Alexander Preibisch @.> Sent: Saturday, August 26, 2023 8:36 PM To: TheAxelander/OpenBudgeteer @.> Cc: andyvandesand @.>; Author @.> Subject: Re: [TheAxelander/OpenBudgeteer] Exception when adding rules (Issue #165)
Thanks for sharing. This “An error has occurred. This application may no longer respond [..]” at the bottom is at the end an unhandled exception and as you said reloading helps.
But if I understood correctly the data have been saved, it's just the Web Site rendering that crashes...
— Reply to this email directly, view it on GitHub https://github.com/TheAxelander/OpenBudgeteer/issues/165#issuecomment-1694331763 , or unsubscribe https://github.com/notifications/unsubscribe-auth/APK7D3IPZMPOUWNYWIZDCTTXXHUR3ANCNFSM6AAAAAA37N7EQM . You are receiving this because you authored the thread.Message ID: @.***>
I had a feeling for a while that it might have been my naming of buckets, I had a few with the same names in separate bucket groups, resulting in identical items in the drop down. But I think I was wrong.
From: Alexander Preibisch @.> Sent: Saturday, August 26, 2023 8:36 PM To: TheAxelander/OpenBudgeteer @.> Cc: andyvandesand @.>; Author @.> Subject: Re: [TheAxelander/OpenBudgeteer] Exception when adding rules (Issue #165)
Thanks for sharing. This “An error has occurred. This application may no longer respond [..]” at the bottom is at the end an unhandled exception and as you said reloading helps.
But if I understood correctly the data have been saved, it's just the Web Site rendering that crashes...
— Reply to this email directly, view it on GitHub https://github.com/TheAxelander/OpenBudgeteer/issues/165#issuecomment-1694331763 , or unsubscribe https://github.com/notifications/unsubscribe-auth/APK7D3IPZMPOUWNYWIZDCTTXXHUR3ANCNFSM6AAAAAA37N7EQM . You are receiving this because you authored the thread. https://github.com/notifications/beacon/APK7D3KVFTBYQRWFR26QMRLXXHUR3A5CNFSM6AAAAAA37N7EQOWGG33NNVSW45C7OR4XAZNMJFZXG5LFINXW23LFNZ2KUY3PNVWWK3TUL5UWJTTE7VZXG.gif Message ID: @. @.> >
It happened now also on my side, but already on opening the Rules Page. Issue still exists on pre-release
. Database mysql
warn: Microsoft.AspNetCore.Components.Server.Circuits.RemoteRenderer[100]
Unhandled exception rendering component: Collection was modified; enumeration operation may not execute.
System.InvalidOperationException: Collection was modified; enumeration operation may not execute.
at System.Collections.Generic.List`1.Enumerator.MoveNextRare()
at OpenBudgeteer.Blazor.Pages.Rules.BuildRenderTree(RenderTreeBuilder __builder) in /src/OpenBudgeteer.Blazor/Pages/Rules.razor:line 104
at Microsoft.AspNetCore.Components.Rendering.ComponentState.RendertoBatch(RenderBatchBuilder batchBuilder, RenderFragment renderFragment, Exception& renderFragmentException)
fail: Microsoft.AspNetCore.Components.Server.Circuits.CircuitHost[111]
Unhandled exception in circuit '6-Mhq8_7jzyF9CUTp34QkCaUWnOi5GyY5YfIvmFPFCY'.
System.InvalidOperationException: Collection was modified; enumeration operation may not execute.
at System.Collections.Generic.List`1.Enumerator.MoveNextRare()
at OpenBudgeteer.Blazor.Pages.Rules.BuildRenderTree(RenderTreeBuilder __builder) in /src/OpenBudgeteer.Blazor/Pages/Rules.razor:line 104
at Microsoft.AspNetCore.Components.Rendering.ComponentState.RendertoBatch(RenderBatchBuilder batchBuilder, RenderFragment renderFragment, Exception& renderFragmentException)
Issue not really reproducible. I will do a code review to see if I can rewrite the coding to get the rules in a hopefully safe way
[uhm ooops... sorry for the duplicate. completely forgot this is what it was!!]
I think I found the root cause, a potential fix is now available on pre-release
, I will keep this open for further tracking.
Issue still existing in 1.7
Potential fix implemented in 1.7.1
Creating a rule throws the following exception:
warn: Microsoft.AspNetCore.Components.Server.Circuits.RemoteRenderer[100] Unhandled exception rendering component: Collection was modified; enumeration operation may not execute. System.InvalidOperationException: Collection was modified; enumeration operation may not execute. at System.Collections.Generic.List
1.Enumerator.MoveNext() at OpenBudgeteer.Blazor.Pages.Rules.BuildRenderTree(RenderTreeBuilder __builder) in /src/OpenBudgeteer.Blazor/Pages/Rules.razor:line 106 at Microsoft.AspNetCore.Components.Rendering.ComponentState.RenderIntoBatch(RenderBatchBuilder batchBuilder, RenderFragment renderFragment, Exception& renderFragmentException) fail: Microsoft.AspNetCore.Components.Server.Circuits.CircuitHost[111] Unhandled exception in circuit 'FsnA1rF9kTaML5BqLK2RfDbStpQenWAtKE9M7pdauaI'. System.InvalidOperationException: Collection was modified; enumeration operation may not execute. at System.Collections.Generic.List
1.Enumerator.MoveNext() at OpenBudgeteer.Blazor.Pages.Rules.BuildRenderTree(RenderTreeBuilder __builder) in /src/OpenBudgeteer.Blazor/Pages/Rules.razor:line 106 at Microsoft.AspNetCore.Components.Rendering.ComponentState.RenderIntoBatch(RenderBatchBuilder batchBuilder, RenderFragment renderFragment, Exception& renderFragmentException)This doesn't happen every time, but very frequently. The rule is still being created. I have not managed to work out any pattern to when it works and when it doesn't. All the rules I'm creating are using priority 0, the same name as the target bucket, and mapping rule "memo" "contains".