def update_slaves(datanode): hadoop = get_hadoop_base() hdfs = HDFS(hadoop) slaves = datanode.nodes() if data_changed('namenode.slaves', slaves): unitdata.kv().set('namenode.slaves', slaves) hdfs.register_slaves(slaves) hdfs.reload_slaves() set_state('namenode.ready')
def update_ha_config(datanode): cluster_nodes = get_cluster_nodes() jn_nodes = sorted(datanode.nodes()) jn_port = datanode.jn_port() started = is_state('namenode.started') new_cluster_config = data_changed('namenode.cluster-nodes', cluster_nodes) new_jn_config = data_changed('namenode.jn.config', (jn_nodes, jn_port)) hadoop = get_hadoop_base() hdfs = HDFS(hadoop) hdfs.configure_namenode(cluster_nodes) hdfs.register_journalnodes(jn_nodes, jn_port) if started and new_cluster_config: hdfs.restart_namenode() elif started and new_jn_config: hdfs.reload_slaves() # is this actually necessary?
def unregister_datanode(datanode): hadoop = get_hadoop_base() hdfs = HDFS(hadoop) slaves = unitdata.kv().get('namenode.slaves', []) slaves_leaving = datanode.nodes() # only returns nodes in "leaving" state hookenv.log('Slaves leaving: {}'.format(slaves_leaving)) slaves_remaining = list(set(slaves) - set(slaves_leaving)) unitdata.kv().set('namenode.slaves', slaves_remaining) hdfs.register_slaves(slaves_remaining) hdfs.reload_slaves() utils.remove_kv_hosts(slaves_leaving) utils.manage_etc_hosts() if not slaves_remaining: remove_state('namenode.ready') datanode.dismiss()