~mysqlatfacebook/mysqlatfacebook/tools

« back to all changes in this revision

Viewing changes to prefetch/rewriters.py

  • Committer: Domas Mituzas
  • Date: 2011-12-03 19:55:54 UTC
  • Revision ID: domas@facebook.com-20111203195554-xvvgeq6gw01cs4yq
Replication prefetcher:
* binlog.py - binlog reading class
* readahead.py - main chassis for replication event prefetching
* mysql.py - helper MySQL class
* rewriters.py - helper query 'rewrite' routines
* custom_query_prefetch.py - example for query-specific prefetcher
* fake_updates_prefetch.py - InnoDB fake changes based prefetcher

Licensed under Apache License 2.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#!/usr/bin/python
 
2
#
 
3
#   Copyright 2011 Facebook
 
4
#
 
5
#   Licensed under the Apache License, Version 2.0 (the "License");
 
6
#   you may not use this file except in compliance with the License.
 
7
#   You may obtain a copy of the License at
 
8
#
 
9
#       http://www.apache.org/licenses/LICENSE-2.0
 
10
#
 
11
#   Unless required by applicable law or agreed to in writing, software
 
12
#   distributed under the License is distributed on an "AS IS" BASIS,
 
13
#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 
14
#   See the License for the specific language governing permissions and
 
15
#   limitations under the License.
 
16
#
 
17
 
 
18
 
 
19
"""
 
20
Methods turn binlog events into preheating activities
 
21
all of them can return a string query, list of strings or None
 
22
"""
 
23
 
 
24
def rollback(event):
 
25
   """ Default method which executes statements with a rollback at the end """
 
26
   query = ""
 
27
   if event.db:
 
28
       query += "USE %s;" % event.db
 
29
 
 
30
   if event.insert_id != None:
 
31
       query += "SET INSERT_ID=%d; " % event.insert_id
 
32
   if event.last_insert_id != None:
 
33
       query += "SET LAST_INSERT_ID=%d; " % event.last_insert_id
 
34
 
 
35
   query += "/* pos:%d */ " % event.pos
 
36
   query += event.query
 
37
   return "ROLLBACK; BEGIN; %s; ROLLBACK" % query
 
38
 
 
39
def fake_update(event):
 
40
    """ Execute queries, assuming that server won't do anything,
 
41
        needs fake updates support in server """
 
42
    query = ""
 
43
    if event.db:
 
44
        query += "USE %s;" % event.db
 
45
 
 
46
    if event.insert_id != None:
 
47
        query += "SET INSERT_ID=%d; " % event.insert_id
 
48
    if event.last_insert_id != None:
 
49
        query += "SET LAST_INSERT_ID=%d; " % event.last_insert_id
 
50
 
 
51
    query += "/* pos:%d */ " % event.pos
 
52
    query += event.query
 
53
    return query
 
54