Skip to content

Commit 083f5e8

Browse files
committed
CE-572 Retry bucket creation if failed
1 parent a5aceac commit 083f5e8

File tree

1 file changed

+36
-12
lines changed

1 file changed

+36
-12
lines changed

src/controller/couchbase_lib/_bucket.py

Lines changed: 36 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -114,16 +114,20 @@ def bucket_remove(self, bucket_name):
114114
helper_lib.sleepForSecond(2)
115115

116116
def bucket_create(
117-
self, bucket_name, ram_size, bucket_type, bucket_compression
117+
self,
118+
bucket_name,
119+
ram_size,
120+
bucket_type,
121+
bucket_compression,
122+
retry: bool = True,
118123
):
119-
logger.debug("Creating bucket: {} ".format(bucket_name))
124+
logger.debug(f"Creating bucket: {bucket_name} ")
120125
# To create the bucket with given ram size
121126
self.__validate_bucket_name(bucket_name)
122127
if ram_size is None:
123128
logger.debug(
124-
"Needed ramsize for bucket_create. Currently it is: {}".format(
125-
ram_size
126-
)
129+
"Needed ramsize for bucket_create. "
130+
f"Currently it is: {ram_size}"
127131
)
128132
return
129133

@@ -132,9 +136,7 @@ def bucket_create(
132136
bucket_type = "couchbase"
133137

134138
if bucket_compression is not None:
135-
bucket_compression = "--compression-mode {}".format(
136-
bucket_compression
137-
)
139+
bucket_compression = f"--compression-mode {bucket_compression}"
138140
else:
139141
bucket_compression = ""
140142

@@ -150,18 +152,40 @@ def bucket_create(
150152
evictionpolicy=policy,
151153
bucket_type=bucket_type,
152154
bucket_compression=bucket_compression,
153-
**env
155+
**env,
154156
)
155-
logger.debug("create bucket {}".format(command))
157+
logger.debug(f"create bucket {command} for {bucket_name}")
156158
kwargs[ENV_VAR_KEY].update(env_vars)
157159
output, error, exit_code = utilities.execute_expect(
158160
self.connection, command, **kwargs
159161
)
160162
logger.debug(
161-
"create bucket output: {} {} {}".format(output, error, exit_code)
163+
f"create bucket output for {bucket_name}: "
164+
f"{output} {error} {exit_code}"
162165
)
163166
helper_lib.sleepForSecond(2)
164167

168+
bucket_list = self.bucket_list()
169+
if (
170+
not any(item["name"] == bucket_name for item in bucket_list)
171+
and retry
172+
):
173+
self.bucket_create(
174+
bucket_name=bucket_name,
175+
ram_size=ram_size,
176+
bucket_type=bucket_type,
177+
bucket_compression=bucket_compression,
178+
retry=False,
179+
)
180+
elif not any(item["name"] == bucket_name for item in bucket_list):
181+
error_message = f"Bucket creation failed for {bucket_name}" + (
182+
", even after retry." if retry else "."
183+
)
184+
logger.error(error_message)
185+
raise BucketOperationError(error_message)
186+
187+
logger.debug(f"Bucket creation successful for {bucket_name}.")
188+
165189
def bucket_list(self, return_type=list):
166190
# See the all bucket.
167191
# It will return also other information like ramused, ramsize etc
@@ -249,7 +273,7 @@ def monitor_bucket(self, bucket_name, staging_UUID):
249273
source_port=self.source_config.couchbase_src_port,
250274
bucket_name=bucket_name,
251275
uuid=staging_UUID,
252-
**env
276+
**env,
253277
)
254278
kwargs[ENV_VAR_KEY].update(env_vars)
255279
stdout, stderr, exit_code = utilities.execute_expect(

0 commit comments

Comments
 (0)