Code Monkey home page Code Monkey logo

image-service's Introduction

image-service Build Status

This Grails application provides the webservices and backend for the storage of all images in the Atlas. It includes:

  • Support for large images, generation of thumbnails and tile views
  • Extensible key/value pair storage for image metadata
  • Support for subimaging and maintaining the relationships between parent and child images
  • Exif extraction
  • Tile view for large images compatible with GIS Javascript clients such as LeafletJS, OpenLayers and Google Maps
  • Web services for image upload
  • Generate of derivative images for thumbnail presentation
  • Tagging support via webservices
  • Administrator console for image management
  • Swagger API definition
  • Integration with google analytics to monitor image usage by data resource
  • Support for image storage in S3, Swift
  • Support for batch uploads with AVRO

There are other related repositories to this one:

  • images-client-plugin - a grails plugin to provide a Javascript based viewer to be used in other applications requiring a image viewer. This viewer is based on LeafletJS.
  • image-tiling-agent - a utility to run tiling jobs for the image-service. This is intended to used on multiple machine as tiling is CPU intensive and best parallelised.
  • image-loader - utility for bulk loading images into the image-service.

Upgrading from 1.0

Please see the Upgrading from 1.0 to 1.1 wiki page before upgrading an image-service 1.0 or earlier installation to the latest version.

Architecture

  • Grails 3 web application ran as standalone executable jar
  • Open JDK 8
  • Postgres database (9.6 or above)
  • Elastic search 7
  • Debian package install

Installation

There are ansible scripts for this applications (and other ALA tools) in the ala-install project. The ansible playbook for the image-service is here

You can also run this application locally by following the instructions on its wiki page

Running it locally

Postgres

There is a docker-compose YML file that can be used to run postgres locally for local development purposes. To use run:

docker-compose -f postgres.yml up -d

And to shutdown

docker-compose -f postgres.yml kill

Elastic search

There is a docker-compose YML file that can be used to run elastic search locally for local development purposes. To use run:

docker-compose -f elastic.yml up -d

And to shutdown

docker-compose -f elastic.yml kill

image-service's People

Contributors

ansell avatar aruizca avatar dewmini avatar djtfmartin avatar mbohun avatar nickdos avatar pwscsiro avatar sbearcsiro avatar shahmanash avatar sughics avatar temi avatar vjrj avatar yasima-csiro avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

image-service's Issues

Improve workflow for navigating to linked occurrence records

The workflow for navigating to linked occurrence records is not intuitive and some users are finding it easier to use the support button to report misidentified species from images.ala.org.au, which is not ideal.

Refs tickets 25350 and 25351 in helpdesk

Certain image upload fails.

Some thing weird about the attached image, ecodata accepts it happily, but image server doesn't like it!)
marg perry 2 nov 17

Example: https://images.ala.org.au/image/details/202813734

Note from Chris:
[11:34 AM] Chris Godwin: It's might the colour profile
[11:34 AM] Chris Godwin: I had to add an extension library to ImageIO on ecodata to handle a few extra image types

Public image URLs return 404 when cookie is present but session has expired

Most of the URLs in this app are under the authenticateOnlyIfLoggedInFilterPattern filter. This can result in some users seeing missing image icons in apps that show images out of the image-service.

I am able to replicate this issue in the biocache-hubs by doing the following:

image

Suggested fix is to ensure all public URLs are not under CAS at all. Note that URLs under the authenticateOnlyIfLoggedInFilterPattern will not be excluded is included in the uriExclusionFilter (it only works against the uriFilterPattern - this is a bug/feature).

Improvement: Better process of broken images

In Spain, we have a lot of broken images, mainly because people share html/php instead of images. For instance:
http://161.111.171.57/herbarioV/visorVCat.php?img=MA-01-00020718
is a php visor of images, so, our image service obviously cannot process this.

Here an occurrence with a broken image and a correct image:
https://registros.gbif.es/occurrences/ce778852-8e22-4866-8f96-c4ef427cf0a2

Other broken images, like:
https://images.ala.org.au/image/details/252342823
with size 0x0.

So what I did, if this serve as inspiration now that the image service is under improvement, is to add a default 404 broken image with some apache directive like:

ErrorDocument 404 /store/broken.png

I also used ProxyErrorOverride On to show the same broken image on 404 errors in tomcat.

More info:
https://stackoverflow.com/questions/4017470/replace-invalid-image-url-with-404-image
The broken image we use has CC license:
https://thenounproject.com/term/broken-image/389560/

Just to comment, please feel free to close this if does not fit with the image service development.

Add bulk image download

request for bulk koala images to train an image recognition algorithm couldn't be done at the moment.

any bulk image download has to include licensing and attribution (should be in the XIF)

Use a pooled or limited HTTP client to request /store/ URLs

Load testing on image-service-1.0.5 shows that it consistently runs out of file descriptors at a particular query rate in our current images-beta setup, about 140 requests per second, which is not unreasonable in the long term that it would be hit outside of load testing given we show 20 images at a time to biocache users, and we want to load images at high capacity.

This could be improved by using a pooled or limited HTTP client to request the /store/ URLs, where the JVM goes out and back in through nginx to fetch the images, rather than accessing them directly.

The relevant code where it looks like this can be improved for a large number of cases at once is the following:

private void proxyImageRequest(HttpServletResponse response, Image imageInstance, String imageUrl, int contentLength, boolean addContentDisposition = false) {
def u = new URL(imageUrl)
response.setContentType(imageInstance.mimeType ?: "image/jpeg")
if (addContentDisposition) {
response.setHeader("Content-disposition", "attachment;filename=${imageInstance.imageIdentifier}.${imageInstance.extension ?: "jpg"}")
}
if (contentLength) {
response.setContentLength(contentLength)
}
proxyUrl(u, response)
}
private void proxyUrl(URL u, HttpServletResponse response) {
//async call to google analytics....
InputStream is = null
try {
is = u.openStream()
} catch (Exception ex) {
logService.error("Failed it proxy URL", ex)
}
if (is) {
try {
IOUtils.copy(u.openStream(), response.outputStream)
} finally {
is.close()
response.flushBuffer()
}
}
}

Images fails to connect to postgres after package upgrade

Images fails to connect to postgres after a package upgrade and shows the following error in its log files:

2018-06-05 06:43:45,679 [quartzScheduler_Worker-2] ERROR util.JDBCExceptionReporter  - FATAL: terminating connection due to administrator command
2018-06-05 06:43:45,679 [quartzScheduler_Worker-2] ERROR util.JDBCExceptionReporter  - An I/O error occurred while sending to the backend.
2018-06-05 06:43:45,680 [quartzScheduler_Worker-2] ERROR util.JDBCExceptionReporter  - This connection has been closed.
2018-06-05 06:43:45,681 [quartzScheduler_Worker-2] INFO  images.LogService  - Exception thrown in job handler
2018-06-05 06:43:45,688 [quartzScheduler_Worker-2] INFO  images.LogService  - Error: could not inspect JDBC autocommit mode; nested exception is org.hibernate.exception.JDBCConnectionException: could not inspect JDBC autocommit mode
2018-06-05 06:43:45,688 [quartzScheduler_Worker-2] INFO  core.JobRunShell  - Job GRAILS_JOBS.au.org.ala.images.ProcessBackgroundTasksJob threw a JobExecutionException: 
org.quartz.JobExecutionException: org.springframework.dao.DataAccessResourceFailureException: could not inspect JDBC autocommit mode; nested exception is org.hibernate.exception.JDBCConnectionException: could not inspect JDBC autocommit mode [See nested exception: org.springframework.dao.DataAccessResourceFailureException: could not inspect JDBC autocommit mode; nested exception is org.hibernate.exception.JDBCConnectionException: could not inspect JDBC autocommit mode]
        at grails.plugins.quartz.GrailsJobFactory$GrailsJob.execute(GrailsJobFactory.java:111)
        at org.quartz.core.JobRunShell.run(JobRunShell.java:202)
        at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573)
Caused by: org.springframework.dao.DataAccessResourceFailureException: could not inspect JDBC autocommit mode; nested exception is org.hibernate.exception.JDBCConnectionException: could not inspect JDBC autocommit mode
        at org.grails.datastore.gorm.GormStaticApi$_methodMissing_closure2.doCall(GormStaticApi.groovy:101)
        at au.org.ala.images.SettingService.getOrCreateSetting(SettingService.groovy:109)
        at au.org.ala.images.SettingService.getSettingFromStack(SettingService.groovy:85)
        at au.org.ala.images.SettingService.getBoolSetting(SettingService.groovy:93)
        at au.org.ala.images.SettingService.getBackgroundTasksEnabled(SettingService.groovy:25)
        at au.org.ala.images.ProcessBackgroundTasksJob.execute(ProcessBackgroundTasksJob.groovy:17)
        at grails.plugins.quartz.GrailsJobFactory$GrailsJob.execute(GrailsJobFactory.java:104)
        ... 2 more
Caused by: org.hibernate.exception.JDBCConnectionException: could not inspect JDBC autocommit mode
        ... 9 more
Caused by: org.postgresql.util.PSQLException: This connection has been closed.
        at org.postgresql.jdbc2.AbstractJdbc2Connection.checkClosed(AbstractJdbc2Connection.java:820)
        at org.postgresql.jdbc2.AbstractJdbc2Connection.getAutoCommit(AbstractJdbc2Connection.java:781)
        ... 9 more
2018-06-05 06:43:45,689 [quartzScheduler_Worker-2] ERROR listeners.ExceptionPrinterJobListener  - Exception occurred in job: Grails Job
org.quartz.JobExecutionException: org.springframework.dao.DataAccessResourceFailureException: could not inspect JDBC autocommit mode; nested exception is org.hibernate.exception.JDBCConnectionException: could not inspect JDBC autocommit mode [See nested exception: org.springframework.dao.DataAccessResourceFailureException: could not inspect JDBC autocommit mode; nested exception is org.hibernate.exception.JDBCConnectionException: could not inspect JDBC autocommit mode]
        at grails.plugins.quartz.GrailsJobFactory$GrailsJob.execute(GrailsJobFactory.java:111)
        at org.quartz.core.JobRunShell.run(JobRunShell.java:202)
        at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573)
Caused by: org.springframework.dao.DataAccessResourceFailureException: could not inspect JDBC autocommit mode; nested exception is org.hibernate.exception.JDBCConnectionException: could not inspect JDBC autocommit mode
        at org.grails.datastore.gorm.GormStaticApi$_methodMissing_closure2.doCall(GormStaticApi.groovy:101)
        at au.org.ala.images.SettingService.getOrCreateSetting(SettingService.groovy:109)
        at au.org.ala.images.SettingService.getSettingFromStack(SettingService.groovy:85)
        at au.org.ala.images.SettingService.getBoolSetting(SettingService.groovy:93)
        at au.org.ala.images.SettingService.getBackgroundTasksEnabled(SettingService.groovy:25)
        at au.org.ala.images.ProcessBackgroundTasksJob.execute(ProcessBackgroundTasksJob.groovy:17)
        at grails.plugins.quartz.GrailsJobFactory$GrailsJob.execute(GrailsJobFactory.java:104)
        ... 2 more
Caused by: org.hibernate.exception.JDBCConnectionException: could not inspect JDBC autocommit mode
        ... 9 more
Caused by: org.postgresql.util.PSQLException: This connection has been closed.
        at org.postgresql.jdbc2.AbstractJdbc2Connection.checkClosed(AbstractJdbc2Connection.java:820)
        at org.postgresql.jdbc2.AbstractJdbc2Connection.getAutoCommit(AbstractJdbc2Connection.java:781)
        ... 9 more
2018-06-05 06:43:46,648 [quartzScheduler_Worker-3] ERROR util.JDBCExceptionReporter  - This connection has been closed.
2018-06-05 06:43:46,649 [quartzScheduler_Worker-3] ERROR util.JDBCExceptionReporter  - This connection has been closed.

A suggestion from Simon is that the code from the following section may be useful to make phylolink more resilient to database interruptions:

https://github.com/AtlasOfLivingAustralia/volunteer-portal/blob/develop/grails-app/conf/application.yml#L303

A possible location for the local changes required may be in:

https://github.com/AtlasOfLivingAustralia/image-service/blob/master/grails-app/conf/DataSource.groovy#L37

It is not possible to update metadata with empty value

I am are planning to store user's rating of images as user metadata. It will use two metadata named like and dislike. Each metadata will have a list of user ids.
In scenario where a user first liked an image and then subsequently update the image with a disliked, the logic breaks as dislike and like metadata will have the user's id. The is because the code does not permit empty values to be updated for a metadata. Permitting empty value will solved this issue.

AtlasOfLivingAustralia/data-management#219

Allow flagging of occurrence records from image-service

The workflow for navigating to linked occurrence records is not intuitive and some users are finding it easier to use the support button to report misidentified species from images.ala.org.au, which is not ideal. In addition to improving the navigation (issue #43), it could also be useful to allow users to directly add flags to occurrence records from within image-service.

Refs tickets 25350 and 25351 in helpdesk

Require authentication or apikey for scheduleArtifactGeneration

Some admin commands are being called by crawler bots, which implies that they don't have authentication or apikeys restricting access. In this case, the target is /ws/scheduleArtifactGeneration

==> /var/log/tomcat7/catalina.out <==
Index Image 229250751: 2 ms
Index Image 229250751: 1 ms
2018-11-02 10:59:39,223 [http-bio-8080-exec-17549] INFO  images.LogService  - Username: N/A IP: 150.229.66.12 Session: F0ACE69B5C8C22296F007E5E6F0D3C75 UA: Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.96 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html) URI: /grails/webService/scheduleArtifactGeneration.dispatch

==> /var/log/apache2/images.ala.org.au.ssl_access.log <==
66.249.79.252 - - [02/Nov/2018:10:59:39 +1100] "GET /ws/scheduleArtifactGeneration/5b6de1d6-7f86-4080-9f2f-b924cc2adc87 HTTP/1.1" 200 6419 "-" "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.96 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"

Faster image loading API

I see in the biocache-store logs that loading an image whether or not image already exists (which is usually the case) is fairly slow.
One solution that I guess we can have is to create an API that accepts multiple image and return a response showing that which images are already stored in the media store.

This way can reduce the round trip time for calling the individual image loading API for the whole batch.

Reduce number of thumbnails

@ansell suggested we could reduce disk usage by removing the various thumbnail copies that have only a different coloured background (grey, white & black) and provide just transparent colour (PNG) & black (jpg).

Gather usage statistics for individual image views

Via Google Analytics - need to trigger GA API manually for images embedded in other pages(?)

Might want to also trigger a downloads stat event against the DP/DR/CO code but there will be no other metadata (email, reason - can be canned).

Incorrect content type text/html being returned for JSONP results

JSONP results should always have the content type text/javascript, just as JSON results should always have the content type application/json. If the correct content types are sent, then browsers do not have to rely on possibly guessing what the content type should be, which reduces one set of bugs that users of different browsers could experience.

An example of a JSONP URL that is currently returning Content-Type: text/html, causing bugs when X-Content-Type-Options is used (or a browser fails to guess what the document really is):

https://images-beta.ala.org.au/ws/getImageInfo/be52e264-1f2b-4fd3-ba30-c6479560d224?callback=jQuery112409585056373834636_1561348582021&_=1561348582022

Screen Shot 2019-06-24 at 1 57 22 pm

The code for rendering results in these cases looks like it might be the following:

https://github.com/AtlasOfLivingAustralia/image-service/blob/grails3/grails-app/controllers/au/org/ala/images/WebServiceController.groovy#L347-L361

Create album function broken (Grails 3)

Grails 3 issue.

https://images-beta.ala.org.au/album/index

  • crumb trail display is not formatted correctly (appears as numbered list, not a crumb trail) and is not integrated into the (new) existing crumb trail (above it).
  • "New album" button not working (see below)
  • "Upload" button redirects to Images home page with alert "Could not find image with id stagedImages!"
  • Confusing link under albums section with text "Desktop version", does nothing when clicked (remove this)?

Click button "New album".
Expected output: a modal dialog appears:
image
Actual output: nothing happens (no error or JS error).

Image URLs with redirect fail

Not sure if its the redirect or the resulting https URL but images uploaded from sightings.ala.org.au started failing when we added an Apache permanent redirect for / to https://sightings.ala.org.au. Images records were created but the images were all broken (404). Removing the redirect fixed it.

Thumbnail for a non-image should show a generic or relevant static icon rather than 404

In the case of non-images being stored in images, the proxyImageThumbnail service currently returns HTTP 404 instead of a replacement generic or static icon:

https://images.ala.org.au/image/proxyImageThumbnail?imageId=c14c7ecb-849e-491c-82c3-8b6424b25b0f

It would improve browsing using biocache-hub if there was a valid image returned for thumbnail calls for sounds and other media types we are storing in the images service.

Add browse function

On home page, add a browse by set of links (facets) on left hand side:

life form (species group)
species subgroup
file type (image, sound, video)
license type

webservice image upload: support setting `Image` attributes

When remotely uploading images via http://images.ala.org.au/ws/uploadImage, top-level metadata (attributes of the Image class), as opposed to the Image.metaData (arbitrary data).

In particular there are two fields for Image that should be set:

  • copyright
  • attribution

if those fields are present in the params.metadata POSTed data.

Currently these values are going through to the "System" metadata but do not appear on the output of http://images.ala.org.au/ws/getImageInfo/{imageId} (unless the param includeMetadata=true is added.

Advanced search not working

https://images.ala.org.au/search/index

The user first clicks the "add criteria button and then selects a criteria field from the drop-down list. After selecting an option, the screen displays a "Loading..." message that never resolves. Looking at the console there is an error:

Mixed Content: The page at 'https://images.ala.org.au/search/index' was loaded over HTTPS, but requested an insecure XMLHttpRequest endpoint 'http://images.ala.org.au/search/imageFieldCriteriaFragment?searchCriteriaDefinitionId=3032104&format='. This request has been blocked; the content must be served over HTTPS.

Fix is to change all "http:" references in JS to use either // or https: - ideally making this a configurable option so it will work under both HTTPS and HTTP.

Updating metadata fields

When I re-ingest a dwca with multimedia extension, It doesn't update the metadata information on the images.

What's the work around this issue?

Prevent duplicate pictures

Comes from Freshdesk ticket https://support.ehelp.edu.au/a/tickets/27235

The major issue of course was the insertion of bird data into a spider space.
A third problem I will mention again is the urgent need to eliminate identical pictures. It is extremely frustrating when I have to spend many hours wading through thousands of photos which appear in random order and many of them are identical duplicates and some of them appear up to half a dozen times.

Bulk metadata update

Need to be able to run batch updates to image metadata particularly licenses:

e.g. set license for all or a subset of images from a data resource

  • the set default image license in the collectory seems to be over riding the information provided in a Darwin Core archive and it doesn't have an option to set the default back to empty.

Specific example is dr660 (ANFC images) - I'm trying to update the licensing for a subset of the images to "All rights reserved" but the images still have CC-BY_NC on them, see dr660 metadata for file and current settings.

Hard coded imageServiceBaseUrl in JS file

We found a hard coded URL reference in "plugins/images-client-plugin-0.8/js/ala-image-viewer.js":

    var imageServiceBaseUrl = "https://images.ala.org.au";

This broke some js interactions in our runtime (can't recall where right now). We are patching this post-install in our setup with sed, maybe ansible playbooks should do the same.

Can't select images or create albums

Grails 3 branch.

Current prod version allows the user to select images by clicking the "tick box" next to each image or using the drop-down "cog" icon to either "select all on page" or "select all matching images". Once one or more images are selected, the text in the "crumb trail portion of the page (right side)" shows:

image

This functionality appears to be lost in the new version, as neither the "tick boxes" nor the "X selected images" tool (screenshot above) are displayed.

Therefore a user cannot create an album, which is a requirement for exporting images as CSV file.

Fixes:

  • "cog" icon missing on drop-down tool on right side of screen (after doing a search)
  • images from search are missing "tick box"
  • tool to allow an album to be created or to show existing albums is missing, so re-instate

Generated images have incorrect orientation

Some images taken with smart phones, etc come through with the wrong orientation in the generated thumbnail, etc. The original version of the image is OK but all other generated images are usually 90° off.

I have a feeling this is a limitation of the image generation library used???

Prevent duplicate images

Suggestion from @sadeghim is to store a checksum on each image and then to warn (flag) or error when a new image is uploaded that has the same checksum.

Would also be good to have a find duplicate images for existing images. How to handle historical duplicate images is another matter that would require further investigation.

/ws/findImagesByMetadata no longer working

findImagesByMetadata from version 0.5 onwards have stopped working.
Im not clear why this is the case. Heres the code for query building:

        def filter = FilterBuilders.orFilter()
        values.each { value ->
            // Metadata keys are lowercased when indexed
            filter.add(FilterBuilders.termFilter(key.toLowerCase(), value))
        }

An example document (note the nested element 'metadata')

{
    "took": 3,
    "timed_out": false,
    "_shards": {
        "total": 5,
        "successful": 5,
        "failed": 0
    },
    "hits": {
        "total": 1,
        "max_score": 3.7037592,
        "hits": [
            {
                "_index": "images",
                "_type": "image",
                "_id": "48",
                "_score": 3.7037592,
                "_source": {
                    "imageIdentifier": "84350f65-19e7-4ccf-a2b6-807525d4e330",
                    "contentMD5Hash": "cef944bf2d88d36fd6ef0a9568d5a431",
                    "contentSHA1Hash": "28de413233afaac734164e01aafb18c3006b6cc4",
                    "mimeType": "image/jpeg",
                    "originalFilename": "dr4||7bfe0532-0df3-41c1-9707-97a15019763f||smallRaw.jpg",
                    "extension": "jpg",
                    "dateUploaded": "2015-08-10T10:00:04Z",
                    "dateTaken": "2015-08-10T10:00:04Z",
                    "fileSize": 22363,
                    "height": 209,
                    "width": 314,
                    "zoomLevels": 0,
                    "dataResourceUid": "dr4",
                    "creator": "Dave Martin",
                    "title": "My image title",
                    "description": "My image description",
                    "rights": "All rights reserved",
                    "rightsHolder": "Flora of Australia",
                    "license": "Creative Commons Attribution-Noncommercial-Share Alike",
                    "thumbHeight": 0,
                    "thumbWidth": 0,
                    "harvestable": false,
                    "metadata": {
                        "component 3": "Cr component: Quantization table 1, Sampling factors 1 horiz/1 vert",
                        "number of components": "3",
                        "x resolution": "1 dot",
                        "resolution units": "none",
                        "image height": "209 pixels",
                        "data precision": "8 bits",
                        "compression type": "Baseline",
                        "image width": "314 pixels",
                        "version": "1.2",
                        "y resolution": "1 dot",
                        "component 1": "Y component: Quantization table 0, Sampling factors 2 horiz/2 vert",
                        "component 2": "Cb component: Quantization table 1, Sampling factors 1 horiz/1 vert",
                        "fulloriginalurl": "http://bie.ala.org.au/repo/1013/207/2070645/smallRaw.jpg",
                        "originalfilename": "smallRaw.jpg",
                        "occurrenceid": "7bfe0532-0df3-41c1-9707-97a15019763f",
                        "identifier": "http://bie.ala.org.au/repo/1013/207/2070645/smallRaw.jpg"
                    }
                }
            }
        ]
    }
}

cc @m-r-c @aruizca - if you guys have insights as to what might have changed in elastic search I'd been keen to know. I couldnt spot anything obvious in release notes.

Automatic tagging

Hi all,

Just a quick follow up on the automatic image tagging from "Melbourne Science Hackfest" event.

After a bit of playing around, found following third party backend service that has been used by the app (http://115.146.94.208/) to get the image context.
Its free to use for the first 5000 request per month.

Service Provider: https://developer.clarifai.com
Pricing for the service: https://developer.clarifai.com/pricing/

Also, there is one open source framework which will also allows us to get the image context.
Demo: http://demo.caffe.berkeleyvision.org
Website link: http://caffe.berkeleyvision.org

Cheers
Sathish

Update postgresql driver dependency to prevent org.hibernate.exception.SQLGrammarException

We get this SQL grammar exception:

2019-02-25 12:51:00,516 [imagenes.gbif.es-startStop-1] ERROR util.JDBCExceptionReporter  - ERROR: column am.amcanorder does not exist
  Position: 427
2019-02-25 12:51:00,519 [imagenes.gbif.es-startStop-1] ERROR hbm2ddl.SchemaUpdate  - could not complete schema update
org.hibernate.exception.SQLGrammarException: could not get table metadata: album
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)
Caused by: org.postgresql.util.PSQLException: ERROR: column am.amcanorder does not exist
  Position: 427
        at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2270)
        at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1998)
        at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:255)
        at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:570)
        at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:406)
        at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:286)
        at org.postgresql.jdbc2.AbstractJdbc2DatabaseMetaData.getIndexInfo(AbstractJdbc2DatabaseMetaData.java:4234)

This is a ubuntu xenial server with postgresql-9.6.

It seems that the posgresql driver should be updated.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.