<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[14460] CalendarServer/branches/users/cdaboo/pod2pod-migration</title>
</head>
<body>
<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; }
#msg dl a { font-weight: bold}
#msg dl a:link { color:#fc3; }
#msg dl a:active { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.calendarserver.org//changeset/14460">14460</a></dd>
<dt>Author</dt> <dd>cdaboo@apple.com</dd>
<dt>Date</dt> <dd>2015-02-20 07:20:56 -0800 (Fri, 20 Feb 2015)</dd>
</dl>
<h3>Log Message</h3>
<pre>Merge from trunk.</pre>
<h3>Modified Paths</h3>
<ul>
<li><a href="#CalendarServerbranchesuserscdaboopod2podmigrationbin_pysh">CalendarServer/branches/users/cdaboo/pod2pod-migration/bin/_py.sh</a></li>
<li><a href="#CalendarServerbranchesuserscdaboopod2podmigrationbintest">CalendarServer/branches/users/cdaboo/pod2pod-migration/bin/test</a></li>
<li><a href="#CalendarServerbranchesuserscdaboopod2podmigrationdocAdminMultiServerDeploymentrst">CalendarServer/branches/users/cdaboo/pod2pod-migration/doc/Admin/MultiServerDeployment.rst</a></li>
<li><a href="#CalendarServerbranchesuserscdaboopod2podmigrationrequirementsdevtxt">CalendarServer/branches/users/cdaboo/pod2pod-migration/requirements-dev.txt</a></li>
<li><a href="#CalendarServerbranchesuserscdaboopod2podmigrationrequirementsstabletxt">CalendarServer/branches/users/cdaboo/pod2pod-migration/requirements-stable.txt</a></li>
<li><a href="#CalendarServerbranchesuserscdaboopod2podmigrationtwistedcaldavdatabasepy">CalendarServer/branches/users/cdaboo/pod2pod-migration/twistedcaldav/database.py</a></li>
<li><a href="#CalendarServerbranchesuserscdaboopod2podmigrationtwistedcaldavdirectorytesttest_proxyprincipaldbpy">CalendarServer/branches/users/cdaboo/pod2pod-migration/twistedcaldav/directory/test/test_proxyprincipaldb.py</a></li>
<li><a href="#CalendarServerbranchesuserscdaboopod2podmigrationtxdavbasedatastoresubpostgrespy">CalendarServer/branches/users/cdaboo/pod2pod-migration/txdav/base/datastore/subpostgres.py</a></li>
<li><a href="#CalendarServerbranchesuserscdaboopod2podmigrationtxdavbasedatastoretesttest_subpostgrespy">CalendarServer/branches/users/cdaboo/pod2pod-migration/txdav/base/datastore/test/test_subpostgres.py</a></li>
<li><a href="#CalendarServerbranchesuserscdaboopod2podmigrationtxdavcaldavdatastoreschedulingimiptesttest_outboundpy">CalendarServer/branches/users/cdaboo/pod2pod-migration/txdav/caldav/datastore/scheduling/imip/test/test_outbound.py</a></li>
<li><a href="#CalendarServerbranchesuserscdaboopod2podmigrationtxdavcarddavdatastoresqlpy">CalendarServer/branches/users/cdaboo/pod2pod-migration/txdav/carddav/datastore/sql.py</a></li>
<li><a href="#CalendarServerbranchesuserscdaboopod2podmigrationtxdavcarddavdatastoretesttest_sqlpy">CalendarServer/branches/users/cdaboo/pod2pod-migration/txdav/carddav/datastore/test/test_sql.py</a></li>
<li><a href="#CalendarServerbranchesuserscdaboopod2podmigrationtxdavcommondatastoretesttest_sqlpy">CalendarServer/branches/users/cdaboo/pod2pod-migration/txdav/common/datastore/test/test_sql.py</a></li>
<li><a href="#CalendarServerbranchesuserscdaboopod2podmigrationtxdavcommondatastoreupgradesqltesttest_upgrade_with_datapy">CalendarServer/branches/users/cdaboo/pod2pod-migration/txdav/common/datastore/upgrade/sql/test/test_upgrade_with_data.py</a></li>
</ul>
<h3>Property Changed</h3>
<ul>
<li><a href="#CalendarServerbranchesuserscdaboopod2podmigration">CalendarServer/branches/users/cdaboo/pod2pod-migration/</a></li>
</ul>
</div>
<div id="patch">
<h3>Diff</h3>
<a id="CalendarServerbranchesuserscdaboopod2podmigration"></a>
<div class="propset"><h4>Property changes: CalendarServer/branches/users/cdaboo/pod2pod-migration</h4>
<pre class="diff"><span>
</span></pre></div>
<a id="svnmergeinfo"></a>
<div class="modfile"><h4>Modified: svn:mergeinfo</h4></div>
<span class="cx">/CalendarServer/branches/config-separation:4379-4443
</span><span class="cx">/CalendarServer/branches/egg-info-351:4589-4625
</span><span class="cx">/CalendarServer/branches/generic-sqlstore:6167-6191
</span><span class="cx">/CalendarServer/branches/new-store:5594-5934
</span><span class="cx">/CalendarServer/branches/new-store-no-caldavfile:5911-5935
</span><span class="cx">/CalendarServer/branches/new-store-no-caldavfile-2:5936-5981
</span><span class="cx">/CalendarServer/branches/release/CalendarServer-4.3-dev:10180-10190,10192
</span><span class="cx">/CalendarServer/branches/release/CalendarServer-5.1-dev:11846
</span><span class="cx">/CalendarServer/branches/release/CalendarServer-5.2-dev:11972,12357-12358,12794,12814
</span><span class="cx">/CalendarServer/branches/users/cdaboo/batchupload-6699:6700-7198
</span><span class="cx">/CalendarServer/branches/users/cdaboo/cached-subscription-calendars-5692:5693-5702
</span><span class="cx">/CalendarServer/branches/users/cdaboo/component-set-fixes:8130-8346
</span><span class="cx">/CalendarServer/branches/users/cdaboo/cross-pod-sharing:12038-12191
</span><span class="cx">/CalendarServer/branches/users/cdaboo/directory-cache-on-demand-3627:3628-3644
</span><span class="cx">/CalendarServer/branches/users/cdaboo/fix-no-ischedule:11607-11871
</span><span class="cx">/CalendarServer/branches/users/cdaboo/implicituidrace:8137-8141
</span><span class="cx">/CalendarServer/branches/users/cdaboo/ischedule-dkim:9747-9979
</span><span class="cx">/CalendarServer/branches/users/cdaboo/json:11622-11912
</span><span class="cx">/CalendarServer/branches/users/cdaboo/managed-attachments:9985-10145
</span><span class="cx">/CalendarServer/branches/users/cdaboo/more-sharing-5591:5592-5601
</span><span class="cx">/CalendarServer/branches/users/cdaboo/partition-4464:4465-4957
</span><span class="cx">/CalendarServer/branches/users/cdaboo/performance-tweaks:11824-11836
</span><span class="cx">/CalendarServer/branches/users/cdaboo/pods:7297-7377
</span><span class="cx">/CalendarServer/branches/users/cdaboo/pycalendar:7085-7206
</span><span class="cx">/CalendarServer/branches/users/cdaboo/pycard:7227-7237
</span><span class="cx">/CalendarServer/branches/users/cdaboo/queued-attendee-refreshes:7740-8287
</span><span class="cx">/CalendarServer/branches/users/cdaboo/relative-config-paths-5070:5071-5105
</span><span class="cx">/CalendarServer/branches/users/cdaboo/reverse-proxy-pods:11875-11900
</span><span class="cx">/CalendarServer/branches/users/cdaboo/scheduling-queue-refresh:11783-12557
</span><span class="cx">/CalendarServer/branches/users/cdaboo/shared-calendars-5187:5188-5440
</span><span class="cx">/CalendarServer/branches/users/cdaboo/sharing-in-the-store:11935-12016
</span><span class="cx">/CalendarServer/branches/users/cdaboo/store-scheduling:10876-11129
</span><span class="cx">/CalendarServer/branches/users/cdaboo/timezones:7443-7699
</span><span class="cx">/CalendarServer/branches/users/cdaboo/txn-debugging:8730-8743
</span><span class="cx">/CalendarServer/branches/users/gaya/cleanrevisions:12152-12334
</span><span class="cx">/CalendarServer/branches/users/gaya/groupsharee2:13669-13773
</span><span class="cx">/CalendarServer/branches/users/gaya/sharedgroupfixes:12120-12142
</span><span class="cx">/CalendarServer/branches/users/gaya/sharedgroups-3:11088-11204
</span><span class="cx">/CalendarServer/branches/users/glyph/always-abort-txn-on-error:9958-9969
</span><span class="cx">/CalendarServer/branches/users/glyph/case-insensitive-uid:8772-8805
</span><span class="cx">/CalendarServer/branches/users/glyph/conn-limit:6574-6577
</span><span class="cx">/CalendarServer/branches/users/glyph/contacts-server-merge:4971-5080
</span><span class="cx">/CalendarServer/branches/users/glyph/dalify:6932-7023
</span><span class="cx">/CalendarServer/branches/users/glyph/db-reconnect:6824-6876
</span><span class="cx">/CalendarServer/branches/users/glyph/deploybuild:7563-7572
</span><span class="cx">/CalendarServer/branches/users/glyph/digest-auth-redux:10624-10635
</span><span class="cx">/CalendarServer/branches/users/glyph/disable-quota:7718-7727
</span><span class="cx">/CalendarServer/branches/users/glyph/dont-start-postgres:6592-6614
</span><span class="cx">/CalendarServer/branches/users/glyph/enforce-max-requests:11640-11643
</span><span class="cx">/CalendarServer/branches/users/glyph/hang-fix:11465-11491
</span><span class="cx">/CalendarServer/branches/users/glyph/imip-and-admin-html:7866-7984
</span><span class="cx">/CalendarServer/branches/users/glyph/ipv6-client:9054-9105
</span><span class="cx">/CalendarServer/branches/users/glyph/launchd-wrapper-bis:11413-11436
</span><span class="cx">/CalendarServer/branches/users/glyph/linux-tests:6893-6900
</span><span class="cx">/CalendarServer/branches/users/glyph/log-cleanups:11691-11731
</span><span class="cx">/CalendarServer/branches/users/glyph/migrate-merge:8690-8713
</span><span class="cx">/CalendarServer/branches/users/glyph/misc-portability-fixes:7365-7374
</span><span class="cx">/CalendarServer/branches/users/glyph/more-deferreds-6:6322-6368
</span><span class="cx">/CalendarServer/branches/users/glyph/more-deferreds-7:6369-6445
</span><span class="cx">/CalendarServer/branches/users/glyph/multiget-delete:8321-8330
</span><span class="cx">/CalendarServer/branches/users/glyph/new-export:7444-7485
</span><span class="cx">/CalendarServer/branches/users/glyph/one-home-list-api:10048-10073
</span><span class="cx">/CalendarServer/branches/users/glyph/oracle:7106-7155
</span><span class="cx">/CalendarServer/branches/users/glyph/oracle-nulls:7340-7351
</span><span class="cx">/CalendarServer/branches/users/glyph/other-html:8062-8091
</span><span class="cx">/CalendarServer/branches/users/glyph/parallel-sim:8240-8251
</span><span class="cx">/CalendarServer/branches/users/glyph/parallel-upgrade:8376-8400
</span><span class="cx">/CalendarServer/branches/users/glyph/parallel-upgrade_to_1:8571-8583
</span><span class="cx">/CalendarServer/branches/users/glyph/q:9560-9688
</span><span class="cx">/CalendarServer/branches/users/glyph/queue-locking-and-timing:10204-10289
</span><span class="cx">/CalendarServer/branches/users/glyph/quota:7604-7637
</span><span class="cx">/CalendarServer/branches/users/glyph/sendfdport:5388-5424
</span><span class="cx">/CalendarServer/branches/users/glyph/shared-pool-fixes:8436-8443
</span><span class="cx">/CalendarServer/branches/users/glyph/shared-pool-take2:8155-8174
</span><span class="cx">/CalendarServer/branches/users/glyph/sharedpool:6490-6550
</span><span class="cx">/CalendarServer/branches/users/glyph/sharing-api:9192-9205
</span><span class="cx">/CalendarServer/branches/users/glyph/skip-lonely-vtimezones:8524-8535
</span><span class="cx">/CalendarServer/branches/users/glyph/sql-store:5929-6073
</span><span class="cx">/CalendarServer/branches/users/glyph/start-service-start-loop:11060-11065
</span><span class="cx">/CalendarServer/branches/users/glyph/subtransactions:7248-7258
</span><span class="cx">/CalendarServer/branches/users/glyph/table-alias:8651-8664
</span><span class="cx">/CalendarServer/branches/users/glyph/uidexport:7673-7676
</span><span class="cx">/CalendarServer/branches/users/glyph/unshare-when-access-revoked:10562-10595
</span><span class="cx">/CalendarServer/branches/users/glyph/use-system-twisted:5084-5149
</span><span class="cx">/CalendarServer/branches/users/glyph/uuid-normalize:9268-9296
</span><span class="cx">/CalendarServer/branches/users/glyph/warning-cleanups:11347-11357
</span><span class="cx">/CalendarServer/branches/users/glyph/whenNotProposed:11881-11897
</span><span class="cx">/CalendarServer/branches/users/glyph/xattrs-from-files:7757-7769
</span><span class="cx">/CalendarServer/branches/users/sagen/applepush:8126-8184
</span><span class="cx">/CalendarServer/branches/users/sagen/inboxitems:7380-7381
</span><span class="cx">/CalendarServer/branches/users/sagen/locations-resources:5032-5051
</span><span class="cx">/CalendarServer/branches/users/sagen/locations-resources-2:5052-5061
</span><span class="cx">/CalendarServer/branches/users/sagen/move2who:12819-12860
</span><span class="cx">/CalendarServer/branches/users/sagen/move2who-2:12861-12898
</span><span class="cx">/CalendarServer/branches/users/sagen/move2who-3:12899-12913
</span><span class="cx">/CalendarServer/branches/users/sagen/move2who-4:12914-13157
</span><span class="cx">/CalendarServer/branches/users/sagen/move2who-5:13158-13163
</span><span class="cx">/CalendarServer/branches/users/sagen/newcua:13309-13327
</span><span class="cx">/CalendarServer/branches/users/sagen/newcua-1:13328-13330
</span><span class="cx">/CalendarServer/branches/users/sagen/purge_old_events:6735-6746
</span><span class="cx">/CalendarServer/branches/users/sagen/recordtypes:13648-13656
</span><span class="cx">/CalendarServer/branches/users/sagen/recordtypes-2:13657
</span><span class="cx">/CalendarServer/branches/users/sagen/resource-delegates-4038:4040-4067
</span><span class="cx">/CalendarServer/branches/users/sagen/resource-delegates-4066:4068-4075
</span><span class="cx">/CalendarServer/branches/users/sagen/resources-2:5084-5093
</span><span class="cx">/CalendarServer/branches/users/sagen/testing:10827-10851,10853-10855
</span><span class="cx">/CalendarServer/branches/users/wsanchez/transations:5515-5593
</span><span class="cx">/CalendarServer/trunk:14338-14412
</span><span class="cx"> + /CalDAVTester/trunk:11193-11198
</span><span class="cx">/CalendarServer/branches/config-separation:4379-4443
</span><span class="cx">/CalendarServer/branches/egg-info-351:4589-4625
</span><span class="cx">/CalendarServer/branches/generic-sqlstore:6167-6191
</span><span class="cx">/CalendarServer/branches/new-store:5594-5934
</span><span class="cx">/CalendarServer/branches/new-store-no-caldavfile:5911-5935
</span><span class="cx">/CalendarServer/branches/new-store-no-caldavfile-2:5936-5981
</span><span class="cx">/CalendarServer/branches/release/CalendarServer-4.3-dev:10180-10190,10192
</span><span class="cx">/CalendarServer/branches/release/CalendarServer-5.1-dev:11846
</span><span class="cx">/CalendarServer/branches/release/CalendarServer-5.2-dev:11972,12357-12358,12794,12814
</span><span class="cx">/CalendarServer/branches/users/cdaboo/batchupload-6699:6700-7198
</span><span class="cx">/CalendarServer/branches/users/cdaboo/cached-subscription-calendars-5692:5693-5702
</span><span class="cx">/CalendarServer/branches/users/cdaboo/component-set-fixes:8130-8346
</span><span class="cx">/CalendarServer/branches/users/cdaboo/cross-pod-sharing:12038-12191
</span><span class="cx">/CalendarServer/branches/users/cdaboo/directory-cache-on-demand-3627:3628-3644
</span><span class="cx">/CalendarServer/branches/users/cdaboo/fix-no-ischedule:11607-11871
</span><span class="cx">/CalendarServer/branches/users/cdaboo/implicituidrace:8137-8141
</span><span class="cx">/CalendarServer/branches/users/cdaboo/ischedule-dkim:9747-9979
</span><span class="cx">/CalendarServer/branches/users/cdaboo/json:11622-11912
</span><span class="cx">/CalendarServer/branches/users/cdaboo/managed-attachments:9985-10145
</span><span class="cx">/CalendarServer/branches/users/cdaboo/more-sharing-5591:5592-5601
</span><span class="cx">/CalendarServer/branches/users/cdaboo/partition-4464:4465-4957
</span><span class="cx">/CalendarServer/branches/users/cdaboo/performance-tweaks:11824-11836
</span><span class="cx">/CalendarServer/branches/users/cdaboo/pods:7297-7377
</span><span class="cx">/CalendarServer/branches/users/cdaboo/pycalendar:7085-7206
</span><span class="cx">/CalendarServer/branches/users/cdaboo/pycard:7227-7237
</span><span class="cx">/CalendarServer/branches/users/cdaboo/queued-attendee-refreshes:7740-8287
</span><span class="cx">/CalendarServer/branches/users/cdaboo/relative-config-paths-5070:5071-5105
</span><span class="cx">/CalendarServer/branches/users/cdaboo/reverse-proxy-pods:11875-11900
</span><span class="cx">/CalendarServer/branches/users/cdaboo/scheduling-queue-refresh:11783-12557
</span><span class="cx">/CalendarServer/branches/users/cdaboo/shared-calendars-5187:5188-5440
</span><span class="cx">/CalendarServer/branches/users/cdaboo/sharing-in-the-store:11935-12016
</span><span class="cx">/CalendarServer/branches/users/cdaboo/store-scheduling:10876-11129
</span><span class="cx">/CalendarServer/branches/users/cdaboo/timezones:7443-7699
</span><span class="cx">/CalendarServer/branches/users/cdaboo/txn-debugging:8730-8743
</span><span class="cx">/CalendarServer/branches/users/gaya/cleanrevisions:12152-12334
</span><span class="cx">/CalendarServer/branches/users/gaya/groupsharee2:13669-13773
</span><span class="cx">/CalendarServer/branches/users/gaya/sharedgroupfixes:12120-12142
</span><span class="cx">/CalendarServer/branches/users/gaya/sharedgroups-3:11088-11204
</span><span class="cx">/CalendarServer/branches/users/glyph/always-abort-txn-on-error:9958-9969
</span><span class="cx">/CalendarServer/branches/users/glyph/case-insensitive-uid:8772-8805
</span><span class="cx">/CalendarServer/branches/users/glyph/conn-limit:6574-6577
</span><span class="cx">/CalendarServer/branches/users/glyph/contacts-server-merge:4971-5080
</span><span class="cx">/CalendarServer/branches/users/glyph/dalify:6932-7023
</span><span class="cx">/CalendarServer/branches/users/glyph/db-reconnect:6824-6876
</span><span class="cx">/CalendarServer/branches/users/glyph/deploybuild:7563-7572
</span><span class="cx">/CalendarServer/branches/users/glyph/digest-auth-redux:10624-10635
</span><span class="cx">/CalendarServer/branches/users/glyph/disable-quota:7718-7727
</span><span class="cx">/CalendarServer/branches/users/glyph/dont-start-postgres:6592-6614
</span><span class="cx">/CalendarServer/branches/users/glyph/enforce-max-requests:11640-11643
</span><span class="cx">/CalendarServer/branches/users/glyph/hang-fix:11465-11491
</span><span class="cx">/CalendarServer/branches/users/glyph/imip-and-admin-html:7866-7984
</span><span class="cx">/CalendarServer/branches/users/glyph/ipv6-client:9054-9105
</span><span class="cx">/CalendarServer/branches/users/glyph/launchd-wrapper-bis:11413-11436
</span><span class="cx">/CalendarServer/branches/users/glyph/linux-tests:6893-6900
</span><span class="cx">/CalendarServer/branches/users/glyph/log-cleanups:11691-11731
</span><span class="cx">/CalendarServer/branches/users/glyph/migrate-merge:8690-8713
</span><span class="cx">/CalendarServer/branches/users/glyph/misc-portability-fixes:7365-7374
</span><span class="cx">/CalendarServer/branches/users/glyph/more-deferreds-6:6322-6368
</span><span class="cx">/CalendarServer/branches/users/glyph/more-deferreds-7:6369-6445
</span><span class="cx">/CalendarServer/branches/users/glyph/multiget-delete:8321-8330
</span><span class="cx">/CalendarServer/branches/users/glyph/new-export:7444-7485
</span><span class="cx">/CalendarServer/branches/users/glyph/one-home-list-api:10048-10073
</span><span class="cx">/CalendarServer/branches/users/glyph/oracle:7106-7155
</span><span class="cx">/CalendarServer/branches/users/glyph/oracle-nulls:7340-7351
</span><span class="cx">/CalendarServer/branches/users/glyph/other-html:8062-8091
</span><span class="cx">/CalendarServer/branches/users/glyph/parallel-sim:8240-8251
</span><span class="cx">/CalendarServer/branches/users/glyph/parallel-upgrade:8376-8400
</span><span class="cx">/CalendarServer/branches/users/glyph/parallel-upgrade_to_1:8571-8583
</span><span class="cx">/CalendarServer/branches/users/glyph/q:9560-9688
</span><span class="cx">/CalendarServer/branches/users/glyph/queue-locking-and-timing:10204-10289
</span><span class="cx">/CalendarServer/branches/users/glyph/quota:7604-7637
</span><span class="cx">/CalendarServer/branches/users/glyph/sendfdport:5388-5424
</span><span class="cx">/CalendarServer/branches/users/glyph/shared-pool-fixes:8436-8443
</span><span class="cx">/CalendarServer/branches/users/glyph/shared-pool-take2:8155-8174
</span><span class="cx">/CalendarServer/branches/users/glyph/sharedpool:6490-6550
</span><span class="cx">/CalendarServer/branches/users/glyph/sharing-api:9192-9205
</span><span class="cx">/CalendarServer/branches/users/glyph/skip-lonely-vtimezones:8524-8535
</span><span class="cx">/CalendarServer/branches/users/glyph/sql-store:5929-6073
</span><span class="cx">/CalendarServer/branches/users/glyph/start-service-start-loop:11060-11065
</span><span class="cx">/CalendarServer/branches/users/glyph/subtransactions:7248-7258
</span><span class="cx">/CalendarServer/branches/users/glyph/table-alias:8651-8664
</span><span class="cx">/CalendarServer/branches/users/glyph/uidexport:7673-7676
</span><span class="cx">/CalendarServer/branches/users/glyph/unshare-when-access-revoked:10562-10595
</span><span class="cx">/CalendarServer/branches/users/glyph/use-system-twisted:5084-5149
</span><span class="cx">/CalendarServer/branches/users/glyph/uuid-normalize:9268-9296
</span><span class="cx">/CalendarServer/branches/users/glyph/warning-cleanups:11347-11357
</span><span class="cx">/CalendarServer/branches/users/glyph/whenNotProposed:11881-11897
</span><span class="cx">/CalendarServer/branches/users/glyph/xattrs-from-files:7757-7769
</span><span class="cx">/CalendarServer/branches/users/sagen/applepush:8126-8184
</span><span class="cx">/CalendarServer/branches/users/sagen/inboxitems:7380-7381
</span><span class="cx">/CalendarServer/branches/users/sagen/locations-resources:5032-5051
</span><span class="cx">/CalendarServer/branches/users/sagen/locations-resources-2:5052-5061
</span><span class="cx">/CalendarServer/branches/users/sagen/move2who:12819-12860
</span><span class="cx">/CalendarServer/branches/users/sagen/move2who-2:12861-12898
</span><span class="cx">/CalendarServer/branches/users/sagen/move2who-3:12899-12913
</span><span class="cx">/CalendarServer/branches/users/sagen/move2who-4:12914-13157
</span><span class="cx">/CalendarServer/branches/users/sagen/move2who-5:13158-13163
</span><span class="cx">/CalendarServer/branches/users/sagen/newcua:13309-13327
</span><span class="cx">/CalendarServer/branches/users/sagen/newcua-1:13328-13330
</span><span class="cx">/CalendarServer/branches/users/sagen/purge_old_events:6735-6746
</span><span class="cx">/CalendarServer/branches/users/sagen/recordtypes:13648-13656
</span><span class="cx">/CalendarServer/branches/users/sagen/recordtypes-2:13657
</span><span class="cx">/CalendarServer/branches/users/sagen/resource-delegates-4038:4040-4067
</span><span class="cx">/CalendarServer/branches/users/sagen/resource-delegates-4066:4068-4075
</span><span class="cx">/CalendarServer/branches/users/sagen/resources-2:5084-5093
</span><span class="cx">/CalendarServer/branches/users/sagen/testing:10827-10851,10853-10855
</span><span class="cx">/CalendarServer/branches/users/wsanchez/psycopg2cffi:14427-14439
</span><span class="cx">/CalendarServer/branches/users/wsanchez/transations:5515-5593
</span><span class="cx">/CalendarServer/trunk:14338-14459
</span><a id="CalendarServerbranchesuserscdaboopod2podmigrationbin_pysh"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/cdaboo/pod2pod-migration/bin/_py.sh (14459 => 14460)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/cdaboo/pod2pod-migration/bin/_py.sh        2015-02-20 15:14:42 UTC (rev 14459)
+++ CalendarServer/branches/users/cdaboo/pod2pod-migration/bin/_py.sh        2015-02-20 15:20:56 UTC (rev 14460)
</span><span class="lines">@@ -61,27 +61,17 @@
</span><span class="cx"> # Detect which version of Python to use, then print out which one was detected.
</span><span class="cx"> #
</span><span class="cx"> # This will prefer the python interpreter in the PYTHON environment variable.
</span><del>-# If that's not found, it will check for "python2.7", "python2.6" and "python",
-# looking for each in your PATH and, failing that, in a number of well-known
-# locations.
</del><ins>+# If that's not found, it will check for "python2.7" and "python", looking for
+# each in your PATH.
</ins><span class="cx"> #
</span><span class="cx"> detect_python_version () {
</span><span class="cx"> local v;
</span><span class="cx"> local p;
</span><del>- for v in "2.7" "2.6" ""
</del><ins>+ for v in "2.7" ""
</ins><span class="cx"> do
</span><del>- for p in \
- "${PYTHON:=}" \
- "python${v}" \
- "/usr/local/bin/python${v}" \
- "/usr/local/python/bin/python${v}" \
- "/usr/local/python${v}/bin/python${v}" \
- "/opt/bin/python${v}" \
- "/opt/python/bin/python${v}" \
- "/opt/python${v}/bin/python${v}" \
- "/Library/Frameworks/Python.framework/Versions/${v}/bin/python" \
- "/opt/local/bin/python${v}" \
- "/sw/bin/python${v}" \
</del><ins>+ for p in \
+ "${PYTHON:=}" \
+ "python${v}" \
</ins><span class="cx"> ;
</span><span class="cx"> do
</span><span class="cx"> if p="$(find_cmd "${p}")"; then
</span></span></pre></div>
<a id="CalendarServerbranchesuserscdaboopod2podmigrationbintest"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/cdaboo/pod2pod-migration/bin/test (14459 => 14460)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/cdaboo/pod2pod-migration/bin/test        2015-02-20 15:14:42 UTC (rev 14459)
+++ CalendarServer/branches/users/cdaboo/pod2pod-migration/bin/test        2015-02-20 15:20:56 UTC (rev 14460)
</span><span class="lines">@@ -93,8 +93,12 @@
</span><span class="cx">
</span><span class="cx"> develop > /dev/null "${dev_home}/setup.log";
</span><span class="cx">
</span><ins>+echo "Using ${python} as Python:";
+"${python}" -V;
+echo "";
</ins><span class="cx">
</span><span class="cx">
</span><ins>+
</ins><span class="cx"> #
</span><span class="cx"> # Clean up
</span><span class="cx"> #
</span></span></pre></div>
<a id="CalendarServerbranchesuserscdaboopod2podmigrationdocAdminMultiServerDeploymentrst"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/cdaboo/pod2pod-migration/doc/Admin/MultiServerDeployment.rst (14459 => 14460)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/cdaboo/pod2pod-migration/doc/Admin/MultiServerDeployment.rst        2015-02-20 15:14:42 UTC (rev 14459)
+++ CalendarServer/branches/users/cdaboo/pod2pod-migration/doc/Admin/MultiServerDeployment.rst        2015-02-20 15:20:56 UTC (rev 14460)
</span><span class="lines">@@ -10,7 +10,7 @@
</span><span class="cx">
</span><span class="cx"> * `Memcached`_: All Calendar Server hosts need to share access to memcached
</span><span class="cx">
</span><del>-* `Proxy Database`_: Normally the Proxy (delegation) database is kept in a local sqlite database, which is not sharable. Create an additional database on the DB server to hold the Proxy DB, then configure all the servers to use it.
</del><ins>+* `Proxy Database`_: In previous versions, the proxy (delegate) database was a separate SQLite or Postgres container, however as of 6.0 this data is stored in the primary database along with other user data, so no special steps are required here.
</ins><span class="cx">
</span><span class="cx"> * `Directory Services`_: All servers should have access to the same directory services data that defines users, groups, resources, and locations. Calendar Server provides a highly flexible LDAP client to leverage existing directory servers, or you can use local XML files.
</span><span class="cx">
</span><span class="lines">@@ -123,6 +123,8 @@
</span><span class="cx"> Proxy Database
</span><span class="cx"> ----------------
</span><span class="cx">
</span><ins>+As of version 6.0, the proxy data is stored in the main database, and no special steps are required to configure a multi-server deployment to share proxy data. The rest of the information in this section applies only to server versions before 6.0.
+
</ins><span class="cx"> The Proxy DB (for delegation) is typically stored on disk in an sqlite DB, which does not allow for concurrent access across multiple hosts. To address this, create an additional DB in the postgres server, then edit caldavd.plist to add something like the following, and disable any other ProxyDB configuration.
</span><span class="cx">
</span><span class="cx"> ::
</span></span></pre></div>
<a id="CalendarServerbranchesuserscdaboopod2podmigrationrequirementsdevtxt"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/cdaboo/pod2pod-migration/requirements-dev.txt (14459 => 14460)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/cdaboo/pod2pod-migration/requirements-dev.txt        2015-02-20 15:14:42 UTC (rev 14459)
+++ CalendarServer/branches/users/cdaboo/pod2pod-migration/requirements-dev.txt        2015-02-20 15:20:56 UTC (rev 14460)
</span><span class="lines">@@ -8,4 +8,4 @@
</span><span class="cx"> q
</span><span class="cx"> tl.eggdeps
</span><span class="cx"> --editable svn+http://svn.calendarserver.org/repository/calendarserver/CalDAVClientLibrary/trunk@13420#egg=CalDAVClientLibrary
</span><del>---editable svn+http://svn.calendarserver.org/repository/calendarserver/CalDAVTester/trunk@14409#egg=CalDAVTester
</del><ins>+--editable svn+http://svn.calendarserver.org/repository/calendarserver/CalDAVTester/trunk@14436#egg=CalDAVTester
</ins></span></pre></div>
<a id="CalendarServerbranchesuserscdaboopod2podmigrationrequirementsstabletxt"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/cdaboo/pod2pod-migration/requirements-stable.txt (14459 => 14460)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/cdaboo/pod2pod-migration/requirements-stable.txt        2015-02-20 15:14:42 UTC (rev 14459)
+++ CalendarServer/branches/users/cdaboo/pod2pod-migration/requirements-stable.txt        2015-02-20 15:20:56 UTC (rev 14460)
</span><span class="lines">@@ -36,7 +36,7 @@
</span><span class="cx"> #pyOpenSSL
</span><span class="cx"> pycrypto==2.6.1
</span><span class="cx">
</span><del>- --editable svn+http://svn.calendarserver.org/repository/calendarserver/twext/branches/users/cdaboo/pod2pod-migration@14457#egg=twextpy
</del><ins>+ --editable svn+http://svn.calendarserver.org/repository/calendarserver/twext/branches/users/cdaboo/pod2pod-migration@14459#egg=twextpy
</ins><span class="cx"> cffi==0.8.6
</span><span class="cx"> pycparser==2.10
</span><span class="cx"> #twisted
</span></span></pre></div>
<a id="CalendarServerbranchesuserscdaboopod2podmigrationtwistedcaldavdatabasepy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/cdaboo/pod2pod-migration/twistedcaldav/database.py (14459 => 14460)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/cdaboo/pod2pod-migration/twistedcaldav/database.py        2015-02-20 15:14:42 UTC (rev 14459)
+++ CalendarServer/branches/users/cdaboo/pod2pod-migration/twistedcaldav/database.py        2015-02-20 15:20:56 UTC (rev 14460)
</span><span class="lines">@@ -17,10 +17,9 @@
</span><span class="cx"> import thread
</span><span class="cx">
</span><span class="cx"> try:
</span><del>- import pgdb
</del><ins>+ import pgdb as postgres
</ins><span class="cx"> except:
</span><del>- pgdb = None
-# pgdb = None
</del><ins>+ postgres = None
</ins><span class="cx">
</span><span class="cx"> from twisted.enterprise.adbapi import ConnectionPool
</span><span class="cx"> from twisted.internet.defer import inlineCallbacks, returnValue
</span><span class="lines">@@ -571,7 +570,7 @@
</span><span class="cx"> # internal statements so we do not need to remap those
</span><span class="cx"> return sql
</span><span class="cx">
</span><del>-if pgdb:
</del><ins>+if postgres:
</ins><span class="cx">
</span><span class="cx"> class ADBAPIPostgreSQLMixin(object):
</span><span class="cx">
</span><span class="lines">@@ -608,7 +607,7 @@
</span><span class="cx">
</span><span class="cx"> try:
</span><span class="cx"> yield self._db_execute(statement)
</span><del>- except pgdb.DatabaseError:
</del><ins>+ except postgres.DatabaseError:
</ins><span class="cx">
</span><span class="cx"> if not ifnotexists:
</span><span class="cx"> raise
</span><span class="lines">@@ -638,7 +637,7 @@
</span><span class="cx">
</span><span class="cx"> try:
</span><span class="cx"> yield self._db_execute(statement)
</span><del>- except pgdb.DatabaseError:
</del><ins>+ except postgres.DatabaseError:
</ins><span class="cx">
</span><span class="cx"> if not ifnotexists:
</span><span class="cx"> raise
</span><span class="lines">@@ -677,7 +676,7 @@
</span><span class="cx"> values ('TYPE', :1)
</span><span class="cx"> """, (self._db_type(),)
</span><span class="cx"> )
</span><del>- except pgdb.DatabaseError:
</del><ins>+ except postgres.DatabaseError:
</ins><span class="cx"> pass
</span><span class="cx">
</span><span class="cx">
</span></span></pre></div>
<a id="CalendarServerbranchesuserscdaboopod2podmigrationtwistedcaldavdirectorytesttest_proxyprincipaldbpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/cdaboo/pod2pod-migration/twistedcaldav/directory/test/test_proxyprincipaldb.py (14459 => 14460)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/cdaboo/pod2pod-migration/twistedcaldav/directory/test/test_proxyprincipaldb.py        2015-02-20 15:14:42 UTC (rev 14459)
+++ CalendarServer/branches/users/cdaboo/pod2pod-migration/twistedcaldav/directory/test/test_proxyprincipaldb.py        2015-02-20 15:20:56 UTC (rev 14460)
</span><span class="lines">@@ -598,11 +598,11 @@
</span><span class="cx">
</span><span class="cx">
</span><span class="cx"> try:
</span><del>- import pgdb
</del><ins>+ import pgdb as postgres
</ins><span class="cx"> except ImportError:
</span><span class="cx"> ProxyPrincipalDBPostgreSQL.skip = True
</span><span class="cx"> else:
</span><span class="cx"> try:
</span><del>- db = pgdb.connect(host="localhost", database="proxies")
</del><ins>+ db = postgres.connect(host="localhost", database="proxies")
</ins><span class="cx"> except:
</span><span class="cx"> ProxyPrincipalDBPostgreSQL.skip = True
</span></span></pre></div>
<a id="CalendarServerbranchesuserscdaboopod2podmigrationtxdavbasedatastoresubpostgrespy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/cdaboo/pod2pod-migration/txdav/base/datastore/subpostgres.py (14459 => 14460)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/cdaboo/pod2pod-migration/txdav/base/datastore/subpostgres.py        2015-02-20 15:14:42 UTC (rev 14459)
+++ CalendarServer/branches/users/cdaboo/pod2pod-migration/txdav/base/datastore/subpostgres.py        2015-02-20 15:20:56 UTC (rev 14460)
</span><span class="lines">@@ -26,7 +26,7 @@
</span><span class="cx"> from hashlib import md5
</span><span class="cx"> from pipes import quote as shell_quote
</span><span class="cx">
</span><del>-import pgdb
</del><ins>+import pgdb as postgres
</ins><span class="cx">
</span><span class="cx"> from twisted.python.procutils import which
</span><span class="cx"> from twisted.internet.protocol import ProcessProtocol
</span><span class="lines">@@ -254,6 +254,7 @@
</span><span class="cx"> self.port = None
</span><span class="cx"> self.listenAddresses = []
</span><span class="cx">
</span><ins>+ self.testMode = testMode
</ins><span class="cx"> self.sharedBuffers = sharedBuffers if not testMode else 16
</span><span class="cx"> self.maxConnections = maxConnections if not testMode else 8
</span><span class="cx"> self.options = options
</span><span class="lines">@@ -292,20 +293,20 @@
</span><span class="cx">
</span><span class="cx"> def activateDelayedShutdown(self):
</span><span class="cx"> """
</span><del>- Call this when starting database initialization code to protect against
- shutdown.
</del><ins>+ Call this when starting database initialization code to
+ protect against shutdown.
</ins><span class="cx">
</span><del>- Sets the delayedShutdown flag to True so that if reactor shutdown
- commences, the shutdown will be delayed until deactivateDelayedShutdown
- is called.
</del><ins>+ Sets the delayedShutdown flag to True so that if reactor
+ shutdown commences, the shutdown will be delayed until
+ deactivateDelayedShutdown is called.
</ins><span class="cx"> """
</span><span class="cx"> self.delayedShutdown = True
</span><span class="cx">
</span><span class="cx">
</span><span class="cx"> def deactivateDelayedShutdown(self):
</span><span class="cx"> """
</span><del>- Call this when database initialization code has completed so that the
- reactor can shutdown.
</del><ins>+ Call this when database initialization code has completed so
+ that the reactor can shutdown.
</ins><span class="cx"> """
</span><span class="cx"> self.delayedShutdown = False
</span><span class="cx"> if self.shutdownDeferred:
</span><span class="lines">@@ -331,7 +332,7 @@
</span><span class="cx"> if self.port:
</span><span class="cx"> kwargs["host"] = "{}:{}".format(self.host, self.port)
</span><span class="cx">
</span><del>- return DBAPIConnector(pgdb, postgresPreflight, dsn, **kwargs)
</del><ins>+ return DBAPIConnector(postgres, postgresPreflight, dsn, **kwargs)
</ins><span class="cx">
</span><span class="cx">
</span><span class="cx"> def produceConnection(self, label="<unlabeled>", databaseName=None):
</span><span class="lines">@@ -353,7 +354,7 @@
</span><span class="cx"> createDatabaseCursor.execute(
</span><span class="cx"> "drop database {}".format(self.databaseName)
</span><span class="cx"> )
</span><del>- except pgdb.DatabaseError:
</del><ins>+ except postgres.DatabaseError:
</ins><span class="cx"> pass
</span><span class="cx">
</span><span class="cx"> try:
</span><span class="lines">@@ -420,9 +421,16 @@
</span><span class="cx"> """
</span><span class="cx">
</span><span class="cx"> def createConnection():
</span><del>- createDatabaseConn = self.produceConnection(
- "schema creation", "postgres"
- )
</del><ins>+ try:
+ createDatabaseConn = self.produceConnection(
+ "schema creation", "postgres"
+ )
+ except postgres.DatabaseError as e:
+ log.error(
+ "Unable to connect to database for schema creation: {error}",
+ error=e
+ )
+ raise
</ins><span class="cx"> createDatabaseCursor = createDatabaseConn.cursor()
</span><span class="cx"> createDatabaseCursor.execute("commit")
</span><span class="cx"> return createDatabaseConn, createDatabaseCursor
</span><span class="lines">@@ -465,6 +473,10 @@
</span><span class="cx"> options.append("-c log_rotation_age=1440")
</span><span class="cx"> options.append("-c logging_collector=on")
</span><span class="cx">
</span><ins>+ options.append("-c log_line_prefix=%t")
+ if self.testMode:
+ options.append("-c log_statement=all")
+
</ins><span class="cx"> log.warn(
</span><span class="cx"> "Requesting postgres start via {cmd} {opts}",
</span><span class="cx"> cmd=pgCtl, opts=options
</span></span></pre></div>
<a id="CalendarServerbranchesuserscdaboopod2podmigrationtxdavbasedatastoretesttest_subpostgrespy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/cdaboo/pod2pod-migration/txdav/base/datastore/test/test_subpostgres.py (14459 => 14460)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/cdaboo/pod2pod-migration/txdav/base/datastore/test/test_subpostgres.py        2015-02-20 15:14:42 UTC (rev 14459)
+++ CalendarServer/branches/users/cdaboo/pod2pod-migration/txdav/base/datastore/test/test_subpostgres.py        2015-02-20 15:20:56 UTC (rev 14460)
</span><span class="lines">@@ -29,6 +29,8 @@
</span><span class="cx"> from twisted.internet.defer import inlineCallbacks, Deferred
</span><span class="cx"> from twisted.application.service import Service
</span><span class="cx">
</span><ins>+
+
</ins><span class="cx"> class SubprocessStartup(TestCase):
</span><span class="cx"> """
</span><span class="cx"> Tests for starting and stopping the subprocess.
</span><span class="lines">@@ -44,6 +46,7 @@
</span><span class="cx"> """
</span><span class="cx">
</span><span class="cx"> test = self
</span><ins>+
</ins><span class="cx"> class SimpleService1(Service):
</span><span class="cx">
</span><span class="cx"> instances = []
</span><span class="lines">@@ -82,7 +85,7 @@
</span><span class="cx"> cursor = connection.cursor()
</span><span class="cx"> cursor.execute("select * from test_dummy_table")
</span><span class="cx"> values = cursor.fetchall()
</span><del>- self.assertEquals(values, [["dummy"]])
</del><ins>+ self.assertEquals(map(list, values), [["dummy"]])
</ins><span class="cx">
</span><span class="cx">
</span><span class="cx"> @inlineCallbacks
</span><span class="lines">@@ -95,6 +98,7 @@
</span><span class="cx"> """
</span><span class="cx">
</span><span class="cx"> test = self
</span><ins>+
</ins><span class="cx"> class SimpleService2(Service):
</span><span class="cx">
</span><span class="cx"> instances = []
</span><span class="lines">@@ -134,7 +138,7 @@
</span><span class="cx"> cursor = connection.cursor()
</span><span class="cx"> cursor.execute("select * from test_dummy_table")
</span><span class="cx"> values = cursor.fetchall()
</span><del>- self.assertEquals(values, [["dummy"]])
</del><ins>+ self.assertEquals(map(list, values), [["dummy"]])
</ins><span class="cx">
</span><span class="cx">
</span><span class="cx"> @inlineCallbacks
</span><span class="lines">@@ -147,6 +151,7 @@
</span><span class="cx"> """
</span><span class="cx">
</span><span class="cx"> test = self
</span><ins>+
</ins><span class="cx"> class SimpleService1(Service):
</span><span class="cx">
</span><span class="cx"> instances = []
</span><span class="lines">@@ -171,8 +176,11 @@
</span><span class="cx"> finally:
</span><span class="cx"> cursor.close()
</span><span class="cx">
</span><del>- # The SQL in importFile.sql will get executed, including the insertion of "value1"
- importFileName = CachingFilePath(__file__).parent().child("importFile.sql").path
</del><ins>+ # The SQL in importFile.sql will get executed, including the insertion
+ # of "value1"
+ importFileName = (
+ CachingFilePath(__file__).parent().child("importFile.sql").path
+ )
</ins><span class="cx"> svc = PostgresService(
</span><span class="cx"> CachingFilePath("postgres_3.pgdb"),
</span><span class="cx"> SimpleService1,
</span><span class="lines">@@ -188,4 +196,4 @@
</span><span class="cx"> cursor = connection.cursor()
</span><span class="cx"> cursor.execute("select * from import_test_table")
</span><span class="cx"> values = cursor.fetchall()
</span><del>- self.assertEquals(values, [["value1"], ["value2"]])
</del><ins>+ self.assertEquals(map(list, values), [["value1"], ["value2"]])
</ins></span></pre></div>
<a id="CalendarServerbranchesuserscdaboopod2podmigrationtxdavcaldavdatastoreschedulingimiptesttest_outboundpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/cdaboo/pod2pod-migration/txdav/caldav/datastore/scheduling/imip/test/test_outbound.py (14459 => 14460)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/cdaboo/pod2pod-migration/txdav/caldav/datastore/scheduling/imip/test/test_outbound.py        2015-02-20 15:14:42 UTC (rev 14459)
+++ CalendarServer/branches/users/cdaboo/pod2pod-migration/txdav/caldav/datastore/scheduling/imip/test/test_outbound.py        2015-02-20 15:20:56 UTC (rev 14460)
</span><span class="lines">@@ -704,7 +704,7 @@
</span><span class="cx"> """
</span><span class="cx"> class StubElement(Element):
</span><span class="cx"> loader = StringFormatTemplateLoader(
</span><del>- lambda : StringIO(
</del><ins>+ lambda: StringIO(
</ins><span class="cx"> "<test><alpha>%(slot1)s</alpha>%(other)s</test>"
</span><span class="cx"> ),
</span><span class="cx"> "testRenderHere"
</span><span class="lines">@@ -716,8 +716,10 @@
</span><span class="cx"> other="world")
</span><span class="cx"> result = []
</span><span class="cx"> flattenString(None, StubElement()).addCallback(result.append)
</span><del>- self.assertEquals(result,
- ["<test><alpha>hello</alpha>world</test>"])
</del><ins>+ self.assertEquals(
+ list(result),
+ ["<test><alpha>hello</alpha>world</test>"]
+ )
</ins><span class="cx">
</span><span class="cx">
</span><span class="cx"> def test_templateLoaderWithAttributes(self):
</span><span class="lines">@@ -728,7 +730,7 @@
</span><span class="cx"> """
</span><span class="cx"> class StubElement(Element):
</span><span class="cx"> loader = StringFormatTemplateLoader(
</span><del>- lambda : StringIO(
</del><ins>+ lambda: StringIO(
</ins><span class="cx"> '<test><alpha beta="before %(slot1)s after">inner</alpha>'
</span><span class="cx"> '%(other)s</test>'
</span><span class="cx"> ),
</span><span class="lines">@@ -741,9 +743,13 @@
</span><span class="cx"> other="world")
</span><span class="cx"> result = []
</span><span class="cx"> flattenString(None, StubElement()).addCallback(result.append)
</span><del>- self.assertEquals(result,
- ['<test><alpha beta="before hello after">'
- 'inner</alpha>world</test>'])
</del><ins>+ self.assertEquals(
+ result,
+ [
+ '<test><alpha beta="before hello after">'
+ 'inner</alpha>world</test>'
+ ]
+ )
</ins><span class="cx">
</span><span class="cx">
</span><span class="cx"> def test_templateLoaderTagSoup(self):
</span><span class="lines">@@ -755,7 +761,7 @@
</span><span class="cx"> """
</span><span class="cx"> class StubElement(Element):
</span><span class="cx"> loader = StringFormatTemplateLoader(
</span><del>- lambda : StringIO(
</del><ins>+ lambda: StringIO(
</ins><span class="cx"> '<test><alpha beta="before %(slot1)s after">inner</alpha>'
</span><span class="cx"> '%(other)s'
</span><span class="cx"> ),
</span></span></pre></div>
<a id="CalendarServerbranchesuserscdaboopod2podmigrationtxdavcarddavdatastoresqlpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/cdaboo/pod2pod-migration/txdav/carddav/datastore/sql.py (14459 => 14460)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/cdaboo/pod2pod-migration/txdav/carddav/datastore/sql.py        2015-02-20 15:14:42 UTC (rev 14459)
+++ CalendarServer/branches/users/cdaboo/pod2pod-migration/txdav/carddav/datastore/sql.py        2015-02-20 15:20:56 UTC (rev 14460)
</span><span class="lines">@@ -991,15 +991,17 @@
</span><span class="cx"> @inlineCallbacks
</span><span class="cx"> def _groupForSharedAddressBookComponent(self):
</span><span class="cx">
</span><del>- n = self.viewerHome().uid()
- fn = n
</del><span class="cx"> uid = self._groupForSharedAddressBookUID()
</span><ins>+ record = yield self._txn.directoryService().recordWithUID(
+ self.viewerHome().uid().decode("utf-8")
+ )
+ n = record.shortNames[0]
+ fn = record.fullname if (
+ hasattr(record, "fullName") and record.fullname
+ ) else (
+ n
+ )
</ins><span class="cx">
</span><del>- # storebridge should substitute principal name and full name
- # owner = yield CalDAVResource.principalForUID(self.ownerHome().uid())
- # n = owner.name()
- # fn = owner.displayName()
-
</del><span class="cx"> component = VCard.fromString(
</span><span class="cx"> """BEGIN:VCARD
</span><span class="cx"> VERSION:3.0
</span></span></pre></div>
<a id="CalendarServerbranchesuserscdaboopod2podmigrationtxdavcarddavdatastoretesttest_sqlpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/cdaboo/pod2pod-migration/txdav/carddav/datastore/test/test_sql.py (14459 => 14460)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/cdaboo/pod2pod-migration/txdav/carddav/datastore/test/test_sql.py        2015-02-20 15:14:42 UTC (rev 14459)
+++ CalendarServer/branches/users/cdaboo/pod2pod-migration/txdav/carddav/datastore/test/test_sql.py        2015-02-20 15:20:56 UTC (rev 14460)
</span><span class="lines">@@ -580,7 +580,7 @@
</span><span class="cx">
</span><span class="cx"> aboForeignMembers = schema.ABO_FOREIGN_MEMBERS
</span><span class="cx"> foreignMemberRows = yield Select([aboForeignMembers.GROUP_ID, aboForeignMembers.MEMBER_ADDRESS], From=aboForeignMembers).on(txn)
</span><del>- self.assertEqual(foreignMemberRows, [[groupObject._resourceID, "urn:uuid:uid3"]])
</del><ins>+ self.assertEqual(map(list, foreignMemberRows), [[groupObject._resourceID, "urn:uuid:uid3"]])
</ins><span class="cx">
</span><span class="cx"> subgroup = VCard.fromString(
</span><span class="cx"> """BEGIN:VCARD
</span><span class="lines">@@ -598,10 +598,13 @@
</span><span class="cx"> subgroupObject = yield adbk.createAddressBookObjectWithName("sg.vcf", subgroup)
</span><span class="cx">
</span><span class="cx"> memberRows = yield Select([aboMembers.GROUP_ID, aboMembers.MEMBER_ID], From=aboMembers, Where=aboMembers.REMOVED == False).on(txn)
</span><del>- self.assertEqual(sorted(memberRows), sorted([
- [groupObject._resourceID, subgroupObject._resourceID],
- [subgroupObject._resourceID, personObject._resourceID],
- ]))
</del><ins>+ self.assertEqual(
+ map(list, sorted(memberRows)),
+ sorted([
+ [groupObject._resourceID, subgroupObject._resourceID],
+ [subgroupObject._resourceID, personObject._resourceID],
+ ])
+ )
</ins><span class="cx">
</span><span class="cx"> foreignMemberRows = yield Select([aboForeignMembers.GROUP_ID, aboForeignMembers.MEMBER_ADDRESS], From=aboForeignMembers).on(txn)
</span><span class="cx"> self.assertEqual(foreignMemberRows, [])
</span><span class="lines">@@ -627,7 +630,10 @@
</span><span class="cx"> foreignMemberRows = yield Select(
</span><span class="cx"> [aboForeignMembers.GROUP_ID, aboForeignMembers.MEMBER_ADDRESS], From=aboForeignMembers,
</span><span class="cx"> ).on(txn)
</span><del>- self.assertEqual(foreignMemberRows, [[groupObject._resourceID, "urn:uuid:uid3"]])
</del><ins>+ self.assertEqual(
+ map(list, foreignMemberRows),
+ [[groupObject._resourceID, "urn:uuid:uid3"]]
+ )
</ins><span class="cx">
</span><span class="cx"> yield home.removeAddressBookWithName("addressbook")
</span><span class="cx"> yield txn.commit()
</span></span></pre></div>
<a id="CalendarServerbranchesuserscdaboopod2podmigrationtxdavcommondatastoretesttest_sqlpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/cdaboo/pod2pod-migration/txdav/common/datastore/test/test_sql.py (14459 => 14460)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/cdaboo/pod2pod-migration/txdav/common/datastore/test/test_sql.py        2015-02-20 15:14:42 UTC (rev 14459)
+++ CalendarServer/branches/users/cdaboo/pod2pod-migration/txdav/common/datastore/test/test_sql.py        2015-02-20 15:20:56 UTC (rev 14460)
</span><span class="lines">@@ -92,8 +92,10 @@
</span><span class="cx"> self.patch(self.store, "logTransactionWaits", 1)
</span><span class="cx">
</span><span class="cx"> ctr = [0]
</span><ins>+
</ins><span class="cx"> def counter(*args, **kwargs):
</span><span class="cx"> ctr[0] += 1
</span><ins>+
</ins><span class="cx"> self.patch(log, "error", counter)
</span><span class="cx">
</span><span class="cx"> txn = self.transactionUnderTest()
</span><span class="lines">@@ -115,8 +117,10 @@
</span><span class="cx"> self.patch(self.store, "timeoutTransactions", 1)
</span><span class="cx">
</span><span class="cx"> ctr = [0]
</span><ins>+
</ins><span class="cx"> def counter(*args, **kwargs):
</span><span class="cx"> ctr[0] += 1
</span><ins>+
</ins><span class="cx"> self.patch(log, "error", counter)
</span><span class="cx">
</span><span class="cx"> txn = self.transactionUnderTest()
</span><span class="lines">@@ -130,7 +134,8 @@
</span><span class="cx">
</span><span class="cx"> def test_logWaitsAndTxnTimeout(self):
</span><span class="cx"> """
</span><del>- CommonStoreTransactionMonitor logs waiting transactions and terminates long transactions.
</del><ins>+ CommonStoreTransactionMonitor logs waiting transactions and terminates
+ long transactions.
</ins><span class="cx"> """
</span><span class="cx">
</span><span class="cx"> c = Clock()
</span><span class="lines">@@ -141,11 +146,13 @@
</span><span class="cx"> self.patch(self.store, "timeoutTransactions", 2)
</span><span class="cx">
</span><span class="cx"> ctr = [0, 0]
</span><ins>+
</ins><span class="cx"> def counter(logStr, *args, **kwargs):
</span><span class="cx"> if "wait" in logStr:
</span><span class="cx"> ctr[0] += 1
</span><span class="cx"> elif "abort" in logStr:
</span><span class="cx"> ctr[1] += 1
</span><ins>+
</ins><span class="cx"> self.patch(log, "error", counter)
</span><span class="cx">
</span><span class="cx"> txn = self.transactionUnderTest()
</span><span class="lines">@@ -270,11 +277,13 @@
</span><span class="cx"> cs = schema.CALENDARSERVER
</span><span class="cx"> yield Select([cs.VALUE], From=cs).on(txn)
</span><span class="cx"> waitAMoment = Deferred()
</span><ins>+
</ins><span class="cx"> @inlineCallbacks
</span><span class="cx"> def later(subtxn):
</span><span class="cx"> yield waitAMoment
</span><span class="cx"> value = yield Select([cs.VALUE], From=cs).on(subtxn)
</span><span class="cx"> returnValue(value)
</span><ins>+
</ins><span class="cx"> started = txn.subtransaction(later)
</span><span class="cx"> txn.abort()
</span><span class="cx"> waitAMoment.callback(True)
</span><span class="lines">@@ -365,15 +374,23 @@
</span><span class="cx"> from txdav.common.datastore.sql import _normalizeColumnUUIDs
</span><span class="cx"> yield _normalizeColumnUUIDs(txn, rp.VIEWER_UID)
</span><span class="cx"> self.assertEqual(
</span><del>- (yield Select(
- [rp.RESOURCE_ID, rp.NAME,
- rp.VALUE, rp.VIEWER_UID],
- From=rp,
- OrderBy=rp.RESOURCE_ID, Ascending=True,
- ).on(txn)),
- [[1, "asdf", "property-value", "not-a-uuid"],
- [2, "fdsa", "another-value",
- "AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA"]]
</del><ins>+ map(
+ list,
+ (
+ yield Select(
+ [rp.RESOURCE_ID, rp.NAME, rp.VALUE, rp.VIEWER_UID],
+ From=rp,
+ OrderBy=rp.RESOURCE_ID, Ascending=True,
+ ).on(txn)
+ )
+ ),
+ [
+ [1, "asdf", "property-value", "not-a-uuid"],
+ [
+ 2, "fdsa",
+ "another-value", "AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA"
+ ]
+ ]
</ins><span class="cx"> )
</span><span class="cx">
</span><span class="cx">
</span><span class="lines">@@ -399,7 +416,10 @@
</span><span class="cx"> yield t1.calendarHomeWithUID(denormalizedUID, create=True)
</span><span class="cx"> yield self.commit()
</span><span class="cx"> yield fixUUIDNormalization(self.storeUnderTest())
</span><del>- self.assertEqual((yield self.allHomeUIDs()), [[normalizedUID]])
</del><ins>+ self.assertEqual(
+ map(list, (yield self.allHomeUIDs())),
+ [[normalizedUID]]
+ )
</ins><span class="cx">
</span><span class="cx">
</span><span class="cx"> @inlineCallbacks
</span><span class="lines">@@ -413,8 +433,10 @@
</span><span class="cx"> yield t1.notificationsWithUID(denormalizedUID, create=True)
</span><span class="cx"> yield self.commit()
</span><span class="cx"> yield fixUUIDNormalization(self.storeUnderTest())
</span><del>- self.assertEqual((yield self.allHomeUIDs(schema.NOTIFICATION_HOME)),
- [[normalizedUID]])
</del><ins>+ self.assertEqual(
+ map(list, (yield self.allHomeUIDs(schema.NOTIFICATION_HOME))),
+ [[normalizedUID]]
+ )
</ins><span class="cx">
</span><span class="cx">
</span><span class="cx"> @inlineCallbacks
</span><span class="lines">@@ -428,8 +450,10 @@
</span><span class="cx"> yield t1.addressbookHomeWithUID(denormalizedUID, create=True)
</span><span class="cx"> yield self.commit()
</span><span class="cx"> yield fixUUIDNormalization(self.storeUnderTest())
</span><del>- self.assertEqual((yield self.allHomeUIDs(schema.ADDRESSBOOK_HOME)),
- [[normalizedUID]])
</del><ins>+ self.assertEqual(
+ map(list, (yield self.allHomeUIDs(schema.ADDRESSBOOK_HOME))),
+ [[normalizedUID]]
+ )
</ins><span class="cx">
</span><span class="cx">
</span><span class="cx"> @inlineCallbacks
</span></span></pre></div>
<a id="CalendarServerbranchesuserscdaboopod2podmigrationtxdavcommondatastoreupgradesqltesttest_upgrade_with_datapy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/cdaboo/pod2pod-migration/txdav/common/datastore/upgrade/sql/test/test_upgrade_with_data.py (14459 => 14460)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/cdaboo/pod2pod-migration/txdav/common/datastore/upgrade/sql/test/test_upgrade_with_data.py        2015-02-20 15:14:42 UTC (rev 14459)
+++ CalendarServer/branches/users/cdaboo/pod2pod-migration/txdav/common/datastore/upgrade/sql/test/test_upgrade_with_data.py        2015-02-20 15:20:56 UTC (rev 14460)
</span><span class="lines">@@ -175,7 +175,7 @@
</span><span class="cx"> self.assertEqual(len(schedules), 1)
</span><span class="cx"> self.assertEqual(len(replies), 1)
</span><span class="cx">
</span><del>- self.assertEqual(replies[0], [1, 1, None, cal1, ])
</del><ins>+ self.assertEqual(list(replies[0]), [1, 1, None, cal1, ])
</ins><span class="cx">
</span><span class="cx">
</span><span class="cx"> @inlineCallbacks
</span><span class="lines">@@ -271,4 +271,4 @@
</span><span class="cx"> self.assertEqual(len(schedules), 1)
</span><span class="cx"> self.assertEqual(len(replies), 1)
</span><span class="cx">
</span><del>- self.assertEqual(replies[0], [1, 1, 3, None, ])
</del><ins>+ self.assertEqual(list(replies[0]), [1, 1, 3, None, ])
</ins></span></pre>
</div>
</div>
</body>
</html>