Skip to content

Commit

Permalink
don't attempt to delete from target app db if uninstall failed
Browse files Browse the repository at this point in the history
  • Loading branch information
Foxcapades committed Mar 5, 2024
1 parent 3ca4eb3 commit 50d345a
Showing 1 changed file with 34 additions and 21 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,35 +6,48 @@ import org.veupathdb.vdi.lib.common.model.VDIReconcilerTargetRecord
import org.veupathdb.vdi.lib.common.util.CloseableIterator
import org.veupathdb.vdi.lib.db.app.AppDB
import org.veupathdb.vdi.lib.db.app.withTransaction
import org.veupathdb.vdi.lib.handler.client.response.uni.UninstallBadRequestResponse
import org.veupathdb.vdi.lib.handler.client.response.uni.UninstallUnexpectedErrorResponse
import org.veupathdb.vdi.lib.handler.mapping.PluginHandlers
import org.veupathdb.vdi.lib.reconciler.exception.UnsupportedTypeException

class AppDBTarget(
override val name: String,
private val projectID: String
override val name: String,
private val projectID: String
) : ReconcilerTarget {

private val appDB = AppDB()
private val appDB = AppDB()

override val type = ReconcilerTargetType.Install
override val type = ReconcilerTargetType.Install

override fun streamSortedSyncControlRecords(): CloseableIterator<VDIReconcilerTargetRecord> {
return appDB.accessor(projectID)!!.streamAllSyncControlRecords()
}
override fun streamSortedSyncControlRecords(): CloseableIterator<VDIReconcilerTargetRecord> {
return appDB.accessor(projectID)!!.streamAllSyncControlRecords()
}

override fun deleteDataset(datasetType: VDIDatasetType, datasetID: DatasetID) {
if (!PluginHandlers.contains(datasetType.name, datasetType.version)) {
throw UnsupportedTypeException("Unable to delete unknown dataset type $datasetType from target database " +
"for project $projectID")
}
PluginHandlers[datasetType.name, datasetType.version]!!.client.postUninstall(datasetID, projectID)
appDB.withTransaction(projectID) {
it.deleteDatasetVisibilities(datasetID)
it.deleteDatasetProjectLinks(datasetID)
it.deleteSyncControl(datasetID)
it.deleteInstallMessages(datasetID)
it.deleteDatasetMeta(datasetID)
it.deleteDataset(datasetID)
}
override fun deleteDataset(datasetType: VDIDatasetType, datasetID: DatasetID) {
if (!PluginHandlers.contains(datasetType.name, datasetType.version)) {
throw UnsupportedTypeException(
"Unable to delete unknown dataset type $datasetType from target database " +
"for project $projectID"
)
}

val res = PluginHandlers[datasetType.name, datasetType.version]!!.client.postUninstall(datasetID, projectID)

if (!res.isSuccessResponse)
when (res) {
is UninstallBadRequestResponse -> throw Exception("Failed to uninstall dataset $datasetID from project $projectID: ${res.message}")
is UninstallUnexpectedErrorResponse -> throw Exception("Failed to uninstall dataset $datasetID from project $projectID: ${res.message}")
else -> throw Exception("Failed to uninstall dataset $datasetID from project $projectID")
}

appDB.withTransaction(projectID) {
it.deleteDatasetVisibilities(datasetID)
it.deleteDatasetProjectLinks(datasetID)
it.deleteSyncControl(datasetID)
it.deleteInstallMessages(datasetID)
it.deleteDatasetMeta(datasetID)
it.deleteDataset(datasetID)
}
}
}

0 comments on commit 50d345a

Please sign in to comment.