)]}'
{"taskflow/jobs/backends/impl_zookeeper.py":[{"author":{"_account_id":10165,"name":"Marco Morais","email":"mmorais@yahoo-inc.com","username":"mmorais"},"change_message_id":"1cc36c427b26f392c290d8e919c12f4ccc283a74","unresolved":false,"context_lines":[{"line_number":231,"context_line":"    the lock file that was previously created will just be removed."},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"    *Special features:*"},{"line_number":234,"context_line":"        * A \u0027.tombstone\u0027 file can be placed in the path where jobs will be"},{"line_number":235,"context_line":"          located, it can be used to trigger all users of this jobboard to"},{"line_number":236,"context_line":"          be unable to further post jobs (and also stop new connections"},{"line_number":237,"context_line":"          from occurring). This allows for current board users to claim and"}],"source_content_type":"text/x-python","patch_set":3,"id":"7adec928_c51d7a68","line":234,"updated":"2014-05-09 07:34:05.000000000","message":"how come I don\u0027t see any method for creating the tombstone (say by an admin client) in the api?","commit_id":"91903d0cc0e65739019f8b335630cb597c2e3262"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"765e655c0ade32f8012e5c2e624fccef673ee66e","unresolved":false,"context_lines":[{"line_number":231,"context_line":"    the lock file that was previously created will just be removed."},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"    *Special features:*"},{"line_number":234,"context_line":"        * A \u0027.tombstone\u0027 file can be placed in the path where jobs will be"},{"line_number":235,"context_line":"          located, it can be used to trigger all users of this jobboard to"},{"line_number":236,"context_line":"          be unable to further post jobs (and also stop new connections"},{"line_number":237,"context_line":"          from occurring). This allows for current board users to claim and"}],"source_content_type":"text/x-python","patch_set":3,"id":"7adec928_25effe1f","line":234,"in_reply_to":"7adec928_c51d7a68","updated":"2014-05-09 07:53:15.000000000","message":"Probably should be a new api and not in this one. Easy for anyone to just make a zookeeper node via any of X ways. Perhaps in future there can be some kind of adminboard or something.","commit_id":"91903d0cc0e65739019f8b335630cb597c2e3262"},{"author":{"_account_id":10165,"name":"Marco Morais","email":"mmorais@yahoo-inc.com","username":"mmorais"},"change_message_id":"1cc36c427b26f392c290d8e919c12f4ccc283a74","unresolved":false,"context_lines":[{"line_number":394,"context_line":"            for path in removals:"},{"line_number":395,"context_line":"                self._remove_job(path)"},{"line_number":396,"context_line":""},{"line_number":397,"context_line":"        # Do not process new jobs if we are (or are supposed to be) dead"},{"line_number":398,"context_line":"        if self._dead:"},{"line_number":399,"context_line":"            return"},{"line_number":400,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"7adec928_ca93c9f8","line":397,"updated":"2014-05-09 07:34:05.000000000","message":"checking for the tombstone at the time of posting seems fine as a backstop, but wouldn\u0027t clients want to register an exists watch on tombstone and shouldn\u0027t that be part of the JobBoard/NotifyingJobBoard api\n\nbtw: take this with a very tiny grain, I am still trying to understand how such callbacks would fit into the *flow*","commit_id":"91903d0cc0e65739019f8b335630cb597c2e3262"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"f763384c782650d1f88f2212d1076ddef8262afb","unresolved":false,"context_lines":[{"line_number":394,"context_line":"            for path in removals:"},{"line_number":395,"context_line":"                self._remove_job(path)"},{"line_number":396,"context_line":""},{"line_number":397,"context_line":"        # Do not process new jobs if we are (or are supposed to be) dead"},{"line_number":398,"context_line":"        if self._dead:"},{"line_number":399,"context_line":"            return"},{"line_number":400,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"7adec928_4188771f","line":397,"in_reply_to":"7adec928_05bbe2e5","updated":"2014-05-09 15:17:43.000000000","message":"That sounds like exposing watches to people using this jobboard; which makes it impossible to have other jobboard implementations (say one based on redis or etc.d which have been discussed). I\u0027m fine with having that information in this object, but not exposing it, though we already do get notified of children being added and removed by having a childrenwatch on /jobs/, so I\u0027m not sure why adding a specific node watch on the .tombstone file would be that beneficial (seems like duplicated info that we already get anyway).","commit_id":"91903d0cc0e65739019f8b335630cb597c2e3262"},{"author":{"_account_id":10165,"name":"Marco Morais","email":"mmorais@yahoo-inc.com","username":"mmorais"},"change_message_id":"7d823cacc8c712ce6f2f7345d434a819396355f5","unresolved":false,"context_lines":[{"line_number":394,"context_line":"            for path in removals:"},{"line_number":395,"context_line":"                self._remove_job(path)"},{"line_number":396,"context_line":""},{"line_number":397,"context_line":"        # Do not process new jobs if we are (or are supposed to be) dead"},{"line_number":398,"context_line":"        if self._dead:"},{"line_number":399,"context_line":"            return"},{"line_number":400,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"7adec928_05bbe2e5","line":397,"in_reply_to":"7adec928_a5da2e76","updated":"2014-05-09 08:07:18.000000000","message":"clients will create a watch on tombstone exists [1] and when they receive that notification, rather than polling the job board until the tombstone is removed, they create a second watch on tombstone delete\n\nexample from zk cli below:\n\n    [zk: 127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183(CONNECTED) 12] ls /\n    [zookeeper]\n    [zk: 127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183(CONNECTED) 13] create /jobs \"\"\n    Created /jobs\n    [zk: 127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183(CONNECTED) 14] stat /jobs/.tombstone true\n    Node does not exist: /jobs/.tombstone\n    [zk: 127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183(CONNECTED) 15] create /jobs/.tombstone \"\"\n\n    WATCHER::\n\n    WatchedEvent state:SyncConnected type:NodeCreated path:/jobs/.tombstone\n    Created /jobs/.tombstone\n    [zk: 127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183(CONNECTED) 16] stat /jobs/.tombstone true\n    cZxid \u003d 0x90000000a\n    ctime \u003d Fri May 09 08:03:20 UTC 2014\n    mZxid \u003d 0x90000000a\n    mtime \u003d Fri May 09 08:03:20 UTC 2014\n    pZxid \u003d 0x90000000a\n    cversion \u003d 0 \n    dataVersion \u003d 0 \n    aclVersion \u003d 0 \n    ephemeralOwner \u003d 0x0 \n    dataLength \u003d 2 \n    numChildren \u003d 0 \n    [zk: 127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183(CONNECTED) 17] create -s /jobs/job- \"\"\n    Created /jobs/job-0000000001\n    [zk: 127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183(CONNECTED) 18] delete /jobs/.tombstone\n\n    WATCHER::\n\n    WatchedEvent state:SyncConnected type:NodeDeleted path:/jobs/.tombstone\n\n\n[1] http://zookeeper.apache.org/doc/r3.4.6/api/org/apache/zookeeper/ZooKeeper.html#exists(java.lang.String, org.apache.zookeeper.Watcher, org.apache.zookeeper.AsyncCallback.StatCallback, java.lang.Object)\n\n[2] http://zookeeper.apache.org/doc/r3.4.6/api/index.html?org/apache/zookeeper/package-summary.html","commit_id":"91903d0cc0e65739019f8b335630cb597c2e3262"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"765e655c0ade32f8012e5c2e624fccef673ee66e","unresolved":false,"context_lines":[{"line_number":394,"context_line":"            for path in removals:"},{"line_number":395,"context_line":"                self._remove_job(path)"},{"line_number":396,"context_line":""},{"line_number":397,"context_line":"        # Do not process new jobs if we are (or are supposed to be) dead"},{"line_number":398,"context_line":"        if self._dead:"},{"line_number":399,"context_line":"            return"},{"line_number":400,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"7adec928_a5da2e76","line":397,"in_reply_to":"7adec928_ca93c9f8","updated":"2014-05-09 07:53:15.000000000","message":"Which clients are u thinking of here? Could fire notification for this appearing if that\u0027s what u are thinking, seems reasonable.","commit_id":"91903d0cc0e65739019f8b335630cb597c2e3262"}]}
