X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=ovsdb%2Fovsdb-server.c;h=b430b0e56711b3a8ff1f8e664ec44b93e6bdc00e;hb=9dbc190c816b51dad3ca80bb9fb3835769758781;hp=776bbb258ba1c60a31078fd399e56a61f96d9ac1;hpb=f125905cdd3dc0339ad968c0a70128807884b400;p=openvswitch diff --git a/ovsdb/ovsdb-server.c b/ovsdb/ovsdb-server.c index 776bbb25..b430b0e5 100644 --- a/ovsdb/ovsdb-server.c +++ b/ovsdb/ovsdb-server.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2009, 2010, 2011 Nicira Networks +/* Copyright (c) 2009, 2010, 2011, 2012 Nicira, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -32,6 +32,7 @@ #include "jsonrpc-server.h" #include "leak-checker.h" #include "list.h" +#include "memory.h" #include "ovsdb.h" #include "ovsdb-data.h" #include "ovsdb-types.h" @@ -39,6 +40,7 @@ #include "poll-loop.h" #include "process.h" #include "row.h" +#include "simap.h" #include "stream-ssl.h" #include "stream.h" #include "stress.h" @@ -135,6 +137,8 @@ main(int argc, char *argv[]) daemonize_complete(); + VLOG_INFO("%s (Open vSwitch) %s", program_name, VERSION); + unixctl_command_register("exit", "", 0, 0, ovsdb_server_exit, &exiting); unixctl_command_register("ovsdb-server/compact", "", 0, 0, ovsdb_server_compact, file); @@ -143,6 +147,17 @@ main(int argc, char *argv[]) exiting = false; while (!exiting) { + memory_run(); + if (memory_should_report()) { + struct simap usage; + + simap_init(&usage); + ovsdb_jsonrpc_server_get_memory_usage(jsonrpc, &usage); + ovsdb_get_memory_usage(db, &usage); + memory_report(&usage); + simap_destroy(&usage); + } + reconfigure_from_db(jsonrpc, db, &remotes); ovsdb_jsonrpc_server_run(jsonrpc); unixctl_server_run(unixctl); @@ -157,6 +172,7 @@ main(int argc, char *argv[]) update_remote_status(jsonrpc, &remotes, db); } + memory_wait(); ovsdb_jsonrpc_server_wait(jsonrpc); unixctl_server_wait(unixctl); ovsdb_trigger_wait(db, time_msec()); @@ -276,7 +292,7 @@ add_remote(struct shash *remotes, const char *target) options = shash_find_data(remotes, target); if (!options) { - options = ovsdb_jsonrpc_default_options(); + options = ovsdb_jsonrpc_default_options(target); shash_add(remotes, target, options); } @@ -319,12 +335,11 @@ get_datum(struct ovsdb_row *row, const char *column_name, return &row->fields[column->index]; } -/* This function is used to read the string-string key-values from a map. - * Returns the true if the 'key' is found and returns the "value" associated - * with the 'key' in 'stringp', else returns false. */ -static bool +/* Read string-string key-values from a map. Returns the value associated with + * 'key', if found, or NULL */ +static const char * read_map_string_column(const struct ovsdb_row *row, const char *column_name, - const char **stringp, const char *key) + const char *key) { const struct ovsdb_datum *datum; union ovsdb_atom *atom_key = NULL, *atom_value = NULL; @@ -334,8 +349,7 @@ read_map_string_column(const struct ovsdb_row *row, const char *column_name, OVSDB_TYPE_STRING, UINT_MAX); if (!datum) { - *stringp = NULL; - return false; + return NULL; } for (i = 0; i < datum->n; i++) { @@ -346,8 +360,7 @@ read_map_string_column(const struct ovsdb_row *row, const char *column_name, } } - *stringp = atom_value ? atom_value->string : NULL; - return atom_value != NULL; + return atom_value ? atom_value->string : NULL; } static const union ovsdb_atom * @@ -427,21 +440,6 @@ write_string_string_column(struct ovsdb_row *row, const char *column_name, ovsdb_datum_sort_assert(datum, column->type.key.type); } -/* Get the other config for the manager from the database. */ -static void -manager_get_other_config(const struct ovsdb_row *row, - struct ovsdb_jsonrpc_options *options) -{ - const char *temp_string; - - /* Retrieve the configs and store in the options. */ - if (read_map_string_column(row, "other_config", &temp_string, "dscp")) { - options->dscp = atoi(temp_string); - } else { - options->dscp = DSCP_DEFAULT; - } -} - /* Adds a remote and options to 'remotes', based on the Manager table row in * 'row'. */ static void @@ -450,7 +448,7 @@ add_manager_options(struct shash *remotes, const struct ovsdb_row *row) static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 1); struct ovsdb_jsonrpc_options *options; long long int max_backoff, probe_interval; - const char *target; + const char *target, *dscp_string; if (!read_string_column(row, "target", &target) || !target) { VLOG_INFO_RL(&rl, "Table `%s' has missing or invalid `target' column", @@ -466,7 +464,14 @@ add_manager_options(struct shash *remotes, const struct ovsdb_row *row) options->probe_interval = probe_interval; } - manager_get_other_config(row, options); + options->dscp = DSCP_DEFAULT; + dscp_string = read_map_string_column(row, "other_config", "dscp"); + if (dscp_string) { + int dscp = atoi(dscp_string); + if (dscp >= 0 && dscp <= 63) { + options->dscp = dscp; + } + } } static void