assertTrue(Vertex.class.isAssignableFrom(index1.getIndexedElement())); assertEquals("index2", index2.name()); assertEquals(INDEX, index3.getBackingIndex()); assertFalse(index2.isUnique()); assertEquals(2, index3.getFieldKeys().length); assertEquals(1, index1.getFieldKeys().length); assertEquals(3, index3.getParametersFor(text).length); assertEquals(2, index3.getParametersFor(weight).length); assertTrue(Vertex.class.isAssignableFrom(index1.getIndexedElement())); assertEquals("index2", index2.name()); assertEquals(INDEX, index3.getBackingIndex()); assertFalse(index2.isUnique()); assertEquals(2, index3.getFieldKeys().length); assertEquals(1, index1.getFieldKeys().length); assertEquals(3, index3.getParametersFor(text).length); assertEquals(2, index3.getParametersFor(weight).length); numV / strs.length, new boolean[]{true, true}, index2.name()); evaluateQuery(tx.query().has("text", Text.CONTAINS, strs[0]).has(LABEL_NAME, Cmp.EQUAL, "person").orderBy("weight", decr), ElementCategory.VERTEX, numV / strs.length, new boolean[]{true, true}, weight, Order.DESC, index2.name()); evaluateQuery(tx.query().has("text", Text.CONTAINS, strs[3]).has(LABEL_NAME, Cmp.EQUAL, "org"), ElementCategory.VERTEX, numV / strs.length, new boolean[]{true, true}, index3.name()); evaluateQuery(tx.query().has("text", Text.CONTAINS, strs[1]).has(LABEL_NAME, Cmp.EQUAL, "org").orderBy("weight", decr), ElementCategory.VERTEX, numV / strs.length, new boolean[]{true, true}, weight, Order.DESC, index3.name()); evaluateQuery(tx.query().has("text", Text.CONTAINS, strs[0]).has("weight", Cmp.EQUAL, 2.5).has(LABEL_NAME, Cmp.EQUAL, "person"), ElementCategory.VERTEX, numV / (modulo * strs.length), new boolean[]{true, true}, index2.name()); evaluateQuery(tx.query().has("name", Cmp.EQUAL, strs[2]).has(LABEL_NAME, Cmp.EQUAL, "person"), ElementCategory.VERTEX, numV / strs.length, new boolean[]{false, true}, index1.name());
String invalidIndexHint; if (index instanceof RelationTypeIndex || (index instanceof TitanGraphIndex && ((TitanGraphIndex)index).isCompositeIndex()) ) { SchemaStatus actualStatus = schemaVertex.getStatus(); isValidIndex = acceptableStatuses.contains(actualStatus); Preconditions.checkArgument(index instanceof TitanGraphIndex,"Unexpected index: %s",index); TitanGraphIndex gindex = (TitanGraphIndex)index; Preconditions.checkArgument(gindex.isMixedIndex()); Map<String, SchemaStatus> invalidKeyStatuses = new HashMap<>(); int acceptableFields = 0; for (PropertyKey key : gindex.getFieldKeys()) { SchemaStatus status = gindex.getIndexStatus(key); if (status!=SchemaStatus.DISABLED && !acceptableStatuses.contains(status)) { isValidIndex=false;
mgmt = g.openManagement(); idx = mgmt.getGraphIndex(graphIndexName); for (PropertyKey pk : idx.getFieldKeys()) { SchemaStatus s = idx.getIndexStatus(pk); LOGGER.debug("Key {} has status {}", pk, s); if (!status.equals(s))
assertEquals(1, gindex.getFieldKeys().length); assertEquals(name, gindex.getFieldKeys()[0].name()); assertEquals("internalindex", gindex.getBackingIndex()); assertEquals(SchemaStatus.ENABLED, gindex.getIndexStatus(gindex.getFieldKeys()[0])); finishSchema();
assertTrue(vertex1.isUnique()); assertFalse(edge2.isUnique()); assertEquals("prop1", prop1.name()); assertTrue(Vertex.class.isAssignableFrom(vertex3.getIndexedElement())); assertTrue(TitanVertexProperty.class.isAssignableFrom(prop1.getIndexedElement())); assertTrue(Edge.class.isAssignableFrom(edge2.getIndexedElement())); assertEquals(2, vertex2.getFieldKeys().length); assertEquals(1, vertex1.getFieldKeys().length); assertTrue(vertex1.isUnique()); assertFalse(edge2.isUnique()); assertEquals("prop1", prop1.name()); assertTrue(Vertex.class.isAssignableFrom(vertex3.getIndexedElement())); assertTrue(TitanVertexProperty.class.isAssignableFrom(prop1.getIndexedElement())); assertTrue(Edge.class.isAssignableFrom(edge2.getIndexedElement())); assertEquals(2, vertex2.getFieldKeys().length); assertEquals(1, vertex1.getFieldKeys().length); ElementCategory.EDGE, 1, new boolean[]{true, sorted}, edge1.name()); evaluateQuery(tx.query().has("time", Contain.IN, ImmutableList.of(10, 20, 30)).has("weight", Cmp.EQUAL, 0), ElementCategory.EDGE, 3, new boolean[]{true, sorted}, edge1.name()); evaluateQuery(tx.query().has("time", Cmp.EQUAL, 10).has("weight", Cmp.EQUAL, 0).has("text", Cmp.EQUAL, strs[10 % strs.length]), ElementCategory.EDGE, 1, new boolean[]{false, sorted}, edge1.name()); evaluateQuery(tx.query().has("time", Cmp.EQUAL, 10).has("weight", Cmp.EQUAL, 1), ElementCategory.EDGE, 1, new boolean[]{true, sorted}, edge1.name()); evaluateQuery(tx.query().has("time", Cmp.EQUAL, 20).has("weight", Cmp.EQUAL, 0), ElementCategory.EDGE, 1, new boolean[]{true, sorted}, edge1.name()); evaluateQuery(tx.query().has("time", Cmp.EQUAL, 20).has("weight", Cmp.EQUAL, 3), ElementCategory.EDGE, 0, new boolean[]{true, sorted}, edge1.name());
assertTrue(Vertex.class.isAssignableFrom(index1.getIndexedElement())); assertEquals("index2",index2.getName()); assertEquals(INDEX,index3.getBackingIndex()); assertFalse(index2.isUnique()); assertEquals(2,index3.getFieldKeys().length); assertEquals(1,index1.getFieldKeys().length); assertEquals(3,index3.getParametersFor(text).length); assertEquals(2,index3.getParametersFor(weight).length); assertTrue(Vertex.class.isAssignableFrom(index1.getIndexedElement())); assertEquals("index2",index2.getName()); assertEquals(INDEX,index3.getBackingIndex()); assertFalse(index2.isUnique()); assertEquals(2,index3.getFieldKeys().length); assertEquals(1,index1.getFieldKeys().length); assertEquals(3,index3.getParametersFor(text).length); assertEquals(2,index3.getParametersFor(weight).length); numV/strs.length,new boolean[]{true,true},index2.getName()); evaluateQuery(tx.query().has(text,Text.CONTAINS,strs[0]).has("label",Cmp.EQUAL,person.getName()).orderBy(weight,Order.DESC),ElementCategory.VERTEX, numV/strs.length,new boolean[]{true,true},weight,Order.DESC,index2.getName()); evaluateQuery(tx.query().has(text,Text.CONTAINS,strs[3]).has("label",Cmp.EQUAL,org.getName()),ElementCategory.VERTEX, numV/strs.length,new boolean[]{true,true},index3.getName()); evaluateQuery(tx.query().has(text,Text.CONTAINS,strs[1]).has("label",Cmp.EQUAL,org.getName()).orderBy(weight,Order.DESC),ElementCategory.VERTEX, numV/strs.length,new boolean[]{true,true},weight,Order.DESC,index3.getName()); evaluateQuery(tx.query().has(text,Text.CONTAINS,strs[0]).has(weight,Cmp.EQUAL,2.5).has("label",Cmp.EQUAL,person.getName()),ElementCategory.VERTEX, numV/(modulo*strs.length),new boolean[]{true,true},index2.getName()); evaluateQuery(tx.query().has(name,Cmp.EQUAL,strs[2]).has("label",Cmp.EQUAL,person.getName()),ElementCategory.VERTEX, numV/strs.length,new boolean[]{false,true},index1.getName());
assertTrue(vertex1.isUnique()); assertFalse(edge2.isUnique()); assertEquals("prop1",prop1.getName()); assertTrue(Vertex.class.isAssignableFrom(vertex3.getIndexedElement())); assertTrue(TitanProperty.class.isAssignableFrom(prop1.getIndexedElement())); assertTrue(Edge.class.isAssignableFrom(edge2.getIndexedElement())); assertEquals(2,vertex2.getFieldKeys().length); assertEquals(1,vertex1.getFieldKeys().length); assertTrue(vertex1.isUnique()); assertFalse(edge2.isUnique()); assertEquals("prop1",prop1.getName()); assertTrue(Vertex.class.isAssignableFrom(vertex3.getIndexedElement())); assertTrue(TitanProperty.class.isAssignableFrom(prop1.getIndexedElement())); assertTrue(Edge.class.isAssignableFrom(edge2.getIndexedElement())); assertEquals(2,vertex2.getFieldKeys().length); assertEquals(1,vertex1.getFieldKeys().length); ElementCategory.EDGE,1,new boolean[]{true,sorted},edge1.getName()); evaluateQuery(tx.query().has(time,Contain.IN,ImmutableList.of(10,20,30)).has(weight,Cmp.EQUAL,0), ElementCategory.EDGE,3,new boolean[]{true,sorted},edge1.getName()); evaluateQuery(tx.query().has(time,Cmp.EQUAL,10).has(weight,Cmp.EQUAL,0).has(text,Cmp.EQUAL,strs[10%strs.length]), ElementCategory.EDGE,1,new boolean[]{false,sorted},edge1.getName()); evaluateQuery(tx.query().has(time,Cmp.EQUAL,10).has(weight,Cmp.EQUAL,1), ElementCategory.EDGE,1,new boolean[]{true,sorted},edge1.getName()); evaluateQuery(tx.query().has(time,Cmp.EQUAL,20).has(weight,Cmp.EQUAL,0), ElementCategory.EDGE,1,new boolean[]{true,sorted},edge1.getName()); evaluateQuery(tx.query().has(time,Cmp.EQUAL,20).has(weight,Cmp.EQUAL,3), ElementCategory.EDGE,0,new boolean[]{true,sorted},edge1.getName());
if (!updateAction.isApplicableStatus(schemaVertex.getStatus())) return null; for (PropertyKey key : ((TitanGraphIndex) index).getFieldKeys()) { dependentTypes.add((PropertyKeyVertex) key); } else { TitanGraphIndex gindex = (TitanGraphIndex) index; if (gindex.isMixedIndex()) throw new UnsupportedOperationException("External mixed indexes must be removed in the indexing system directly."); builder = graph.getBackend().buildGraphIndexScanJob();
@Override protected void validateIndexStatus() { if (index instanceof RelationTypeIndex) { //Nothing specific to be done } else if (index instanceof TitanGraphIndex) { TitanGraphIndex gindex = (TitanGraphIndex)index; if (gindex.isMixedIndex()) throw new UnsupportedOperationException("Cannot remove mixed indexes through Titan. This can " + "only be accomplished in the indexing system directly."); CompositeIndexType indexType = (CompositeIndexType)mgmt.getSchemaVertex(index).asIndexType(); graphIndexId = indexType.getID(); } else throw new UnsupportedOperationException("Unsupported index found: "+index); //Must be a relation type index or a composite graph index TitanSchemaVertex schemaVertex = mgmt.getSchemaVertex(index); SchemaStatus actualStatus = schemaVertex.getStatus(); Preconditions.checkArgument(actualStatus==SchemaStatus.DISABLED,"The index [%s] must be disabled before it can be removed",indexName); }
@Override public Set<AtlasPropertyKey> getFieldKeys() { PropertyKey[] keys = wrappedIndex.getFieldKeys(); Set<AtlasPropertyKey> result = new HashSet<>(); for(PropertyKey key : keys) { result.add(GraphDbObjectFactory.createPropertyKey(key)); } return result; }
assertEquals(1, sig.length); assertEquals(weight.longId(), sig[0]); assertTrue(mgmt.getGraphIndex(uid.name()).isUnique()); assertFalse(mgmt.getGraphIndex(someid.name()).isUnique()); assertEquals(1, sig.length); assertEquals(weight.longId(), sig[0]); assertTrue(mgmt.getGraphIndex(uid.name()).isUnique()); assertFalse(mgmt.getGraphIndex(someid.name()).isUnique());
@Override public boolean isEdgeIndex() { return Edge.class.isAssignableFrom(wrappedIndex.getIndexedElement()); }
if (parameters == null) parameters = new Parameter[0]; IndexType indexType = ((TitanGraphIndexWrapper) index).getBaseIndex(); Preconditions.checkArgument(indexType instanceof MixedIndexType, "Can only add keys to an external index, not %s", index.name()); Preconditions.checkArgument(indexType instanceof IndexTypeWrapper && key instanceof TitanSchemaVertex && ((IndexTypeWrapper) indexType).getSchemaBase() instanceof TitanSchemaVertex); Preconditions.checkArgument(!field.getFieldKey().equals(key), "Key [%s] has already been added to index %s", key.name(), index.name());
@Override public boolean isCompositeIndex() { return wrappedIndex.isCompositeIndex(); }
if (parameters==null) parameters=new Parameter[0]; IndexType indexType = ((TitanGraphIndexWrapper)index).getBaseIndex(); Preconditions.checkArgument(indexType instanceof MixedIndexType,"Can only add keys to an external index, not %s",index.getName()); Preconditions.checkArgument(indexType instanceof IndexTypeWrapper && key instanceof TitanSchemaVertex && ((IndexTypeWrapper)indexType).getSchemaBase() instanceof TitanSchemaVertex); Preconditions.checkArgument(!field.getFieldKey().equals(key),"Key [%s] has already been added to index %s",key.getName(),index.getName());
Preconditions.checkArgument(idx!=null,"Index could not be found: %s",indexName); isStable = true; for (PropertyKey key : idx.getFieldKeys()) { if (!idx.getIndexStatus(key).isStable()) isStable = false;
if (!updateAction.isApplicableStatus(schemaVertex.getStatus())) return null; for (PropertyKey key : ((TitanGraphIndex) index).getFieldKeys()) { dependentTypes.add((PropertyKeyVertex) key); } else { TitanGraphIndex gindex = (TitanGraphIndex) index; if (gindex.isMixedIndex()) throw new UnsupportedOperationException("External mixed indexes must be removed in the indexing system directly."); builder = graph.getBackend().buildGraphIndexScanJob();
} else { TitanGraphIndex gindex = (TitanGraphIndex)index; if (gindex.isMixedIndex() && !updateAction.equals(SchemaAction.REINDEX)) throw new UnsupportedOperationException("External mixed indexes must be removed in the indexing system directly.");
@Override public Set<AtlasPropertyKey> getFieldKeys() { PropertyKey[] keys = wrapped.getFieldKeys(); Set<AtlasPropertyKey> result = new HashSet<AtlasPropertyKey>(); for(PropertyKey key : keys) { result.add(GraphDbObjectFactory.createPropertyKey(key)); } return result; }
@Override public boolean isUnique() { return wrapped.isUnique(); }