use of com.baidu.hugegraph.config.HugeConfig in project incubator-hugegraph-toolchain by apache.
the class GremlinQueryService method edgesOfVertex.
private Map<String, Edge> edgesOfVertex(TypedResult result, Map<Object, Vertex> vertices, HugeClient client) {
final HugeConfig config = this.config;
int batchSize = config.get(HubbleOptions.GREMLIN_BATCH_QUERY_IDS);
int edgeLimit = config.get(HubbleOptions.GREMLIN_EDGES_TOTAL_LIMIT);
int degreeLimit = config.get(HubbleOptions.GREMLIN_VERTEX_DEGREE_LIMIT);
Set<Object> vertexIds = vertices.keySet();
Map<String, Edge> edges = new HashMap<>(vertexIds.size());
Iterables.partition(vertexIds, batchSize).forEach(batch -> {
List<String> escapedIds = batch.stream().map(GremlinUtil::escapeId).collect(Collectors.toList());
String ids = StringUtils.join(escapedIds, ",");
// Any better way to find two vertices has linked?
String gremlin;
if (result.getType().isPath()) {
// If result type is path, the vertices count not too much in theory
gremlin = String.format("g.V(%s).bothE().local(limit(%s)).dedup()", ids, degreeLimit);
} else {
gremlin = String.format("g.V(%s).bothE().dedup().limit(%s)", ids, edgeLimit);
}
ResultSet resultSet = client.gremlin().gremlin(gremlin).execute();
// The edges count for per vertex
Map<Object, Integer> degrees = new HashMap<>(resultSet.size());
for (Iterator<Result> iter = resultSet.iterator(); iter.hasNext(); ) {
Edge edge = iter.next().getEdge();
Object source = edge.sourceId();
Object target = edge.targetId();
// only add the interconnected edges of the found vertices
if (!vertexIds.contains(source) || !vertexIds.contains(target)) {
continue;
}
edges.put(edge.id(), edge);
if (edges.size() >= edgeLimit) {
break;
}
int deg = degrees.compute(source, (k, v) -> v == null ? 1 : v + 1);
if (deg >= degreeLimit) {
break;
}
deg = degrees.compute(target, (k, v) -> v == null ? 1 : v + 1);
if (deg >= degreeLimit) {
break;
}
}
});
return edges;
}
use of com.baidu.hugegraph.config.HugeConfig in project incubator-hugegraph by apache.
the class StandardHugeGraph method drop.
@Override
public void drop() {
this.clearBackend();
HugeConfig config = this.configuration();
this.storeProvider.onDeleteConfig(config);
ConfigUtil.deleteFile(config.file());
try {
/*
* It's hard to ensure all threads close the tx.
* TODO:
* - schedule a tx-close to each thread,
* or
* - add forceClose() method to backend store.
*/
this.close();
} catch (Throwable e) {
LOG.warn("Failed to close graph {} {}", this, e);
}
}
use of com.baidu.hugegraph.config.HugeConfig in project incubator-hugegraph by apache.
the class HugeAuthenticator method setup.
@Override
public default void setup(final Map<String, Object> config) {
E.checkState(config != null, "Must provide a 'config' in the 'authentication'");
String path = (String) config.get("tokens");
E.checkState(path != null, "Credentials configuration missing key 'tokens'");
OptionSpace.register("tokens", ServerOptions.instance());
this.setup(new HugeConfig(path));
}
use of com.baidu.hugegraph.config.HugeConfig in project incubator-hugegraph by apache.
the class StandardAuthenticator method initAdminUserIfNeeded.
public static void initAdminUserIfNeeded(String confFile) throws Exception {
StandardAuthenticator auth = new StandardAuthenticator();
HugeConfig config = new HugeConfig(confFile);
String authClass = config.get(ServerOptions.AUTHENTICATOR);
if (authClass.isEmpty()) {
return;
}
config.addProperty(INITING_STORE, true);
auth.setup(config);
if (auth.graph().backendStoreFeatures().supportsPersistence()) {
auth.initAdminUser();
}
}
use of com.baidu.hugegraph.config.HugeConfig in project incubator-hugegraph by apache.
the class GraphManager method cloneGraph.
public HugeGraph cloneGraph(String name, String newName, String configText) {
/*
* 0. check and modify params
* 1. create graph instance
* 2. init backend store
* 3. inject graph and traversal source into gremlin server context
* 4. inject graph into rest server context
*/
HugeGraph cloneGraph = this.graph(name);
E.checkArgumentNotNull(cloneGraph, "The clone graph '%s' doesn't exist", name);
E.checkArgument(StringUtils.isNotEmpty(newName), "The graph name can't be null or empty");
E.checkArgument(!this.graphs().contains(newName), "The graph '%s' has existed", newName);
HugeConfig cloneConfig = cloneGraph.cloneConfig(newName);
if (StringUtils.isNotEmpty(configText)) {
PropertiesConfiguration propConfig = ConfigUtil.buildConfig(configText);
// Use the passed config to overwrite the old one
propConfig.getKeys().forEachRemaining(key -> {
cloneConfig.setProperty(key, propConfig.getProperty(key));
});
this.checkOptions(cloneConfig);
}
return this.createGraph(cloneConfig, newName);
}
Aggregations