From 4280ad7388ad14eeab9530944ed05ea0e6f11fe1 Mon Sep 17 00:00:00 2001 From: Alan Orth Date: Tue, 9 Jun 2020 12:28:04 +0300 Subject: [PATCH] Update notes --- content/posts/2020-06.md | 205 ++++++++++++++++++ docs/2020-06/index.html | 18 +- ...stgres_connections_ALL-year-dspacetest.png | Bin 0 -> 10767 bytes ...stgres_connections_ALL-year-dspacetest.png | Bin 0 -> 10767 bytes 4 files changed, 221 insertions(+), 2 deletions(-) create mode 100644 docs/2020/06/postgres_connections_ALL-year-dspacetest.png create mode 100644 static/2020/06/postgres_connections_ALL-year-dspacetest.png diff --git a/content/posts/2020-06.md b/content/posts/2020-06.md index a5a6d6843..cac326f26 100644 --- a/content/posts/2020-06.md +++ b/content/posts/2020-06.md @@ -129,4 +129,209 @@ sys 3m13.929s - Unfortunately the item is still not showing up in the item mapper... - Something happened to AReS Explorer (linode20) so I ran all system updates and rebooted it +## 2020-06-07 + +- Peter said he was annoyed with a CSV export from CGSpace because of the different `text_lang` attributes and asked if we can fix it +- The last time I normalized these was in 2019-06, and currently it looks like this: + +``` +dspace=# SELECT DISTINCT text_lang, count(text_lang) FROM metadatavalue WHERE resource_type_id=2 GROUP BY text_lang ORDER BY count DESC; + text_lang | count +-------------+--------- + en_US | 2158377 + en | 149540 + | 49206 + es_ES | 18 + fr | 4 + Peer Review | 1 + | 0 +(7 rows) +``` + +- In theory we can have different languages for metadata fields but in practice we don't do that, so we might as well normalize everything to "en_US" (and perhaps I should make a curation task to do this) +- For now I will do it manually on CGSpace and DSpace Test: + +``` +dspace=# UPDATE metadatavalue SET text_lang='en_US' WHERE resource_type_id=2; +UPDATE 2414738 +``` + +- Note: DSpace Test doesn't have the `resource_type_id` column because it's running DSpace 6 and [the schema changed to use an object model there](https://wiki.lyrasis.org/display/DSPACE/DSpace+Service+based+api) + - We need to use this on DSpace 6: + +``` +dspace=# UPDATE metadatavalue SET text_lang='en_US' WHERE dspace_object_id IN (SELECT uuid FROM item); +``` + +- Peter asked if it was possible to find all ILRI items that have "zoonoses" or "zoonotic" in their titles and check if they have the ILRI subject "ZOONOTIC DISEASES" (and add it if not) + - Unfortunately the only way we have currently would be to export the entire ILRI community as a CSV and filter/edit it in OpenRefine + +## 2020-06-08 + +- I manually mapped the two Big Data items that Maria had asked about last week by exporting their metadata to CSV and re-importing it + - I still need to look into the underlying issue there, seems to be something in Solr + - Something strang is that, when I search for part of the title in Discovery I get 2,000 results on CGSpace, while on my local DSpace 5.8 environment I get 2! + +![CGSpace Discovery search results](/cgspace-notes/2020/06/cgspace-discovery-search.png) + +![CGSpace Discovery search results](/cgspace-notes/2020/06/localhost-discovery-search.png) + +- On DSpace Test, which is currently running DSpace 6, I get 2,000 results but the top one is the correct match and the item does show up in the item mapper + - Interestingly, if I search directly in the Solr `search` core on CGSpace with a query like `handle:10568/108315` I don't see the item, but on my local Solr I see them! +- Peter asked if it was easy for me to add ILRI subject "ZOONOTIC DISEASES" to any items in the ILRI community that had "zoonotic" or "zoonoses" in their title, but were missing the ILRI subject + - I exported the ILRI community metadata, cut the three fields I needed, and then filtered and edited the CSV in OpenRefine: + +``` +$ dspace metadata-export -i 10568/1 -f /tmp/2020-06-08-ILRI.csv +$ csvcut -c 'id,cg.subject.ilri[en_US],dc.title[en_US]' ~/Downloads/2020-06-08-ILRI.csv > /tmp/ilri.csv +``` + +- Moayad asked why he's getting HTTP 500 errors on CGSpace + - I looked in the Nginx logs and I see some HTTP 500 responses, but nothing in nginx's error.log + - Looking in Tomcat's log I see there are many: + +``` +# journalctl --since=today -u tomcat7 | grep -c 'Internal Server Error' +482 +``` + +- They are all related to the REST API, like: + +``` +Jun 07 02:00:27 linode18 tomcat7[6286]: SEVERE: Mapped exception to response: 500 (Internal Server Error) +Jun 07 02:00:27 linode18 tomcat7[6286]: javax.ws.rs.WebApplicationException +Jun 07 02:00:27 linode18 tomcat7[6286]: at org.dspace.rest.Resource.processException(Resource.java:151) +Jun 07 02:00:27 linode18 tomcat7[6286]: at org.dspace.rest.ItemsResource.getItems(ItemsResource.java:195) +Jun 07 02:00:27 linode18 tomcat7[6286]: at sun.reflect.GeneratedMethodAccessor548.invoke(Unknown Source) +Jun 07 02:00:27 linode18 tomcat7[6286]: at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) +Jun 07 02:00:27 linode18 tomcat7[6286]: at java.lang.reflect.Method.invoke(Method.java:498) +Jun 07 02:00:27 linode18 tomcat7[6286]: at com.sun.jersey.spi.container.JavaMethodInvokerFactory$1.invoke(JavaMethodInvokerFactory.java:60) +... +``` + +- And: + +``` +Jun 08 09:28:29 linode18 tomcat7[6286]: SEVERE: Mapped exception to response: 500 (Internal Server Error) +Jun 08 09:28:29 linode18 tomcat7[6286]: javax.ws.rs.WebApplicationException +Jun 08 09:28:29 linode18 tomcat7[6286]: at org.dspace.rest.Resource.processFinally(Resource.java:169) +Jun 08 09:28:29 linode18 tomcat7[6286]: at org.dspace.rest.HandleResource.getObject(HandleResource.java:81) +Jun 08 09:28:29 linode18 tomcat7[6286]: at sun.reflect.GeneratedMethodAccessor360.invoke(Unknown Source) +Jun 08 09:28:29 linode18 tomcat7[6286]: at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) +Jun 08 09:28:29 linode18 tomcat7[6286]: at java.lang.reflect.Method.invoke(Method.java:498) +``` + +- And: + +``` +Jun 06 08:19:54 linode18 tomcat7[6286]: SEVERE: Mapped exception to response: 500 (Internal Server Error) +Jun 06 08:19:54 linode18 tomcat7[6286]: javax.ws.rs.WebApplicationException +Jun 06 08:19:54 linode18 tomcat7[6286]: at org.dspace.rest.Resource.processException(Resource.java:151) +Jun 06 08:19:54 linode18 tomcat7[6286]: at org.dspace.rest.CollectionsResource.getCollectionItems(CollectionsResource.java:289) +Jun 06 08:19:54 linode18 tomcat7[6286]: at sun.reflect.GeneratedMethodAccessor598.invoke(Unknown Source) +Jun 06 08:19:54 linode18 tomcat7[6286]: at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) +Jun 06 08:19:54 linode18 tomcat7[6286]: at java.lang.reflect.Method.invoke(Method.java:498) +``` + +- Looking back, I see ~800 of these errors since I changed the database configuration last week: + +``` +# journalctl --since=2020-06-04 --until=today -u tomcat7 | grep -c 'javax.ws.rs.WebApplicationException' +795 +``` + +- And only ~280 in the entire month before that... + +``` +# journalctl --since=2020-05-01 --until=2020-06-04 -u tomcat7 | grep -c 'javax.ws.rs.WebApplicationException' +286 +``` + +- So it seems to be related to the database, perhaps that there are less connections in the pool? + - ... and on that note, working without the JDBC driver and DSpace's built-in connection pool since 2020-06-04 hasn't actually solved anything, the issue with locks and idle in transaction connections is creeping up again! + +![PostgreSQL connections day](/cgspace-notes/2020/06/postgres_connections_ALL-day2.png) +![PostgreSQL connections week](/cgspace-notes/2020/06/postgres_connections_ALL-week2.png) + +- It seems to have started today around 10:00 AM... I need to pore over the logs to see if there is a correlation + - I think there is some kind of attack going on because I see a bunch of requests for sequential Handles from a similar IP range in a datacenter in Sweden where the user *does not* re-use their DSpace `session_id` + - Looking in the nginx logs I see most (all?) of these requests are using the following user agent: + +``` +Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36 +``` + +- Looking at the nginx access logs I see that, other than something that seems like Google Feedburner, all hosts using this user agent are all in Sweden! + +``` +# zcat --force /var/log/nginx/access.log /var/log/nginx/access.log.1 /var/log/nginx/access.log.*.gz | grep 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' | grep -v '/feed' | awk '{print $1}' | sort | uniq -c | sort -n + 1624 192.36.136.246 + 1627 192.36.241.95 + 1629 192.165.45.204 + 1636 192.36.119.28 + 1641 192.36.217.7 + 1648 192.121.146.160 + 1648 192.36.23.35 + 1651 192.36.109.94 + 1659 192.36.24.93 + 1665 192.36.154.13 + 1679 192.36.137.125 + 1682 192.176.249.42 + 1682 192.36.166.120 + 1683 192.36.172.86 + 1683 192.36.198.145 + 1689 192.36.226.212 + 1702 192.121.136.49 + 1704 192.36.207.54 + 1740 192.36.121.98 + 1774 192.36.173.93 +``` + +- The earliest I see any of these hosts is 2020-06-05 (three days ago) +- I will purge them from the Solr statistics and add them to abusive IPs ipset in the Ansible deployment scripts + +``` +$ ./check-spider-ip-hits.sh -f /tmp/ips -s statistics -p +Purging 1423 hits from 192.36.136.246 in statistics +Purging 1387 hits from 192.36.241.95 in statistics +Purging 1398 hits from 192.165.45.204 in statistics +Purging 1413 hits from 192.36.119.28 in statistics +Purging 1418 hits from 192.36.217.7 in statistics +Purging 1418 hits from 192.121.146.160 in statistics +Purging 1416 hits from 192.36.23.35 in statistics +Purging 1449 hits from 192.36.109.94 in statistics +Purging 1440 hits from 192.36.24.93 in statistics +Purging 1465 hits from 192.36.154.13 in statistics +Purging 1447 hits from 192.36.137.125 in statistics +Purging 1453 hits from 192.176.249.42 in statistics +Purging 1462 hits from 192.36.166.120 in statistics +Purging 1499 hits from 192.36.172.86 in statistics +Purging 1457 hits from 192.36.198.145 in statistics +Purging 1467 hits from 192.36.226.212 in statistics +Purging 1489 hits from 192.121.136.49 in statistics +Purging 1478 hits from 192.36.207.54 in statistics +Purging 1502 hits from 192.36.121.98 in statistics +Purging 1544 hits from 192.36.173.93 in statistics + +Total number of bot hits purged: 29025 +``` + +- Skype with Enrico, Moayad, Jane, Peter, and Abenet to see the latest OpenRXV/AReS developments + - One thing Enrico mentioned to me during the call was that they had issues with Altmetric's user agents, and he said they are apparently using `Altmetribot` and `Postgenomic V2` + - I looked in our logs and indeed we have those, so I will add them to the nginx rate limit bypass + - I checked the Solr stats and it seems there are only a few thousand in 2016 and a few hundred in other years so I won't bother adding it to the DSpace robot user agents list +- Atmire sent an updated pull request for the Font Awesome 5 update for CUA ([#445](https://github.com/ilri/DSpace/pull/445)) so I filed feedback on [their tracker](https://tracker.atmire.com/tickets-cgiar-ilri/view-ticket?id=706) + +## 2020-06-09 + +- I'm still thinking about the issue with PostgreSQL "idle in transaction" and "waiting for lock" connections + - As far as I can see from the Munin graphs this issue started in late April or early May + - I don't see any PostgreSQL updates around then, though I did update Tomcat to version 7.0.103 in March + - I will try to downgrade Tomcat to 7.0.99, which was the version I was using until early February, before we had seen any issues + - Also, I will use the PostgreSQL JDBC driver version 42.2.9, which is what we were using back then as well + - After deploying Tomcat 7.0.99 I had to restart Tomcat three times before all the Solr statistics cores came up OK +- Well look at that, the "idle in transaction" and locking issues started in April on DSpace Test too... + +![PostgreSQL connections year DSpace Test](/cgspace-notes/2020/06/postgres_connections_ALL-day2.png) + diff --git a/docs/2020-06/index.html b/docs/2020-06/index.html index a0a60f7a3..1bd01245b 100644 --- a/docs/2020-06/index.html +++ b/docs/2020-06/index.html @@ -43,7 +43,7 @@ I tried to build the OAI registry on the freshly migrated DSpace 6 on DSpace Tes "@type": "BlogPosting", "headline": "June, 2020", "url": "https://alanorth.github.io/cgspace-notes/2020-06/", - "wordCount": "2127", + "wordCount": "2263", "datePublished": "2020-06-01T13:55:39+03:00", "dateModified": "2020-06-06T13:33:23+03:00", "author": { @@ -262,7 +262,7 @@ sys 3m13.929s
  • The last time I normalized these was in 2019-06, and currently it looks like this:
  • dspace=# SELECT DISTINCT text_lang, count(text_lang) FROM metadatavalue WHERE resource_type_id=2 GROUP BY text_lang ORDER BY count DESC;
    -  text_lang  |  count  
    +  text_lang  |  count
     -------------+---------
      en_US       | 2158377
      en          |  149540
    @@ -449,6 +449,20 @@ Total number of bot hits purged: 29025
     
     
  • Atmire sent an updated pull request for the Font Awesome 5 update for CUA (#445) so I filed feedback on their tracker
  • +

    2020-06-09

    +
      +
    • I’m still thinking about the issue with PostgreSQL “idle in transaction” and “waiting for lock” connections +
        +
      • As far as I can see from the Munin graphs this issue started in late April or early May
      • +
      • I don’t see any PostgreSQL updates around then, though I did update Tomcat to version 7.0.103 in March
      • +
      • I will try to downgrade Tomcat to 7.0.99, which was the version I was using until early February, before we had seen any issues
      • +
      • Also, I will use the PostgreSQL JDBC driver version 42.2.9, which is what we were using back then as well
      • +
      • After deploying Tomcat 7.0.99 I had to restart Tomcat three times before all the Solr statistics cores came up OK
      • +
      +
    • +
    • Well look at that, the “idle in transaction” and locking issues started in April on DSpace Test too…
    • +
    +

    PostgreSQL connections year DSpace Test

    diff --git a/docs/2020/06/postgres_connections_ALL-year-dspacetest.png b/docs/2020/06/postgres_connections_ALL-year-dspacetest.png new file mode 100644 index 0000000000000000000000000000000000000000..4e454a575214a0ca5fe0d050e3fcc157748174e2 GIT binary patch literal 10767 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