@@ -110,35 +110,41 @@ def scheme_client(self):
110
110
)
111
111
return self .__scheme_client
112
112
113
- def get_database_status (self , database_name ):
114
- response = self .client .send_request (
115
- GetTenantStatusRequest (database_name ).protobuf ,
116
- method = 'ConsoleRequest'
117
- ).GetTenantStatusResponse
113
+ def _send_get_tenant_status_request (self , database_name , token = None ):
114
+ req = GetTenantStatusRequest (database_name )
115
+
116
+ if token is not None :
117
+ req .set_user_token (token )
118
+
119
+ return self .client .send_request (req .protobuf , method = 'ConsoleRequest' ).GetTenantStatusResponse
120
+
121
+ def get_database_status (self , database_name , token = None ):
122
+ response = self ._send_get_tenant_status_request (database_name , token = token )
118
123
119
124
if response .Response .operation .status != StatusIds .SUCCESS :
120
125
logger .critical ("Console response status: %s" , str (response .Response .operation .status ))
121
126
assert False
122
- return False
123
127
124
128
result = cms_tenants_pb .GetDatabaseStatusResult ()
125
129
response .Response .operation .result .Unpack (result )
126
130
return result
127
131
128
- def wait_tenant_up (self , database_name ):
132
+ def wait_tenant_up (self , database_name , token = None ):
129
133
self .__wait_tenant_up (
130
134
database_name ,
131
- expected_computational_units = 1
135
+ expected_computational_units = 1 ,
136
+ token = token ,
132
137
)
133
138
134
139
def __wait_tenant_up (
135
140
self ,
136
141
database_name ,
137
142
expected_computational_units = None ,
138
- timeout_seconds = 120
143
+ timeout_seconds = 120 ,
144
+ token = None
139
145
):
140
146
def predicate ():
141
- result = self .get_database_status (database_name )
147
+ result = self .get_database_status (database_name , token = token )
142
148
143
149
if expected_computational_units is None :
144
150
expected = set ([2 ])
@@ -154,21 +160,25 @@ def predicate():
154
160
)
155
161
assert tenant_running
156
162
157
- def __get_console_op (self , op_id ):
163
+ def __get_console_op (self , op_id , token = None ):
158
164
req = GetOperationRequest (op_id )
165
+
166
+ if token is not None :
167
+ req .set_user_token (token )
168
+
159
169
response = self .client .send_request (req .protobuf , method = 'ConsoleRequest' )
160
170
operation = response .GetOperationResponse .operation
161
171
if not operation .ready and response .Status .Code != StatusIds .STATUS_CODE_UNSPECIFIED :
162
172
raise RuntimeError ('get_console_op failed: %s: %s' % (response .Status .Code , response .Status .Reason ))
163
173
return operation
164
174
165
- def __wait_console_op (self , op_id , timeout_seconds , step_seconds = 0.5 ):
175
+ def __wait_console_op (self , op_id , timeout_seconds , step_seconds = 0.5 , token = None ):
166
176
deadline = time .time () + timeout_seconds
167
177
while True :
168
178
time .sleep (step_seconds )
169
179
if time .time () >= deadline :
170
180
raise RuntimeError ('wait_console_op: deadline exceeded' )
171
- operation = self .__get_console_op (op_id )
181
+ operation = self .__get_console_op (op_id , token = token )
172
182
if operation .ready :
173
183
return operation
174
184
@@ -177,7 +187,8 @@ def create_database(
177
187
database_name ,
178
188
storage_pool_units_count ,
179
189
disable_external_subdomain = False ,
180
- timeout_seconds = 120
190
+ timeout_seconds = 120 ,
191
+ token = None ,
181
192
):
182
193
req = CreateTenantRequest (database_name )
183
194
for storage_pool_type_name , units_count in storage_pool_units_count .items ():
@@ -189,27 +200,32 @@ def create_database(
189
200
if disable_external_subdomain :
190
201
req .disable_external_subdomain ()
191
202
203
+ if token is not None :
204
+ req .set_user_token (token )
205
+
192
206
response = self .client .send_request (req .protobuf , method = 'ConsoleRequest' )
193
207
operation = response .CreateTenantResponse .Response .operation
194
208
if not operation .ready and response .Status .Code != StatusIds .STATUS_CODE_UNSPECIFIED :
195
209
raise RuntimeError ('create_database failed: %s: %s' % (response .Status .Code , response .Status .Reason ))
196
210
if not operation .ready :
197
- operation = self .__wait_console_op (operation .id , timeout_seconds = timeout_seconds )
211
+ operation = self .__wait_console_op (operation .id , timeout_seconds = timeout_seconds , token = token )
198
212
if operation .status != StatusIds .SUCCESS :
199
213
raise RuntimeError ('create_database failed: %s, %s' % (operation .status , ydb .issues ._format_issues (operation .issues )))
200
214
201
215
self .__wait_tenant_up (
202
216
database_name ,
203
217
expected_computational_units = 0 ,
204
- timeout_seconds = timeout_seconds
218
+ timeout_seconds = timeout_seconds ,
219
+ token = token ,
205
220
)
206
221
return database_name
207
222
208
223
def create_hostel_database (
209
224
self ,
210
225
database_name ,
211
226
storage_pool_units_count ,
212
- timeout_seconds = 120
227
+ timeout_seconds = 120 ,
228
+ token = None ,
213
229
):
214
230
req = CreateTenantRequest (database_name )
215
231
for storage_pool_type_name , units_count in storage_pool_units_count .items ():
@@ -218,19 +234,23 @@ def create_hostel_database(
218
234
units_count ,
219
235
)
220
236
237
+ if token is not None :
238
+ req .set_user_token (token )
239
+
221
240
response = self .client .send_request (req .protobuf , method = 'ConsoleRequest' )
222
241
operation = response .CreateTenantResponse .Response .operation
223
242
if not operation .ready and response .Status .Code != StatusIds .STATUS_CODE_UNSPECIFIED :
224
243
raise RuntimeError ('create_hostel_database failed: %s: %s' % (response .Status .Code , response .Status .Reason ))
225
244
if not operation .ready :
226
- operation = self .__wait_console_op (operation .id , timeout_seconds = timeout_seconds )
245
+ operation = self .__wait_console_op (operation .id , timeout_seconds = timeout_seconds , token = token )
227
246
if operation .status != StatusIds .SUCCESS :
228
247
raise RuntimeError ('create_hostel_database failed: %s' % (operation .status ,))
229
248
230
249
self .__wait_tenant_up (
231
250
database_name ,
232
251
expected_computational_units = 0 ,
233
- timeout_seconds = timeout_seconds
252
+ timeout_seconds = timeout_seconds ,
253
+ token = token ,
234
254
)
235
255
return database_name
236
256
@@ -241,10 +261,14 @@ def create_serverless_database(
241
261
timeout_seconds = 120 ,
242
262
schema_quotas = None ,
243
263
disk_quotas = None ,
244
- attributes = None
264
+ attributes = None ,
265
+ token = None ,
245
266
):
246
267
req = CreateTenantRequest (database_name )
247
268
269
+ if token is not None :
270
+ req .set_user_token (token )
271
+
248
272
req .share_resources_with (hostel_db )
249
273
250
274
if schema_quotas is not None :
@@ -262,13 +286,14 @@ def create_serverless_database(
262
286
if not operation .ready and response .Status .Code != StatusIds .STATUS_CODE_UNSPECIFIED :
263
287
raise RuntimeError ('create_serverless_database failed: %s: %s' % (response .Status .Code , response .Status .Reason ))
264
288
if not operation .ready :
265
- operation = self .__wait_console_op (operation .id , timeout_seconds = timeout_seconds )
289
+ operation = self .__wait_console_op (operation .id , timeout_seconds = timeout_seconds , token = token )
266
290
if operation .status != StatusIds .SUCCESS :
267
291
raise RuntimeError ('create_serverless_database failed: %s' % (operation .status ,))
268
292
269
293
self .__wait_tenant_up (
270
294
database_name ,
271
- timeout_seconds = timeout_seconds
295
+ timeout_seconds = timeout_seconds ,
296
+ token = token ,
272
297
)
273
298
return database_name
274
299
@@ -278,9 +303,13 @@ def alter_serverless_database(
278
303
schema_quotas = None ,
279
304
disk_quotas = None ,
280
305
timeout_seconds = 120 ,
306
+ token = None ,
281
307
):
282
308
req = AlterTenantRequest (database_name )
283
309
310
+ if token is not None :
311
+ req .set_user_token (token )
312
+
284
313
assert schema_quotas is not None or disk_quotas is not None
285
314
286
315
if schema_quotas is not None :
@@ -294,33 +323,39 @@ def alter_serverless_database(
294
323
if not operation .ready and response .Status .Code != StatusIds .STATUS_CODE_UNSPECIFIED :
295
324
raise RuntimeError ('alter_serverless_database failed: %s: %s' % (response .Status .Code , response .Status .Reason ))
296
325
if not operation .ready :
297
- operation = self .__wait_console_op (operation .id , timeout_seconds = timeout_seconds )
326
+ operation = self .__wait_console_op (operation .id , timeout_seconds = timeout_seconds , token = token )
298
327
if operation .status != StatusIds .SUCCESS :
299
328
raise RuntimeError ('alter_serverless_database failed: %s' % (operation .status ,))
300
329
301
330
self .__wait_tenant_up (
302
331
database_name ,
303
- timeout_seconds = timeout_seconds
332
+ timeout_seconds = timeout_seconds ,
333
+ token = token ,
304
334
)
305
335
return database_name
306
336
307
337
def remove_database (
308
338
self ,
309
339
database_name ,
310
- timeout_seconds = 20
340
+ timeout_seconds = 20 ,
341
+ token = None ,
311
342
):
312
343
logger .debug (database_name )
313
344
314
- operation_id = self ._remove_database_send_op (database_name )
315
- self ._remove_database_wait_op (database_name , operation_id , timeout_seconds = timeout_seconds )
316
- self ._remove_database_wait_tenant_gone (database_name , timeout_seconds = timeout_seconds )
345
+ operation_id = self ._remove_database_send_op (database_name , token = token )
346
+ self ._remove_database_wait_op (database_name , operation_id , timeout_seconds = timeout_seconds , token = token )
347
+ self ._remove_database_wait_tenant_gone (database_name , timeout_seconds = timeout_seconds , token = token )
317
348
318
349
return database_name
319
350
320
- def _remove_database_send_op (self , database_name ):
321
- logger .debug ('%s: send console operation' , database_name )
351
+ def _remove_database_send_op (self , database_name , token = None ):
352
+ logger .debug ('%s: send console operation, token %s ' , database_name , token )
322
353
323
354
req = RemoveTenantRequest (database_name )
355
+
356
+ if token is not None :
357
+ req .set_user_token (token )
358
+
324
359
response = self .client .send_request (req .protobuf , method = 'ConsoleRequest' )
325
360
operation = response .RemoveTenantResponse .Response .operation
326
361
logger .debug ('%s: response from console: %s' , database_name , response )
@@ -330,20 +365,19 @@ def _remove_database_send_op(self, database_name):
330
365
331
366
return operation .id
332
367
333
- def _remove_database_wait_op (self , database_name , operation_id , timeout_seconds = 20 ):
368
+ def _remove_database_wait_op (self , database_name , operation_id , timeout_seconds = 20 , token = None ):
334
369
logger .debug ('%s: wait console operation done' , database_name )
335
- operation = self .__wait_console_op (operation_id , timeout_seconds = timeout_seconds )
370
+ operation = self .__wait_console_op (operation_id , timeout_seconds = timeout_seconds , token = token )
336
371
logger .debug ('%s: console operation done' , database_name )
337
372
338
373
if operation .status not in (StatusIds .SUCCESS , StatusIds .NOT_FOUND ):
339
374
raise RuntimeError ('remove_database failed: %s' % (operation .status ,))
340
375
341
- def _remove_database_wait_tenant_gone (self , database_name , timeout_seconds = 20 ):
376
+ def _remove_database_wait_tenant_gone (self , database_name , timeout_seconds = 20 , token = None ):
342
377
logger .debug ('%s: wait tenant gone' , database_name )
343
378
344
379
def predicate ():
345
- response = self .client .send_request (
346
- GetTenantStatusRequest (database_name ).protobuf , method = 'ConsoleRequest' ).GetTenantStatusResponse
380
+ response = self ._send_get_tenant_status_request (database_name , token = token )
347
381
return response .Response .operation .status == StatusIds .NOT_FOUND
348
382
349
383
tenant_not_found = wait_for (
0 commit comments