Skip to content

Commit 6352584

Browse files
committed
VAL-403 Re-use the previous version and dependency databases if no changes found
1 parent 58a0e93 commit 6352584

File tree

2 files changed

+49
-25
lines changed

2 files changed

+49
-25
lines changed

src/main/java/org/ihtsdo/rvf/core/service/ReleaseDataManager.java

+23-2
Original file line numberDiff line numberDiff line change
@@ -128,8 +128,8 @@ private void fetchRvfSchemasFromDb() {
128128
}
129129
}
130130

131-
public void dropDatabaseIfExist(String schemaName) throws BusinessServiceException{
132-
logger.info("Dropping schema: {}", schemaName);
131+
public void dropSchema(String schemaName) throws BusinessServiceException{
132+
logger.info("Dropping schema {}", schemaName);
133133
//clean database
134134
try (Statement statement = dataSource.getConnection().createStatement()) {
135135
String dropStr = "drop database if exists " + schemaName + ";";
@@ -722,4 +722,25 @@ private void insertIntoProspectiveDeltaTablesFromDependency(MysqlExecutionConfig
722722
}
723723
}
724724
}
725+
726+
public long getPublishedReleaseLastModifiedDate(String publishedRelease) {
727+
ResourceManager resourceManager = new ResourceManager(releaseStorageConfig, cloudResourceLoader);
728+
try {
729+
return resourceManager.getResourceLastModifiedDate(publishedRelease);
730+
} catch (Exception e) {
731+
logger.warn("Failed to find the last modified for resource {}", publishedRelease, e);
732+
return 0L;
733+
}
734+
}
735+
736+
public long getBinaryArchiveSchemaLastModifiedDate(String schemaName) {
737+
ResourceManager resourceManager = new ResourceManager(mysqlBinaryStorageConfig, cloudResourceLoader);
738+
String archiveFileName = schemaName + ZIP_FILE_EXTENSION;
739+
try {
740+
return resourceManager.getResourceLastModifiedDate(archiveFileName);
741+
} catch (Exception e) {
742+
logger.warn("Failed to find the last modified for resource {}", schemaName, e);
743+
return 0L;
744+
}
745+
}
725746
}

src/main/java/org/ihtsdo/rvf/core/service/ValidationVersionLoader.java

+26-23
Original file line numberDiff line numberDiff line change
@@ -80,8 +80,6 @@ public void init() {
8080
}
8181

8282
public void loadPreviousVersion(MysqlExecutionConfig executionConfig) throws BusinessServiceException, IOException {
83-
String schemaName = constructRVFSchema(executionConfig.getPreviousVersion());
84-
releaseDataManager.dropDatabaseIfExist(schemaName);
8583
if (executionConfig.getPreviousVersion().endsWith(ZIP_FILE_EXTENSION)) {
8684
String rvfDbSchema = loadRelease(executionConfig.getPreviousVersion());
8785
executionConfig.setPreviousVersion(rvfDbSchema);
@@ -92,8 +90,6 @@ public void loadPreviousVersion(MysqlExecutionConfig executionConfig) throws Bus
9290
}
9391

9492
public void loadDependencyVersion(MysqlExecutionConfig executionConfig) throws IOException, BusinessServiceException {
95-
String schemaName = constructRVFSchema(executionConfig.getExtensionDependencyVersion());
96-
releaseDataManager.dropDatabaseIfExist(schemaName);
9793
if (executionConfig.getExtensionDependencyVersion().endsWith(ZIP_FILE_EXTENSION)) {
9894
String dependencyVersion = loadRelease(executionConfig.getExtensionDependencyVersion());
9995
executionConfig.setExtensionDependencyVersion(dependencyVersion);
@@ -145,34 +141,41 @@ private boolean checkDeltaFilesExist(File localProspectiveFile) throws ReleaseIm
145141
return false;
146142
}
147143

148-
private String constructRVFSchema(String releaseVersion) {
149-
if (releaseVersion != null) {
150-
if (releaseVersion.endsWith(ZIP_FILE_EXTENSION)) {
151-
return RvfReleaseDbSchemaNameGenerator.generate(releaseVersion);
152-
}
153-
return releaseVersion.startsWith(RVF_DB_PREFIX) ? releaseVersion : RVF_DB_PREFIX + releaseVersion;
154-
} else {
155-
return null;
156-
}
157-
}
158-
159144
private String loadRelease(String releaseVersion) throws IOException, BusinessServiceException {
160145
if (releaseVersion != null && releaseVersion.endsWith(ZIP_FILE_EXTENSION)) {
161146
String schemaName = RvfReleaseDbSchemaNameGenerator.generate(releaseVersion);
162-
if (!releaseDataManager.isKnownRelease(schemaName) && (!releaseDataManager.restoreReleaseFromBinaryArchive(schemaName))) {
147+
long publishedReleaseLastModifiedDate = releaseDataManager.getPublishedReleaseLastModifiedDate(releaseVersion);
148+
long binaryArchiveSchemaLastModifiedDate = releaseDataManager.getBinaryArchiveSchemaLastModifiedDate(schemaName);
149+
150+
// If the binary archive has been deleted (- or it has not been generated yet), OR the release file has been changed,
151+
// then the schema and the binary archive schema need to be re-generated
152+
if (binaryArchiveSchemaLastModifiedDate == 0 || publishedReleaseLastModifiedDate > binaryArchiveSchemaLastModifiedDate) {
153+
logger.info("The Binary Archive file was deleted (- or it has not been generated yet), OR a new version of published release has been detected.");
154+
if (releaseDataManager.isKnownRelease(schemaName)) {
155+
releaseDataManager.dropSchema(schemaName);
156+
}
157+
uploadPublishedReleaseThenGenerateBinaryArchive(releaseVersion, schemaName);
158+
} else {
159+
// Restore schema from binary archive file
160+
if (!releaseDataManager.isKnownRelease(schemaName) && !releaseDataManager.restoreReleaseFromBinaryArchive(schemaName)) {
163161
logger.info("No existing mysql binary release available.");
164-
releaseDataManager.uploadPublishedReleaseFromStore(releaseVersion, schemaName);
165-
if (generateBinaryArchive) {
166-
String archiveFilename = releaseDataManager.generateBinaryArchive(schemaName);
167-
logger.info("Release mysql binary archive is generated: {}", archiveFilename);
168-
}
162+
uploadPublishedReleaseThenGenerateBinaryArchive(releaseVersion, schemaName);
163+
}
164+
}
169165

170-
}
171-
return schemaName;
166+
return schemaName;
172167
}
173168
return releaseVersion;
174169
}
175170

171+
private void uploadPublishedReleaseThenGenerateBinaryArchive(String releaseVersion, String schemaName) throws BusinessServiceException {
172+
releaseDataManager.uploadPublishedReleaseFromStore(releaseVersion, schemaName);
173+
if (generateBinaryArchive) {
174+
String archiveFilename = releaseDataManager.generateBinaryArchive(schemaName);
175+
logger.info("Release mysql binary archive is generated: {}", archiveFilename);
176+
}
177+
}
178+
176179
public MysqlExecutionConfig createExecutionConfig(ValidationRunConfig validationConfig) throws BusinessServiceException {
177180
MysqlExecutionConfig executionConfig = new MysqlExecutionConfig(validationConfig.getRunId(), validationConfig.isFirstTimeRelease());
178181
executionConfig.setProspectiveVersion(RVF_DB_PREFIX + getProspectiveVersionFromFileNames(validationConfig)

0 commit comments

Comments
 (0)