It doesn’t look like a validator error. This issue might be caused by a restricted Internet connection, preventing Community app from reaching servers with engines and dictionaries. Firewall-related issues are sometimes hard to reproduce on our side.
Please try the following: uninstall the app, remove the folder with configs, CTs and dictionaries (It is C:\Users{UserName}\Documents\Pinnacle 21 Community\configs), reinstall the app offline. Then please try to start it while being offline.
Let us know please if this will help you get into the Validator screen and run any validations.
If the validator screen freezes at configs loading again, please send us the log file. You can send the file to community@pinnacle21.com or just post here errors that are reported there.
If it still doesn’t work with Internet connection, please disconnect from the Internet and run the app in offline mode. Please let us know if that will stop these freezes that you experienced.
Please note that as I work from home I really need my internet connection to remain stable. I cannot keep disconnecting and reconnecting to the internet just to run this one program.
Thank you for following up with the error message from the log file. That’s a big help.
Pinnacle 21 Community does not have an off-line mode. Disconnecting from the network is helpful for troubleshooting, but as you say, it’s not a long-term solution.
We’ve been unable to reproduce this error in our testing so far. It would be helpful to our efforts if you could send us the log generated when you are connected to the internet during installation, then stay connected when you step through the setup. Our hope is that differences between the connected log and disconnected log will help us identify the cause of the issue.
Also, could you let us know if there a firewall working on your machine? If there is, we might need to investigate that as a possible cause.
It’s also worth checking the current date and time on your computer. It’s possible that an incorrect date or time could prevent a successful SSL connection.
Yes, the CRO I work for is behind a firewall, which I have no control over. We’ve been working with our IT department for months and they claim P21 should be able to get through, but success seems to be intermittent. Sometimes it works, sometimes it doesn’t. As I’ve said, version 3.0.1 seems to be stable in this regard, while 3.0.2 does not. As I’m sitting here typing this, I’ve noticed the “No Internet Connection” banner appear and disappear from across the top of the app’s main window a few times.
Yes my computer displays the correct date and time.
For what it’s worth, it seems odd that this software would need to keep in contact with its servers to function. Once installed, a connection to the internet should not be required for it to be able to validate datasets. Given that I’m sure I’m not the only one using this software who works for a company with strict firewall rules, would it not be beneficial to implement an offline mode in the software?
Further info from the log when P21 3.0.2 wouldn’t load engines etc:
2020-04-22 13:32:04 [RxIoScheduler-2] ERROR net.bootstrap.utils.S3Loader - Failed to download file: release/engine/engines.json
2020-04-22 13:32:05 [RxIoScheduler-3] ERROR net.bootstrap.utils.S3Loader - Failed to download file: /keys/cli_key
2020-04-22 13:32:05 [main] ERROR net.bootstrap.utils.S3Loader - Failed to download file: release/resources.json
2020-04-22 13:32:36 [RxIoScheduler-4] ERROR net.bootstrap.utils.S3Loader - Failed to download file: release/engine/engines.json
2020-04-22 13:32:36 [RxIoScheduler-2] ERROR net.bootstrap.utils.S3Loader - Failed to download file: release/resources.json
2020-04-22 13:32:59 [RxIoScheduler-4] ERROR net.bootstrap.config.ConfigUtils - S3 service error
java.lang.NullPointerException: null
at net.bootstrap.config.ConfigUtils.toName(ConfigUtils.java:386) ~[p21-client-1.0.2.jar:1.0.2]
at net.bootstrap.config.ConfigUtils.lambda$22(ConfigUtils.java:374) ~[p21-client-1.0.2.jar:1.0.2]
at rx.internal.operators.OnSubscribeMap$MapSubscriber.onNext(OnSubscribeMap.java:69) [p21-client-1.0.2.jar:1.0.2]
at rx.internal.operators.OperatorMerge$MergeSubscriber.emitScalar(OperatorMerge.java:395) ~[p21-client-1.0.2.jar:1.0.2]
at rx.internal.operators.OperatorMerge$MergeSubscriber.tryEmit(OperatorMerge.java:355) ~[p21-client-1.0.2.jar:1.0.2]
at rx.internal.operators.OperatorMerge$InnerSubscriber.onNext(OperatorMerge.java:846) ~[p21-client-1.0.2.jar:1.0.2]
at rx.internal.operators.OnSubscribeFromIterable$IterableProducer.slowPath(OnSubscribeFromIterable.java:117) ~[p21-client-1.0.2.jar:1.0.2]
at rx.internal.operators.OnSubscribeFromIterable$IterableProducer.request(OnSubscribeFromIterable.java:89) ~[p21-client-1.0.2.jar:1.0.2]
at rx.Subscriber.setProducer(Subscriber.java:211) ~[p21-client-1.0.2.jar:1.0.2]
at rx.internal.operators.OnSubscribeFromIterable.call(OnSubscribeFromIterable.java:63) ~[p21-client-1.0.2.jar:1.0.2]
at rx.internal.operators.OnSubscribeFromIterable.call(OnSubscribeFromIterable.java:34) ~[p21-client-1.0.2.jar:1.0.2]
at rx.Observable.unsafeSubscribe(Observable.java:10256) ~[p21-client-1.0.2.jar:1.0.2]
at rx.internal.operators.OperatorMerge$MergeSubscriber.onNext(OperatorMerge.java:248) ~[p21-client-1.0.2.jar:1.0.2]
at rx.internal.operators.OperatorMerge$MergeSubscriber.onNext(OperatorMerge.java:148) ~[p21-client-1.0.2.jar:1.0.2]
at rx.internal.operators.OnSubscribeMap$MapSubscriber.onNext(OnSubscribeMap.java:77) [p21-client-1.0.2.jar:1.0.2]
at rx.internal.operators.OnSubscribeMap$MapSubscriber.onNext(OnSubscribeMap.java:77) [p21-client-1.0.2.jar:1.0.2]
at rx.internal.operators.OnSubscribeMap$MapSubscriber.onNext(OnSubscribeMap.java:77) [p21-client-1.0.2.jar:1.0.2]
at rx.internal.operators.OnSubscribeMap$MapSubscriber.onNext(OnSubscribeMap.java:77) [p21-client-1.0.2.jar:1.0.2]
at rx.internal.operators.OperatorSubscribeOn$SubscribeOnSubscriber.onNext(OperatorSubscribeOn.java:74) ~[p21-client-1.0.2.jar:1.0.2]
at rx.internal.producers.SingleProducer.request(SingleProducer.java:65) ~[p21-client-1.0.2.jar:1.0.2]
at rx.internal.operators.OperatorSubscribeOn$SubscribeOnSubscriber$1.request(OperatorSubscribeOn.java:109) ~[p21-client-1.0.2.jar:1.0.2]
at rx.Subscriber.setProducer(Subscriber.java:211) ~[p21-client-1.0.2.jar:1.0.2]
at rx.internal.operators.OnSubscribeMap$MapSubscriber.setProducer(OnSubscribeMap.java:102) [p21-client-1.0.2.jar:1.0.2]
at rx.internal.operators.OnSubscribeMap$MapSubscriber.setProducer(OnSubscribeMap.java:102) [p21-client-1.0.2.jar:1.0.2]
at rx.internal.operators.OnSubscribeMap$MapSubscriber.setProducer(OnSubscribeMap.java:102) [p21-client-1.0.2.jar:1.0.2]
at rx.internal.operators.OnSubscribeMap$MapSubscriber.setProducer(OnSubscribeMap.java:102) [p21-client-1.0.2.jar:1.0.2]
at rx.internal.operators.OperatorSubscribeOn$SubscribeOnSubscriber.setProducer(OperatorSubscribeOn.java:105) ~[p21-client-1.0.2.jar:1.0.2]
at rx.internal.operators.SingleLiftObservableOperator$WrapSubscriberIntoSingle.onSuccess(SingleLiftObservableOperator.java:76) ~[p21-client-1.0.2.jar:1.0.2]
at rx.internal.operators.SingleOnSubscribeMap$MapSubscriber.onSuccess(SingleOnSubscribeMap.java:74) ~[p21-client-1.0.2.jar:1.0.2]
at rx.internal.operators.SingleFromCallable.call(SingleFromCallable.java:48) ~[p21-client-1.0.2.jar:1.0.2]
at rx.internal.operators.SingleFromCallable.call(SingleFromCallable.java:29) ~[p21-client-1.0.2.jar:1.0.2]
at rx.Single.subscribe(Single.java:1962) ~[p21-client-1.0.2.jar:1.0.2]
at rx.internal.operators.SingleOnSubscribeMap.call(SingleOnSubscribeMap.java:45) ~[p21-client-1.0.2.jar:1.0.2]
at rx.internal.operators.SingleOnSubscribeMap.call(SingleOnSubscribeMap.java:30) ~[p21-client-1.0.2.jar:1.0.2]
at rx.internal.operators.SingleToObservable.call(SingleToObservable.java:39) ~[p21-client-1.0.2.jar:1.0.2]
at rx.internal.operators.SingleToObservable.call(SingleToObservable.java:27) ~[p21-client-1.0.2.jar:1.0.2]
at rx.Observable.unsafeSubscribe(Observable.java:10256) ~[p21-client-1.0.2.jar:1.0.2]
at rx.internal.operators.OperatorSubscribeOn$SubscribeOnSubscriber.call(OperatorSubscribeOn.java:100) ~[p21-client-1.0.2.jar:1.0.2]
at rx.internal.schedulers.CachedThreadScheduler$EventLoopWorker$1.call(CachedThreadScheduler.java:230) ~[p21-client-1.0.2.jar:1.0.2]
at rx.internal.schedulers.ScheduledAction.run(ScheduledAction.java:55) ~[p21-client-1.0.2.jar:1.0.2]
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) ~[na:1.8.0_181]
at java.util.concurrent.FutureTask.run(FutureTask.java:266) ~[na:1.8.0_181]
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180) ~[na:1.8.0_181]
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) ~[na:1.8.0_181]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) ~[na:1.8.0_181]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) ~[na:1.8.0_181]
at java.lang.Thread.run(Thread.java:748) ~[na:1.8.0_181]
Caused by: rx.exceptions.OnErrorThrowable$OnNextValue: OnError while emitting onNext value: net.bootstrap.api.model.data.ResourcesData$EngineResource.class
at rx.exceptions.OnErrorThrowable.addValueAsLastCause(OnErrorThrowable.java:118) ~[p21-client-1.0.2.jar:1.0.2]
at rx.internal.operators.OnSubscribeMap$MapSubscriber.onNext(OnSubscribeMap.java:73) [p21-client-1.0.2.jar:1.0.2]
… 44 common frames omitted
Thank you again for your help. The latest error logs make it clear that the firewall is preventing Pinnacle 21 Community from working correctly.
We have a few ways forward. The first and simplest solution would be for you to request that the IT team with responsibility for the firewall to allow traffic on TCP protocol port 443 for our app and the java executables that run them:
If those executables were free to send traffic on port 443, we expect Community would work well for you.
The reason that Community 3.0.1 worked in your situation while 3.0.2 does not is that 3.0.1 used a set of static IP calls to download updates. Those addresses were probably allowed by the firewall.
Community 3.0.2 moved to a Content Delivery Network to ensure high download speeds all over the world. That improvement uses a set of dynamic IP ranges. The Iog messages show that the firewall blocks some of those addresses.
We are working on a solution for users that are behind restrictive firewalls. Once that solution is in place, we send instructions with specific IP addresses for their IT teams to unblock. That change will be a part of our future 3.1.0 update, targeted for Q2.
Internet connection is required to automatically keep your installation up-to-date with the latest versions of CDISC terminology, UNII, NDF-RT, and validation engines. When internet connection is not available or limited, Community will quickly become outdated and may produce validation results that are no longer compatible with regulatory agencies. A manual offline switch mode is not currently in our plans.
Default paths for per-user installation are all similar, but instead of “Program Files” they are inside
*C:\Users%USERPROFILE%\AppData\Local\Programs\Pinnacle 21 Community*
I’ve been fighting this issue for the last couple of days. I work as part of the support team for a group of late phase study users. One user works on a study that recently ‘locked’. They are not able to use the latest version (v3.1.0) due to the different validation messages that are output. V3.0.2 was working just fine for them about a week ago, but this week when they open it up and press the ‘Validator’ button, the screen seems to be stuck at ‘loading engines and configurations’. In the checking the config folder, it looks like the update process starts, but writes to the config.json file never completes. The messages in the log are:
[2021-04-09T17:51:58.980Z] [error] Cannot download differentially, fallback to full download: Error: Cannot download “https://p21-community-releases.s3.amazonaws.com/Pinnacle%2021%20Community%20Setup%203.0.2.exe.blockmap”, status 404: Not Found
at ClientRequest.request.createRequest.response (K:\pinnacle21-community\pinnacle21_3.0.2\resources\app.asar\node_modules\builder-util-runtime\out\httpExecutor.js:277:26)
at ClientRequest.emit (events.js:182:13)
at ClientRequest.EventEmitter.emit (domain.js:442:20)
at URLRequest.ClientRequest.urlRequest.on (K:\pinnacle21-community\pinnacle21_3.0.2\resources\electron.asar\browser\api\net.js:207:12)
at URLRequest.emit (events.js:182:13)
at URLRequest.EventEmitter.emit (domain.js:442:20)
at URLRequest.topLevelDomainCallback (domain.js:121:23)
[2021-04-09T17:52:37.713Z] [error] Error: Error: net::ERR_CONNECTION_REFUSED
[2021-04-09T17:52:37.714Z] [error] net::ERR_CONNECTION_REFUSED
[2021-04-09T17:52:37.714Z] [error] net::ERR_CONNECTION_REFUSED
I’m interpreting that ‘Status 404’ means that P21 can’t find some file. Before you start, P21 v3.0.2 is not available for download; resetting the users profile has no effect. Is there anything else I can check or do?
@Jim: but shouldn’t software versions and validation rules versions (including the messages) not be fully independent? I.e. when the software goes into a new version, and using the same validation rules versions, one would not notice any difference in the output.
You can always mail me for discussions. My mail address is easy to find.
Validation rules logic will be the same after the upgrade. Validation logic might change between engine versions, but not between Community app versions.
Therefore we recommend updating to Community 3.1.0. It includes a lot of important features and bug fixes, including WHODD and MED-RT dictionary support.
Earlier versions like 3.0.2 don’t give any advantage over the latest.
As of version 3.0.2 of P21 Community the validator seems to be broken on Windows 10.
Installation goes smoothly but the validator screen continuously displays a spinning circle with a message stating: “Loading engines and configurations”.