Commit graph

2179 commits

Author SHA1 Message Date
Ankush Menat
6d32ffcc6c perf: optimize != operator when field can be null 2025-05-02 12:11:27 +05:30
Ankush Menat
42f1d1b460
fix(db_query): double-escaped value (#32376) 2025-05-02 11:09:11 +05:30
Akhil Narang
8d42b4d3d6
Merge pull request #32268 from akhilnarang/drop-example-email-address-creation
fix: don't create example email domains and email accounts
2025-04-29 12:50:29 +05:30
Ankush Menat
2dfb96f91c
fix: handle snapshot isolation errors better (#32318)
* fix: Avoid Snapshot violation

- Main thread created and "read" user
- Other thread modified something
- Main thread wants to delete or "write" to same row.

This violates snapshot isolation.

* fix: treat snapshot violation as deadlock for now

* test: handle snapshot violations
2025-04-28 06:18:38 +00:00
Akhil Narang
309c18cabb
fix(ui_tests): create email account
Signed-off-by: Akhil Narang <me@akhilnarang.dev>
2025-04-23 17:54:43 +05:30
Raffael Meyer
d7ed52ae9b
refactor!: map view (#32207) 2025-04-21 16:50:13 +02:00
Gavin D'souza
551be4f6ab
fix: Clear site test records log before running test
Not sure if this was intentional - there is no documentation as far as i
can tell
2025-04-15 18:28:21 +02:00
Sagar Vora
39636fb260
Merge pull request #32101 from sagarvora/revert-meta-sig
revert: meta signature
2025-04-12 18:38:43 +05:30
Sagar Vora
beeeed4160 revert: meta signature 2025-04-12 18:29:25 +05:30
Ankush Menat
eb79ecaca9
chore: Revert document read only mode (#32102)
We can trust mappers to do the right thing, restricting few methods
doesn't prevent anything real anyway, unnecessary overhead and breakages.
2025-04-12 18:27:16 +05:30
Sagar Vora
20f407bf45 test: update test relying on wrapped _load_app_hooks 2025-03-20 08:13:49 +05:30
Sagar Vora
6f9d377e83 test: rewrite test_request_cache 2025-03-16 11:56:06 +05:30
Sagar Vora
b2cab51849
feat: re-introduce mysqlclient 🚀 (#31719)
* feat: mysqlclient

* fix: update error attrs

* fix: decode mogrified query to unicode

* fix: do some cleanup

* chore: disable cleanup for now

* fix: remove unnecessary call to as_unicode

* test: skip perf test for now

* fix: fallback to empty str

* fix: unbuffered cursor support

* fix: update converters and other changes

* fix: add cleanup back

* perf: improve timedelta converter

* fix: dont attempt to run query when explain flag is set

* test: cleanup tests

* chore: remove commented code

* perf: store conf as local var

* chore: ensure sequence

---------

Co-authored-by: Ankush Menat <ankush@frappe.io>
2025-03-15 09:48:21 +05:30
Raffael Meyer
fed66a32ed
fix: support "Timespan" in evaluate_filters (#31190)
* fix: support "Timespan" in `evaluate_filters`

* fix: add None case
2025-03-13 12:51:49 +01:00
Ankush Menat
e4b0d11b19
fix: only show tracebacks to system users (#31629)
Website users by design are supposed to be "less trusted", so don't show
tracebacks to them.
2025-03-13 14:48:20 +05:30
Ankush Menat
394a5ff9ff
fix: Round of rate limit to seconds (#31674) 2025-03-12 10:52:42 +00:00
Sagar Vora
3c8912f6e7 perf: faster local attr lookup 2025-03-12 14:03:36 +05:30
Sagar Vora
20220ef894
fix: avoid one time setup (#31650) 2025-03-12 12:44:19 +05:30
Sagar Vora
146d50e5d4 chore: fix typo in new DocStatus constant 2025-03-05 08:29:47 +05:30
Ankush Menat
967d3e828c fix: granular status in system health report
differentiate between dead process, manually disabled or dormant.
2025-02-25 10:38:25 +05:30
Ankush Menat
6db7cb096d fix: Better proxy for active site and disable on selfhosted 2025-02-25 10:37:29 +05:30
Sagar Vora
fcf657ba80 perf: improved DocStatus API and other minor improvements 2025-02-24 12:51:10 +05:30
Ankush Menat
17d6d81fb5
feat: mini pretty dates (#31331)
Narrow format pretty dates for list views, works the same way as client
side function.
2025-02-20 05:18:45 +00:00
Sagar Vora
fa252691b6 test: update status codes 2025-02-19 12:41:17 +05:30
Sagar Vora
f4062b4d7a fix: ensure consistent error in response 2025-02-19 12:10:59 +05:30
Akhil Narang
8a758365eb
Revert "Merge pull request #28363 from frappe/expr-series" (#31202)
This reverts commit 91d553c9cf, reversing
changes made to d17136cd04.
2025-02-10 06:46:45 +00:00
Raffael Meyer
aade0df7bf
feat: new REST API for copy_doc (#31160)
* feat: new REST API for copy_doc

* test: copy endpoint
2025-02-07 17:46:53 +05:30
Ankush Menat
f118a1549c
Merge pull request #31147 from barredterra/fix-child-table-links
fix: consider parent doctype when validating link to child row
2025-02-06 13:14:55 +05:30
Ankush Menat
063f2bbc79 fix: only check parent doctype for child doctypes 2025-02-06 13:05:06 +05:30
Ankush Menat
429dab759d
perf: Skip loading EPS if not enabled (#31099)
It's disabled by default 🤷
2025-02-04 07:28:29 +00:00
Ankush Menat
551107bdcf
test: ensure utilization of idle threads is <5% (#31092)
All of following should have <2% utilization when idle:
- Redis invalidator thread
- Gunicorn workers and master
- RQ worker and horses
2025-02-04 05:57:38 +00:00
Ankush Menat
4406116f86 feat: estimate table size 2025-02-03 09:21:56 +05:30
Ankush Menat
9b79dfeb7b
perf: "random" naming to improve concurrency and locality (#30053)
This feels overengineered and it kinda is, but other efforts to
inroduce sequential naming/UUID naming haven't been that fruitful
either.

10 character random "hash" i now changed to.

1. first character - last character in UUID4 ID of request/job
2. three characters - derived from current timestamp.
4. 6 characters - random data.

This satisfies all three requirements:

1. Readers - temporal locality should result in spatial locality on disk. (fewer pages accessed)
2. Single writer - temporal locality should result in spatial locality. (fewer dirty pages)
3. Multiple writers - temporal locality should NOT result in spatial locality. (less lock contention)

Mostly concludes https://github.com/frappe/frappe/pull/25309 and https://github.com/frappe/frappe/pull/28349

Rough probabiliy numbers

Assumptions:
- Unique per worker prefix - 16 (uuid's base16 version)
- Rough time spent generating names - 10% of request (very very conservative estimate)

Probability(collision) = P(at least one prefix collision) * P(time collision)
Probability(collision) = (1 - p(all different)) * 10%
Probability(collision) = (1 - (16! / 16-N! )/ 16^N ) * 10%

| N (concurrency) | Probability(collision) |
| 1  |    0.0% |
| 2  |    0.6% |
| 3  |    1.8% |
| 4  |    3.3% |
| 5  |    5.0% |
| 6  |    6.6% |
| 7  |    7.9% |
| 8  |    8.8% |
2025-01-25 07:04:09 +00:00
Ankush Menat
6328421fde fix: only cache if called directly 2025-01-24 19:08:04 +05:30
Sagar Vora
e7073a5f28
perf: faster LocalProxy (#29181)
* perf: faster `LocalProxy`

* refactor: use callable style local

* test: add some tests for local proxy override

---------

Co-authored-by: Ankush Menat <ankush@frappe.io>
2025-01-20 12:49:55 +00:00
Ankush Menat
6ad61d6a82
test: avoid possible flake in OTP tests (#29214)
Since we use TOTP the token can expire between the time we generate and
the verification code runs.
2025-01-17 07:32:17 +00:00
Ankush Menat
daa52b8802
build!: Drop maxmind IP database (#29213)
1. It's severly outdated and free version isn't that accurate to begin
   with.
2. I replaced country detection using timezone a long time ago: c8ec528aa7/frappe/desk/page/setup_wizard/setup_wizard.js (L664-L676)

This is good enough for setup wizard for most popular countries. Use
IP-API if you need better guarantees (we have a license).
2025-01-17 12:03:09 +05:30
Ankush Menat
ba6e3f6cd1 test: igore edge case of invalid strings
We parse them as None instead of 1-1-1 etc
2025-01-15 12:07:06 +05:30
Ankush Menat
829062b1e3 fix: make shared jenv thread-safe
A new copy is created for each request, but cache is shared.
2025-01-15 11:53:00 +05:30
Ankush Menat
129212a916 perf: cache unseen notes 2025-01-14 19:43:22 +05:30
Ankush Menat
c72e91f465
fix: backward compatible date parsing (#29155)
Even though we never use tz aware object in frappe this function
previously used to retain them, so keep TZinfo for sake of compat.

Nothing should be affected ideally.
2025-01-14 11:05:55 +00:00
Ankush Menat
b6a0e849a0 fix: Avoid mixing client cache and redis_wrapper 2025-01-14 15:20:47 +05:30
Ankush Menat
b49d512404 feat: cache documents in client cache
No need to query 1 key at a time.
2025-01-14 14:33:10 +05:30
Ankush Menat
4d1ef02e25 feat: generator support for client cache
Similar to redis, for ergonomics
2025-01-14 13:55:28 +05:30
Ankush Menat
fab464effb feat: support shared keys in client cache 2025-01-14 13:52:29 +05:30
Ankush Menat
fdba41c682
perf: misc client cache improvements (#29070)
* perf: Reduce penalty for lack of redis connection

If redis isn't running than this client cache is slower than default
implementation because of the extra locking overhead.

* test: update perf redis counts

* perf: cache table columns in client-cache

* fix: race condition on cache-client_cache init

Rare but apparant in synthetic benchmarks.

Cache is set but client cache is still being initialized then request
will fail.

* perf: Don't run notifications when loading document

WHAT?

* fix: use cached doc to repopulate

* perf: reduce get_meta calls
2025-01-07 16:14:43 +05:30
Ankush Menat
33bd1bc09b fix: Flushall shouldn't attempt reading keys 2025-01-07 11:56:22 +05:30
Ankush Menat
b5e2569c0c feat: statistics for cache performance
These can be used for logging or debugging the behaviour of the cache.
2025-01-07 11:47:52 +05:30
Ankush Menat
b7ddd1df92 perf: cache hooks in client-side cache 2025-01-06 20:24:27 +05:30
Ankush Menat
dfc6dcb6b8 Revert "perf: Avoid checking server script map (#29057)"
This reverts commit 55a55e7f7b.
2025-01-06 19:43:53 +05:30