diff --git a/hugegraph-api/src/main/java/com/baidu/hugegraph/api/GraphsAPI.java b/hugegraph-api/src/main/java/com/baidu/hugegraph/api/GraphsAPI.java index 16f15c2923..bd085bfbba 100644 --- a/hugegraph-api/src/main/java/com/baidu/hugegraph/api/GraphsAPI.java +++ b/hugegraph-api/src/main/java/com/baidu/hugegraph/api/GraphsAPI.java @@ -37,13 +37,10 @@ import javax.ws.rs.core.Context; import javax.ws.rs.core.SecurityContext; -import org.apache.tinkerpop.gremlin.structure.Edge; -import org.apache.tinkerpop.gremlin.structure.Vertex; import org.slf4j.Logger; import com.baidu.hugegraph.HugeGraph; import com.baidu.hugegraph.core.GraphManager; -import com.baidu.hugegraph.schema.SchemaManager; import com.baidu.hugegraph.server.RestServer; import com.baidu.hugegraph.type.define.GraphMode; import com.baidu.hugegraph.util.E; @@ -129,27 +126,7 @@ public void clear(@Context GraphManager manager, throw new IllegalArgumentException(String.format( "Please take the message: %s", CONFIRM_CLEAR)); } - - // Clear vertex and edge - commit(g, () -> { - g.traversal().E().toStream().forEach(Edge::remove); - g.traversal().V().toStream().forEach(Vertex::remove); - }); - - // Schema operation will auto commit - SchemaManager schema = g.schema(); - schema.getIndexLabels().forEach(elem -> { - schema.indexLabel(elem.name()).remove(); - }); - schema.getEdgeLabels().forEach(elem -> { - schema.edgeLabel(elem.name()).remove(); - }); - schema.getVertexLabels().forEach(elem -> { - schema.vertexLabel(elem.name()).remove(); - }); - schema.getPropertyKeys().forEach(elem -> { - schema.propertyKey(elem.name()).remove(); - }); + g.truncateBackend(); } @PUT diff --git a/hugegraph-api/src/main/java/com/baidu/hugegraph/auth/HugeGraphAuthProxy.java b/hugegraph-api/src/main/java/com/baidu/hugegraph/auth/HugeGraphAuthProxy.java index 765ed7141d..b7afbe2bf0 100644 --- a/hugegraph-api/src/main/java/com/baidu/hugegraph/auth/HugeGraphAuthProxy.java +++ b/hugegraph-api/src/main/java/com/baidu/hugegraph/auth/HugeGraphAuthProxy.java @@ -178,6 +178,12 @@ public void clearBackend() { this.hugegraph.clearBackend(); } + @Override + public void truncateBackend() { + this.verifyPermission(ROLE_ADMIN); + this.hugegraph.truncateBackend(); + } + private void verifyPermission() { /* * The owner role should match the graph name diff --git a/hugegraph-cassandra/src/main/java/com/baidu/hugegraph/backend/store/cassandra/CassandraSessionPool.java b/hugegraph-cassandra/src/main/java/com/baidu/hugegraph/backend/store/cassandra/CassandraSessionPool.java index b80c1481a4..5a2d8457de 100644 --- a/hugegraph-cassandra/src/main/java/com/baidu/hugegraph/backend/store/cassandra/CassandraSessionPool.java +++ b/hugegraph-cassandra/src/main/java/com/baidu/hugegraph/backend/store/cassandra/CassandraSessionPool.java @@ -222,6 +222,10 @@ public void open() { this.session = cluster().connect(keyspace()); } + public boolean opened() { + return this.session != null; + } + @Override public boolean closed() { if (this.session == null) { diff --git a/hugegraph-cassandra/src/main/java/com/baidu/hugegraph/backend/store/cassandra/CassandraStore.java b/hugegraph-cassandra/src/main/java/com/baidu/hugegraph/backend/store/cassandra/CassandraStore.java index 3c8caec96e..0e749614b2 100644 --- a/hugegraph-cassandra/src/main/java/com/baidu/hugegraph/backend/store/cassandra/CassandraStore.java +++ b/hugegraph-cassandra/src/main/java/com/baidu/hugegraph/backend/store/cassandra/CassandraStore.java @@ -19,8 +19,11 @@ package com.baidu.hugegraph.backend.store.cassandra; +import java.util.ArrayList; +import java.util.Collection; import java.util.HashMap; import java.util.Iterator; +import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; @@ -84,7 +87,7 @@ public CassandraStore(final BackendStoreProvider provider, private void registerMetaHandlers() { this.registerMetaHandler("metrics", (session, meta, args) -> { - CassandraMetrics metrics = new CassandraMetrics(cluster(), conf); + CassandraMetrics metrics = new CassandraMetrics(cluster(), this.conf); return metrics.getMetrics(); }); } @@ -243,12 +246,25 @@ public BackendFeatures features() { @Override public void init() { this.checkClusterConnected(); - this.initKeyspace(); + if (this.sessions.session().opened()) { + // Session has ever been opened. + LOG.warn("Session has ever been opened(exist keyspace '{}' before)", + this.keyspace); + } else { + // Create keyspace if needed + if (!this.existsKeyspace()) { + this.initKeyspace(); + } + // Open session explicitly to get the exception when it fails + this.sessions.session().open(); + } + + // Create tables this.checkSessionConnected(); this.initTables(); - LOG.info("Store initialized: {}", this.store); + LOG.debug("Store initialized: {}", this.store); } @Override @@ -261,7 +277,15 @@ public void clear() { this.clearKeyspace(); } - LOG.info("Store cleared: {}", this.store); + LOG.debug("Store cleared: {}", this.store); + } + + @Override + public void truncate() { + this.checkSessionConnected(); + + this.truncateTables(); + LOG.debug("Store truncated: {}", this.store); } @Override @@ -359,7 +383,8 @@ protected void initKeyspace() { replication.putIfAbsent("replication_factor", factor); Statement stmt = SchemaBuilder.createKeyspace(this.keyspace) - .ifNotExists().with().replication(replication); + .ifNotExists().with() + .replication(replication); // Create keyspace with non-keyspace-session LOG.debug("Create keyspace: {}", stmt); @@ -371,7 +396,6 @@ protected void initKeyspace() { session.close(); } } - this.sessions.session().open(); } protected void clearKeyspace() { @@ -395,18 +419,29 @@ protected boolean existsKeyspace() { protected void initTables() { CassandraSessionPool.Session session = this.sessions.session(); - for (CassandraTable table : this.tables.values()) { + for (CassandraTable table : this.tables()) { table.init(session); } } protected void clearTables() { CassandraSessionPool.Session session = this.sessions.session(); - for (CassandraTable table : this.tables.values()) { + for (CassandraTable table : this.tables()) { table.clear(session); } } + protected void truncateTables() { + CassandraSessionPool.Session session = this.sessions.session(); + for (CassandraTable table : this.tables()) { + table.truncate(session); + } + } + + protected Collection tables() { + return this.tables.values(); + } + @Override protected final CassandraTable table(HugeType type) { assert type != null; @@ -472,19 +507,10 @@ public CassandraSchemaStore(BackendStoreProvider provider, } @Override - protected void initTables() { - super.initTables(); - - CassandraSessionPool.Session session = super.sessions.session(); - this.counters.init(session); - } - - @Override - protected void clearTables() { - super.clearTables(); - - CassandraSessionPool.Session session = super.sessions.session(); - this.counters.clear(session); + protected Collection tables() { + List tables = new ArrayList<>(super.tables()); + tables.add(this.counters); + return tables; } @Override diff --git a/hugegraph-cassandra/src/main/java/com/baidu/hugegraph/backend/store/cassandra/CassandraTable.java b/hugegraph-cassandra/src/main/java/com/baidu/hugegraph/backend/store/cassandra/CassandraTable.java index fe9f010849..db55235042 100644 --- a/hugegraph-cassandra/src/main/java/com/baidu/hugegraph/backend/store/cassandra/CassandraTable.java +++ b/hugegraph-cassandra/src/main/java/com/baidu/hugegraph/backend/store/cassandra/CassandraTable.java @@ -119,13 +119,13 @@ protected List