GGCE Server issueshttps://gitlab.croptrust.org/grin-global/grin-global-server/-/issues2024-03-15T10:58:45+01:00https://gitlab.croptrust.org/grin-global/grin-global-server/-/issues/436Improved auto-numbering of accessions and inventories2024-03-15T10:58:45+01:00Matija ObrezaImproved auto-numbering of accessions and inventoriesWe use `-1` in the numerical part of accession and inventory numbers (`_number_part2`) to automatically assign the next available value.
The current implementation does not take into account numbers that were registered in the past and ...We use `-1` in the numerical part of accession and inventory numbers (`_number_part2`) to automatically assign the next available value.
The current implementation does not take into account numbers that were registered in the past and may assign the same number when the right conditions are met. Example: Accession `INTRO 13` is renamed to `ACC 9999`. If we now create a new `INTRO -1` it will may assign `INTRO 13` because it is not currently used.
We "log" `inventoryNumber` and `accessionNumber` as AccessionInvName with category `SITE_ID`. The improved auto-numbering mechanism should generate a candidate number (same as current implementation), then check if there already exists a matching `AccessionInvName` in category `SITE_ID`. If so, then it should use the next available number.
## For consideration
- We can't differentiate between accession and inventory in `AccessionInvName` without `join Inventory i` and inspecting `i.formTypeCode`.
- [Performance] We may need to check many `AccessionInvName` records to determine a "free number". What optimizations can we use?Artem HrybeniukArtem Hrybeniukhttps://gitlab.croptrust.org/grin-global/grin-global-server/-/issues/435RepositoryFile with many Attach2023-11-15T14:55:20+01:00Matija ObrezaRepositoryFile with many Attach`AttachmentAspect` takes care of removing the `RepositoryFile` from the repository when any `...Attach` entity is removed.
There is a possibility that the same `RepositoryFile` is referenced by multiple `...Attach` entities. In that cas...`AttachmentAspect` takes care of removing the `RepositoryFile` from the repository when any `...Attach` entity is removed.
There is a possibility that the same `RepositoryFile` is referenced by multiple `...Attach` entities. In that case, deleting one attachment must not (cannot) remove the file from the repository as it is still referenced.
Please ensure that when two or more `...Attach` refer to the same file, and one of them is removed, the file and one of the `Attach` remain in the database. When the last `Attach` is removed, the file must be removed.2023.8Artem HrybeniukArtem Hrybeniukhttps://gitlab.croptrust.org/grin-global/grin-global-server/-/issues/434Inconclusive viability tests2023-11-10T10:44:03+01:00Matija ObrezaInconclusive viability testsWe currently treat `InventoryViablity` as **finished** when there exists a value in `percentViable`. This allows only for two states a test can be in: pending and completed. In viability testing, the result of the final of any test may b...We currently treat `InventoryViablity` as **finished** when there exists a value in `percentViable`. This allows only for two states a test can be in: pending and completed. In viability testing, the result of the final of any test may be **conclusive** or **inconclusive**.
In this ticket we add a `status` enum to `InventoryViability` with the following options: `PENDING`, `CONCLUSIVE`, `INCONCLUSIVE`. The initial state is `PENDING`. For existing records in the database, the state is set to `CONCLUSIVE`, but it may be updated by the database manager to `INCONCLUSIVE` based on notes or other available information.
The user will need to choose between `CONCLUSIVE` and `INCONCLUSIVE` when finalizing the test.
## Aspects
Update `InventoryTriggers#upsertSeedInventoryExtraWithLatestViability()` so that only `CONCLUSIVE` tests are considered.2023.8Artem HrybeniukArtem Hrybeniukhttps://gitlab.croptrust.org/grin-global/grin-global-server/-/issues/433Virtual lookup service update2023-11-09T12:30:40+01:00Matija ObrezaVirtual lookup service updateThe **Curator Tool** uses "Lookup tables" to map entity `id` to a human-readable string. The `VirtualLookupService` supports the use of **Curator Tool** with GGCE without needing to generate custom SQL queries.
The current implementatio...The **Curator Tool** uses "Lookup tables" to map entity `id` to a human-readable string. The `VirtualLookupService` supports the use of **Curator Tool** with GGCE without needing to generate custom SQL queries.
The current implementation uses `@LookupValue` field annotation (usually on `id`), but fetches entire entity and uses `@LookupDisplay` annotation on methods to populate the string part. This is a performance bottleneck because it loads entire `Inventory` only to read `inventoryNumber`.
Upgrade the implementation to allow using `@LookupDisplay` on entity **fields**. When it is defined on a field, then the implementation needs to query only for the two fields annotated with `@LookupId` and `@LookupDisplay` and does not need to fetch entire entities from the database.
## Entity updates
Check all entities if `@LookupDisplay` is defined on a simple getter and move it to the relevant field. Important examples are `TaxonomySpecies#getName()` and `Inventory#getInventoryNumber()`.2023.8Artem HrybeniukArtem Hrybeniukhttps://gitlab.croptrust.org/grin-global/grin-global-server/-/issues/432Add the external volume docker flag to install using command2023-11-16T09:56:04+01:00Antonio RiveraAdd the external volume docker flag to install using commandHow can I add the add the **external volume** flag given in the composer file but using the command installation? I am trying to install using a command but I can not find how to set this option:
![image](/uploads/63b404bbed5e089c82f159...How can I add the add the **external volume** flag given in the composer file but using the command installation? I am trying to install using a command but I can not find how to set this option:
![image](/uploads/63b404bbed5e089c82f1594a3c3b01a3/image.png)
I need add that configuration to this part of the command
![image](/uploads/8a97b6fc946489224b27af7f59f3c767/image.png)
Is external by default? Or what I need to do?Matija ObrezaMatija Obrezahttps://gitlab.croptrust.org/grin-global/grin-global-server/-/issues/431JUnit upgrade2023-11-02T18:22:23+01:00Matija ObrezaJUnit upgradeUpgrade JUnit in `gradle` branchUpgrade JUnit in `gradle` branch2023.8Artem HrybeniukArtem Hrybeniukhttps://gitlab.croptrust.org/grin-global/grin-global-server/-/issues/430Get geography by filters2023-10-27T22:33:18+02:00Antonio RiveraGet geography by filtersTrying to retrieve data from the Geography controller using the **adm1Abbrev** and **adm1TypeCode** is returning empty content
API EndPoint: **api/v1/geo/filter**
Using just **adm1Abbrev** works fine
_**Input**_
`{"adm1Abbrev":{"eq":...Trying to retrieve data from the Geography controller using the **adm1Abbrev** and **adm1TypeCode** is returning empty content
API EndPoint: **api/v1/geo/filter**
Using just **adm1Abbrev** works fine
_**Input**_
`{"adm1Abbrev":{"eq":"AA"}}`
_**Output**_
![image](/uploads/7fe901c5b3fdbcb88f6a5c9b3a123e30/image.png)
Using **adm1Abbrev** and **adm1TypeCode** returns the content array empty
_**Input**_
`{"adm1Abbrev":{"eq":"AA"},"adm1TypeCode":["Increment site"]}`
_**Output**_
![image](/uploads/2ce7605528a9eaa881e5fa6ceb52d1ae/image.png)
What is the correct use for this EndPoint?https://gitlab.croptrust.org/grin-global/grin-global-server/-/issues/429GGCE Server collapses while updating Lookup Tables from Curator Tool2023-11-28T14:33:44+01:00Antonio RiveraGGCE Server collapses while updating Lookup Tables from Curator ToolA similar [issue ](https://gitlab.croptrust.org/grin-global/grin-global-server/-/issues/339) was reported one year ago.
The error probably arises when some users run Lookup Table Loader. Specifically, it could be the Accession IPR Look...A similar [issue ](https://gitlab.croptrust.org/grin-global/grin-global-server/-/issues/339) was reported one year ago.
The error probably arises when some users run Lookup Table Loader. Specifically, it could be the Accession IPR Lookup.
![image](/uploads/af05496aa8bf2fe612d27fc11b0107c7/image.png)
After several attempts to load the "Lookup tables", server finally stoped working despite in the docker's list stills "running". Even restarting the docker we got the following screen:
![image](/uploads/e3e19e138fcbf21b6da3bdeb0204254f/image.png)
We had to install again the GGCE Server. Then we found a problem with the DATABASECHANGELOG. So we executed the following command:
`UPDATE DATABASECHANGELOGLOCK set locked=0, lockgranted=null, lockedby=null WHERE id=1`
After we fix the above error we were able install again the GGCE Server but problem with the Lookups remains.
I attached the server logs from last days/hours
October 24, 2023
[logs_24_10_2023_10_28.txt](/uploads/2dc8a6218399ad80eae88d3a021a46dd/logs_24_10_2023_10_28.txt)
[24_10_2023_11_25.txt](/uploads/53e3c50489dbf38616957d153760b336/24_10_2023_11_25.txt)
October 25, 2023
[2023_25_10_11_18.zip](/uploads/883b490d68172d9bd76c465683466cfd/2023_25_10_11_18.zip)
Notes
- All users has a site id
- Not all users had the problem2023.8Matija ObrezaMatija Obrezahttps://gitlab.croptrust.org/grin-global/grin-global-server/-/issues/428Importing images from GG2023-11-15T19:40:09+01:00Matija ObrezaImporting images from GGGGCE's file repository does not expose attachments folder directly. Access to attachment bytes is controlled by the API that enforces permissions checks. This is a significant difference to GG, where attachments sit in a publicly readabl...GGCE's file repository does not expose attachments folder directly. Access to attachment bytes is controlled by the API that enforces permissions checks. This is a significant difference to GG, where attachments sit in a publicly readable location.
grin-global/support#302 requests for migration of image and document data from legacy GG to GGCE:
> We currently have images and PDF files loaded in our standard GG DBs. We have migrated our DBs to GGCE for testing but our attachments are not showing.
## GG documentation about "Locations of Attachment Files"
[1](http://www.grin-global.org/docs/gg_inventory_attachment_wizard.pdf) Each organization running GRIN-Global will have its own unique file server where the image and
document files are stored. The GG administrator can assist with deleting the files if necessary.
The following information is intended primarily for Administrators. The full directory path breaks down into several parts:
Example: `C:\inetpub\wwwroot\gringlobal\uploads\images`
[2](http://www.grin-global.org/docs/gg_attachment_wizard.pdf) further says that a Method attachment would be located at `https://npgsweb.ars-grin.gov/gringlobal/uploads/images/` for `method_attach/RYE.AGRON.ABERDEEN.16/img_jca.JPG`.
**NOTE:** GG always puts the images in the `uploads\images` directory under the GG site install directory. (You couldn't change that without altering the MT code and rebuilding.)
## Links
`..._attach` tables can also contain links (URLs). These have have `category_code = 'LINK'`, while uploaded files use `DOCUMENT` and `IMAGE`.
# Migrating attachments
Two mechanisms for migrating attachments are possible: (a) providing a base **URL pointing to the GG server *http...uploads/images* folder** and (b) providing a copy of the `C:\inetpub\wwwroot\gringlobal\uploads\images` folder to GGCE.
In both cases, GGCE Administrator must provide the base `path` to this location, either in a form of a URL `https://..../uploads/images` or filesystem path `/path/to/uploads/images`.
## Downloading bytes from GG website
If GG server is accessible, providing the URL is the more convenient option as there's no need to back up, transfer and make the folder accessible to GGCE.
The Administrator specifies the **base path** `https://npgsweb.ars-grin.gov/gringlobal/uploads/images/` where attachments are hosted.
GGCE scans the `..._attach` tables and downloads attachment bytes from the remote server for import into the file repository.
## Migrating bytes from a folder
When dealing with a large number of attachments, then providing direct access to the `uploads/images` folder will be the faster option as there is no HTTP overhead and the bytes are directly accessible for importing.
The backup is extracted on the host server and made available to GGCE API as a **docker volume**, for example with `-v ./ggimages:/migration/images`. This makes the folder available to GGCE on `/migration/images`.
The Administrator then specifies `/migration/images` as the **base path** and GGCE scans the `..._attach` tables and looks for attachment bytes in this folder for import into the file repository.
# Ingesting bytes into GGCE file repository
GGCE server provides a form where the Administrator can:
1. Selects one of the `..._attach` tables from a dropdown
2. Provides **base path** to attachment data (either URL or filesystem path)
3. Specifies **maximum number of errors** that GGCE will tolerate before stopping the process
- Start with `0` to force GGCE to stop immediately
- Increase to `100`
- Any value `< 0` instructs GGCE to continue migration regardless of errors
GGCE server then:
1. Scans the selected `..._attach` table `where category_code != 'LINK' AND repository_file_id IS NULL`
1. If `attach.virtual_path` is a valid HTTP URL, then skip the record -- links stay links.
2. Construct a path to each attachment `basepath + attach.virtual_path`
3. Replace all `\` with `/` in `virtual_path`, replace `//` with `/`
4. Get the bytes (either with a HTTP request or by opening the file)
5. If bytes are found, add them to the file repository and populate `file_repository_id` of the attachment record in the database
6. If bytes are not found, log the problem and continue until a **maximum number of errors** is reached.
### Sample data from `accession_inv_attach`
|accession_inv_attach_id|inventory_id|virtual_path|thumbnail_virtual_path|GG URL|
|--|--|--|--|--|
|22155|43694|AIA/Zea/14/6114/SH18-797_DIM.pdf|AIA/Zea/14/6114/SH18-797_DIM_thumbnail.pdf|`https://mgb.cimmyt.org/gringlobal/uploads/images/AIA/Zea/14/6114/SH18-797_DIM.pdf`|
|12373|6114|AIA/Zea/14/6114/CIMMYTMA 6118 - Reference Inventory.jpg|AIA/Zea/14/6114/CIMMYTMA 6118 - Reference Inventory_thumbnail.jpg|`https://mgb.cimmyt.org/gringlobal/uploads/images/AIA/Zea/14/6114/CIMMYTMA%206118%20-%20Reference%20Inventory.jpg`|
The base URL for `accession_inv_attach` for https://mgb.cimmyt.org is `https://mgb.cimmyt.org/gringlobal/uploads/images`2023.8Matija ObrezaMatija Obrezahttps://gitlab.croptrust.org/grin-global/grin-global-server/-/issues/427Genesys upload error2023-10-23T15:50:39+02:00Antonio RiveraGenesys upload errorWhen trying to upload accessions from one of our collections we got the following error:
`Upload operation was stopped due to many errors while uploading accessions to Genesys.`
![image](/uploads/12b808b00264226cdb7e1cb37dd29512/image....When trying to upload accessions from one of our collections we got the following error:
`Upload operation was stopped due to many errors while uploading accessions to Genesys.`
![image](/uploads/12b808b00264226cdb7e1cb37dd29512/image.png)
For each item in the **operationErrorsarray** we got the following error:
`could not execute batch; SQL [delete from accession_collect where id=? and version=?]; constraint [null]; nested exception is org.hibernate.exception.ConstraintViolationException: could not execute batch\ncould not execute batch\n(conn=965177) Cannot delete or update a parent row: a foreign key constraint fails (`sandbox`.`accession_collect_name`, CONSTRAINT `FK_g6h5uuvq16105ljx8r1jjxojr` FOREIGN KEY (`collectId`) REFERENCES `accession_collect` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION)\n(conn=965177) Cannot delete or update a parent row: a foreign key constraint fails (`sandbox`.`accession_collect_name`, CONSTRAINT `FK_g6h5uuvq16105ljx8r1jjxojr` FOREIGN KEY (`collectId`) REFERENCES `accession_collect` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION)`
Request sample: [request.json](/uploads/e81c5007c993ff72d1f8decfcb8386bf/request.json)
Last Server Response: [output.json](/uploads/f3af951c5785377d376c09c0d87c56a3/output.json)Matija ObrezaMatija Obrezahttps://gitlab.croptrust.org/grin-global/grin-global-server/-/issues/426Initial seed viability2023-10-07T08:07:55+02:00Matija ObrezaInitial seed viabilityWhen a viability test is conducted within 1 (2?) years of seed harvest, then it is considered to represent the **initial seed viability**. The initial seed viability records how viable seed was **before** it entered conservation.
## See...When a viability test is conducted within 1 (2?) years of seed harvest, then it is considered to represent the **initial seed viability**. The initial seed viability records how viable seed was **before** it entered conservation.
## SeedInventoryExtra
New fields `initialViability`, `initialViabilityDate` and `initialViabilityDateCode` in `SeedInventoryExtra` to allow genebanks to store the initial viability.
These values should be propagated to inventories that are split from the source inventory, but must not be copied when there is a **new generation** of the inventory (`inventory.generation != inventory.parentInventory.generation`).
## UI updates
UI needs updating so that when these values exist, they are automatically populated in the form when creating a new inventory.
The new columns `initialViability`, `initialViabilityDate` and `initialViabilityDateCode` need to be added to `InventoryTableConfig`.
## Configuration
`INITIAL_VIABILITY_MAX_DAYS` defaults to `365` days.2023.7Matija ObrezaMatija Obrezahttps://gitlab.croptrust.org/grin-global/grin-global-server/-/issues/425SOAP page size2023-10-01T12:47:09+02:00Matija ObrezaSOAP page sizeCurator Tool and the corresponding SOAP `getData` endpoint use a very specific pagination implementation: The CT prepares the `pkeyCollection` list of inputs and it is this list that is sliced into pages using `ux_numericupdownQueryPageS...Curator Tool and the corresponding SOAP `getData` endpoint use a very specific pagination implementation: The CT prepares the `pkeyCollection` list of inputs and it is this list that is sliced into pages using `ux_numericupdownQueryPageSize` setting. Because the `pkeys` are *resolved* (from accession_id via inventory_id via ...) the pagination of `pkeys` has little control over how may rows the server will return after resolving the dataview.
The CT then requests at most `ux_numericupdownMaxRowsReturned` rows for the sliced `pkey`, but this is also the limit when the CT will stop loading data pages once this number is reached.
CT never requests data pages beyond the first page and it doesn't really paginate -- the page number is fixed to `0` in `GrinGlobalClient.cs#L1788`:
```csharp
DataSet pagedDataSet = _sharedUtils.GetWebServiceData(dataviewName, pkeyCollection, 0, Convert.ToInt32(ux_numericupdownMaxRowsReturned.Value));
```
To support this behavior, the GGCE limit of number of rows to return must be increased from `100,000` to `500,000` -- but such queries then require a lot more ram for GGCE as the response is not streamed, but built in memory before serialization to XML.2023.7Matija ObrezaMatija Obrezahttps://gitlab.croptrust.org/grin-global/grin-global-server/-/issues/424Error with the time zone of the GGCE and the server.2023-10-23T20:55:28+02:00James AriasError with the time zone of the GGCE and the server.Good morning @mobreza
We are having a problem with the time zone between the docker and server, the docker is not taking the server's time zone.
Regards
James AriasGood morning @mobreza
We are having a problem with the time zone between the docker and server, the docker is not taking the server's time zone.
Regards
James AriasMatija ObrezaMatija Obrezahttps://gitlab.croptrust.org/grin-global/grin-global-server/-/issues/423Storage type in IMP2023-09-20T13:20:11+02:00Matija ObrezaStorage type in IMPEach Inventory has an *inventory maintenance policy*. The policy determines how the inventory is managed. We would like to include in the `IMP` the information about the **type of germplasm storage**. This is directly linked to `STORAGE`...Each Inventory has an *inventory maintenance policy*. The policy determines how the inventory is managed. We would like to include in the `IMP` the information about the **type of germplasm storage**. This is directly linked to `STORAGE` in MCPD standard.
## IMP with `storageTypeCode`
Add a new optional (null) field `@CodeValue(groupName="STORAGE_TYPE") private String storageTypeCode;` to `InventoryMaintPolicy` and define the code value group in `CommunityCodeValues`:
```java
public static final String STORAGE_TYPE = "STORAGE_TYPE";
public static final CodeValueDef STORAGE_TYPE_TEMPORARY = new CodeValueDef(STORAGE_TYPE, "TEMP", "Temporary", "Temporary storage");
public static final CodeValueDef STORAGE_TYPE_SEED_LTS = new CodeValueDef(STORAGE_TYPE, "SDLTS", "Seed LTS", "Long-term seed collection");
public static final CodeValueDef STORAGE_TYPE_SEED_MTS = new CodeValueDef(STORAGE_TYPE, "SDMTS", "Seed MTS", "Medium-term seed collection");
public static final CodeValueDef STORAGE_TYPE_SEED_ACTIVE = new CodeValueDef(STORAGE_TYPE, "SDACT", "Seed Active", "Active seed collection");
public static final CodeValueDef STORAGE_TYPE_FIELD = new CodeValueDef(STORAGE_TYPE, "FIELD", "Field", "Field collection");
public static final CodeValueDef STORAGE_TYPE_IV_LTS = new CodeValueDef(STORAGE_TYPE, "IVLTS", "Invitro LTS", "Long-term invitro collection");
public static final CodeValueDef STORAGE_TYPE_IV_MTS = new CodeValueDef(STORAGE_TYPE, "IVMTS", "Invitro MTS", "Medium-term invitro collection");
public static final CodeValueDef STORAGE_TYPE_CRYO = new CodeValueDef(STORAGE_TYPE, "CRYO", "Cryo", "Cryopreserved collection");
```
## MCPD
Update the calculation of MCPD `storage` field to use `storageTypeCode` (using the code value translation in the MCPD language). This new calculation needs to be reflected in `AccessionMCPD#storage` field.2023.7Artem HrybeniukArtem Hrybeniukhttps://gitlab.croptrust.org/grin-global/grin-global-server/-/issues/422MCPD with CURATION2023-09-20T09:42:53+02:00Matija ObrezaMCPD with CURATIONPlease update the `AccessionMCPD` and add `String curationType`. Allowed values are `FULL`, `PARTIAL`, `ARCHIVED` and `HISTORICAL` as implemented in genesys-pgr/genesys-server!793.
Update the generation of `AccessionMCPD` and populate t...Please update the `AccessionMCPD` and add `String curationType`. Allowed values are `FULL`, `PARTIAL`, `ARCHIVED` and `HISTORICAL` as implemented in genesys-pgr/genesys-server!793.
Update the generation of `AccessionMCPD` and populate the field using `Accession#curationTypeCode` (using the code value translations to the MCPD language).
Update uploading of this descriptor to Genesys.2023.7Artem HrybeniukArtem Hrybeniukhttps://gitlab.croptrust.org/grin-global/grin-global-server/-/issues/421Error starting the ggce-api. accession_inv_group_attach table does not exists2023-10-23T15:59:15+02:00Juan Carlos Alarcon MaldonadoError starting the ggce-api. accession_inv_group_attach table does not existsThe **ggce-api** sends a Migration database exception in the starting phase, looks like the table **accession_inv_group_attach** does not exist:
```
14:40:21,319 main WARN ApplicationConfig:66 - Starting GGCE 2023.4 "UNKNOWN" @3a3e5b2d...The **ggce-api** sends a Migration database exception in the starting phase, looks like the table **accession_inv_group_attach** does not exist:
```
14:40:21,319 main WARN ApplicationConfig:66 - Starting GGCE 2023.4 "UNKNOWN" @3a3e5b2de2d571effe48ff673770b8822aa37b37
14:40:22,271 main WARN GMTStringToDateConverter:20 - Current time in SOAP format: 2023-09-07T14:40:22.0000270Z
14:40:22,317 main WARN EhCacheConfig:79 - Application cache: JCache with ehCache
Running Changeset: classpath:liquibase/liquibase-changeLog.yml::1593672290545-1::mborodenko (generated)
14:40:26,484 main WARN AnnotationConfigWebApplicationContext:591 - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'databaseMigration' defined in org.gringlobal.application.config.DatabaseConfig: Invocation of init method failed; nested exception is liquibase.exception.LiquibaseException: liquibase.exception.MigrationFailedException: Migration failed for changeset classpath:liquibase/liquibase-changeLog.yml::1593672290545-1::mborodenko (generated):
Reason: liquibase.exception.DatabaseException: Cannot find the object "accession_inv_group_attach" because it does not exist or you do not have permissions. [Failed SQL: (4902) ALTER TABLE accession_inv_group_attach ADD repository_file_id bigint]
14:40:26,490 main ERROR ContextLoader:299 - Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'databaseMigration' defined in org.gringlobal.application.config.DatabaseConfig: Invocation of init method failed; nested exception is liquibase.exception.LiquibaseException: liquibase.exception.MigrationFailedException: Migration failed for changeset classpath:liquibase/liquibase-changeLog.yml::1593672290545-1::mborodenko (generated):
Reason: liquibase.exception.DatabaseException: Cannot find the object "accession_inv_group_attach" because it does not exist or you do not have permissions. [Failed SQL: (4902) ALTER TABLE accession_inv_group_attach ADD repository_file_id bigint]
```
Here is the log file:
[ggce-ggce-api-1-0709.log](/uploads/7b1749acdd646d7f54695f81fcfbeb12/ggce-ggce-api-1-0709.log)Matija ObrezaMatija Obrezahttps://gitlab.croptrust.org/grin-global/grin-global-server/-/issues/420app-blocks@52023-09-07T17:56:59+02:00Matija Obrezaapp-blocks@5Update models and filters for `app-blocks@5.0`.
Replace use of `org.genesys.blocks.model.filters.InstantFilter`, `DateFilter` with the new `TemporalFilter`.Update models and filters for `app-blocks@5.0`.
Replace use of `org.genesys.blocks.model.filters.InstantFilter`, `DateFilter` with the new `TemporalFilter`.2023.7Artem HrybeniukArtem Hrybeniukhttps://gitlab.croptrust.org/grin-global/grin-global-server/-/issues/419Duplicate key exception (1658154335099-2)2023-09-01T05:15:42+02:00Antonio RiveraDuplicate key exception (1658154335099-2)Recently, we have tried to perform a new installation with our more recent database
In the installation process we have been having the following exception:
```
Invocation of init method failed; nested exception is liquibase.exception...Recently, we have tried to perform a new installation with our more recent database
In the installation process we have been having the following exception:
```
Invocation of init method failed; nested exception is liquibase.exception.LiquibaseException: liquibase.exception.MigrationFailedException: Migration failed for changeset classpath:liquibase/liquibase-changeLog.yml::1658154335099-2::ahrybeniuk:
Reason: liquibase.exception.DatabaseException: The CREATE UNIQUE INDEX statement terminated because a duplicate key was found for the object name 'dbo.accession' and the index name 'ndx_uniq_accessionNumber'. The duplicate key value is (<NULL>). [Failed SQL: (1505) CREATE UNIQUE NONCLUSTERED INDEX ndx_uniq_accessionNumber ON accession(accession_number)]
15:59:05,197 main ERROR ContextLoader:313 - Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'databaseMigration' defined in org.gringlobal.application.config.DatabaseConfig: Invocation of init method failed; nested exception is liquibase.exception.LiquibaseException: liquibase.exception.MigrationFailedException: Migration failed for changeset classpath:liquibase/liquibase-changeLog.yml::1658154335099-2::ahrybeniuk:
Reason: liquibase.exception.DatabaseException: The CREATE UNIQUE INDEX statement terminated because a duplicate key was found for the object name 'dbo.accession' and the index name 'ndx_uniq_accessionNumber'. The duplicate key value is (<NULL>).
```
We have searched for the error according to the given changeset (1658154335099-2) but it is related to the Inventory table not the Accession table as indicated by the exception.
![image](/uploads/9e00eae35d4dcbca744b12281e58ad61/image.png)
This problem had not occurred in our previous installations and it is present in our two instances: Wheat and Maize (recently updated).
Full exception is here: [1658154335099-2.log](/uploads/bf89fbbff18b16b0e4cdd79b017928b3/1658154335099-2.log)Matija ObrezaMatija Obrezahttps://gitlab.croptrust.org/grin-global/grin-global-server/-/issues/418Default sort order id descending2023-08-04T14:33:20+02:00Matija ObrezaDefault sort order id descendingI want to test out default sorting of pages in descending order -- to show latest entries first.I want to test out default sorting of pages in descending order -- to show latest entries first.2023.6Matija ObrezaMatija Obrezahttps://gitlab.croptrust.org/grin-global/grin-global-server/-/issues/417ITPGRFA GLIS configuration2023-08-07T06:41:27+02:00Matija ObrezaITPGRFA GLIS configurationUpdate `application.properties` and documentation for the new ITPGRFA GLIS URL.
- Test server: https://glis.qa.fao.org (apply to `itpgrfa.glis.basepath=` in `application.properties`)
- Production: https://glis.fao.org
## Rename config ...Update `application.properties` and documentation for the new ITPGRFA GLIS URL.
- Test server: https://glis.qa.fao.org (apply to `itpgrfa.glis.basepath=` in `application.properties`)
- Production: https://glis.fao.org
## Rename config variables
Rename in code and in `xxx.properties`:
- `itpgrfa.glis.smta.basepath` → `itpgrfa.easysmta.basepath`
- `itpgrfa.glis.smta...` → `itpgrfa.easysmta...`2023.6Artem HrybeniukArtem Hrybeniuk