SDF_boolean_t internal_testhomedir_init() { SDF_boolean_t ret = SDF_FALSE; loadProperties("/opt/schooner/config/schooner-med.properties"); // TODO get filename from command line // plat_log_parse_arg("platform/alloc=trace"); if (SDF_TRUE != (ret = init_agent_sm(0))) { printf("init_agent_sm() failed!\n"); } else { plat_shmem_alloc_get_stats(&g_init_sm_stats); uint64_t buckets = getProperty_uLongLong("SDF_HOME_DIR_BUCKETS", MAX_BUCKETS - 1); uint32_t lockType = getProperty_uLongInt("SDF_HOME_DIR_LOCKTYPE", HMDIR_FTH_BUCKET); homedir = HomeDir_create(buckets, lockType); } return (ret); }
/** @brief Fetch config from properties file which may be set on command line */ int agent_config_set_properties(struct plat_opts_config_sdf_agent *config) { int success = 1; #ifndef SDFAPIONLY success = !loadProperties(config->propertyFileName); #endif SDFPropertyFileVersionFound = getProperty_uLongInt("SDF_PROP_FILE_VERSION", 0); /* xxxzzz * Temporarily accept property files without a version, but * print a nasty message. */ if (SDFPropertyFileVersionFound == 0) { plat_log_msg(20838, PLAT_LOG_CAT_PRINT_ARGS, PLAT_LOG_LEVEL_ERROR, "Missing version in property file (Add 'SDF_PROP_FILE_VERSION = %"PRIu64"')", SDFPropertyFileVersionSupported); success = 0; } else { if (SDFPropertyFileVersionFound != SDFPropertyFileVersionSupported) { plat_log_msg(20839, PLAT_LOG_CAT_PRINT_ARGS, PLAT_LOG_LEVEL_ERROR, "Inconsistent version of property file: %"PRIu64" (only version %"PRIu64" is supported)", SDFPropertyFileVersionFound, SDFPropertyFileVersionSupported); success = 0; } else { plat_log_msg(20840, PLAT_LOG_CAT_PRINT_ARGS, PLAT_LOG_LEVEL_DEBUG, "Version of property file: %"PRIu64"", SDFPropertyFileVersionFound); } } config->numFlashProtocolThreads = getProperty_uLongInt("SDF_FLASH_PROTOCOL_THREADS", storm_mode ? 16 : 128); config->numAsyncPutThreads = getProperty_uLongInt("ZS_ASYNC_PUT_THREADS", storm_mode ? 16: 128); config->numReplicationThreads = getProperty_uLongInt("SDF_REPLICATION_THREADS", 8); config->numAgentMboxes = getProperty_uLongInt("SDF_NUM_AGENT_MBOXES", 10); config->defaultShardCount = getProperty_uLongInt("SDF_DEFAULT_SHARD_COUNT", 1); config->numFlashDevs = getProperty_uLongInt("SDF_NUM_FLASH_DEVS", 1); /* * XXX: This is the only one which currently exists as an overidable * command line option. */ if (!config->numObjs) { config->numObjs = getProperty_uLongInt("SDF_SHARD_MAX_OBJECTS", 1000000); } if (!config->nnodes) { config->nnodes = getProperty_Int("SDF_NNODES", 0); } if (!config->replication_outstanding_window) { config->replication_outstanding_window = getProperty_Int("SDF_REPLICATION_OUTSTANDING_WINDOW", 1000); } if (!config->replication_lease_secs) { config->replication_lease_secs = getProperty_Int("SDF_REPLICATION_LEASE_SECS", 5); } #ifdef SDFAPIONLY if ( (1 == getProperty_Int("SDF_REFORMAT", 0)) || (1 == getProperty_Int("ZS_REFORMAT", 0))) { // Default to recover config->system_recovery = SYS_FLASH_REFORMAT; } else { config->system_recovery = SYS_FLASH_RECOVERY; } #endif // SDFAPIONLY plat_log_msg(20841, PLAT_LOG_CAT_PRINT_ARGS, PLAT_LOG_LEVEL_DEBUG, "PROP: SDF_CLUSTER_NUMBER_NODES=%u", config->nnodes); plat_log_msg(20842, PLAT_LOG_CAT_PRINT_ARGS, PLAT_LOG_LEVEL_DEBUG, "PROP: SDF_ACTION_NODE_THREADS=%u", config->numActionThreads); plat_log_msg(20843, PLAT_LOG_CAT_PRINT_ARGS, PLAT_LOG_LEVEL_DEBUG, "PROP: SDF_FLASH_PROTOCOL_THREADS=%u", config->numFlashProtocolThreads); plat_log_msg(20844, PLAT_LOG_CAT_PRINT_ARGS, PLAT_LOG_LEVEL_DEBUG, "PROP: SDF_REPLICATION_THREADS=%u", config->numReplicationThreads); plat_log_msg(20845, PLAT_LOG_CAT_PRINT_ARGS, PLAT_LOG_LEVEL_DEBUG, "PROP: SDF_SHARD_MAX_OBJECTS=%u", config->numObjs); plat_log_msg(70126, PLAT_LOG_CAT_PRINT_ARGS, PLAT_LOG_LEVEL_DEBUG, "PROP: SDF_MSG_ON=%u", getProperty_Int("SDF_MSG_ON", 1)); plat_log_msg(20847, PLAT_LOG_CAT_PRINT_ARGS, PLAT_LOG_LEVEL_DEBUG, "PROP: SDF_NUM_FLASH_DEVS=%u", config->numFlashDevs); plat_log_msg(20848, PLAT_LOG_CAT_PRINT_ARGS, PLAT_LOG_LEVEL_DEBUG, "PROP: SDF_DEFAULT_SHARD_COUNT=%u", config->defaultShardCount); return (success); }
int init_action_home(struct sdf_agent_state *state) { struct plat_opts_config_sdf_agent *config = &state->config; SDF_action_init_t *pai = &state->ActionInitState; SDF_flash_init_t *pfi = &state->FlashInitState; SDF_async_puts_init_t *papi = &state->AsyncPutsInitState; struct sdf_replicator_config *pri = &state->ReplicationInitState; initCommonProtocolStuff(); pai->pcs = allocate_action_state(); plat_assert(pai->pcs); pai->pcs->failback = config->system_restart; pai->nthreads = config->numActionThreads; pai->nnode = state->rank; pai->nnodes = config->nnodes; pai->disable_fast_path = config->disable_fast_path || config->always_replicate; pai->flash_dev = state->flash_dev; pai->flash_dev_count = config->numFlashDevs; InitActionProtocolCommonState(pai->pcs, pai); if ((!SDFNew_Mode) || SDFEnable_Replication) { pfi->nthreads = config->numFlashProtocolThreads; pfi->my_node = state->rank; pfi->nnodes = config->nnodes; pfi->flash_server_service = SDF_FLSH; pfi->flash_client_service = SDF_RESPONSES; pfi->flash_dev = state->flash_dev; pfi->flash_dev_count = config->numFlashDevs; pfi->pfs = home_flash_alloc(pfi, pai->pcs); plat_assert(pfi->pfs); sdf_replicator_config_init(pri, state->rank, config->nnodes); pri->nthreads = config->numReplicationThreads; pri->replication_service = SDF_REPLICATION; pri->replication_peer_service = SDF_REPLICATION_PEER; pri->flash_service = SDF_FLSH; pri->response_service = SDF_RESPONSES; pri->lease_usecs = config->replication_lease_secs * 1000000L; pri->lease_liveness = config->replication_lease_liveness; pri->switch_back_timeout_usecs = config->replication_switch_back_timeout_secs * PLAT_MILLION; pri->initial_preference = config->replication_initial_preference; pri->outstanding_window = config->replication_outstanding_window; pri->timeout_usecs = sdf_msg_getp_int("msg_timeout") * 1000L; #ifdef SIMPLE_REPLICATION pri->node_count = SDFGetNumNodesInClusterFromConfig(); #endif pri->vip_config = pai->pcs->qrep_state.vip_config; pri->adapter = sdf_replicator_adapter_alloc(pri, &alloc_replicator, config); } /* initialization state for async puts thread pool */ papi->nthreads = config->numAsyncPutThreads; papi->my_node = state->rank; papi->nnodes = config->nnodes; papi->flash_dev = state->flash_dev; papi->flash_dev_count = config->numFlashDevs; papi->max_flushes_in_progress = getProperty_uLongInt("SDF_MAX_OUTSTANDING_FLUSHES", 8); if (papi->max_flushes_in_progress == 0) { papi->max_flushes_in_progress = 8; plat_log_msg(30603, PLAT_LOG_CAT_PRINT_ARGS, PLAT_LOG_LEVEL_DEBUG, "SDF_MAX_OUTSTANDING_FLUSHES must be non-zero; using default of %d", papi->max_flushes_in_progress); } else if (papi->max_flushes_in_progress > papi->nthreads) { papi->max_flushes_in_progress = papi->nthreads; plat_log_msg(30604, PLAT_LOG_CAT_PRINT_ARGS, PLAT_LOG_LEVEL_DEBUG, "SDF_MAX_OUTSTANDING_FLUSHES must be less than or equal to the number of async put threads; setting to %d", papi->max_flushes_in_progress); } else { plat_log_msg(30605, PLAT_LOG_CAT_PRINT_ARGS, PLAT_LOG_LEVEL_DEBUG, "SDF_MAX_OUTSTANDING_FLUSHES = %d", papi->max_flushes_in_progress); } papi->max_background_flushes_in_progress = getProperty_uLongInt("ZS_MAX_OUTSTANDING_BACKGROUND_FLUSHES", 8); if (papi->max_background_flushes_in_progress > papi->nthreads) { papi->max_background_flushes_in_progress = papi->nthreads; plat_log_msg(80078, PLAT_LOG_CAT_PRINT_ARGS, PLAT_LOG_LEVEL_DEBUG, "ZS_MAX_OUTSTANDING_BACKGROUND_FLUSHES must be less than or equal to the number of async put threads; setting to %d", papi->max_background_flushes_in_progress); } else { plat_log_msg(80079, PLAT_LOG_CAT_PRINT_ARGS, PLAT_LOG_LEVEL_DEBUG, "ZS_MAX_OUTSTANDING_BACKGROUND_FLUSHES = %d", papi->max_background_flushes_in_progress); } papi->background_flush_sleep_msec = getProperty_uLongInt("ZS_BACKGROUND_FLUSH_SLEEP_MSEC", 1000); if (papi->background_flush_sleep_msec < MIN_BACKGROUND_FLUSH_SLEEP_MSEC) { papi->background_flush_sleep_msec = MIN_BACKGROUND_FLUSH_SLEEP_MSEC; plat_log_msg(80080, PLAT_LOG_CAT_PRINT_ARGS, PLAT_LOG_LEVEL_DEBUG, "ZS_BACKGROUND_FLUSH_SLEEP_MSEC must be >= %d; defaulting to minimum value", MIN_BACKGROUND_FLUSH_SLEEP_MSEC); } else { plat_log_msg(80081, PLAT_LOG_CAT_PRINT_ARGS, PLAT_LOG_LEVEL_DEBUG, "ZS_BACKGROUND_FLUSH_SLEEP_MSEC = %d", papi->background_flush_sleep_msec); } papi->paps = async_puts_alloc(papi, pai->pcs); if (!papi->paps) fatal("async_puts_alloc failed"); return (SDF_TRUE); }