use of org.iq80.leveldb.DBException in project tez by apache.
the class ShuffleHandler method removeJobShuffleInfo.
private void removeJobShuffleInfo(JobID jobId) throws IOException {
String jobIdStr = jobId.toString();
secretManager.removeTokenForJob(jobIdStr);
userRsrc.remove(jobIdStr);
if (stateDb != null) {
try {
stateDb.delete(bytes(jobIdStr));
} catch (DBException e) {
throw new IOException("Unable to remove " + jobId + " from state store", e);
}
}
}
use of org.iq80.leveldb.DBException in project cdap by caskdata.
the class LevelDBMessageTable method pruneMessages.
/**
* Delete messages of a {@link TopicId} that has exceeded the TTL or if it belongs to an older generation
*
* @param topicMetadata {@link TopicMetadata}
* @param currentTime current timestamp
* @throws IOException error occurred while trying to delete a row in LevelDB
*/
public void pruneMessages(TopicMetadata topicMetadata, long currentTime) throws IOException {
WriteBatch writeBatch = levelDB.createWriteBatch();
long ttlInMs = TimeUnit.SECONDS.toMillis(topicMetadata.getTTL());
byte[] startRow = MessagingUtils.toDataKeyPrefix(topicMetadata.getTopicId(), Integer.parseInt(MessagingUtils.Constants.DEFAULT_GENERATION));
byte[] stopRow = Bytes.stopKeyForPrefix(startRow);
try (CloseableIterator<Map.Entry<byte[], byte[]>> rowIterator = new DBScanIterator(levelDB, startRow, stopRow)) {
while (rowIterator.hasNext()) {
Map.Entry<byte[], byte[]> entry = rowIterator.next();
MessageTable.Entry messageTableEntry = new ImmutableMessageTableEntry(entry.getKey(), null, null);
int dataGeneration = messageTableEntry.getGeneration();
int currGeneration = topicMetadata.getGeneration();
if (MessagingUtils.isOlderGeneration(dataGeneration, currGeneration)) {
writeBatch.delete(entry.getKey());
continue;
}
if ((dataGeneration == Math.abs(currGeneration)) && ((currentTime - messageTableEntry.getPublishTimestamp()) > ttlInMs)) {
writeBatch.delete(entry.getKey());
} else {
// since the entries are sorted by time.
break;
}
}
}
try {
levelDB.write(writeBatch, WRITE_OPTIONS);
} catch (DBException ex) {
throw new IOException(ex);
}
}
use of org.iq80.leveldb.DBException in project cdap by caskdata.
the class LevelDBPayloadTable method pruneMessages.
/**
* Delete messages of a {@link TopicId} that has exceeded the TTL or if it belongs to an older generation
*
* @param topicMetadata {@link TopicMetadata}
* @param currentTime current timestamp
* @throws IOException error occurred while trying to delete a row in LevelDB
*/
public void pruneMessages(TopicMetadata topicMetadata, long currentTime) throws IOException {
WriteBatch writeBatch = levelDB.createWriteBatch();
long ttlInMs = TimeUnit.SECONDS.toMillis(topicMetadata.getTTL());
byte[] startRow = MessagingUtils.toDataKeyPrefix(topicMetadata.getTopicId(), Integer.parseInt(MessagingUtils.Constants.DEFAULT_GENERATION));
byte[] stopRow = Bytes.stopKeyForPrefix(startRow);
try (CloseableIterator<Map.Entry<byte[], byte[]>> rowIterator = new DBScanIterator(levelDB, startRow, stopRow)) {
while (rowIterator.hasNext()) {
Map.Entry<byte[], byte[]> entry = rowIterator.next();
PayloadTable.Entry payloadTableEntry = new ImmutablePayloadTableEntry(entry.getKey(), entry.getValue());
int dataGeneration = payloadTableEntry.getGeneration();
int currGeneration = topicMetadata.getGeneration();
if (MessagingUtils.isOlderGeneration(dataGeneration, currGeneration)) {
writeBatch.delete(entry.getKey());
continue;
}
if ((dataGeneration == Math.abs(currGeneration)) && ((currentTime - payloadTableEntry.getPayloadWriteTimestamp()) > ttlInMs)) {
writeBatch.delete(entry.getKey());
} else {
// since the entries are sorted by time.
break;
}
}
}
try {
levelDB.write(writeBatch, WRITE_OPTIONS);
} catch (DBException ex) {
throw new IOException(ex);
}
}
use of org.iq80.leveldb.DBException in project cdap by caskdata.
the class LevelDBMetadataTable method deleteTopic.
@Override
public void deleteTopic(TopicId topicId) throws TopicNotFoundException, IOException {
byte[] rowKey = MessagingUtils.toMetadataRowKey(topicId);
try {
synchronized (this) {
byte[] tableValue = levelDB.get(rowKey);
if (tableValue == null) {
throw new TopicNotFoundException(topicId.getNamespace(), topicId.getTopic());
}
Map<String, String> oldProperties = GSON.fromJson(Bytes.toString(tableValue), MAP_TYPE);
TopicMetadata metadata = new TopicMetadata(topicId, oldProperties);
if (!metadata.exists()) {
throw new TopicNotFoundException(topicId.getNamespace(), topicId.getTopic());
}
// Mark the topic as deleted
TreeMap<String, String> newProperties = new TreeMap<>(metadata.getProperties());
newProperties.put(TopicMetadata.GENERATION_KEY, Integer.toString(-1 * metadata.getGeneration()));
levelDB.put(rowKey, Bytes.toBytes(GSON.toJson(newProperties, MAP_TYPE)), WRITE_OPTIONS);
}
} catch (DBException e) {
throw new IOException(e);
}
}
use of org.iq80.leveldb.DBException in project aion by aionnetwork.
the class LevelDB method putBatchInternal.
@Override
public void putBatchInternal(Map<byte[], byte[]> input) {
// try-with-resources will automatically close the batch object
try (WriteBatch batch = db.createWriteBatch()) {
// add put and delete operations to batch
for (Map.Entry<byte[], byte[]> e : input.entrySet()) {
byte[] key = e.getKey();
byte[] value = e.getValue();
batch.put(key, value);
}
// bulk atomic update
db.write(batch);
} catch (DBException e) {
LOG.error("Unable to execute batch put/update operation on " + this.toString() + ".", e);
} catch (IOException e) {
LOG.error("Unable to close WriteBatch object in " + this.toString() + ".", e);
}
}
Aggregations