use of com.thinkaurelius.titan.core.TitanException in project titan by thinkaurelius.
the class IndexRemoveJob method process.
@Override
public void process(StaticBuffer key, Map<SliceQuery, EntryList> entries, ScanMetrics metrics) {
//The queries are already tailored enough => everything should be removed
try {
BackendTransaction mutator = writeTx.getTxHandle();
final List<Entry> deletions;
if (entries.size() == 1)
deletions = Iterables.getOnlyElement(entries.values());
else {
int size = IteratorUtils.stream(entries.values().iterator()).map(e -> e.size()).reduce(0, (x, y) -> x + y);
deletions = new ArrayList<>(size);
entries.values().forEach(e -> deletions.addAll(e));
}
metrics.incrementCustom(DELETED_RECORDS_COUNT, deletions.size());
if (isRelationTypeIndex()) {
mutator.mutateEdges(key, KCVSCache.NO_ADDITIONS, deletions);
} else {
mutator.mutateIndex(key, KCVSCache.NO_ADDITIONS, deletions);
}
} catch (final Exception e) {
mgmt.rollback();
writeTx.rollback();
metrics.incrementCustom(FAILED_TX);
throw new TitanException(e.getMessage(), e);
}
}
use of com.thinkaurelius.titan.core.TitanException in project titan by thinkaurelius.
the class IDPoolTest method testAllocationTimeoutAndRecovery.
@Test
public void testAllocationTimeoutAndRecovery() throws BackendException {
IMocksControl ctrl = EasyMock.createStrictControl();
final int partition = 42;
final int idNamespace = 777;
final Duration timeout = Duration.ofSeconds(1L);
final IDAuthority mockAuthority = ctrl.createMock(IDAuthority.class);
// Sleep for two seconds, then throw a backendexception
// this whole delegate could be deleted if we abstracted StandardIDPool's internal executor and stopwatches
expect(mockAuthority.getIDBlock(partition, idNamespace, timeout)).andDelegateTo(new IDAuthority() {
@Override
public IDBlock getIDBlock(int partition, int idNamespace, Duration timeout) throws BackendException {
try {
Thread.sleep(2000L);
} catch (InterruptedException e) {
fail();
}
throw new TemporaryBackendException("slow backend");
}
@Override
public List<KeyRange> getLocalIDPartition() throws BackendException {
throw new IllegalArgumentException();
}
@Override
public void setIDBlockSizer(IDBlockSizer sizer) {
throw new IllegalArgumentException();
}
@Override
public void close() throws BackendException {
throw new IllegalArgumentException();
}
@Override
public String getUniqueID() {
throw new IllegalArgumentException();
}
@Override
public boolean supportsInterruption() {
return true;
}
});
expect(mockAuthority.getIDBlock(partition, idNamespace, timeout)).andReturn(new IDBlock() {
@Override
public long numIds() {
return 2;
}
@Override
public long getId(long index) {
return 200;
}
});
expect(mockAuthority.supportsInterruption()).andStubReturn(true);
ctrl.replay();
StandardIDPool pool = new StandardIDPool(mockAuthority, partition, idNamespace, Integer.MAX_VALUE, timeout, 0.1);
try {
pool.nextID();
fail();
} catch (TitanException e) {
}
long nextID = pool.nextID();
assertEquals(200, nextID);
ctrl.verify();
}
use of com.thinkaurelius.titan.core.TitanException in project titan by thinkaurelius.
the class IndexUpdateJob method workerIterationStart.
public void workerIterationStart(TitanGraph graph, Configuration config, ScanMetrics metrics) {
this.graph = (StandardTitanGraph) graph;
Preconditions.checkArgument(config.has(GraphDatabaseConfiguration.JOB_START_TIME), "Invalid configuration for this job. Start time is required.");
this.jobStartTime = Instant.ofEpochMilli(config.get(GraphDatabaseConfiguration.JOB_START_TIME));
if (indexName == null) {
Preconditions.checkArgument(config.has(INDEX_NAME), "Need to configure the name of the index to be repaired");
indexName = config.get(INDEX_NAME);
indexRelationTypeName = config.get(INDEX_RELATION_TYPE);
log.info("Read index information: name={} type={}", indexName, indexRelationTypeName);
}
try {
this.mgmt = (ManagementSystem) graph.openManagement();
if (isGlobalGraphIndex()) {
index = mgmt.getGraphIndex(indexName);
} else {
indexRelationType = mgmt.getRelationType(indexRelationTypeName);
Preconditions.checkArgument(indexRelationType != null, "Could not find relation type: %s", indexRelationTypeName);
index = mgmt.getRelationIndex(indexRelationType, indexName);
}
Preconditions.checkArgument(index != null, "Could not find index: %s [%s]", indexName, indexRelationTypeName);
log.info("Found index {}", indexName);
validateIndexStatus();
StandardTransactionBuilder txb = this.graph.buildTransaction();
txb.commitTime(jobStartTime);
writeTx = (StandardTitanTx) txb.start();
} catch (final Exception e) {
if (null != mgmt && mgmt.isOpen())
mgmt.rollback();
if (writeTx != null && writeTx.isOpen())
writeTx.rollback();
metrics.incrementCustom(FAILED_TX);
throw new TitanException(e.getMessage(), e);
}
}
use of com.thinkaurelius.titan.core.TitanException in project titan by thinkaurelius.
the class StandardIDPool method close.
@Override
public synchronized void close() {
closed = true;
try {
waitForIDBlockGetter();
} catch (InterruptedException e) {
throw new TitanException("Interrupted while waiting for id renewer thread to finish", e);
}
for (Future<?> closeBlocker : closeBlockers) {
try {
closeBlocker.get();
} catch (InterruptedException e) {
throw new TitanException("Interrupted while waiting for runaway ID renewer task " + closeBlocker, e);
} catch (ExecutionException e) {
log.debug("Runaway ID renewer task completed with exception", e);
}
}
exec.shutdownNow();
}
Aggregations