Skip to content

Commit f29b0fd

Browse files
authored
CE-572 Retry bucket creation if failed (#59)
PR URL: https://www.github.com/delphix/couchbase-plugin/pull/59
1 parent a5aceac commit f29b0fd

File tree

1 file changed

+38
-12
lines changed

1 file changed

+38
-12
lines changed

src/controller/couchbase_lib/_bucket.py

Lines changed: 38 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,42 @@ 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+
bucket_name_list = [item["name"] for item in bucket_list]
170+
if bucket_name not in bucket_name_list and retry:
171+
self.bucket_create(
172+
bucket_name=bucket_name,
173+
ram_size=ram_size,
174+
bucket_type=bucket_type,
175+
bucket_compression=bucket_compression,
176+
retry=False,
177+
)
178+
logger.debug(
179+
f"Bucket creation failed for {bucket_name} "
180+
"on the first attempt, retrying."
181+
)
182+
elif bucket_name not in bucket_name_list:
183+
error_message = f"Bucket creation failed for {bucket_name}" + (
184+
", even after retry." if not retry else "."
185+
)
186+
logger.error(error_message)
187+
raise BucketOperationError(error_message)
188+
189+
logger.debug(f"Bucket creation successful for {bucket_name}.")
190+
165191
def bucket_list(self, return_type=list):
166192
# See the all bucket.
167193
# It will return also other information like ramused, ramsize etc
@@ -249,7 +275,7 @@ def monitor_bucket(self, bucket_name, staging_UUID):
249275
source_port=self.source_config.couchbase_src_port,
250276
bucket_name=bucket_name,
251277
uuid=staging_UUID,
252-
**env
278+
**env,
253279
)
254280
kwargs[ENV_VAR_KEY].update(env_vars)
255281
stdout, stderr, exit_code = utilities.execute_expect(

0 commit comments

Comments
 (0)