)]}'
{
  "commit": "36a9b824137dd1a57ee8d5e23dc6f3bd57ee243f",
  "tree": "66cc19fbb7151e29a180f16c525f842ba8668f05",
  "parents": [
    "886c5c9fa56abac081bf5094c64f314a49e36062"
  ],
  "author": {
    "name": "David Pursehouse",
    "email": "dpursehouse@collab.net",
    "time": "Wed Sep 06 11:41:54 2017 +0000"
  },
  "committer": {
    "name": "Gerrit Code Review",
    "email": "noreply-gerritcodereview@google.com",
    "time": "Wed Sep 06 09:40:53 2017 +0000"
  },
  "message": "Update git submodules\n\n* Update plugins/replication from branch \u0027master\u0027\n  - Merge \"Merge branch \u0027stable-2.14\u0027\"\n  - Merge branch \u0027stable-2.14\u0027\n    \n    * stable-2.14:\n      Fix minor nits in documentation of replication.maxRetries\n      Use rescheduleDelay instead of replicationDelay when rescheduling\n      Fix race condition when scheduling a replication\n    \n    Change-Id: I45c6f5a266709e2ce85d2140f13e4ece7da69341\n    \n  - Fix minor nits in documentation of replication.maxRetries\n    \n    Change-Id: I80e46269e12b9e7a429634dd90ce52e90cc6ad79\n    \n  - Use rescheduleDelay instead of replicationDelay when rescheduling\n    \n    The replicationDelay was used for two purposes:\n    a) initial delay to schedule a replication\n    b) delay when rescheduling the replication due to an in-flight push\n    \n    The replicationDelay could be set to zero, which make sense for the case a) but\n    doesn\u0027t make sense for the case b). Actually, when replicationDelay is set to\n    zero, the case b) will cause an excessive number of retries (over 1K/second) and\n    will also fire a replication failed event for each retry. The latter is yet\n    another issue and will be addressed in another change.\n    \n    Introduce a new config parameter rescheduleDelay and use it for the\n    case b). Make sure it cannot bet set to a value lower than 3 seconds to\n    avoid the same issue.\n    \n    In order to keep backwards compabitility with using the replicationDelay\n    as rescheduleDelay, a plugin init step is added. For each remote section\n    which doesn\u0027t already define rescheduleDelay, it will set rescheduleDelay\n    to the current value of the replicationDelay, unless replicationDelay is\n    set to zero. In the latter case it will assume the default value for\n    the rescheduleDelay.\n    \n    Change-Id: Ia78f46460b531b04ee36ec2d5ab4228dba5c0c50\n    \n  - Fix race condition when scheduling a replication\n    \n    The state of PushOne object was modified after the operation was scheduled.\n    Depending on the delay parameter the PushOne.run() could be called before (when\n    the delay is zero or close to zero) or after (longer delay) the current thread\n    calls e.addState(ref, state). Thus, the thread executing PushOne.run() may or\n    may not see the update of its stateMap. Further, the stateMap is a\n    LinkedListMultimap which is not thread safe and the PushOne doesn\u0027t synchronize\n    access to it.\n    \n    Change-Id: Ib26a5933a7993a6d2f0501e5daaf06a7892e597f\n    ",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "297b749038153527291b43cb08b162eb475adcd7",
      "old_mode": 57344,
      "old_path": "plugins/replication",
      "new_id": "643d635a4502e2a2df6cb02edade88bad3fd953a",
      "new_mode": 57344,
      "new_path": "plugins/replication"
    }
  ]
}
