[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[xen master] tools/xenstore: replace key in struct node with data base name



commit 7185eee09c9c66c4f18eac324318ae5194fbb042
Author:     Juergen Gross <jgross@xxxxxxxx>
AuthorDate: Mon Jul 24 13:02:24 2023 +0200
Commit:     Julien Grall <julien@xxxxxxx>
CommitDate: Thu Jul 27 22:02:02 2023 +0100

    tools/xenstore: replace key in struct node with data base name
    
    Instead of storing the TDB key in struct node, only store the name of
    the node used to access it in the data base.
    
    Associated with that change replace the key parameter of access_node()
    with the equivalent db_name.
    
    This is in preparation to replace TDB with a more simple data storage.
    
    Signed-off-by: Juergen Gross <jgross@xxxxxxxx>
    Reviewed-by: Julien Grall <jgrall@xxxxxxxxxx>
---
 tools/xenstore/xenstored_core.c        | 19 +++++++++++++------
 tools/xenstore/xenstored_core.h        |  4 ++--
 tools/xenstore/xenstored_transaction.c | 10 +++++-----
 tools/xenstore/xenstored_transaction.h |  2 +-
 4 files changed, 21 insertions(+), 14 deletions(-)

diff --git a/tools/xenstore/xenstored_core.c b/tools/xenstore/xenstored_core.c
index b7fdf16718..ba4798dd6e 100644
--- a/tools/xenstore/xenstored_core.c
+++ b/tools/xenstore/xenstored_core.c
@@ -821,18 +821,20 @@ int write_node_raw(struct connection *conn, TDB_DATA 
*key, struct node *node,
 }
 
 /*
- * Write the node. If the node is written, caller can find the key used in
- * node->key. This can later be used if the change needs to be reverted.
+ * Write the node. If the node is written, caller can find the DB name used in
+ * node->db_name. This can later be used if the change needs to be reverted.
  */
 static int write_node(struct connection *conn, struct node *node,
                      enum write_node_mode mode, bool no_quota_check)
 {
        int ret;
+       TDB_DATA key;
 
-       if (access_node(conn, node, NODE_ACCESS_WRITE, &node->key))
+       if (access_node(conn, node, NODE_ACCESS_WRITE, &node->db_name))
                return errno;
 
-       ret = write_node_raw(conn, &node->key, node, mode, no_quota_check);
+       set_tdb_key(node->db_name, &key);
+       ret = write_node_raw(conn, &key, node, mode, no_quota_check);
        if (ret && conn && conn->transaction) {
                /*
                 * Reverting access_node() is hard, so just fail the
@@ -1450,10 +1452,13 @@ nomem:
 
 static void destroy_node_rm(struct connection *conn, struct node *node)
 {
+       TDB_DATA key;
+
        if (streq(node->name, "/"))
                corrupt(NULL, "Destroying root node!");
 
-       do_tdb_delete(conn, &node->key, &node->acc);
+       set_tdb_key(node->db_name, &key);
+       do_tdb_delete(conn, &key, &node->acc);
 }
 
 static int destroy_node(struct connection *conn, struct node *node)
@@ -1643,10 +1648,11 @@ static int delnode_sub(const void *ctx, struct 
connection *conn,
        const char *root = arg;
        bool watch_exact;
        int ret;
+       const char *db_name;
        TDB_DATA key;
 
        /* Any error here will probably be repeated for all following calls. */
-       ret = access_node(conn, node, NODE_ACCESS_DELETE, &key);
+       ret = access_node(conn, node, NODE_ACCESS_DELETE, &db_name);
        if (ret > 0)
                return WALK_TREE_SUCCESS_STOP;
 
@@ -1654,6 +1660,7 @@ static int delnode_sub(const void *ctx, struct connection 
*conn,
                return WALK_TREE_ERROR_STOP;
 
        /* In case of error stop the walk. */
+       set_tdb_key(db_name, &key);
        if (!ret && do_tdb_delete(conn, &key, &node->acc))
                return WALK_TREE_ERROR_STOP;
 
diff --git a/tools/xenstore/xenstored_core.h b/tools/xenstore/xenstored_core.h
index 19a81adc49..ec7a56a869 100644
--- a/tools/xenstore/xenstored_core.h
+++ b/tools/xenstore/xenstored_core.h
@@ -181,8 +181,8 @@ struct node_account_data {
 
 struct node {
        const char *name;
-       /* Key used to update TDB */
-       TDB_DATA key;
+       /* Name used to access data base. */
+       const char *db_name;
 
        /* Parent (optional) */
        struct node *parent;
diff --git a/tools/xenstore/xenstored_transaction.c 
b/tools/xenstore/xenstored_transaction.c
index baad9e472d..020b70d954 100644
--- a/tools/xenstore/xenstored_transaction.c
+++ b/tools/xenstore/xenstored_transaction.c
@@ -227,7 +227,7 @@ void transaction_prepend(struct connection *conn, const 
char *name,
  * to be accessed in the data base.
  */
 int access_node(struct connection *conn, struct node *node,
-               enum node_access_type type, TDB_DATA *key)
+               enum node_access_type type, const char **db_name)
 {
        struct accessed_node *i = NULL;
        struct transaction *trans;
@@ -243,8 +243,8 @@ int access_node(struct connection *conn, struct node *node,
 
        if (!conn || !conn->transaction) {
                /* They're changing the global database. */
-               if (key)
-                       set_tdb_key(node->name, key);
+               if (db_name)
+                       *db_name = node->name;
                return 0;
        }
 
@@ -308,8 +308,8 @@ int access_node(struct connection *conn, struct node *node,
                /* Nothing to delete. */
                return -1;
 
-       if (key) {
-               set_tdb_key(i->trans_name, key);
+       if (db_name) {
+               *db_name = i->trans_name;
                if (type == NODE_ACCESS_WRITE)
                        i->ta_node = true;
                if (type == NODE_ACCESS_DELETE)
diff --git a/tools/xenstore/xenstored_transaction.h 
b/tools/xenstore/xenstored_transaction.h
index 883145163f..f6a2e2f7f5 100644
--- a/tools/xenstore/xenstored_transaction.h
+++ b/tools/xenstore/xenstored_transaction.h
@@ -41,7 +41,7 @@ void ta_node_created(struct transaction *trans);
 
 /* This node was accessed. */
 int __must_check access_node(struct connection *conn, struct node *node,
-                             enum node_access_type type, TDB_DATA *key);
+                             enum node_access_type type, const char **db_name);
 
 /* Queue watches for a modified node. */
 void queue_watches(struct connection *conn, const char *name, bool 
watch_exact);
--
generated by git-patchbot for /home/xen/git/xen.git#master



 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.