CGSpace Notes

Documenting day-to-day work on the CGSpace repository.

June, 2018

2018-06-04

  • Test the DSpace 5.8 module upgrades from Atmire (#378)
    • There seems to be a problem with the CUA and L&R versions in pom.xml because they are using SNAPSHOT and it doesn’t build
  • I added the new CCAFS Phase II Project Tag PII-FP1_PACCA2 and merged it into the 5_x-prod branch (#379)
  • I proofed and tested the ILRI author corrections that Peter sent back to me this week:
$ ./fix-metadata-values.py -i /tmp/2018-05-30-Correct-660-authors.csv -db dspace -u dspace -p 'fuuu' -f dc.contributor.author -t correct -m 3 -n
  • I think a sane proofing workflow in OpenRefine is to apply the custom text facets for check/delete/remove and illegal characters that I developed in March, 2018
  • Time to index ~70,000 items on CGSpace:
$ time schedtool -D -e ionice -c2 -n7 nice -n19 [dspace]/bin/dspace index-discovery -b                                  

real    74m42.646s
user    8m5.056s
sys     2m7.289s

2018-06-06

  • It turns out that I needed to add a server block for atmire.com-snapshots to my Maven settings, so now the Atmire code builds
  • Now Maven and Ant run properly, but I’m getting SQL migration errors in dspace.log after starting Tomcat
  • I’ve updated my ticket on Atmire’s bug tracker: https://tracker.atmire.com/tickets-cgiar-ilri/view-ticket?id=560

2018-06-07

  • Proofing 200 IITA records on DSpace Test for Sisay: IITA_Junel_06 (10568/95391)
    • Mispelled authorship type: CGAIR single center should be: CGIAR single centre
    • I see some encoding errors in author affiliations, for example:
      • Universidade de SÆo Paulo
      • Institut National des Recherches Agricoles du B nin
      • Centre de Coop ration Internationale en Recherche Agronomique pour le D veloppement
      • Institut des Recherches Agricoles du B nin
      • Institut des Savannes, C te d’ Ivoire
      • Institut f r Pflanzenpathologie und Pflanzenschutz der Universit t, Germany
      • Projet de Gestion des Ressources Naturelles, B nin
      • Universit t Hannover
      • Universit F lix Houphouet-Boigny
  • I uploaded fixes for all those now, but I will continue with the rest of the data later
  • Regarding the SQL migration errors, Atmire told me I need to run some migrations manually in PostgreSQL:
delete from schema_version where version = '5.6.2015.12.03.2';
update schema_version set version = '5.6.2015.12.03.2' where version = '5.5.2015.12.03.2';
update schema_version set version = '5.8.2015.12.03.3' where version = '5.5.2015.12.03.3';
  • And then I need to ignore the ignored ones:
$ ~/dspace/bin/dspace database migrate ignored
  • Now DSpace starts up properly!
  • Gabriela from CIP got back to me about the author names we were correcting on CGSpace
  • I did a quick sanity check on them and then did a test import with my fix-metadata-value.py script:
$ ./fix-metadata-values.py -i /tmp/2018-06-08-CIP-Authors.csv -db dspace -u dspace -p 'fuuu' -f dc.contributor.author -t correct -m 3
  • I will apply them on CGSpace tomorrow I think…

2018-06-09

  • It’s pretty annoying, but the JVM monitoring for Munin was never set up when I migrated DSpace Test to its new server a few months ago
  • I ran the tomcat and munin-node tags in Ansible again and now the stuff is all wired up and recording stats properly
  • I applied the CIP author corrections on CGSpace and DSpace Test and re-ran the Discovery indexing

2018-06-10

  • I spent some time removing the Atmire Metadata Quality Module (MQM) from the proposed DSpace 5.8 changes
  • After removing all code mentioning MQM, mqm, metadata-quality, batchedit, duplicatechecker, etc, I think I got most of it removed, but there is a Spring error during Tomcat startup:
 INFO [org.dspace.servicemanager.DSpaceServiceManager] Shutdown DSpace core service manager
Failed to startup the DSpace Service Manager: failure starting up spring service manager: Error creating bean with name 'org.dspace.servicemanager.spring.DSpaceBeanPostProcessor#0' defined in class path resource [spring/spring-dspace-applicationContext.xml]: Unsatisfied dependency expressed through constructor argument with index 0 of type [org.dspace.servicemanager.config.DSpaceConfigurationService]: : Cannot find class [com.atmire.dspace.discovery.ItemCollectionPlugin] for bean with name 'itemCollectionPlugin' defined in file [/home/aorth/dspace/config/spring/api/discovery.xml];
  • I can fix this by commenting out the ItemCollectionPlugin line of discovery.xml, but from looking at the git log I’m not actually sure if that is related to MQM or not
  • I will have to ask Atmire
  • I continued to look at Sisay’s IITA records from last week
    • I normalized all DOIs to use HTTPS and “doi.org” instead of “dx.doi.org”
    • I cleaned up white space in cg.subject.iita and dc.subject
    • Even a bunch of IITA and AGROVOC subjects are missing accents, ie “FERTILIT DU SOL”
    • More organization names in dc.description.sponsorship are incorrect (ie, missing accents) or inconsistent (ie, CGIAR centers should be spelled in English or multiple spellings of the same one, like “Rockefeller Foundation” and “Rockefeller foundation”)
    • A few dozen items have abstracts with character encoding errors, ie:
      • 33.7øC
      • MgSO4ú7H2O
      • ha??1&/sup;
      • En gen6ral
      • dÕpassÕ
    • Also the abstracts have missing accents, ie “recherche sur le d veloppement”
  • I will have to tell IITA people to redo these entirely I think…

2018-06-11

  • Sisay sent a new version of the last IITA records that he created from the original CSV from IITA
  • The 200 records are in the IITA_Junel_11 (10568/95870) collection
  • Many errors:
    • Authorship types: “CGIAR ans advanced research institute”, “CGAIR and advanced research institute”, “CGIAR and advanced research institutes”, “CGAIR single center”
    • Lots of inconsistencies and mispellings in author affiliations:
      • “Institut des Recherches Agricoles du Bénin” and “Institut National des Recherche Agricoles du Benin” and “National Agricultural Research Institute, Benin”
      • International Insitute of Tropical Agriculture
      • Centro Internacional de Agricultura Tropical
      • “Rivers State University of Science and Technology” and “Rivers State University”
      • “Institut de la Recherche Agronomique, Cameroon” and “Institut de Recherche Agronomique, Cameroon”
    • Inconsistency in countries: “COTE D’IVOIRE” and “COTE D’IVOIRE”
    • A few DOIs with spaces or invalid characters
    • Inconsistency in IITA subjects, for example “PRODUCTION VEGETALE” and “PRODUCTION VÉGÉTALE” and several others
    • I ran value.unescape('javascript') on the abstract and citation fields because it looks like this data came from a SQL database and some stuff was escaped
  • It turns out that Abenet actually did a lot of small corrections on this data so when Sisay uses Bosede’s original file it doesn’t have all those corrections
  • So I told Sisay to re-create the collection using Abenet’s XLS from last week (Mercy1805_AY.xls)
  • I was curious to see if I could create a GREL for use with a custom text facet in Open Refine to find cells with two or more consecutive spaces
  • I always use the built-in trim and collapse transformations anyways, but this seems to work to find the offending cells: isNotNull(value.match(/.*?\s{2,}.*?/))
  • I wonder if I should start checking for “smart” quotes like ’ (hex 2019)

2018-06-12

  • Udana from IWMI asked about the OAI base URL for their community on CGSpace
  • Regarding Udana’s Book Chapters and Reports on DSpace Test last week, Abenet told him to fix some character encoding and CRP issues, then I told him I’d check them after that
  • The latest batch of IITA’s 200 records (based on Abenet’s version Mercy1805_AY.xls) are now in the IITA_Jan_9_II_Ab collection
  • So here are some corrections:
    • use of Unicode smart quote (hex 2019) in countries and affiliations, for example “COTE D’IVOIRE” and “Institut d’Economic Rurale, Mali”
    • inconsistencies in cg.contributor.affiliation:
      • “Centro Internacional de Agricultura Tropical” and “Centro International de Agricultura Tropical” should use the English name of CIAT (International Center for Tropical Agriculture)
      • “Institut International d’Agriculture Tropicale” should use the English name of IITA (International Institute of Tropical Agriculture)
      • “East and Southern Africa Regional Center” and “Eastern and Southern Africa Regional Centre”
      • “Institut de la Recherche Agronomique, Cameroon” and “Institut de Recherche Agronomique, Cameroon”
      • “Institut des Recherches Agricoles du Bénin” and “Institut National des Recherche Agricoles du Benin” and “National Agricultural Research Institute, Benin”
      • “Institute of Agronomic Research, Cameroon” and “Institute of Agronomy Research, Cameroon”
      • “Rivers State University” and “Rivers State University of Science and Technology”
      • “Universität Hannover” and “University of Hannover”
    • inconsistencies in cg.subject.iita:
      • “AMELIORATION DES PLANTES” and “AMÉLIORATION DES PLANTES”
      • “PRODUCTION VEGETALE” and “PRODUCTION VÉGÉTALE”
      • “CONTRÔLE DE MALADIES” and “CONTROLE DES MALADIES”
      • “HANDLING, TRANSPORT, STORAGE AND PROTECTION OF AGRICULTURAL PRODUCT” and “HANDLING, TRANSPORT, STORAGE AND PROTECTION OF AGRICULTURAL PRODUCTS”
      • “RAVAGEURS DE PLANTES” and “RAVAGEURS DES PLANTES”
      • “SANTE DES PLANTES” and “SANTÉ DES PLANTES”
      • “SOCIOECONOMIE” and “SOCIOECONOMY”
    • inconsistencies in dc.description.sponsorship:
      • “Belgian Corporation” and “Belgium Corporation”
    • inconsistencies in dc.subject:
      • “AFRICAN CASSAVA MOSAIC” and “AFRICAN CASSAVA MOSAIC DISEASE”
      • “ASPERGILLU FLAVUS” and “ASPERGILLUS FLAVUS”
      • “BIOTECHNOLOGIES” and “BIOTECHNOLOGY”
      • “CASSAVA MOSAIC DISEASE” and “CASSAVA MOSAIC DISEASES” and “CASSAVA MOSAIC VIRUS”
      • “CASSAVA PROCESSING” and “CASSAVA PROCESSING TECHNOLOGY”
      • “CROPPING SYSTEM” and “CROPPING SYSTEMS”
      • “DRY SEASON” and “DRY-SEASON”
      • “FERTILIZER” and “FERTILIZERS”
      • “LEGUME” and “LEGUMES”
      • “LEGUMINOSAE” and “LEGUMINOUS”
      • “LEGUMINOUS COVER CROP” and “LEGUMINOUS COVER CROPS”
      • “MATÉRIEL DE PLANTATION” and “MATÉRIELS DE PLANTATION”
    • I noticed that some records do have encoding errors in the dc.description.abstract field, but only four of them so probably not from Abenet’s handling of the XLS file
    • Based on manually eyeballing the text I used a custom text facet with this GREL to identify the records:
or(
  value.contains('€'),
  value.contains('6g'),
  value.contains('6m'),
  value.contains('6d'),
  value.contains('6e')
)

2018-06-13

  • Elizabeth from CIAT contacted me to ask if I could add ORCID identifiers to all of Robin Buruchara’s items
  • I used my add-orcid-identifiers-csv.py script:
$ ./add-orcid-identifiers-csv.py -i 2018-06-13-Robin-Buruchara.csv -db dspace -u dspace -p 'fuuu'
  • The contents of 2018-06-13-Robin-Buruchara.csv were:
dc.contributor.author,cg.creator.id
"Buruchara, Robin",Robin Buruchara: 0000-0003-0934-1218
"Buruchara, Robin A.",Robin Buruchara: 0000-0003-0934-1218
  • On a hunch I checked to see if CGSpace’s bitstream cleanup was working properly and of course it’s broken:
$ dspace cleanup -v
...
Error: ERROR: update or delete on table "bitstream" violates foreign key constraint "bundle_primary_bitstream_id_fkey" on table "bundle"
  Detail: Key (bitstream_id)=(152402) is still referenced from table "bundle".
  • As always, the solution is to delete that ID manually in PostgreSQL:
$ psql dspace -c 'update bundle set primary_bitstream_id=NULL where primary_bitstream_id in (152402);'
UPDATE 1

2018-06-14

2018-06-24

  • I was restoring a PostgreSQL dump on my test machine and found a way to restore the CGSpace dump as the postgres user, but have the owner of the schema be the dspacetest user:
$ dropdb -h localhost -U postgres dspacetest
$ createdb -h localhost -U postgres -O dspacetest --encoding=UNICODE dspacetest
$ psql -h localhost -U postgres dspacetest -c 'alter user dspacetest superuser;'
$ pg_restore -h localhost -U postgres -d dspacetest -O --role=dspacetest -h localhost /tmp/cgspace_2018-06-24.backup
$ psql -h localhost -U postgres dspacetest -c 'alter user dspacetest nosuperuser;'
  • The -O option to pg_restore makes the import process ignore ownership specified in the dump itself, and instead makes the schema owned by the user doing the restore
  • I always prefer to use the postgres user locally because it’s just easier than remembering the dspacetest user’s password, but then I couldn’t figure out why the resulting schema was owned by postgres
  • So with this you connect as the postgres superuser and then switch roles to dspacetest (also, make sure this user has superuser privileges before the restore)
  • Last week Linode emailed me to say that our Linode 8192 instance used for DSpace Test qualified for an upgrade
  • Apparently they announced some upgrades to most of their plans in 2018-05
  • After the upgrade I see we have more disk space available in the instance’s dashboard, so I shut the instance down and resized it from 98GB to 160GB
  • The resize was very quick (less than one minute) and after booting the instance back up I now have 160GB for the root filesystem!
  • I will move the DSpace installation directory back to the root file system and delete the extra 300GB block storage, as it was actually kinda slow when we put Solr there and now we don’t actually need it anymore because running the production Solr on this instance didn’t work well with 8GB of RAM
  • Also, the larger instance we’re using for CGSpace will go from 24GB of RAM to 32, and will also get a storage increase from 320GB to 640GB… that means we don’t need to consider using block storage right now!
  • The smaller instances get increased storage and network speed but I doubt many are actually using much of their current allocations so we probably don’t need to bother with upgrading them
  • Last week Abenet asked if we could add dc.language.iso to the advanced search filters
  • There is already a search filter for this field defined in discovery.xml but we aren’t using it, so I quickly enabled and tested it, then merged it to the 5_x-prod branch (#380)
  • Back to testing the DSpace 5.8 changes from Atmire, I had another issue with SQL migrations:
Caused by: org.flywaydb.core.api.FlywayException: Validate failed. Found differences between applied migrations and available migrations: Detected applied migration missing on the classpath: 5.8.2015.12.03.3
  • It took me a while to figure out that this migration is for MQM, which I removed after Atmire’s original advice about the migrations so we actually need to delete this migration instead up updating it
  • So I need to make sure to run the following during the DSpace 5.8 upgrade:
-- Delete existing CUA 4 migration if it exists
delete from schema_version where version = '5.6.2015.12.03.2';

-- Update version of CUA 4 migration
update schema_version set version = '5.6.2015.12.03.2' where version = '5.5.2015.12.03.2';

-- Delete MQM migration since we're no longer using it
delete from schema_version where version = '5.5.2015.12.03.3';
  • After that you can run the migrations manually and then DSpace should work fine:
$ ~/dspace/bin/dspace database migrate ignored
...
Done.
  • Elizabeth from CIAT contacted me to ask if I could add ORCID identifiers to all of Andy Jarvis’ items on CGSpace
  • I used my add-orcid-identifiers-csv.py script:
$ ./add-orcid-identifiers-csv.py -i 2018-06-24-andy-jarvis-orcid.csv -db dspacetest -u dspacetest -p 'fuuu'
  • The contents of 2018-06-24-andy-jarvis-orcid.csv were:
dc.contributor.author,cg.creator.id
"Jarvis, A.",Andy Jarvis: 0000-0001-6543-0798
"Jarvis, Andy",Andy Jarvis: 0000-0001-6543-0798
"Jarvis, Andrew",Andy Jarvis: 0000-0001-6543-0798

2018-06-26

  • Atmire got back to me to say that we can remove the itemCollectionPlugin and HasBitstreamsSSIPlugin beans from DSpace’s discovery.xml file, as they are used by the Metadata Quality Module (MQM) that we are not using anymore
  • I removed both those beans and did some simple tests to check item submission, media-filter of PDFs, REST API, but got an error “No matches for the query” when listing records in OAI
  • This warning appears in the DSpace log:
2018-06-26 16:58:12,052 WARN  org.dspace.xoai.services.impl.xoai.DSpaceRepositoryConfiguration @ { OAI 2.0 :: DSpace } Not able to retrieve the dspace.oai.url property from oai.cfg. Falling back to request address
  • It’s actually only a warning and it also appears in the logs on DSpace Test (which is currently running DSpace 5.5), so I need to keep troubleshooting
  • Ah, I think I just need to run dspace oai import

2018-06-27

  • Vika from CIFOR sent back his annotations on the duplicates for the “CIFOR_May_9” archive import that I sent him last week
  • I’ll have to figure out how to separate those we’re keeping, deleting, and mapping into CIFOR’s archive collection
  • First, get the 62 deletes from Vika’s file and remove them from the collection:
$ grep delete 2018-06-22-cifor-duplicates.txt | grep -o -E '[0-9]{5}\/[0-9]{5}' > cifor-handle-to-delete.txt
$ wc -l cifor-handle-to-delete.txt
62 cifor-handle-to-delete.txt
$ wc -l 10568-92904.csv
2461 10568-92904.csv
$ while read line; do sed -i "\#$line#d" 10568-92904.csv; done < cifor-handle-to-delete.txt
$ wc -l 10568-92904.csv
2399 10568-92904.csv
  • This iterates over the handles for deletion and uses sed with an alternative pattern delimiter of ‘#’ (which must be escaped), because the pattern itself contains a ‘/’
  • The mapped ones will be difficult because we need their internal IDs in order to map them, and there are 50 of them:
$ grep map 2018-06-22-cifor-duplicates.txt | grep -o -E '[0-9]{5}\/[0-9]{5}' > cifor-handle-to-map.txt
$ wc -l cifor-handle-to-map.txt
50 cifor-handle-to-map.txt
  • I can either get them from the databse, or programatically export the metadata using dspace metadata-export -i 10568/xxxxx
  • Oooh, I can export the items one by one, concatenate them together, remove the headers, and extract the id and collection columns using csvkit:
$ while read line; do filename=${line/\//-}.csv; dspace metadata-export -i $line -f $filename; done < /tmp/cifor-handle-to-map.txt
$ sed '/^id/d' 10568-*.csv | csvcut -c 1,2 > map-to-cifor-archive.csv
  • Then I can use Open Refine to add the “CIFOR Archive” collection to the mappings
  • Importing the 2398 items via dspace metadata-import ends up with a Java garbage collection error, so I think I need to do it in batches of 1,000
  • After deleting the 62 duplicates, mapping the 50 items from elsewhere in CGSpace, and uploading 2,398 unique items, there are a total of 2,448 items added in this batch
  • I’ll let Abenet take one last look and then move them to CGSpace

2018-06-28

  • DSpace Test appears to have crashed last night
  • There is nothing in the Tomcat or DSpace logs, but I see the following in dmesg -T:
[Thu Jun 28 00:00:30 2018] Out of memory: Kill process 14501 (java) score 701 or sacrifice child
[Thu Jun 28 00:00:30 2018] Killed process 14501 (java) total-vm:14926704kB, anon-rss:5693608kB, file-rss:0kB, shmem-rss:0kB
[Thu Jun 28 00:00:30 2018] oom_reaper: reaped process 14501 (java), now anon-rss:0kB, file-rss:0kB, shmem-rss:0kB
  • Look over IITA’s IITA_Jan_9_II_Ab collection from earlier this month on DSpace Test
  • Bosede fixed a few things (and seems to have removed many French IITA subjects like AMÉLIORATION DES PLANTES and SANTÉ DES PLANTES)
  • I still see at least one issue with author affiliations, and I didn’t bother to check the AGROVOC subjects because it’s such a mess aanyways
  • I suggested that IITA provide an updated list of subject to us so we can include their controlled vocabulary in CGSpace, which would also make it easier to do automated validation