)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":8749,"name":"Evgeniy L","email":"eli@mirantis.com","username":"evgeniyl"},"change_message_id":"d23e3aa5eaf0c04db0fe0641896d2ac2a55c3c12","unresolved":false,"context_lines":[{"line_number":29,"context_line":"Closes-Bug: #1498847"},{"line_number":30,"context_line":"Closes-Bug: #1487397"},{"line_number":31,"context_line":"Closes-Bug: #1485895"},{"line_number":32,"context_line":"Closes-Bug: #1483182"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"Change-Id: I52d005498ccb978ada158bfa64b1c7de1a24e9b0"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"1a26ad4f_72b1cde0","line":32,"updated":"2015-10-30 09:21:44.000000000","message":"Please use Closes-Bug carefully, most of the issue are already closed, so those are more Related-bug.","commit_id":"d6236878f60ccd6c58f334db92170373dc5222c9"},{"author":{"_account_id":8776,"name":"Vladimir Sharshov","email":"vsharshov@mirantis.com","username":"warpc"},"change_message_id":"18170a86920da3fd099b1063363d3bf6cf78caf1","unresolved":false,"context_lines":[{"line_number":29,"context_line":"Closes-Bug: #1498847"},{"line_number":30,"context_line":"Closes-Bug: #1487397"},{"line_number":31,"context_line":"Closes-Bug: #1485895"},{"line_number":32,"context_line":"Closes-Bug: #1483182"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"Change-Id: I52d005498ccb978ada158bfa64b1c7de1a24e9b0"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"fa80f949_03ec2ec6","line":32,"in_reply_to":"1a26ad4f_72b1cde0","updated":"2015-11-03 16:04:32.000000000","message":"Done","commit_id":"d6236878f60ccd6c58f334db92170373dc5222c9"}],"astute.gemspec":[{"author":{"_account_id":8749,"name":"Evgeniy L","email":"eli@mirantis.com","username":"evgeniyl"},"change_message_id":"d23e3aa5eaf0c04db0fe0641896d2ac2a55c3c12","unresolved":false,"context_lines":[{"line_number":18,"context_line":"  s.add_dependency \u0027net-ssh-multi\u0027, \u0027~\u003e 1.1\u0027"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"  # Astute as service"},{"line_number":21,"context_line":"  s.add_dependency \u0027bunny\u0027, \"~\u003e 2.2.0\""},{"line_number":22,"context_line":"  s.add_dependency \u0027raemon\u0027, \u00270.3.0\u0027"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"  s.add_development_dependency \u0027facter\u0027"}],"source_content_type":"application/octet-stream","patch_set":6,"id":"1a26ad4f_b2bbe5e4","line":21,"updated":"2015-10-30 09:21:44.000000000","message":"Looks like the latest version which we have is lower\n\nrubygem-bunny-0.8.0-1.el6.noarch.rpm  \n\nhttp://mirror.fuel-infra.org/fwm/master/centos/os/x86_64/Packages/","commit_id":"d6236878f60ccd6c58f334db92170373dc5222c9"},{"author":{"_account_id":8749,"name":"Evgeniy L","email":"eli@mirantis.com","username":"evgeniyl"},"change_message_id":"e88861408786ee7403c3496e0cb5eeb5aa382789","unresolved":false,"context_lines":[{"line_number":18,"context_line":"  s.add_dependency \u0027net-ssh-multi\u0027, \u0027~\u003e 1.1\u0027"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"  # Astute as service"},{"line_number":21,"context_line":"  s.add_dependency \u0027bunny\u0027, \"~\u003e 2.2.0\""},{"line_number":22,"context_line":"  s.add_dependency \u0027raemon\u0027, \u00270.3.0\u0027"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"  s.add_development_dependency \u0027facter\u0027"}],"source_content_type":"application/octet-stream","patch_set":6,"id":"fa80f949_43655643","line":21,"in_reply_to":"1a26ad4f_546d732f","updated":"2015-11-03 16:18:45.000000000","message":"The problem is we cannot merge it until there is a new package in the mirrors.","commit_id":"d6236878f60ccd6c58f334db92170373dc5222c9"},{"author":{"_account_id":13895,"name":"Artem Silenkov","email":"asilenkov@mirantis.com","username":"asilenkov"},"change_message_id":"6daa283b8adf47a5c82378d9468f0d0a2f5017c3","unresolved":false,"context_lines":[{"line_number":18,"context_line":"  s.add_dependency \u0027net-ssh-multi\u0027, \u0027~\u003e 1.1\u0027"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"  # Astute as service"},{"line_number":21,"context_line":"  s.add_dependency \u0027bunny\u0027, \"~\u003e 2.2.0\""},{"line_number":22,"context_line":"  s.add_dependency \u0027raemon\u0027, \u00270.3.0\u0027"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"  s.add_development_dependency \u0027facter\u0027"}],"source_content_type":"application/octet-stream","patch_set":6,"id":"1a26ad4f_546d732f","line":21,"in_reply_to":"1a26ad4f_b2bbe5e4","updated":"2015-11-02 11:35:50.000000000","message":"we don\u0027t use OS shipped gems which are the way old. We use gems from rubygems.org directly. 2.2.1 is the latest thus should be repackaged, no problem here.","commit_id":"d6236878f60ccd6c58f334db92170373dc5222c9"},{"author":{"_account_id":8749,"name":"Evgeniy L","email":"eli@mirantis.com","username":"evgeniyl"},"change_message_id":"777dbea0414e7a93d163a720a3f5ef07a85204cb","unresolved":false,"context_lines":[{"line_number":18,"context_line":"  s.add_dependency \u0027net-ssh-multi\u0027, \u0027~\u003e 1.1\u0027"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"  # Astute as service"},{"line_number":21,"context_line":"  s.add_dependency \u0027bunny\u0027, \"~\u003e 2.2.0\""},{"line_number":22,"context_line":"  s.add_dependency \u0027raemon\u0027, \u00270.3.0\u0027"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"  s.add_development_dependency \u0027facter\u0027"}],"source_content_type":"application/octet-stream","patch_set":7,"id":"fa80f949_c3514664","line":21,"updated":"2015-11-03 16:18:38.000000000","message":"Discussion in 6th patchset.","commit_id":"f4e5e30c35b676ee7b11ca77a20a82410b6e6b80"}],"lib/astute/server/async_logger.rb":[{"author":{"_account_id":3009,"name":"Vladimir Kozhukalov","email":"kozhukalov@gmail.com","username":"kozhukalov"},"change_message_id":"61d12f04a5929ea47236cb32abe5fe2099b49fed","unresolved":false,"context_lines":[{"line_number":38,"context_line":"      def self.add(severity, msg\u003dnil)"},{"line_number":39,"context_line":"        return if @shutdown"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"        @queue.push([severity, msg])"},{"line_number":42,"context_line":"      end"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"      def self.debug(msg\u003dnil)"}],"source_content_type":"text/x-ruby","patch_set":11,"id":"9a8ffd7b_670c84ed","line":41,"updated":"2015-11-27 15:16:07.000000000","message":"Is it safe to push messages to the queue unlimited?","commit_id":"b60624ee2c5f1d6d805619b6c27965a973508da1"}],"lib/astute/server/dispatcher.rb":[{"author":{"_account_id":8749,"name":"Evgeniy L","email":"eli@mirantis.com","username":"evgeniyl"},"change_message_id":"d23e3aa5eaf0c04db0fe0641896d2ac2a55c3c12","unresolved":false,"context_lines":[{"line_number":43,"context_line":""},{"line_number":44,"context_line":"      def provision(data, provision_method)"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"        Astute.logger.info \"\u0027provision\u0027 method called with data:\\n\"\\"},{"line_number":47,"context_line":"                           \"#{data.pretty_inspect}\""},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"        reporter \u003d create_reporter(data)"}],"source_content_type":"text/x-ruby","patch_set":6,"id":"1a26ad4f_92eb49b0","line":46,"updated":"2015-10-30 09:21:44.000000000","message":"Always use parenthesis if it\u0027s not a part of DSL, like rspec/cucmber/rake.","commit_id":"d6236878f60ccd6c58f334db92170373dc5222c9"},{"author":{"_account_id":8776,"name":"Vladimir Sharshov","email":"vsharshov@mirantis.com","username":"warpc"},"change_message_id":"18170a86920da3fd099b1063363d3bf6cf78caf1","unresolved":false,"context_lines":[{"line_number":43,"context_line":""},{"line_number":44,"context_line":"      def provision(data, provision_method)"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"        Astute.logger.info \"\u0027provision\u0027 method called with data:\\n\"\\"},{"line_number":47,"context_line":"                           \"#{data.pretty_inspect}\""},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"        reporter \u003d create_reporter(data)"}],"source_content_type":"text/x-ruby","patch_set":6,"id":"fa80f949_28791494","line":46,"in_reply_to":"1a26ad4f_92eb49b0","updated":"2015-11-03 16:04:32.000000000","message":"Done","commit_id":"d6236878f60ccd6c58f334db92170373dc5222c9"},{"author":{"_account_id":8749,"name":"Evgeniy L","email":"eli@mirantis.com","username":"evgeniyl"},"change_message_id":"d23e3aa5eaf0c04db0fe0641896d2ac2a55c3c12","unresolved":false,"context_lines":[{"line_number":56,"context_line":"          )"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"        # TODO(vsharshov): Refactoring the deployment"},{"line_number":59,"context_line":"        # aborting messages (StopIteration)"},{"line_number":60,"context_line":"        rescue \u003d\u003e e"},{"line_number":61,"context_line":"          Astute.logger.error \"Error running provisioning: #{e.message}, \"\\"},{"line_number":62,"context_line":"                              \"trace: #{e.format_backtrace}\""}],"source_content_type":"text/x-ruby","patch_set":6,"id":"1a26ad4f_d208e193","line":59,"updated":"2015-10-30 09:21:44.000000000","message":"Is it still valid comment? I mean it\u0027s hard to figure out what it means.","commit_id":"d6236878f60ccd6c58f334db92170373dc5222c9"},{"author":{"_account_id":8776,"name":"Vladimir Sharshov","email":"vsharshov@mirantis.com","username":"warpc"},"change_message_id":"18170a86920da3fd099b1063363d3bf6cf78caf1","unresolved":false,"context_lines":[{"line_number":56,"context_line":"          )"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"        # TODO(vsharshov): Refactoring the deployment"},{"line_number":59,"context_line":"        # aborting messages (StopIteration)"},{"line_number":60,"context_line":"        rescue \u003d\u003e e"},{"line_number":61,"context_line":"          Astute.logger.error \"Error running provisioning: #{e.message}, \"\\"},{"line_number":62,"context_line":"                              \"trace: #{e.format_backtrace}\""}],"source_content_type":"text/x-ruby","patch_set":6,"id":"fa80f949_c365c6e1","line":59,"in_reply_to":"1a26ad4f_d208e193","updated":"2015-11-03 16:04:32.000000000","message":"Looks like not.","commit_id":"d6236878f60ccd6c58f334db92170373dc5222c9"}],"lib/astute/server/producer.rb":[{"author":{"_account_id":8749,"name":"Evgeniy L","email":"eli@mirantis.com","username":"evgeniyl"},"change_message_id":"d23e3aa5eaf0c04db0fe0641896d2ac2a55c3c12","unresolved":false,"context_lines":[{"line_number":40,"context_line":"          :content_type \u003d\u003e \u0027application/json\u0027"},{"line_number":41,"context_line":"        }"},{"line_number":42,"context_line":"        if message.respond_to?(:keys) \u0026\u0026 message.keys.map(\u0026:to_s).include?(\u0027status\u0027)"},{"line_number":43,"context_line":"          default_options.merge!({:persistent \u003d\u003e true})"},{"line_number":44,"context_line":"        end"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"        options \u003d default_options.merge(options)"}],"source_content_type":"text/x-ruby","patch_set":6,"id":"1a26ad4f_925ee974","line":43,"updated":"2015-10-30 09:21:44.000000000","message":"Could you please comment on that, why do you add persistent flag only if there is status key?","commit_id":"d6236878f60ccd6c58f334db92170373dc5222c9"},{"author":{"_account_id":8776,"name":"Vladimir Sharshov","email":"vsharshov@mirantis.com","username":"warpc"},"change_message_id":"6fb58ffca6bd6a613b4c1d3ea46cf8508c2c2bbc","unresolved":false,"context_lines":[{"line_number":40,"context_line":"          :content_type \u003d\u003e \u0027application/json\u0027"},{"line_number":41,"context_line":"        }"},{"line_number":42,"context_line":"        if message.respond_to?(:keys) \u0026\u0026 message.keys.map(\u0026:to_s).include?(\u0027status\u0027)"},{"line_number":43,"context_line":"          default_options.merge!({:persistent \u003d\u003e true})"},{"line_number":44,"context_line":"        end"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"        options \u003d default_options.merge(options)"}],"source_content_type":"text/x-ruby","patch_set":6,"id":"1a26ad4f_b68082c0","line":43,"in_reply_to":"1a26ad4f_925ee974","updated":"2015-11-03 14:44:27.000000000","message":"Thanks, i will add. In short word only message with status could not be lost in our logic.","commit_id":"d6236878f60ccd6c58f334db92170373dc5222c9"},{"author":{"_account_id":8749,"name":"Evgeniy L","email":"eli@mirantis.com","username":"evgeniyl"},"change_message_id":"777dbea0414e7a93d163a720a3f5ef07a85204cb","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        # Status message manage task status in Nailgun. If we miss some of them,"},{"line_number":44,"context_line":"        # user need manually delete them or change it status using DB."},{"line_number":45,"context_line":"        # Persistent option tell RabbitMQ to save message in case of"},{"line_number":46,"context_line":"        # unexpected/expected restart."},{"line_number":47,"context_line":"        if message.respond_to?(:keys) \u0026\u0026 message.keys.map(\u0026:to_s).include?(\u0027status\u0027)"},{"line_number":48,"context_line":"          default_options.merge!({:persistent \u003d\u003e true})"},{"line_number":49,"context_line":"        end"}],"source_content_type":"text/x-ruby","patch_set":7,"id":"fa80f949_6662e8da","line":46,"updated":"2015-11-03 16:18:38.000000000","message":"Hm, but why previously we didn\u0027t have such behaviour? Isn\u0027t it separate issue from introducing bunny instead of eventmachine?","commit_id":"f4e5e30c35b676ee7b11ca77a20a82410b6e6b80"},{"author":{"_account_id":8776,"name":"Vladimir Sharshov","email":"vsharshov@mirantis.com","username":"warpc"},"change_message_id":"ebd5bebbd4f15718f2394e68c5bc1f78d1f71a57","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        # Status message manage task status in Nailgun. If we miss some of them,"},{"line_number":44,"context_line":"        # user need manually delete them or change it status using DB."},{"line_number":45,"context_line":"        # Persistent option tell RabbitMQ to save message in case of"},{"line_number":46,"context_line":"        # unexpected/expected restart."},{"line_number":47,"context_line":"        if message.respond_to?(:keys) \u0026\u0026 message.keys.map(\u0026:to_s).include?(\u0027status\u0027)"},{"line_number":48,"context_line":"          default_options.merge!({:persistent \u003d\u003e true})"},{"line_number":49,"context_line":"        end"}],"source_content_type":"text/x-ruby","patch_set":7,"id":"fa80f949_3e13240f","line":46,"in_reply_to":"fa80f949_6662e8da","updated":"2015-11-09 13:52:54.000000000","message":"I try to use here new abilities from Bunny gem, so it can be as separate issue or this issue. Same as async logger i think.","commit_id":"f4e5e30c35b676ee7b11ca77a20a82410b6e6b80"}],"lib/astute/server/server.rb":[{"author":{"_account_id":8749,"name":"Evgeniy L","email":"eli@mirantis.com","username":"evgeniyl"},"change_message_id":"d23e3aa5eaf0c04db0fe0641896d2ac2a55c3c12","unresolved":false,"context_lines":[{"line_number":57,"context_line":"      end"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"      def stop"},{"line_number":60,"context_line":"        @watch_thread.wakeup"},{"line_number":61,"context_line":"      end"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    private"}],"source_content_type":"text/x-ruby","patch_set":6,"id":"1a26ad4f_d299c120","line":60,"updated":"2015-10-30 09:21:44.000000000","message":"Why `wakeup` in stop call?","commit_id":"d6236878f60ccd6c58f334db92170373dc5222c9"},{"author":{"_account_id":8776,"name":"Vladimir Sharshov","email":"vsharshov@mirantis.com","username":"warpc"},"change_message_id":"6fb58ffca6bd6a613b4c1d3ea46cf8508c2c2bbc","unresolved":false,"context_lines":[{"line_number":57,"context_line":"      end"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"      def stop"},{"line_number":60,"context_line":"        @watch_thread.wakeup"},{"line_number":61,"context_line":"      end"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    private"}],"source_content_type":"text/x-ruby","patch_set":6,"id":"1a26ad4f_9688e6c6","line":60,"in_reply_to":"1a26ad4f_d299c120","updated":"2015-11-03 14:44:27.000000000","message":"It just start thread @watch_thread, which do nothing and unlock @watch_thread.join (line 56), which is last instruction of worker.\n\nI\u0027l try to avoid endless loop/sleep using 2 thread: main and watch_thread.","commit_id":"d6236878f60ccd6c58f334db92170373dc5222c9"}],"lib/astute/server/worker.rb":[{"author":{"_account_id":8749,"name":"Evgeniy L","email":"eli@mirantis.com","username":"evgeniyl"},"change_message_id":"d23e3aa5eaf0c04db0fe0641896d2ac2a55c3c12","unresolved":false,"context_lines":[{"line_number":28,"context_line":"        super"},{"line_number":29,"context_line":"        start_heartbeat"},{"line_number":30,"context_line":"        Astute::Server::AsyncLogger.start_up(Astute.logger)"},{"line_number":31,"context_line":"        Astute.logger \u003d Astute::Server::AsyncLogger"},{"line_number":32,"context_line":"      end"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"      def stop"}],"source_content_type":"text/x-ruby","patch_set":6,"id":"1a26ad4f_d23541f7","line":31,"updated":"2015-10-30 09:21:44.000000000","message":"Are you sure that we should set async logger globally?","commit_id":"d6236878f60ccd6c58f334db92170373dc5222c9"},{"author":{"_account_id":8749,"name":"Evgeniy L","email":"eli@mirantis.com","username":"evgeniyl"},"change_message_id":"e88861408786ee7403c3496e0cb5eeb5aa382789","unresolved":false,"context_lines":[{"line_number":28,"context_line":"        super"},{"line_number":29,"context_line":"        start_heartbeat"},{"line_number":30,"context_line":"        Astute::Server::AsyncLogger.start_up(Astute.logger)"},{"line_number":31,"context_line":"        Astute.logger \u003d Astute::Server::AsyncLogger"},{"line_number":32,"context_line":"      end"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"      def stop"}],"source_content_type":"text/x-ruby","patch_set":6,"id":"fa80f949_86aa6c6f","line":31,"in_reply_to":"1a26ad4f_61b46634","updated":"2015-11-03 16:18:45.000000000","message":"Mutex on write in ruby logger does the has the same effect, but you don\u0027t need to have separate thread for that.","commit_id":"d6236878f60ccd6c58f334db92170373dc5222c9"},{"author":{"_account_id":8776,"name":"Vladimir Sharshov","email":"vsharshov@mirantis.com","username":"warpc"},"change_message_id":"6fb58ffca6bd6a613b4c1d3ea46cf8508c2c2bbc","unresolved":false,"context_lines":[{"line_number":28,"context_line":"        super"},{"line_number":29,"context_line":"        start_heartbeat"},{"line_number":30,"context_line":"        Astute::Server::AsyncLogger.start_up(Astute.logger)"},{"line_number":31,"context_line":"        Astute.logger \u003d Astute::Server::AsyncLogger"},{"line_number":32,"context_line":"      end"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"      def stop"}],"source_content_type":"text/x-ruby","patch_set":6,"id":"1a26ad4f_61b46634","line":31,"in_reply_to":"1a26ad4f_d23541f7","updated":"2015-11-03 14:44:27.000000000","message":"I think it is good idea to have one thread which will write message in correct order and lock/unlock file inside one process with many threads in one place.","commit_id":"d6236878f60ccd6c58f334db92170373dc5222c9"},{"author":{"_account_id":8749,"name":"Evgeniy L","email":"eli@mirantis.com","username":"evgeniyl"},"change_message_id":"d23e3aa5eaf0c04db0fe0641896d2ac2a55c3c12","unresolved":false,"context_lines":[{"line_number":139,"context_line":"          :port \u003d\u003e Astute.config.broker_port,"},{"line_number":140,"context_line":"          :user \u003d\u003e Astute.config.broker_username,"},{"line_number":141,"context_line":"          :pass \u003d\u003e Astute.config.broker_password,"},{"line_number":142,"context_line":"          :heartbeat \u003d\u003e :server"},{"line_number":143,"context_line":"        }.reject{|k, v| v.nil? }"},{"line_number":144,"context_line":"      end"},{"line_number":145,"context_line":""}],"source_content_type":"text/x-ruby","patch_set":6,"id":"1a26ad4f_9216e953","line":142,"updated":"2015-10-30 09:21:44.000000000","message":"Which is 2 hours :)","commit_id":"d6236878f60ccd6c58f334db92170373dc5222c9"}]}
