Skip to content

Commit f4514c1

Browse files
authored
Revert datasource state when delete fails (opensearch-project#382)
Signed-off-by: Heemin Kim <heemin@amazon.com>
1 parent d8718ad commit f4514c1

3 files changed

Lines changed: 28 additions & 2 deletions

File tree

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
1717
* IP2Geo processor implementation ([#362](https://github.com/opensearch-project/geospatial/pull/362))
1818
### Enhancements
1919
### Bug Fixes
20+
* Revert datasource state when delete fails([#382](https://github.com/opensearch-project/geospatial/pull/382))
2021
### Infrastructure
2122
* Make jacoco report to be generated faster in local ([#267](https://github.com/opensearch-project/geospatial/pull/267))
2223
* Exclude lombok generated code from jacoco coverage report ([#268](https://github.com/opensearch-project/geospatial/pull/268))

src/main/java/org/opensearch/geospatial/ip2geo/action/DeleteDatasourceTransportAction.java

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -111,9 +111,18 @@ protected void deleteDatasource(final String datasourceName) throws IOException
111111
if (datasource == null) {
112112
throw new ResourceNotFoundException("no such datasource exist");
113113
}
114-
114+
DatasourceState previousState = datasource.getState();
115115
setDatasourceStateAsDeleting(datasource);
116-
geoIpDataDao.deleteIp2GeoDataIndex(datasource.getIndices());
116+
117+
try {
118+
geoIpDataDao.deleteIp2GeoDataIndex(datasource.getIndices());
119+
} catch (Exception e) {
120+
if (previousState.equals(datasource.getState()) == false) {
121+
datasource.setState(previousState);
122+
datasourceDao.updateDatasource(datasource);
123+
}
124+
throw e;
125+
}
117126
datasourceDao.deleteDatasource(datasource);
118127
}
119128

src/test/java/org/opensearch/geospatial/ip2geo/action/DeleteDatasourceTransportActionTests.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import static org.mockito.ArgumentMatchers.any;
99
import static org.mockito.ArgumentMatchers.anyLong;
1010
import static org.mockito.ArgumentMatchers.eq;
11+
import static org.mockito.Mockito.doThrow;
1112
import static org.mockito.Mockito.mock;
1213
import static org.mockito.Mockito.never;
1314
import static org.mockito.Mockito.times;
@@ -162,4 +163,19 @@ public void testDeleteDatasource_whenProcessorIsCreatedDuringDeletion_thenThrowE
162163
verify(geoIpDataDao, never()).deleteIp2GeoDataIndex(datasource.getIndices());
163164
verify(datasourceDao, never()).deleteDatasource(datasource);
164165
}
166+
167+
@SneakyThrows
168+
public void testDeleteDatasource_whenDeleteFailsAfterStateIsChanged_thenRevertState() {
169+
Datasource datasource = randomDatasource();
170+
datasource.setState(DatasourceState.AVAILABLE);
171+
when(datasourceDao.getDatasource(datasource.getName())).thenReturn(datasource);
172+
doThrow(new RuntimeException()).when(geoIpDataDao).deleteIp2GeoDataIndex(datasource.getIndices());
173+
174+
// Run
175+
expectThrows(RuntimeException.class, () -> action.deleteDatasource(datasource.getName()));
176+
177+
// Verify
178+
verify(datasourceDao, times(2)).updateDatasource(datasource);
179+
assertEquals(DatasourceState.AVAILABLE, datasource.getState());
180+
}
165181
}

0 commit comments

Comments
 (0)