diff --git a/assembly/assembly-wsmaster-war/pom.xml b/assembly/assembly-wsmaster-war/pom.xml index bc8144103b1..0c4065554f9 100644 --- a/assembly/assembly-wsmaster-war/pom.xml +++ b/assembly/assembly-wsmaster-war/pom.xml @@ -324,6 +324,10 @@ org.eclipse.persistence org.eclipse.persistence.core + + org.eclipse.persistence + org.eclipse.persistence.extension + org.eclipse.persistence org.eclipse.persistence.jpa @@ -340,6 +344,14 @@ org.flywaydb flyway-core + + org.jgroups + jgroups + + + org.jgroups.kubernetes + kubernetes + org.postgresql postgresql diff --git a/assembly/assembly-wsmaster-war/src/main/java/org/eclipse/che/api/deploy/WsMasterModule.java b/assembly/assembly-wsmaster-war/src/main/java/org/eclipse/che/api/deploy/WsMasterModule.java index 6ba97761e0e..8fc1cf0909c 100644 --- a/assembly/assembly-wsmaster-war/src/main/java/org/eclipse/che/api/deploy/WsMasterModule.java +++ b/assembly/assembly-wsmaster-war/src/main/java/org/eclipse/che/api/deploy/WsMasterModule.java @@ -83,6 +83,7 @@ import org.eclipse.che.workspace.infrastructure.kubernetes.KubernetesInfrastructure; import org.eclipse.che.workspace.infrastructure.openshift.OpenShiftInfraModule; import org.eclipse.che.workspace.infrastructure.openshift.OpenShiftInfrastructure; +import org.eclipse.persistence.config.CacheCoordinationProtocol; import org.eclipse.persistence.config.PersistenceUnitProperties; import org.flywaydb.core.internal.util.PlaceholderReplacer; @@ -214,15 +215,23 @@ protected void configure() { persistenceProperties.put(PersistenceUnitProperties.LOGGING_LEVEL, "SEVERE"); persistenceProperties.put( PersistenceUnitProperties.NON_JTA_DATASOURCE, "java:/comp/env/jdbc/che"); - bindConstant().annotatedWith(Names.named("jndi.datasource.name")).to("java:/comp/env/jdbc/che"); + String infrastructure = System.getenv("CHE_INFRASTRUCTURE_ACTIVE"); if (Boolean.valueOf(System.getenv("CHE_MULTIUSER"))) { persistenceProperties.put( PersistenceUnitProperties.EXCEPTION_HANDLER_CLASS, "org.eclipse.che.core.db.postgresql.jpa.eclipselink.PostgreSqlExceptionHandler"); - configureMultiUserMode(); + if (OpenShiftInfrastructure.NAME.equals(infrastructure) + || KubernetesInfrastructure.NAME.equals(infrastructure)) { + persistenceProperties.put( + PersistenceUnitProperties.COORDINATION_PROTOCOL, CacheCoordinationProtocol.JGROUPS); + persistenceProperties.put( + PersistenceUnitProperties.COORDINATION_JGROUPS_CONFIG, "jgroups/che-tcp.xml"); + } + + configureMultiUserMode(persistenceProperties, infrastructure); } else { persistenceProperties.put( PersistenceUnitProperties.EXCEPTION_HANDLER_CLASS, @@ -234,7 +243,6 @@ protected void configure() { new com.google.inject.persist.jpa.JpaPersistModule("main") .properties(persistenceProperties)); - String infrastructure = System.getenv("CHE_INFRASTRUCTURE_ACTIVE"); if (OpenShiftInfrastructure.NAME.equals(infrastructure)) { install(new OpenShiftInfraModule()); } else if (KubernetesInfrastructure.NAME.equals(infrastructure)) { @@ -267,7 +275,8 @@ private void configureSingleUserMode() { bind(org.eclipse.che.security.oauth.OAuthAuthenticationService.class); } - private void configureMultiUserMode() { + private void configureMultiUserMode( + Map persistenceProperties, String infrastructure) { bind(TemplateProcessor.class).to(STTemplateProcessorImpl.class); bind(DataSource.class).toProvider(org.eclipse.che.core.db.JndiDataSourceProvider.class); diff --git a/assembly/assembly-wsmaster-war/src/main/webapp/WEB-INF/classes/jgroups/che-tcp.xml b/assembly/assembly-wsmaster-war/src/main/webapp/WEB-INF/classes/jgroups/che-tcp.xml new file mode 100644 index 00000000000..6102277fb81 --- /dev/null +++ b/assembly/assembly-wsmaster-war/src/main/webapp/WEB-INF/classes/jgroups/che-tcp.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/deploy/kubernetes/helm/che/templates/deployment.yaml b/deploy/kubernetes/helm/che/templates/deployment.yaml index 581a7e45d85..a76b89a977d 100644 --- a/deploy/kubernetes/helm/che/templates/deployment.yaml +++ b/deploy/kubernetes/helm/che/templates/deployment.yaml @@ -218,6 +218,10 @@ spec: configMapKeyRef: key: CHE_INFRA_KUBERNETES_INGRESS_ANNOTATIONS__JSON name: che + - name: OPENSHIFT_KUBE_PING_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace - name: CHE_INFRA_KUBERNETES_SERVER__STRATEGY valueFrom: configMapKeyRef: @@ -243,6 +247,8 @@ spec: name: http - containerPort: 8000 name: http-debug + - containerPort: 8888 + name: jgroups-ping readinessProbe: httpGet: path: /api/system/state diff --git a/deploy/kubernetes/kubectl/che-kubernetes.yaml b/deploy/kubernetes/kubectl/che-kubernetes.yaml index 72099f3439f..2aed3932dc7 100644 --- a/deploy/kubernetes/kubectl/che-kubernetes.yaml +++ b/deploy/kubernetes/kubectl/che-kubernetes.yaml @@ -249,6 +249,10 @@ items: configMapKeyRef: key: CHE_INFRA_KUBERNETES_INGRESS_ANNOTATIONS__JSON name: che + - name: OPENSHIFT_KUBE_PING_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace - name: CHE_LOGS_APPENDERS_IMPL valueFrom: configMapKeyRef: @@ -269,6 +273,8 @@ items: name: http - containerPort: 8000 name: http-debug + - containerPort: 8888 + name: jgroups-ping readinessProbe: httpGet: path: /api/system/state diff --git a/deploy/openshift/che-openshift.yml b/deploy/openshift/che-openshift.yml index a44aa1e58f2..92aec5e6987 100644 --- a/deploy/openshift/che-openshift.yml +++ b/deploy/openshift/che-openshift.yml @@ -37,6 +37,10 @@ items: spec: containers: - env: + - name: OPENSHIFT_KUBE_PING_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace #CHE_MASTER_CONFIG image: registry.devshift.net/che/che:291ebd9-fabric8-e470151 imagePullPolicy: IfNotPresent @@ -53,6 +57,8 @@ items: name: http - containerPort: 8000 name: http-debug + - containerPort: 8888 + name: jgroups-ping readinessProbe: httpGet: path: /api/system/state