1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165
|
/* Copyright (c) 2009, 2010, 2011, 2012, 2013, 2017 Nicira, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at:
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef OVSDB_OVSDB_H
#define OVSDB_OVSDB_H 1
#include "compiler.h"
#include "openvswitch/hmap.h"
#include "openvswitch/list.h"
#include "openvswitch/shash.h"
#include "openvswitch/uuid.h"
#include "ovs-thread.h"
struct json;
struct ovsdb_log;
struct ovsdb_session;
struct ovsdb_txn;
struct simap;
/* Database schema. */
struct ovsdb_schema {
char *name;
char *version;
char *cksum;
struct shash tables; /* Contains "struct ovsdb_table_schema *"s. */
};
struct ovsdb_schema *ovsdb_schema_create(const char *name,
const char *version,
const char *cksum);
struct ovsdb_schema *ovsdb_schema_clone(const struct ovsdb_schema *);
void ovsdb_schema_destroy(struct ovsdb_schema *);
struct ovsdb_error *ovsdb_schema_from_file(const char *file_name,
struct ovsdb_schema **)
OVS_WARN_UNUSED_RESULT;
struct ovsdb_error *ovsdb_schema_from_json(const struct json *,
struct ovsdb_schema **)
OVS_WARN_UNUSED_RESULT;
struct json *ovsdb_schema_to_json(const struct ovsdb_schema *);
bool ovsdb_schema_equal(const struct ovsdb_schema *,
const struct ovsdb_schema *);
struct ovsdb_error *ovsdb_schema_check_for_ephemeral_columns(
const struct ovsdb_schema *) OVS_WARN_UNUSED_RESULT;
void ovsdb_schema_persist_ephemeral_columns(struct ovsdb_schema *,
const char *filename);
struct ovsdb_version {
unsigned int x;
unsigned int y;
unsigned int z;
};
bool ovsdb_parse_version(const char *, struct ovsdb_version *);
bool ovsdb_is_valid_version(const char *);
/* Database. */
struct ovsdb_txn_history_node {
struct ovs_list node; /* Element in struct ovsdb's txn_history list */
struct ovsdb_txn *txn;
};
struct ovsdb_compaction_state {
pthread_t thread; /* Thread handle. */
struct ovsdb *db; /* Copy of a database data to compact. */
struct json *data; /* 'db' as a serialized json. */
struct json *schema; /* 'db' schema json. */
uint64_t applied_index; /* Last applied index reported by the storage
* at the moment of a database copy. */
/* Completion signaling. */
struct seq *done;
uint64_t seqno;
uint64_t init_time; /* Time spent by the main thread preparing. */
uint64_t thread_time; /* Time spent for compaction by the thread. */
};
struct ovsdb {
char *name;
struct ovsdb_schema *schema;
struct ovsdb_storage *storage; /* If nonnull, log for transactions. */
struct uuid prereq;
struct ovs_list monitors; /* Contains "struct ovsdb_monitor"s. */
struct shash tables; /* Contains "struct ovsdb_table *"s. */
/* Triggers. */
struct ovs_list triggers; /* Contains "struct ovsdb_trigger"s. */
bool run_triggers;
bool run_triggers_now;
struct ovsdb_table *rbac_role;
/* History trasanctions for incremental monitor transfer. */
bool need_txn_history; /* Need to maintain history of transactions. */
unsigned int n_txn_history; /* Current number of history transactions. */
unsigned int n_txn_history_atoms; /* Total number of atoms in history. */
struct ovs_list txn_history; /* Contains "struct ovsdb_txn_history_node. */
size_t n_atoms; /* Total number of ovsdb atoms in the database. */
bool read_only; /* If 'true', JSON-RPC clients are not allowed to change
* the data. */
/* Relay mode. */
bool is_relay; /* True, if database is in relay mode. */
/* List that holds transactions waiting to be forwarded to the server. */
struct ovs_list txn_forward_new;
/* Hash map for transactions that are already sent and waits for reply. */
struct hmap txn_forward_sent;
/* Database compaction. */
struct ovsdb_compaction_state *snap_state;
};
/* Total number of 'weak reference' objects in all databases
* and transactions. */
extern size_t n_weak_refs;
struct ovsdb *ovsdb_create(struct ovsdb_schema *, struct ovsdb_storage *);
void ovsdb_destroy(struct ovsdb *);
void ovsdb_no_data_conversion_disable(void);
bool ovsdb_conversion_with_no_data_supported(const struct ovsdb *);
void ovsdb_get_memory_usage(const struct ovsdb *, struct simap *usage);
struct ovsdb_table *ovsdb_get_table(const struct ovsdb *, const char *);
struct ovsdb_txn *ovsdb_execute_compose(
struct ovsdb *, const struct ovsdb_session *, const struct json *params,
bool read_only, const char *role, const char *id,
long long int elapsed_msec, long long int *timeout_msec,
bool *durable, bool *forwarding_needed, struct json **);
struct json *ovsdb_execute(struct ovsdb *, const struct ovsdb_session *,
const struct json *params, bool read_only,
const char *role, const char *id,
long long int elapsed_msec,
long long int *timeout_msec);
struct ovsdb_error *ovsdb_snapshot(struct ovsdb *, bool trim_memory)
OVS_WARN_UNUSED_RESULT;
void ovsdb_snapshot_wait(struct ovsdb *);
bool ovsdb_snapshot_in_progress(struct ovsdb *);
bool ovsdb_snapshot_ready(struct ovsdb *);
void ovsdb_replace(struct ovsdb *dst, struct ovsdb *src);
#endif /* ovsdb/ovsdb.h */
|