Thursday, September 12, 2019

Redis + Java + Redisson = Encoding issues

Using Reddison/Java to save to Redis, I noticed when using the redis-cli command-line client, that the saved records were encoded funny, as follows:


127.0.0.1:6379> hgetall SessionMap
 1) "\xfc(gB2muKkpNJVgDhiXQA5fGELNcFkFcBszLh5wqcXX"
 2) "\xfc\x0214"
 3) "\xfc(lh9wm3gpV767f6KrvZfVnHO5gKKUFMHfL1KJEsRC"
 4) "\xfc\x0214"

Following from their online documentation, in Java code, I had the following:

RMap map = redisson.getMap("SessionMap");
Turns out we need to specify the encoding of the string by using this bit of code instead:

RMap map = redisson.getMap("SessionMap", new StringCodec("UTF-8"));

Sunday, June 30, 2019

Docker Containers Missing!

For many months we've been trying to track down the cause for the sudden termination of our docker containers.

When running the "docker container ls" command, nothing is shown. It almost looks like they're missing.

  docker container ls  
 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES  

However running the process command "docker ps -a" does indeed indicate that our containers were exited:

 [root@patient-archive-cpi centos]# docker ps -a  
 CONTAINER ID    IMAGE            COMMAND         CREATED       STATUS            PORTS        NAMES  
 4a9b66fdd624    aehrc/ontoserver:ctsa-5.2  "/run.sh run"      7 weeks ago     Exited (143) 2 days ago            ontoserver  
 9e8314f52de2    postgres          "docker-entrypoint.s…"  7 weeks ago     Exited (0) 2 days ago         5432/tcp      docker_db_1  


The command for viewing "dockers logs ", indicated that the container was being shutdown. But there were no errors or reason for the shutdown.


 2019-06-28 03:41:48.302Z INFO 1 --- [ Thread-4] s.b.w.s.c.AnnotationConfigServletWebServerApplicationContext : Closing org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@63d4e2ba: startup date [Fri May 10 04:11:42 GMT 2019]; root of context hierarchy  
 2019-06-28 03:41:48.313Z INFO 1 --- [ Thread-4] o.s.jmx.export.annotation.AnnotationMBeanExporter : Unregistering JMX-exposed beans on shutdown  
 2019-06-28 03:41:48.314Z INFO 1 --- [ Thread-4] o.s.jmx.export.annotation.AnnotationMBeanExporter : Unregistering JMX-exposed beans  
 2019-06-28 03:41:48.316Z INFO 1 --- [ Thread-4] o.s.scheduling.concurrent.ThreadPoolTaskExecutor : Shutting down ExecutorService 'batchRunner'  
 2019-06-28 03:41:48.319Z INFO 1 --- [ Thread-4] o.s.scheduling.concurrent.ThreadPoolTaskExecutor : Shutting down ExecutorService 'jobRunner'  
 2019-06-28 03:41:48.319Z INFO 1 --- [ Thread-4] o.s.scheduling.concurrent.ThreadPoolTaskExecutor : Shutting down ExecutorService 'auditReportJobRunner'  
 2019-06-28 03:41:48.329Z INFO 1 --- [ Thread-4] o.s.orm.jpa.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default'  
 2019-06-28 03:41:48.331Z INFO 1 --- [ Thread-4] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown initiated...  
 2019-06-28 03:41:48.343Z INFO 1 --- [ Thread-4] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown completed.  

Running the docker command for viewing events showed nothing of interest

 docker events --filter container=ontoserver --since '2019-06-27'  

After some digging around it turns out that there was an automated yum update to docker in the /var/log/yum.log

 Jun 28 03:41:44 Updated: docker-ce-cli.x86_64 1:18.09.7-3.el7  
 Jun 28 03:41:48 Updated: containerd.io.x86_64 1.2.6-3.3.el7  
 Jun 28 03:41:52 Updated: docker-ce.x86_64 3:18.09.7-3.el7  

Turns out in docker there's a feature for re-enabling the docker containers after a docker update called 'live-restore'
Added a file /etc/docker/daemon.json with the following contents
{
  "live-restore": true
}
Then restarted docker
systemctl reload docker

Friday, April 5, 2019

flutter "unable to start activity" "ensureInitializationComplete must be called after startInitialization"

Flutter app fails to launch with the following error:


 Caused by: java.lang.IllegalStateException: ensureInitializationComplete must be called after startInitialization  
     at io.flutter.view.FlutterMain.ensureInitializationComplete(FlutterMain.java:190)  
     at io.flutter.app.FlutterActivityDelegate.onCreate(FlutterActivityDelegate.java:156)  
     at io.flutter.app.FlutterActivity.onCreate(FlutterActivity.java:89)  
     at net.pawpalflutter.MainActivity.onCreate(MainActivity.java:10)  
     at android.app.Activity.performCreate(Activity.java:6672)  
     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1140)  
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2612)  
     ... 9 more  


This error occurred when loading app from Android Studio to a mobile phone. It seems the transfer of the app may have been interrupted abruptly and didn't close properly, causing all subsequent transfers to fail.

The Solution

Power off and on the phone

Reference: https://github.com/flutter/flutter/issues/14513

Sunday, March 31, 2019

Intellij Dart Analysis Server Bad State: Too many elements

This error was also causing an issue "cannot find declaration to go to"
After doing a flutter upgrade, I had to do the following:

  1. Close IntelliJ
  2. delete the project's .idea folder and any *.iml files
  3. Reopen the project in intellij
If that doesn't work try File -> Invalidate caches / restart and repeat the steps above

Sunday, March 3, 2019

PlatformException(sign_in_failed, com.google.android.gms.common.api.ApiException: 8: null)

Using the flutter framework for android development, I received the following error during google signin:

PlatformException(sign_in_failed, com.google.android.gms.common.api.ApiException: 8: null)

While it wasn't obvious from the error message what the problem was, it turns out there was no network connection available. So if you get this error, check that you have access to the internet!!

Tuesday, February 19, 2019

Node.js Centos 7 production configuration


Install nodejs

Download
wget --no-check-certificate https://nodejs.org/dist/v10.15.1/node-v10.15.1-linux-x64.tar.xz
Move the downloaded file /usr/local
Then unpack
tar xf node-v10.15.1-linux-x64.tar.xz
Add node executables to the path by adding symlinks to /usr/bin
ln -s /usr/local/node/bin/node /usr/bin/node
ln -s /usr/local/node/bin/npm /usr/bin/npm
ln -s /usr/local/node/bin/npx /usr/bin/npx

Install pm2

To run node as service we need to install a nodejs package
npm install pm2@latest –g
We need to run set the path to pm2
ln -s /usr/local/node/bin/pm2 /usr/bin/pm2
ln -s /usr/local/node/bin/pm2 /usr/bin/pm2-runtime

For security reasons we should run our app NOT as root. We create a new user nodejs to run our app
useradd nodejs
chown -R nodejs:nodejs /usr/local/node
chown –R nodejs:nodejs /usr/local/node-v10.15.1-linux-x64
# as root
pm2 startup system –u nodejs –-hp /home/nodjs

To start the application as the nodejs user, switch to the user nodejs
su nodejs
pm2 start /usr/local/node/apps/chat/server.js
pm2 list
# to automatically start the app on reboots
pm2 save

You should see that the app is running as user nodejs 



Likewise to stop
#other commands
pm2 stop /usr/local/node/apps/chat/server.js
pm2 delete /usr/local/node/apps/chat/server.js

Monday, February 11, 2019

Install ArangoDB on Centos 7


The instructions on the official arangodb website do not work, so I’m documenting the steps I took so that it may help others.

The first problem is adding arangodb as a repo due to invalid SSL certificates. To get around the issue:


The added ‘k’ parameter connects to the repo insecurely skipping the step of verifying the certificates.

Before we can run the yum command to install arangodb, we need to configure the arangodb.repo to skip SSL checks by adding the following to the file /etc/yum.repos.d/arangodb.repo
sslverify=0

Then run the command to install:
yum install arangodb3

References: