These commits are when the Protocol Buffers files have changed: (only the last 100 relevant commits are shown)
| Commit: | 41abada | |
|---|---|---|
| Author: | Jan Novotný | |
| Committer: | GitHub | |
Merge pull request #1192 from FgForrest/1161-histograms-add-range-source-attribute-support-and-multi-histogram-schema feat: range source-attribute support and multi-histogram schema for reference histograms
The documentation is generated from this commit.
| Commit: | 54f02b1 | |
|---|---|---|
| Author: | JNO | |
feat: range source attribute support and multi-histogram schema for reference histograms Allow reference histograms to bucket over NumberRange-typed source attributes, distributing each range across every bucket its endpoints overlap, and support multiple named histograms per reference/scope with per-histogram `assignedWhen` partition selectors. Covers the full stack: annotations, schema DTOs/builders, mutations, engine indexing and the range-aware bucket sweep, gRPC/GraphQL/REST surfaces, and Kryo/WAL serializers. Tests add an oracle-based per-bucket assertion for range histograms that independently re-derives expected occurrences from the seeded ranges, replacing the prior tautological `sum == overallCount` check. Ref: #1161
| Commit: | 7fc117a | |
|---|---|---|
| Author: | Jan Novotný | |
feat: add FETCHING_REFERENCE_BODIES query telemetry phase Introduces a single aggregate telemetry phase that wraps the orchestration of loading all referenced entities for a result page (per-reference predicate setup, referenced primary key collection, deduplication, recursive dispatch and the nested storage reads exposed as FETCHING_REFERENCES children), pushed inside ReferencedEntityFetcher around the prefetch call. Also fixes a telemetry nesting bug where the reference-index step was popped from the nested query context instead of the execution context, which flattened the FETCHING subtree and skewed per-step timings. Includes the gRPC enum value (proto + EvitaEnumConverter) and the regenerated gRPC stubs.
| Commit: | 85afc21 | |
|---|---|---|
| Author: | JNO | |
fix: backport CDC gRPC streaming fixes and heartbeat protocol from dev Brings release_2025-7's CDC subscriber stack in line with dev so K8s rolling deploys are safe in both directions (new-client/old-server and old-client/ new-server) and so long-lived streams survive Armeria timeout extension and catalog replacement without leaking or deadlocking. Wire-neutral hardening (no proto bump): - Switch all CDC/streaming response timeouts to TimeoutMode.SET_FROM_NOW so a silent stream unblocks within streamingTimeout of the last event instead of accumulating an unbounded EXTEND deadline. - Re-key EvitaClient.activePublishers via a sealed CapturePublisherKey (SystemCaptureKey / CatalogBoundCaptureKey) so two catalogs sharing the same filter criteria no longer collide. - Once-only stream finalization on the server side via AtomicBoolean + markStreamDead, with non-blocking cancel handlers (whenComplete instead of Future.get) and deferred subscription.cancel() via CompletableFuture.runAsync to avoid event-loop blocking and catalog-replacement deadlock. - Client-side serverSideClosed flag prevents re-cancelling a stream the server has already terminated; delegate.close() runs on subscription.executorService to break the catalog-replacement deadlock when close() fires on the gRPC event loop. Heartbeat protocol (proto-additive, backward compatible): - Add GrpcHeartBeat message, HEARTBEAT response-type enum value, and heartBeat field on both register-capture responses; new HeartBeat record and HeartBeatSensor interface for the client API. - Server-side AbstractChangeCaptureSubscriber drives a periodic heartbeat task and emits ack/heartbeat/change frames through emitOnNext with proper setOnCancelHandler / setOnCloseHandler wiring on the service-method thread. - Replace inline subscribers in EvitaService and EvitaSessionService with the new subscriber/* classes. Subscription-id and heartbeat extraction are deliberately split into two abstract methods (extractSubscriptionId / extractHeartBeat) instead of one combined method that synthesizes a sentinel HeartBeat for legacy servers. A synthesized heartbeat with lastObservedVersion=0 would clobber any persisted catalog-version checkpoint maintained by a HeartBeatSensor on first connect to a legacy server. The split lets the subscription id flow through while suppressing the spurious heartbeat dispatch. Catalog-side ChangeCatalogCaptureSubscriber omits the SemVer clientVersion parameter present on dev because release_2025-7's ChangeCaptureConverter does not have the SemVer-aware toGrpcChangeCatalogCapture overload; the single-arg variant is used instead. Out of scope (dev-only features intentionally not backported): HostSystemEvent capture criteria, BackupCatalogWithProgress streaming RPCs, GrpcCatalogVersionAtResponse reshape, SemVer-aware converter overload, application-level lastKnownVersion persistence.
| Commit: | 1f17886 | |
|---|---|---|
| Author: | Jan Novotný | |
feat: coalesce GraphQL/REST schema refresh on catalog schema changes Introduces a new `HostSystemEvent.CatalogSchemaUpdated` variant that is emitted exactly once per session close (WARMING_UP) or per transaction commit (ALIVE), regardless of how many `ModifyCatalogSchemaMutation`s were applied. GraphQL and REST refreshing observers no longer rebuild their schemas on every per-mutation engine event; instead they react to the coalesced host event, eliminating the historical refresh storm. Key changes: - New `HostSystemEvent.CatalogSchemaUpdated` host event with gRPC, GraphQL descriptor, and REST exposure. - `Evita#replaceCatalogReference` and `EvitaSession#executeTerminationSteps` emit the coalesced event; `ExpandedEngineState#replaceCatalogReference` returns a boolean indicating whether the schema actually advanced. - `SystemGraphQLRefreshingObserver` / `SystemRestRefreshingObserver` rebuild only on the host event, not on per-mutation captures. - WAL-replay no longer re-emits a schema-update event (the catalog is not yet in the live view, so live observers cannot have seen the pre-replay schema — preventing a double rebuild). - Tests trimmed to coalescing-specific contracts; full dispatch coverage is now owned by the GraphQL/REST functional subscription tests. Ref: #1153
| Commit: | 3d4639d | |
|---|---|---|
| Author: | Jan Novotný | |
feat: introduce HostSystemEvent on system CDC stream Adds HostSystemEvent — a host-local, advisory, non-replicable event class on the system CDC stream — and surfaces it through the existing ChangeSystemCaptureCriteria pattern. First variant CatalogInstalledIntoLiveView is emitted when a real Catalog replaces an UnusableCatalog placeholder in the live view, fixing the gap where auto-upgraded catalogs were internally usable but externally invisible (GraphQL/REST endpoints not registered, Lab UI stuck in BEING_ACTIVATED) until server restart. API model: - new SystemCaptureArea enum (ENGINE, INFRASTRUCTURE) - new ChangeSystemCaptureCriteria with builder - ChangeSystemCaptureRequest gains criteria[] and engineArea() / infrastructureArea() builder methods - new sealed HostSystemEvent + CatalogInstalledIntoLiveView record - SystemCaptureBody marker implemented by EngineMutation and HostSystemEvent; ChangeSystemCapture#body widened accordingly - default-criteria divergence vs catalog stream: system stream defaults to ENGINE only; INFRASTRUCTURE must be opted in Engine: - Evita#replaceCatalogReference emits CatalogInstalledIntoLiveView via SystemChangeObserver on first install (UnusableCatalog → real) - SystemChangeObserver gains processHostEvent path bypassing the recent-events cache (live-tail only) - ChangeSystemCaptureSharedPublisher honors criteria filter and enforces live-tail-only delivery for INFRASTRUCTURE - SystemAreaPredicate family added to MutationPredicateFactory External APIs: - SystemGraphQLRefreshingObserver / SystemRestRefreshingObserver opt into infrastructureArea() and react to CatalogInstalledIntoLiveView by registering the catalog endpoint without restart - gRPC: GrpcChangeSystemCapture grows HostSystemEvent oneof branch, GrpcSystemCaptureArea + GrpcChangeSystemCaptureCriteria carrier - REST/GraphQL descriptors and serializers updated end-to-end - Lab UI subscribers will opt in via the new criteria Tests cover boot-time auto-upgrade reproduction, ordering with the preceding UpgradeCatalogFormatMutation, default vs explicit criteria behavior, and live-tail-only semantics for late subscribers. Ref: #1151
| Commit: | e85ec35 | |
|---|---|---|
| Author: | Jan Novotný | |
feat: support fetching full price range for master product variants Introduce priceForSaleMin/priceForSaleMax fields on entity output that expose the lowest and highest sellable prices across a master product's variants. New PriceRangeForSale and PriceRangeForSaleWithAccompanyingPrices contracts are surfaced through the API, GraphQL, REST and gRPC layers, with matching documentation, examples and tests. Ref: #1086
| Commit: | 50c6c18 | |
|---|---|---|
| Author: | Jan Novotný | |
feat: enforce WAL-first discipline for engine state to prevent version drift Introduce explicit catalog lifecycle states (MISSING, OUT_OF_DATE, BEING_UPGRADED) and the engine mutations that drive transitions between them, so every change to engine state goes through the WAL before being applied. This eliminates VersionWAL drift between in-memory engine state and the persisted log, and surfaces previously silent inconsistencies as explicit, recoverable errors. Key changes: - Add MarkCatalogMissingMutation/UpgradeCatalogFormatMutation along with their operators, converters (gRPC, GraphQL, REST) and serializers. - Add CatalogMissingException, CatalogRequiresUpgradeException and CatalogBeingUpgradedException with mappings in JsonApiExceptionHandler. - Bump engine state to EngineStateSerializer_2026_1 with backward-compat dispatch via the existing _2025_6 serializer; persist CatalogInventoryDivergence and UnprocessedTransactionRecord in WAL. - Wire DefaultUpgradeExecutor / UpgradeExecutor SPI into EngineTransactionManager so format upgrades replay through the WAL. - Reorganize WAL exceptions under spi/store/engine/exception and remove the now-obsolete EngineMutationLogCorruptedException and the EngineTransactionMutationWithWalFileReference duplicate. - Add functional and unit tests covering boot-time WAL divergence, forward replay, mutation operators, converters, and exception handling. Ref: #1137
| Commit: | a31a485 | |
|---|---|---|
| Author: | Jan Novotný | |
Merge remote-tracking branch 'origin/dev' into 8-compute-dynamic-set-of-attribute-histogram-for-references # Conflicts: # evita_external_api/evita_external_api_grpc/shared/src/main/java/io/evitadb/externalApi/grpc/generated/GrpcEvitaSessionAPI.java # evita_external_api/evita_external_api_grpc/shared/src/main/java/io/evitadb/externalApi/grpc/generated/GrpcExtraResults.java # evita_external_api/evita_external_api_grpc/shared/src/main/java/io/evitadb/externalApi/grpc/generated/GrpcExtraResultsOrBuilder.java
| Commit: | a04eb41 | |
|---|---|---|
| Author: | JNO | |
| Committer: | Jan Novotný | |
fix: return real catalog and schema version for fresh read-only session EvitaClientSession#getCatalogVersion returned 0 on a brand-new EvitaClient that had only opened a read-only session, because the shared EvitaEntitySchemaCache had not yet been populated by any server round-trip. Zero is also a legitimate version for a warming-up catalog, so the numeric value alone cannot distinguish the two. The cache now tracks an explicit `initialized` flag that is flipped the first time a server response updates the catalog/schema versions. getCatalogVersion forces a fetchCatalogSchema round-trip when the cache is still uninitialized. GrpcCatalogSchemaResponse is extended with catalogVersion and catalogSchemaVersion so a single getCatalogSchema call populates both versions at once; the server-side EvitaSessionService fills them in. Also adds a regression test in EvitaClientReadOnlyTest that opens a fresh client and verifies the first getCatalogVersion call returns the actual server value rather than zero.
| Commit: | 2e209d1 | |
|---|---|---|
| Author: | JNO | |
fix: return real catalog and schema version for fresh read-only session EvitaClientSession#getCatalogVersion returned 0 on a brand-new EvitaClient that had only opened a read-only session, because the shared EvitaEntitySchemaCache had not yet been populated by any server round-trip. Zero is also a legitimate version for a warming-up catalog, so the numeric value alone cannot distinguish the two. The cache now tracks an explicit `initialized` flag that is flipped the first time a server response updates the catalog/schema versions. getCatalogVersion forces a fetchCatalogSchema round-trip when the cache is still uninitialized. GrpcCatalogSchemaResponse is extended with catalogVersion and catalogSchemaVersion so a single getCatalogSchema call populates both versions at once; the server-side EvitaSessionService fills them in. Also adds a regression test in EvitaClientReadOnlyTest that opens a fresh client and verifies the first getCatalogVersion call returns the actual server value rather than zero.
| Commit: | 72e47a5 | |
|---|---|---|
| Author: | Jan Novotný | |
feat: expose name variants on HistogramIndexDefinition Extract a NamedContract super-interface from NamedSchemaContract that carries only name / name-variant methods (no description), and have HistogramIndexDefinition implement it. Variants are always server-generated via NamingConvention.generate(name) — never accepted from client input — so the mutation wire format (ScopedHistogramIndexDefinition) stays unchanged. Add ReferenceSchemaContract.getHistogramIndexDefinitionByName(scope, name, convention) returning Optional<HistogramIndexDefinition>, backed by a per-scope variant index in ReferenceSchema analogous to the reference name index on EntitySchema. Propagate the new field through the outbound surfaces: gRPC proto GrpcScopedHistogramIndexDefinition gains an output-only nameVariants field, GraphQL ReferenceSchemasBucketedDataFetcher emits variants, REST SchemaJsonSerializer serializes them, and the Kryo EntitySchemaSerializer persists them. No backward-compat serializer — the histogram feature is within-release. Ref: #8
| Commit: | 1e72a27 | |
|---|---|---|
| Author: | Jan Novotný | |
refactor: unify facet and reference summary via adapter pattern Introduce FacetSummaryAdapter, ReferenceSummaryAdapter, and ReferenceSummaryResultAdapter to share the producer pipeline between facet and reference summaries. Adds a new GraphQL FacetSummaryDataFetcher and a Functions utility, plus a backward-compatibility test for the facet summary surface. Ref: #8
| Commit: | 0a71b7b | |
|---|---|---|
| Author: | Lukáš Hornych | |
feat: add support for dynamic reference histograms in extra results Refs: #8
| Commit: | b39101d | |
|---|---|---|
| Author: | Lukáš Hornych | |
Merge branch '8-compute-dynamic-set-of-attribute-histogram-for-references' into 8-compute-dynamic-set-of-attribute-histogram-for-references-extra-results # Conflicts: # evita_api/src/main/java/io/evitadb/api/requestResponse/schema/ReferenceSchemaContract.java # evita_api/src/main/java/io/evitadb/api/requestResponse/schema/ReferenceSchemaEditor.java # evita_external_api/evita_external_api_core/src/main/java/io/evitadb/externalApi/api/catalog/schemaApi/model/mutation/reference/CreateReferenceSchemaMutationDescriptor.java # evita_external_api/evita_external_api_core/src/main/java/io/evitadb/externalApi/api/catalog/schemaApi/model/mutation/reference/CreateReflectedReferenceSchemaMutationDescriptor.java # evita_query/src/main/java/io/evitadb/api/query/QueryConstraints.java
| Commit: | 474cfe6 | |
|---|---|---|
| Author: | Lukáš Hornych | |
feat: ReferenceSummary extra result implementation with backward-compatibility to FacetSummary in APIs Refs: #8
| Commit: | 6d6f67a | |
|---|---|---|
| Author: | JNO | |
Merge branch '8-compute-dynamic-set-of-attribute-histogram-for-references' into 109-distributed-database-support # Conflicts: # .gitignore # CLAUDE.md # evita_api/src/main/java/io/evitadb/api/requestResponse/schema/builder/ReferenceSchemaBuilder.java # evita_api/src/main/java/io/evitadb/api/requestResponse/schema/builder/ReflectedReferenceSchemaBuilder.java # evita_engine/src/main/java/io/evitadb/core/catalog/Catalog.java # evita_engine/src/main/java/io/evitadb/core/query/algebra/prefetch/PrefetchFormulaVisitor.java # evita_engine/src/main/java/io/evitadb/core/query/algebra/reference/ReferencedEntityIndexPrimaryKeyTranslatingFormula.java # evita_external_api/evita_external_api_grpc/shared/src/main/java/io/evitadb/externalApi/grpc/generated/GrpcEvitaDataTypes.java # evita_test/evita_functional_tests/src/test/java/io/evitadb/api/file/FileForFetchTest.java # evita_test/evita_functional_tests/src/test/java/io/evitadb/core/catalog/CatalogTest.java
| Commit: | 016d932 | |
|---|---|---|
| Author: | Jan Novotný | |
feat: implement conditional bucket indexing with histogram index infrastructure Introduce HistogramIndex and supporting types (SimpleHistogramIndex, LocalizedHistogramIndex, HistogramCapableEntityIndex) for dynamic attribute histogram computation on references. Refactor expression trigger system to support both facet and histogram triggers through shared AbstractExpressionIndexTrigger base. Reorganize index mutation packages (index/mutation/index → index/mutation/local) and expression trigger packages for cleaner separation of concerns. Add cross-entity trigger support via CrossEntityTriggerIndex and LocalTriggerIndex. Generalize ReevaluateExpressionMutation to handle both facet and histogram expression re-evaluation. Extract common expression operator logic into AbstractBinaryOperator and AbstractUnaryOperator base classes. Ref: #8
| Commit: | a66d28a | |
|---|---|---|
| Author: | Jan Novotný | |
feat: add bucketed histogram schema support for reference attributes Implement full-stack schema support for bucketed histogram indexing on reference attributes. This includes new HistogramIndexDefinition DTO, SetReferenceSchemaBucketedMutation, and updates across all 8 layers: contracts, DTOs, builders, mutations, external APIs (gRPC/GraphQL/REST), Kryo serializers, and WAL serializers. Ref: #8
| Commit: | 6aa9038 | |
|---|---|---|
| Author: | Jan Novotný | |
feat: add per-scope faceted partially configuration with expression support for references Introduce ScopedFacetedPartially record to allow configuring faceted behavior per scope with optional Expression filters. This enables dynamic attribute histogram computation for references by specifying which facet values participate in histogram aggregation. Key changes: - Add ScopedFacetedPartially to ReferenceSchemaContract and DTOs - Extract AbstractReferenceSchemaBuilder for shared builder logic - Update SetReferenceSchemaFacetedMutation to support expressions - Add support across all external APIs (gRPC, GraphQL, REST) - Add Kryo/WAL serializers with backward compatibility (2026_1) - Update skill documentation with converter serialization patterns - Restore backward compatibility for @Reference annotation Ref: #8
| Commit: | 551be01 | |
|---|---|---|
| Author: | Jan Novotný | |
| Committer: | Jan Novotný | |
feat: add per-scope reference indexed components configuration Introduces ScopedReferenceIndexedComponents to allow independent configuration of which reference components (entity, group, or both) are indexed in each scope. Updates reference schema contracts, builders, mutations, and all external API layers (gRPC, GraphQL, REST). Adds backward-compatible serializers for storage and WAL. Ref: #1088
| Commit: | fbccdd9 | |
|---|---|---|
| Author: | Jan Novotný | |
Merge remote-tracking branch 'refs/remotes/origin/1062-add-aggregated-crc32-checksum-to-wal-log' into 109-distributed-database-support
| Commit: | 3a4f525 | |
|---|---|---|
| Author: | Jan Novotný | |
Merge branch 'dev' into 1062-add-aggregated-crc32-checksum-to-wal-log # Conflicts: # evita_store/evita_store_server/src/main/java/io/evitadb/store/wal/supplier/TransactionMutationWithLocation.java # evita_test/evita_functional_tests/src/test/java/io/evitadb/core/session/task/SessionKillerTest.java # evita_test/evita_functional_tests/src/test/java/io/evitadb/store/wal/CatalogWriteAheadLogIntegrationTest.java # evita_test/evita_functional_tests/src/test/java/io/evitadb/store/wal/EngineWriteAheadLogTest.java # evita_test/evita_functional_tests/src/test/java/io/evitadb/utils/StringUtilsTest.java
| Commit: | c7adb9d | |
|---|---|---|
| Author: | Jan Novotný | |
refactor: relocate `TransactionMutation` to `mutation.infrastructure` and enhance traffic recording metadata Moved `TransactionMutation` to a new `mutation.infrastructure` package to align with package structure conventions. Added new metadata fields to traffic recording containers, such as `sessionRecordsCount`, `finishedWithError`, and `queryDescription`, and updated JavaDocs for accuracy. Fixed typos and enhanced `equals()` methods in relevant classes.
| Commit: | ba3ce2d | |
|---|---|---|
| Author: | Jan Novotný | |
refactor: Introduce streaming support for catalog backup methods - Added `backupCatalogWithProgress` and `fullBackupCatalogWithProgress` methods for streaming backup progress updates. - Implemented `BackupProgressObserver` for real-time progress handling. - Updated gRPC descriptors and service implementations to support streaming. - Modified synchronous backup methods to utilize the newly implemented streaming capabilities. - Adjusted error handling for better resilience against interruptions and server-side errors.
| Commit: | 249ed2c | |
|---|---|---|
| Author: | Jan Novotný | |
refactor: replace EvitaInternalError with specific exceptions and enhance histogram logic Replaced `EvitaInternalError` with more specific exception types (`EvitaInvalidUsageException`, `GenericEvitaInternalError`, etc.) for better error handling and clarity. Improved `relativeFrequency` normalization logic for equalized histograms and updated associated Javadoc, tests, and documentation. Refs: #762 Signed-off-by: Jan Novotný <novotnaci@gmail.com>
| Commit: | 495ac5a | |
|---|---|---|
| Author: | Jan Novotný | |
| Committer: | Jan Novotný | |
feat: add relative frequency calculations for histogram buckets Introduced `relativeFrequency` field for histogram buckets to enhance UI visualization. Implemented calculation support for both standard and equalized histograms in data crunchers, API descriptors, and serialization layers. Refs: #762 Signed-off-by: Jan Novotný <novotnaci@gmail.com>
| Commit: | ab5b546 | |
|---|---|---|
| Author: | Jan Novotný | |
| Committer: | Jan Novotný | |
feat: Introduce alternative calculation for histograms There is a more UX-friendly version of histogram calculations documented here: https://www.howdoi.me/blog/slider-scale.html, which is also discussed in more detail in the article https://baymard.com/blog/slider-interfaces ... we are discussing its support in the team. Refs: #762 Signed-off-by: Jan Novotný <novotnaci@gmail.com>
| Commit: | 0298bec | |
|---|---|---|
| Author: | Jan Novotný | |
Merge branch 'refs/heads/dev' into 109-distributed-database-support
| Commit: | 00fd80a | |
|---|---|---|
| Author: | Jan Novotný | |
| Committer: | Jan Novotný | |
fix: Subscription should be kept alive The subscriptions gets closed after certain time of inactivity (can be configured), but it would be much better if the server regurarly sent heartbeet messages in regular intervals over the connection so that it never time out. Also we found out that when subscription is recreated from close method of the previous subscriber it doesn't work probably due to the fact that it's handled in a shared thread which received signal of subscription drop. We should invoke delegate subscribe methods asynchronously in separate executor to avoid this problem. Refs: #1057 Signed-off-by: Jan Novotný <novotnaci@gmail.com>
| Commit: | d8809e6 | |
|---|---|---|
| Author: | Jan Novotný | |
feat: automatic backup to S3 Distinguishing files that will be managed by outside logic (backup retention) rather than internal export service retention logic. Refs: #1000
| Commit: | 4ae63a5 | |
|---|---|---|
| Author: | Jan Novotný | |
feat: automatic backup to S3 Added checksum calculation. Refs: #1000
| Commit: | 3f44dc0 | |
|---|---|---|
| Author: | Jan Novotný | |
| Committer: | Jan Novotný | |
feat: added timestamp field to all change capture events Timestamp comes handy when only local mutation is result of the predicate filter.
| Commit: | 3914849 | |
|---|---|---|
| Author: | Jan Novotný | |
| Committer: | Jan Novotný | |
fix: fixed date range CDC localization
| Commit: | 7b98687 | |
|---|---|---|
| Author: | Jan Novotný | |
Merge branch 'dev' into 977-support-filtering-schema-captures-by-containername # Conflicts: # evita_engine/src/main/java/io/evitadb/core/Catalog.java # evita_external_api/evita_external_api_core/src/main/java/io/evitadb/externalApi/api/catalog/schemaApi/model/mutation/catalog/CreateEntitySchemaMutationDescriptor.java # evita_external_api/evita_external_api_core/src/main/java/io/evitadb/externalApi/api/catalog/schemaApi/model/mutation/catalog/ModifyEntitySchemaMutationDescriptor.java # evita_external_api/evita_external_api_graphql/src/main/java/io/evitadb/externalApi/graphql/api/catalog/schemaApi/builder/EntitySchemaSchemaBuilder.java # evita_external_api/evita_external_api_grpc/shared/src/main/java/io/evitadb/externalApi/grpc/generated/EvitaSessionServiceGrpc.java # evita_external_api/evita_external_api_grpc/shared/src/main/java/io/evitadb/externalApi/grpc/generated/GrpcEvitaSessionAPI.java # evita_functional_tests/src/test/java/io/evitadb/api/EvitaTransactionalFunctionalTest.java # evita_functional_tests/src/test/java/io/evitadb/externalApi/api/catalog/schemaApi/resolver/mutation/DelegatingLocalCatalogSchemaMutationConverterTest.java # evita_functional_tests/src/test/java/io/evitadb/externalApi/api/catalog/schemaApi/resolver/mutation/LocalCatalogSchemaMutationInputAggregateConverterTest.java # evita_functional_tests/src/test/java/io/evitadb/externalApi/api/catalog/schemaApi/resolver/mutation/engine/ModifyCatalogSchemaMutationConverterTest.java # evita_functional_tests/src/test/java/io/evitadb/externalApi/graphql/api/catalog/schemaApi/CatalogGraphQLUpdateCatalogSchemaQueryFunctionalTest.java # evita_store/evita_store_server/src/main/java/io/evitadb/store/catalog/DefaultCatalogPersistenceService.java
| Commit: | 3a618b5 | |
|---|---|---|
| Author: | Jan Novotný | |
doc: documented entity mutations Signed-off-by: Jan Novotný <novotnaci@gmail.com>
| Commit: | 595c01e | |
|---|---|---|
| Author: | Jan Novotný | |
fix: It's not possible to store detached builder instances on client side Issue is documented and reproducible by tests: - io.evitadb.api.proxy.EntityEditorProxyingFunctionalTest#shouldSetReferenceGroupAsNewlyCreatedEntity - io.evitadb.api.proxy.EntityEditorProxyingFunctionalTest#shouldSetReferenceGroupByIdAndUpdateIt The root cause is that the client works with locally assigned primary keys for reference keys, which are rewritten by primary keys assigned on the server side (final primary keys). This information is not propagated to the client though (there is no way actually). We need to be able to propagate this information via. gRPC API to the client so that it could replace its former internal PKs with real PKs from the server side and continue working (and sending updates back to the server) with the correct primary keys. In order to do that we need to apply backward incompatible change on `EvitaSessionContract` level - instead of using `EntityReference` records in the methods, we need to stick to common interface `EntityReferenceContract`. This may break some clients though. Refs: #979 Signed-off-by: Jan Novotný <novotnaci@gmail.com>
| Commit: | d7cb601 | |
|---|---|---|
| Author: | Jan Novotný | |
feat: Support filtering schema captures by containerName Team has agreed that it makes sense to filter schema mutations by containerName in the similar fashion as data captures. Because of evitaLab view we also need to create new method for acquiring transactional mutations by the set of catalogVersions. Refs: #977 Signed-off-by: Jan Novotný <novotnaci@gmail.com>
| Commit: | 23be7b8 | |
|---|---|---|
| Author: | Jan Novotný | |
feat: Support filtering schema captures by containerName Team has agreed that it makes sense to filter schema mutations by containerName in the similar fashion as data captures. Refs: #977 Signed-off-by: Jan Novotný <novotnaci@gmail.com>
| Commit: | 0a05c9c | |
|---|---|---|
| Author: | Jan Novotný | |
feat: Support for multiple references to the same entity with different attribute sets Added missing internal PK in gRPC communication. Refs: #906 Signed-off-by: Jan Novotný <novotnaci@gmail.com>
| Commit: | 022b5c4 | |
|---|---|---|
| Author: | Jan Novotný | |
Merge branch 'dev' into 906-support-for-multiple-references-to-the-same-entity-with-different-attribute-sets
| Commit: | f266ffa | |
|---|---|---|
| Author: | Jan Novotný | |
feat: support for filtering stream by date and time range
| Commit: | d5d5b65 | |
|---|---|---|
| Author: | Jan Novotný | |
Merge branch 'dev' into 906-support-for-multiple-references-to-the-same-entity-with-different-attribute-sets # Conflicts: # evita_functional_tests/src/test/java/io/evitadb/core/cdc/CatalogChangeObserverTest.java
| Commit: | b09a890 | |
|---|---|---|
| Author: | Jan Novotný | |
fix: added missing transaction mutation body
| Commit: | ba8e014 | |
|---|---|---|
| Author: | Jan Novotný | |
Merge branch 'dev' into 906-support-for-multiple-references-to-the-same-entity-with-different-attribute-sets # Conflicts: # evita_external_api/evita_external_api_grpc/shared/src/main/java/io/evitadb/externalApi/grpc/generated/GrpcEntityReference.java # evita_external_api/evita_external_api_grpc/shared/src/main/java/io/evitadb/externalApi/grpc/generated/GrpcReference.java # evita_external_api/evita_external_api_grpc/shared/src/main/java/io/evitadb/externalApi/grpc/generated/GrpcReferenceAttributeMutation.java # evita_external_api/evita_external_api_grpc/shared/src/main/java/io/evitadb/externalApi/grpc/generated/GrpcReferenceOrBuilder.java # evita_external_api/evita_external_api_grpc/shared/src/main/java/io/evitadb/externalApi/grpc/generated/GrpcRemoveReferenceGroupMutation.java # evita_external_api/evita_external_api_grpc/shared/src/main/java/io/evitadb/externalApi/grpc/generated/GrpcRemoveReferenceMutation.java # evita_external_api/evita_external_api_grpc/shared/src/main/java/io/evitadb/externalApi/grpc/generated/GrpcSetReferenceGroupMutation.java
| Commit: | f02b406 | |
|---|---|---|
| Author: | Jan Novotný | |
fix: fixed mutation listing Corrected CDC index calculation and handling in gRPC. Disabling session kills in `run-server.sh` so that we can test gRPC API more easily.
| Commit: | 2a7d79d | |
|---|---|---|
| Author: | Jan Novotný | |
fix: fixed mutation listing Upgraded gRPC version to valid one. Corrected ModifyEntitySchema conversion. Fixed problem on client side that attempted to remove non-existing catalog.
| Commit: | ee0def7 | |
|---|---|---|
| Author: | Jan Novotný | |
| Committer: | Jan Novotný | |
feat: Support for multiple references to the same entity with different attribute sets Indexing index primary keys instead of referenced entity keys to ReferencedTypeEntityIndex done with all tests passing except known issues that will be handled later. Refs: #906 Signed-off-by: Jan Novotný <novotnaci@gmail.com>
| Commit: | 33cee31 | |
|---|---|---|
| Author: | Jan Novotný | |
feat: Support for multiple references to the same entity with different attribute sets Clients encountered situations in which they needed to declare multiple items to the same entity within a single reference. For example, there is a reference to "media" with two references to media ID = 5. The reason is that the references are further distinguished by related attributes, for example: a reference to ID = 5, attribute "category" = "motive," attribute "order" = 1 a reference to ID 5 with the category attribute set to "motive" and the order attribute set to 1 a reference to ID 6 with the category attribute set to "gallery" and the order attribute set to 2 In these cases, the user wants to filter by the category attribute and sort by the order attribute. This case is currently not supported by evitaDB. Refs: #906 Signed-off-by: Jan Novotný <novotnaci@gmail.com>
| Commit: | 03f0110 | |
|---|---|---|
| Author: | Jan Novotný | |
Merge branch 'dev' into 187-different-api-proposal # Conflicts: # evita_api/src/main/java/io/evitadb/api/requestResponse/schema/builder/AbstractAttributeSchemaBuilder.java # evita_api/src/main/java/io/evitadb/api/requestResponse/schema/builder/ReferenceSchemaBuilder.java # evita_api/src/main/java/io/evitadb/api/requestResponse/schema/builder/ReflectedReferenceSchemaBuilder.java # evita_api/src/main/java/io/evitadb/api/requestResponse/schema/mutation/reference/CreateReferenceSchemaMutation.java # evita_api/src/main/java/io/evitadb/api/requestResponse/schema/mutation/reference/SetReferenceSchemaIndexedMutation.java # evita_engine/src/main/java/io/evitadb/core/query/indexSelection/TargetIndexes.java # evita_engine/src/main/java/io/evitadb/index/EntityIndex.java # evita_engine/src/main/java/io/evitadb/index/ReferencedTypeEntityIndex.java # evita_engine/src/main/java/io/evitadb/index/mutation/index/EntityIndexLocalMutationExecutor.java # evita_external_api/evita_external_api_core/src/main/java/io/evitadb/externalApi/api/catalog/schemaApi/resolver/mutation/reference/CreateReferenceSchemaMutationConverter.java # evita_external_api/evita_external_api_core/src/main/java/io/evitadb/externalApi/api/catalog/schemaApi/resolver/mutation/reference/CreateReflectedReferenceSchemaMutationConverter.java # evita_external_api/evita_external_api_core/src/main/java/io/evitadb/externalApi/api/catalog/schemaApi/resolver/mutation/reference/SetReferenceSchemaIndexedMutationConverter.java # evita_external_api/evita_external_api_graphql/src/main/java/io/evitadb/externalApi/graphql/api/catalog/schemaApi/builder/EntitySchemaSchemaBuilder.java # evita_external_api/evita_external_api_grpc/shared/src/main/java/io/evitadb/externalApi/grpc/generated/GrpcEnums.java # evita_external_api/evita_external_api_grpc/shared/src/main/java/io/evitadb/externalApi/grpc/generated/GrpcEvitaManagementAPI.java # evita_external_api/evita_external_api_grpc/shared/src/main/java/io/evitadb/externalApi/grpc/requestResponse/schema/EntitySchemaConverter.java # evita_external_api/evita_external_api_rest/src/main/java/io/evitadb/externalApi/rest/api/catalog/schemaApi/builder/EntitySchemaObjectBuilder.java # evita_functional_tests/src/test/java/io/evitadb/api/EvitaSchemaCallbackTest.java # evita_functional_tests/src/test/java/io/evitadb/api/EvitaTest.java # evita_functional_tests/src/test/java/io/evitadb/api/functional/hierarchy/AbstractHierarchyTest.java # evita_functional_tests/src/test/java/io/evitadb/api/proxy/mock/AbstractCategoryPojo.java # evita_functional_tests/src/test/java/io/evitadb/api/proxy/mock/AbstractProductCategoryPojo.java # evita_functional_tests/src/test/java/io/evitadb/api/proxy/mock/BrandInterface.java # evita_functional_tests/src/test/java/io/evitadb/api/proxy/mock/BrandInterfaceEditor.java # evita_functional_tests/src/test/java/io/evitadb/api/proxy/mock/CategoryInterface.java # evita_functional_tests/src/test/java/io/evitadb/api/proxy/mock/CategoryInterfaceEditor.java # evita_functional_tests/src/test/java/io/evitadb/api/proxy/mock/CategoryInterfaceSealed.java # evita_functional_tests/src/test/java/io/evitadb/api/proxy/mock/CategoryPojo.java # evita_functional_tests/src/test/java/io/evitadb/api/proxy/mock/CategoryRecord.java # evita_functional_tests/src/test/java/io/evitadb/api/proxy/mock/EmptyEntitySchemaAccessor.java # evita_functional_tests/src/test/java/io/evitadb/api/proxy/mock/FinalProductPojo.java # evita_functional_tests/src/test/java/io/evitadb/api/proxy/mock/MockCatalogChangeCaptureSubscriber.java # evita_functional_tests/src/test/java/io/evitadb/api/proxy/mock/MockCatalogStructuralChangeObserver.java # evita_functional_tests/src/test/java/io/evitadb/api/proxy/mock/MockEngineChangeCaptureSubscriber.java # evita_functional_tests/src/test/java/io/evitadb/api/proxy/mock/ParameterGroupInterfaceEditor.java # evita_functional_tests/src/test/java/io/evitadb/api/proxy/mock/ParameterInterface.java # evita_functional_tests/src/test/java/io/evitadb/api/proxy/mock/ParameterInterfaceEditor.java # evita_functional_tests/src/test/java/io/evitadb/api/proxy/mock/ProductCategoryInterface.java # evita_functional_tests/src/test/java/io/evitadb/api/proxy/mock/ProductCategoryInterfaceEditor.java # evita_functional_tests/src/test/java/io/evitadb/api/proxy/mock/ProductCategoryPojo.java # evita_functional_tests/src/test/java/io/evitadb/api/proxy/mock/ProductCategoryRecord.java # evita_functional_tests/src/test/java/io/evitadb/api/proxy/mock/ProductInterfaceSealed.java # evita_functional_tests/src/test/java/io/evitadb/api/proxy/mock/ProductParameterInterface.java # evita_functional_tests/src/test/java/io/evitadb/api/proxy/mock/ProductParameterInterfaceEditor.java # evita_functional_tests/src/test/java/io/evitadb/api/proxy/mock/ProductPojo.java # evita_functional_tests/src/test/java/io/evitadb/api/proxy/mock/ProductRecord.java # evita_functional_tests/src/test/java/io/evitadb/api/proxy/mock/SealedProductInterface.java # evita_functional_tests/src/test/java/io/evitadb/api/proxy/mock/SealedProductPojo.java # evita_functional_tests/src/test/java/io/evitadb/api/proxy/mock/StoreInterface.java # evita_functional_tests/src/test/java/io/evitadb/api/proxy/mock/StoreInterfaceEditor.java # evita_functional_tests/src/test/java/io/evitadb/api/proxy/mock/TestEntity.java # evita_functional_tests/src/test/java/io/evitadb/api/proxy/mock/UnknownEntityEditorInterface.java # evita_functional_tests/src/test/java/io/evitadb/api/proxy/mock/UnknownEntityInterface.java # evita_functional_tests/src/test/java/io/evitadb/api/requestResponse/data/structure/AbstractBuilderTest.java # evita_functional_tests/src/test/java/io/evitadb/api/requestResponse/schema/CatalogSchemaBuilderTest.java # evita_functional_tests/src/test/java/io/evitadb/api/requestResponse/schema/ClassSchemaAnalyzerTest.java # evita_functional_tests/src/test/java/io/evitadb/api/requestResponse/schema/EntitySchemaBuilderTest.java # evita_functional_tests/src/test/java/io/evitadb/api/requestResponse/schema/model/FieldBasedEntityWithNonDefaults.java # evita_functional_tests/src/test/java/io/evitadb/api/requestResponse/schema/model/GetterBasedEntityWithNonDefaults.java # evita_functional_tests/src/test/java/io/evitadb/api/requestResponse/schema/model/RecordBasedEntityWithNonDefaults.java # evita_functional_tests/src/test/java/io/evitadb/core/file/ExportFileServiceTest.java # evita_functional_tests/src/test/java/io/evitadb/documentation/mock/Product.java # evita_functional_tests/src/test/java/io/evitadb/driver/EvitaClientReadWriteTest.java # evita_functional_tests/src/test/java/io/evitadb/externalApi/grpc/builders/query/extraResults/GrpcHierarchyBuilderTest.java # evita_functional_tests/src/test/java/io/evitadb/index/mutation/AttributeIndexMutatorTest.java # evita_functional_tests/src/test/java/io/evitadb/index/mutation/ReferenceIndexMutatorTest.java # evita_functional_tests/src/test/java/io/evitadb/index/price/PriceSuperIndexTest.java # evita_functional_tests/src/test/java/io/evitadb/store/offsetIndex/OffsetIndexTest.java # evita_store/evita_store_key_value/src/main/java/io/evitadb/store/offsetIndex/model/StorageRecord.java # evita_store/evita_store_server/src/main/resources/META-INF/services/io.evitadb.store.spi.EnginePersistenceServiceFactory # evita_test_support/src/main/java/io/evitadb/test/client/query/rest/RestQueryConverter.java # evita_test_support/src/main/java/io/evitadb/test/extension/EvitaParameterResolver.java
| Commit: | 0c4f412 | |
|---|---|---|
| Author: | Jan Novotný | |
feat: Change Data Capture support Corrected documentation. Refs: #187
| Commit: | bc3a138 | |
|---|---|---|
| Author: | Jan Novotný | |
| Committer: | Jan Novotný | |
Merge branch 'dev' into 920-introduce-more-granular-control-over-reduced-indexes-in-reference-schema
| Commit: | 54d085d | |
|---|---|---|
| Author: | Jan Novotný | |
feat: Change Data Capture support Made optional fields really optional. Propagation of read-only flag to catalog. Refs: #187
| Commit: | 6647fca | |
|---|---|---|
| Author: | Jan Novotný | |
feat: support for multiple origins in file listing Minor enhancement to gRPC API for fetching files. Now listing may return files from multiple origins at once.
| Commit: | e692a13 | |
|---|---|---|
| Author: | Jan Novotný | |
feat: Introduce more granular control over reduced indexes in reference schema We realized that many secondary - ReducedEntityIndexes may not be necessary and propose to add better granularity to reference schema `indexed` property. Currently it could be only true / false and tied to particular scope. This setting then leads to creating ReducedEntityIndex for each of the reference. This might lead to explosion of indexed (in combination with reflected schemas). In fact we need to distinguish two situations: 1. we need the indexed=true for ability to issue filters like `referenceHaving` 2. we need the indexed=true to shard the data of the original entity and gain a considerable performance benefit when applying filters/sort over the main entity In many cases we just need the scenario 1. and this cannot be stated in the schema currently. So the proposal is tu change indexed to enum of two possible values (similar to enums in unique property): - FOR_FILTERING - FOR_FILTERING_AND_PARTITIONING The second will maintain the current behavior. The first will just maintain ReducedTypeIndex, but no ReducedIndexes for all possible references. This may bring considerable memory savings and speeding up indexing process. Refs: #920
| Commit: | 9b011cc | |
|---|---|---|
| Author: | Jan Novotný | |
| Committer: | Jan Novotný | |
feat: Top level (engine) WAL Duplicating logic done on the client side and tested. Refs: #502
| Commit: | 362cd20 | |
|---|---|---|
| Author: | Jan Novotný | |
feat: Top level (engine) WAL Restore now creates only inactive catalog. Added partial catalog duplication logic. Refs: #502
| Commit: | a5da094 | |
|---|---|---|
| Author: | Jan Novotný | |
feat: Top level (engine) WAL Added progress method variants for rename and replace catalog. Refs: #502
| Commit: | 67f8dc6 | |
|---|---|---|
| Author: | Jan Novotný | |
feat: Top level (engine) WAL Accessing progress of engine mutations in flight via gRPC protocol Refs: #502
| Commit: | 7c8d3b1 | |
|---|---|---|
| Author: | Jan Novotný | |
feat: Top level (engine) WAL Added mutability per catalog support on client side with tests. Refs: #502
| Commit: | 39749df | |
|---|---|---|
| Author: | Jan Novotný | |
feat: Top level (engine) WAL Catalog loading is now fully asynchronous and parallel - this speeds up start process on machines with multiple CPUs. Refs: #502
| Commit: | f0d1ca2 | |
|---|---|---|
| Author: | Jan Novotný | |
fix: attempt to correct timeouts in goLive method
| Commit: | ce050fe | |
|---|---|---|
| Author: | Jan Novotný | |
feat: GoLive needs to be changed to asynchronous operations Unified all engine mutations to be asynchronous and progressive. Corrected tests. Refs: #910
| Commit: | 3d0a670 | |
|---|---|---|
| Author: | Jan Novotný | |
Merge branch 'refs/heads/dev' into 187-different-api-proposal # Conflicts: # evita_engine/src/main/java/io/evitadb/core/Evita.java # evita_engine/src/main/java/io/evitadb/core/EvitaSession.java # evita_external_api/evita_external_api_grpc/shared/src/main/java/io/evitadb/externalApi/grpc/generated/GrpcEvitaSessionAPI.java # evita_functional_tests/src/test/java/io/evitadb/driver/EvitaClientReadWriteTest.java # evita_query/src/main/java/io/evitadb/api/query/expression/parser/grammar/ExpressionLexer.java # evita_query/src/main/java/io/evitadb/api/query/expression/parser/grammar/ExpressionParser.java # pom.xml
| Commit: | 1206519 | |
|---|---|---|
| Author: | Jan Novotný | |
fix: error during closing session after goLive operation via gRPC
| Commit: | e5b17a9 | |
|---|---|---|
| Author: | Jan Novotný | |
fix: error during closing session after goLive operation via gRPC
| Commit: | aaa28b9 | |
|---|---|---|
| Author: | Jan Novotný | |
fix: error during closing session after goLive operation via gRPC
| Commit: | 31994aa | |
|---|---|---|
| Author: | Jan Novotný | |
Merge branch 'dev' into 187-different-api-proposal # Conflicts: # evita_api/src/main/java/io/evitadb/api/CatalogContract.java # evita_engine/src/main/java/io/evitadb/core/Catalog.java # evita_engine/src/main/java/io/evitadb/core/CorruptedCatalog.java # evita_engine/src/main/java/io/evitadb/core/Evita.java # evita_engine/src/main/java/io/evitadb/core/EvitaSession.java # evita_engine/src/main/java/io/evitadb/core/buffer/DataStoreChanges.java # evita_engine/src/main/java/io/evitadb/core/executor/ProgressingFuture.java # evita_engine/src/main/java/io/evitadb/index/CatalogIndex.java # evita_engine/src/main/java/io/evitadb/index/EntityIndex.java # evita_engine/src/main/java/io/evitadb/index/Index.java # evita_engine/src/main/java/io/evitadb/store/spi/PersistenceService.java # evita_external_api/evita_external_api_graphql/src/main/java/io/evitadb/externalApi/graphql/api/system/resolver/mutatingDataFetcher/SwitchCatalogToAliveStateMutatingDataFetcher.java # evita_external_api/evita_external_api_grpc/server/src/main/java/io/evitadb/externalApi/grpc/services/EvitaSessionService.java # evita_external_api/evita_external_api_grpc/shared/src/main/java/io/evitadb/externalApi/grpc/generated/EvitaSessionServiceGrpc.java # evita_external_api/evita_external_api_grpc/shared/src/main/java/io/evitadb/externalApi/grpc/generated/GrpcEvitaSessionAPI.java # evita_external_api/evita_external_api_rest/src/main/java/io/evitadb/externalApi/rest/api/system/resolver/endpoint/UpdateCatalogHandler.java # evita_functional_tests/src/test/java/io/evitadb/index/facet/FacetIndexTest.java # evita_functional_tests/src/test/java/io/evitadb/index/mutation/AttributeIndexMutatorTest.java # evita_store/evita_store_server/src/main/java/io/evitadb/store/catalog/DefaultCatalogPersistenceService.java # evita_store/evita_store_server/src/main/java/io/evitadb/store/catalog/DefaultEntityCollectionPersistenceService.java
| Commit: | aab53c3 | |
|---|---|---|
| Author: | Jan Novotný | |
feat: GoLive needs to be changed to asynchronous operations It could take considerable amount of time if it is combined with large session performing big data insertion. It needs to behave the same way as asynchronous close (because it does the goLiveAndClose - so it inherently closes sessions). At the end of the session the flush is performed which may wait for flushing all data to the disk. Refs: #910
| Commit: | 59480ed | |
|---|---|---|
| Author: | Jan Novotný | |
feat: Change Data Capture support Client subscriptions implemented. Refs: #187
| Commit: | 4e25cbd | |
|---|---|---|
| Author: | Jan Novotný | |
feat: Change Data Capture support Client subscriptions implemented (not tested). Refs: #187
| Commit: | b897e61 | |
|---|---|---|
| Author: | Jan Novotný | |
feat: Change Data Capture support Client subscriptions implemented (not tested). Refs: #187
| Commit: | cc13ae7 | |
|---|---|---|
| Author: | Jan Novotný | |
feat: Change Data Capture support gRPC implementation done (not tested). Refs: #187
| Commit: | 5a35df7 | |
|---|---|---|
| Author: | Jan Novotný | |
feat: Change Data Capture support Evita class refactoring - dirty work finished. Refs: #187
| Commit: | 2ce538b | |
|---|---|---|
| Author: | Jan Novotný | |
feat: Change Data Capture support Evita class refactoring - dirty work finished. Refs: #187
| Commit: | 34deb9d | |
|---|---|---|
| Author: | Jan Novotný | |
Merge branch 'dev' into 187-different-api-proposal # Conflicts: # evita_api/src/main/java/io/evitadb/api/requestResponse/EvitaRequest.java # evita_api/src/main/java/io/evitadb/api/requestResponse/data/PricesContract.java # evita_engine/src/main/java/io/evitadb/core/query/sort/price/translator/PriceDiscountTranslator.java # evita_external_api/evita_external_api_graphql/src/main/java/io/evitadb/externalApi/graphql/api/catalog/dataApi/CatalogDataApiGraphQLSchemaBuilder.java # evita_external_api/evita_external_api_graphql/src/main/java/io/evitadb/externalApi/graphql/api/catalog/dataApi/builder/CollectionGraphQLSchemaBuildingContext.java # evita_external_api/evita_external_api_graphql/src/main/java/io/evitadb/externalApi/graphql/api/catalog/dataApi/resolver/dataFetcher/ListEntitiesDataFetcher.java # evita_external_api/evita_external_api_graphql/src/main/java/io/evitadb/externalApi/graphql/api/catalog/dataApi/resolver/dataFetcher/entity/AbstractPriceForSaleDataFetcher.java # evita_external_api/evita_external_api_graphql/src/main/java/io/evitadb/externalApi/graphql/api/catalog/dataApi/resolver/dataFetcher/entity/AccompanyingPriceDataFetcher.java # evita_external_api/evita_external_api_graphql/src/main/java/io/evitadb/externalApi/graphql/api/catalog/dataApi/resolver/dataFetcher/entity/AttributeValueDataFetcher.java # evita_external_api/evita_external_api_graphql/src/main/java/io/evitadb/externalApi/graphql/api/catalog/dataApi/resolver/dataFetcher/entity/AttributesDataFetcher.java # evita_functional_tests/src/test/java/io/evitadb/api/requestResponse/data/structure/predicate/PriceContractSerializablePredicateTest.java # evita_store/evita_store_server/src/main/java/io/evitadb/store/query/serializer/filter/PriceInPriceListsSerializer.java
| Commit: | 58ac577 | |
|---|---|---|
| Author: | Jan Novotný | |
feat: Change Data Capture support Evita class refactoring. Refs: #187
| Commit: | 73c0f75 | |
|---|---|---|
| Author: | Jan Novotný | |
| Committer: | GitHub | |
Merge pull request #900 from FgForrest/895-default-accompanying-price feat: Default accompanying price
| Commit: | 356d4b3 | |
|---|---|---|
| Author: | Jan Novotný | |
feat: Default accompanying price Frontend developers want to avoid argument specification on `accompanyingPrice` field. One possible solution is to create a new reuirement: ```graphql require: { accompaniedPrice: ["reference", "basic"] } ``` Which would allow to specify "default" price list and their priorities for using `accompaniedPrice` in the fetch part of the query like this: ```graphql priceForSale { priceWithTax priceWithoutTax currency validity accompanyingPrice { priceWithTax priceWithoutTax currency validity } } ``` Refs: #895
| Commit: | 126e057 | |
|---|---|---|
| Author: | Jan Novotný | |
Merge branch 'dev' into 187-different-api-proposal # Conflicts: # evita_external_api/evita_external_api_graphql/src/main/java/io/evitadb/externalApi/graphql/api/catalog/dataApi/resolver/constraint/FacetSummaryResolver.java # evita_external_api/evita_external_api_graphql/src/main/java/io/evitadb/externalApi/graphql/api/catalog/dataApi/resolver/dataFetcher/QueryEntitiesDataFetcher.java # evita_external_api/evita_external_api_grpc/shared/src/main/java/io/evitadb/externalApi/grpc/generated/EvitaSessionServiceGrpc.java # evita_external_api/evita_external_api_grpc/shared/src/main/java/io/evitadb/externalApi/grpc/generated/GrpcEvitaSessionAPI.java # evita_functional_tests/src/test/java/io/evitadb/externalApi/rest/api/catalog/dataApi/CatalogRestQueryEntityQueryFunctionalTest.java # evita_query/src/main/java/io/evitadb/api/query/descriptor/ConstraintDescriptorProvider.java # evita_store/evita_store_key_value/src/main/java/io/evitadb/store/offsetIndex/io/OffHeapMemoryOutputStream.java
| Commit: | 78f95a4 | |
|---|---|---|
| Author: | Jan Novotný | |
feat: Full backup Currently we support active and snapshot (PIT) backups. We also need to support "full" backup, that backs up all contents of the catalog directory that contain all data necessary for making PIT backups after restoring (i.e. is lossless). This type of backup should be used in system backups. Refs: #892
| Commit: | 344fed1 | |
|---|---|---|
| Author: | Jan Novotný | |
Merge branch 'dev' into 187-different-api-proposal # Conflicts: # evita_api/src/main/java/io/evitadb/api/EvitaContract.java # evita_engine/src/main/java/io/evitadb/core/Catalog.java # evita_engine/src/main/java/io/evitadb/core/Evita.java # evita_engine/src/main/java/io/evitadb/core/transaction/TransactionManager.java # evita_external_api/evita_external_api_grpc/shared/src/main/java/io/evitadb/externalApi/grpc/generated/EvitaSessionServiceGrpc.java # evita_external_api/evita_external_api_grpc/shared/src/main/java/io/evitadb/externalApi/grpc/generated/GrpcEnums.java # evita_external_api/evita_external_api_grpc/shared/src/main/java/io/evitadb/externalApi/grpc/generated/GrpcEvitaSessionAPI.java # evita_functional_tests/src/test/java/io/evitadb/api/EvitaTest.java # evita_store/evita_store_key_value/src/main/java/io/evitadb/store/offsetIndex/exception/CorruptedRecordException.java
| Commit: | 76c9cf7 | |
|---|---|---|
| Author: | Jan Novotný | |
| Committer: | Jan Novotný | |
feat: Change Data Capture support New publisher implementation with tests. Refs: #187
| Commit: | 9536ae5 | |
|---|---|---|
| Author: | Jan Novotný | |
feat!: Propagate catalog schema version to client Renamed commit behavior to more understandable name. BREAKING-CHANGE: Commit behavior `WAIT_FOR_INDEX_PROPAGATION` renamed to `WAIT_FOR_CHANGES_VISIBLE`
| Commit: | 100a308 | |
|---|---|---|
| Author: | Jan Novotný | |
feat!: Propagate catalog schema version to client As for now the catalog schema on the client side is invalidate regurarly on obsolete checks and doesn't immediatelly detect catalog schema changes executed by different clients. We should return current catalog schema version at the close session method and similar places so that the client can immediatelly detect and invalidate the catalog schema. BREAKING-CHANGE: `CompletableFuture` in `EvitaContract` and `EvitaSessionContract` were replaced with `CompletionStage`, which is read-only (intended) and can be easily converted to `CompletableFuture`.
| Commit: | 92d1b04 | |
|---|---|---|
| Author: | Jan Novotný | |
Merge remote-tracking branch 'origin/dev' into 187-different-api-proposal # Conflicts: # evita_engine/src/main/java/io/evitadb/core/Evita.java # evita_external_api/evita_external_api_grpc/server/src/main/java/io/evitadb/externalApi/grpc/services/EvitaService.java # evita_external_api/evita_external_api_grpc/shared/src/main/java/io/evitadb/externalApi/grpc/generated/EvitaServiceGrpc.java # evita_external_api/evita_external_api_grpc/shared/src/main/java/io/evitadb/externalApi/grpc/generated/GrpcEnums.java # evita_external_api/evita_external_api_grpc/shared/src/main/java/io/evitadb/externalApi/grpc/generated/GrpcEvitaAPI.java # evita_functional_tests/src/test/java/io/evitadb/store/dataType/serializer/SerialVersionBasedSerializerTest.java # evita_store/evita_store_common/src/main/java/io/evitadb/store/dataType/serializer/SerialVersionBasedSerializer.java # evita_store/evita_store_common/src/main/java/io/evitadb/store/exception/StoredVersionNotSupportedException.java
| Commit: | e1f91ae | |
|---|---|---|
| Author: | Jan Novotný | |
fix: LocalDate is implicitly converted to String in ComplexDataObject on gRPC level When datatypes not directly supported by JSON are used in associated data complex objects, they get serialized to String and when deserialized back, they are String that cannot be easily convertable to the source data type. This effectively prevents to read complex objects with such data types over the gRPC protocol (such as `LocalDate`). We need to use evitaDB format and parse methods for such situations and adapt getter / setter / constructur logic in ComplexObjectConverter in evitaDB. **Note:** this may change contents of already stored associated data of such data types in backward incompatible fashion. We recommend to do full reindex of the data, if you're unsure about the compatibility. Refs: #866
| Commit: | 50f59e9 | |
|---|---|---|
| Author: | Jan Novotný | |
feat: Support for checking catalog state on EvitaContract level Currently it's not possible to tell from the EvitaContract interface if the catalogue is corrupted or what its state is. Clients may then attempt to query or update such a catalogue without any chance of discovering that the catalogue is corrupt. Any such call will eventually end with an exception that they cannot avoid. We should add a new method to this interface that would allow clients to determine the actual state of the catalogue. Refs: #860
| Commit: | c6953c3 | |
|---|---|---|
| Author: | Jan Novotný | |
Merge branch 'dev' into 187-different-api-proposal # Conflicts: # evita_external_api/evita_external_api_grpc/shared/src/main/java/io/evitadb/externalApi/grpc/generated/GrpcEvitaSessionAPI.java
| Commit: | 8982ba3 | |
|---|---|---|
| Author: | Jan Novotný | |
fix: Correctly release file system resources Currently the tests on Windows OS don't pass because Windows file system doesn't allow to delete a file with opened handle. This is very good litmus paper to detect places where the file system resources are not released properly. We need to correct all those places and make all tests on Windows OS pass. **Closeable streams needs to be closed forcefully on session close** There are a few stateful streams that keep an open handle to a file. Although we state in the documentation that the reader is responsible for closing them, this is very often not done. Even in our tests there are only a few cases where we forgot to close these streams. However, if the session in which the stream is opened is closed, we should make sure that any such streams opened in that session are also closed. Refs: #819
| Commit: | f2bc828 | |
|---|---|---|
| Author: | Jan Novotný | |
chore: merge with `dev` branch
| Commit: | 16a29cb | |
|---|---|---|
| Author: | Jan Novotný | |
doc: Ability to define the order constraint for ordering groups in 1:N ordering Documentation and final fixes. Refs: #160
| Commit: | 889a9f9 | |
|---|---|---|
| Author: | Jan Novotný | |
Merge branch 'dev' into 775-update-facet-summary-impact-calculations # Conflicts: # evita_functional_tests/src/test/java/io/evitadb/documentation/UserDocumentationTest.java
| Commit: | a476d88 | |
|---|---|---|
| Author: | Jan Novotný | |
Merge branch 'dev' into 775-update-facet-summary-impact-calculations # Conflicts: # evita_functional_tests/src/test/java/io/evitadb/api/query/parser/visitor/EvitaQLRequireConstraintVisitorTest.java # evita_query/src/main/java/io/evitadb/api/query/QueryConstraints.java # evita_query/src/main/java/io/evitadb/api/query/filter/ReferenceIncludingChildren.java # evita_query/src/main/java/io/evitadb/api/query/parser/grammar/EvitaQL.interp # evita_query/src/main/java/io/evitadb/api/query/parser/grammar/EvitaQLLexer.interp # evita_query/src/main/java/io/evitadb/api/query/parser/grammar/EvitaQLLexer.java # evita_query/src/main/java/io/evitadb/api/query/parser/grammar/EvitaQLParser.java # evita_query/src/main/java/io/evitadb/api/query/parser/visitor/EvitaQLRequireConstraintVisitor.java
| Commit: | 0d4043d | |
|---|---|---|
| Author: | Jan Novotný | |
Merge branch 'dev' into 650-provide-means-for-accessing-reference-count-without-actually-fetching-the-entities
| Commit: | c072c4c | |
|---|---|---|
| Author: | Jan Novotný | |
feat: Support for spacing rules in reference pagination with tests Refs: #650
| Commit: | bee309c | |
|---|---|---|
| Author: | Jan Novotný | |
Merge branch 'dev' into 352-facet-summary-integration-with-hierarchical-entities # Conflicts: # evita_query/src/main/java/io/evitadb/api/query/QueryConstraints.java # evita_query/src/main/java/io/evitadb/api/query/expression/parser/grammar/ExpressionBaseListener.java # evita_query/src/main/java/io/evitadb/api/query/expression/parser/grammar/ExpressionBaseVisitor.java # evita_query/src/main/java/io/evitadb/api/query/expression/parser/grammar/ExpressionLexer.java # evita_query/src/main/java/io/evitadb/api/query/expression/parser/grammar/ExpressionListener.java # evita_query/src/main/java/io/evitadb/api/query/expression/parser/grammar/ExpressionParser.java # evita_query/src/main/java/io/evitadb/api/query/expression/parser/grammar/ExpressionVisitor.java # evita_query/src/main/java/io/evitadb/api/query/parser/grammar/EvitaQL.interp # evita_query/src/main/java/io/evitadb/api/query/parser/grammar/EvitaQLParser.java
| Commit: | ca2bf7a | |
|---|---|---|
| Author: | Jan Novotný | |
feat: Provide means for accessing reference count without actually fetching the entities Client side implementation done with tests. Refs: #650
| Commit: | 265bc38 | |
|---|---|---|
| Author: | Jan Novotný | |
doc: Update facet summary impact calculations Added documentation. Refs: #775
| Commit: | 2c164c4 | |
|---|---|---|
| Author: | Jan Novotný | |
| Committer: | Jan Novotný | |
feat: Facet summary integration with hierarchical entities When selecting the category XY, the filter will also select all of its child categories when the includingChildren(true) sub-constraint is used. Refs: #352