Fix #3402: Inconsistency in activity feed for services activities (#3535)

This commit is contained in:
Vivek Ratnavel Subramanian 2022-03-20 01:37:15 -07:00 committed by GitHub
parent f7cc5160cc
commit 001ec69b09
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 42 additions and 2 deletions

View File

@ -107,7 +107,19 @@ public final class Entity {
//
// List of entities whose changes should not be published to the Activity Feed
//
public static final List<String> ACTIVITY_FEED_EXCLUDED_ENTITIES = List.of(USER, TEAM, ROLE, POLICY, BOTS);
public static final List<String> ACTIVITY_FEED_EXCLUDED_ENTITIES =
List.of(
USER,
TEAM,
ROLE,
POLICY,
BOTS,
AIRFLOW_PIPELINE,
DATABASE_SERVICE,
PIPELINE_SERVICE,
DASHBOARD_SERVICE,
STORAGE_SERVICE,
MESSAGING_SERVICE);
private Entity() {}

View File

@ -18,11 +18,13 @@ import static org.openmetadata.catalog.fernet.Fernet.decryptIfTokenized;
import static org.openmetadata.catalog.fernet.Fernet.isTokenized;
import static org.openmetadata.catalog.util.EntityUtil.toBoolean;
import com.fasterxml.jackson.core.JsonProcessingException;
import java.io.IOException;
import java.net.URI;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.UUID;
import org.openmetadata.catalog.Entity;
import org.openmetadata.catalog.entity.services.DatabaseService;
@ -275,5 +277,24 @@ public class DatabaseServiceRepository extends EntityRepository<DatabaseService>
public DatabaseServiceUpdater(DatabaseService original, DatabaseService updated, Operation operation) {
super(original, updated, operation);
}
@Override
public void entitySpecificUpdate() throws IOException {
updateDatabaseConnectionConfig();
}
private void updateDatabaseConnectionConfig() throws JsonProcessingException {
DatabaseConnection origConn = original.getEntity().getDatabaseConnection();
DatabaseConnection updatedConn = updated.getEntity().getDatabaseConnection();
if (origConn != null
&& updatedConn != null
&& Objects.equals(
Fernet.decryptIfTokenized(origConn.getPassword()),
Fernet.decryptIfTokenized(updatedConn.getPassword()))) {
// Password in clear didn't change. The tokenized changed because it's time-dependent.
updatedConn.setPassword(origConn.getPassword());
}
recordChange("databaseConnection", origConn, updatedConn, true);
}
}
}

View File

@ -120,11 +120,14 @@ public class DatabaseServiceResourceTest extends EntityResourceTest<DatabaseServ
databaseConnection.withConnectionArguments(connectionArguments).withConnectionOptions(connectionOptions);
update.withDatabaseConnection(databaseConnection);
service = updateEntity(update, OK, ADMIN_AUTH_HEADERS);
// Get the recently updated entity and verify the changes
service = getEntity(service.getId(), ADMIN_AUTH_HEADERS);
assertEquals(databaseConnection, service.getDatabaseConnection());
assertEquals("description1", service.getDescription());
}
@Test
void put_addIngestion_as_admin_2xx(TestInfo test) throws IOException, ParseException {
void put_addIngestion_as_admin_2xx(TestInfo test) throws IOException {
DatabaseService service = createAndCheckEntity(createRequest(test).withDescription(null), ADMIN_AUTH_HEADERS);
EntityReference serviceRef = new DatabaseServiceEntityInterface(service).getEntityReference();
@ -142,6 +145,8 @@ public class DatabaseServiceResourceTest extends EntityResourceTest<DatabaseServ
.withUsername("username");
update.withDatabaseConnection(databaseConnection);
service = updateEntity(update, OK, ADMIN_AUTH_HEADERS);
// Get the recently updated entity and verify the changes
service = getEntity(service.getId(), ADMIN_AUTH_HEADERS);
assertEquals(databaseConnection, service.getDatabaseConnection());
ConnectionArguments connectionArguments =
new ConnectionArguments()
@ -152,6 +157,8 @@ public class DatabaseServiceResourceTest extends EntityResourceTest<DatabaseServ
databaseConnection.withConnectionArguments(connectionArguments).withConnectionOptions(connectionOptions);
update.withDatabaseConnection(databaseConnection);
service = updateEntity(update, OK, ADMIN_AUTH_HEADERS);
// Get the recently updated entity and verify the changes
service = getEntity(service.getId(), ADMIN_AUTH_HEADERS);
assertEquals(databaseConnection, service.getDatabaseConnection());
AirflowPipelineResourceTest airflowPipelineResourceTest = new AirflowPipelineResourceTest();