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);
}
Esempio n. 2
0
/** @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);
}
Esempio n. 3
0
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);
}