Netflix/Priam

Can Priam run locally? (Not on ec2)

Closed this issue · 3 comments

I wanted to test out Priam on my local C* instance. I tried to follow https://github.com/Netflix/Priam/wiki/Setup

My local java was 1.8 while the tomcat default docker had 1.7 which was the first problem. Have you guys considered writing a dockerfile to launch and configure priam? Also, seems that activity has slowed down on this repo, has Priam been abandoned by Netflix?

Here's how I went about trying to test Priam:

git clone https://github.com/Netflix/Priam
cd Priam
git checkout 3.11
./gradlew build
docker run -it --rm -p 8888:8080 tomcat:8.0-jre8
# acc.creds is in the format from https://github.com/Netflix/Priam/blob/master/priam/src/main/resources/conf/awscredential.properties
docker cp acc.creds loving_wing:/etc/awscredential.properties
docker cp priam-web/build/libs/priam-web-3.12.0-SNAPSHOT.war loving_wing:/usr/local/tomcat/webapps/priam.war

But ended up with the following errors in the tomcat output.

SLF4J: Actual binding is of type [ch.qos.logback.classic.util.ContextSelectorStaticBinder]
23:01:35.177 [localhost-startStop-2] ERROR c.n.p.d.InjectedWebListener - Unable to provision, see the following errors:

1) Error injecting constructor, java.lang.RuntimeException: java.net.SocketTimeoutException: connect timed out
  at com.netflix.priam.identity.AwsInstanceEnvIdentity.<init>(AwsInstanceEnvIdentity.java:30)
  at com.netflix.priam.identity.AwsInstanceEnvIdentity.class(AwsInstanceEnvIdentity.java:28)
  while locating com.netflix.priam.identity.AwsInstanceEnvIdentity
  while locating com.netflix.priam.identity.InstanceEnvIdentity
    for the 3rd parameter of com.netflix.priam.defaultimpl.PriamConfiguration.<init>(PriamConfiguration.java:281)
  at com.netflix.priam.defaultimpl.PriamConfiguration.class(PriamConfiguration.java:43)
  while locating com.netflix.priam.defaultimpl.PriamConfiguration
  while locating com.netflix.priam.IConfiguration

1 error
com.google.inject.ProvisionException: Unable to provision, see the following errors:

1) Error injecting constructor, java.lang.RuntimeException: java.net.SocketTimeoutException: connect timed out
  at com.netflix.priam.identity.AwsInstanceEnvIdentity.<init>(AwsInstanceEnvIdentity.java:30)
  at com.netflix.priam.identity.AwsInstanceEnvIdentity.class(AwsInstanceEnvIdentity.java:28)
  while locating com.netflix.priam.identity.AwsInstanceEnvIdentity
  while locating com.netflix.priam.identity.InstanceEnvIdentity
    for the 3rd parameter of com.netflix.priam.defaultimpl.PriamConfiguration.<init>(PriamConfiguration.java:281)
  at com.netflix.priam.defaultimpl.PriamConfiguration.class(PriamConfiguration.java:43)
  while locating com.netflix.priam.defaultimpl.PriamConfiguration
  while locating com.netflix.priam.IConfiguration

1 error
	at com.google.inject.internal.InjectorImpl$2.get(InjectorImpl.java:1028) ~[guice-4.1.0.jar:na]
	at com.google.inject.internal.InjectorImpl.getInstance(InjectorImpl.java:1054) ~[guice-4.1.0.jar:na]
	at com.netflix.priam.defaultimpl.InjectedWebListener.getInjector(InjectedWebListener.java:50) ~[priam-3.12.0-SNAPSHOT.jar:3.12.0-SNAPSHOT]
	at com.google.inject.servlet.GuiceServletContextListener.contextInitialized(GuiceServletContextListener.java:47) [guice-servlet-4.1.0.jar:na]
	at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4853) [catalina.jar:8.0.46]
	at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5314) [catalina.jar:8.0.46]
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145) [catalina.jar:8.0.46]
	at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:753) [catalina.jar:8.0.46]
	at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:729) [catalina.jar:8.0.46]
	at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:717) [catalina.jar:8.0.46]
	at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:976) [catalina.jar:8.0.46]
	at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1853) [catalina.jar:8.0.46]
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [na:1.8.0_141]
	at java.util.concurrent.FutureTask.run(FutureTask.java:266) [na:1.8.0_141]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [na:1.8.0_141]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [na:1.8.0_141]
	at java.lang.Thread.run(Thread.java:748) [na:1.8.0_141]
Caused by: java.lang.RuntimeException: java.net.SocketTimeoutException: connect timed out

The logs don't explain what it's trying to connect to, so I'm a bit stumped.

@ubershmekel Currently priam can only run on an EC2 instance (behind ASG). It is a hard requirement for priam to start.

You will need to configure all the configurations (refer to IConfiguration.java) for it to work properly. In the error, it looks like it was unable to bind AwsInstanceEnvIdentity. If you are running on the local machine, Priam will not be able to get information like (public IP, instance id etc).

We have thought about the idea of Priam running on the local machine (for testing purposes) but it was considered lower priority compared to other features like ensuring Priam is ready for 3.x C*.

Priam is not abandoned by Netflix and is very much in use and under active development. Usually, Netflix marks the project inactive/deprecated/under maintenance if we have that intention. Probably you tried "master" branch of the project. If you are C* 2.X you should try "3.x" branch.(https://github.com/Netflix/Priam/wiki/3.x) We are currently working on "3.11" branch for making it compatible with OSS C* 3.11.

I understand, thank you. Should I close this issue or leave it open as a feature request?

@ubershmekel let's open a request for that feature only. It will make things cleaner.