Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -106,10 +106,6 @@ public enum SchemaConfig {

private boolean _noisyLogsEnabled = false;

// Which approach to be used for record retrieval when inserting a new record
// See GCN-38382
private FindMethodology _findMethodology = FindMethodology.UNIQUE_ID;

// true if metadata change will be persisted into the change log table (metadata_aspect)
private boolean _changeLogEnabled = true;

Expand Down Expand Up @@ -167,12 +163,6 @@ public void setOverwriteLatestVersionEnabled(boolean overwriteLatestVersionEnabl
}
}

public enum FindMethodology {
UNIQUE_ID, // (legacy) https://javadoc.io/static/io.ebean/ebean/11.19.2/io/ebean/EbeanServer.html#find-java.lang.Class-java.lang.Object-
DIRECT_SQL, // https://javadoc.io/static/io.ebean/ebean/11.19.2/io/ebean/EbeanServer.html#findNative-java.lang.Class-java.lang.String-
QUERY_BUILDER // https://javadoc.io/static/io.ebean/ebean/11.19.2/io/ebean/Ebean.html#find-java.lang.Class-
}

@Value
static class GMAIndexPair {
public String valueType;
Expand Down Expand Up @@ -236,39 +226,6 @@ public EbeanLocalDAO(@Nonnull Class<ASPECT_UNION> aspectUnionClass, @Nonnull Bas
this(aspectUnionClass, producer, createServer(serverConfig), serverConfig, urnClass, schemaConfig, trackingManager);
}

/**
* Constructor for EbeanLocalDAO with the option to use an alternate Ebean find methodology for record insertion.
* See GCN-38382
*
* @param aspectUnionClass containing union of all supported aspects. Must be a valid aspect union defined in com.linkedin.metadata.aspect
* @param producer {@link BaseMetadataEventProducer} for the metadata event producer
* @param serverConfig {@link ServerConfig} that defines the configuration of EbeanServer instances
* @param urnClass Class of the entity URN
* @param findMethodology Enum indicating which find configuration to use
*/
public EbeanLocalDAO(@Nonnull Class<ASPECT_UNION> aspectUnionClass, @Nonnull BaseMetadataEventProducer producer,
@Nonnull ServerConfig serverConfig, @Nonnull Class<URN> urnClass, @Nonnull FindMethodology findMethodology) {
this(aspectUnionClass, producer, createServer(serverConfig), serverConfig, urnClass, findMethodology);
}

/**
* Constructor for EbeanLocalDAO with the option to use an alternate Ebean find methodology for record insertion.
* See GCN-38382
*
* @param aspectUnionClass containing union of all supported aspects. Must be a valid aspect union defined in com.linkedin.metadata.aspect
* @param producer {@link BaseTrackingMetadataEventProducer} for the metadata event producer
* @param serverConfig {@link ServerConfig} that defines the configuration of EbeanServer instances
* @param urnClass Class of the entity URN
* @param findMethodology Enum indicating which find configuration to use
* @param trackingManager {@link BaseTrackingManager} tracking manager for producing tracking requests
*/
public EbeanLocalDAO(@Nonnull Class<ASPECT_UNION> aspectUnionClass,
@Nonnull BaseTrackingMetadataEventProducer producer, @Nonnull ServerConfig serverConfig,
@Nonnull Class<URN> urnClass, @Nonnull FindMethodology findMethodology,
@Nonnull BaseTrackingManager trackingManager) {
this(aspectUnionClass, producer, createServer(serverConfig), serverConfig, urnClass, findMethodology, trackingManager);
}

/**
* Constructor for EbeanLocalDAO.
*
Expand Down Expand Up @@ -439,28 +396,11 @@ private EbeanLocalDAO(@Nonnull Class<ASPECT_UNION> aspectUnionClass, @Nonnull Ba
}
}

private EbeanLocalDAO(@Nonnull Class<ASPECT_UNION> aspectUnionClass, @Nonnull BaseMetadataEventProducer producer,
@Nonnull EbeanServer server, @Nonnull ServerConfig serverConfig, @Nonnull Class<URN> urnClass, @Nonnull FindMethodology findMethodology) {
this(aspectUnionClass, producer, server, urnClass);
_findMethodology = findMethodology;
}

private EbeanLocalDAO(@Nonnull Class<ASPECT_UNION> aspectUnionClass,
@Nonnull BaseTrackingMetadataEventProducer producer, @Nonnull EbeanServer server,
@Nonnull ServerConfig serverConfig, @Nonnull Class<URN> urnClass, @Nonnull FindMethodology findMethodology,
@Nonnull BaseTrackingManager trackingManager) {
this(aspectUnionClass, producer, server, urnClass, trackingManager);
_findMethodology = findMethodology;
}

// Only called in testing (test all possible combos of SchemaConfig, FindMethodology)
@VisibleForTesting
EbeanLocalDAO(@Nonnull Class<ASPECT_UNION> aspectUnionClass, @Nonnull BaseMetadataEventProducer producer,
@Nonnull EbeanServer server, @Nonnull ServerConfig serverConfig, @Nonnull Class<URN> urnClass,
@Nonnull SchemaConfig schemaConfig,
@Nonnull FindMethodology findMethodology, @Nonnull EBeanDAOConfig ebeanDAOConfig) {
@Nonnull SchemaConfig schemaConfig, @Nonnull EBeanDAOConfig ebeanDAOConfig) {
this(aspectUnionClass, producer, server, serverConfig, urnClass, schemaConfig);
_findMethodology = findMethodology;
if (schemaConfig != SchemaConfig.OLD_SCHEMA_ONLY) {
_localAccess = new EbeanLocalAccess<>(server, serverConfig, urnClass, _urnPathExtractor, ebeanDAOConfig.isNonDollarVirtualColumnsEnabled());
}
Expand Down Expand Up @@ -805,18 +745,7 @@ public <ASPECT extends RecordTemplate> List<LocalRelationshipUpdates> backfillLo
if (_schemaConfig == SchemaConfig.OLD_SCHEMA_ONLY || _schemaConfig == SchemaConfig.DUAL_SCHEMA) {
final String aspectName = ModelUtils.getAspectName(aspectClass);
final PrimaryKey key = new PrimaryKey(urn.toString(), aspectName, LATEST_VERSION);
if (_findMethodology == FindMethodology.DIRECT_SQL) {
result = findLatestMetadataAspect(_server, urn, aspectClass);
if (result == null) {
// Attempt 1: retry
result = _server.find(EbeanMetadataAspect.class, key);
if (log.isDebugEnabled()) {
log.debug("Attempt 1: Retried on {}, {}", urn, result);
}
}
} else {
result = _server.find(EbeanMetadataAspect.class, key);
}
result = _server.find(EbeanMetadataAspect.class, key);
} else {
// for new schema, get latest data from the new schema entity table. (Resolving the read de-coupling issue)
final List<EbeanMetadataAspect> results =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@
import com.linkedin.data.template.StringArray;
import com.linkedin.metadata.aspect.AuditedAspect;
import com.linkedin.metadata.backfill.BackfillMode;
import com.linkedin.metadata.dao.EbeanLocalDAO.FindMethodology;
import com.linkedin.metadata.dao.EbeanLocalDAO.SchemaConfig;
import com.linkedin.metadata.dao.EbeanMetadataAspect.PrimaryKey;
import com.linkedin.metadata.dao.builder.BaseLocalRelationshipBuilder;
Expand Down Expand Up @@ -142,9 +141,6 @@ public class EbeanLocalDAOTest {
// run the tests 1 time for each of EbeanLocalDAO.SchemaConfig values (3 total)
private final SchemaConfig _schemaConfig;

// run the tests 1 time for each of EbeanLocalDAO.FindMethodology values (3 total)
private final FindMethodology _findMethodology;

private final boolean _enableChangeLog;

private static final String NEW_SCHEMA_CREATE_ALL_SQL = "ebean-local-dao-create-all.sql";
Expand All @@ -161,11 +157,10 @@ public class EbeanLocalDAOTest {
.setCriteria(new LocalRelationshipCriterionArray()).setDirection(RelationshipDirection.OUTGOING);

@Factory(dataProvider = "inputList")
public EbeanLocalDAOTest(SchemaConfig schemaConfig, FindMethodology findMethodology, boolean enableChangeLog,
public EbeanLocalDAOTest(SchemaConfig schemaConfig, boolean enableChangeLog,
boolean nonDollarVirtualColumnEnabled) {
_eBeanDAOConfig.setNonDollarVirtualColumnsEnabled(nonDollarVirtualColumnEnabled);
_schemaConfig = schemaConfig;
_findMethodology = findMethodology;
_enableChangeLog = enableChangeLog;
}

Expand All @@ -183,20 +178,14 @@ public static Object[][] inputList() {
return new Object[][]{

// tests with change history enabled (legacy mode)
{SchemaConfig.OLD_SCHEMA_ONLY, FindMethodology.UNIQUE_ID, true, true},
{SchemaConfig.NEW_SCHEMA_ONLY, FindMethodology.UNIQUE_ID, true, true},
{SchemaConfig.DUAL_SCHEMA, FindMethodology.UNIQUE_ID, true, true},
{SchemaConfig.OLD_SCHEMA_ONLY, FindMethodology.DIRECT_SQL, true, false},
{SchemaConfig.NEW_SCHEMA_ONLY, FindMethodology.DIRECT_SQL, true, false},
{SchemaConfig.DUAL_SCHEMA, FindMethodology.DIRECT_SQL, true, false},
{SchemaConfig.OLD_SCHEMA_ONLY, true, true},
{SchemaConfig.NEW_SCHEMA_ONLY, true, true},
{SchemaConfig.DUAL_SCHEMA, true, false},

// tests with change history disabled (cold-archive mode)
{SchemaConfig.OLD_SCHEMA_ONLY, FindMethodology.UNIQUE_ID, false, true},
{SchemaConfig.NEW_SCHEMA_ONLY, FindMethodology.UNIQUE_ID, false, true},
{SchemaConfig.DUAL_SCHEMA, FindMethodology.UNIQUE_ID, false, true},
{SchemaConfig.OLD_SCHEMA_ONLY, FindMethodology.DIRECT_SQL, false, false},
{SchemaConfig.NEW_SCHEMA_ONLY, FindMethodology.DIRECT_SQL, false, false},
{SchemaConfig.DUAL_SCHEMA, FindMethodology.DIRECT_SQL, false, false},
{SchemaConfig.OLD_SCHEMA_ONLY, false, true},
{SchemaConfig.NEW_SCHEMA_ONLY, false, false},
{SchemaConfig.DUAL_SCHEMA, false, false},

};
}
Expand Down Expand Up @@ -229,7 +218,7 @@ public void setupServer() {
private <URN extends Urn> EbeanLocalDAO<EntityAspectUnion, URN> createDao(@Nonnull EbeanServer server,
@Nonnull Class<URN> urnClass) {
EbeanLocalDAO<EntityAspectUnion, URN> dao = new EbeanLocalDAO<>(EntityAspectUnion.class, _mockProducer, server,
EmbeddedMariaInstance.SERVER_CONFIG_MAP.get(_server.getName()), urnClass, _schemaConfig, _findMethodology, _eBeanDAOConfig);
EmbeddedMariaInstance.SERVER_CONFIG_MAP.get(_server.getName()), urnClass, _schemaConfig, _eBeanDAOConfig);
// Since we added a_urn columns to both metadata_entity_foo and metadata_entity_bar tables in the SQL initialization scripts,
// it is required that we set non-default UrnPathExtractors for the corresponding DAOs when initialized.
if (urnClass == FooUrn.class) {
Expand Down