def post_init_cb(self): # Optionally change node name and restart server if params.get('use_domain_names', False): RemoteUtilHelper.use_hostname_for_server_settings(self.node) # Optionally disable consistency check if params.get('disable_consistency', False): self.rest.set_couchdb_option(section='couchdb', option='consistency_check_ratio', value='0.0')
def initialize(self, params): start_time = time.time() cluster_initialized = False server = params["server"] remote_client = RemoteMachineShellConnection(params["server"]) while time.time() < start_time + 5 * 60: try: rest = RestConnection(server) # Optionally change node name and restart server if params.get('use_domain_names', 0): RemoteUtilHelper.use_hostname_for_server_settings(server) # Make sure that data_path and index_path are writable by couchbase user for path in set(filter(None, [server.data_path, server.index_path])): time.sleep(3) for cmd in ("rm -rf {0}/*".format(path), "chown -R couchbase:couchbase {0}".format(path)): remote_client.execute_command(cmd) rest.set_data_path(data_path=server.data_path, index_path=server.index_path) time.sleep(3) # Initialize cluster if "init_nodes" in params: init_nodes = params["init_nodes"] else: init_nodes = "True" if init_nodes.lower() == "true": rest.init_cluster(username=server.rest_username, password=server.rest_password) memory_quota = rest.get_nodes_self().mcdMemoryReserved rest.init_cluster_memoryQuota(memoryQuota=memory_quota) # TODO: Symlink data-dir to custom path # remote_client.stop_couchbase() # remote_client.execute_command('mv /opt/couchbase/var {0}'.format(server.data_path)) # remote_client.execute_command('ln -s {0}/var /opt/couchbase/var'.format(server.data_path)) # remote_client.execute_command("chown -h couchbase:couchbase /opt/couchbase/var") # remote_client.start_couchbase() # Optionally disable consistency check if params.get('disable_consistency', 0): rest.set_couchdb_option(section='couchdb', option='consistency_check_ratio', value='0.0') # memcached env variable mem_req_tap_env = params.get('MEMCACHED_REQS_TAP_EVENT', 0) if mem_req_tap_env: remote_client.set_environment_variable('MEMCACHED_REQS_TAP_EVENT', mem_req_tap_env) remote_client.disconnect() # TODO: Make it work with windows if "erlang_threads" in params: num_threads = params.get('erlang_threads', testconstants.NUM_ERLANG_THREADS) # Stop couchbase-server ClusterOperationHelper.stop_cluster([server]) if "sync_threads" in params or ':' in num_threads: sync_threads = params.get('sync_threads', True) else: sync_threads = False # Change type of threads(sync/async) and num erlang threads ClusterOperationHelper.change_erlang_threads_values([server], sync_threads, num_threads) # Start couchbase-server ClusterOperationHelper.start_cluster([server]) if "erlang_gc_level" in params: erlang_gc_level = params.get('erlang_gc_level', None) if erlang_gc_level is None: # Don't change the value break # Stop couchbase-server ClusterOperationHelper.stop_cluster([server]) # Change num erlang threads ClusterOperationHelper.change_erlang_gc([server], erlang_gc_level) # Start couchbase-server ClusterOperationHelper.start_cluster([server]) cluster_initialized = True break except ServerUnavailableException: log.error("error happened while initializing the cluster @ {0}".format(server.ip)) log.info('sleep for 5 seconds before trying again ...') time.sleep(5) if not cluster_initialized: sys.exit("unable to initialize couchbase node")
def initialize(self, params): start_time = time.time() cluster_initialized = False server = params["server"] remote_client = RemoteMachineShellConnection(params["server"]) while time.time() < start_time + 5 * 60: try: rest = RestConnection(server) # Optionally change node name and restart server if params.get('use_domain_names', 0): RemoteUtilHelper.use_hostname_for_server_settings(server) # Make sure that data_path and index_path are writable by couchbase user for path in set(filter(None, [server.data_path, server.index_path])): time.sleep(3) for cmd in ("rm -rf {0}/*".format(path), "chown -R couchbase:couchbase {0}".format(path)): remote_client.execute_command(cmd) rest.set_data_path(data_path=server.data_path, index_path=server.index_path) time.sleep(3) # Initialize cluster rest.init_cluster(username=server.rest_username, password=server.rest_password) memory_quota = rest.get_nodes_self().mcdMemoryReserved rest.init_cluster_memoryQuota(memoryQuota=memory_quota) # TODO: Symlink data-dir to custom path # remote_client.stop_couchbase() # remote_client.execute_command('mv /opt/couchbase/var {0}'.format(server.data_path)) # remote_client.execute_command('ln -s {0}/var /opt/couchbase/var'.format(server.data_path)) # remote_client.execute_command("chown -h couchbase:couchbase /opt/couchbase/var") # remote_client.start_couchbase() # Optionally disable consistency check if params.get('disable_consistency', 0): rest.set_couchdb_option(section='couchdb', option='consistency_check_ratio', value='0.0') # memcached env variable mem_req_tap_env = params.get('MEMCACHED_REQS_TAP_EVENT', 0) if mem_req_tap_env: remote_client.set_environment_variable('MEMCACHED_REQS_TAP_EVENT', mem_req_tap_env) remote_client.disconnect() # TODO: Make it work with windows if "erlang_threads" in params: num_threads = params.get('erlang_threads', testconstants.NUM_ERLANG_THREADS) # Stop couchbase-server ClusterOperationHelper.stop_cluster([server]) if "sync_threads" in params or ':' in num_threads: sync_threads = params.get('sync_threads', True) else: sync_threads = False # Change type of threads(sync/async) and num erlang threads ClusterOperationHelper.change_erlang_threads_values([server], sync_threads, num_threads) # Start couchbase-server ClusterOperationHelper.start_cluster([server]) if "erlang_gc_level" in params: erlang_gc_level = params.get('erlang_gc_level', None) if erlang_gc_level is None: # Don't change the value break # Stop couchbase-server ClusterOperationHelper.stop_cluster([server]) # Change num erlang threads ClusterOperationHelper.change_erlang_gc([server], erlang_gc_level) # Start couchbase-server ClusterOperationHelper.start_cluster([server]) cluster_initialized = True break except ServerUnavailableException: log.error("error happened while initializing the cluster @ {0}".format(server.ip)) log.info('sleep for 5 seconds before trying again ...') time.sleep(5) if not cluster_initialized: sys.exit("unable to initialize couchbase node")
def initialize(self, params): log.info('*****CouchbaseServerInstaller initialize the application ****') start_time = time.time() cluster_initialized = False server = params["server"] remote_client = RemoteMachineShellConnection(params["server"]) while time.time() < start_time + 5 * 60: try: rest = RestConnection(server) # Optionally change node name and restart server if params.get('use_domain_names', 0): RemoteUtilHelper.use_hostname_for_server_settings(server) # Make sure that data_path and index_path are writable by couchbase user for path in set(filter(None, [server.data_path, server.index_path])): time.sleep(3) for cmd in ("rm -rf {0}/*".format(path), "chown -R couchbase:couchbase {0}".format(path)): remote_client.execute_command(cmd) rest.set_data_path(data_path=server.data_path, index_path=server.index_path) time.sleep(3) # Initialize cluster if "init_nodes" in params: init_nodes = params["init_nodes"] else: init_nodes = "True" if (isinstance(init_nodes, bool) and init_nodes) or \ (isinstance(init_nodes, str) and init_nodes.lower() == "true"): if not server.services: set_services = ["kv"] elif server.services: set_services = server.services.split(',') kv_quota = 0 while kv_quota == 0: time.sleep(1) kv_quota = int(rest.get_nodes_self().mcdMemoryReserved) info = rest.get_nodes_self() cb_version = info.version[:5] if cb_version in COUCHBASE_FROM_VERSION_4: if "index" in set_services and "fts" not in set_services: log.info("quota for index service will be %s MB" \ % (INDEX_QUOTA)) kv_quota = int(info.mcdMemoryReserved * 2/3) - INDEX_QUOTA log.info("set index quota to node %s " % server.ip) rest.set_indexer_memoryQuota(indexMemoryQuota=INDEX_QUOTA) if kv_quota < MIN_KV_QUOTA: raise Exception("KV RAM needs to be more than %s MB" " at node %s" % (MIN_KV_QUOTA, server.ip)) elif "index" in set_services and "fts" in set_services: log.info("quota for index service will be %s MB" \ % (INDEX_QUOTA)) log.info("quota for fts service will be %s MB" \ % (FTS_QUOTA)) kv_quota = int(info.mcdMemoryReserved * 2/3)\ - INDEX_QUOTA \ - FTS_QUOTA log.info("set both index and fts quota at node %s "\ % server.ip) rest.set_indexer_memoryQuota(indexMemoryQuota=INDEX_QUOTA) rest.set_fts_memoryQuota(ftsMemoryQuota=FTS_QUOTA) if kv_quota < MIN_KV_QUOTA: raise Exception("KV RAM need to be more than %s MB" " at node %s" % (MIN_KV_QUOTA, server.ip)) elif "fts" in set_services and "index" not in set_services: log.info("quota for fts service will be %s MB" \ % (FTS_QUOTA)) kv_quota = int(info.mcdMemoryReserved * 2/3) - FTS_QUOTA if kv_quota < MIN_KV_QUOTA: raise Exception("KV RAM need to be more than %s MB" " at node %s" % (MIN_KV_QUOTA, server.ip)) """ for fts, we need to grep quota from ns_server but need to make it works even RAM of vm is smaller than 2 GB """ rest.set_fts_memoryQuota(ftsMemoryQuota=FTS_QUOTA) """ set kv quota smaller than 1 MB so that it will satify the condition smaller than allow quota """ kv_quota -= 1 log.info("quota for kv: %s MB" % kv_quota) rest.init_cluster_memoryQuota(server.rest_username, \ server.rest_password, \ kv_quota) if params["version"][:5] in COUCHBASE_FROM_VERSION_4: rest.init_node_services(username=server.rest_username, password=server.rest_password, services=set_services) rest.init_cluster(username=server.rest_username, password=server.rest_password) # Optionally disable consistency check if params.get('disable_consistency', 0): rest.set_couchdb_option(section='couchdb', option='consistency_check_ratio', value='0.0') # memcached env variable mem_req_tap_env = params.get('MEMCACHED_REQS_TAP_EVENT', 0) if mem_req_tap_env: remote_client.set_environment_variable('MEMCACHED_REQS_TAP_EVENT', mem_req_tap_env) """ set cbauth environment variables from Watson version it is checked version inside method """ remote_client.set_cbauth_env(server) remote_client.disconnect() # TODO: Make it work with windows if "erlang_threads" in params: num_threads = params.get('erlang_threads', testconstants.NUM_ERLANG_THREADS) # Stop couchbase-server ClusterOperationHelper.stop_cluster([server]) if "sync_threads" in params or ':' in num_threads: sync_threads = params.get('sync_threads', True) else: sync_threads = False # Change type of threads(sync/async) and num erlang threads ClusterOperationHelper.change_erlang_threads_values([server], sync_threads, num_threads) # Start couchbase-server ClusterOperationHelper.start_cluster([server]) if "erlang_gc_level" in params: erlang_gc_level = params.get('erlang_gc_level', None) if erlang_gc_level is None: # Don't change the value break # Stop couchbase-server ClusterOperationHelper.stop_cluster([server]) # Change num erlang threads ClusterOperationHelper.change_erlang_gc([server], erlang_gc_level) # Start couchbase-server ClusterOperationHelper.start_cluster([server]) cluster_initialized = True break except ServerUnavailableException: log.error("error happened while initializing the cluster @ {0}".format(server.ip)) log.info('sleep for 5 seconds before trying again ...') time.sleep(5) if not cluster_initialized: sys.exit("unable to initialize couchbase node")