Start using ingest API instead of snapshot endpoint for datasets & users

This commit is contained in:
Kerem Sahin 2019-12-13 12:16:42 -08:00
parent f929190e6a
commit d7004ffb1d
4 changed files with 42 additions and 73 deletions

View File

@ -1,32 +0,0 @@
package com.linkedin.metadata.dao;
import com.linkedin.common.urn.CorpGroupUrn;
import com.linkedin.identity.CorpGroupKey;
import com.linkedin.metadata.snapshot.CorpGroupSnapshot;
import com.linkedin.restli.common.ComplexResourceKey;
import com.linkedin.restli.common.EmptyRecord;
import java.util.Collections;
import java.util.Map;
import javax.annotation.Nonnull;
/**
* A snapshot request builder for corp group info entities.
*/
public class CorpGroupSnapshotRequestBuilder
extends BaseSnapshotRequestBuilder<CorpGroupSnapshot, CorpGroupUrn> {
private static final String BASE_URI_TEMPLATE = "corpGroups/{corpGroup}/snapshot";
public CorpGroupSnapshotRequestBuilder() {
super(CorpGroupSnapshot.class, CorpGroupUrn.class, BASE_URI_TEMPLATE);
}
@Nonnull
@Override
protected Map<String, Object> pathKeys(@Nonnull CorpGroupUrn urn) {
return Collections.singletonMap("corpGroup", new ComplexResourceKey<>(
new CorpGroupKey().setName(urn.getGroupNameEntity()),
new EmptyRecord()));
}
}

View File

@ -1,32 +0,0 @@
package com.linkedin.metadata.dao;
import com.linkedin.common.urn.CorpuserUrn;
import com.linkedin.identity.CorpUserKey;
import com.linkedin.metadata.snapshot.CorpUserSnapshot;
import com.linkedin.restli.common.ComplexResourceKey;
import com.linkedin.restli.common.EmptyRecord;
import java.util.Collections;
import java.util.Map;
import javax.annotation.Nonnull;
/**
* A snapshot request builder for corp user info entities.
*/
public class CorpUserSnapshotRequestBuilder
extends BaseSnapshotRequestBuilder<CorpUserSnapshot, CorpuserUrn> {
private static final String BASE_URI_TEMPLATE = "corpUsers/{corpUser}/snapshot";
public CorpUserSnapshotRequestBuilder() {
super(CorpUserSnapshot.class, CorpuserUrn.class, BASE_URI_TEMPLATE);
}
@Nonnull
@Override
protected Map<String, Object> pathKeys(@Nonnull CorpuserUrn urn) {
return Collections.singletonMap("corpUser", new ComplexResourceKey<>(
new CorpUserKey().setName(urn.getUsernameEntity()),
new EmptyRecord()));
}
}

View File

@ -0,0 +1,17 @@
package com.linkedin.metadata.dao;
import com.linkedin.common.urn.DatasetUrn;
import com.linkedin.metadata.snapshot.DatasetSnapshot;
/**
* An action request builder for corp user info entities.
*/
public class DatasetActionRequestBuilder extends BaseActionRequestBuilder<DatasetSnapshot, DatasetUrn> {
private static final String BASE_URI_TEMPLATE = "datasets";
public DatasetActionRequestBuilder() {
super(DatasetSnapshot.class, DatasetUrn.class, BASE_URI_TEMPLATE);
}
}

View File

@ -11,19 +11,19 @@ import javax.annotation.Nonnull;
/**
* A class that holds a list of registered {@link BaseSnapshotRequestBuilder} and provides Urn-to-builder lookup.
* A class that holds a list of registered {@link BaseRequestBuilder} and provides Urn-to-builder lookup.
*/
public class RequestBuilders {
private static final Set<BaseSnapshotRequestBuilder> REQUEST_BUILDERS =
Collections.unmodifiableSet(new HashSet<BaseSnapshotRequestBuilder>() {
private static final Set<BaseRequestBuilder> REQUEST_BUILDERS =
Collections.unmodifiableSet(new HashSet<BaseRequestBuilder>() {
{
add(new CorpUserSnapshotRequestBuilder());
add(new DatasetSnapshotRequestBuilder());
add(new CorpUserActionRequestBuilder());
add(new DatasetActionRequestBuilder());
}
});
private static final Map<Class<? extends Urn>, BaseSnapshotRequestBuilder> URN_BUILDER_MAP =
private static final Map<Class<? extends Urn>, BaseRequestBuilder> URN_BUILDER_MAP =
REQUEST_BUILDERS.stream().collect(Collectors.toMap(builder -> builder.urnClass(), Function.identity()));
private RequestBuilders() {
@ -31,13 +31,29 @@ public class RequestBuilders {
}
@Nonnull
public static <URN extends Urn> BaseSnapshotRequestBuilder getBuilder(@Nonnull URN urn) {
final Class<? extends Urn> urnClass = urn.getClass();
final BaseSnapshotRequestBuilder builder = URN_BUILDER_MAP.get(urnClass);
public static <URN extends Urn> BaseRequestBuilder getBuilder(@Nonnull URN urn) {
final Class<? extends Urn> urnClass = getBaseUrnClass(urn);
final BaseRequestBuilder builder = URN_BUILDER_MAP.get(urnClass);
if (builder == null) {
throw new IllegalArgumentException(urnClass.getCanonicalName() + " is not a supported URN type");
}
return builder;
}
/**
* Returns the base URN class for an urn object that may actually be an instance of a subclass of the base URN.
*/
@Nonnull
private static <URN extends Urn> Class<? extends Urn> getBaseUrnClass(@Nonnull URN urn) {
Class<? extends Urn> clazz = urn.getClass();
if (clazz == Urn.class) {
throw new IllegalArgumentException("urn must be a subclass of Urn");
}
while (clazz.getSuperclass() != Urn.class) {
clazz = (Class<? extends Urn>) clazz.getSuperclass();
}
return clazz;
}
}