package mil.nga.giat.geowave.datastore.accumulo.query; import java.io.Closeable; import java.io.IOException; import java.util.Collection; import java.util.Iterator; import org.apache.accumulo.core.client.BatchDeleter; import org.apache.accumulo.core.client.MutationsRejectedException; import org.apache.accumulo.core.client.ScannerBase; import org.apache.accumulo.core.client.TableNotFoundException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import mil.nga.giat.geowave.core.store.CloseableIterator; import mil.nga.giat.geowave.core.store.CloseableIteratorWrapper; import mil.nga.giat.geowave.core.store.adapter.DataAdapter; import mil.nga.giat.geowave.core.store.callback.ScanCallback; import mil.nga.giat.geowave.core.store.filter.DedupeFilter; import mil.nga.giat.geowave.core.store.index.PrimaryIndex; import mil.nga.giat.geowave.datastore.accumulo.AccumuloOperations; public class AccumuloRowIdsDelete<T> extends AccumuloRowIdsQuery<T> { private static final Logger LOGGER = LoggerFactory.getLogger(AccumuloRowIdsDelete.class); public AccumuloRowIdsDelete( DataAdapter adapter, PrimaryIndex index, Collection rows, ScanCallback scanCallback, DedupeFilter dedupFilter, String[] authorizations ) { super( adapter, index, rows, scanCallback, dedupFilter, authorizations); } @Override protected boolean useWholeRowIterator() { return false; } @Override protected CloseableIterator<Object> initCloseableIterator( ScannerBase scanner, Iterator it ) { return new CloseableIteratorWrapper( new Closeable() { boolean closed = false; @Override public void close() throws IOException { if (!closed) { if (scanner instanceof BatchDeleter) { try { ((BatchDeleter) scanner).delete(); } catch (MutationsRejectedException | TableNotFoundException e) { LOGGER.warn( "Unable to delete rows by query constraints", e); } } scanner.close(); } closed = true; } }, it); } @Override protected ScannerBase createScanner( AccumuloOperations accumuloOperations, String tableName, boolean batchScanner, String... authorizations ) throws TableNotFoundException { BatchDeleter deleter = accumuloOperations.createBatchDeleter( tableName, authorizations); deleter.removeScanIterator(BatchDeleter.class.getName() + ".NOVALUE"); return deleter; } }