8. Warner Bros. Records
• Subsidiary of Warner Music Group
• Family of labels (Reprise, Sire, etc.)
• Over 100 artists
• Top-selling albums
• It’s music biz after all!
30. Prod server
Prod Prod
Dev server
New QA Dev Dev
Time
31. Prod server
Prod 2.0
Prod Prod
Dev server
New QA Dev Dev
Time
32. Order of Events
1. Develop a new site
2. Launch site
3. Take snapshot of prod site
4. Develop on snapshot
5. Magic? => Relaunch new version of site
33. But it’s not Magic!
1. Take dev site down
2. Shift sequenced IDs on Dev
3. Take prod site down
4. Merge content from Prod to Dev
5. QA “new” dev site
6. Copy dev site to prod site
7. Bring “new” prod site live
52. Also...
• Special tables:
• location, sequences, url_alias, etc.
• node-nid.tpl.php
• Serialized PHP variables in DB
• PHP code in DB
• URLs in DB or elsewhere (e.g., /node/123)
54. Do the best we can!
• Reference of all known tables
• Reference of all known sequence fields
• Reference of all known “special cases”
• Automate as much as possible
56. Check for unknown tables
$rs = db_query(“SHOW TABLES”);
while ($row = db_fetch_row($rs)) {
if (!is_known_table($row[0]) {
log_unknown_table($row[0]);
}
}
if (found_unknown_tables()) {
print_unknown_tables();
exit;
}
57. Store all known tables in a
txt file
access buddylist_groups
accesslog buddylist_pending_requests
audio_widget_thumbnail cache*
audio_widget_track comments
authmap contact
blocks content_field_*
blocks_roles content_type_*
boxes devel_queries
buddylist devel_times
buddylist_buddy_group ...
58.
59. Store all fields in separate
txt files
comments.nid node_comment_statistics.nid
content_field_* nid.field_*_nid node_counter.nid
content_type_* nid.field_*_nid node_revisions.nid
files.nid nodefamily.parent_nid, child_nid
forum.nid panels_node.nid
forward_log.nid poll.nid
history.nid poll_choices.nid
node.nid poll_votes.nid
node_access.nid ...
60. Now we can shift IDs!
• Iterate thru DB tables
• If table has known fields, shift IDs
(remember that SQL command?)
• Rinse and repeat for each sequenced ID
67. Url_alias table
• ID values are embedded as strings
• Use pattern matching to parse the ID
• node: node/nid
• user: user/uid, blog/uid
• Add the delta, update new alias
68. Pseudo-code
SELECT * FROM url_alias WHERE src LIKE ‘node/%’
preg_match('/node/([0-9]*)/', $src, $matches)
$id = $matches[1]
$id = $id + $delta
UPDATE url_alias SET src = 'node/$id' WHERE pid = $pid
69. Manually
• Rename any node-nid.tpl.php files
• Search for ID vals in DB:
• Eval’ed PHP code
• Serialized PHP code
• URLs
• anything else?
70. Step 1 Recap
• Maintain indexes for tables and fields
• Automate using the indexes
• Review indexes before each shift
• Inspect for manual cases after each shift
• Document every new case you find!