def _database_fragmentation(self, percent_threshold): bucket_name = "default" MAX_RUN = 99 item_size = 1024 update_item_size = item_size*((float(97 - percent_threshold))/100) serverInfo = self.servers[0] self.log.info(serverInfo) rest = RestConnection(serverInfo) remote_client = RemoteMachineShellConnection(serverInfo) rest.reset_auto_compaction() parallelDBAndView = "false" output = rest.set_autoCompaction(parallelDBAndView, percent_threshold, 100) if not output and percent_threshold < MIN_COMPACTION_THRESHOLD: self.log.error("Need to set minimum threshold above {0}%".format(MIN_COMPACTION_THRESHOLD)) elif not output and percent_threshold > MAX_COMPACTION_THRESHOLD: self.log.error("Need to set maximum threshold under {0}".format(MAX_COMPACTION_THRESHOLD)) elif output and percent_threshold == MAX_COMPACTION_THRESHOLD: self.log.info("Auto compaction will not run at {0}% setting".format(MAX_COMPACTION_THRESHOLD)) elif (output and percent_threshold >= MIN_COMPACTION_THRESHOLD and percent_threshold <= MAX_RUN): node_ram_ratio = BucketOperationHelper.base_bucket_ratio(TestInputSingleton.input.servers) info = rest.get_nodes_self() available_ram = info.memoryQuota * (node_ram_ratio)/2 items = (int(available_ram*1000)/2)/item_size rest.create_bucket(bucket= bucket_name, ramQuotaMB=int(available_ram), authType='sasl', saslPassword='******', replicaNumber=1, proxyPort=11211) ready = BucketOperationHelper.wait_for_memcached(serverInfo, bucket_name) BucketOperationHelper.wait_for_vbuckets_ready_state(serverInfo, bucket_name) self.log.info("start to load {0}K keys with {1} bytes/key".format(items, item_size)) self.insert_key(serverInfo, bucket_name, items, item_size) self.log.info("sleep 10 seconds before the next run") time.sleep(10) self.log.info("start to update {0}K keys with smaller value {1} bytes/key".format(items, int(update_item_size))) self.insert_key(serverInfo, bucket_name, items, int(update_item_size)) compact_run = remote_client.wait_till_compaction_end(rest, bucket_name, timeout_in_seconds=180) if not compact_run: self.log.error("auto compaction does not run") elif compact_run: self.log.info("auto compaction runs successfully") else: self.log.error("Unknown error")
def _viewFragmentationThreshold(self): for serverInfo in self.servers: self.log.info(serverInfo) rest = RestConnection(serverInfo) rest.reset_auto_compaction() parallelDBAndView = "false"