home / github

Menu
  • Search all tables
  • GraphQL API

issue_comments

Table actions
  • GraphQL API for issue_comments

5 rows where "updated_at" is on date 2020-08-15 sorted by updated_at descending

✎ View and edit SQL

This data as json, CSV (advanced)

Suggested facets: issue_url, created_at (date), updated_at (date)

user 2

  • simonw 4
  • codecov[bot] 1

issue 2

  • db.execute_write_fn(create_tables, block=True) hangs a thread if connection fails 3
  • Don't hang in db.execute_write_fn() if connection fails 2

author_association 2

  • OWNER 4
  • NONE 1
id html_url issue_url node_id user created_at updated_at ▲ author_association body reactions issue performed_via_github_app
674453772 https://github.com/simonw/datasette/pull/936#issuecomment-674453772 https://api.github.com/repos/simonw/datasette/issues/936 MDEyOklzc3VlQ29tbWVudDY3NDQ1Mzc3Mg== codecov[bot] 22429695 2020-08-15T22:35:29Z 2020-08-15T22:35:29Z NONE

Codecov Report

Merging #936 into main will increase coverage by 0.02%. The diff coverage is n/a.

```diff @@ Coverage Diff @@

main #936 +/-

========================================== + Coverage 84.02% 84.04% +0.02%
========================================== Files 28 28
Lines 3774 3774
========================================== + Hits 3171 3172 +1
+ Misses 603 602 -1
```

| Impacted Files | Coverage Δ | | |---|---|---| | datasette/app.py | 96.18% <0.00%> (+0.18%) | :arrow_up: |


Continue to review full report at Codecov.

Legend - Click here to learn more Δ = absolute <relative> (impact), ø = not affected, ? = missing data Powered by Codecov. Last update 13b3b51...94a68b9. Read the comment docs.

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
Don't hang in db.execute_write_fn() if connection fails 679650632  
674453318 https://github.com/simonw/datasette/pull/936#issuecomment-674453318 https://api.github.com/repos/simonw/datasette/issues/936 MDEyOklzc3VlQ29tbWVudDY3NDQ1MzMxOA== simonw 9599 2020-08-15T22:29:15Z 2020-08-15T22:32:58Z OWNER

Test failure: ``` tests/test_canned_queries.py F

captured stdout >>> enter traceback >>>

canned_write_client = <datasette.utils.testing.TestClient object at 0x108ec5040>

def test_insert(canned_write_client):
    response = canned_write_client.post(
        "/data/add_name",
        {"name": "Hello"},
        allow_redirects=False,
        csrftoken_from=True,
        cookies={"foo": "bar"},
    )
    assert 302 == response.status
  assert "/data/add_name?success" == response.headers["Location"]

E AssertionError: assert '/data/add_name?success' == '/data/add_name' E - /data/add_name E + /data/add_name?success E ? ++++++++

/Users/simon/Dropbox/Development/datasette/tests/test_canned_queries.py:66: AssertionError ``` No idea why this change would affect that test.

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
Don't hang in db.execute_write_fn() if connection fails 679650632  
674451012 https://github.com/simonw/datasette/issues/935#issuecomment-674451012 https://api.github.com/repos/simonw/datasette/issues/935 MDEyOklzc3VlQ29tbWVudDY3NDQ1MTAxMg== simonw 9599 2020-08-15T21:56:13Z 2020-08-15T21:56:13Z OWNER

This implementation seems to fix it, need to work out how to test though. ```diff diff --git a/datasette/database.py b/datasette/database.py index ffa7a79..7ba1456 100644 --- a/datasette/database.py +++ b/datasette/database.py @@ -89,14 +89,22 @@ class Database: def _execute_writes(self): # Infinite looping thread that protects the single write connection # to this database - conn = self.connect(write=True) + conn_exception = None + conn = None + try: + conn = self.connect(write=True) + except Exception as e: + conn_exception = e while True: task = self._write_queue.get() - try: - result = task.fn(conn) - except Exception as e: - print(e) - result = e + if conn_exception is not None: + result = conn_exception + else: + try: + result = task.fn(conn) + except Exception as e: + print(e) + result = e task.reply_queue.sync_q.put(result)

 async def execute_fn(self, fn):

```

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
db.execute_write_fn(create_tables, block=True) hangs a thread if connection fails 679646710  
674450652 https://github.com/simonw/datasette/issues/935#issuecomment-674450652 https://api.github.com/repos/simonw/datasette/issues/935 MDEyOklzc3VlQ29tbWVudDY3NDQ1MDY1Mg== simonw 9599 2020-08-15T21:51:22Z 2020-08-15T21:51:22Z OWNER

The easiest way to recreate this is to attempt a write against an immutable database, which triggers this assertion error:

https://github.com/simonw/datasette/blob/13b3b51087964d5e1a8c1cdd2495e07bdbe176b8/datasette/database.py#L47-L55

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
db.execute_write_fn(create_tables, block=True) hangs a thread if connection fails 679646710  
674450607 https://github.com/simonw/datasette/issues/935#issuecomment-674450607 https://api.github.com/repos/simonw/datasette/issues/935 MDEyOklzc3VlQ29tbWVudDY3NDQ1MDYwNw== simonw 9599 2020-08-15T21:50:41Z 2020-08-15T21:50:41Z OWNER

The bug is here:

https://github.com/simonw/datasette/blob/13b3b51087964d5e1a8c1cdd2495e07bdbe176b8/datasette/database.py#L89-L100

If conn = self.connect(write=True) raises an exception the entire server hangs, like this: ``` % datasette -i fixtures.db --get /
Exception in thread Thread-1: Traceback (most recent call last): File "/usr/local/opt/python@3.8/Frameworks/Python.framework/Versions/3.8/lib/python3.8/threading.py", line 932, in _bootstrap_inner self.run() File "/usr/local/opt/python@3.8/Frameworks/Python.framework/Versions/3.8/lib/python3.8/threading.py", line 870, in run self._target(self._args, *self._kwargs) File "/Users/simon/.local/share/virtualenvs/latest-datasette-with-all-plugins-PJL_Xy9e/lib/python3.8/site-packages/datasette/database.py", line 92, in _execute_writes conn = self.connect(write=True) File "/Users/simon/.local/share/virtualenvs/latest-datasette-with-all-plugins-PJL_Xy9e/lib/python3.8/site-packages/datasette/database.py", line 55, in connect assert not (write and not self.is_mutable) AssertionError

... server hangs here ... ```

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
db.execute_write_fn(create_tables, block=True) hangs a thread if connection fails 679646710  

Advanced export

JSON shape: default, array, newline-delimited, object

CSV options:

CREATE TABLE [issue_comments] (
   [html_url] TEXT,
   [issue_url] TEXT,
   [id] INTEGER PRIMARY KEY,
   [node_id] TEXT,
   [user] INTEGER REFERENCES [users]([id]),
   [created_at] TEXT,
   [updated_at] TEXT,
   [author_association] TEXT,
   [body] TEXT,
   [reactions] TEXT,
   [issue] INTEGER REFERENCES [issues]([id])
, [performed_via_github_app] TEXT);
CREATE INDEX [idx_issue_comments_issue]
                ON [issue_comments] ([issue]);
CREATE INDEX [idx_issue_comments_user]
                ON [issue_comments] ([user]);
Powered by Datasette · Queries took 462.902ms · About: github-to-sqlite