use of org.janusgraph.core.JanusGraphException in project janusgraph by JanusGraph.
the class IndexUpdateJob method workerIterationStart.
public void workerIterationStart(JanusGraph graph, Configuration config, ScanMetrics metrics) {
this.graph = (StandardJanusGraph) 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.managementSystem = (ManagementSystem) graph.openManagement();
if (isGlobalGraphIndex()) {
index = managementSystem.getGraphIndex(indexName);
} else {
indexRelationType = managementSystem.getRelationType(indexRelationTypeName);
Preconditions.checkArgument(indexRelationType != null, "Could not find relation type: %s", indexRelationTypeName);
index = managementSystem.getRelationIndex(indexRelationType, indexName);
}
Preconditions.checkArgument(index != null, "Could not find index: %s [%s]", indexName, indexRelationTypeName);
log.debug("Found index {}", indexName);
validateIndexStatus();
StandardTransactionBuilder txb = this.graph.buildTransaction();
txb.commitTime(jobStartTime);
writeTx = (StandardJanusGraphTx) txb.start();
} catch (final Exception e) {
if (null != managementSystem && managementSystem.isOpen())
managementSystem.rollback();
if (writeTx != null && writeTx.isOpen())
writeTx.rollback();
metrics.incrementCustom(FAILED_TX);
throw new JanusGraphException(e.getMessage(), e);
}
}
use of org.janusgraph.core.JanusGraphException in project janusgraph by JanusGraph.
the class KCVSConfigurationBuilder method buildConfiguration.
public KCVSConfiguration buildConfiguration(final BackendOperation.TransactionalProvider txProvider, final KeyColumnValueStore store, final String identifier, final Configuration config) {
try {
KCVSConfiguration keyColumnValueStoreConfiguration = new KCVSConfiguration(txProvider, config, store, identifier);
keyColumnValueStoreConfiguration.setMaxOperationWaitTime(config.get(SETUP_WAITTIME));
return keyColumnValueStoreConfiguration;
} catch (BackendException e) {
throw new JanusGraphException("Could not open global configuration", e);
}
}
use of org.janusgraph.core.JanusGraphException in project janusgraph by JanusGraph.
the class ManagementSystem method removeGhostVertices.
@Override
public ScanJobFuture removeGhostVertices(int numOfThreads) {
StandardScanner.Builder builder = graph.getBackend().buildEdgeScanJob();
builder.setJob(new GhostVertexRemover(graph));
builder.setNumProcessingThreads(numOfThreads);
ScanJobFuture future;
try {
future = builder.execute();
} catch (BackendException e) {
throw new JanusGraphException(e);
}
return future;
}
use of org.janusgraph.core.JanusGraphException in project janusgraph by JanusGraph.
the class ManagementSystem method updateIndex.
@Override
public ScanJobFuture updateIndex(Index index, SchemaAction updateAction, int numOfThreads) {
Preconditions.checkArgument(index != null, "Need to provide an index");
Preconditions.checkArgument(updateAction != null, "Need to provide update action");
JanusGraphSchemaVertex schemaVertex = getSchemaVertex(index);
Set<JanusGraphSchemaVertex> dependentTypes;
Set<PropertyKeyVertex> keySubset = Collections.emptySet();
if (index instanceof RelationTypeIndex) {
dependentTypes = Collections.singleton((JanusGraphSchemaVertex) ((InternalRelationType) schemaVertex).getBaseType());
if (!updateAction.isApplicableStatus(schemaVertex.getStatus()))
return null;
} else if (index instanceof JanusGraphIndex) {
IndexType indexType = schemaVertex.asIndexType();
dependentTypes = new HashSet<>();
if (indexType.isCompositeIndex()) {
if (!updateAction.isApplicableStatus(schemaVertex.getStatus()))
return null;
for (PropertyKey key : ((JanusGraphIndex) index).getFieldKeys()) {
dependentTypes.add((PropertyKeyVertex) key);
}
} else {
keySubset = new HashSet<>();
MixedIndexType mixedIndexType = (MixedIndexType) indexType;
Set<SchemaStatus> applicableStatus = updateAction.getApplicableStatus();
for (ParameterIndexField field : mixedIndexType.getFieldKeys()) {
if (applicableStatus.contains(field.getStatus()))
keySubset.add((PropertyKeyVertex) field.getFieldKey());
}
if (keySubset.isEmpty())
return null;
dependentTypes.addAll(keySubset);
}
} else
throw new UnsupportedOperationException("Updates not supported for index: " + index);
IndexIdentifier indexId = new IndexIdentifier(index);
StandardScanner.Builder builder;
ScanJobFuture future;
switch(updateAction) {
case REGISTER_INDEX:
setStatus(schemaVertex, SchemaStatus.INSTALLED, keySubset);
updatedTypes.add(schemaVertex);
updatedTypes.addAll(dependentTypes);
setUpdateTrigger(new UpdateStatusTrigger(graph, schemaVertex, SchemaStatus.REGISTERED, keySubset));
future = new EmptyScanJobFuture();
break;
case REINDEX:
builder = graph.getBackend().buildEdgeScanJob();
builder.setFinishJob(indexId.getIndexJobFinisher(graph, SchemaAction.ENABLE_INDEX));
builder.setJobId(indexId);
builder.setNumProcessingThreads(numOfThreads);
builder.setJob(VertexJobConverter.convert(graph, new IndexRepairJob(indexId.indexName, indexId.relationTypeName)));
try {
future = builder.execute();
} catch (BackendException e) {
throw new JanusGraphException(e);
}
break;
case ENABLE_INDEX:
setStatus(schemaVertex, SchemaStatus.ENABLED, keySubset);
updatedTypes.add(schemaVertex);
if (!keySubset.isEmpty())
updatedTypes.addAll(dependentTypes);
future = new EmptyScanJobFuture();
break;
case DISABLE_INDEX:
setStatus(schemaVertex, SchemaStatus.INSTALLED, keySubset);
updatedTypes.add(schemaVertex);
if (!keySubset.isEmpty())
updatedTypes.addAll(dependentTypes);
setUpdateTrigger(new UpdateStatusTrigger(graph, schemaVertex, SchemaStatus.DISABLED, keySubset));
future = new EmptyScanJobFuture();
break;
case REMOVE_INDEX:
if (index instanceof RelationTypeIndex) {
builder = graph.getBackend().buildEdgeScanJob();
} else {
JanusGraphIndex graphIndex = (JanusGraphIndex) index;
if (graphIndex.isMixedIndex())
throw new UnsupportedOperationException("External mixed indexes must be removed in the indexing system directly.");
builder = graph.getBackend().buildGraphIndexScanJob();
}
builder.setFinishJob(indexId.getIndexJobFinisher());
builder.setJobId(indexId);
builder.setNumProcessingThreads(numOfThreads);
builder.setJob(new IndexRemoveJob(graph, indexId.indexName, indexId.relationTypeName));
try {
future = builder.execute();
} catch (BackendException e) {
throw new JanusGraphException(e);
}
break;
default:
throw new UnsupportedOperationException("Update action not supported: " + updateAction);
}
return future;
}
use of org.janusgraph.core.JanusGraphException in project janusgraph by JanusGraph.
the class StandardIDPool method close.
@Override
public synchronized void close() {
closed = true;
try {
waitForIDBlockGetter();
} catch (InterruptedException e) {
throw new JanusGraphException("Interrupted while waiting for id renewer thread to finish", e);
}
for (Future<?> closeBlocker : closeBlockers) {
try {
closeBlocker.get();
} catch (InterruptedException e) {
throw new JanusGraphException("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