Skip to content

Commit e05cce0

Browse files
author
Yingjian Wu
committed
add new endpoint
1 parent d113cbe commit e05cce0

File tree

8 files changed

+112
-10
lines changed

8 files changed

+112
-10
lines changed

metacat-client/src/main/java/com/netflix/metacat/client/api/MetadataV1.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
*/
1818
package com.netflix.metacat.client.api;
1919

20+
import com.fasterxml.jackson.databind.node.ObjectNode;
2021
import com.netflix.metacat.common.QualifiedName;
2122
import com.netflix.metacat.common.dto.DataMetadataDto;
2223
import com.netflix.metacat.common.dto.DataMetadataGetRequestDto;
@@ -28,7 +29,9 @@
2829
import javax.ws.rs.DefaultValue;
2930
import javax.ws.rs.GET;
3031
import javax.ws.rs.POST;
32+
import javax.ws.rs.PUT;
3133
import javax.ws.rs.Path;
34+
import javax.ws.rs.PathParam;
3235
import javax.ws.rs.Produces;
3336
import javax.ws.rs.QueryParam;
3437
import javax.ws.rs.core.MediaType;
@@ -120,4 +123,26 @@ void deleteDefinitionMetadata(
120123
@QueryParam("force")
121124
Boolean force
122125
);
126+
127+
/**
128+
* Update table.
129+
*
130+
* @param catalogName catalog name
131+
* @param databaseName database name
132+
* @param tableName table name
133+
* @param definitionMetadata definitionMetadata
134+
*/
135+
@PUT
136+
@Path("catalog/{catalog-name}/database/{database-name}/table/{table-name}/definition")
137+
@Consumes(MediaType.APPLICATION_JSON)
138+
@Produces(MediaType.APPLICATION_JSON)
139+
void updateDefinitionMetadata(
140+
@PathParam("catalog-name")
141+
String catalogName,
142+
@PathParam("database-name")
143+
String databaseName,
144+
@PathParam("table-name")
145+
String tableName,
146+
ObjectNode definitionMetadata
147+
);
123148
}

metacat-common-server/src/main/java/com/netflix/metacat/common/server/usermetadata/BaseUserMetadataService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ public void saveMetadata(final String userId, final HasMetadata holder, final bo
4545
// If the user is updating the definition metadata do a merge on the existing metadata
4646
final ObjectNode newMetadata = defDto.getDefinitionMetadata();
4747
if (newMetadata != null) {
48-
saveDefinitionMetadata(defDto.getDefinitionName(), userId, Optional.of(newMetadata), merge);
48+
saveDefinitionMetadata(defDto.getDefinitionName(), userId, Optional.of(newMetadata), merge, false);
4949
}
5050
}
5151
if (holder instanceof HasDataMetadata) {

metacat-common-server/src/main/java/com/netflix/metacat/common/server/usermetadata/MetadataPreMergeInterceptor.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,14 @@ public interface MetadataPreMergeInterceptor {
1818
* @param name qualified name
1919
* @param existingMetadata existing metadata
2020
* @param newMetadata newMetadata
21+
* @param throwException whether to throw exception from the interceptor
2122
* @throws InvalidMetadataException business validation exception
2223
*/
2324
default void onWrite(final UserMetadataService userMetadataService,
2425
final QualifiedName name,
2526
final Optional<ObjectNode> existingMetadata,
26-
final Optional<ObjectNode> newMetadata) throws InvalidMetadataException {
27+
final Optional<ObjectNode> newMetadata,
28+
final boolean throwException) throws InvalidMetadataException {
2729

2830
}
2931
}

metacat-common-server/src/main/java/com/netflix/metacat/common/server/usermetadata/UserMetadataService.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -202,11 +202,29 @@ default void saveDataMetadata(
202202
* @param userId username
203203
* @param metadata metadata
204204
* @param merge if true, will merge with existing metadata
205+
* @param throwExceptionFromInterceptor if true, will start throwing exception
205206
*/
206207
default void saveDefinitionMetadata(
207208
QualifiedName name,
208209
String userId,
209210
Optional<ObjectNode> metadata,
211+
boolean merge,
212+
boolean throwExceptionFromInterceptor
213+
) {
214+
}
215+
216+
/**
217+
* update definition metadata with interceptor applied.
218+
*
219+
* @param name name
220+
* @param userId username
221+
* @param metadata metadata
222+
* @param merge if true, will merge with existing metadata
223+
*/
224+
default void updateDefinitionMetadata(
225+
QualifiedName name,
226+
String userId,
227+
ObjectNode metadata,
210228
boolean merge
211229
) {
212230
}

metacat-main/src/main/java/com/netflix/metacat/main/api/v1/MetadataController.java

Lines changed: 45 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
import lombok.RequiredArgsConstructor;
3939
import org.springframework.context.annotation.DependsOn;
4040
import org.springframework.http.HttpStatus;
41+
import org.springframework.web.bind.annotation.PathVariable;
4142
import org.springframework.web.bind.annotation.RequestBody;
4243
import org.springframework.web.bind.annotation.RequestMapping;
4344
import org.springframework.web.bind.annotation.RequestMethod;
@@ -234,6 +235,50 @@ public void deleteDefinitionMetadata(
234235
);
235236
}
236237

238+
/**
239+
* Update table.
240+
*
241+
* @param catalogName catalog name
242+
* @param databaseName database name
243+
* @param tableName table name
244+
* @param definitionMetadata definitionMetadata
245+
*
246+
*/
247+
@RequestMapping(method = RequestMethod.POST,
248+
path = "/catalog/{catalog-name}/database/{database-name}/table/{table-name}/definition")
249+
@ResponseStatus(HttpStatus.OK)
250+
@Operation(
251+
summary = "Returns the data metadata",
252+
description = "Returns the data metadata"
253+
)
254+
public void updateDefinitionMetadata(
255+
@Parameter(description = "The name of the catalog", required = true)
256+
@PathVariable("catalog-name") final String catalogName,
257+
@Parameter(description = "The name of the database", required = true)
258+
@PathVariable("database-name") final String databaseName,
259+
@Parameter(description = "The name of the table", required = true)
260+
@PathVariable("table-name") final String tableName,
261+
@Parameter(description = "The table information", required = true)
262+
@RequestBody final ObjectNode definitionMetadata
263+
) {
264+
final QualifiedName name = this.requestWrapper.qualifyName(
265+
() -> QualifiedName.ofTable(catalogName, databaseName, tableName)
266+
);
267+
final MetacatRequestContext metacatRequestContext = MetacatContextManager.getContext();
268+
this.requestWrapper.processRequest(
269+
"updateDefinitionMetadata",
270+
() -> {
271+
this.userMetadataService.updateDefinitionMetadata(name,
272+
metacatRequestContext.getUserName(),
273+
definitionMetadata,
274+
true
275+
);
276+
return null;
277+
}
278+
);
279+
}
280+
281+
237282
/**
238283
* Deletes the data metadata marked for deletion.
239284
*/
@@ -259,5 +304,4 @@ public void cleanUpDeletedDataMetadata() {
259304
public void cleanUpObsoleteMetadata() {
260305
this.metadataService.cleanUpObsoleteDefinitionMetadata();
261306
}
262-
263307
}

metacat-main/src/main/java/com/netflix/metacat/main/services/impl/DatabaseServiceImpl.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ public DatabaseDto create(final QualifiedName name, final DatabaseDto dto) {
9898
if (dto.getDefinitionMetadata() != null) {
9999
log.info("Saving user metadata for schema {}", name);
100100
userMetadataService.saveDefinitionMetadata(name, metacatRequestContext.getUserName(),
101-
Optional.of(dto.getDefinitionMetadata()), true);
101+
Optional.of(dto.getDefinitionMetadata()), true, false);
102102
}
103103
final DatabaseDto createdDto = get(name,
104104
GetDatabaseServiceParameters.builder()
@@ -129,7 +129,7 @@ public void update(final QualifiedName name, final DatabaseDto dto) {
129129
if (dto.getDefinitionMetadata() != null) {
130130
log.info("Saving user metadata for schema {}", name);
131131
userMetadataService.saveDefinitionMetadata(name, metacatRequestContext.getUserName(),
132-
Optional.of(dto.getDefinitionMetadata()), true);
132+
Optional.of(dto.getDefinitionMetadata()), true, false);
133133
}
134134
eventBus.post(new MetacatUpdateDatabasePostEvent(name, metacatRequestContext, this));
135135
}

metacat-metadata-mysql/src/main/java/com/netflix/metacat/metadata/mysql/MySqlTagService.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -256,7 +256,7 @@ public void delete(final QualifiedName name, final boolean updateUserMetadata) {
256256
data.put(NAME_TAGS, Sets.newHashSet());
257257
userMetadataService
258258
.saveDefinitionMetadata(name, "admin", Optional.of(metacatJson.toJsonObject(data)),
259-
true);
259+
true, false);
260260
}
261261
} catch (Exception e) {
262262
final String message = String.format("Failed to delete all tags for name %s", name);
@@ -290,7 +290,7 @@ public void remove(final QualifiedName name, final Set<String> tags, final boole
290290
data.put(NAME_TAGS, tagItem.getValues());
291291
userMetadataService
292292
.saveDefinitionMetadata(name, "admin", Optional.of(metacatJson.toJsonObject(data)),
293-
true);
293+
true, false);
294294
}
295295
} catch (Exception e) {
296296
final String message = String.format("Failed to remove tags for name %s", name);
@@ -424,7 +424,7 @@ public Set<String> setTags(final QualifiedName name, final Set<String> tags,
424424
data.put(NAME_TAGS, values);
425425
userMetadataService
426426
.saveDefinitionMetadata(name, "admin", Optional.of(metacatJson.toJsonObject(data)),
427-
true);
427+
true, false);
428428
}
429429
} catch (Exception e) {
430430
final String message = String.format("Failed to remove tags for name %s", name);

metacat-metadata-mysql/src/main/java/com/netflix/metacat/metadata/mysql/MysqlUserMetadataService.java

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,16 @@ public MysqlUserMetadataService(
103103
this.metadataPreMergeInterceptor = metadataPreMergeInterceptor;
104104
}
105105

106+
@Override
107+
public void updateDefinitionMetadata(
108+
final QualifiedName name,
109+
final String userId,
110+
final ObjectNode definitionMetadata,
111+
final boolean merge) {
112+
113+
saveDefinitionMetadata(name, userId, Optional.of(definitionMetadata), merge, true);
114+
}
115+
106116
@Override
107117
public void saveMetadata(final String userId, final HasMetadata holder, final boolean merge) {
108118
super.saveMetadata(userId, holder, merge);
@@ -589,7 +599,9 @@ public void saveDataMetadata(
589599
public void saveDefinitionMetadata(
590600
@Nonnull final QualifiedName name,
591601
@Nonnull final String userId,
592-
@Nonnull final Optional<ObjectNode> metadata, final boolean merge)
602+
@Nonnull final Optional<ObjectNode> metadata,
603+
final boolean merge,
604+
final boolean throwExceptionFromInterceptor)
593605
throws InvalidMetadataException {
594606
final Optional<ObjectNode> existingData =
595607
config.isDefinitionMetadataSelectForUpdateEnabled()
@@ -598,7 +610,8 @@ public void saveDefinitionMetadata(
598610
this,
599611
name,
600612
existingData,
601-
metadata
613+
metadata,
614+
throwExceptionFromInterceptor
602615
);
603616
final int count;
604617
if (existingData.isPresent() && metadata.isPresent()) {

0 commit comments

Comments
 (0)