myreplicator 1.1.7 → 1.1.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/app/controllers/myreplicator/exports_controller.rb +1 -4
 - data/app/models/myreplicator/log.rb +1 -1
 - data/lib/exporter/export_metadata.rb +10 -0
 - data/lib/exporter/mysql_exporter.rb +44 -53
 - data/lib/exporter/sql_commands.rb +8 -2
 - data/lib/loader/loader.rb +55 -18
 - data/lib/loader/vertica/vertica_loader.rb +242 -102
 - data/lib/myreplicator/version.rb +1 -1
 - data/test/dummy/log/development.log +272 -0
 - metadata +4 -4
 
| 
         @@ -45,8 +45,6 @@ module Myreplicator 
     | 
|
| 
       45 
45 
     | 
    
         
             
                  @dbs = get_dbs
         
     | 
| 
       46 
46 
     | 
    
         
             
                  @tables = db_metadata
         
     | 
| 
       47 
47 
     | 
    
         
             
                  @edit = true
         
     | 
| 
       48 
     | 
    
         
            -
             
     | 
| 
       49 
     | 
    
         
            -
                  Myreplicator::Export.schedule_in_resque # schedule in resque
         
     | 
| 
       50 
48 
     | 
    
         
             
                end
         
     | 
| 
       51 
49 
     | 
    
         | 
| 
       52 
50 
     | 
    
         
             
                # POST /exports
         
     | 
| 
         @@ -70,14 +68,13 @@ module Myreplicator 
     | 
|
| 
       70 
68 
     | 
    
         
             
                # PUT /exports/1.json
         
     | 
| 
       71 
69 
     | 
    
         
             
                def update
         
     | 
| 
       72 
70 
     | 
    
         
             
                  @export = Export.find(params[:id])
         
     | 
| 
       73 
     | 
    
         
            -
                  Myreplicator::Export.schedule_in_resque # schedule in resque
         
     | 
| 
       74 
     | 
    
         
            -
             
     | 
| 
       75 
71 
     | 
    
         
             
                  @dbs = get_dbs
         
     | 
| 
       76 
72 
     | 
    
         | 
| 
       77 
73 
     | 
    
         
             
                  respond_to do |format|
         
     | 
| 
       78 
74 
     | 
    
         
             
                    if @export.update_attributes(params[:export])
         
     | 
| 
       79 
75 
     | 
    
         
             
                      format.html { redirect_to @export, notice: 'Export was successfully updated.' }
         
     | 
| 
       80 
76 
     | 
    
         
             
                      format.json { head :no_content }
         
     | 
| 
      
 77 
     | 
    
         
            +
                      Myreplicator::Export.schedule_in_resque # schedule in resque
         
     | 
| 
       81 
78 
     | 
    
         
             
                    else
         
     | 
| 
       82 
79 
     | 
    
         
             
                      format.html { render action: "edit" }
         
     | 
| 
       83 
80 
     | 
    
         
             
                      format.json { render json: @export.errors, status: :unprocessable_entity }
         
     | 
| 
         @@ -39,6 +39,16 @@ module Myreplicator 
     | 
|
| 
       39 
39 
     | 
    
         
             
                  name = zipped ? "#{name}.gz" : name
         
     | 
| 
       40 
40 
     | 
    
         
             
                  return name     
         
     | 
| 
       41 
41 
     | 
    
         
             
                end
         
     | 
| 
      
 42 
     | 
    
         
            +
                
         
     | 
| 
      
 43 
     | 
    
         
            +
                def metadata_filename
         
     | 
| 
      
 44 
     | 
    
         
            +
                  name = filepath.split("/").last
         
     | 
| 
      
 45 
     | 
    
         
            +
                  name += ".json"
         
     | 
| 
      
 46 
     | 
    
         
            +
                  return name
         
     | 
| 
      
 47 
     | 
    
         
            +
                end
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
                def metadata_filepath tmp_dir
         
     | 
| 
      
 50 
     | 
    
         
            +
                  File.join(tmp_dir, metadata_filename)
         
     | 
| 
      
 51 
     | 
    
         
            +
                end
         
     | 
| 
       42 
52 
     | 
    
         | 
| 
       43 
53 
     | 
    
         
             
                def destination_filepath tmp_dir
         
     | 
| 
       44 
54 
     | 
    
         
             
                  File.join(tmp_dir, filename)
         
     | 
| 
         @@ -27,7 +27,7 @@ module Myreplicator 
     | 
|
| 
       27 
27 
     | 
    
         
             
                      on_failure_state_trans(metadata, "new") # If failed, go back to new
         
     | 
| 
       28 
28 
     | 
    
         
             
                      on_export_success(metadata)
         
     | 
| 
       29 
29 
     | 
    
         
             
                      initial_export metadata
         
     | 
| 
       30 
     | 
    
         
            -
                    elsif @export_obj.export_type? == :incremental  
     | 
| 
      
 30 
     | 
    
         
            +
                    elsif @export_obj.export_type? == :incremental || load_to == "vertica"
         
     | 
| 
       31 
31 
     | 
    
         
             
                      on_failure_state_trans(metadata, "failed") # Set state trans on failure
         
     | 
| 
       32 
32 
     | 
    
         
             
                      on_export_success(metadata)
         
     | 
| 
       33 
33 
     | 
    
         
             
                      incremental_export_into_outfile metadata
         
     | 
| 
         @@ -100,43 +100,6 @@ module Myreplicator 
     | 
|
| 
       100 
100 
     | 
    
         
             
                  return cmd
         
     | 
| 
       101 
101 
     | 
    
         
             
                end
         
     | 
| 
       102 
102 
     | 
    
         | 
| 
       103 
     | 
    
         
            -
                ##
         
     | 
| 
       104 
     | 
    
         
            -
                # Exports table incrementally, using the incremental column specified
         
     | 
| 
       105 
     | 
    
         
            -
                # If column is not specified, it will export the entire table 
         
     | 
| 
       106 
     | 
    
         
            -
                # Maximum value of the incremental column is recorded BEFORE export starts
         
     | 
| 
       107 
     | 
    
         
            -
                ##
         
     | 
| 
       108 
     | 
    
         
            -
             
     | 
| 
       109 
     | 
    
         
            -
                def incremental_export metadata
         
     | 
| 
       110 
     | 
    
         
            -
                  unless @export_obj.is_running?
         
     | 
| 
       111 
     | 
    
         
            -
                    max_value = @export_obj.max_value
         
     | 
| 
       112 
     | 
    
         
            -
                    metadata.export_type = "incremental"
         
     | 
| 
       113 
     | 
    
         
            -
                    @export_obj.update_max_val if @export_obj.max_incremental_value.blank?   
         
     | 
| 
       114 
     | 
    
         
            -
                    
         
     | 
| 
       115 
     | 
    
         
            -
                    cmd = incremental_export_cmd 
         
     | 
| 
       116 
     | 
    
         
            -
                    exporting_state_trans # mark exporting
         
     | 
| 
       117 
     | 
    
         
            -
                    puts "Exporting..."
         
     | 
| 
       118 
     | 
    
         
            -
                    result = execute_export(cmd, metadata)
         
     | 
| 
       119 
     | 
    
         
            -
                    check_result(result, 0)
         
     | 
| 
       120 
     | 
    
         
            -
                    metadata.incremental_val = max_value # store max val in metadata
         
     | 
| 
       121 
     | 
    
         
            -
                    @export_obj.update_max_val(max_value) # update max value if export was successful
         
     | 
| 
       122 
     | 
    
         
            -
                  end
         
     | 
| 
       123 
     | 
    
         
            -
                  return false
         
     | 
| 
       124 
     | 
    
         
            -
                end
         
     | 
| 
       125 
     | 
    
         
            -
             
     | 
| 
       126 
     | 
    
         
            -
                def incremental_export_cmd
         
     | 
| 
       127 
     | 
    
         
            -
                  sql = SqlCommands.export_sql(:db => @export_obj.source_schema,
         
     | 
| 
       128 
     | 
    
         
            -
                                               :table => @export_obj.table_name,
         
     | 
| 
       129 
     | 
    
         
            -
                                               :incremental_col => @export_obj.incremental_column,
         
     | 
| 
       130 
     | 
    
         
            -
                                               :incremental_col_type => @export_obj.incremental_column_type,
         
     | 
| 
       131 
     | 
    
         
            -
                                               :incremental_val => @export_obj.max_incremental_value)      
         
     | 
| 
       132 
     | 
    
         
            -
                  
         
     | 
| 
       133 
     | 
    
         
            -
                  cmd = SqlCommands.mysql_export(:db => @export_obj.source_schema,
         
     | 
| 
       134 
     | 
    
         
            -
                                                 :filepath => filepath,
         
     | 
| 
       135 
     | 
    
         
            -
                                                 :sql => sql)
         
     | 
| 
       136 
     | 
    
         
            -
                  
         
     | 
| 
       137 
     | 
    
         
            -
                  return cmd
         
     | 
| 
       138 
     | 
    
         
            -
                end
         
     | 
| 
       139 
     | 
    
         
            -
             
     | 
| 
       140 
103 
     | 
    
         
             
                ##
         
     | 
| 
       141 
104 
     | 
    
         
             
                # Exports table incrementally, similar to incremental_export method
         
     | 
| 
       142 
105 
     | 
    
         
             
                # Dumps file in tmp directory specified in myreplicator.yml
         
     | 
| 
         @@ -146,25 +109,33 @@ module Myreplicator 
     | 
|
| 
       146 
109 
     | 
    
         | 
| 
       147 
110 
     | 
    
         
             
                def incremental_export_into_outfile metadata
         
     | 
| 
       148 
111 
     | 
    
         
             
                  unless @export_obj.is_running?
         
     | 
| 
       149 
     | 
    
         
            -
             
     | 
| 
      
 112 
     | 
    
         
            +
                    
         
     | 
| 
       150 
113 
     | 
    
         
             
                    if @export_obj.export_type == "incremental"
         
     | 
| 
       151 
114 
     | 
    
         
             
                      max_value = @export_obj.max_value
         
     | 
| 
       152 
     | 
    
         
            -
                      metadata.export_type = " 
     | 
| 
      
 115 
     | 
    
         
            +
                      metadata.export_type = "incremental"        
         
     | 
| 
       153 
116 
     | 
    
         
             
                      @export_obj.update_max_val if @export_obj.max_incremental_value.blank?   
         
     | 
| 
       154 
117 
     | 
    
         
             
                    end
         
     | 
| 
       155 
118 
     | 
    
         | 
| 
       156 
119 
     | 
    
         
             
                    options = {
         
     | 
| 
       157 
120 
     | 
    
         
             
                      :db => @export_obj.source_schema,
         
     | 
| 
      
 121 
     | 
    
         
            +
                      :source_schema => @export_obj.source_schema,
         
     | 
| 
       158 
122 
     | 
    
         
             
                      :table => @export_obj.table_name,
         
     | 
| 
       159 
123 
     | 
    
         
             
                      :filepath => filepath,
         
     | 
| 
       160 
124 
     | 
    
         
             
                      :destination_schema => @export_obj.destination_schema}
         
     | 
| 
       161 
125 
     | 
    
         | 
| 
       162 
     | 
    
         
            -
                     
     | 
| 
      
 126 
     | 
    
         
            +
                    schema_status = MysqlExporter.schema_changed?(options)
         
     | 
| 
      
 127 
     | 
    
         
            +
                    Kernel.p "===== schema_status ====="
         
     | 
| 
      
 128 
     | 
    
         
            +
                    Kernel.p schema_status
         
     | 
| 
      
 129 
     | 
    
         
            +
                    if schema_status[:changed] # && new?
         
     | 
| 
      
 130 
     | 
    
         
            +
                      metadata.export_type = "initial"
         
     | 
| 
      
 131 
     | 
    
         
            +
                    else
         
     | 
| 
       163 
132 
     | 
    
         
             
                      options[:incremental_col] = @export_obj.incremental_column
         
     | 
| 
       164 
133 
     | 
    
         
             
                      options[:incremental_col_type] = @export_obj.incremental_column_type
         
     | 
| 
       165 
134 
     | 
    
         
             
                      options[:incremental_val] = @export_obj.max_incremental_value
         
     | 
| 
       166 
135 
     | 
    
         
             
                    end
         
     | 
| 
       167 
136 
     | 
    
         | 
| 
      
 137 
     | 
    
         
            +
                    Kernel.p "===== incremental_export_into_outfile OPTIONS ====="
         
     | 
| 
      
 138 
     | 
    
         
            +
                    Kernel.p options
         
     | 
| 
       168 
139 
     | 
    
         
             
                    cmd = SqlCommands.mysql_export_outfile(options)      
         
     | 
| 
       169 
140 
     | 
    
         
             
                    exporting_state_trans
         
     | 
| 
       170 
141 
     | 
    
         
             
                    puts "Exporting..."
         
     | 
| 
         @@ -181,11 +152,10 @@ module Myreplicator 
     | 
|
| 
       181 
152 
     | 
    
         
             
                end
         
     | 
| 
       182 
153 
     | 
    
         | 
| 
       183 
154 
     | 
    
         
             
                def self.compare_schemas vertica_schema, mysql_schema
         
     | 
| 
      
 155 
     | 
    
         
            +
                  Kernel.p vertica_schema
         
     | 
| 
      
 156 
     | 
    
         
            +
                  Kernel.p mysql_schema
         
     | 
| 
       184 
157 
     | 
    
         
             
                  if vertica_schema.size != mysql_schema.size
         
     | 
| 
       185 
     | 
    
         
            -
                    return  
     | 
| 
       186 
     | 
    
         
            -
                      :mysql_schema => mysql_schema, 
         
     | 
| 
       187 
     | 
    
         
            -
                      :vertica_schema => vertica_schema,
         
     | 
| 
       188 
     | 
    
         
            -
                      :new => false}
         
     | 
| 
      
 158 
     | 
    
         
            +
                    return true
         
     | 
| 
       189 
159 
     | 
    
         
             
                  else
         
     | 
| 
       190 
160 
     | 
    
         
             
                    index = 0
         
     | 
| 
       191 
161 
     | 
    
         
             
                    while index < vertica_schema.size
         
     | 
| 
         @@ -195,7 +165,7 @@ module Myreplicator 
     | 
|
| 
       195 
165 
     | 
    
         
             
                      end
         
     | 
| 
       196 
166 
     | 
    
         | 
| 
       197 
167 
     | 
    
         
             
                      # check for column's data type
         
     | 
| 
       198 
     | 
    
         
            -
                      if  
     | 
| 
      
 168 
     | 
    
         
            +
                      if compare_datatypes index, vertica_schema, mysql_schema
         
     | 
| 
       199 
169 
     | 
    
         
             
                        return true
         
     | 
| 
       200 
170 
     | 
    
         
             
                      end
         
     | 
| 
       201 
171 
     | 
    
         
             
                      # and others ?? (PRIMARY, DEFAULT NULL, etc.)
         
     | 
| 
         @@ -205,7 +175,28 @@ module Myreplicator 
     | 
|
| 
       205 
175 
     | 
    
         
             
                  return false      
         
     | 
| 
       206 
176 
     | 
    
         
             
                end
         
     | 
| 
       207 
177 
     | 
    
         | 
| 
      
 178 
     | 
    
         
            +
                def self.compare_datatypes index, vertica_schema, mysql_schema
         
     | 
| 
      
 179 
     | 
    
         
            +
                  type = VerticaTypes.convert mysql_schema[index]["data_type"], mysql_schema[index]["column_type"]
         
     | 
| 
      
 180 
     | 
    
         
            +
                  if vertica_schema.rows[index][:data_type] != type
         
     | 
| 
      
 181 
     | 
    
         
            +
                    if vertica_schema.rows[index][:data_type] != "timestamp"
         
     | 
| 
      
 182 
     | 
    
         
            +
                      return true
         
     | 
| 
      
 183 
     | 
    
         
            +
                    end
         
     | 
| 
      
 184 
     | 
    
         
            +
                    return false
         
     | 
| 
      
 185 
     | 
    
         
            +
                  end
         
     | 
| 
      
 186 
     | 
    
         
            +
                  return false
         
     | 
| 
      
 187 
     | 
    
         
            +
                end
         
     | 
| 
      
 188 
     | 
    
         
            +
                
         
     | 
| 
      
 189 
     | 
    
         
            +
                def self.get_mysql_schema_rows mysql_schema 
         
     | 
| 
      
 190 
     | 
    
         
            +
                  mysql_schema_simple_form = []
         
     | 
| 
      
 191 
     | 
    
         
            +
                  mysql_schema.each(:as => :hash) do |row|
         
     | 
| 
      
 192 
     | 
    
         
            +
                    puts row
         
     | 
| 
      
 193 
     | 
    
         
            +
                    mysql_schema_simple_form << row
         
     | 
| 
      
 194 
     | 
    
         
            +
                  end
         
     | 
| 
      
 195 
     | 
    
         
            +
                  return mysql_schema_simple_form
         
     | 
| 
      
 196 
     | 
    
         
            +
                end
         
     | 
| 
      
 197 
     | 
    
         
            +
             
     | 
| 
       208 
198 
     | 
    
         
             
                def self.schema_changed? options
         
     | 
| 
      
 199 
     | 
    
         
            +
                  Kernel.p "===== schema_changed? ====="
         
     | 
| 
       209 
200 
     | 
    
         
             
                  puts options
         
     | 
| 
       210 
201 
     | 
    
         
             
                  mysql_schema = Loader.mysql_table_definition(options)
         
     | 
| 
       211 
202 
     | 
    
         
             
                  vertica_schema = VerticaLoader.destination_table_vertica(options)
         
     | 
| 
         @@ -214,19 +205,19 @@ module Myreplicator 
     | 
|
| 
       214 
205 
     | 
    
         
             
                  unless vertica_schema.size > 0 
         
     | 
| 
       215 
206 
     | 
    
         
             
                    return {:changed => true, :mysql_schema => mysql_schema, :new => true}
         
     | 
| 
       216 
207 
     | 
    
         
             
                  end
         
     | 
| 
       217 
     | 
    
         
            -
                  
         
     | 
| 
      
 208 
     | 
    
         
            +
                  Kernel.p "***** 1 *****"
         
     | 
| 
       218 
209 
     | 
    
         
             
                  # compare two schemas
         
     | 
| 
       219 
     | 
    
         
            -
                  mysql_schema_simple_form = []
         
     | 
| 
       220 
     | 
    
         
            -
                  mysql_schema.each(:as => :hash) do |row|
         
     | 
| 
       221 
     | 
    
         
            -
                    mysql_schema_simple_form << row  
         
     | 
| 
       222 
     | 
    
         
            -
                  end
         
     | 
| 
       223 
210 
     | 
    
         | 
| 
       224 
     | 
    
         
            -
                   
     | 
| 
      
 211 
     | 
    
         
            +
                  
         
     | 
| 
      
 212 
     | 
    
         
            +
                  mysql_schema_2 = get_mysql_schema_rows mysql_schema
         
     | 
| 
       225 
213 
     | 
    
         
             
                  if compare_schemas(vertica_schema, mysql_schema_2)
         
     | 
| 
      
 214 
     | 
    
         
            +
                    Kernel.p "***** 2 *****"
         
     | 
| 
       226 
215 
     | 
    
         
             
                    result =  {:changed => true, :mysql_schema => mysql_schema, :vertica_schema => vertica_schema,:new => false}
         
     | 
| 
       227 
216 
     | 
    
         
             
                  else
         
     | 
| 
       228 
     | 
    
         
            -
                     
     | 
| 
      
 217 
     | 
    
         
            +
                    Kernel.p "***** 3 *****"
         
     | 
| 
      
 218 
     | 
    
         
            +
                    result =  {:changed => false, :mysql_schema => mysql_schema}
         
     | 
| 
       229 
219 
     | 
    
         
             
                  end
         
     | 
| 
      
 220 
     | 
    
         
            +
                  Kernel.p result
         
     | 
| 
       230 
221 
     | 
    
         
             
                  return result
         
     | 
| 
       231 
222 
     | 
    
         
             
                end
         
     | 
| 
       232 
223 
     | 
    
         | 
| 
         @@ -119,6 +119,8 @@ module Myreplicator 
     | 
|
| 
       119 
119 
     | 
    
         
             
                ##
         
     | 
| 
       120 
120 
     | 
    
         | 
| 
       121 
121 
     | 
    
         
             
                def self.get_outfile_sql options 
         
     | 
| 
      
 122 
     | 
    
         
            +
                  Kernel.p "===== SELECT * INTO OUTFILE OPTIONS====="
         
     | 
| 
      
 123 
     | 
    
         
            +
                  Kernel.p options
         
     | 
| 
       122 
124 
     | 
    
         
             
                  sql = "SELECT * INTO OUTFILE '#{options[:filepath]}' " 
         
     | 
| 
       123 
125 
     | 
    
         | 
| 
       124 
126 
     | 
    
         
             
                  sql += " FIELDS TERMINATED BY '\\0' ESCAPED BY '' OPTIONALLY ENCLOSED BY '\\\"'  LINES TERMINATED BY '\\n'"
         
     | 
| 
         @@ -143,13 +145,17 @@ module Myreplicator 
     | 
|
| 
       143 
145 
     | 
    
         
             
                # Location of the output file needs to have 777 perms
         
     | 
| 
       144 
146 
     | 
    
         
             
                ##
         
     | 
| 
       145 
147 
     | 
    
         
             
                def self.mysql_export_outfile *args
         
     | 
| 
      
 148 
     | 
    
         
            +
                  Kernel.p "===== mysql_export_outfile OPTIONS ====="
         
     | 
| 
      
 149 
     | 
    
         
            +
                   
         
     | 
| 
       146 
150 
     | 
    
         
             
                  options = args.extract_options!
         
     | 
| 
      
 151 
     | 
    
         
            +
                  Kernel.p options
         
     | 
| 
       147 
152 
     | 
    
         
             
                  options.reverse_merge! :flags => []
         
     | 
| 
       148 
     | 
    
         
            -
                  db = options[: 
     | 
| 
      
 153 
     | 
    
         
            +
                  db = options[:source_schema]
         
     | 
| 
       149 
154 
     | 
    
         | 
| 
       150 
155 
     | 
    
         
             
                  # Database host when ssh'ed into the db server
         
     | 
| 
       151 
156 
     | 
    
         
             
                  db_host = "127.0.0.1"
         
     | 
| 
       152 
     | 
    
         
            -
                  
         
     | 
| 
      
 157 
     | 
    
         
            +
                  Kernel.p "===== mysql_export_outfile ssh_configs ====="
         
     | 
| 
      
 158 
     | 
    
         
            +
                  Kernel.p ssh_configs(db)
         
     | 
| 
       153 
159 
     | 
    
         
             
                  if !ssh_configs(db)["ssh_db_host"].blank?
         
     | 
| 
       154 
160 
     | 
    
         
             
                    db_host =  ssh_configs(db)["ssh_db_host"]
         
     | 
| 
       155 
161 
     | 
    
         
             
                  elsif !db_configs(db)["host"].blank?
         
     | 
    
        data/lib/loader/loader.rb
    CHANGED
    
    | 
         @@ -31,7 +31,7 @@ module Myreplicator 
     | 
|
| 
       31 
31 
     | 
    
         
             
                def self.load
         
     | 
| 
       32 
32 
     | 
    
         
             
                  initials = []
         
     | 
| 
       33 
33 
     | 
    
         
             
                  incrementals = []
         
     | 
| 
       34 
     | 
    
         
            -
                  all_files = Loader.metadata_files
         
     | 
| 
      
 34 
     | 
    
         
            +
                  all_files = Myreplicator::Loader.metadata_files
         
     | 
| 
       35 
35 
     | 
    
         | 
| 
       36 
36 
     | 
    
         
             
                  all_files.each do |m|
         
     | 
| 
       37 
37 
     | 
    
         
             
                    if m.export_type == "initial"
         
     | 
| 
         @@ -80,7 +80,11 @@ module Myreplicator 
     | 
|
| 
       80 
80 
     | 
    
         
             
                              :export_id => metadata.export_id) do |log|
         
     | 
| 
       81 
81 
     | 
    
         | 
| 
       82 
82 
     | 
    
         
             
                        if Loader.transfer_completed? metadata
         
     | 
| 
       83 
     | 
    
         
            -
                           
     | 
| 
      
 83 
     | 
    
         
            +
                          if metadata.export_to == "vertica"
         
     | 
| 
      
 84 
     | 
    
         
            +
                            Loader.incremental_load metadata
         
     | 
| 
      
 85 
     | 
    
         
            +
                          else
         
     | 
| 
      
 86 
     | 
    
         
            +
                            Loader.initial_load metadata
         
     | 
| 
      
 87 
     | 
    
         
            +
                          end
         
     | 
| 
       84 
88 
     | 
    
         
             
                          Loader.cleanup metadata
         
     | 
| 
       85 
89 
     | 
    
         
             
                        end
         
     | 
| 
       86 
90 
     | 
    
         | 
| 
         @@ -107,7 +111,7 @@ module Myreplicator 
     | 
|
| 
       107 
111 
     | 
    
         
             
                                :file => metadata.filename, 
         
     | 
| 
       108 
112 
     | 
    
         
             
                                :export_id => metadata.export_id) do |log|
         
     | 
| 
       109 
113 
     | 
    
         | 
| 
       110 
     | 
    
         
            -
                          if Loader.transfer_completed? metadata
         
     | 
| 
      
 114 
     | 
    
         
            +
                          if Loader.transfer_completed? metadata            
         
     | 
| 
       111 
115 
     | 
    
         
             
                            Loader.incremental_load metadata
         
     | 
| 
       112 
116 
     | 
    
         
             
                            Loader.cleanup metadata
         
     | 
| 
       113 
117 
     | 
    
         
             
                          end
         
     | 
| 
         @@ -152,6 +156,7 @@ module Myreplicator 
     | 
|
| 
       152 
156 
     | 
    
         
             
                ##
         
     | 
| 
       153 
157 
     | 
    
         
             
                def self.initial_load metadata
         
     | 
| 
       154 
158 
     | 
    
         
             
                  exp = Export.find(metadata.export_id)
         
     | 
| 
      
 159 
     | 
    
         
            +
                  Kernel.p "===== unzip ====="
         
     | 
| 
       155 
160 
     | 
    
         
             
                  Loader.unzip(metadata.filename)
         
     | 
| 
       156 
161 
     | 
    
         
             
                  metadata.zipped = false
         
     | 
| 
       157 
162 
     | 
    
         | 
| 
         @@ -176,22 +181,16 @@ module Myreplicator 
     | 
|
| 
       176 
181 
     | 
    
         
             
                  Loader.unzip(metadata.filename)
         
     | 
| 
       177 
182 
     | 
    
         
             
                  metadata.zipped = false
         
     | 
| 
       178 
183 
     | 
    
         | 
| 
       179 
     | 
    
         
            -
                  options = {:table_name => exp.table_name,  
     | 
| 
       180 
     | 
    
         
            -
                    : 
     | 
| 
       181 
     | 
    
         
            -
             
     | 
| 
       182 
     | 
    
         
            -
             
     | 
| 
       183 
     | 
    
         
            -
                     
     | 
| 
       184 
     | 
    
         
            -
                     
     | 
| 
       185 
     | 
    
         
            -
                  end
         
     | 
| 
      
 184 
     | 
    
         
            +
                  options = {:table_name => exp.table_name, 
         
     | 
| 
      
 185 
     | 
    
         
            +
                    :db => exp.destination_schema,
         
     | 
| 
      
 186 
     | 
    
         
            +
                    :filepath => metadata.destination_filepath(tmp_dir), 
         
     | 
| 
      
 187 
     | 
    
         
            +
                    :source_schema => exp.source_schema,      
         
     | 
| 
      
 188 
     | 
    
         
            +
                    :fields_terminated_by => "\\0",
         
     | 
| 
      
 189 
     | 
    
         
            +
                    :lines_terminated_by => "\\n"}
         
     | 
| 
       186 
190 
     | 
    
         | 
| 
       187 
191 
     | 
    
         
             
                  case metadata.export_to 
         
     | 
| 
       188 
192 
     | 
    
         
             
                  when "vertica"
         
     | 
| 
       189 
     | 
    
         
            -
                    options  
     | 
| 
       190 
     | 
    
         
            -
                      :filepath => metadata.destination_filepath(tmp_dir), :source_schema => exp.source_schema, :export_id => metadata.export_id}
         
     | 
| 
       191 
     | 
    
         
            -
                    options[:destination_schema] = exp.destination_schema
         
     | 
| 
       192 
     | 
    
         
            -
                    Kernel.p "===== LOAD TO VERTICA ====="
         
     | 
| 
       193 
     | 
    
         
            -
                    Kernel.p options
         
     | 
| 
       194 
     | 
    
         
            -
                    Myreplicator::VerticaLoader.load options
         
     | 
| 
      
 193 
     | 
    
         
            +
                    Loader.load_to_vertica options, metadata, exp
         
     | 
| 
       195 
194 
     | 
    
         
             
                  when "mysql"
         
     | 
| 
       196 
195 
     | 
    
         
             
                    cmd = ImportSql.load_data_infile(options)
         
     | 
| 
       197 
196 
     | 
    
         
             
                    puts cmd
         
     | 
| 
         @@ -204,6 +203,25 @@ module Myreplicator 
     | 
|
| 
       204 
203 
     | 
    
         
             
                  end #case  
         
     | 
| 
       205 
204 
     | 
    
         
             
                end
         
     | 
| 
       206 
205 
     | 
    
         | 
| 
      
 206 
     | 
    
         
            +
                ##
         
     | 
| 
      
 207 
     | 
    
         
            +
                # Load to Vertica
         
     | 
| 
      
 208 
     | 
    
         
            +
                ##
         
     | 
| 
      
 209 
     | 
    
         
            +
                def self.load_to_vertica options, metadata, exp
         
     | 
| 
      
 210 
     | 
    
         
            +
                  options = {:table_name => exp.table_name, 
         
     | 
| 
      
 211 
     | 
    
         
            +
                    :db => ActiveRecord::Base.configurations["vertica"]["database"],
         
     | 
| 
      
 212 
     | 
    
         
            +
                    :filepath => metadata.destination_filepath(tmp_dir), 
         
     | 
| 
      
 213 
     | 
    
         
            +
                    :source_schema => exp.source_schema, :export_id => metadata.export_id,
         
     | 
| 
      
 214 
     | 
    
         
            +
                    :metadata => metadata
         
     | 
| 
      
 215 
     | 
    
         
            +
                  }
         
     | 
| 
      
 216 
     | 
    
         
            +
                  
         
     | 
| 
      
 217 
     | 
    
         
            +
                  options[:destination_schema] = exp.destination_schema
         
     | 
| 
      
 218 
     | 
    
         
            +
                  
         
     | 
| 
      
 219 
     | 
    
         
            +
                  result = Myreplicator::VerticaLoader.load options
         
     | 
| 
      
 220 
     | 
    
         
            +
                  
         
     | 
| 
      
 221 
     | 
    
         
            +
                  ##TO DO: Handle unsuccessful vertica loads here
         
     | 
| 
      
 222 
     | 
    
         
            +
             
     | 
| 
      
 223 
     | 
    
         
            +
                end
         
     | 
| 
      
 224 
     | 
    
         
            +
             
     | 
| 
       207 
225 
     | 
    
         
             
                ##
         
     | 
| 
       208 
226 
     | 
    
         
             
                # Returns true if the transfer of the file
         
     | 
| 
       209 
227 
     | 
    
         
             
                # being loaded is completed
         
     | 
| 
         @@ -222,7 +240,7 @@ module Myreplicator 
     | 
|
| 
       222 
240 
     | 
    
         
             
                ##
         
     | 
| 
       223 
241 
     | 
    
         
             
                def self.cleanup metadata
         
     | 
| 
       224 
242 
     | 
    
         
             
                  puts "Cleaning up..."
         
     | 
| 
       225 
     | 
    
         
            -
                  FileUtils.rm  
     | 
| 
      
 243 
     | 
    
         
            +
                  FileUtils.rm metadata.metadata_filepath(tmp_dir) # json file
         
     | 
| 
       226 
244 
     | 
    
         
             
                  FileUtils.rm metadata.destination_filepath(tmp_dir) # dump file
         
     | 
| 
       227 
245 
     | 
    
         
             
                end
         
     | 
| 
       228 
246 
     | 
    
         | 
| 
         @@ -259,8 +277,27 @@ module Myreplicator 
     | 
|
| 
       259 
277 
     | 
    
         
             
                  return files
         
     | 
| 
       260 
278 
     | 
    
         
             
                end
         
     | 
| 
       261 
279 
     | 
    
         | 
| 
      
 280 
     | 
    
         
            +
                ##
         
     | 
| 
      
 281 
     | 
    
         
            +
                # Clears files that are older than the passed metadata file.
         
     | 
| 
      
 282 
     | 
    
         
            +
                # Note: This methoded is provided to ensure no old incremental files
         
     | 
| 
      
 283 
     | 
    
         
            +
                # ever get loaded after the schema change algorithm has been applied 
         
     | 
| 
      
 284 
     | 
    
         
            +
                ##
         
     | 
| 
      
 285 
     | 
    
         
            +
                def self.clear_older_files metadata
         
     | 
| 
      
 286 
     | 
    
         
            +
                  files = Loader.metadata_files
         
     | 
| 
      
 287 
     | 
    
         
            +
                  Kernel.p "===== clear old files ====="
         
     | 
| 
      
 288 
     | 
    
         
            +
                  Kernel.p metadata
         
     | 
| 
      
 289 
     | 
    
         
            +
                  Kernel.p files
         
     | 
| 
      
 290 
     | 
    
         
            +
                  max_date = DateTime.strptime metadata.export_time
         
     | 
| 
      
 291 
     | 
    
         
            +
                  files.each do |m|
         
     | 
| 
      
 292 
     | 
    
         
            +
                    if metadata.export_id == m.export_id
         
     | 
| 
      
 293 
     | 
    
         
            +
                      if max_date > DateTime.strptime(m.export_time)
         
     | 
| 
      
 294 
     | 
    
         
            +
                        Loader.cleanup m if metadata.filepath != m.filepath
         
     | 
| 
      
 295 
     | 
    
         
            +
                      end 
         
     | 
| 
      
 296 
     | 
    
         
            +
                    end
         
     | 
| 
      
 297 
     | 
    
         
            +
                  end     
         
     | 
| 
      
 298 
     | 
    
         
            +
                end
         
     | 
| 
      
 299 
     | 
    
         
            +
             
     | 
| 
       262 
300 
     | 
    
         
             
                def self.mysql_table_definition options
         
     | 
| 
       263 
     | 
    
         
            -
                  Kernel.p options
         
     | 
| 
       264 
301 
     | 
    
         
             
                  sql = "SELECT table_schema, table_name, column_name, is_nullable, data_type, column_type, column_key "
         
     | 
| 
       265 
302 
     | 
    
         
             
                  sql += "FROM INFORMATION_SCHEMA.COLUMNS where table_name = '#{options[:table]}' "
         
     | 
| 
       266 
303 
     | 
    
         
             
                  sql += "and table_schema = '#{options[:source_schema]}';"
         
     | 
| 
         @@ -4,6 +4,8 @@ module Myreplicator 
     | 
|
| 
       4 
4 
     | 
    
         | 
| 
       5 
5 
     | 
    
         
             
                  def create_table *args
         
     | 
| 
       6 
6 
     | 
    
         
             
                    options = args.extract_options!
         
     | 
| 
      
 7 
     | 
    
         
            +
                    Kernel.p "===== OPTION ====="
         
     | 
| 
      
 8 
     | 
    
         
            +
                          puts options
         
     | 
| 
       7 
9 
     | 
    
         
             
                    columns = []
         
     | 
| 
       8 
10 
     | 
    
         
             
                    options[:mysql_schema].each(:as => :hash) do |row|
         
     | 
| 
       9 
11 
     | 
    
         
             
                      columns << row
         
     | 
| 
         @@ -32,124 +34,124 @@ module Myreplicator 
     | 
|
| 
       32 
34 
     | 
    
         
             
                  ##
         
     | 
| 
       33 
35 
     | 
    
         
             
                  # rasing a concern: using the same schema or the tmp schema for the tmp table? Vertica doesn't lock the schema
         
     | 
| 
       34 
36 
     | 
    
         
             
                  def apply_schema_change options, temp_table
         
     | 
| 
       35 
     | 
    
         
            -
                     
     | 
| 
       36 
     | 
    
         
            -
             
     | 
| 
       37 
     | 
    
         
            -
             
     | 
| 
       38 
     | 
    
         
            -
             
     | 
| 
       39 
     | 
    
         
            -
             
     | 
| 
       40 
     | 
    
         
            -
             
     | 
| 
       41 
     | 
    
         
            -
             
     | 
| 
      
 37 
     | 
    
         
            +
                    Kernel.p "+++++++++++++++++ options "
         
     | 
| 
      
 38 
     | 
    
         
            +
                    puts options
         
     | 
| 
      
 39 
     | 
    
         
            +
                    VerticaLoader.create_table({:mysql_schema => options[:mysql_schema],
         
     | 
| 
      
 40 
     | 
    
         
            +
                                                 :vertica_db => options[:vertica_db], 
         
     | 
| 
      
 41 
     | 
    
         
            +
                                                 :vertica_schema => options[:vertica_schema],
         
     | 
| 
      
 42 
     | 
    
         
            +
                                                 :table => temp_table,
         
     | 
| 
      
 43 
     | 
    
         
            +
                                                 :mysql_table => options[:table]})
         
     | 
| 
       42 
44 
     | 
    
         | 
| 
       43 
     | 
    
         
            -
                  def full_load options, temp_table
         
     | 
| 
       44 
45 
     | 
    
         
             
                    export_id = options[:export_id]
         
     | 
| 
       45 
46 
     | 
    
         
             
                    new_options = prepare_options options
         
     | 
| 
       46 
     | 
    
         
            -
                     
     | 
| 
       47 
     | 
    
         
            -
             
     | 
| 
       48 
     | 
    
         
            -
             
     | 
| 
       49 
     | 
    
         
            -
             
     | 
| 
       50 
     | 
    
         
            -
             
     | 
| 
       51 
     | 
    
         
            -
             
     | 
| 
       52 
     | 
    
         
            -
             
     | 
| 
       53 
     | 
    
         
            -
             
     | 
| 
       54 
     | 
    
         
            -
             
     | 
| 
       55 
     | 
    
         
            -
             
     | 
| 
       56 
     | 
    
         
            -
             
     | 
| 
       57 
     | 
    
         
            -
             
     | 
| 
       58 
     | 
    
         
            -
             
     | 
| 
       59 
     | 
    
         
            -
             
     | 
| 
       60 
     | 
    
         
            -
             
     | 
| 
       61 
     | 
    
         
            -
             
     | 
| 
       62 
     | 
    
         
            -
                      FileUtils.rm file
         
     | 
| 
       63 
     | 
    
         
            -
                      FileUtils.rm "#{file}.json"
         
     | 
| 
       64 
     | 
    
         
            -
                      sql = "DROP TABLE #{options[:vertica_db]}.#{options[:vertica_schema]}.#{options[:table]} CASCADE;"
         
     | 
| 
       65 
     | 
    
         
            -
                      VerticaDb::Base.connection.execute sql
         
     | 
| 
       66 
     | 
    
         
            -
                      #rename
         
     | 
| 
       67 
     | 
    
         
            -
                      sql = "ALTER TABLE #{options[:vertica_db]}.#{options[:vertica_schema]}.#{temp_table} RENAME TO #{options[:table]};"
         
     | 
| 
       68 
     | 
    
         
            -
                      VerticaDb::Base.connection.execute sql
         
     | 
| 
       69 
     | 
    
         
            -
                    rescue Exception => e
         
     | 
| 
       70 
     | 
    
         
            -
                      raise e.message 
         
     | 
| 
       71 
     | 
    
         
            -
                    ensure
         
     | 
| 
       72 
     | 
    
         
            -
                      
         
     | 
| 
       73 
     | 
    
         
            -
                    end
         
     | 
| 
      
 47 
     | 
    
         
            +
                    new_options[:file] = options[:filepath]
         
     | 
| 
      
 48 
     | 
    
         
            +
                    new_options[:table] = temp_table
         
     | 
| 
      
 49 
     | 
    
         
            +
                    new_options[:schema] = options[:vertica_schema]
         
     | 
| 
      
 50 
     | 
    
         
            +
                    
         
     | 
| 
      
 51 
     | 
    
         
            +
                     
         
     | 
| 
      
 52 
     | 
    
         
            +
                    vertica_copy new_options
         
     | 
| 
      
 53 
     | 
    
         
            +
                    Kernel.p "+++++++++++++++++ new_options "
         
     | 
| 
      
 54 
     | 
    
         
            +
                    puts new_options
         
     | 
| 
      
 55 
     | 
    
         
            +
                    puts options
         
     | 
| 
      
 56 
     | 
    
         
            +
                    
         
     | 
| 
      
 57 
     | 
    
         
            +
                    sql = "DROP TABLE IF EXISTS #{options[:vertica_db]}.#{options[:vertica_schema]}.#{options[:table]} CASCADE;"
         
     | 
| 
      
 58 
     | 
    
         
            +
                    VerticaDb::Base.connection.execute sql
         
     | 
| 
      
 59 
     | 
    
         
            +
                    #rename
         
     | 
| 
      
 60 
     | 
    
         
            +
                    sql = "ALTER TABLE #{options[:vertica_db]}.#{options[:vertica_schema]}.#{temp_table} RENAME TO #{options[:table]};"
         
     | 
| 
      
 61 
     | 
    
         
            +
                    VerticaDb::Base.connection.execute sql
         
     | 
| 
      
 62 
     | 
    
         
            +
             
     | 
| 
       74 
63 
     | 
    
         
             
                  end
         
     | 
| 
      
 64 
     | 
    
         
            +
                  
         
     | 
| 
      
 65 
     | 
    
         
            +
                  def create_temp_table *args
         
     | 
| 
      
 66 
     | 
    
         
            +
                    options = args.extract_options!
         
     | 
| 
      
 67 
     | 
    
         
            +
                    temp_table_name = "temp_" + options[:table] + DateTime.now.strftime('%Y%m%d_%H%M%S').to_s
         
     | 
| 
       75 
68 
     | 
    
         | 
| 
       76 
     | 
    
         
            -
             
     | 
| 
       77 
     | 
    
         
            -
             
     | 
| 
       78 
     | 
    
         
            -
             
     | 
| 
       79 
     | 
    
         
            -
             
     | 
| 
       80 
     | 
    
         
            -
             
     | 
| 
       81 
     | 
    
         
            -
             
     | 
| 
       82 
     | 
    
         
            -
                   
     | 
| 
       83 
     | 
    
         
            -
             
     | 
| 
       84 
     | 
    
         
            -
                  #     :vertica_table => table,
         
     | 
| 
       85 
     | 
    
         
            -
                  #     :vertica_schema => db,
         
     | 
| 
       86 
     | 
    
         
            -
                  #     :table => table,
         
     | 
| 
       87 
     | 
    
         
            -
                  #     :db => db)
         
     | 
| 
       88 
     | 
    
         
            -
                  #     sqls["#{table}"] = sql
         
     | 
| 
       89 
     | 
    
         
            -
                  #     VerticaDb::Base.connection.execute sql
         
     | 
| 
       90 
     | 
    
         
            -
                  #   end
         
     | 
| 
       91 
     | 
    
         
            -
                  # end
         
     | 
| 
       92 
     | 
    
         
            -
                
         
     | 
| 
      
 69 
     | 
    
         
            +
                    VerticaLoader.create_table({:mysql_schema => options[:mysql_schema],
         
     | 
| 
      
 70 
     | 
    
         
            +
                                                 :vertica_db => options[:vertica_db], 
         
     | 
| 
      
 71 
     | 
    
         
            +
                                                 :vertica_schema => options[:vertica_schema],
         
     | 
| 
      
 72 
     | 
    
         
            +
                                                 :table => temp_table_name,
         
     | 
| 
      
 73 
     | 
    
         
            +
                                                 :mysql_table => options[:table]})
         
     | 
| 
      
 74 
     | 
    
         
            +
                    return temp_table_name
         
     | 
| 
      
 75 
     | 
    
         
            +
                  end
         
     | 
| 
      
 76 
     | 
    
         
            +
               
         
     | 
| 
       93 
77 
     | 
    
         
             
                  def prepare_options *args
         
     | 
| 
       94 
     | 
    
         
            -
                    options = args.extract_options 
     | 
| 
       95 
     | 
    
         
            -
                     
     | 
| 
       96 
     | 
    
         
            -
                    
         
     | 
| 
       97 
     | 
    
         
            -
                     
     | 
| 
       98 
     | 
    
         
            -
                     
     | 
| 
       99 
     | 
    
         
            -
             
     | 
| 
       100 
     | 
    
         
            -
             
     | 
| 
       101 
     | 
    
         
            -
             
     | 
| 
       102 
     | 
    
         
            -
             
     | 
| 
       103 
     | 
    
         
            -
             
     | 
| 
       104 
     | 
    
         
            -
             
     | 
| 
       105 
     | 
    
         
            -
             
     | 
| 
       106 
     | 
    
         
            -
             
     | 
| 
       107 
     | 
    
         
            -
             
     | 
| 
       108 
     | 
    
         
            -
             
     | 
| 
       109 
     | 
    
         
            -
             
     | 
| 
      
 78 
     | 
    
         
            +
                    options = args.extract_options!.clone
         
     | 
| 
      
 79 
     | 
    
         
            +
                    Kernel.p "===== OPTION  [options[:db]] ====="
         
     | 
| 
      
 80 
     | 
    
         
            +
                    puts options
         
     | 
| 
      
 81 
     | 
    
         
            +
                    # How not to hard code the vertica connection config ?
         
     | 
| 
      
 82 
     | 
    
         
            +
                    vertica_options = ActiveRecord::Base.configurations["vertica"]
         
     | 
| 
      
 83 
     | 
    
         
            +
             
     | 
| 
      
 84 
     | 
    
         
            +
                    options.reverse_merge!(:host => vertica_options["host"],
         
     | 
| 
      
 85 
     | 
    
         
            +
                                          :user => vertica_options["username"],
         
     | 
| 
      
 86 
     | 
    
         
            +
                                          :pass => vertica_options["password"],
         
     | 
| 
      
 87 
     | 
    
         
            +
                                          :db   => vertica_options["database"],
         
     | 
| 
      
 88 
     | 
    
         
            +
                                          :schema => options[:destination_schema],
         
     | 
| 
      
 89 
     | 
    
         
            +
                                          :table => options[:table_name],
         
     | 
| 
      
 90 
     | 
    
         
            +
                                          :file => options[:filepath],
         
     | 
| 
      
 91 
     | 
    
         
            +
                                          :delimiter => "\\0",
         
     | 
| 
      
 92 
     | 
    
         
            +
                                          :null_value => "NULL",
         
     | 
| 
      
 93 
     | 
    
         
            +
                                          :enclosed => "")
         
     | 
| 
      
 94 
     | 
    
         
            +
                  # working now but should fix this 
         
     | 
| 
       110 
95 
     | 
    
         
             
                    if !vertica_options["vsql"].blank?
         
     | 
| 
       111 
     | 
    
         
            -
                       
     | 
| 
       112 
     | 
    
         
            -
                        :vsql => vertica_options["vsql"]
         
     | 
| 
       113 
     | 
    
         
            -
                        )
         
     | 
| 
      
 96 
     | 
    
         
            +
                      options.reverse_merge!(:vsql => vertica_options["vsql"])
         
     | 
| 
       114 
97 
     | 
    
         
             
                    else
         
     | 
| 
       115 
     | 
    
         
            -
                       
     | 
| 
       116 
     | 
    
         
            -
                        :vsql => "/opt/vertica/bin/vsql"
         
     | 
| 
       117 
     | 
    
         
            -
                      )
         
     | 
| 
      
 98 
     | 
    
         
            +
                      options.reverse_merge!(:vsql => "/opt/vertica/bin/vsql")
         
     | 
| 
       118 
99 
     | 
    
         
             
                    end
         
     | 
| 
       119 
100 
     | 
    
         | 
| 
       120 
     | 
    
         
            -
                    return  
     | 
| 
      
 101 
     | 
    
         
            +
                    return options  
         
     | 
| 
       121 
102 
     | 
    
         
             
                  end
         
     | 
| 
       122 
103 
     | 
    
         | 
| 
       123 
104 
     | 
    
         
             
                  # Loader::VerticaLoader.load({:schema => "king", :table => "category_overview_data", :file => "tmp/vertica/category_overview_data.tsv", :null_value => "NULL"})
         
     | 
| 
      
 105 
     | 
    
         
            +
                  # check for export_type!
         
     | 
| 
       124 
106 
     | 
    
         
             
                  def load *args
         
     | 
| 
       125 
107 
     | 
    
         
             
                    options = args.extract_options!
         
     | 
| 
       126 
     | 
    
         
            -
                     
     | 
| 
      
 108 
     | 
    
         
            +
                    metadata = options[:metadata]
         
     | 
| 
      
 109 
     | 
    
         
            +
                    Kernel.p "===== metadata ====="
         
     | 
| 
      
 110 
     | 
    
         
            +
                    Kernel.p metadata
         
     | 
| 
      
 111 
     | 
    
         
            +
                    Kernel.p options
         
     | 
| 
      
 112 
     | 
    
         
            +
                    #options = {:table => "app_csvs", :destination_schema => "public", :source_schema => "okl_dev"}
         
     | 
| 
      
 113 
     | 
    
         
            +
                    #options = {:table => "actucast_appeal", :destination_schema => "public", :source_schema => "raw_sources"}
         
     | 
| 
       127 
114 
     | 
    
         
             
                    schema_check = Myreplicator::MysqlExporter.schema_changed?(:table => options[:table_name], 
         
     | 
| 
       128 
115 
     | 
    
         
             
                                                                 :destination_schema => options[:destination_schema], 
         
     | 
| 
       129 
116 
     | 
    
         
             
                                                                 :source_schema => options[:source_schema])
         
     | 
| 
       130 
     | 
    
         
            -
                    
         
     | 
| 
      
 117 
     | 
    
         
            +
                    Kernel.p "===== schema_check ====="
         
     | 
| 
      
 118 
     | 
    
         
            +
                    Kernel.p schema_check
         
     | 
| 
      
 119 
     | 
    
         
            +
                    Kernel.p schema_check[:mysql_schema]
         
     | 
| 
       131 
120 
     | 
    
         
             
                    #create a temp table
         
     | 
| 
       132 
121 
     | 
    
         
             
                    temp_table = "temp_" + options[:table_name] + DateTime.now.strftime('%Y%m%d_%H%M%S').to_s
         
     | 
| 
       133 
122 
     | 
    
         
             
                    ops = {:mysql_schema => schema_check[:mysql_schema],
         
     | 
| 
       134 
     | 
    
         
            -
             
     | 
| 
       135 
     | 
    
         
            -
             
     | 
| 
       136 
     | 
    
         
            -
             
     | 
| 
       137 
     | 
    
         
            -
             
     | 
| 
      
 123 
     | 
    
         
            +
                      :vertica_db => options[:db],
         
     | 
| 
      
 124 
     | 
    
         
            +
                      :vertica_schema => options[:destination_schema],
         
     | 
| 
      
 125 
     | 
    
         
            +
                      :table => options[:table_name],
         
     | 
| 
      
 126 
     | 
    
         
            +
                      :export_id => options[:export_id],
         
     | 
| 
      
 127 
     | 
    
         
            +
                      :filepath => options[:filepath]
         
     | 
| 
       138 
128 
     | 
    
         
             
                    }
         
     | 
| 
       139 
     | 
    
         
            -
                     
     | 
| 
       140 
     | 
    
         
            -
             
     | 
| 
       141 
     | 
    
         
            -
             
     | 
| 
      
 129 
     | 
    
         
            +
                    Kernel.p "===== schema_check[:mysql_schema] ====="
         
     | 
| 
      
 130 
     | 
    
         
            +
                    Kernel.p ops
         
     | 
| 
      
 131 
     | 
    
         
            +
                    if schema_check[:new]
         
     | 
| 
      
 132 
     | 
    
         
            +
                      create_table(ops)
         
     | 
| 
      
 133 
     | 
    
         
            +
                      #LOAD DATA IN
         
     | 
| 
      
 134 
     | 
    
         
            +
                      vertica_copy options
         
     | 
| 
      
 135 
     | 
    
         
            +
                    elsif schema_check[:changed]
         
     | 
| 
      
 136 
     | 
    
         
            +
                      if metadata.export_type == 'initial'
         
     | 
| 
      
 137 
     | 
    
         
            +
                        Loader.clear_older_files metadata  # clear old incremental files
         
     | 
| 
       142 
138 
     | 
    
         
             
                        apply_schema_change(ops, temp_table)
         
     | 
| 
       143 
     | 
    
         
            -
                        #vertica_copy options
         
     | 
| 
       144 
     | 
    
         
            -
                        full_load(ops, temp_table) 
         
     | 
| 
       145 
     | 
    
         
            -
                      elsif schema_check[:changed]
         
     | 
| 
       146 
     | 
    
         
            -
                        apply_schema_change(ops, temp_table)
         
     | 
| 
       147 
     | 
    
         
            -
                        full_load(ops, temp_table)
         
     | 
| 
       148 
139 
     | 
    
         
             
                      else
         
     | 
| 
       149 
     | 
    
         
            -
                         
     | 
| 
      
 140 
     | 
    
         
            +
                        Loader.cleanup metadata #Remove incremental file
         
     | 
| 
       150 
141 
     | 
    
         
             
                      end
         
     | 
| 
       151 
     | 
    
         
            -
                     
     | 
| 
       152 
     | 
    
         
            -
                       
     | 
| 
      
 142 
     | 
    
         
            +
                    else
         
     | 
| 
      
 143 
     | 
    
         
            +
                      temp_table = create_temp_table ops
         
     | 
| 
      
 144 
     | 
    
         
            +
                      options[:table] = temp_table
         
     | 
| 
      
 145 
     | 
    
         
            +
                      Kernel.p "===== COPY TO TEMP TABLE #{temp_table} ====="
         
     | 
| 
      
 146 
     | 
    
         
            +
                      vertica_copy options
         
     | 
| 
      
 147 
     | 
    
         
            +
                      options.reverse_merge!(:temp_table => "#{temp_table}")
         
     | 
| 
      
 148 
     | 
    
         
            +
                      options[:table] = options[:table_name]
         
     | 
| 
      
 149 
     | 
    
         
            +
                      Kernel.p "===== MERGE ====="
         
     | 
| 
      
 150 
     | 
    
         
            +
                      vertica_merge options
         
     | 
| 
      
 151 
     | 
    
         
            +
                      #drop the temp table
         
     | 
| 
      
 152 
     | 
    
         
            +
                      Kernel.p "===== DROP TEMP TABLE ====="
         
     | 
| 
      
 153 
     | 
    
         
            +
                      sql = "DROP TABLE IF EXISTS #{options[:db]}.#{options[:destination_schema]}.#{temp_table} CASCADE;"
         
     | 
| 
      
 154 
     | 
    
         
            +
                      VerticaDb::Base.connection.execute sql
         
     | 
| 
       153 
155 
     | 
    
         
             
                    end
         
     | 
| 
       154 
156 
     | 
    
         
             
                  end
         
     | 
| 
       155 
157 
     | 
    
         | 
| 
         @@ -161,17 +163,16 @@ module Myreplicator 
     | 
|
| 
       161 
163 
     | 
    
         
             
                      raise "No input file"
         
     | 
| 
       162 
164 
     | 
    
         
             
                    end
         
     | 
| 
       163 
165 
     | 
    
         | 
| 
       164 
     | 
    
         
            -
                     
     | 
| 
       165 
     | 
    
         
            -
             
     | 
| 
       166 
     | 
    
         
            -
             
     | 
| 
       167 
     | 
    
         
            -
             
     | 
| 
       168 
     | 
    
         
            -
             
     | 
| 
       169 
     | 
    
         
            -
                     
     | 
| 
       170 
     | 
    
         
            -
             
     | 
| 
       171 
     | 
    
         
            -
                    end
         
     | 
| 
      
 166 
     | 
    
         
            +
                    process_file(:file => prepared_options[:file], 
         
     | 
| 
      
 167 
     | 
    
         
            +
                                 :list_of_nulls => list_of_nulls,
         
     | 
| 
      
 168 
     | 
    
         
            +
                                 :null_value => prepared_options[:null_value])
         
     | 
| 
      
 169 
     | 
    
         
            +
             
     | 
| 
      
 170 
     | 
    
         
            +
                    cmd = get_vsql_copy_command(prepared_options)
         
     | 
| 
      
 171 
     | 
    
         
            +
                    puts cmd
         
     | 
| 
      
 172 
     | 
    
         
            +
                    system(cmd)
         
     | 
| 
       172 
173 
     | 
    
         
             
                  end
         
     | 
| 
       173 
174 
     | 
    
         | 
| 
       174 
     | 
    
         
            -
                  def  
     | 
| 
      
 175 
     | 
    
         
            +
                  def get_vsql_copy_command prepared_options
         
     | 
| 
       175 
176 
     | 
    
         
             
                    file_extension = prepared_options[:file].split('.').last
         
     | 
| 
       176 
177 
     | 
    
         
             
                    file_handler = ""
         
     | 
| 
       177 
178 
     | 
    
         
             
                    file_handler = "GZIP" if file_extension == "gz" 
         
     | 
| 
         @@ -229,6 +230,145 @@ module Myreplicator 
     | 
|
| 
       229 
230 
     | 
    
         
             
                    system(cmd2)
         
     | 
| 
       230 
231 
     | 
    
         
             
                  end
         
     | 
| 
       231 
232 
     | 
    
         | 
| 
      
 233 
     | 
    
         
            +
                  def get_mysql_keys mysql_schema_simple_form
         
     | 
| 
      
 234 
     | 
    
         
            +
                    result = []
         
     | 
| 
      
 235 
     | 
    
         
            +
                    mysql_schema_simple_form.each do |col|
         
     | 
| 
      
 236 
     | 
    
         
            +
                      if col["column_key"] == "PRI"
         
     | 
| 
      
 237 
     | 
    
         
            +
                        result << col["column_name"]
         
     | 
| 
      
 238 
     | 
    
         
            +
                      end
         
     | 
| 
      
 239 
     | 
    
         
            +
                    end
         
     | 
| 
      
 240 
     | 
    
         
            +
                    return result
         
     | 
| 
      
 241 
     | 
    
         
            +
                  end
         
     | 
| 
      
 242 
     | 
    
         
            +
                  
         
     | 
| 
      
 243 
     | 
    
         
            +
                  def get_mysql_none_keys mysql_schema_simple_form
         
     | 
| 
      
 244 
     | 
    
         
            +
                    result = []
         
     | 
| 
      
 245 
     | 
    
         
            +
                    mysql_schema_simple_form.each do |col|
         
     | 
| 
      
 246 
     | 
    
         
            +
                      if col["column_key"].blank?
         
     | 
| 
      
 247 
     | 
    
         
            +
                        result << col["column_name"]
         
     | 
| 
      
 248 
     | 
    
         
            +
                      end
         
     | 
| 
      
 249 
     | 
    
         
            +
                    end
         
     | 
| 
      
 250 
     | 
    
         
            +
                    return result
         
     | 
| 
      
 251 
     | 
    
         
            +
                  end
         
     | 
| 
      
 252 
     | 
    
         
            +
                  
         
     | 
| 
      
 253 
     | 
    
         
            +
                  def get_mysql_inserted_columns mysql_schema_simple_form
         
     | 
| 
      
 254 
     | 
    
         
            +
                    result = []
         
     | 
| 
      
 255 
     | 
    
         
            +
                    mysql_schema_simple_form.each do |col|
         
     | 
| 
      
 256 
     | 
    
         
            +
                      result << col["column_name"]
         
     | 
| 
      
 257 
     | 
    
         
            +
                    end
         
     | 
| 
      
 258 
     | 
    
         
            +
                    return result
         
     | 
| 
      
 259 
     | 
    
         
            +
                  end
         
     | 
| 
      
 260 
     | 
    
         
            +
                  
         
     | 
| 
      
 261 
     | 
    
         
            +
                  def get_vsql_merge_command options, keys, none_keys, inserted_columns
         
     | 
| 
      
 262 
     | 
    
         
            +
                    Kernel.p "===== Merge Options ====="
         
     | 
| 
      
 263 
     | 
    
         
            +
                    Kernel.p options
         
     | 
| 
      
 264 
     | 
    
         
            +
                    a = prepare_options options
         
     | 
| 
      
 265 
     | 
    
         
            +
                    Kernel.p a
         
     | 
| 
      
 266 
     | 
    
         
            +
                    prepared_options = options
         
     | 
| 
      
 267 
     | 
    
         
            +
                    sql = "MERGE INTO "
         
     | 
| 
      
 268 
     | 
    
         
            +
                    sql+= "#{prepared_options[:db]}.#{prepared_options[:schema]}.#{prepared_options[:table]} target "
         
     | 
| 
      
 269 
     | 
    
         
            +
                    sql+= "USING #{prepared_options[:db]}.#{prepared_options[:schema]}.#{prepared_options[:temp_table]} source "
         
     | 
| 
      
 270 
     | 
    
         
            +
                    sql+= "ON "
         
     | 
| 
      
 271 
     | 
    
         
            +
                    count = 0
         
     | 
| 
      
 272 
     | 
    
         
            +
                    keys.each do |k|
         
     | 
| 
      
 273 
     | 
    
         
            +
                      if count < 1 
         
     | 
| 
      
 274 
     | 
    
         
            +
                        sql += "source.#{k} = target.#{k} "
         
     | 
| 
      
 275 
     | 
    
         
            +
                      else
         
     | 
| 
      
 276 
     | 
    
         
            +
                        sql += "AND source.#{k} = target.#{k} "
         
     | 
| 
      
 277 
     | 
    
         
            +
                      end
         
     | 
| 
      
 278 
     | 
    
         
            +
                      count += 1
         
     | 
| 
      
 279 
     | 
    
         
            +
                    end
         
     | 
| 
      
 280 
     | 
    
         
            +
                    sql+= "WHEN MATCHED THEN "
         
     | 
| 
      
 281 
     | 
    
         
            +
                    sql+= "UPDATE SET "
         
     | 
| 
      
 282 
     | 
    
         
            +
                    count = 1
         
     | 
| 
      
 283 
     | 
    
         
            +
                    none_keys.each do |nk|
         
     | 
| 
      
 284 
     | 
    
         
            +
                      if count < none_keys.size
         
     | 
| 
      
 285 
     | 
    
         
            +
                        sql+= "#{nk} = source.#{nk}, "
         
     | 
| 
      
 286 
     | 
    
         
            +
                      else
         
     | 
| 
      
 287 
     | 
    
         
            +
                        sql+= "#{nk} = source.#{nk} "
         
     | 
| 
      
 288 
     | 
    
         
            +
                      end
         
     | 
| 
      
 289 
     | 
    
         
            +
                      count += 1
         
     | 
| 
      
 290 
     | 
    
         
            +
                    end
         
     | 
| 
      
 291 
     | 
    
         
            +
                    sql+= "WHEN NOT MATCHED THEN "
         
     | 
| 
      
 292 
     | 
    
         
            +
                    sql+= "INSERT "
         
     | 
| 
      
 293 
     | 
    
         
            +
                    #count = 1
         
     | 
| 
      
 294 
     | 
    
         
            +
                    #inserted_columns.each do |col|
         
     | 
| 
      
 295 
     | 
    
         
            +
                    #  if count < inserted_columns.size
         
     | 
| 
      
 296 
     | 
    
         
            +
                    #    sql+= "#{col}, "
         
     | 
| 
      
 297 
     | 
    
         
            +
                    #  else
         
     | 
| 
      
 298 
     | 
    
         
            +
                    #    sql+= "#{col} "
         
     | 
| 
      
 299 
     | 
    
         
            +
                    #  end
         
     | 
| 
      
 300 
     | 
    
         
            +
                    #  count += 1
         
     | 
| 
      
 301 
     | 
    
         
            +
                    #end
         
     | 
| 
      
 302 
     | 
    
         
            +
                    count = 1
         
     | 
| 
      
 303 
     | 
    
         
            +
                    sql+= " VALUES ("
         
     | 
| 
      
 304 
     | 
    
         
            +
                    inserted_columns.each do |col|
         
     | 
| 
      
 305 
     | 
    
         
            +
                      if count < inserted_columns.size
         
     | 
| 
      
 306 
     | 
    
         
            +
                        sql+= "source.#{col}, "
         
     | 
| 
      
 307 
     | 
    
         
            +
                      else
         
     | 
| 
      
 308 
     | 
    
         
            +
                        sql+= "source.#{col}) "
         
     | 
| 
      
 309 
     | 
    
         
            +
                      end
         
     | 
| 
      
 310 
     | 
    
         
            +
                      count += 1
         
     | 
| 
      
 311 
     | 
    
         
            +
                    end  
         
     | 
| 
      
 312 
     | 
    
         
            +
                    sql+= ";"  
         
     | 
| 
      
 313 
     | 
    
         
            +
                    cmd = "#{prepared_options[:vsql]} -h #{prepared_options[:host]} -U #{prepared_options[:user]} -w #{prepared_options[:pass]} -d #{prepared_options[:db]} -c \"#{sql}\""
         
     | 
| 
      
 314 
     | 
    
         
            +
                    return cmd    
         
     | 
| 
      
 315 
     | 
    
         
            +
                  end
         
     | 
| 
      
 316 
     | 
    
         
            +
                    
         
     | 
| 
      
 317 
     | 
    
         
            +
                  def vertica_merge *args
         
     | 
| 
      
 318 
     | 
    
         
            +
                    options = args.extract_options!
         
     | 
| 
      
 319 
     | 
    
         
            +
                    metadata = options[:metadata]
         
     | 
| 
      
 320 
     | 
    
         
            +
                    Kernel.p "===== MERGE metadata ====="
         
     | 
| 
      
 321 
     | 
    
         
            +
                    Kernel.p metadata
         
     | 
| 
      
 322 
     | 
    
         
            +
                    ops = {:table => options[:table_name], 
         
     | 
| 
      
 323 
     | 
    
         
            +
                    :destination_schema => options[:destination_schema], 
         
     | 
| 
      
 324 
     | 
    
         
            +
                    :source_schema => options[:source_schema]}
         
     | 
| 
      
 325 
     | 
    
         
            +
                    mysql_schema = Loader.mysql_table_definition(options)
         
     | 
| 
      
 326 
     | 
    
         
            +
                    vertica_schema = VerticaLoader.destination_table_vertica(options)
         
     | 
| 
      
 327 
     | 
    
         
            +
                    mysql_schema_simple_form = MysqlExporter.get_mysql_schema_rows mysql_schema
         
     | 
| 
      
 328 
     | 
    
         
            +
                    # get the column(s) that is(are) used as the primary key
         
     | 
| 
      
 329 
     | 
    
         
            +
                    keys = get_mysql_keys mysql_schema_simple_form
         
     | 
| 
      
 330 
     | 
    
         
            +
                    # get the non key coluns 
         
     | 
| 
      
 331 
     | 
    
         
            +
                    none_keys = get_mysql_none_keys mysql_schema_simple_form
         
     | 
| 
      
 332 
     | 
    
         
            +
                    # get the column to put in the insert part
         
     | 
| 
      
 333 
     | 
    
         
            +
                    inserted_columns = get_mysql_inserted_columns mysql_schema_simple_form
         
     | 
| 
      
 334 
     | 
    
         
            +
                    #get the vsql merge command 
         
     | 
| 
      
 335 
     | 
    
         
            +
                    cmd = get_vsql_merge_command options, keys, none_keys, inserted_columns 
         
     | 
| 
      
 336 
     | 
    
         
            +
                    #execute    
         
     | 
| 
      
 337 
     | 
    
         
            +
                    puts cmd
         
     | 
| 
      
 338 
     | 
    
         
            +
                    begin
         
     | 
| 
      
 339 
     | 
    
         
            +
                      result = `#{cmd} 2>&1`
         
     | 
| 
      
 340 
     | 
    
         
            +
                      if result[0..4] == "ERROR"
         
     | 
| 
      
 341 
     | 
    
         
            +
                        Loader.cleanup metadata
         
     | 
| 
      
 342 
     | 
    
         
            +
                        sql = "DROP TABLE IF EXISTS #{options[:db]}.#{options[:destination_schema]}.#{options[:temp_table]} CASCADE;"
         
     | 
| 
      
 343 
     | 
    
         
            +
                        Kernel.p "===== DROP CMD ====="
         
     | 
| 
      
 344 
     | 
    
         
            +
                        Kernel.p sql
         
     | 
| 
      
 345 
     | 
    
         
            +
                        VerticaDb::Base.connection.execute sql
         
     | 
| 
      
 346 
     | 
    
         
            +
                        raise result
         
     | 
| 
      
 347 
     | 
    
         
            +
                      end
         
     | 
| 
      
 348 
     | 
    
         
            +
                    rescue Exception => e
         
     | 
| 
      
 349 
     | 
    
         
            +
                      raise e.message 
         
     | 
| 
      
 350 
     | 
    
         
            +
                    ensure
         
     | 
| 
      
 351 
     | 
    
         
            +
                      # place holder
         
     | 
| 
      
 352 
     | 
    
         
            +
                    end
         
     | 
| 
      
 353 
     | 
    
         
            +
                  end
         
     | 
| 
      
 354 
     | 
    
         
            +
             
     | 
| 
      
 355 
     | 
    
         
            +
                  # def create_all_tables db
         
     | 
| 
      
 356 
     | 
    
         
            +
                  #   tables = Loader::SourceDb.get_tables(db)
         
     | 
| 
      
 357 
     | 
    
         
            +
                  #   sqls = {}
         
     | 
| 
      
 358 
     | 
    
         
            +
                  #   tables.each do |table|
         
     | 
| 
      
 359 
     | 
    
         
            +
                  #     puts "Creating #{db}.#{table}"
         
     | 
| 
      
 360 
     | 
    
         
            +
                  #     sql = "DROP TABLE IF EXISTS #{db}.#{table} CASCADE;"
         
     | 
| 
      
 361 
     | 
    
         
            +
                  #     VerticaDb::Base.connection.execute sql
         
     | 
| 
      
 362 
     | 
    
         
            +
                  #     sql = Loader::VerticaLoader.create_table(:vertica_db => "bidw",
         
     | 
| 
      
 363 
     | 
    
         
            +
                  #     :vertica_table => table,
         
     | 
| 
      
 364 
     | 
    
         
            +
                  #     :vertica_schema => db,
         
     | 
| 
      
 365 
     | 
    
         
            +
                  #     :table => table,
         
     | 
| 
      
 366 
     | 
    
         
            +
                  #     :db => db)
         
     | 
| 
      
 367 
     | 
    
         
            +
                  #     sqls["#{table}"] = sql
         
     | 
| 
      
 368 
     | 
    
         
            +
                  #     VerticaDb::Base.connection.execute sql
         
     | 
| 
      
 369 
     | 
    
         
            +
                  #   end
         
     | 
| 
      
 370 
     | 
    
         
            +
                  # end
         
     | 
| 
      
 371 
     | 
    
         
            +
             
     | 
| 
       232 
372 
     | 
    
         
             
                end
         
     | 
| 
       233 
373 
     | 
    
         
             
              end
         
     | 
| 
       234 
374 
     | 
    
         
             
            end
         
     | 
    
        data/lib/myreplicator/version.rb
    CHANGED
    
    
| 
         @@ -4086,3 +4086,275 @@ Connecting to database specified by database.yml 
     | 
|
| 
       4086 
4086 
     | 
    
         
             
            Connecting to database specified by database.yml
         
     | 
| 
       4087 
4087 
     | 
    
         
             
            Connecting to database specified by database.yml
         
     | 
| 
       4088 
4088 
     | 
    
         
             
            Connecting to database specified by database.yml
         
     | 
| 
      
 4089 
     | 
    
         
            +
            Connecting to database specified by database.yml
         
     | 
| 
      
 4090 
     | 
    
         
            +
             
     | 
| 
      
 4091 
     | 
    
         
            +
             
     | 
| 
      
 4092 
     | 
    
         
            +
            Started GET "/myreplicator/exports" for 127.0.0.1 at 2013-03-08 14:24:06 -0800
         
     | 
| 
      
 4093 
     | 
    
         
            +
            Processing by Myreplicator::ExportsController#index as HTML
         
     | 
| 
      
 4094 
     | 
    
         
            +
              [1m[36m (0.3ms)[0m  [1mSELECT COUNT(*) FROM `myreplicator_exports` [0m
         
     | 
| 
      
 4095 
     | 
    
         
            +
              [1m[35mMyreplicator::Export Load (0.5ms)[0m  SELECT `myreplicator_exports`.* FROM `myreplicator_exports` ORDER BY source_schema asc LIMIT 30 OFFSET 0
         
     | 
| 
      
 4096 
     | 
    
         
            +
              Rendered /home/sasan/workspace/myreplicator/app/views/myreplicator/exports/index.html.erb within layouts/myreplicator/application (73.0ms)
         
     | 
| 
      
 4097 
     | 
    
         
            +
            Completed 200 OK in 361ms (Views: 356.6ms | ActiveRecord: 2.0ms)
         
     | 
| 
      
 4098 
     | 
    
         
            +
             
     | 
| 
      
 4099 
     | 
    
         
            +
             
     | 
| 
      
 4100 
     | 
    
         
            +
            Started GET "/assets/myreplicator/application.css?body=1" for 127.0.0.1 at 2013-03-08 14:24:07 -0800
         
     | 
| 
      
 4101 
     | 
    
         
            +
            Served asset /myreplicator/application.css - 304 Not Modified (32ms)
         
     | 
| 
      
 4102 
     | 
    
         
            +
             
     | 
| 
      
 4103 
     | 
    
         
            +
             
     | 
| 
      
 4104 
     | 
    
         
            +
            Started GET "/assets/myreplicator/chosen.css?body=1" for 127.0.0.1 at 2013-03-08 14:24:07 -0800
         
     | 
| 
      
 4105 
     | 
    
         
            +
            Served asset /myreplicator/chosen.css - 304 Not Modified (3ms)
         
     | 
| 
      
 4106 
     | 
    
         
            +
             
     | 
| 
      
 4107 
     | 
    
         
            +
             
     | 
| 
      
 4108 
     | 
    
         
            +
            Started GET "/assets/myreplicator/exports.css?body=1" for 127.0.0.1 at 2013-03-08 14:24:07 -0800
         
     | 
| 
      
 4109 
     | 
    
         
            +
            Served asset /myreplicator/exports.css - 304 Not Modified (2ms)
         
     | 
| 
      
 4110 
     | 
    
         
            +
             
     | 
| 
      
 4111 
     | 
    
         
            +
             
     | 
| 
      
 4112 
     | 
    
         
            +
            Started GET "/assets/jquery.js?body=1" for 127.0.0.1 at 2013-03-08 14:24:07 -0800
         
     | 
| 
      
 4113 
     | 
    
         
            +
            Served asset /jquery.js - 304 Not Modified (3ms)
         
     | 
| 
      
 4114 
     | 
    
         
            +
             
     | 
| 
      
 4115 
     | 
    
         
            +
             
     | 
| 
      
 4116 
     | 
    
         
            +
            Started GET "/assets/myreplicator/tipTip.css?body=1" for 127.0.0.1 at 2013-03-08 14:24:07 -0800
         
     | 
| 
      
 4117 
     | 
    
         
            +
            Served asset /myreplicator/tipTip.css - 304 Not Modified (1ms)
         
     | 
| 
      
 4118 
     | 
    
         
            +
             
     | 
| 
      
 4119 
     | 
    
         
            +
             
     | 
| 
      
 4120 
     | 
    
         
            +
            Started GET "/assets/myreplicator/select2.css?body=1" for 127.0.0.1 at 2013-03-08 14:24:07 -0800
         
     | 
| 
      
 4121 
     | 
    
         
            +
            Served asset /myreplicator/select2.css - 304 Not Modified (2ms)
         
     | 
| 
      
 4122 
     | 
    
         
            +
             
     | 
| 
      
 4123 
     | 
    
         
            +
             
     | 
| 
      
 4124 
     | 
    
         
            +
            Started GET "/assets/jquery-ui.js?body=1" for 127.0.0.1 at 2013-03-08 14:24:07 -0800
         
     | 
| 
      
 4125 
     | 
    
         
            +
            Served asset /jquery-ui.js - 304 Not Modified (3ms)
         
     | 
| 
      
 4126 
     | 
    
         
            +
             
     | 
| 
      
 4127 
     | 
    
         
            +
             
     | 
| 
      
 4128 
     | 
    
         
            +
            Started GET "/assets/jquery_ujs.js?body=1" for 127.0.0.1 at 2013-03-08 14:24:07 -0800
         
     | 
| 
      
 4129 
     | 
    
         
            +
            Served asset /jquery_ujs.js - 304 Not Modified (2ms)
         
     | 
| 
      
 4130 
     | 
    
         
            +
             
     | 
| 
      
 4131 
     | 
    
         
            +
             
     | 
| 
      
 4132 
     | 
    
         
            +
            Started GET "/assets/myreplicator/chosen.jquery.min.js?body=1" for 127.0.0.1 at 2013-03-08 14:24:07 -0800
         
     | 
| 
      
 4133 
     | 
    
         
            +
            Served asset /myreplicator/chosen.jquery.min.js - 304 Not Modified (1ms)
         
     | 
| 
      
 4134 
     | 
    
         
            +
             
     | 
| 
      
 4135 
     | 
    
         
            +
             
     | 
| 
      
 4136 
     | 
    
         
            +
            Started GET "/assets/myreplicator/cronwtf.js?body=1" for 127.0.0.1 at 2013-03-08 14:24:07 -0800
         
     | 
| 
      
 4137 
     | 
    
         
            +
            Served asset /myreplicator/cronwtf.js - 304 Not Modified (1ms)
         
     | 
| 
      
 4138 
     | 
    
         
            +
             
     | 
| 
      
 4139 
     | 
    
         
            +
             
     | 
| 
      
 4140 
     | 
    
         
            +
            Started GET "/assets/myreplicator/exports.js?body=1" for 127.0.0.1 at 2013-03-08 14:24:07 -0800
         
     | 
| 
      
 4141 
     | 
    
         
            +
            Served asset /myreplicator/exports.js - 304 Not Modified (1ms)
         
     | 
| 
      
 4142 
     | 
    
         
            +
             
     | 
| 
      
 4143 
     | 
    
         
            +
             
     | 
| 
      
 4144 
     | 
    
         
            +
            Started GET "/assets/myreplicator/jquery.tipTip.minified.js?body=1" for 127.0.0.1 at 2013-03-08 14:24:07 -0800
         
     | 
| 
      
 4145 
     | 
    
         
            +
            Served asset /myreplicator/jquery.tipTip.minified.js - 304 Not Modified (1ms)
         
     | 
| 
      
 4146 
     | 
    
         
            +
             
     | 
| 
      
 4147 
     | 
    
         
            +
             
     | 
| 
      
 4148 
     | 
    
         
            +
            Started GET "/assets/myreplicator/select2.js?body=1" for 127.0.0.1 at 2013-03-08 14:24:07 -0800
         
     | 
| 
      
 4149 
     | 
    
         
            +
            Served asset /myreplicator/select2.js - 304 Not Modified (29ms)
         
     | 
| 
      
 4150 
     | 
    
         
            +
             
     | 
| 
      
 4151 
     | 
    
         
            +
             
     | 
| 
      
 4152 
     | 
    
         
            +
            Started GET "/assets/myreplicator/application.js?body=1" for 127.0.0.1 at 2013-03-08 14:24:07 -0800
         
     | 
| 
      
 4153 
     | 
    
         
            +
            Served asset /myreplicator/application.js - 304 Not Modified (8ms)
         
     | 
| 
      
 4154 
     | 
    
         
            +
             
     | 
| 
      
 4155 
     | 
    
         
            +
             
     | 
| 
      
 4156 
     | 
    
         
            +
            Started GET "/assets/myreplicator/plus.png" for 127.0.0.1 at 2013-03-08 14:24:07 -0800
         
     | 
| 
      
 4157 
     | 
    
         
            +
            Served asset /myreplicator/plus.png - 304 Not Modified (31ms)
         
     | 
| 
      
 4158 
     | 
    
         
            +
             
     | 
| 
      
 4159 
     | 
    
         
            +
             
     | 
| 
      
 4160 
     | 
    
         
            +
            Started GET "/assets/myreplicator/desc-white.gif" for 127.0.0.1 at 2013-03-08 14:24:07 -0800
         
     | 
| 
      
 4161 
     | 
    
         
            +
            Served asset /myreplicator/desc-white.gif - 304 Not Modified (7ms)
         
     | 
| 
      
 4162 
     | 
    
         
            +
             
     | 
| 
      
 4163 
     | 
    
         
            +
             
     | 
| 
      
 4164 
     | 
    
         
            +
            Started GET "/assets/myreplicator/bg.gif" for 127.0.0.1 at 2013-03-08 14:24:07 -0800
         
     | 
| 
      
 4165 
     | 
    
         
            +
            Served asset /myreplicator/bg.gif - 304 Not Modified (56ms)
         
     | 
| 
      
 4166 
     | 
    
         
            +
             
     | 
| 
      
 4167 
     | 
    
         
            +
             
     | 
| 
      
 4168 
     | 
    
         
            +
            Started GET "/assets/myreplicator/clipboard-list.png" for 127.0.0.1 at 2013-03-08 14:24:07 -0800
         
     | 
| 
      
 4169 
     | 
    
         
            +
            Served asset /myreplicator/clipboard-list.png - 304 Not Modified (3ms)
         
     | 
| 
      
 4170 
     | 
    
         
            +
             
     | 
| 
      
 4171 
     | 
    
         
            +
             
     | 
| 
      
 4172 
     | 
    
         
            +
            Started GET "/assets/myreplicator/gear.png" for 127.0.0.1 at 2013-03-08 14:24:07 -0800
         
     | 
| 
      
 4173 
     | 
    
         
            +
            Served asset /myreplicator/gear.png - 304 Not Modified (7ms)
         
     | 
| 
      
 4174 
     | 
    
         
            +
             
     | 
| 
      
 4175 
     | 
    
         
            +
             
     | 
| 
      
 4176 
     | 
    
         
            +
            Started GET "/assets/myreplicator/status.png" for 127.0.0.1 at 2013-03-08 14:24:07 -0800
         
     | 
| 
      
 4177 
     | 
    
         
            +
            Served asset /myreplicator/status.png - 304 Not Modified (10ms)
         
     | 
| 
      
 4178 
     | 
    
         
            +
             
     | 
| 
      
 4179 
     | 
    
         
            +
             
     | 
| 
      
 4180 
     | 
    
         
            +
            Started GET "/assets/myreplicator/FrancoisOne.ttf" for 127.0.0.1 at 2013-03-08 14:24:07 -0800
         
     | 
| 
      
 4181 
     | 
    
         
            +
            Served asset /myreplicator/FrancoisOne.ttf - 304 Not Modified (13ms)
         
     | 
| 
      
 4182 
     | 
    
         
            +
             
     | 
| 
      
 4183 
     | 
    
         
            +
             
     | 
| 
      
 4184 
     | 
    
         
            +
            Started GET "/assets/myreplicator/websymbols-regular-webfont.woff" for 127.0.0.1 at 2013-03-08 14:24:07 -0800
         
     | 
| 
      
 4185 
     | 
    
         
            +
            Served asset /myreplicator/websymbols-regular-webfont.woff - 304 Not Modified (55ms)
         
     | 
| 
      
 4186 
     | 
    
         
            +
             
     | 
| 
      
 4187 
     | 
    
         
            +
             
     | 
| 
      
 4188 
     | 
    
         
            +
            Started GET "/assets/myreplicator/cross.png" for 127.0.0.1 at 2013-03-08 14:24:07 -0800
         
     | 
| 
      
 4189 
     | 
    
         
            +
            Served asset /myreplicator/cross.png - 304 Not Modified (11ms)
         
     | 
| 
      
 4190 
     | 
    
         
            +
             
     | 
| 
      
 4191 
     | 
    
         
            +
             
     | 
| 
      
 4192 
     | 
    
         
            +
            Started GET "/myreplicator/exports/new" for 127.0.0.1 at 2013-03-08 14:24:09 -0800
         
     | 
| 
      
 4193 
     | 
    
         
            +
            Processing by Myreplicator::ExportsController#new as HTML
         
     | 
| 
      
 4194 
     | 
    
         
            +
              Rendered /home/sasan/workspace/myreplicator/app/views/myreplicator/exports/_form.html.erb (68.7ms)
         
     | 
| 
      
 4195 
     | 
    
         
            +
              Rendered /home/sasan/workspace/myreplicator/app/views/myreplicator/exports/new.html.erb within layouts/myreplicator/application (76.6ms)
         
     | 
| 
      
 4196 
     | 
    
         
            +
            Completed 200 OK in 553ms (Views: 102.5ms | ActiveRecord: 76.8ms)
         
     | 
| 
      
 4197 
     | 
    
         
            +
             
     | 
| 
      
 4198 
     | 
    
         
            +
             
     | 
| 
      
 4199 
     | 
    
         
            +
            Started GET "/assets/myreplicator/application.css?body=1" for 127.0.0.1 at 2013-03-08 14:24:10 -0800
         
     | 
| 
      
 4200 
     | 
    
         
            +
            Served asset /myreplicator/application.css - 304 Not Modified (4ms)
         
     | 
| 
      
 4201 
     | 
    
         
            +
             
     | 
| 
      
 4202 
     | 
    
         
            +
             
     | 
| 
      
 4203 
     | 
    
         
            +
            Started GET "/assets/myreplicator/exports.css?body=1" for 127.0.0.1 at 2013-03-08 14:24:10 -0800
         
     | 
| 
      
 4204 
     | 
    
         
            +
            Served asset /myreplicator/exports.css - 304 Not Modified (0ms)
         
     | 
| 
      
 4205 
     | 
    
         
            +
             
     | 
| 
      
 4206 
     | 
    
         
            +
             
     | 
| 
      
 4207 
     | 
    
         
            +
            Started GET "/assets/myreplicator/chosen.css?body=1" for 127.0.0.1 at 2013-03-08 14:24:10 -0800
         
     | 
| 
      
 4208 
     | 
    
         
            +
            Served asset /myreplicator/chosen.css - 304 Not Modified (0ms)
         
     | 
| 
      
 4209 
     | 
    
         
            +
             
     | 
| 
      
 4210 
     | 
    
         
            +
             
     | 
| 
      
 4211 
     | 
    
         
            +
            Started GET "/assets/myreplicator/select2.css?body=1" for 127.0.0.1 at 2013-03-08 14:24:10 -0800
         
     | 
| 
      
 4212 
     | 
    
         
            +
            Served asset /myreplicator/select2.css - 304 Not Modified (0ms)
         
     | 
| 
      
 4213 
     | 
    
         
            +
             
     | 
| 
      
 4214 
     | 
    
         
            +
             
     | 
| 
      
 4215 
     | 
    
         
            +
            Started GET "/assets/myreplicator/tipTip.css?body=1" for 127.0.0.1 at 2013-03-08 14:24:10 -0800
         
     | 
| 
      
 4216 
     | 
    
         
            +
            Served asset /myreplicator/tipTip.css - 304 Not Modified (0ms)
         
     | 
| 
      
 4217 
     | 
    
         
            +
             
     | 
| 
      
 4218 
     | 
    
         
            +
             
     | 
| 
      
 4219 
     | 
    
         
            +
            Started GET "/assets/myreplicator/cronwtf.js?body=1" for 127.0.0.1 at 2013-03-08 14:24:10 -0800
         
     | 
| 
      
 4220 
     | 
    
         
            +
            Served asset /myreplicator/cronwtf.js - 304 Not Modified (0ms)
         
     | 
| 
      
 4221 
     | 
    
         
            +
             
     | 
| 
      
 4222 
     | 
    
         
            +
             
     | 
| 
      
 4223 
     | 
    
         
            +
            Started GET "/assets/jquery-ui.js?body=1" for 127.0.0.1 at 2013-03-08 14:24:10 -0800
         
     | 
| 
      
 4224 
     | 
    
         
            +
            Served asset /jquery-ui.js - 304 Not Modified (2ms)
         
     | 
| 
      
 4225 
     | 
    
         
            +
             
     | 
| 
      
 4226 
     | 
    
         
            +
             
     | 
| 
      
 4227 
     | 
    
         
            +
            Started GET "/assets/jquery_ujs.js?body=1" for 127.0.0.1 at 2013-03-08 14:24:10 -0800
         
     | 
| 
      
 4228 
     | 
    
         
            +
            Served asset /jquery_ujs.js - 304 Not Modified (0ms)
         
     | 
| 
      
 4229 
     | 
    
         
            +
             
     | 
| 
      
 4230 
     | 
    
         
            +
             
     | 
| 
      
 4231 
     | 
    
         
            +
            Started GET "/assets/myreplicator/chosen.jquery.min.js?body=1" for 127.0.0.1 at 2013-03-08 14:24:10 -0800
         
     | 
| 
      
 4232 
     | 
    
         
            +
            Served asset /myreplicator/chosen.jquery.min.js - 304 Not Modified (0ms)
         
     | 
| 
      
 4233 
     | 
    
         
            +
             
     | 
| 
      
 4234 
     | 
    
         
            +
             
     | 
| 
      
 4235 
     | 
    
         
            +
            Started GET "/assets/jquery.js?body=1" for 127.0.0.1 at 2013-03-08 14:24:10 -0800
         
     | 
| 
      
 4236 
     | 
    
         
            +
            Served asset /jquery.js - 304 Not Modified (0ms)
         
     | 
| 
      
 4237 
     | 
    
         
            +
             
     | 
| 
      
 4238 
     | 
    
         
            +
             
     | 
| 
      
 4239 
     | 
    
         
            +
            Started GET "/assets/myreplicator/exports.js?body=1" for 127.0.0.1 at 2013-03-08 14:24:10 -0800
         
     | 
| 
      
 4240 
     | 
    
         
            +
            Served asset /myreplicator/exports.js - 304 Not Modified (0ms)
         
     | 
| 
      
 4241 
     | 
    
         
            +
             
     | 
| 
      
 4242 
     | 
    
         
            +
             
     | 
| 
      
 4243 
     | 
    
         
            +
            Started GET "/assets/myreplicator/jquery.tipTip.minified.js?body=1" for 127.0.0.1 at 2013-03-08 14:24:10 -0800
         
     | 
| 
      
 4244 
     | 
    
         
            +
            Served asset /myreplicator/jquery.tipTip.minified.js - 304 Not Modified (0ms)
         
     | 
| 
      
 4245 
     | 
    
         
            +
             
     | 
| 
      
 4246 
     | 
    
         
            +
             
     | 
| 
      
 4247 
     | 
    
         
            +
            Started GET "/assets/myreplicator/select2.js?body=1" for 127.0.0.1 at 2013-03-08 14:24:10 -0800
         
     | 
| 
      
 4248 
     | 
    
         
            +
            Served asset /myreplicator/select2.js - 304 Not Modified (0ms)
         
     | 
| 
      
 4249 
     | 
    
         
            +
             
     | 
| 
      
 4250 
     | 
    
         
            +
             
     | 
| 
      
 4251 
     | 
    
         
            +
            Started GET "/assets/myreplicator/application.js?body=1" for 127.0.0.1 at 2013-03-08 14:24:10 -0800
         
     | 
| 
      
 4252 
     | 
    
         
            +
            Served asset /myreplicator/application.js - 304 Not Modified (2ms)
         
     | 
| 
      
 4253 
     | 
    
         
            +
             
     | 
| 
      
 4254 
     | 
    
         
            +
             
     | 
| 
      
 4255 
     | 
    
         
            +
            Started GET "/assets/myreplicator/cross.png" for 127.0.0.1 at 2013-03-08 14:24:10 -0800
         
     | 
| 
      
 4256 
     | 
    
         
            +
            Served asset /myreplicator/cross.png - 304 Not Modified (0ms)
         
     | 
| 
      
 4257 
     | 
    
         
            +
             
     | 
| 
      
 4258 
     | 
    
         
            +
             
     | 
| 
      
 4259 
     | 
    
         
            +
            Started GET "/assets/myreplicator/FrancoisOne.ttf" for 127.0.0.1 at 2013-03-08 14:24:10 -0800
         
     | 
| 
      
 4260 
     | 
    
         
            +
            Served asset /myreplicator/FrancoisOne.ttf - 304 Not Modified (0ms)
         
     | 
| 
      
 4261 
     | 
    
         
            +
             
     | 
| 
      
 4262 
     | 
    
         
            +
             
     | 
| 
      
 4263 
     | 
    
         
            +
            Started GET "/assets/myreplicator/websymbols-regular-webfont.woff" for 127.0.0.1 at 2013-03-08 14:24:10 -0800
         
     | 
| 
      
 4264 
     | 
    
         
            +
            Served asset /myreplicator/websymbols-regular-webfont.woff - 304 Not Modified (0ms)
         
     | 
| 
      
 4265 
     | 
    
         
            +
             
     | 
| 
      
 4266 
     | 
    
         
            +
             
     | 
| 
      
 4267 
     | 
    
         
            +
            Started GET "/assets/myreplicator/select2.png" for 127.0.0.1 at 2013-03-08 14:24:10 -0800
         
     | 
| 
      
 4268 
     | 
    
         
            +
            Served asset /myreplicator/select2.png - 304 Not Modified (21ms)
         
     | 
| 
      
 4269 
     | 
    
         
            +
             
     | 
| 
      
 4270 
     | 
    
         
            +
             
     | 
| 
      
 4271 
     | 
    
         
            +
            Started GET "/assets/myreplicator/slider_handle.png" for 127.0.0.1 at 2013-03-08 14:24:10 -0800
         
     | 
| 
      
 4272 
     | 
    
         
            +
            Served asset /myreplicator/slider_handle.png - 304 Not Modified (11ms)
         
     | 
| 
      
 4273 
     | 
    
         
            +
             
     | 
| 
      
 4274 
     | 
    
         
            +
             
     | 
| 
      
 4275 
     | 
    
         
            +
            Started POST "/myreplicator/exports" for 127.0.0.1 at 2013-03-08 14:24:33 -0800
         
     | 
| 
      
 4276 
     | 
    
         
            +
            Processing by Myreplicator::ExportsController#create as HTML
         
     | 
| 
      
 4277 
     | 
    
         
            +
              Parameters: {"utf8"=>"✓", "authenticity_token"=>"QmN8JvOm6ve0DKeySyGW8m4j4mX7L4aFx3WoUG5Iguk=", "export"=>{"export_to"=>"vertica", "export_type"=>"incremental", "source_schema"=>"okl_dev", "destination_schema"=>"public", "table_name"=>"activation_cohorts", "incremental_column"=>"modified_date", "incremental_column_type"=>"", "max_incremental_value"=>"", "s3_path"=>"", "active"=>"true", "cron"=>"*/23 * * * *"}, "commit"=>"Create Export"}
         
     | 
| 
      
 4278 
     | 
    
         
            +
              [1m[36m (0.1ms)[0m  [1mBEGIN[0m
         
     | 
| 
      
 4279 
     | 
    
         
            +
              [1m[35mSQL (0.4ms)[0m  INSERT INTO `myreplicator_exports` (`active`, `created_at`, `cron`, `destination_schema`, `error`, `export_finished_at`, `export_started_at`, `export_to`, `export_type`, `exporter_pid`, `incremental_column`, `incremental_column_type`, `max_incremental_value`, `s3_path`, `source_schema`, `state`, `table_name`, `updated_at`) VALUES (1, '2013-03-08 22:24:34', '*/23 * * * *', 'public', NULL, NULL, NULL, 'vertica', 'incremental', NULL, 'modified_date', '', '', '', 'okl_dev', 'new', 'activation_cohorts', '2013-03-08 22:24:34')
         
     | 
| 
      
 4280 
     | 
    
         
            +
              [1m[36m (42.3ms)[0m  [1mCOMMIT[0m
         
     | 
| 
      
 4281 
     | 
    
         
            +
              [1m[35mMyreplicator::Export Load (0.3ms)[0m  SELECT `myreplicator_exports`.* FROM `myreplicator_exports` 
         
     | 
| 
      
 4282 
     | 
    
         
            +
            Redirected to http://localhost:3000/myreplicator/exports/4
         
     | 
| 
      
 4283 
     | 
    
         
            +
            Completed 302 Found in 561ms (ActiveRecord: 120.4ms)
         
     | 
| 
      
 4284 
     | 
    
         
            +
             
     | 
| 
      
 4285 
     | 
    
         
            +
             
     | 
| 
      
 4286 
     | 
    
         
            +
            Started GET "/myreplicator/exports/4" for 127.0.0.1 at 2013-03-08 14:24:34 -0800
         
     | 
| 
      
 4287 
     | 
    
         
            +
            Processing by Myreplicator::ExportsController#show as HTML
         
     | 
| 
      
 4288 
     | 
    
         
            +
              Parameters: {"id"=>"4"}
         
     | 
| 
      
 4289 
     | 
    
         
            +
              [1m[36mMyreplicator::Export Load (0.3ms)[0m  [1mSELECT `myreplicator_exports`.* FROM `myreplicator_exports` WHERE `myreplicator_exports`.`id` = 4 LIMIT 1[0m
         
     | 
| 
      
 4290 
     | 
    
         
            +
              Rendered /home/sasan/workspace/myreplicator/app/views/myreplicator/exports/show.html.erb within layouts/myreplicator/application (1.5ms)
         
     | 
| 
      
 4291 
     | 
    
         
            +
            Completed 200 OK in 23ms (Views: 20.7ms | ActiveRecord: 0.3ms)
         
     | 
| 
      
 4292 
     | 
    
         
            +
             
     | 
| 
      
 4293 
     | 
    
         
            +
             
     | 
| 
      
 4294 
     | 
    
         
            +
            Started GET "/assets/myreplicator/application.css?body=1" for 127.0.0.1 at 2013-03-08 14:24:34 -0800
         
     | 
| 
      
 4295 
     | 
    
         
            +
            Served asset /myreplicator/application.css - 304 Not Modified (5ms)
         
     | 
| 
      
 4296 
     | 
    
         
            +
             
     | 
| 
      
 4297 
     | 
    
         
            +
             
     | 
| 
      
 4298 
     | 
    
         
            +
            Started GET "/assets/myreplicator/tipTip.css?body=1" for 127.0.0.1 at 2013-03-08 14:24:34 -0800
         
     | 
| 
      
 4299 
     | 
    
         
            +
            Served asset /myreplicator/tipTip.css - 304 Not Modified (0ms)
         
     | 
| 
      
 4300 
     | 
    
         
            +
             
     | 
| 
      
 4301 
     | 
    
         
            +
             
     | 
| 
      
 4302 
     | 
    
         
            +
            Started GET "/assets/myreplicator/chosen.css?body=1" for 127.0.0.1 at 2013-03-08 14:24:34 -0800
         
     | 
| 
      
 4303 
     | 
    
         
            +
            Served asset /myreplicator/chosen.css - 304 Not Modified (1ms)
         
     | 
| 
      
 4304 
     | 
    
         
            +
             
     | 
| 
      
 4305 
     | 
    
         
            +
             
     | 
| 
      
 4306 
     | 
    
         
            +
            Started GET "/assets/myreplicator/exports.css?body=1" for 127.0.0.1 at 2013-03-08 14:24:34 -0800
         
     | 
| 
      
 4307 
     | 
    
         
            +
            Served asset /myreplicator/exports.css - 304 Not Modified (0ms)
         
     | 
| 
      
 4308 
     | 
    
         
            +
             
     | 
| 
      
 4309 
     | 
    
         
            +
             
     | 
| 
      
 4310 
     | 
    
         
            +
            Started GET "/assets/myreplicator/select2.css?body=1" for 127.0.0.1 at 2013-03-08 14:24:34 -0800
         
     | 
| 
      
 4311 
     | 
    
         
            +
            Served asset /myreplicator/select2.css - 304 Not Modified (0ms)
         
     | 
| 
      
 4312 
     | 
    
         
            +
             
     | 
| 
      
 4313 
     | 
    
         
            +
             
     | 
| 
      
 4314 
     | 
    
         
            +
            Started GET "/assets/jquery.js?body=1" for 127.0.0.1 at 2013-03-08 14:24:34 -0800
         
     | 
| 
      
 4315 
     | 
    
         
            +
            Served asset /jquery.js - 304 Not Modified (1ms)
         
     | 
| 
      
 4316 
     | 
    
         
            +
             
     | 
| 
      
 4317 
     | 
    
         
            +
             
     | 
| 
      
 4318 
     | 
    
         
            +
            Started GET "/assets/jquery-ui.js?body=1" for 127.0.0.1 at 2013-03-08 14:24:34 -0800
         
     | 
| 
      
 4319 
     | 
    
         
            +
            Served asset /jquery-ui.js - 304 Not Modified (1ms)
         
     | 
| 
      
 4320 
     | 
    
         
            +
             
     | 
| 
      
 4321 
     | 
    
         
            +
             
     | 
| 
      
 4322 
     | 
    
         
            +
            Started GET "/assets/jquery_ujs.js?body=1" for 127.0.0.1 at 2013-03-08 14:24:34 -0800
         
     | 
| 
      
 4323 
     | 
    
         
            +
            Served asset /jquery_ujs.js - 304 Not Modified (0ms)
         
     | 
| 
      
 4324 
     | 
    
         
            +
             
     | 
| 
      
 4325 
     | 
    
         
            +
             
     | 
| 
      
 4326 
     | 
    
         
            +
            Started GET "/assets/myreplicator/cronwtf.js?body=1" for 127.0.0.1 at 2013-03-08 14:24:34 -0800
         
     | 
| 
      
 4327 
     | 
    
         
            +
            Served asset /myreplicator/cronwtf.js - 304 Not Modified (0ms)
         
     | 
| 
      
 4328 
     | 
    
         
            +
             
     | 
| 
      
 4329 
     | 
    
         
            +
             
     | 
| 
      
 4330 
     | 
    
         
            +
            Started GET "/assets/myreplicator/chosen.jquery.min.js?body=1" for 127.0.0.1 at 2013-03-08 14:24:34 -0800
         
     | 
| 
      
 4331 
     | 
    
         
            +
            Served asset /myreplicator/chosen.jquery.min.js - 304 Not Modified (2ms)
         
     | 
| 
      
 4332 
     | 
    
         
            +
             
     | 
| 
      
 4333 
     | 
    
         
            +
             
     | 
| 
      
 4334 
     | 
    
         
            +
            Started GET "/assets/myreplicator/exports.js?body=1" for 127.0.0.1 at 2013-03-08 14:24:34 -0800
         
     | 
| 
      
 4335 
     | 
    
         
            +
            Served asset /myreplicator/exports.js - 304 Not Modified (0ms)
         
     | 
| 
      
 4336 
     | 
    
         
            +
             
     | 
| 
      
 4337 
     | 
    
         
            +
             
     | 
| 
      
 4338 
     | 
    
         
            +
            Started GET "/assets/myreplicator/jquery.tipTip.minified.js?body=1" for 127.0.0.1 at 2013-03-08 14:24:34 -0800
         
     | 
| 
      
 4339 
     | 
    
         
            +
            Served asset /myreplicator/jquery.tipTip.minified.js - 304 Not Modified (0ms)
         
     | 
| 
      
 4340 
     | 
    
         
            +
             
     | 
| 
      
 4341 
     | 
    
         
            +
             
     | 
| 
      
 4342 
     | 
    
         
            +
            Started GET "/assets/myreplicator/select2.js?body=1" for 127.0.0.1 at 2013-03-08 14:24:34 -0800
         
     | 
| 
      
 4343 
     | 
    
         
            +
            Served asset /myreplicator/select2.js - 304 Not Modified (0ms)
         
     | 
| 
      
 4344 
     | 
    
         
            +
             
     | 
| 
      
 4345 
     | 
    
         
            +
             
     | 
| 
      
 4346 
     | 
    
         
            +
            Started GET "/assets/myreplicator/application.js?body=1" for 127.0.0.1 at 2013-03-08 14:24:34 -0800
         
     | 
| 
      
 4347 
     | 
    
         
            +
            Served asset /myreplicator/application.js - 304 Not Modified (2ms)
         
     | 
| 
      
 4348 
     | 
    
         
            +
             
     | 
| 
      
 4349 
     | 
    
         
            +
             
     | 
| 
      
 4350 
     | 
    
         
            +
            Started GET "/assets/myreplicator/FrancoisOne.ttf" for 127.0.0.1 at 2013-03-08 14:24:34 -0800
         
     | 
| 
      
 4351 
     | 
    
         
            +
            Served asset /myreplicator/FrancoisOne.ttf - 304 Not Modified (0ms)
         
     | 
| 
      
 4352 
     | 
    
         
            +
             
     | 
| 
      
 4353 
     | 
    
         
            +
             
     | 
| 
      
 4354 
     | 
    
         
            +
            Started GET "/assets/myreplicator/websymbols-regular-webfont.woff" for 127.0.0.1 at 2013-03-08 14:24:34 -0800
         
     | 
| 
      
 4355 
     | 
    
         
            +
            Served asset /myreplicator/websymbols-regular-webfont.woff - 304 Not Modified (0ms)
         
     | 
| 
      
 4356 
     | 
    
         
            +
             
     | 
| 
      
 4357 
     | 
    
         
            +
             
     | 
| 
      
 4358 
     | 
    
         
            +
            Started GET "/assets/myreplicator/gear.png" for 127.0.0.1 at 2013-03-08 14:24:34 -0800
         
     | 
| 
      
 4359 
     | 
    
         
            +
            Served asset /myreplicator/gear.png - 304 Not Modified (0ms)
         
     | 
| 
      
 4360 
     | 
    
         
            +
            Connecting to database specified by database.yml
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: myreplicator
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 1.1. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 1.1.9
         
     | 
| 
       5 
5 
     | 
    
         
             
              prerelease: 
         
     | 
| 
       6 
6 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       7 
7 
     | 
    
         
             
            authors:
         
     | 
| 
         @@ -9,7 +9,7 @@ authors: 
     | 
|
| 
       9 
9 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       10 
10 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       11 
11 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       12 
     | 
    
         
            -
            date: 2013-03- 
     | 
| 
      
 12 
     | 
    
         
            +
            date: 2013-03-13 00:00:00.000000000 Z
         
     | 
| 
       13 
13 
     | 
    
         
             
            dependencies:
         
     | 
| 
       14 
14 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       15 
15 
     | 
    
         
             
              name: rails
         
     | 
| 
         @@ -370,7 +370,7 @@ required_ruby_version: !ruby/object:Gem::Requirement 
     | 
|
| 
       370 
370 
     | 
    
         
             
                  version: '0'
         
     | 
| 
       371 
371 
     | 
    
         
             
                  segments:
         
     | 
| 
       372 
372 
     | 
    
         
             
                  - 0
         
     | 
| 
       373 
     | 
    
         
            -
                  hash:  
     | 
| 
      
 373 
     | 
    
         
            +
                  hash: -3137880076696344108
         
     | 
| 
       374 
374 
     | 
    
         
             
            required_rubygems_version: !ruby/object:Gem::Requirement
         
     | 
| 
       375 
375 
     | 
    
         
             
              none: false
         
     | 
| 
       376 
376 
     | 
    
         
             
              requirements:
         
     | 
| 
         @@ -379,7 +379,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement 
     | 
|
| 
       379 
379 
     | 
    
         
             
                  version: '0'
         
     | 
| 
       380 
380 
     | 
    
         
             
                  segments:
         
     | 
| 
       381 
381 
     | 
    
         
             
                  - 0
         
     | 
| 
       382 
     | 
    
         
            -
                  hash:  
     | 
| 
      
 382 
     | 
    
         
            +
                  hash: -3137880076696344108
         
     | 
| 
       383 
383 
     | 
    
         
             
            requirements: []
         
     | 
| 
       384 
384 
     | 
    
         
             
            rubyforge_project: 
         
     | 
| 
       385 
385 
     | 
    
         
             
            rubygems_version: 1.8.23
         
     |