Skip to content

Commit 5342e16

Browse files
authored
Merge pull request #801 from FgForrest/master-hotfix
Hotfix patch
2 parents 9ae59ef + d90027e commit 5342e16

File tree

94 files changed

+1203
-434
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

94 files changed

+1203
-434
lines changed

.github/release-drafter.yml

+2-3
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ latest: 'true'
55
prerelease: true
66
prerelease-identifier: 'beta'
77
categories:
8-
- title: '⁉️ Breaking changes'
8+
- title: '⛓️‍💥 Breaking changes'
99
labels:
1010
- 'breaking change'
1111
- 'breaking'
@@ -28,9 +28,8 @@ autolabeler:
2828
- label: 'bug'
2929
title:
3030
- '/^fix(\(.*\))?:/'
31-
change-template: '- $TITLE @$AUTHOR (#$NUMBER)<br/>$BODY'
31+
change-template: '- **$TITLE** @$AUTHOR (#$NUMBER)<br/>$BODY'
3232
change-title-escapes: '\<*_&' # You can add # and @ to disable mentions, and add ` to disable code blocks.
33-
filter-by-commitish: true
3433

3534
template: |
3635
## What’s Changed

.github/workflows/ci-master.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ jobs:
103103
uses: release-drafter/release-drafter@b1476f6e6eb133afa41ed8589daba6dc69b4d3f5 # v6.1.0
104104
with:
105105
version: ${{ steps.release_version.outputs.version }}
106-
publish: true
106+
publish: false
107107
latest: ${{ github.ref_name == 'master' && 'true' || 'legacy' }}
108108

109109
- name: Upload dist.zip to release

.github/workflows/docker-canary.yml

+5-1
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,10 @@ jobs:
3636
# https://github.com/docker/setup-qemu-action
3737
uses: docker/setup-qemu-action@53851d14592bedcffcf25ea515637cff71ef929a # v3.3
3838

39+
- name: Configure QEMU
40+
# Configure QEMU for Docker Buildx, see https://github.com/docker/buildx/issues/1170#issuecomment-2424530330
41+
run: docker run --rm --privileged multiarch/qemu-user-static --reset -p yes -c yes
42+
3943
- name: Set up Docker Buildx
4044
uses: docker/setup-buildx-action@6524bf65af31da8d45b59e8c27de4bd072b392f5 # v3.8.0
4145
with:
@@ -61,4 +65,4 @@ jobs:
6165
tags: ${{ vars.CI_REGISTRY_USER }}/${{ env.RELEASE_IMAGE }}
6266
platforms: linux/amd64,linux/arm64/v8
6367
build-args: |
64-
EVITA_JAR_NAME=${{ env.EVITA_JAR_NAME }}
68+
EVITA_JAR_NAME=${{ env.EVITA_JAR_NAME }}

.github/workflows/docker-latest.yml

+4
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,10 @@ jobs:
4242
# https://github.com/docker/setup-qemu-action
4343
uses: docker/setup-qemu-action@53851d14592bedcffcf25ea515637cff71ef929a # v3.3
4444

45+
- name: Configure QEMU
46+
# Configure QEMU for Docker Buildx, see https://github.com/docker/buildx/issues/1170#issuecomment-2424530330
47+
run: docker run --rm --privileged multiarch/qemu-user-static --reset -p yes -c yes
48+
4549
- name: Set up Docker Buildx
4650
uses: docker/setup-buildx-action@6524bf65af31da8d45b59e8c27de4bd072b392f5 # v3.8.0
4751
with:

.github/workflows/release.yml

+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
# This job notifies internal Mattermost channel about the release
2+
3+
name: Notify Mattermost on Release
4+
5+
on:
6+
release:
7+
types: [published]
8+
9+
jobs:
10+
notify:
11+
# Ensure we only have read access to the repo
12+
permissions:
13+
contents: read
14+
runs-on: ubuntu-latest
15+
steps:
16+
- name: Send message to Mattermost
17+
uses: mattermost/action-mattermost-notify@b7d118e440bf2749cd18a4a8c88e7092e696257a # v2.0.0
18+
with:
19+
MATTERMOST_WEBHOOK_URL: ${{ secrets.MM_WEBHOOK_URL }}
20+
PAYLOAD: |-
21+
{
22+
"text": "## 🎉 evitaDB ${{ github.event.release.tag_name }} released!\n\n**Release Notes**:\\n${{ github.event.release.body }}",
23+
"color":"#31bf2c",
24+
"username": "${{ github.triggering_actor }}",
25+
"icon": "https://raw.githubusercontent.com/FgForrest/evitaDB/dev/documentation/assets/img/evita.png"
26+
}

README.md

+3-2
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,15 @@
66
examples and guides.</p>
77

88
<p align="center">
9-
<a href="https://github.com/FgForrest/evitaDB" title="Build"><img src="https://img.shields.io/github/v/release/FgForrest/evitadb?color=%23ff00a0&include_prereleases&label=version&sort=semver"/></a>
9+
<a href="https://github.com/FgForrest/evitaDB/releases" title="Build"><img src="https://img.shields.io/github/v/release/FgForrest/evitadb?color=%23ff00a0&include_prereleases&label=version&sort=semver"/></a>
1010
&nbsp;
1111
<a href="https://codecov.io/gh/FgForrest/evitaDB"><img src="https://codecov.io/gh/FgForrest/evitaDB/branch/dev/graph/badge.svg?token=9VDOBPOBFL"/></a>
1212
&nbsp;
1313
<a href="https://github.com/FgForrest/evitaDB" title="Platform"><img src="https://img.shields.io/badge/Built%20with-Java-red"/></a>
1414
&nbsp;
1515
<a href="https://discord.gg/VsNBWxgmSw" title="Discord"><img src="https://img.shields.io/discord/999338870996992223?color=5865f2"/></a>
1616
&nbsp;
17-
<a href="https://github.com/FgForrest/evitaDB" title="GitHub Workflow Status"><img src="https://img.shields.io/github/actions/workflow/status/FgForrest/evitaDB/ci-dev.yml"/></a>
17+
<a href="https://github.com/FgForrest/evitaDB/actions/workflows/ci-dev.yml" title="GitHub Workflow Status"><img src="https://img.shields.io/github/actions/workflow/status/FgForrest/evitaDB/ci-dev.yml"/></a>
1818
&nbsp;
1919
<a href="https://github.com/FgForrest/evitaDB/blob/master/LICENSE" title="License"><img src="https://img.shields.io/badge/license-BSL_1.1-blue.svg"/></a>
2020
</p>
@@ -211,6 +211,7 @@ In short, you need `~/.m2/toolchains.xml` in your home directory next to `~/.m2/
211211
- **evita_external_api_graphql**: implementation of GraphQL API
212212
- **evita_external_api_grpc**: implementation of gRPC API
213213
- **client**: Java driver for client/server usage scenario
214+
- **client_all_in_one**: Java driver for client/server usage scenario that includes repackaged all necessary dependencies so that it will not conflict with other dependencies in your project (unfortunately it's quite big due to gRPC and Armeria dependencies)
214215
- **server**: gRPC server
215216
- **shared**: shared classes between client & server (generated gRPC stubs)
216217
- **evita_external_api_rest**: implementation of REST API

documentation/blog/en/07-advanced-features-on-developers-portal.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ Each code block is then rendered as an individual tab within the `<CodeTabsBlock
5151
<dependency>
5252
<groupId>io.evitadb</groupId>
5353
<artifactId>evita_test_support</artifactId>
54-
<version>2024.10.0</version>
54+
<version>2025.1.0</version>
5555
<scope>test</scope>
5656
</dependency>
5757
```

documentation/blog/en/16-traffic-recording.draft documentation/blog/en/16-traffic-recording.md

+23-1
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,17 @@ author: 'Ing. Jan Novotný'
77
motive: assets/images/16-traffic-recording.png
88
proofreading: 'done'
99
---
10+
1011
In the latest version `2025.1` of evitaDB we have introduced a new feature called `Traffic Recording`. It's disabled by default, but you can easily enable it by setting `server.trafficRecording.enabled` to `true`. Even if you don't do this, you can always start it manually in the evitaLab console. This feature allows you to record all traffic that passes through the database - sessions, queries, mutations, entity fetches - everything.
1112

12-
The capture engine is designed to be as lightweight as possible, so you can run it in production without noticing any performance degradation. If the traffic is heavy, you can also configure the recording engine to sample the traffic, reducing the amount of data stored, but still enough to analyse traffic patterns. Traffic data is serialised in a limited buffer in memory, which is very fast, and then flushed asynchronously to the disk buffer file. If the flushing process can't keep up with the traffic, the recording engine will automatically discard any traffic that doesn't fit into the memory buffer. So the worst-case scenario is that you'll lose some data for analysis, but the database will still work fine and your customers won't notice a thing.
13+
The capture engine is designed to be as lightweight as possible, so that you can run the tool in the production. If the traffic is heavy, you can also configure the recording engine to sample the traffic, reducing the amount of data stored and limit the performance impact, but still enough to analyse traffic patterns. Traffic data is serialised in a limited buffer in memory, which is quite fast, and then flushed asynchronously to the disk buffer file. If the flushing process can't keep up with the traffic, the recording engine will automatically discard any traffic that doesn't fit into the memory buffer. So the worst-case scenario is that you'll lose some data for analysis, but the database will still work fine and your customers won't notice a thing.
14+
15+
<p>
16+
<video width="850" height="478" controls="controls">
17+
<source src="https://evitadb.io/download/blog-16-traffic-recording-1.mp4" type="video/mp4"/>
18+
Your browser does not support the video tag.
19+
</video>
20+
</p>
1321

1422
The disk buffer is designed to behave like a ring buffer and is allocated at the start of the database, so you can't run out of disk space. When the end of the buffer is reached, the recording engine starts to overwrite the oldest data from the beginning. You can start another asynchronous task that will capture all the data from the disk buffer file before it's overwritten into another compressed file for later analysis. This task can be set to stop automatically when it reaches a certain data size or after a certain period of time.
1523

@@ -23,6 +31,13 @@ With Traffic Recording, evitaDB can be set up to automatically capture all traff
2331

2432
Traffic Recorder captures queries in their original format (GraphQL, REST, gRPC) as well as in the internal evitaQL format. Often a single GraphQL query can represent several evitaQL queries that are combined into a single result and actually executed in parallel by the query engine. All these relationships are captured and visualised in the evitaLab interface. All input queries are available in the exact form in which they arrived in the database, so you can access variables, fragments, etc. as they were sent by the client.
2533

34+
<p>
35+
<video width="850" height="478" controls="controls">
36+
<source src="https://evitadb.io/download/blog-16-traffic-recording-2.mp4" type="video/mp4"/>
37+
Your browser does not support the video tag.
38+
</video>
39+
</p>
40+
2641
The traffic recorder also records all invalid requests, so you can see requests that couldn't be parsed or were rejected by the database for some reason. This can be very useful for debugging and improving the client application.
2742

2843
The filter allows you to filter queries by various criteria - for example, you can filter only queries that took more than a certain amount of time to execute, or only queries that fetched excessive amounts of data from disk. This can help you identify performance bottlenecks in your application early in the development process.
@@ -31,6 +46,13 @@ The filter allows you to filter queries by various criteria - for example, you c
3146

3247
Because you can capture a representative sample of traffic, you can use it to analyse the performance of your application. You can see which queries are the most frequent, which are the slowest, which are fetching the most data, etc. You can restore backups of your production data and replay the captured traffic on different machines to test different hardware configurations, or stress test the database by increasing the replay speed or multiplying it by parallelizing clients replaying the traffic.
3348

49+
<p>
50+
<video width="850" height="478" controls="controls">
51+
<source src="https://evitadb.io/download/blog-16-traffic-recording-3.mp4" type="video/mp4"/>
52+
Your browser does not support the video tag.
53+
</video>
54+
</p>
55+
3456
This is a very cost effective way of discovering the limits of your application in real-world scenarios on an accurate dataset and making correct assumptions about the performance of your application and the necessary hardware requirements. You can also use traffic recording to compare the performance of different versions of your application or database engine.
3557

3658
## Traffic replay and testing
Loading
Loading

documentation/user/en/get-started/example/server-startup.java

+24-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,26 @@
1+
/*
2+
*
3+
* _ _ ____ ____
4+
* _____ _(_) |_ __ _| _ \| __ )
5+
* / _ \ \ / / | __/ _` | | | | _ \
6+
* | __/\ V /| | || (_| | |_| | |_) |
7+
* \___| \_/ |_|\__\__,_|____/|____/
8+
*
9+
* Copyright (c) 2025
10+
*
11+
* Licensed under the Business Source License, Version 1.1 (the "License");
12+
* you may not use this file except in compliance with the License.
13+
* You may obtain a copy of the License at
14+
*
15+
* https://github.com/FgForrest/evitaDB/blob/master/LICENSE
16+
*
17+
* Unless required by applicable law or agreed to in writing, software
18+
* distributed under the License is distributed on an "AS IS" BASIS,
19+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
20+
* See the License for the specific language governing permissions and
21+
* limitations under the License.
22+
*/
23+
124
final Evita evita = new Evita(
225
EvitaConfiguration.builder()
326
.server(
@@ -9,7 +32,7 @@
932
.storage(
1033
// configure additional storage options, or let the defaults apply
1134
StorageOptions.builder()
12-
.storageDirectory(Path.of("/data"))
35+
.storageDirectory(Path.of("./data"))
1336
.build()
1437
)
1538
.cache(

documentation/user/en/get-started/query-our-dataset.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ Open your Java IDE and add the following dependency to your project:
136136
<dependency>
137137
<groupId>io.evitadb</groupId>
138138
<artifactId>evita_java_driver</artifactId>
139-
<version>2024.10.0</version>
139+
<version>2025.1.0</version>
140140
</dependency>
141141
```
142142
</CodeTabsBlock>

documentation/user/en/get-started/run-evitadb.md

+4-4
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ To integrate evitaDB into your project, use the following steps:
6363
<dependency>
6464
<groupId>io.evitadb</groupId>
6565
<artifactId>evita_db</artifactId>
66-
<version>2024.10.0</version>
66+
<version>2025.1.0</version>
6767
<type>pom</type>
6868
</dependency>
6969
```
@@ -108,7 +108,7 @@ exception when you enable the corresponding API in evitaDB's configuration.
108108
<dependency>
109109
<groupId>io.evitadb</groupId>
110110
<artifactId>evita_external_api_grpc</artifactId>
111-
<version>2024.10.0</version>
111+
<version>2025.1.0</version>
112112
<type>pom</type>
113113
</dependency>
114114
```
@@ -128,7 +128,7 @@ implementation 'io.evitadb:evita_external_api_grpc:2024.10.0'
128128
<dependency>
129129
<groupId>io.evitadb</groupId>
130130
<artifactId>evita_external_api_graphql</artifactId>
131-
<version>2024.10.0</version>
131+
<version>2025.1.0</version>
132132
<type>pom</type>
133133
</dependency>
134134
```
@@ -148,7 +148,7 @@ implementation 'io.evitadb:evita_external_api_graphql:2024.10.0'
148148
<dependency>
149149
<groupId>io.evitadb</groupId>
150150
<artifactId>evita_external_api_rest</artifactId>
151-
<version>2024.10.0</version>
151+
<version>2025.1.0</version>
152152
<type>pom</type>
153153
</dependency>
154154
```

documentation/user/en/menu.json

+13
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,19 @@
9494
"title": "Basics",
9595
"path": "/query/basics.md"
9696
},
97+
{
98+
"title": "Header",
99+
"children": [
100+
{
101+
"title": "Collection",
102+
"path": "/query/header/collection.md"
103+
},
104+
{
105+
"title": "Label",
106+
"path": "/query/header/label.md"
107+
}
108+
]
109+
},
97110
{
98111
"title": "Filtering",
99112
"children": [

documentation/user/en/operate/configure.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ transaction: # [see Transaction configurati
6666
flushFrequencyInMillis: 1s
6767

6868
cache: # [see Cache configuration](#cache-configuration)
69-
enabled: true
69+
enabled: false
7070
reflection: CACHE
7171
reevaluateEachSeconds: 60
7272
anteroomRecordCount: 100K
@@ -668,7 +668,7 @@ is resolved.
668668
<dl>
669669
<dt>enabled</dt>
670670
<dd>
671-
<p>**Default:** `true`</p>
671+
<p>**Default:** `false`</p>
672672
<p>This setting enables or disables the use of the cache entirely.</p>
673673
</dd>
674674
<dt>reflection</dt>

documentation/user/en/operate/observe.md

+30
Original file line numberDiff line numberDiff line change
@@ -528,6 +528,36 @@ in [Logback](https://logback.qos.ch/index.html) this can be done using `%X{trace
528528
</encoder>
529529
```
530530

531+
## Traffic recording
532+
533+
In addition to the observability tools mentioned above, evitaDB also offers the ability to record all incoming traffic
534+
to the server. This feature is useful for debugging and development purposes, as it allows you to play back the recorded
535+
traffic and analyse the behaviour of the server in detail. The traffic recording feature is disabled by default and must
536+
be enabled in the server [configuration](../operate/configure.md#traffic-recording-configuration).
537+
538+
These settings are recommended for local development:
539+
540+
```yaml
541+
trafficRecording:
542+
enabled: true
543+
sourceQueryTracking: true
544+
trafficFlushIntervalInMilliseconds: 0
545+
```
546+
547+
For test/staging environments, omit `trafficFlushIntervalInMilliseconds` and leave it at the default. If you enable
548+
traffic logging in production, disable `sourceQueryTracking` as you won't normally need to access the query source code
549+
in production. In production you'll probably want to set a sampling rate using `trafficSamplingPercentage`.
550+
551+
Besides having access to the `Active Traffic Recording` tab in evitaLab, where you can list through all sessions,
552+
queries, mutations and entity fetches, you can also issue a traffic reporting task that will save the traffic data in
553+
a ZIP file and make it available for download. This file can be used for further analysis or to replay the traffic on
554+
different evitaDB instances.
555+
556+
The recorded traffic can be browsed and filtered in evitaLab and any query can be easily executed in the corresponding
557+
query console on the current dataset. Records can also be filtered by custom [labels](../query/header/header.md#label),
558+
traceIds or protocol types. You can easily isolate sets of traffic records that relate to a single business case, such
559+
as a single page rendering or a single API call.
560+
531561
## Reference documentation
532562

533563
<MDInclude>[Java Flight Recorder events](/documentation/user/en/operate/reference/jfr-events.md)</MDInclude>

0 commit comments

Comments
 (0)