Highlights
Step aligned windows
Rolling and expanding functions have been updated so that the start of each window is aligned with the smallest unit of time passed by the user within the step.
For example, if the step is "1 month and 1 day", the first window will begin at the start of the most recent day. Explicitly, if the earliest time in the graph is 15/01/25 14:02:23 and you call the rolling function you would get the following increments:
Increments in previous versions:
15/01/25 14:02:23 → 16/01/25 14:02:23→ 17/01/25 14:02:23 → 18/01/25 14:02:23 → …
Increments in v0.16.3:
15/01/25 00:00:00 → 16/01/25 00:00:00 → 17/01/25 00:00:00 → 18/01/25 00:00:00→ …
This change was made to make windows more intuitive. If someone wants a rolling window over "1 year", they typically want it to start at the beginning of the calendar year and end at the end of the year. You can also explicitly set the alignment_unit. For example, you can set g.rolling("1 month", alignment_unit="day") if you want to align to the most recent day.
In addition to this change, if rolling or expanding on the 29th, 30th or 31st in monthly increments, you will return to this day if it is present in the next month (or as close as possible). Previously if your date was decremented you would stay at that date:
Increments in previous versions:
31/01/25 → 28/02/25 → 28/03/25 → 28/04/25 → …
Increments in v0.16.3:
31/01/25 → 28/02/25 → 31/03/25 → 30/04/25 → …
Bug fixes
- Previously, the
timeline_startandtimeline_endfallbacks for not explicitly windowed graphs previously looked at the filtered earliest and latest time. This made rolling/expanding inconsistent between different layers. Now when you call rolling or expanding functions on individual layers they will have the same window alignment. - Computing the filtered time has improved performance.
- Significant stress testing added for the server discovered several deadlocks at high concurrency. We rebuilt the locking mechanism in the Graphql server to fix this.
- Fixed panics in case of simultaneous additions and reads (not all nodes were guaranteed to be initialised in iterators).
What's Changed
- temporal vs plain filtering by @jbaross-pometry in #2286
- bump rust version for release action by @ricopinazo in #2298
- add action for docker build cloud by @ricopinazo in #2309
- point to the correct docker path by @ricopinazo in #2310
- prevent graphql bench from complaning about addNodes by @ricopinazo in #2314
- add cache to docker build action by @ricopinazo in #2312
- fix action to build in docker build cloud by @ricopinazo in #2315
- optimise simple temporal intervals by @ljeub-pometry in #2320
- timeline start/end should use global earliest and latest time by @ljeub-pometry in #2319
- remove extra newline in macro docstrings by @jbaross-pometry in #2323
- Deadlock fixes and concurrency configuration from 0.16 by @miratepuffin in #2324
- not all nodes are guaranteed to be initialised in the iterators by @ljeub-pometry in #2325
- Separate thread pools for reading and writing in graphql by @ljeub-pometry in #2326
- Migrate polars-arrow to arrow-rs by @ljeub-pometry in #2316
- Rolling and expanding window alignment based on the user's time interval input by @arienandalibi in #2277
- Refactor test utils by @ljeub-pometry in #2329
- update pometry storage and fix the GID column issue by @fabianmurariu in #2332
- Add ui-tests submodule and newest UI by @louisch in #2305
- make all the main write locks loopy by @fabianmurariu in #2340
- Stress tests by @ricopinazo in #2317
- ingestion options by @jbaross-pometry in #2341
- Explicitly add filter to return types and misc filter stub fixes by @jbaross-pometry in #2330
- Release v0.16.3 by @github-actions[bot] in #2345
New Contributors
- @arienandalibi made their first contribution in #2277
Full Changelog: v0.16.2...v0.16.3