Skip to main content

Redmine save_revision error by DB charset

* Check unit
rails runner "Repository.fetch_changesets" -e production

* ErrorLog

/usr/local/rvm/rubies/ruby-2.3.4/lib/ruby/gems/2.3.0/gems/mysql2-0.3.21/lib/mysql2/client.rb:80:in `_query': Mysql2::Error: Incorrect string value:.......) (ActiveRecord::StatementInvalid)

        from /usr/local/rvm/rubies/ruby-2.3.4/lib/ruby/gems/2.3.0/gems/mysql2-0.3.21/lib/mysql2/client.rb:80:in `block in query'

        from /usr/local/rvm/rubies/ruby-2.3.4/lib/ruby/gems/2.3.0/gems/mysql2-0.3.21/lib/mysql2/client.rb:79:in `handle_interrupt'

        from /usr/local/rvm/rubies/ruby-2.3.4/lib/ruby/gems/2.3.0/gems/mysql2-0.3.21/lib/mysql2/client.rb:79:in `query'

        from /usr/local/rvm/rubies/ruby-2.3.4/lib/ruby/gems/2.3.0/gems/activerecord-4.2.7.1/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:309:in `block in execute'

        from /usr/local/rvm/rubies/ruby-2.3.4/lib/ruby/gems/2.3.0/gems/activerecord-4.2.7.1/lib/active_record/connection_adapters/abstract_adapter.rb:484:in `block in log'

        from /usr/local/rvm/rubies/ruby-2.3.4/lib/ruby/gems/2.3.0/gems/activesupport-4.2.7.1/lib/active_support/notifications/instrumenter.rb:20:in `instrument'

        from /usr/local/rvm/rubies/ruby-2.3.4/lib/ruby/gems/2.3.0/gems/activerecord-4.2.7.1/lib/active_record/connection_adapters/abstract_adapter.rb:478:in `log'

        from /usr/local/rvm/rubies/ruby-2.3.4/lib/ruby/gems/2.3.0/gems/activerecord-4.2.7.1/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:309:in `execute'

        from /usr/local/rvm/rubies/ruby-2.3.4/lib/ruby/gems/2.3.0/gems/activerecord-4.2.7.1/lib/active_record/connection_adapters/mysql2_adapter.rb:231:in `execute'

        from /usr/local/rvm/rubies/ruby-2.3.4/lib/ruby/gems/2.3.0/gems/activerecord-4.2.7.1/lib/active_record/connection_adapters/mysql2_adapter.rb:248:in `exec_insert'

        from /usr/local/rvm/rubies/ruby-2.3.4/lib/ruby/gems/2.3.0/gems/activerecord-4.2.7.1/lib/active_record/connection_adapters/abstract/database_statements.rb:108:in `insert'

        from /usr/local/rvm/rubies/ruby-2.3.4/lib/ruby/gems/2.3.0/gems/activerecord-4.2.7.1/lib/active_record/connection_adapters/abstract/query_cache.rb:14:in `insert'

        from /usr/local/rvm/rubies/ruby-2.3.4/lib/ruby/gems/2.3.0/gems/activerecord-4.2.7.1/lib/active_record/relation.rb:64:in `insert'

        from /usr/local/rvm/rubies/ruby-2.3.4/lib/ruby/gems/2.3.0/gems/activerecord-4.2.7.1/lib/active_record/persistence.rb:524:in `_create_record'

        from /usr/local/rvm/rubies/ruby-2.3.4/lib/ruby/gems/2.3.0/gems/activerecord-4.2.7.1/lib/active_record/counter_cache.rb:139:in `_create_record'

        from /usr/local/rvm/rubies/ruby-2.3.4/lib/ruby/gems/2.3.0/gems/activerecord-4.2.7.1/lib/active_record/locking/optimistic.rb:75:in `_create_record'

        from /usr/local/rvm/rubies/ruby-2.3.4/lib/ruby/gems/2.3.0/gems/activerecord-4.2.7.1/lib/active_record/attribute_methods/dirty.rb:133:in `_create_record'

        from /usr/local/rvm/rubies/ruby-2.3.4/lib/ruby/gems/2.3.0/gems/activerecord-4.2.7.1/lib/active_record/callbacks.rb:306:in `block in _create_record'

        from /usr/local/rvm/rubies/ruby-2.3.4/lib/ruby/gems/2.3.0/gems/activesupport-4.2.7.1/lib/active_support/callbacks.rb:117:in `call'

        from /usr/local/rvm/rubies/ruby-2.3.4/lib/ruby/gems/2.3.0/gems/activesupport-4.2.7.1/lib/active_support/callbacks.rb:555:in `block (2 levels) in compile'

        from /usr/local/rvm/rubies/ruby-2.3.4/lib/ruby/gems/2.3.0/gems/activesupport-4.2.7.1/lib/active_support/callbacks.rb:505:in `call'

        from /usr/local/rvm/rubies/ruby-2.3.4/lib/ruby/gems/2.3.0/gems/activesupport-4.2.7.1/lib/active_support/callbacks.rb:92:in `__run_callbacks__'

        from /usr/local/rvm/rubies/ruby-2.3.4/lib/ruby/gems/2.3.0/gems/activesupport-4.2.7.1/lib/active_support/callbacks.rb:778:in `_run_create_callbacks'

        from /usr/local/rvm/rubies/ruby-2.3.4/lib/ruby/gems/2.3.0/gems/activerecord-4.2.7.1/lib/active_record/callbacks.rb:306:in `_create_record'

        from /usr/local/rvm/rubies/ruby-2.3.4/lib/ruby/gems/2.3.0/gems/activerecord-4.2.7.1/lib/active_record/timestamp.rb:57:in `_create_record'

        from /usr/local/rvm/rubies/ruby-2.3.4/lib/ruby/gems/2.3.0/gems/activerecord-4.2.7.1/lib/active_record/persistence.rb:504:in `create_or_update'

        from /usr/local/rvm/rubies/ruby-2.3.4/lib/ruby/gems/2.3.0/gems/activerecord-4.2.7.1/lib/active_record/callbacks.rb:302:in `block in create_or_update'

        from /usr/local/rvm/rubies/ruby-2.3.4/lib/ruby/gems/2.3.0/gems/activesupport-4.2.7.1/lib/active_support/callbacks.rb:117:in `call'

        from /usr/local/rvm/rubies/ruby-2.3.4/lib/ruby/gems/2.3.0/gems/activesupport-4.2.7.1/lib/active_support/callbacks.rb:555:in `block (2 levels) in compile'

        from /usr/local/rvm/rubies/ruby-2.3.4/lib/ruby/gems/2.3.0/gems/activesupport-4.2.7.1/lib/active_support/callbacks.rb:505:in `call'

        from /usr/local/rvm/rubies/ruby-2.3.4/lib/ruby/gems/2.3.0/gems/activesupport-4.2.7.1/lib/active_support/callbacks.rb:92:in `__run_callbacks__'

        from /usr/local/rvm/rubies/ruby-2.3.4/lib/ruby/gems/2.3.0/gems/activesupport-4.2.7.1/lib/active_support/callbacks.rb:778:in `_run_save_callbacks'

        from /usr/local/rvm/rubies/ruby-2.3.4/lib/ruby/gems/2.3.0/gems/activerecord-4.2.7.1/lib/active_record/callbacks.rb:302:in `create_or_update'

        from /usr/local/rvm/rubies/ruby-2.3.4/lib/ruby/gems/2.3.0/gems/activerecord-4.2.7.1/lib/active_record/persistence.rb:120:in `save'

        from /usr/local/rvm/rubies/ruby-2.3.4/lib/ruby/gems/2.3.0/gems/activerecord-4.2.7.1/lib/active_record/validations.rb:37:in `save'

        from /usr/local/rvm/rubies/ruby-2.3.4/lib/ruby/gems/2.3.0/gems/activerecord-4.2.7.1/lib/active_record/attribute_methods/dirty.rb:21:in `save'

        from /usr/local/rvm/rubies/ruby-2.3.4/lib/ruby/gems/2.3.0/gems/activerecord-4.2.7.1/lib/active_record/transactions.rb:286:in `block (2 levels) in save'

        from /usr/local/rvm/rubies/ruby-2.3.4/lib/ruby/gems/2.3.0/gems/activerecord-4.2.7.1/lib/active_record/transactions.rb:351:in `block in with_transaction_returning_status'

        from /usr/local/rvm/rubies/ruby-2.3.4/lib/ruby/gems/2.3.0/gems/activerecord-4.2.7.1/lib/active_record/connection_adapters/abstract/database_statements.rb:211:in `transaction'

        from /usr/local/rvm/rubies/ruby-2.3.4/lib/ruby/gems/2.3.0/gems/activerecord-4.2.7.1/lib/active_record/transactions.rb:220:in `transaction'

        from /usr/local/rvm/rubies/ruby-2.3.4/lib/ruby/gems/2.3.0/gems/activerecord-4.2.7.1/lib/active_record/transactions.rb:348:in `with_transaction_returning_status'

        from /usr/local/rvm/rubies/ruby-2.3.4/lib/ruby/gems/2.3.0/gems/activerecord-4.2.7.1/lib/active_record/transactions.rb:286:in `block in save'

        from /usr/local/rvm/rubies/ruby-2.3.4/lib/ruby/gems/2.3.0/gems/activerecord-4.2.7.1/lib/active_record/transactions.rb:301:in `rollback_active_record_state!'

        from /usr/local/rvm/rubies/ruby-2.3.4/lib/ruby/gems/2.3.0/gems/activerecord-4.2.7.1/lib/active_record/transactions.rb:285:in `save'

        from /usr/local/rvm/rubies/ruby-2.3.4/lib/ruby/gems/2.3.0/gems/protected_attributes-1.1.4/lib/active_record/mass_assignment_security/persistence.rb:46:in `create'

        from /usr/local/redmine/app/models/repository/git.rb:218:in `save_revision'

        from /usr/local/redmine/app/models/repository/git.rb:207:in `block (2 levels) in save_revisions'

        from /usr/local/rvm/rubies/ruby-2.3.4/lib/ruby/gems/2.3.0/gems/activerecord-4.2.7.1/lib/active_record/connection_adapters/abstract/database_statements.rb:213:in `block in transaction'

        from /usr/local/rvm/rubies/ruby-2.3.4/lib/ruby/gems/2.3.0/gems/activerecord-4.2.7.1/lib/active_record/connection_adapters/abstract/transaction.rb:184:in `within_new_transaction'

        from /usr/local/rvm/rubies/ruby-2.3.4/lib/ruby/gems/2.3.0/gems/activerecord-4.2.7.1/lib/active_record/connection_adapters/abstract/database_statements.rb:213:in `transaction'

        from /usr/local/rvm/rubies/ruby-2.3.4/lib/ruby/gems/2.3.0/gems/activerecord-4.2.7.1/lib/active_record/transactions.rb:220:in `transaction'

        from /usr/local/rvm/rubies/ruby-2.3.4/lib/ruby/gems/2.3.0/gems/activerecord-4.2.7.1/lib/active_record/transactions.rb:277:in `transaction'

        from /usr/local/redmine/app/models/repository/git.rb:204:in `block in save_revisions'

        from /usr/local/redmine/app/models/repository/git.rb:203:in `each'

        from /usr/local/redmine/app/models/repository/git.rb:203:in `save_revisions'

        from /usr/local/redmine/app/models/repository/git.rb:153:in `fetch_changesets'

        from /usr/local/redmine/app/models/repository.rb:346:in `block (2 levels) in fetch_changesets'

        from /usr/local/rvm/rubies/ruby-2.3.4/lib/ruby/gems/2.3.0/gems/activerecord-4.2.7.1/lib/active_record/relation/delegation.rb:46:in `each'

        from /usr/local/rvm/rubies/ruby-2.3.4/lib/ruby/gems/2.3.0/gems/activerecord-4.2.7.1/lib/active_record/relation/delegation.rb:46:in `each'

        from /usr/local/redmine/app/models/repository.rb:344:in `block in fetch_changesets'

        from /usr/local/rvm/rubies/ruby-2.3.4/lib/ruby/gems/2.3.0/gems/activerecord-4.2.7.1/lib/active_record/relation/delegation.rb:46:in `each'

        from /usr/local/rvm/rubies/ruby-2.3.4/lib/ruby/gems/2.3.0/gems/activerecord-4.2.7.1/lib/active_record/relation/delegation.rb:46:in `each'

        from /usr/local/redmine/app/models/repository.rb:343:in `fetch_changesets'

        from /usr/local/rvm/rubies/ruby-2.3.4/lib/ruby/gems/2.3.0/gems/railties-4.2.7.1/lib/rails/commands/runner.rb:62:in `<top (required)>'

        from /usr/local/rvm/rubies/ruby-2.3.4/lib/ruby/gems/2.3.0/gems/railties-4.2.7.1/lib/rails/commands/runner.rb:62:in `eval'

        from /usr/local/rvm/rubies/ruby-2.3.4/lib/ruby/gems/2.3.0/gems/railties-4.2.7.1/lib/rails/commands/runner.rb:62:in `<top (required)>'

        from /usr/local/rvm/rubies/ruby-2.3.4/lib/ruby/gems/2.3.0/gems/railties-4.2.7.1/lib/rails/commands/commands_tasks.rb:123:in `require'

        from /usr/local/rvm/rubies/ruby-2.3.4/lib/ruby/gems/2.3.0/gems/railties-4.2.7.1/lib/rails/commands/commands_tasks.rb:123:in `require_command!'

        from /usr/local/rvm/rubies/ruby-2.3.4/lib/ruby/gems/2.3.0/gems/railties-4.2.7.1/lib/rails/commands/commands_tasks.rb:90:in `runner'

        from /usr/local/rvm/rubies/ruby-2.3.4/lib/ruby/gems/2.3.0/gems/railties-4.2.7.1/lib/rails/commands/commands_tasks.rb:39:in `run_command!'

        from /usr/local/rvm/rubies/ruby-2.3.4/lib/ruby/gems/2.3.0/gems/railties-4.2.7.1/lib/rails/commands.rb:17:in `<top (required)>'

        from bin/rails:4:in `require'

        from bin/rails:4:in `<main>'


* Error point: Changeset process

* ./app/models/repository.rb
   If you need to isolated test. Add "fetch_changesets_dbg" function like "fetch_changesets" function.
   And test with next command
  "rails runner "Repository.fetch_changesets_dbg" -e production"

* ./app/models/repository/git.rb (if you use git)
  Fix : 

add fuction

def get_ascii_only(str_a)

    ret_val = ""

    str_a.each_byte do |c|

      $char = c.chr

      if $char.ascii_only?

         ret_val += $char

      end

    end

    return ret_val

  end

  private :get_ascii_only

 

Modify revision function

def save_revision(rev)

    parents = (rev.parents || []).collect{|rp| find_changeset_by_name(rp)}.compact

    begin

      changeset = Changeset.create(

              :repository   => self,

              :revision     => rev.identifier,

              :scmid        => rev.scmid,

              :committer    => rev.author,

              :committed_on => rev.time,

              :comments     => rev.message,

              :parents      => parents

              )

    rescue

      new_mesg = get_ascii_only(rev.message)

      changeset = Changeset.create(

              :repository   => self,

              :revision     => rev.identifier,

              :scmid        => rev.scmid,

              :committer    => rev.author,

              :committed_on => rev.time,

              :comments     => new_mesg,

              :parents      => parents

              )

    end

    unless changeset.new_record?

        rev.paths.each { |change| changeset.create_change(change) }

    end

    changeset

  end

 



Comments

Popular posts from this blog

sanitize on in CMakeLists.txt

1. CMakeLists.txt set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=address") add_compile_options(-fsanitize=address) If a subdir is set with add_subdirectory and a module that does not support sanitize is imported from the path and needs to be removed, add -fno-sanitize=address to add_compile_options in CMakeLists.txt of the subdir to remove it. Basically, if you enable sanitize, sanitize will adjust ulimit's core to 0, so core will not occur. You can do this by putting the following part as an environment variable. (Below is the part you put in systemd's service) 2. service file in systemd [Service] LimitCORE=infinity Environment="ASAN_OPTIONS=handle_segv=0:handle_abort=1:abort_on_error=1:disable_coredump=0"

e1000e 0000:00:1f.6 eno1: Detected Hardware Unit Hang

 make a file: /usr/local/etc/ethtool.sh (eno1 is your mgmt i/f, vmbr0 is your bridge i/f.) #!/bin/bash ethtool -K eno1 gso off gro on tso off tx on rx on rxvlan on txvlan on sg on && ethtool -K vmbr0 gso off gro on tso off tx on rx on rxvlan on txvlan on sg on ethtool -G eno1 rx 4096 if you want to activate on reboot. /etc/systemd/system/ethtool.service [Unit] Description=ethtool script [Service] WorkingDirectory=/usr/local/etc/ ExecStart=/usr/local/etc/ethtool.sh [Install] WantedBy=multi-user.target then systemctl enable ethtool.service && systemctl start ethtool.service refs: https://forum.proxmox.com/threads/e1000-driver-hang.58284/page-8#post-390709

[linux/bash script] time command result sum

calc_alltime.sh #!/bin/bash TIME_RESULT_FILE=${1} if [ "${TIME_RESULT_FILE}" != "" ]; then   if [ -f ${TIME_RESULT_FILE} ]; then   egrep "^[rus]" ${TIME_RESULT_FILE} |awk ' { print $2 } '| sed -e 's/m/ /'g |sed -e 's/s$//g' |  awk ' { SUM_MIN=SUM_MIN+$1; SUM_SEC=SUM_SEC+$2; } END {  NEW_MIN=int(SUM_SEC/60);  SUM_MIN=SUM_MIN+NEW_MIN;  SUM_SEC=SUM_SEC-(NEW_MIN*60);  print SUM_MIN "m" SUM_SEC "s" } '   else     echo "File not exist"   fi fi example of FILE # cat tt 1th try real    0m2.564s user    0m0.032s sys     0m0.033s 2th try real    0m2.586s user    0m0.039s sys     0m0.034s 3th try real    0m2.810s user    0m0.036s sys     0m0.042s 4th try real    0m3.155s user    0m0.042s sys     0m0.040s # calc_alltime.sh tt 0m11.413s