Skip to content

Commit 997a625

Browse files
authored
Feature/3.6/db properties (#326)
* getDatabaseProperties * create db with options * create db with options * doc * cluster test bugifx * async tests * DatabaseOptions: renamed minReplicationFactor to writeConcern * doc upd
1 parent ce7cf08 commit 997a625

15 files changed

+815
-490
lines changed

ChangeLog.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) a
88

99
## [6.5.0] - 2019-xx-xx
1010

11+
- createDatabase with options (replicationFactor, minReplicationFactor, sharding) (ArangoDB v3.6)
12+
- extended DatabaseEntity with replicationFactor, minReplicationFactor, sharding (ArangoDB v3.6)
1113
- timeout option for AQL queries (ArangoDB v3.6)
1214
- enhancedNgramAnalyzer and enhancedTextAnalyzer (ArangoDB v3.6)
1315

docker/start_db_cluster.sh

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,15 +68,17 @@ docker run -d -v "$LOCATION"/jwtSecret:/jwtSecret -e ARANGO_LICENSE_KEY="$ARANGO
6868
docker run -d -v "$LOCATION"/jwtSecret:/jwtSecret -e ARANGO_LICENSE_KEY="$ARANGO_LICENSE_KEY" --network arangodb --ip 172.28.2.2 --name dbserver2 "$1" arangodb --cluster.start-dbserver true --cluster.start-coordinator false --starter.join agent1 --auth.jwt-secret /jwtSecret
6969
docker run -d -v "$LOCATION"/jwtSecret:/jwtSecret -e ARANGO_LICENSE_KEY="$ARANGO_LICENSE_KEY" --network arangodb --ip 172.28.2.3 --name dbserver3 "$1" arangodb --cluster.start-dbserver true --cluster.start-coordinator false --starter.join agent1 --auth.jwt-secret /jwtSecret
7070

71-
docker run -d -v "$LOCATION"/jwtSecret:/jwtSecret -e ARANGO_LICENSE_KEY="$ARANGO_LICENSE_KEY" --network arangodb --ip 172.28.3.1 --name coordinator1 -p 8529:8529 "$1" arangodb --cluster.start-dbserver false --cluster.start-coordinator true --starter.join agent1 --auth.jwt-secret /jwtSecret
71+
docker run -d -v "$LOCATION"/jwtSecret:/jwtSecret -e ARANGO_LICENSE_KEY="$ARANGO_LICENSE_KEY" --network arangodb --ip 172.28.3.1 --name coordinator1 "$1" arangodb --cluster.start-dbserver false --cluster.start-coordinator true --starter.join agent1 --auth.jwt-secret /jwtSecret
7272
docker run -d -v "$LOCATION"/jwtSecret:/jwtSecret -e ARANGO_LICENSE_KEY="$ARANGO_LICENSE_KEY" --network arangodb --ip 172.28.3.2 --name coordinator2 "$1" arangodb --cluster.start-dbserver false --cluster.start-coordinator true --starter.join agent1 --auth.jwt-secret /jwtSecret
73+
docker run -d -v "$LOCATION"/jwtSecret:/jwtSecret -e ARANGO_LICENSE_KEY="$ARANGO_LICENSE_KEY" --network arangodb --ip 172.28.3.3 --name coordinator3 "$1" arangodb --cluster.start-dbserver false --cluster.start-coordinator true --starter.join agent1 --auth.jwt-secret /jwtSecret
7374

7475
echo "Waiting for dbservers and coordinators..."
7576
wait_server 172.28.2.1:8530
7677
wait_server 172.28.2.2:8530
7778
wait_server 172.28.2.3:8530
7879
wait_server 172.28.3.1:8529
7980
wait_server 172.28.3.2:8529
81+
wait_server 172.28.3.3:8529
8082

8183
# wait for port mappings
8284
wait_server 127.0.0.1:8529

src/main/java/com/arangodb/ArangoDB.java

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
import com.arangodb.internal.util.DefaultArangoSerialization;
3535
import com.arangodb.internal.velocystream.VstCommunicationSync;
3636
import com.arangodb.internal.velocystream.VstConnectionFactorySync;
37+
import com.arangodb.model.DBCreateOptions;
3738
import com.arangodb.model.LogOptions;
3839
import com.arangodb.model.UserCreateOptions;
3940
import com.arangodb.model.UserUpdateOptions;
@@ -243,12 +244,12 @@ public Builder acquireHostList(final Boolean acquireHostList) {
243244
setAcquireHostList(acquireHostList);
244245
return this;
245246
}
246-
247+
247248
/**
248249
* Setting the Interval for acquireHostList
249250
*
250251
* @param acquireHostListInterval Interval in Seconds
251-
*
252+
*
252253
* @return {@link ArangoDB.Builder}
253254
*/
254255
public Builder acquireHostListInterval(final Integer acquireHostListInterval) {
@@ -608,7 +609,7 @@ public synchronized ArangoDB build() {
608609
final Collection<Host> hostList = createHostList(max, connectionFactory);
609610
final HostResolver hostResolver = createHostResolver(hostList, max, connectionFactory);
610611
final HostHandler hostHandler = createHostHandler(hostResolver);
611-
612+
612613
return new ArangoDBImpl(
613614
new VstCommunicationSync.Builder(hostHandler).timeout(timeout).user(user).password(password)
614615
.useSsl(useSsl).sslContext(sslContext).chunksize(chunksize).maxConnections(maxConnections)
@@ -653,6 +654,18 @@ public synchronized ArangoDB build() {
653654
*/
654655
Boolean createDatabase(String name) throws ArangoDBException;
655656

657+
/**
658+
* Creates a new database with the given name.
659+
*
660+
* @see <a href="https://www.arangodb.com/docs/stable/http/database-database-management.html#create-database">API
661+
* Documentation</a>
662+
* @param options Creation options
663+
* @return true if the database was created successfully.
664+
* @since ArangoDB 3.6.0
665+
* @throws ArangoDBException
666+
*/
667+
Boolean createDatabase(DBCreateOptions options) throws ArangoDBException;
668+
656669
/**
657670
* Retrieves a list of all existing databases
658671
*
@@ -714,7 +727,7 @@ public synchronized ArangoDB build() {
714727
* @throws ArangoDBException
715728
*/
716729
ServerRole getRole() throws ArangoDBException;
717-
730+
718731
/**
719732
* Create a new user. This user will not have access to any database. You need permission to the _system database in
720733
* order to execute this call.

src/main/java/com/arangodb/async/ArangoDBAsync.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
import com.arangodb.internal.util.ArangoSerializerImpl;
3939
import com.arangodb.internal.util.DefaultArangoSerialization;
4040
import com.arangodb.internal.velocystream.VstCommunicationSync;
41+
import com.arangodb.model.DBCreateOptions;
4142
import com.arangodb.model.LogOptions;
4243
import com.arangodb.model.UserCreateOptions;
4344
import com.arangodb.model.UserUpdateOptions;
@@ -97,6 +98,17 @@ public interface ArangoDBAsync extends ArangoSerializationAccessor {
9798
*/
9899
CompletableFuture<Boolean> createDatabase(final String name);
99100

101+
/**
102+
* Creates a new database
103+
*
104+
* @param options Creation options
105+
* @return true if the database was created successfully.
106+
* @since ArangoDB 3.6.0
107+
* @see <a href="https://www.arangodb.com/docs/stable/http/database-database-management.html#create-database">API
108+
* Documentation</a>
109+
*/
110+
CompletableFuture<Boolean> createDatabase(final DBCreateOptions options);
111+
100112
/**
101113
* Retrieves a list of all existing databases
102114
*

src/main/java/com/arangodb/async/internal/ArangoDBAsyncImpl.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
import com.arangodb.internal.velocystream.VstCommunicationSync;
3535
import com.arangodb.internal.velocystream.VstProtocol;
3636
import com.arangodb.internal.velocystream.internal.VstConnectionSync;
37+
import com.arangodb.model.DBCreateOptions;
3738
import com.arangodb.model.LogOptions;
3839
import com.arangodb.model.UserCreateOptions;
3940
import com.arangodb.model.UserUpdateOptions;
@@ -92,7 +93,12 @@ public ArangoDatabaseAsync db(final String name) {
9293

9394
@Override
9495
public CompletableFuture<Boolean> createDatabase(final String name) {
95-
return executor.execute(createDatabaseRequest(name), createDatabaseResponseDeserializer());
96+
return createDatabase(new DBCreateOptions().name(name));
97+
}
98+
99+
@Override
100+
public CompletableFuture<Boolean> createDatabase(DBCreateOptions options) {
101+
return executor.execute(createDatabaseRequest(options), createDatabaseResponseDeserializer());
96102
}
97103

98104
@Override

src/main/java/com/arangodb/entity/DatabaseEntity.java

Lines changed: 72 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -22,44 +22,84 @@
2222

2323
/**
2424
* @author Mark Vollmary
25-
*
26-
* @see <a href=
27-
* "https://www.arangodb.com/docs/stable/http/database-database-management.html#information-of-the-database">API
28-
* Documentation</a>
25+
* @see <a href="https://www.arangodb.com/docs/stable/http/database-database-management.html">API Documentation</a>
2926
*/
3027
public class DatabaseEntity implements Entity {
3128

32-
private String id;
33-
private String name;
34-
private String path;
35-
private Boolean isSystem;
29+
private String id;
30+
private String name;
31+
private String path;
32+
private Boolean isSystem;
33+
private final ReplicationFactor replicationFactor;
34+
private Integer writeConcern;
35+
private String sharding;
3636

37-
/**
38-
* @return the id of the database
39-
*/
40-
public String getId() {
41-
return id;
42-
}
37+
public DatabaseEntity() {
38+
super();
39+
replicationFactor = new ReplicationFactor();
40+
}
4341

44-
/**
45-
* @return the name of the database
46-
*/
47-
public String getName() {
48-
return name;
49-
}
42+
/**
43+
* @return the id of the database
44+
*/
45+
public String getId() {
46+
return id;
47+
}
5048

51-
/**
52-
* @return the filesystem path of the database
53-
*/
54-
public String getPath() {
55-
return path;
56-
}
49+
/**
50+
* @return the name of the database
51+
*/
52+
public String getName() {
53+
return name;
54+
}
5755

58-
/**
59-
* @return whether or not the database is the _system database
60-
*/
61-
public Boolean getIsSystem() {
62-
return isSystem;
63-
}
56+
/**
57+
* @return the filesystem path of the database
58+
*/
59+
public String getPath() {
60+
return path;
61+
}
6462

63+
/**
64+
* @return whether or not the database is the _system database
65+
*/
66+
public Boolean getIsSystem() {
67+
return isSystem;
68+
}
69+
70+
/**
71+
* @return the default replication factor for collections in this database
72+
* @since ArangoDB 3.6.0
73+
*/
74+
public Integer getReplicationFactor() {
75+
return replicationFactor.getReplicationFactor();
76+
}
77+
78+
/**
79+
* Default write concern for new collections created in this database. It determines how many copies of each shard
80+
* are required to be in sync on the different DBServers. If there are less then these many copies in the cluster a
81+
* shard will refuse to write. Writes to shards with enough up-to-date copies will succeed at the same time however.
82+
* The value of writeConcern can not be larger than replicationFactor. (cluster only)
83+
*
84+
* @since ArangoDB 3.6.0
85+
*/
86+
public Integer getWriteConcern() {
87+
return writeConcern;
88+
}
89+
90+
/**
91+
* @return whether the collection is a satellite collection. Only in an enterprise cluster setup (else returning null).
92+
* @since ArangoDB 3.6.0
93+
*/
94+
public Boolean getSatellite() {
95+
return this.replicationFactor.getSatellite();
96+
}
97+
98+
/**
99+
* @return information about the default sharding method for collections created in this database
100+
* @since ArangoDB 3.6.0
101+
*/
102+
public String getSharding() {
103+
return sharding;
104+
}
65105
}

src/main/java/com/arangodb/internal/ArangoDBImpl.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
import com.arangodb.internal.util.ArangoSerializationFactory.Serializer;
3535
import com.arangodb.internal.velocystream.VstCommunicationSync;
3636
import com.arangodb.internal.velocystream.VstProtocol;
37+
import com.arangodb.model.DBCreateOptions;
3738
import com.arangodb.model.LogOptions;
3839
import com.arangodb.model.UserCreateOptions;
3940
import com.arangodb.model.UserUpdateOptions;
@@ -132,7 +133,12 @@ public ArangoDatabase db(final String name) {
132133

133134
@Override
134135
public Boolean createDatabase(final String name) throws ArangoDBException {
135-
return executor.execute(createDatabaseRequest(name), createDatabaseResponseDeserializer());
136+
return createDatabase(new DBCreateOptions().name(name));
137+
}
138+
139+
@Override
140+
public Boolean createDatabase(DBCreateOptions options) throws ArangoDBException {
141+
return executor.execute(createDatabaseRequest(options), createDatabaseResponseDeserializer());
136142
}
137143

138144
@Override

src/main/java/com/arangodb/internal/InternalArangoDB.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,10 +62,10 @@ protected ResponseDeserializer<ServerRole> getRoleResponseDeserializer() {
6262
return response -> util().deserialize(response.getBody().get("role"), ServerRole.class);
6363
}
6464

65-
protected Request createDatabaseRequest(final String name) {
65+
protected Request createDatabaseRequest(final DBCreateOptions options) {
6666
final Request request = request(ArangoRequestParam.SYSTEM, RequestType.POST,
6767
InternalArangoDatabase.PATH_API_DATABASE);
68-
request.setBody(util().serialize(OptionsBuilder.build(new DBCreateOptions(), name)));
68+
request.setBody(util().serialize(options));
6969
return request;
7070
}
7171

src/main/java/com/arangodb/model/DBCreateOptions.java

Lines changed: 28 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -22,28 +22,36 @@
2222

2323
/**
2424
* @author Mark Vollmary
25-
*
2625
*/
2726
public class DBCreateOptions {
2827

29-
private String name;
30-
31-
public DBCreateOptions() {
32-
super();
33-
}
34-
35-
public String getName() {
36-
return name;
37-
}
38-
39-
/**
40-
* @param name
41-
* Has to contain a valid database name
42-
* @return options
43-
*/
44-
protected DBCreateOptions name(final String name) {
45-
this.name = name;
46-
return this;
47-
}
28+
private String name;
29+
private DatabaseOptions options;
30+
31+
public DBCreateOptions() {
32+
super();
33+
}
34+
35+
public String getName() {
36+
return name;
37+
}
38+
39+
/**
40+
* @param name Has to contain a valid database name
41+
* @return options
42+
*/
43+
public DBCreateOptions name(final String name) {
44+
this.name = name;
45+
return this;
46+
}
47+
48+
public DatabaseOptions getOptions() {
49+
return options;
50+
}
51+
52+
public DBCreateOptions options(DatabaseOptions options) {
53+
this.options = options;
54+
return this;
55+
}
4856

4957
}

0 commit comments

Comments
 (0)