Skip to content

Commit 5224754

Browse files
committed
perf(#743): optimize usage of non-parameterized data fetchers
1 parent c96f8f7 commit 5224754

32 files changed

+490
-63
lines changed

evita_external_api/evita_external_api_graphql/src/main/java/io/evitadb/externalApi/graphql/api/catalog/dataApi/builder/EntityObjectBuilder.java

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -274,7 +274,7 @@ private GraphQLObjectType buildGlobalEntity() {
274274
buildingContext.registerDataFetcher(
275275
GlobalEntityDescriptor.THIS,
276276
GlobalEntityDescriptor.TARGET_ENTITY,
277-
new TargetEntityDataFetcher()
277+
TargetEntityDataFetcher.getInstance()
278278
);
279279

280280
return globalEntityObjectBuilder.build();
@@ -284,15 +284,15 @@ private GraphQLObjectType buildGlobalEntity() {
284284
private BuiltFieldDescriptor buildEntityParentPrimaryKeyField() {
285285
return new BuiltFieldDescriptor(
286286
GraphQLEntityDescriptor.PARENT_PRIMARY_KEY.to(fieldBuilderTransformer).build(),
287-
new ParentPrimaryKeyDataFetcher()
287+
ParentPrimaryKeyDataFetcher.getInstance()
288288
);
289289
}
290290

291291
@Nonnull
292292
private BuiltFieldDescriptor buildNonHierarchicalEntityParentPrimaryKeyField() {
293293
return new BuiltFieldDescriptor(
294294
GraphQLEntityDescriptor.PARENT_PRIMARY_KEY.to(fieldBuilderTransformer).build(),
295-
new NonHierarchicalParentPrimaryKeyDataFetcher()
295+
NonHierarchicalParentPrimaryKeyDataFetcher.getInstance()
296296
);
297297
}
298298

@@ -318,7 +318,7 @@ private BuiltFieldDescriptor buildEntityParentsField(@Nonnull CollectionGraphQLS
318318

319319
return new BuiltFieldDescriptor(
320320
field,
321-
new ParentsDataFetcher()
321+
ParentsDataFetcher.getInstance()
322322
);
323323
}
324324

@@ -361,7 +361,7 @@ private BuiltFieldDescriptor buildEntityMultiplePricesForSaleAvailableField() {
361361
.argument(MultiplePricesForSaleAvailableFieldHeaderDescriptor.VALID_NOW
362362
.to(argumentBuilderTransformer))
363363
.build(),
364-
new MultiplePricesForSaleAvailableDataFetcher()
364+
MultiplePricesForSaleAvailableDataFetcher.getInstance()
365365
);
366366
}
367367

@@ -386,7 +386,7 @@ private BuiltFieldDescriptor buildEntityAllPricesForSaleField() {
386386
.type(typeRef(LOCALE_ENUM.name())))
387387
.build();
388388

389-
return new BuiltFieldDescriptor(field, new AllPricesForSaleDataFetcher());
389+
return new BuiltFieldDescriptor(field, AllPricesForSaleDataFetcher.getInstance());
390390
}
391391

392392
// TOBEDONE #538: deprecated, remove
@@ -404,7 +404,7 @@ private BuiltFieldDescriptor buildEntityPriceField() {
404404
.type(typeRef(LOCALE_ENUM.name())))
405405
.build();
406406

407-
return new BuiltFieldDescriptor(field, new PriceDataFetcher());
407+
return new BuiltFieldDescriptor(field, PriceDataFetcher.getInstance());
408408
}
409409

410410
@Nonnull
@@ -421,7 +421,7 @@ private BuiltFieldDescriptor buildEntityPricesField() {
421421
.type(typeRef(LOCALE_ENUM.name())))
422422
.build();
423423

424-
return new BuiltFieldDescriptor(field, new PricesDataFetcher());
424+
return new BuiltFieldDescriptor(field, PricesDataFetcher.getInstance());
425425
}
426426

427427
@Nonnull
@@ -445,7 +445,7 @@ private BuiltFieldDescriptor buildGlobalEntityAttributesField() {
445445

446446
return new BuiltFieldDescriptor(
447447
attributesFieldBuilder.build(),
448-
new AttributesDataFetcher()
448+
AttributesDataFetcher.getInstance()
449449
);
450450
}
451451

@@ -475,7 +475,7 @@ private BuiltFieldDescriptor buildEntityAttributesField(@Nonnull CollectionGraph
475475

476476
return new BuiltFieldDescriptor(
477477
attributesFieldBuilder.build(),
478-
new AttributesDataFetcher()
478+
AttributesDataFetcher.getInstance()
479479
);
480480
}
481481

@@ -550,7 +550,7 @@ private BuiltFieldDescriptor buildEntityAssociatedDataField(@Nonnull CollectionG
550550

551551
return new BuiltFieldDescriptor(
552552
associatedDataFieldBuilder.build(),
553-
new AssociatedDataDataFetcher()
553+
AssociatedDataDataFetcher.getInstance()
554554
);
555555
}
556556

@@ -709,7 +709,7 @@ private BuiltFieldDescriptor buildReferenceAttributesField(@Nonnull CollectionGr
709709

710710
return new BuiltFieldDescriptor(
711711
attributesField,
712-
new AttributesDataFetcher()
712+
AttributesDataFetcher.getInstance()
713713
);
714714
}
715715

@@ -732,7 +732,7 @@ private BuiltFieldDescriptor buildReferenceReferencedEntityField(@Nonnull Refere
732732

733733
return new BuiltFieldDescriptor(
734734
referencedEntityField,
735-
new ReferencedEntityDataFetcher()
735+
ReferencedEntityDataFetcher.getInstance()
736736
);
737737
}
738738

@@ -755,7 +755,7 @@ private BuiltFieldDescriptor buildReferenceGroupEntityField(@Nonnull ReferenceSc
755755

756756
return new BuiltFieldDescriptor(
757757
referencedEntityField,
758-
new ReferencedGroupDataFetcher()
758+
ReferencedGroupDataFetcher.getInstance()
759759
);
760760
}
761761

@@ -789,7 +789,7 @@ private GraphQLObjectType buildPriceForSaleObject() {
789789
buildingContext.registerDataFetcher(
790790
PriceForSaleDescriptor.THIS,
791791
PriceForSaleDescriptor.ACCOMPANYING_PRICE,
792-
new AccompanyingPriceDataFetcher()
792+
AccompanyingPriceDataFetcher.getInstance()
793793
);
794794

795795
return PriceForSaleDescriptor.THIS

evita_external_api/evita_external_api_graphql/src/main/java/io/evitadb/externalApi/graphql/api/catalog/dataApi/builder/FullResponseObjectBuilder.java

Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323

2424
package io.evitadb.externalApi.graphql.api.catalog.dataApi.builder;
2525

26-
import com.fasterxml.jackson.databind.ObjectMapper;
2726
import graphql.schema.GraphQLFieldDefinition;
2827
import graphql.schema.GraphQLInputObjectType;
2928
import graphql.schema.GraphQLInputType;
@@ -106,8 +105,6 @@
106105
*/
107106
public class FullResponseObjectBuilder {
108107

109-
private static final ObjectMapper QUERY_TELEMETRY_OBJECT_MAPPER = new ObjectMapper();
110-
111108
@Nonnull private final CatalogGraphQLSchemaBuildingContext buildingContext;
112109
@Nonnull private final PropertyDescriptorToGraphQLArgumentTransformer argumentBuilderTransformer;
113110
@Nonnull private final ObjectDescriptorToGraphQLObjectTransformer objectBuilderTransformer;
@@ -196,7 +193,7 @@ private BuiltFieldDescriptor buildRecordPageField(@Nonnull EntitySchemaContract
196193

197194
return new BuiltFieldDescriptor(
198195
recordPageField,
199-
new RecordPageDataFetcher()
196+
RecordPageDataFetcher.getInstance()
200197
);
201198
}
202199

@@ -227,7 +224,7 @@ private BuiltFieldDescriptor buildRecordStripField(@Nonnull EntitySchemaContract
227224

228225
return new BuiltFieldDescriptor(
229226
recordStripField,
230-
new RecordStripDataFetcher()
227+
RecordStripDataFetcher.getInstance()
231228
);
232229
}
233230

@@ -258,7 +255,7 @@ private Optional<BuiltFieldDescriptor> buildExtraResultsField(@Nonnull EntitySch
258255

259256
return Optional.of(new BuiltFieldDescriptor(
260257
extraResultsField,
261-
new ExtraResultsDataFetcher()
258+
ExtraResultsDataFetcher.getInstance()
262259
));
263260
}
264261

@@ -308,7 +305,7 @@ private Optional<BuiltFieldDescriptor> buildAttributeHistogramField(@Nonnull Ent
308305

309306
return Optional.of(new BuiltFieldDescriptor(
310307
attributeHistogramField,
311-
new AttributeHistogramDataFetcher()
308+
AttributeHistogramDataFetcher.getInstance()
312309
));
313310
}
314311

@@ -379,7 +376,7 @@ private Optional<BuiltFieldDescriptor> buildPriceHistogramField(@Nonnull EntityS
379376

380377
return Optional.of(new BuiltFieldDescriptor(
381378
ExtraResultsDescriptor.PRICE_HISTOGRAM.to(fieldBuilderTransformer).build(),
382-
new PriceHistogramDataFetcher()
379+
PriceHistogramDataFetcher.getInstance()
383380
));
384381
}
385382

@@ -397,7 +394,7 @@ private Optional<BuiltFieldDescriptor> buildFacetSummaryField(@Nonnull EntitySch
397394

398395
return Optional.of(new BuiltFieldDescriptor(
399396
facetSummaryField,
400-
new FacetSummaryDataFetcher()
397+
FacetSummaryDataFetcher.getInstance()
401398
));
402399
}
403400

@@ -856,7 +853,7 @@ private BuiltFieldDescriptor buildHierarchyFromRootField(@Nonnull GraphQLInputTy
856853
.argument(HierarchyFromRootHeaderDescriptor.STATISTICS_BASE
857854
.to(argumentBuilderTransformer))
858855
.build(),
859-
new SpecificHierarchyDataFetcher()
856+
SpecificHierarchyDataFetcher.getInstance()
860857
);
861858
}
862859

@@ -877,7 +874,7 @@ private BuiltFieldDescriptor buildHierarchyFromNodeField(@Nonnull GraphQLInputTy
877874
.argument(HierarchyFromNodeHeaderDescriptor.STATISTICS_BASE
878875
.to(argumentBuilderTransformer))
879876
.build(),
880-
new SpecificHierarchyDataFetcher()
877+
SpecificHierarchyDataFetcher.getInstance()
881878
);
882879
}
883880

@@ -894,7 +891,7 @@ private BuiltFieldDescriptor buildHierarchyChildrenField(@Nonnull GraphQLInputTy
894891
.argument(HierarchyChildrenHeaderDescriptor.STATISTICS_BASE
895892
.to(argumentBuilderTransformer))
896893
.build(),
897-
new SpecificHierarchyDataFetcher()
894+
SpecificHierarchyDataFetcher.getInstance()
898895
);
899896
}
900897

@@ -915,7 +912,7 @@ private BuiltFieldDescriptor buildHierarchyParentsField(@Nonnull GraphQLInputTyp
915912
.to(argumentBuilderTransformer)
916913
.type(parentsSiblingsSpecification))
917914
.build(),
918-
new SpecificHierarchyDataFetcher()
915+
SpecificHierarchyDataFetcher.getInstance()
919916
);
920917
}
921918

@@ -932,7 +929,7 @@ private BuiltFieldDescriptor buildHierarchySiblingsField(@Nonnull GraphQLInputTy
932929
.argument(HierarchySiblingsHeaderDescriptor.STATISTICS_BASE
933930
.to(argumentBuilderTransformer))
934931
.build(),
935-
new SpecificHierarchyDataFetcher()
932+
SpecificHierarchyDataFetcher.getInstance()
936933
);
937934
}
938935

@@ -943,7 +940,7 @@ private BuiltFieldDescriptor buildQueryTelemetryField() {
943940
.to(fieldBuilderTransformer)
944941
.type(nonNull(OBJECT)) // workaround because GQL doesn't support infinite recursive structures
945942
.build(),
946-
new QueryTelemetryDataFetcher(QUERY_TELEMETRY_OBJECT_MAPPER)
943+
QueryTelemetryDataFetcher.getInstance()
947944
);
948945
}
949946

evita_external_api/evita_external_api_graphql/src/main/java/io/evitadb/externalApi/graphql/api/catalog/dataApi/resolver/dataFetcher/RecordPageDataFetcher.java

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
* | __/\ V /| | || (_| | |_| | |_) |
77
* \___| \_/ |_|\__\__,_|____/|____/
88
*
9-
* Copyright (c) 2023
9+
* Copyright (c) 2023-2024
1010
*
1111
* Licensed under the Business Source License, Version 1.1 (the "License");
1212
* you may not use this file except in compliance with the License.
@@ -31,16 +31,31 @@
3131
import io.evitadb.dataType.PaginatedList;
3232
import io.evitadb.externalApi.graphql.exception.GraphQLQueryResolvingInternalError;
3333
import io.evitadb.utils.Assert;
34+
import lombok.AccessLevel;
35+
import lombok.NoArgsConstructor;
3436

3537
import javax.annotation.Nonnull;
38+
import javax.annotation.Nullable;
3639

3740
/**
3841
* Returns page of records as {@link PaginatedList} if {@link io.evitadb.api.query.require.Page} was used in query.
3942
*
4043
* @author Lukáš Hornych, FG Forrest a.s. (c) 2022
4144
*/
45+
@NoArgsConstructor(access = AccessLevel.PRIVATE)
4246
public class RecordPageDataFetcher implements DataFetcher<PaginatedList<? extends EntityClassifier>> {
4347

48+
@Nullable
49+
private static RecordPageDataFetcher INSTANCE;
50+
51+
@Nonnull
52+
public static RecordPageDataFetcher getInstance() {
53+
if (INSTANCE == null) {
54+
INSTANCE = new RecordPageDataFetcher();
55+
}
56+
return INSTANCE;
57+
}
58+
4459
@Nonnull
4560
@Override
4661
public PaginatedList<? extends EntityClassifier> get(@Nonnull DataFetchingEnvironment environment) throws Exception {

evita_external_api/evita_external_api_graphql/src/main/java/io/evitadb/externalApi/graphql/api/catalog/dataApi/resolver/dataFetcher/RecordStripDataFetcher.java

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
* | __/\ V /| | || (_| | |_| | |_) |
77
* \___| \_/ |_|\__\__,_|____/|____/
88
*
9-
* Copyright (c) 2023
9+
* Copyright (c) 2023-2024
1010
*
1111
* Licensed under the Business Source License, Version 1.1 (the "License");
1212
* you may not use this file except in compliance with the License.
@@ -31,16 +31,31 @@
3131
import io.evitadb.dataType.StripList;
3232
import io.evitadb.externalApi.graphql.exception.GraphQLQueryResolvingInternalError;
3333
import io.evitadb.utils.Assert;
34+
import lombok.AccessLevel;
35+
import lombok.NoArgsConstructor;
3436

3537
import javax.annotation.Nonnull;
38+
import javax.annotation.Nullable;
3639

3740
/**
3841
* Returns page of records as {@link StripList} if {@link io.evitadb.api.query.require.Strip} was used in query.
3942
*
4043
* @author Lukáš Hornych, FG Forrest a.s. (c) 2022
4144
*/
45+
@NoArgsConstructor(access = AccessLevel.PRIVATE)
4246
public class RecordStripDataFetcher implements DataFetcher<StripList<? extends EntityClassifier>> {
4347

48+
@Nullable
49+
private static RecordStripDataFetcher INSTANCE;
50+
51+
@Nonnull
52+
public static RecordStripDataFetcher getInstance() {
53+
if (INSTANCE == null) {
54+
INSTANCE = new RecordStripDataFetcher();
55+
}
56+
return INSTANCE;
57+
}
58+
4459
@Nonnull
4560
@Override
4661
public StripList<? extends EntityClassifier> get(@Nonnull DataFetchingEnvironment environment) throws Exception {

evita_external_api/evita_external_api_graphql/src/main/java/io/evitadb/externalApi/graphql/api/catalog/dataApi/resolver/dataFetcher/entity/AccompanyingPriceDataFetcher.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,17 +29,32 @@
2929
import io.evitadb.api.requestResponse.data.PriceContract;
3030
import io.evitadb.externalApi.graphql.api.catalog.dataApi.dto.PrefetchedPriceForSale;
3131
import io.evitadb.externalApi.graphql.exception.GraphQLInternalError;
32+
import lombok.AccessLevel;
33+
import lombok.NoArgsConstructor;
3234

3335
import javax.annotation.Nonnull;
36+
import javax.annotation.Nullable;
3437
import java.util.Optional;
3538

3639
/**
3740
* Returns accompanying price for price for sale.
3841
*
3942
* @author Lukáš Hornych, FG Forrest a.s. (c) 2024
4043
*/
44+
@NoArgsConstructor(access = AccessLevel.PRIVATE)
4145
public class AccompanyingPriceDataFetcher implements DataFetcher<DataFetcherResult<PriceContract>> {
4246

47+
@Nullable
48+
private static AccompanyingPriceDataFetcher INSTANCE;
49+
50+
@Nonnull
51+
public static AccompanyingPriceDataFetcher getInstance() {
52+
if (INSTANCE == null) {
53+
INSTANCE = new AccompanyingPriceDataFetcher();
54+
}
55+
return INSTANCE;
56+
}
57+
4358
@Override
4459
@Nonnull
4560
public DataFetcherResult<PriceContract> get(@Nonnull DataFetchingEnvironment environment) throws Exception {

0 commit comments

Comments
 (0)