[svn.haxx.se] · SVN Dev · SVN Users · SVN Org · TSVN Dev · TSVN Users · Subclipse Dev · Subclipse Users · this month's index

Re: svn commit: r36535 - trunk/subversion/libsvn_wc

From: Greg Stein <gstein_at_gmail.com>
Date: Sun, 15 Mar 2009 23:27:41 +0100

For the entries, we probably do want a big transaction. I assume the
de-txn is because you're going to defer integrity management to wc_db?
(and for now just assume that midway failure corrupts?)

On Fri, Mar 13, 2009 at 22:37, Hyrum K. Wright <hyrum_at_hyrumwright.org> wrote:
> Author: hwright
> Date: Fri Mar 13 14:37:35 2009
> New Revision: 36535
>
> Log:
> More de-transaction-ifing in entries.c, this time with write_entries().
>
> * subversion/libsvn_wc/entries.c
>  (entries_write_txn_baton): Remove.
>  (entries_write_body): Reorder parameters, and don't use the baton for them.
>  (svn_wc__entries_write): Call the writing function directly, instead of
>    wrapping it with a transaction.
>
> Modified:
>   trunk/subversion/libsvn_wc/entries.c
>
> Modified: trunk/subversion/libsvn_wc/entries.c
> URL: http://svn.collab.net/viewvc/svn/trunk/subversion/libsvn_wc/entries.c?pathrev=36535&r1=36534&r2=36535
> ==============================================================================
> --- trunk/subversion/libsvn_wc/entries.c        Fri Mar 13 14:24:37 2009        (r36534)
> +++ trunk/subversion/libsvn_wc/entries.c        Fri Mar 13 14:37:35 2009        (r36535)
> @@ -1912,40 +1912,33 @@ write_entry(svn_sqlite__db_t *wc_db,
>   return SVN_NO_ERROR;
>  }
>
> -/* Baton for use with entries_write_body(). */
> -struct entries_write_txn_baton
> -{
> -  apr_hash_t *entries;
> -  const svn_wc_entry_t *this_dir;
> -  apr_pool_t *scratch_pool;
> -};
> -
>  /* Actually do the sqlite work within a transaction.
>    This implements svn_sqlite__transaction_callback_t */
>  static svn_error_t *
> -entries_write_body(void *baton,
> -                   svn_sqlite__db_t *wc_db)
> +entries_write_body(svn_sqlite__db_t *wc_db,
> +                   apr_hash_t *entries,
> +                   const svn_wc_entry_t *this_dir,
> +                   apr_pool_t *scratch_pool)
>  {
>   svn_sqlite__stmt_t *stmt;
>   svn_boolean_t have_row;
>   apr_hash_index_t *hi;
> -  struct entries_write_txn_baton *ewtb = baton;
> -  apr_pool_t *iterpool = svn_pool_create(ewtb->scratch_pool);
> +  apr_pool_t *iterpool = svn_pool_create(scratch_pool);
>   const char *repos_root;
>   apr_int64_t repos_id;
>   apr_int64_t wc_id;
>
>   /* Get the repos ID. */
> -  if (ewtb->this_dir->uuid != NULL)
> +  if (this_dir->uuid != NULL)
>     {
>       SVN_ERR(svn_sqlite__get_statement(&stmt, wc_db, STMT_SELECT_REPOSITORY));
> -      SVN_ERR(svn_sqlite__bindf(stmt, "s", ewtb->this_dir->repos));
> +      SVN_ERR(svn_sqlite__bindf(stmt, "s", this_dir->repos));
>       SVN_ERR(svn_sqlite__step(&have_row, stmt));
>
>       if (have_row)
>         {
>           repos_id = svn_sqlite__column_int(stmt, 0);
> -          repos_root = svn_sqlite__column_text(stmt, 1, ewtb->scratch_pool);
> +          repos_root = svn_sqlite__column_text(stmt, 1, scratch_pool);
>         }
>       else
>         {
> @@ -1961,10 +1954,10 @@ entries_write_body(void *baton,
>              ### any members?  */
>           SVN_ERR(svn_sqlite__get_statement(&stmt, wc_db,
>                                             STMT_INSERT_REPOSITORY));
> -          SVN_ERR(svn_sqlite__bindf(stmt, "ss", ewtb->this_dir->repos,
> -                                    ewtb->this_dir->uuid));
> +          SVN_ERR(svn_sqlite__bindf(stmt, "ss", this_dir->repos,
> +                                    this_dir->uuid));
>           SVN_ERR(svn_sqlite__insert(&repos_id, stmt));
> -          repos_root = ewtb->this_dir->repos;
> +          repos_root = this_dir->repos;
>         }
>
>       SVN_ERR(svn_sqlite__reset(stmt));
> @@ -1988,11 +1981,11 @@ entries_write_body(void *baton,
>
>   /* Write out "this dir" */
>   SVN_ERR(fetch_wc_id(&wc_id, wc_db));
> -  SVN_ERR(write_entry(wc_db, wc_id, repos_id, repos_root, ewtb->this_dir,
> -                      SVN_WC_ENTRY_THIS_DIR, ewtb->this_dir,
> -                      ewtb->scratch_pool));
> +  SVN_ERR(write_entry(wc_db, wc_id, repos_id, repos_root, this_dir,
> +                      SVN_WC_ENTRY_THIS_DIR, this_dir,
> +                      scratch_pool));
>
> -  for (hi = apr_hash_first(ewtb->scratch_pool, ewtb->entries); hi;
> +  for (hi = apr_hash_first(scratch_pool, entries); hi;
>         hi = apr_hash_next(hi))
>     {
>       const void *key;
> @@ -2011,7 +2004,7 @@ entries_write_body(void *baton,
>
>       /* Write the entry. */
>       SVN_ERR(write_entry(wc_db, wc_id, repos_id, repos_root,
> -                          this_entry, key, ewtb->this_dir, iterpool));
> +                          this_entry, key, this_dir, iterpool));
>     }
>
>   svn_pool_destroy(iterpool);
> @@ -2026,7 +2019,6 @@ svn_wc__entries_write(apr_hash_t *entrie
>  {
>   svn_sqlite__db_t *wc_db;
>   const svn_wc_entry_t *this_dir;
> -  struct entries_write_txn_baton ewtb;
>   apr_pool_t *scratch_pool = svn_pool_create(pool);
>
>   if (svn_wc__adm_wc_format(adm_access) < SVN_WC__WC_NG_VERSION)
> @@ -2053,11 +2045,8 @@ svn_wc__entries_write(apr_hash_t *entrie
>                            SVN_WC__VERSION_EXPERIMENTAL, upgrade_sql,
>                            scratch_pool, scratch_pool));
>
> -  /* Do the work in a transaction. */
> -  ewtb.entries = entries;
> -  ewtb.this_dir = this_dir;
> -  ewtb.scratch_pool = scratch_pool;
> -  SVN_ERR(svn_sqlite__with_transaction(wc_db, entries_write_body, &ewtb));
> +  /* Write the entries. */
> +  SVN_ERR(entries_write_body(wc_db, entries, this_dir, scratch_pool));
>
>   svn_wc__adm_access_set_entries(adm_access, TRUE, entries);
>   svn_wc__adm_access_set_entries(adm_access, FALSE, NULL);
>
> ------------------------------------------------------
> http://subversion.tigris.org/ds/viewMessage.do?dsForumId=495&dsMessageId=1318776
>

------------------------------------------------------
http://subversion.tigris.org/ds/viewMessage.do?dsForumId=462&dsMessageId=1329466
Received on 2009-03-15 23:27:57 CET

This is an archived mail posted to the Subversion Dev mailing list.

This site is subject to the Apache Privacy Policy and the Apache Public Forum Archive Policy.