2
2
3
3
import com .datastax .astra .internal .astra .AstraApiEndpoint ;
4
4
import com .datastax .astra .internal .astra .AstraDBDatabaseAdmin ;
5
+ import com .datastax .astra .internal .utils .Assert ;
5
6
import com .dtsx .astra .sdk .db .AstraDBOpsClient ;
6
7
import com .dtsx .astra .sdk .db .DbOpsClient ;
7
8
import com .dtsx .astra .sdk .db .domain .CloudProviderType ;
10
11
import com .dtsx .astra .sdk .db .domain .DatabaseStatusType ;
11
12
import com .dtsx .astra .sdk .db .exception .DatabaseNotFoundException ;
12
13
import com .dtsx .astra .sdk .utils .ApiLocator ;
13
- import com .dtsx .astra .sdk .utils .Assert ;
14
14
import com .dtsx .astra .sdk .utils .AstraEnvironment ;
15
15
import com .dtsx .astra .sdk .utils .AstraRc ;
16
16
import lombok .NonNull ;
@@ -54,7 +54,7 @@ public class AstraDBAdmin {
54
54
final AstraDBOpsClient devopsDbClient ;
55
55
56
56
/** Options to personalized http client other client options. */
57
- final DataAPIClientOptions dataAPIClientOptions ;
57
+ final DataAPIOptions dataAPIOptions ;
58
58
59
59
/** Astra Environment. */
60
60
final AstraEnvironment env ;
@@ -87,10 +87,13 @@ public class AstraDBAdmin {
87
87
* @param options
88
88
* options for client
89
89
*/
90
- AstraDBAdmin (String token , AstraEnvironment env , DataAPIClientOptions options ) {
90
+ AstraDBAdmin (String token , AstraEnvironment env , DataAPIOptions options ) {
91
+ Assert .hasLength (token , "token" );
92
+ Assert .notNull (env , "environment" );
93
+ Assert .notNull (options , "options" );
91
94
this .token = token ;
92
95
this .env = env ;
93
- this .dataAPIClientOptions = options ;
96
+ this .dataAPIOptions = options ;
94
97
this .devopsDbClient = new AstraDBOpsClient (token , this .env );
95
98
96
99
// Local Agent for Resume
@@ -114,6 +117,31 @@ public List<String> listDatabaseNames() {
114
117
return listDatabases ().map (db -> db .getInfo ().getName ()).collect (Collectors .toList ());
115
118
}
116
119
120
+ /**
121
+ * Return true if the database exists.
122
+ * @param name
123
+ * database identifiers
124
+ * @return
125
+ * if the database exits or not
126
+ */
127
+ public boolean databaseExists (String name ) {
128
+ Assert .hasLength (name , "name" );
129
+ return listDatabaseNames ().contains (name );
130
+ }
131
+
132
+ /**
133
+ * Return true if the database exists.
134
+ *
135
+ * @param id
136
+ * database identifiers
137
+ * @return
138
+ * if the database exits or not
139
+ */
140
+ public boolean databaseExists (UUID id ) {
141
+ Assert .notNull (id , "id" );
142
+ return devopsDbClient .findById (id .toString ()).isPresent ();
143
+ }
144
+
117
145
/**
118
146
* List active databases with vector enabled in current organization.
119
147
*
@@ -134,7 +162,8 @@ public Stream<Database> listDatabases() {
134
162
* @return
135
163
* database identifier
136
164
*/
137
- public UUID createDatabase (@ NonNull String name ) {
165
+ public UUID createDatabase (String name ) {
166
+ Assert .hasLength (name , "name" );
138
167
return createDatabase (name , FREE_TIER_CLOUD , FREE_TIER_CLOUD_REGION );
139
168
}
140
169
@@ -152,7 +181,10 @@ public UUID createDatabase(@NonNull String name) {
152
181
* @return
153
182
* database identifier
154
183
*/
155
- public UUID createDatabase (@ NonNull String name , @ NonNull CloudProviderType cloud , @ NonNull String cloudRegion ) {
184
+ public UUID createDatabase (String name , CloudProviderType cloud , String cloudRegion , boolean waitForDb ) {
185
+ Assert .hasLength (name , "name" );
186
+ Assert .notNull (cloud , "cloud" );
187
+ Assert .hasLength (cloudRegion , "cloudRegion" );
156
188
Optional <Database > optDb = listDatabases ().filter (db ->name .equals (db .getInfo ().getName ())).findFirst ();
157
189
// Handling all cases for the user
158
190
if (optDb .isPresent ()) {
@@ -166,12 +198,16 @@ public UUID createDatabase(@NonNull String name, @NonNull CloudProviderType clou
166
198
case PENDING :
167
199
case RESUMING :
168
200
log .info ("Database {} already exists and is in {} state, waiting for it to be ACTIVE" , name , db .getStatus ());
169
- waitForDatabase (devopsDbClient .database (db .getId ()));
201
+ if (waitForDb ) {
202
+ waitForDatabase (devopsDbClient .database (db .getId ()));
203
+ }
170
204
return UUID .fromString (db .getId ());
171
205
case HIBERNATED :
172
206
log .info ("Database {} is in {} state, resuming..." , name , db .getStatus ());
173
207
resumeDb (db );
174
- waitForDatabase (devopsDbClient .database (db .getId ()));
208
+ if (waitForDb ) {
209
+ waitForDatabase (devopsDbClient .database (db .getId ()));
210
+ }
175
211
return UUID .fromString (db .getId ());
176
212
default :
177
213
throw new IllegalStateException ("Database already exist but cannot be activate" );
@@ -185,10 +221,30 @@ public UUID createDatabase(@NonNull String name, @NonNull CloudProviderType clou
185
221
.keyspace (DEFAULT_NAMESPACE )
186
222
.withVector ().build ()));
187
223
log .info ("Database {} is starting (id={}): it will take about a minute please wait..." , name , newDbId );
188
- waitForDatabase (devopsDbClient .database (newDbId .toString ()));
224
+ if (waitForDb ) {
225
+ waitForDatabase (devopsDbClient .database (newDbId .toString ()));
226
+ }
189
227
return newDbId ;
190
228
}
191
229
230
+ /**
231
+ * Create new database with a name on the specified cloud provider and region.
232
+ * If the database with same name already exists it will be resumed if not active.
233
+ * The method will wait for the database to be active.
234
+ *
235
+ * @param name
236
+ * database name
237
+ * @param cloud
238
+ * cloud provider
239
+ * @param cloudRegion
240
+ * cloud region
241
+ * @return
242
+ * database identifier
243
+ */
244
+ public UUID createDatabase (String name , CloudProviderType cloud , String cloudRegion ) {
245
+ return createDatabase (name , cloud , cloudRegion , true );
246
+ }
247
+
192
248
/**
193
249
* Delete a Database if exists from its name
194
250
*
@@ -198,9 +254,22 @@ public UUID createDatabase(@NonNull String name, @NonNull CloudProviderType clou
198
254
* if the db has been deleted
199
255
*/
200
256
public boolean dropDatabase (@ NonNull UUID databaseId ) {
257
+ Assert .notNull (databaseId , "Database identifier" );
258
+ boolean exists = databaseExists (databaseId );
201
259
getDatabaseInformations (databaseId );
202
260
devopsDbClient .database (databaseId .toString ()).delete ();
203
- return true ;
261
+ return exists ;
262
+ }
263
+
264
+ public boolean dropDatabase (@ NonNull String databaseName ) {
265
+ Assert .hasLength (databaseName , "database" );
266
+ com .datastax .astra .internal .utils .Assert .hasLength (databaseName , "Database " );
267
+ Optional <Database > db = listDatabases ().filter (d -> d .getInfo ().getName ().equals (databaseName )).findFirst ();
268
+ if (db .isPresent ()) {
269
+ devopsDbClient .database (db .get ().getId ()).delete ();
270
+ return true ;
271
+ }
272
+ return false ;
204
273
}
205
274
206
275
/**
@@ -230,13 +299,15 @@ public Database getDatabaseInformations(@NonNull UUID id) {
230
299
* database client
231
300
*/
232
301
public com .datastax .astra .client .Database getDatabase (UUID databaseId , String namespace ) {
302
+ Assert .notNull (databaseId , "databaseId" );
303
+ Assert .hasLength (namespace , "namespace" );
233
304
String databaseRegion = devopsDbClient
234
305
.findById (databaseId .toString ())
235
306
.map (db -> db .getInfo ().getRegion ())
236
307
.orElseThrow (() -> new DatabaseNotFoundException (databaseId .toString ()));
237
308
return new com .datastax .astra .client .Database (
238
309
new AstraApiEndpoint (databaseId , databaseRegion , env ).getApiEndPoint (),
239
- token ,namespace , dataAPIClientOptions ) {
310
+ token ,namespace , dataAPIOptions ) {
240
311
};
241
312
}
242
313
@@ -261,7 +332,8 @@ public com.datastax.astra.client.Database getDatabase(UUID databaseId) {
261
332
* database client
262
333
*/
263
334
public AstraDBDatabaseAdmin getDatabaseAdmin (UUID databaseId ) {
264
- return new AstraDBDatabaseAdmin (token , databaseId , env , dataAPIClientOptions );
335
+ Assert .notNull (databaseId , "databaseId" );
336
+ return new AstraDBDatabaseAdmin (token , databaseId , env , dataAPIOptions );
265
337
}
266
338
267
339
/**
0 commit comments