Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

GDCC/Globus and Big Data Support #8891

Merged
merged 215 commits into from
Sep 19, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
215 commits
Select commit Hold shift + click to select a range
c5e8e2d
Update develop with globus phase1
lubitchv Sep 14, 2020
beea5bc
Remove flyway
lubitchv Sep 30, 2020
9ca568d
Download with Globus
lubitchv Oct 9, 2020
9c6e851
add logs for publishing file validation
lubitchv Oct 14, 2020
2fb9106
Check for globus file checksum before publishing
lubitchv Oct 14, 2020
bc9e4c8
Merge pull request #76 from IQSS/develop
lubitchv Oct 19, 2020
230013b
applied manually remove flyway script
lubitchv Oct 19, 2020
e1ad7d6
add logs for publishing
lubitchv Oct 19, 2020
5f754d1
Removr SiteMapUtilTest
lubitchv Oct 19, 2020
f443c73
MD5 checksum
lubitchv Oct 20, 2020
f799c7b
add back SiteMap test
lubitchv Oct 21, 2020
40de0af
downloadPopupRequired removed globus
lubitchv Oct 21, 2020
c02301f
downloadPopupRequired filelevel globus removed
lubitchv Oct 21, 2020
38b04f8
New checksum test
lubitchv Oct 22, 2020
0905db5
New checksum test 2
lubitchv Oct 22, 2020
254c4b7
Storage locatioin test
lubitchv Oct 22, 2020
718d0eb
Storage locatioin test 3
lubitchv Oct 22, 2020
5418fb8
Storage locatioin test 4
lubitchv Oct 22, 2020
25bedba
s3 input stream test
lubitchv Oct 22, 2020
3c27aea
test
lubitchv Oct 22, 2020
bef7e3c
test
lubitchv Oct 22, 2020
7752cdf
test
lubitchv Oct 22, 2020
9cf09f7
test
lubitchv Oct 22, 2020
d6a7561
test
lubitchv Oct 22, 2020
432f9cb
add logs
lubitchv Oct 23, 2020
0591f7f
publishing globus not minor
lubitchv Oct 23, 2020
e7e0742
add message
lubitchv Oct 23, 2020
f167118
remove message
lubitchv Oct 23, 2020
28c7ba0
testing S3 url connection
JayanthyChengan Nov 26, 2020
f5bdbaf
testing S3 url connection
JayanthyChengan Nov 26, 2020
615c1ff
testing S3 url connection
JayanthyChengan Nov 26, 2020
2117475
DAT353 - removed hardcoded credential information
JayanthyChengan Nov 30, 2020
2f6a080
Merge pull request #78 from scholarsportal/Jayanthy-develop-globus-ph…
JayanthyChengan Nov 30, 2020
fc2adb4
GlobusAPI call refactored
JayanthyChengan Dec 22, 2020
5348a16
Merge pull request #79 from scholarsportal/Jayanthy-develop-globus-ph…
JayanthyChengan Dec 22, 2020
d9eaeed
DAT353 - removed hardcoded credential information
JayanthyChengan Jan 4, 2021
e6d499b
Merge pull request #80 from scholarsportal/Jayanthy-develop-globus-ph…
JayanthyChengan Jan 4, 2021
c89400d
correction to api/datasets/$id/add call
JayanthyChengan Jan 4, 2021
560879d
Merge pull request #81 from scholarsportal/Jayanthy-develop-globus-ph…
JayanthyChengan Jan 4, 2021
dea2dad
correction to api/datasets/$id/add call
JayanthyChengan Jan 4, 2021
d9be368
DAT353 - removed hardcoded credential information
JayanthyChengan Jan 4, 2021
4fb9742
Merge pull request #82 from scholarsportal/Jayanthy-develop-globus-ph…
JayanthyChengan Jan 4, 2021
1536220
calculate mimeType
JayanthyChengan Jan 5, 2021
99a5823
changed method of public
JayanthyChengan Jan 5, 2021
8c8a2f0
Merge pull request #83 from scholarsportal/Jayanthy-develop-globus-ph…
JayanthyChengan Jan 5, 2021
73942b9
dataset lock issue while submitting multiple files to datasets/:persi…
JayanthyChengan Jan 5, 2021
fca67ff
DAT353 - removed hardcoded credential information
JayanthyChengan Jan 12, 2021
02b1cfb
Merge pull request #84 from scholarsportal/Jayanthy-develop-globus-ph…
JayanthyChengan Jan 12, 2021
073d97e
restructured the API response object
JayanthyChengan Jan 12, 2021
c80602a
Merge pull request #85 from scholarsportal/Jayanthy-develop-globus-ph…
JayanthyChengan Jan 12, 2021
b84587b
moved the globus api into Datasets.java
JayanthyChengan Jan 18, 2021
0e2f1cf
Merge pull request #86 from scholarsportal/Jayanthy-develop-globus-ph…
JayanthyChengan Jan 18, 2021
36fd45c
multiple files lock issue resolved
JayanthyChengan Jan 19, 2021
7e47a13
Merge pull request #87 from scholarsportal/Jayanthy-develop-globus-ph…
JayanthyChengan Jan 19, 2021
416ad7a
debugging - ingest process during globus API call
JayanthyChengan Jan 19, 2021
0eecb93
Merge pull request #88 from scholarsportal/Jayanthy-develop-globus-ph…
JayanthyChengan Jan 19, 2021
fc5ed42
correction to globusAPI
JayanthyChengan Jan 20, 2021
71f3176
Merge pull request #89 from scholarsportal/Jayanthy-develop-globus-ph…
JayanthyChengan Jan 20, 2021
8fc88d7
fix for mimetype calculation
JayanthyChengan Jan 26, 2021
0344bbc
Merge pull request #90 from scholarsportal/Jayanthy-develop-globus-ph…
JayanthyChengan Jan 26, 2021
68888bf
- add lock to the dataset page when the Globus API call is executing.
JayanthyChengan Feb 1, 2021
4968c11
Merge pull request #91 from scholarsportal/Jayanthy-develop-globus-ph…
JayanthyChengan Feb 1, 2021
38a1d38
globusAPI initial commit
JayanthyChengan Feb 10, 2021
66a4ca0
debug 1
JayanthyChengan Feb 11, 2021
b9689b3
Resolved Globus API for multiple files input (dv version 5.3 )
JayanthyChengan Feb 16, 2021
f8b7c3e
Removed unwanted statements
JayanthyChengan Feb 16, 2021
d6480aa
mimeType is calculated only from file extension
JayanthyChengan Feb 16, 2021
4de0231
Merge remote-tracking branch 'Remote/develop' into sp-globus-api
JayanthyChengan Feb 17, 2021
9e7e3f1
Merge remote-tracking branch 'Remote/develop' into sp-globus-api
JayanthyChengan Feb 17, 2021
0102e31
Merge remote-tracking branch 'origin/sp-globus-api' into develop-glob…
JayanthyChengan Feb 17, 2021
2213418
corrected compilation errors
JayanthyChengan Feb 18, 2021
c10989d
Merge remote-tracking branch 'Remote/develop' into develop-globus-pha…
JayanthyChengan Feb 18, 2021
b6f8f0f
sql scripts
JayanthyChengan Mar 1, 2021
ca52caf
Merge remote-tracking branch 'Remote/develop' into develop-globus-pha…
JayanthyChengan Mar 1, 2021
4147211
datasetlock for globusupload
JayanthyChengan Mar 1, 2021
07516b2
datasetlock for globusupload
JayanthyChengan Mar 1, 2021
2fa243a
Globus API upgrade
JayanthyChengan Mar 16, 2021
99a1ecf
merge with develop iqss
JayanthyChengan Mar 16, 2021
282063e
corrected few variables
JayanthyChengan Mar 16, 2021
a5413c8
hardcoded httpRequestUrl
JayanthyChengan Mar 18, 2021
f143326
- tweak datasetlock,
JayanthyChengan Mar 19, 2021
6cd23a1
- tweak datasetlock,
JayanthyChengan Mar 24, 2021
491fe42
- delete globus permission
JayanthyChengan Mar 29, 2021
bc5edf0
- added GLOBUSUPLOADSUCCESS notification type and user notification m…
JayanthyChengan Mar 30, 2021
e680031
Merge remote-tracking branch 'Remote/develop' into develop-globus-pha…
JayanthyChengan Mar 31, 2021
1435202
corrected error
JayanthyChengan Mar 31, 2021
c3ff229
api to delete globus rule and added notification
JayanthyChengan Apr 1, 2021
12e2e6e
correction to verify ruleID existence, added ChecksumDatasetSizeLimit…
JayanthyChengan Apr 8, 2021
c07caaf
Merge remote-tracking branch 'Remote/develop' into develop-globus-pha…
JayanthyChengan Apr 9, 2021
ad48ad7
cleanup : removed redundant code from Phase 1
JayanthyChengan Apr 19, 2021
e6823b8
Merge remote-tracking branch 'Remote/develop' into develop-globus-pha…
JayanthyChengan Apr 19, 2021
a4531f5
update
JayanthyChengan Apr 20, 2021
dc9b971
added errormessages in the email notification after the globus transfer
JayanthyChengan Apr 26, 2021
9dfdb2f
remove lock, if globus transfer failed due to GC not connected
JayanthyChengan Apr 26, 2021
21ff777
Merge remote-tracking branch 'SP/develop' into develop-globus-phase2.1
JayanthyChengan Aug 24, 2021
92fb5da
Merge branch '8043-skip-checksum-if-overlimit' into develop-globus-ph…
JayanthyChengan Aug 24, 2021
e2c765f
Merge remote-tracking branch 'SP/develop' into develop-globus-phase2.1
JayanthyChengan Aug 24, 2021
04ac399
-
JayanthyChengan Aug 24, 2021
f9c34d2
-
JayanthyChengan Aug 24, 2021
af8cced
-
JayanthyChengan Aug 25, 2021
1d3cd11
Merge remote-tracking branch 'SP/develop' into develop-globus-phase2.1
JayanthyChengan Sep 8, 2021
e3bdb52
Merge branch 'develop' into develop-globus-phase2.1
JayanthyChengan Feb 3, 2022
963d299
Merge remote-tracking branch 'origin/develop' into develop-globus-pha…
JayanthyChengan Feb 3, 2022
a7ec3bf
Merge branch 'develop' into develop-globus-phase2.1
JayanthyChengan Feb 3, 2022
5feb2c1
- removed old method
JayanthyChengan Feb 3, 2022
231c68d
-
JayanthyChengan Feb 9, 2022
80a8b2d
Merge remote-tracking branch 'IQSS/develop' into GDCC/DC-1
qqmyers Feb 10, 2022
b78075c
Merge remote-tracking branch 'IQSS/develop' into GDCC/DC-1
qqmyers Mar 15, 2022
bde3f3d
Merge remote-tracking branch 'IQSS/develop' into GDCC/DC-1
qqmyers Mar 22, 2022
4504e00
Merge remote-tracking branch 'IQSS/develop' into GDCC/DC-1
qqmyers Apr 14, 2022
adca68b
Merge branch 'IQSS/7324_TRSA-HTTP-store' into GDCC/DC-1
qqmyers Apr 27, 2022
6f1f543
Merge branch 'IQSS/7324_TRSA-HTTP-store' into GDCC/DC-1
qqmyers Apr 29, 2022
6fd22b1
typos
qqmyers May 10, 2022
99fc91b
logging, todos
qqmyers May 19, 2022
2d87615
Merge remote-tracking branch 'IQSS/develop' into GDCC/DC-1
qqmyers May 19, 2022
8dd6421
Merge remote-tracking branch 'IQSS/develop' into GDCC/DC-1
qqmyers Jun 6, 2022
1b5f5ae
refactor to allow getting driverId directly
qqmyers Jun 7, 2022
9759eb8
provide access to new dataverse.files.<id>.public store flag
qqmyers Jun 7, 2022
f29c6b9
use store flag as default if PublicInstall isn't set
qqmyers Jun 7, 2022
d7b0e43
cleanup
qqmyers Jun 7, 2022
407bfda
use new public flag for stores in UI
qqmyers Jun 7, 2022
ac66254
potential fix for #8781
qqmyers Jun 7, 2022
83a1d76
get effective store
qqmyers Jun 8, 2022
a7856ac
cut/paste logic error re: remote tag
qqmyers Jun 8, 2022
a93afc6
don't allow restrict when public during data create
qqmyers Jun 10, 2022
d372ff6
don't allow restrict on public from file page
qqmyers Jun 10, 2022
ec362c5
update warning text
qqmyers Jun 13, 2022
2b25fc7
add public warning for file page
qqmyers Jun 13, 2022
58dc4f8
Merge remote-tracking branch 'IQSS/develop' into GDCC/DC-1
qqmyers Jun 20, 2022
4899822
refactor to allow URL token substitution outside tools framework
qqmyers Jun 21, 2022
4d5aff0
add globus icon
qqmyers Jun 21, 2022
59a2a85
adjust comment
qqmyers Jun 21, 2022
00ae85e
message fix
qqmyers Jun 24, 2022
68161eb
drop debug logging
qqmyers Jun 24, 2022
13499d0
Add Globus xfer in upload panel
qqmyers Jun 24, 2022
cdaa28b
move globus calls to globus bean, doc Lock issue, cleaunup
qqmyers Jun 24, 2022
4a1d15b
move add lock before removing old one
qqmyers Jun 24, 2022
5a3e22f
refactor to avoid second get task call to Globus
qqmyers Jun 24, 2022
e3ad262
cleanup
qqmyers Jun 24, 2022
73fc847
provide access to storage prefix
qqmyers Jun 24, 2022
4e85993
fix logger name
qqmyers Jun 29, 2022
011881b
refactor getDownloadURL, add GlobusTransfer
qqmyers Jun 29, 2022
d7d411d
initial test to add GT option
qqmyers Jun 29, 2022
6925fd8
add GlobusTransfer download mechanism
qqmyers Jul 1, 2022
31c16c5
swap to test globusDownload allowed
qqmyers Jul 1, 2022
9ddaa94
add logging
qqmyers Jul 1, 2022
c645aea
i18n download, use icon
qqmyers Jul 1, 2022
013b5f6
force lowercase for hash values - that's what is generated internally
qqmyers Jul 5, 2022
0f7fc76
log mismatched checksum values
qqmyers Jul 5, 2022
0a8dcb7
refactor for download redirect in remoteoverlaystore
qqmyers Jul 8, 2022
c1fa462
Merge remote-tracking branch 'IQSS/develop' into GDCC/DC-1
qqmyers Jul 25, 2022
c376a47
merge issue
qqmyers Jul 26, 2022
b46e0fd
support passthrough for uploading files
qqmyers Jul 26, 2022
a7f001c
refactor to allow URL token substitution outside tools framework
qqmyers Jun 21, 2022
9764442
Merge remote-tracking branch 'IQSS/develop' into GDCC/DC1
qqmyers Aug 3, 2022
425b3bd
Apply suggestions from code review
qqmyers Aug 4, 2022
0599ea5
switch to hyphens per review
qqmyers Aug 4, 2022
d636509
reduce variations on trusted remote store
qqmyers Aug 4, 2022
adc16f7
add signer tests, flip param order so sign/validate match, fix val bug
qqmyers Aug 4, 2022
9397a58
update secret-key, cleanup
qqmyers Aug 5, 2022
5410b46
Add tests/add support for local file base store tests
qqmyers Aug 5, 2022
626dbf4
sign even for internal access
qqmyers Aug 5, 2022
01ad650
add an API test for local dev/testing #7324
pdurbin Aug 5, 2022
2ab6246
Capitalize FileDetailsHolder, reformat for reviewDog
qqmyers Aug 5, 2022
c6e362c
per reviewDog
qqmyers Aug 5, 2022
607d8b1
remove unused imports
qqmyers Aug 5, 2022
1e3f6da
add links
qqmyers Aug 5, 2022
3865e22
partial update
qqmyers Aug 5, 2022
ef17dd1
add some validation and test
qqmyers Aug 5, 2022
13a7cf4
remote store docs
qqmyers Aug 5, 2022
85ebefa
typo in method name
qqmyers Aug 5, 2022
ea6ee80
Merge remote-tracking branch 'IQSS/develop' into GDCC/DC-1
qqmyers Aug 8, 2022
59b286d
Error handling or default on required params
qqmyers Aug 8, 2022
7b11b11
sanity check to make sure driver being specified in addFile exists
qqmyers Aug 8, 2022
13dcf07
only get value from json once
qqmyers Aug 8, 2022
682c947
also fix typo in xhtml
qqmyers Aug 8, 2022
efacedc
add separate downloadRedirectEnabled for aux objects method
qqmyers Aug 9, 2022
3f1f820
check baseStore redirect setting for aux files
qqmyers Aug 9, 2022
93c1004
globus guide docs
qqmyers Aug 12, 2022
3558a0b
Merge remote-tracking branch 'IQSS/develop' into GDCC/DC-1
qqmyers Aug 12, 2022
d2a6a87
Merge remote-tracking branch 'IQSS/develop' into GDCC/DC-1
qqmyers Aug 16, 2022
ff2f137
Merge branch 'IQSS/7324_TRSA-HTTP-store' into GDCC/DC-1
qqmyers Aug 17, 2022
f271e7d
typo
qqmyers Aug 17, 2022
826c60e
Merge branch 'IQSS/7324_TRSA-HTTP-store' into GDCC/DC-1
qqmyers Aug 17, 2022
a97aaeb
Add test for bad remote URLs
qqmyers Aug 18, 2022
90a4b7f
note re 404 URLs
qqmyers Aug 18, 2022
9fa6b21
Merge remote-tracking branch 'IQSS/develop' into GDCC/DC-1
qqmyers Aug 18, 2022
de2d8b3
Merge remote-tracking branch 'IQSS/develop' into GDCC/DC-1
qqmyers Aug 18, 2022
08a2b48
add constructor for dataset/datafile for Globus download
qqmyers Aug 29, 2022
a243db6
nest if to avoid refresh of aipitoken for guest
qqmyers Aug 29, 2022
84b393c
handle null mimetype
qqmyers Aug 30, 2022
360d2c5
Merge remote-tracking branch 'IQSS/develop' into GDCC/DC-1
qqmyers Sep 2, 2022
ee153e0
Add dataset-level Globus download
qqmyers Sep 14, 2022
8bad275
Make file-level globus download optional
qqmyers Sep 14, 2022
6a9a6b7
change setting name per review, add doc re: single file setting
qqmyers Sep 14, 2022
5c2d4e8
alter download info
qqmyers Sep 14, 2022
40c9ba1
update youtube link per review
qqmyers Sep 14, 2022
3dfb8f2
Apply suggestions from code review
qqmyers Sep 14, 2022
fd321fe
Merge branch 'GDCC/DC-1' of https://github.com/GlobalDataverseCommuni…
qqmyers Sep 14, 2022
5e79f04
Merge branch 'develop' into GDCC/DC-1 #8891
pdurbin Sep 14, 2022
77cbc3a
refactor per qa
qqmyers Sep 14, 2022
1fb6186
Merge branch 'GDCC/DC-1' of https://github.com/GlobalDataverseCommuni…
qqmyers Sep 14, 2022
2809122
make polling configurable per qa
qqmyers Sep 14, 2022
b714cf7
message/email tweaks
qqmyers Sep 14, 2022
a7055fb
cut/paste error
qqmyers Sep 15, 2022
3320036
fix Boolean conversion
qqmyers Sep 15, 2022
aa8e1d2
simplify messages
qqmyers Sep 16, 2022
26a7a72
word change per QA re: checking status
qqmyers Sep 16, 2022
c938320
fix bullets #8891
pdurbin Sep 16, 2022
9d8f0e6
doc suggestions #8891
pdurbin Sep 16, 2022
eda456b
Merge pull request #29 from pdurbin/8891-doc-suggestions
qqmyers Sep 16, 2022
c352da8
fix mimetype detection when using temp file copy #7527
qqmyers Jul 8, 2022
272dd4d
add test to check that java.io.File name is not used
qqmyers Jul 8, 2022
93c7347
Merge branch 'develop' into GDCC/DC-1 #8891
pdurbin Sep 19, 2022
c554ecc
rename test to avoid naming conflict #8891
pdurbin Sep 19, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 28 additions & 0 deletions doc/sphinx-guides/source/developers/big-data-support.rst
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,34 @@ To configure the options mentioned above, an administrator must set two JVM opti
``./asadmin create-jvm-options "-Ddataverse.files.<id>.public=true"``
``./asadmin create-jvm-options "-Ddataverse.files.<id>.ingestsizelimit=<size in bytes>"``

.. _globus-support:

Globus File Transfer
--------------------

Note: Globus file transfer is still experimental but feedback is welcome! See :ref:`support`.

Users can transfer files via `Globus <ttps://www.globus.org>`_ into and out of datasets when their Dataverse installation is configured to use a Globus accessible S3 store and a community-developed `dataverse-globus <https://github.com/scholarsportal/dataverse-globus>`_ "transfer" app has been properly installed and configured.

Due to differences in the access control models of a Dataverse installation and Globus, enabling the Globus capability on a store will disable the ability to restrict and embargo files in that store.

As Globus aficionados know, Globus endpoints can be in a variety of places, from data centers to personal computers. This means that from within the Dataverse software, a Globus transfer can feel like an upload or a download (with Globus Personal Connect running on your laptop, for example) or it can feel like a true transfer from one server to another (from a cluster in a data center into a Dataverse dataset or vice versa).

Globus transfer uses a very efficient transfer mechanism and has additional features that make it suitable for large files and large numbers of files:

* robust file transfer capable of restarting after network or endpoint failures
* third-party transfer, which enables a user accessing a Dataverse installation in their desktop browser to initiate transfer of their files from a remote endpoint (i.e. on a local high-performance computing cluster), directly to an S3 store managed by the Dataverse installation

Globus transfer requires use of the Globus S3 connector which requires a paid Globus subscription at the host institution. Users will need a Globus account which could be obtained via their institution or directly from Globus (at no cost).

The setup required to enable Globus is described in the `Community Dataverse-Globus Setup and Configuration document <https://docs.google.com/document/d/1mwY3IVv8_wTspQC0d4ddFrD2deqwr-V5iAGHgOy4Ch8/edit?usp=sharing>`_ and the references therein.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd much prefer that content be put into the guides themselves rather than Google Docs. Can it be moved?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The doc has info about Dataverse, Globus, and the dataverse-globus app, so if we move its contents, we may want to split it between at least the Dataverse and dataverse-globus app repos? Up to you.


As described in that document, Globus transfers can be initiated by choosing the Globus option in the dataset upload panel. (Globus, which does asynchronous transfers, is not available during dataset creation.) Analogously, "Globus Transfer" is one of the download options in the "Access Dataset" menu and optionally the file landing page download menu (if/when supported in the dataverse-globus app).

An overview of the control and data transfer interactions between components was presented at the 2022 Dataverse Community Meeting and can be viewed in the `Integrations and Tools Session Video <https://youtu.be/3ek7F_Dxcjk?t=5289>`_ around the 1 hr 28 min mark.

See also :ref:`Globus settings <:GlobusBasicToken>`.

Data Capture Module (DCM)
-------------------------

Expand Down
34 changes: 33 additions & 1 deletion doc/sphinx-guides/source/installation/config.rst
Original file line number Diff line number Diff line change
Expand Up @@ -676,7 +676,7 @@ In addition to having the type "remote" and requiring a label, Trusted Remote St
These and other available options are described in the table below.

Trusted remote stores can range from being a static trusted website to a sophisticated service managing access requests and logging activity
and/or managing access to a secure enclave. For specific remote stores, consult their documentation when configuring the remote store in your Dataverse installation.
and/or managing access to a secure enclave. See :doc:`/developers/big-data-support` for additional information on how to use a trusted remote store. For specific remote stores, consult their documentation when configuring the remote store in your Dataverse installation.

Note that in the current implementation, activites where Dataverse needs access to data bytes, e.g. to create thumbnails or validate hash values at publication will fail if a remote store does not allow Dataverse access. Implementers of such trusted remote stores should consider using Dataverse's settings to disable ingest, validation of files at publication, etc. as needed.

Expand Down Expand Up @@ -2982,3 +2982,35 @@ The URL of an LDN Inbox to which the LDN Announce workflow step will send messag
++++++++++++++++++++++++++

The list of parent dataset field names for which the LDN Announce workflow step should send messages. See :doc:`/developers/workflows` for details.

.. _:GlobusBasicToken:

:GlobusBasicToken
+++++++++++++++++

GlobusBasicToken encodes credentials for Globus integration. See :ref:`globus-support` for details.

:GlobusEndpoint
+++++++++++++++

GlobusEndpoint is Globus endpoint id used with Globus integration. See :ref:`globus-support` for details.

:GlobusStores
+++++++++++++

A comma-separated list of the S3 stores that are configured to support Globus integration. See :ref:`globus-support` for details.

:GlobusAppURL
+++++++++++++

The URL where the `dataverse-globus <https://github.com/scholarsportal/dataverse-globus>`_ "transfer" app has been deployed to support Globus integration. See :ref:`globus-support` for details.

:GlobusPollingInterval
++++++++++++++++++++++

The interval in seconds between Dataverse calls to Globus to check on upload progress. Defaults to 50 seconds. See :ref:`globus-support` for details.

:GlobusSingleFileTransfer
+++++++++++++++++++++++++

A true/false option to add a Globus transfer option to the file download menu which is not yet fully supported in the dataverse-globus app. See :ref:`globus-support` for details.
5 changes: 4 additions & 1 deletion src/main/java/edu/harvard/iq/dataverse/DatasetLock.java
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,10 @@ public enum Reason {

/** DCM (rsync) upload in progress */
DcmUpload,


/** Globus upload in progress */
GlobusUpload,

/** Tasks handled by FinalizeDatasetPublicationCommand:
Registering PIDs for DS and DFs and/or file validation */
finalizePublication,
Expand Down
67 changes: 50 additions & 17 deletions src/main/java/edu/harvard/iq/dataverse/DatasetPage.java
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,7 @@
import edu.harvard.iq.dataverse.engine.command.impl.SubmitDatasetForReviewCommand;
import edu.harvard.iq.dataverse.externaltools.ExternalTool;
import edu.harvard.iq.dataverse.externaltools.ExternalToolServiceBean;
import edu.harvard.iq.dataverse.globus.GlobusServiceBean;
import edu.harvard.iq.dataverse.export.SchemaDotOrgExporter;
import edu.harvard.iq.dataverse.externaltools.ExternalToolHandler;
import edu.harvard.iq.dataverse.makedatacount.MakeDataCountLoggingServiceBean;
Expand Down Expand Up @@ -251,6 +252,8 @@ public enum DisplayMode {
LicenseServiceBean licenseServiceBean;
@Inject
DataFileCategoryServiceBean dataFileCategoryService;
@Inject
GlobusServiceBean globusService;

private Dataset dataset = new Dataset();

Expand Down Expand Up @@ -334,7 +337,7 @@ public void setSelectedHostDataverse(Dataverse selectedHostDataverse) {
private Boolean hasRsyncScript = false;

private Boolean hasTabular = false;


/**
* If the dataset version has at least one tabular file. The "hasTabular"
Expand Down Expand Up @@ -1191,7 +1194,7 @@ public String getComputeUrl(FileMetadata metadata) {
} catch (IOException e) {
logger.info("DatasetPage: Failed to get storageIO");
}
if (settingsWrapper.isTrueForKey(SettingsServiceBean.Key.PublicInstall, false)) {
if (isHasPublicStore()) {
return settingsWrapper.getValueForKey(SettingsServiceBean.Key.ComputeBaseUrl) + "?" + this.getPersistentId() + "=" + swiftObject.getSwiftFileName();
}

Expand Down Expand Up @@ -1828,15 +1831,21 @@ public void updateOwnerDataverse() {

// initiate from scratch: (isolate the creation of a new dataset in its own method?)
init(true);
// rebuild the bred crumbs display:
// rebuild the bread crumbs display:
dataverseHeaderFragment.initBreadcrumbs(dataset);
}
}

public boolean rsyncUploadSupported() {

return settingsWrapper.isRsyncUpload() && DatasetUtil.isAppropriateStorageDriver(dataset);
return settingsWrapper.isRsyncUpload() && DatasetUtil.isRsyncAppropriateStorageDriver(dataset);
}

public boolean globusUploadSupported() {
return settingsWrapper.isGlobusUpload() && settingsWrapper.isGlobusEnabledStorageDriver(dataset.getEffectiveStorageDriverId());
}



private String init(boolean initFull) {

Expand Down Expand Up @@ -2006,10 +2015,10 @@ private String init(boolean initFull) {
}
} catch (RuntimeException ex) {
logger.warning("Problem getting rsync script(RuntimeException): " + ex.getLocalizedMessage());
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Problem getting rsync script:", ex.getLocalizedMessage()));
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Problem getting rsync script:", ex.getLocalizedMessage()));
} catch (CommandException cex) {
logger.warning("Problem getting rsync script (Command Exception): " + cex.getLocalizedMessage());
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Problem getting rsync script:", cex.getLocalizedMessage()));
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Problem getting rsync script:", cex.getLocalizedMessage()));
}
}

Expand Down Expand Up @@ -2065,7 +2074,7 @@ private String init(boolean initFull) {
updateDatasetFieldInputLevels();
}

if (settingsWrapper.isTrueForKey(SettingsServiceBean.Key.PublicInstall, false)){
if (isHasPublicStore()){
JH.addMessage(FacesMessage.SEVERITY_WARN, BundleUtil.getStringFromBundle("dataset.message.label.fileAccess"),
BundleUtil.getStringFromBundle("dataset.message.publicInstall"));
}
Expand Down Expand Up @@ -2178,6 +2187,10 @@ private void displayLockInfo(Dataset dataset) {
BundleUtil.getStringFromBundle("file.rsyncUpload.inProgressMessage.details"));
lockedDueToDcmUpload = true;
}
if (dataset.isLockedFor(DatasetLock.Reason.GlobusUpload)) {
JH.addMessage(FacesMessage.SEVERITY_WARN, BundleUtil.getStringFromBundle("file.globusUpload.inProgressMessage.summary"),
BundleUtil.getStringFromBundle("file.globusUpload.inProgressMessage.details"));
}
//This is a hack to remove dataset locks for File PID registration if
//the dataset is released
//in testing we had cases where datasets with 1000 files were remaining locked after being published successfully
Expand Down Expand Up @@ -2899,7 +2912,7 @@ public String editFileMetadata(){

public String deleteDatasetVersion() {
DeleteDatasetVersionCommand cmd;

Map<Long, String> deleteStorageLocations = datafileService.getPhysicalFilesToDelete(dataset.getLatestVersion());
boolean deleteCommandSuccess = false;
try {
Expand All @@ -2911,7 +2924,7 @@ public String deleteDatasetVersion() {
JH.addMessage(FacesMessage.SEVERITY_FATAL, BundleUtil.getStringFromBundle("dataset.message.deleteFailure"));
logger.severe(ex.getMessage());
}

if (deleteCommandSuccess && !deleteStorageLocations.isEmpty()) {
datafileService.finalizeFileDeletes(deleteStorageLocations);
}
Expand Down Expand Up @@ -5026,7 +5039,7 @@ public boolean isFileAccessRequestMultiButtonRequired(){
}
for (FileMetadata fmd : workingVersion.getFileMetadatas()){
//Change here so that if all restricted files have pending requests there's no Request Button
if ((!this.fileDownloadHelper.canDownloadFile(fmd) && (fmd.getDataFile().getFileAccessRequesters() == null
if ((!this.fileDownloadHelper.canDownloadFile(fmd) && (fmd.getDataFile().getFileAccessRequesters() == null
|| ( fmd.getDataFile().getFileAccessRequesters() != null
&& !fmd.getDataFile().getFileAccessRequesters().contains((AuthenticatedUser)session.getUser()))))){
return true;
Expand Down Expand Up @@ -5754,7 +5767,7 @@ public boolean isFileDeleted (DataFile dataFile) {

return dataFile.getDeleted();
}

public String getEffectiveMetadataLanguage() {
return getEffectiveMetadataLanguage(false);
}
Expand All @@ -5765,16 +5778,16 @@ public String getEffectiveMetadataLanguage(boolean ofParent) {
}
return mdLang;
}

public String getLocaleDisplayName(String code) {
String displayName = settingsWrapper.getBaseMetadataLanguageMap(false).get(code);
if(displayName==null && !code.equals(DvObjectContainer.UNDEFINED_METADATA_LANGUAGE_CODE)) {
//Default (for cases such as :when a Dataset has a metadatalanguage code but :MetadataLanguages is no longer defined).
displayName = new Locale(code).getDisplayName();
displayName = new Locale(code).getDisplayName();
}
return displayName;
return displayName;
}

public Set<Entry<String, String>> getMetadataLanguages() {
return settingsWrapper.getBaseMetadataLanguageMap(false).entrySet();
}
Expand All @@ -5786,7 +5799,7 @@ public List<String> getVocabScripts() {
public String getFieldLanguage(String languages) {
return fieldService.getFieldLanguage(languages,session.getLocaleCode());
}

public void setExternalStatus(String status) {
try {
dataset = commandEngine.submit(new SetCurationStatusCommand(dvRequestService.getDataverseRequest(), dataset, status));
Expand Down Expand Up @@ -6017,7 +6030,7 @@ public void validateTerms(FacesContext context, UIComponent component, Object va
}
}
}

public boolean downloadingRestrictedFiles() {
if (fileMetadataForAction != null) {
return fileMetadataForAction.isRestricted();
Expand All @@ -6029,4 +6042,24 @@ public boolean downloadingRestrictedFiles() {
}
return false;
}


//Determines whether this Dataset uses a public store and therefore doesn't support embargoed or restricted files
public boolean isHasPublicStore() {
return settingsWrapper.isTrueForKey(SettingsServiceBean.Key.PublicInstall, StorageIO.isPublicStore(dataset.getEffectiveStorageDriverId()));
}

public void startGlobusTransfer() {
ApiToken apiToken = null;
User user = session.getUser();
if (user instanceof AuthenticatedUser) {
apiToken = authService.findApiTokenByUser((AuthenticatedUser) user);
} else if (user instanceof PrivateUrlUser) {
PrivateUrlUser privateUrlUser = (PrivateUrlUser) user;
PrivateUrl privUrl = privateUrlService.getPrivateUrlFromDatasetId(privateUrlUser.getDatasetId());
apiToken = new ApiToken();
apiToken.setTokenString(privUrl.getToken());
}
PrimeFaces.current().executeScript(globusService.getGlobusDownloadScript(dataset, apiToken));
}
}
21 changes: 11 additions & 10 deletions src/main/java/edu/harvard/iq/dataverse/DatasetServiceBean.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,23 +16,17 @@
import edu.harvard.iq.dataverse.engine.command.impl.FinalizeDatasetPublicationCommand;
import edu.harvard.iq.dataverse.engine.command.impl.GetDatasetStorageSizeCommand;
import edu.harvard.iq.dataverse.export.ExportService;
import edu.harvard.iq.dataverse.globus.GlobusServiceBean;
import edu.harvard.iq.dataverse.harvest.server.OAIRecordServiceBean;
import edu.harvard.iq.dataverse.search.IndexServiceBean;
import edu.harvard.iq.dataverse.settings.SettingsServiceBean;
import edu.harvard.iq.dataverse.util.BundleUtil;
import edu.harvard.iq.dataverse.util.SystemConfig;
import edu.harvard.iq.dataverse.workflows.WorkflowComment;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;

import java.io.*;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.*;
import java.util.logging.FileHandler;
import java.util.logging.Level;
import java.util.logging.Logger;
Expand Down Expand Up @@ -96,6 +90,12 @@ public class DatasetServiceBean implements java.io.Serializable {
@EJB
SystemConfig systemConfig;

@EJB
GlobusServiceBean globusServiceBean;

@EJB
UserNotificationServiceBean userNotificationService;

private static final SimpleDateFormat logFormatter = new SimpleDateFormat("yyyy-MM-dd'T'HH-mm-ss");

@PersistenceContext(unitName = "VDCNet-ejbPU")
Expand Down Expand Up @@ -1130,4 +1130,5 @@ public void deleteHarvestedDataset(Dataset dataset, DataverseRequest request, Lo
hdLogger.warning("Failed to destroy the dataset");
}
}

}
21 changes: 17 additions & 4 deletions src/main/java/edu/harvard/iq/dataverse/EditDatafilesPage.java
Original file line number Diff line number Diff line change
Expand Up @@ -650,8 +650,8 @@ public String init() {
setUpRsync();
}

if (settingsService.isTrueForKey(SettingsServiceBean.Key.PublicInstall, false)){
JH.addMessage(FacesMessage.SEVERITY_WARN, getBundleString("dataset.message.publicInstall"));
if (isHasPublicStore()){
JH.addMessage(FacesMessage.SEVERITY_WARN, getBundleString("dataset.message.label.fileAccess"), getBundleString("dataset.message.publicInstall"));
}

return null;
Expand Down Expand Up @@ -3051,13 +3051,21 @@ public boolean rsyncUploadSupported() {
// ToDo - rsync was written before multiple store support and currently is hardcoded to use the DataAccess.S3 store.
// When those restrictions are lifted/rsync can be configured per store, the test in the
// Dataset Util method should be updated
if (settingsWrapper.isRsyncUpload() && !DatasetUtil.isAppropriateStorageDriver(dataset)) {
if (settingsWrapper.isRsyncUpload() && !DatasetUtil.isRsyncAppropriateStorageDriver(dataset)) {
//dataset.file.upload.setUp.rsync.failed.detail
FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, BundleUtil.getStringFromBundle("dataset.file.upload.setUp.rsync.failed"), BundleUtil.getStringFromBundle("dataset.file.upload.setUp.rsync.failed.detail"));
FacesContext.getCurrentInstance().addMessage(null, message);
}

return settingsWrapper.isRsyncUpload() && DatasetUtil.isAppropriateStorageDriver(dataset);
return settingsWrapper.isRsyncUpload() && DatasetUtil.isRsyncAppropriateStorageDriver(dataset);
}

// Globus must be one of the upload methods listed in the :UploadMethods setting
// and the dataset's store must be in the list allowed by the GlobusStores
// setting
public boolean globusUploadSupported() {
return settingsWrapper.isGlobusUpload()
&& settingsWrapper.isGlobusEnabledStorageDriver(dataset.getEffectiveStorageDriverId());
}

private void populateFileMetadatas() {
Expand Down Expand Up @@ -3093,4 +3101,9 @@ public boolean isFileAccessRequest() {
public void setFileAccessRequest(boolean fileAccessRequest) {
this.fileAccessRequest = fileAccessRequest;
}

//Determines whether this Dataset uses a public store and therefore doesn't support embargoed or restricted files
public boolean isHasPublicStore() {
return settingsWrapper.isTrueForKey(SettingsServiceBean.Key.PublicInstall, StorageIO.isPublicStore(dataset.getEffectiveStorageDriverId()));
}
}
Loading