WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-changelog

[Xen-changelog] [xen-unstable] Add a transaction_started field in xensto

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [xen-unstable] Add a transaction_started field in xenstored connection structure instead of
From: Xen patchbot-unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Tue, 01 Aug 2006 19:20:15 +0000
Delivery-date: Tue, 01 Aug 2006 12:22:49 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User vhanquez@xxxxxxxxxxxxxxxxxxxxx
# Node ID c471b326b75e587104e8328b57f6985b75e38577
# Parent  d2bf1a7cc1319d2e0379c3394a6c09ec2f0c51e1
Add a transaction_started field in xenstored connection structure instead of
browsing the list of transaction each time
Bump the default to 10, and make it configurable through the command line.

Signed-off-by: Vincent Hanquez <vincent@xxxxxxxxxxxxx>
---
 tools/xenstore/xenstored_core.c        |    9 ++++++++-
 tools/xenstore/xenstored_core.h        |    1 +
 tools/xenstore/xenstored_transaction.c |   10 ++++------
 3 files changed, 13 insertions(+), 7 deletions(-)

diff -r d2bf1a7cc131 -r c471b326b75e tools/xenstore/xenstored_core.c
--- a/tools/xenstore/xenstored_core.c   Sat Jul 29 14:05:59 2006 +0100
+++ b/tools/xenstore/xenstored_core.c   Mon Jul 31 09:30:36 2006 +0000
@@ -80,6 +80,7 @@ int quota_nb_entry_per_domain = 1000;
 int quota_nb_entry_per_domain = 1000;
 int quota_nb_watch_per_domain = 128;
 int quota_max_entry_size = 2048; /* 2K */
+int quota_max_transaction = 10;
 
 #ifdef TESTING
 static bool failtest = false;
@@ -1342,6 +1343,7 @@ struct connection *new_connection(connwr
        new->write = write;
        new->read = read;
        new->can_write = true;
+       new->transaction_started = 0;
        INIT_LIST_HEAD(&new->out_list);
        INIT_LIST_HEAD(&new->watches);
        INIT_LIST_HEAD(&new->transaction_list);
@@ -1739,6 +1741,7 @@ static void usage(void)
 "  --entry-nb <nb>     limit the number of entries per domain,\n"
 "  --entry-size <size> limit the size of entry per domain, and\n"
 "  --entry-watch <nb>  limit the number of watches per domain,\n"
+"  --transaction <nb>  limit the number of transaction allowed per domain,\n"
 "  --no-recovery       to request that no recovery should be attempted when\n"
 "                      the store is corrupted (debug only),\n"
 "  --preserve-local    to request that /local is preserved on start-up,\n"
@@ -1755,6 +1758,7 @@ static struct option options[] = {
        { "output-pid", 0, NULL, 'P' },
        { "entry-size", 1, NULL, 'S' },
        { "trace-file", 1, NULL, 'T' },
+       { "transaction", 1, NULL, 't' },
        { "no-recovery", 0, NULL, 'R' },
        { "preserve-local", 0, NULL, 'L' },
        { "verbose", 0, NULL, 'V' },
@@ -1774,7 +1778,7 @@ int main(int argc, char *argv[])
        const char *pidfile = NULL;
        int evtchn_fd = -1;
 
-       while ((opt = getopt_long(argc, argv, "DE:F:HNPS:T:RLVW:", options,
+       while ((opt = getopt_long(argc, argv, "DE:F:HNPS:t:T:RLVW:", options,
                                  NULL)) != -1) {
                switch (opt) {
                case 'D':
@@ -1804,6 +1808,9 @@ int main(int argc, char *argv[])
                case 'S':
                        quota_max_entry_size = strtol(optarg, NULL, 10);
                        break;
+               case 't':
+                       quota_max_transaction = strtol(optarg, NULL, 10);
+                       break;
                case 'T':
                        tracefile = optarg;
                        break;
diff -r d2bf1a7cc131 -r c471b326b75e tools/xenstore/xenstored_core.h
--- a/tools/xenstore/xenstored_core.h   Sat Jul 29 14:05:59 2006 +0100
+++ b/tools/xenstore/xenstored_core.h   Mon Jul 31 09:30:36 2006 +0000
@@ -79,6 +79,7 @@ struct connection
        /* List of in-progress transactions. */
        struct list_head transaction_list;
        uint32_t next_transaction_id;
+       unsigned int transaction_started;
 
        /* The domain I'm associated with, if any. */
        struct domain *domain;
diff -r d2bf1a7cc131 -r c471b326b75e tools/xenstore/xenstored_transaction.c
--- a/tools/xenstore/xenstored_transaction.c    Sat Jul 29 14:05:59 2006 +0100
+++ b/tools/xenstore/xenstored_transaction.c    Mon Jul 31 09:30:36 2006 +0000
@@ -66,6 +66,7 @@ struct transaction
        struct list_head changes;
 };
 
+extern int quota_max_transaction;
 static unsigned int generation;
 
 /* Return tdb context to use for this connection. */
@@ -125,7 +126,6 @@ void do_transaction_start(struct connect
 {
        struct transaction *trans, *exists;
        char id_str[20];
-       int started;
 
        /* We don't support nested transactions. */
        if (conn->transaction) {
@@ -133,11 +133,7 @@ void do_transaction_start(struct connect
                return;
        }
 
-       started = 0;
-       list_for_each_entry(trans, &conn->transaction_list, list)
-               started++;
-
-       if (started > 5) {
+       if (conn->transaction_started > quota_max_transaction) {
                send_error(conn, ENOSPC);
                return;
        }
@@ -166,6 +162,7 @@ void do_transaction_start(struct connect
        list_add_tail(&trans->list, &conn->transaction_list);
        talloc_steal(conn, trans);
        talloc_set_destructor(trans, destroy_transaction);
+       conn->transaction_started++;
 
        sprintf(id_str, "%u", trans->id);
        send_reply(conn, XS_TRANSACTION_START, id_str, strlen(id_str)+1);
@@ -188,6 +185,7 @@ void do_transaction_end(struct connectio
 
        conn->transaction = NULL;
        list_del(&trans->list);
+       conn->transaction_started--;
 
        /* Attach transaction to arg for auto-cleanup */
        talloc_steal(arg, trans);

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] [xen-unstable] Add a transaction_started field in xenstored connection structure instead of, Xen patchbot-unstable <=