Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

LPS-55653 #26636

Closed
wants to merge 7 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
2 changes: 2 additions & 0 deletions modules/portal/portal-scheduler-quartz/build.xml
Expand Up @@ -2,6 +2,8 @@
<!DOCTYPE project>

<project>
<property name="import.shared" value="portal-scheduler" />

<import file="../../../tools/sdk/build-common-osgi-plugin.xml" />

<property name="auto.deploy.dir" value="${liferay.home}/osgi/portal" />
Expand Down
Expand Up @@ -27,7 +27,6 @@
import com.liferay.portal.kernel.messaging.MessageListener;
import com.liferay.portal.kernel.scheduler.IntervalTrigger;
import com.liferay.portal.kernel.scheduler.JobState;
import com.liferay.portal.kernel.scheduler.JobStateSerializeUtil;
import com.liferay.portal.kernel.scheduler.SchedulerEngine;
import com.liferay.portal.kernel.scheduler.SchedulerEngineHelper;
import com.liferay.portal.kernel.scheduler.SchedulerException;
Expand All @@ -47,6 +46,7 @@
import com.liferay.portal.kernel.util.Validator;
import com.liferay.portal.model.Portlet;
import com.liferay.portal.model.PortletApp;
import com.liferay.portal.scheduler.JobStateSerializeUtil;
import com.liferay.portal.scheduler.quartz.internal.job.MessageSenderJob;
import com.liferay.portal.service.PortletLocalService;

Expand Down
Expand Up @@ -22,7 +22,6 @@
import com.liferay.portal.kernel.messaging.Message;
import com.liferay.portal.kernel.messaging.MessageBusUtil;
import com.liferay.portal.kernel.scheduler.JobState;
import com.liferay.portal.kernel.scheduler.JobStateSerializeUtil;
import com.liferay.portal.kernel.scheduler.SchedulerEngine;
import com.liferay.portal.kernel.scheduler.SchedulerEngineHelperUtil;
import com.liferay.portal.kernel.scheduler.StorageType;
Expand All @@ -31,6 +30,7 @@
import com.liferay.portal.kernel.util.MethodKey;
import com.liferay.portal.kernel.util.PropsKeys;
import com.liferay.portal.kernel.util.PropsUtil;
import com.liferay.portal.scheduler.JobStateSerializeUtil;

import java.util.Map;

Expand Down
Expand Up @@ -23,7 +23,6 @@
import com.liferay.portal.kernel.scheduler.CronTrigger;
import com.liferay.portal.kernel.scheduler.IntervalTrigger;
import com.liferay.portal.kernel.scheduler.JobState;
import com.liferay.portal.kernel.scheduler.JobStateSerializeUtil;
import com.liferay.portal.kernel.scheduler.SchedulerEngine;
import com.liferay.portal.kernel.scheduler.SchedulerException;
import com.liferay.portal.kernel.scheduler.StorageType;
Expand All @@ -46,6 +45,7 @@
import com.liferay.portal.kernel.uuid.PortalUUIDUtil;
import com.liferay.portal.model.Portlet;
import com.liferay.portal.model.PortletApp;
import com.liferay.portal.scheduler.JobStateSerializeUtil;
import com.liferay.portal.scheduler.quartz.internal.job.MessageSenderJob;
import com.liferay.portal.service.PortletLocalService;

Expand Down
11 changes: 11 additions & 0 deletions modules/portal/portal-scheduler/.project
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>

<projectDescription>
<name>portal-scheduler-master</name>
<comment></comment>
<projects></projects>
<buildSpec>
</buildSpec>
<natures>
</natures>
</projectDescription>
5 changes: 5 additions & 0 deletions modules/portal/portal-scheduler/bnd.bnd
@@ -0,0 +1,5 @@
Bundle-Name: Liferay Portal Scheduler
Bundle-SymbolicName: com.liferay.portal.scheduler
Bundle-Version: 1.0.0
Export-Package: com.liferay.portal.scheduler.*;version=${plugin.full.version}
Include-Resource: classes
Empty file.
8 changes: 8 additions & 0 deletions modules/portal/portal-scheduler/build.xml
@@ -0,0 +1,8 @@
<?xml version="1.0"?>
<!DOCTYPE project>

<project>
<import file="../../../tools/sdk/build-common-osgi-plugin.xml" />

<property name="auto.deploy.dir" value="${liferay.home}/osgi/portal" />
</project>
23 changes: 23 additions & 0 deletions modules/portal/portal-scheduler/ivy.xml
@@ -0,0 +1,23 @@
<?xml version="1.0"?>

<ivy-module
version="2.0"
xmlns:m2="http://ant.apache.org/ivy/maven"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd"
>
<info module="${plugin.name}" organisation="com.liferay">
<extends extendType="configurations,description,info" location="${sdk.dir}/ivy.xml" module="com.liferay.sdk" organisation="com.liferay" revision="latest.integration" />
</info>

<publications>
<artifact type="jar" />
<artifact type="pom" />
<artifact m2:classifier="sources" />
</publications>

<dependencies defaultconf="default">
<dependency name="org.osgi.core" org="org.osgi" rev="5.0.0" />
<dependency name="org.osgi.compendium" org="org.osgi" rev="5.0.0" />
</dependencies>
</ivy-module>
Expand Up @@ -12,8 +12,10 @@
* details.
*/

package com.liferay.portal.kernel.scheduler;
package com.liferay.portal.scheduler;

import com.liferay.portal.kernel.scheduler.JobState;
import com.liferay.portal.kernel.scheduler.TriggerState;
import com.liferay.portal.kernel.util.ObjectValuePair;

import java.util.ArrayList;
Expand Down
Expand Up @@ -12,12 +12,11 @@
* details.
*/

package com.liferay.portal.scheduler;
package com.liferay.portal.scheduler.internal;

import com.liferay.portal.kernel.bean.BeanReference;
import com.liferay.portal.kernel.bean.IdentifiableBean;
import com.liferay.portal.kernel.cluster.BaseClusterMasterTokenTransitionListener;
import com.liferay.portal.kernel.cluster.ClusterMasterExecutorUtil;
import com.liferay.portal.kernel.cluster.ClusterMasterExecutor;
import com.liferay.portal.kernel.cluster.ClusterMasterTokenTransitionListener;
import com.liferay.portal.kernel.cluster.Clusterable;
import com.liferay.portal.kernel.cluster.ClusterableContextThreadLocal;
Expand All @@ -26,18 +25,21 @@
import com.liferay.portal.kernel.messaging.Message;
import com.liferay.portal.kernel.messaging.proxy.ProxyModeThreadLocal;
import com.liferay.portal.kernel.scheduler.SchedulerEngine;
import com.liferay.portal.kernel.scheduler.SchedulerEngineHelper;
import com.liferay.portal.kernel.scheduler.SchedulerEngineHelperUtil;
import com.liferay.portal.kernel.scheduler.SchedulerException;
import com.liferay.portal.kernel.scheduler.StorageType;
import com.liferay.portal.kernel.scheduler.Trigger;
import com.liferay.portal.kernel.scheduler.TriggerState;
import com.liferay.portal.kernel.scheduler.messaging.SchedulerResponse;
import com.liferay.portal.kernel.servlet.PluginContextLifecycleThreadLocal;
import com.liferay.portal.kernel.util.GetterUtil;
import com.liferay.portal.kernel.util.MethodHandler;
import com.liferay.portal.kernel.util.MethodKey;
import com.liferay.portal.kernel.util.ObjectValuePair;
import com.liferay.portal.kernel.util.Props;
import com.liferay.portal.kernel.util.PropsKeys;
import com.liferay.portal.kernel.util.StringPool;
import com.liferay.portal.util.PropsValues;

import java.util.Iterator;
import java.util.List;
Expand All @@ -55,16 +57,6 @@
public class ClusterSchedulerEngine
implements IdentifiableBean, SchedulerEngine {

public static SchedulerEngine createClusterSchedulerEngine(
SchedulerEngine schedulerEngine) {

if (PropsValues.CLUSTER_LINK_ENABLED && PropsValues.SCHEDULER_ENABLED) {
schedulerEngine = new ClusterSchedulerEngine(schedulerEngine);
}

return schedulerEngine;
}

public ClusterSchedulerEngine(SchedulerEngine schedulerEngine) {
_schedulerEngine = schedulerEngine;

Expand Down Expand Up @@ -350,7 +342,7 @@ public void setBeanIdentifier(String beanIdentifier) {
public void shutdown() throws SchedulerException {
_portalReady = false;

ClusterMasterExecutorUtil.removeClusterMasterTokenTransitionListener(
_clusterMasterExecutor.removeClusterMasterTokenTransitionListener(
_schedulerClusterMasterTokenTransitionListener);

_schedulerEngine.shutdown();
Expand All @@ -359,14 +351,14 @@ public void shutdown() throws SchedulerException {
@Override
public void start() throws SchedulerException {
try {
if (!ClusterMasterExecutorUtil.isMaster()) {
if (!_clusterMasterExecutor.isMaster()) {
initMemoryClusteredJobs();
}

_schedulerClusterMasterTokenTransitionListener =
new SchedulerClusterMasterTokenTransitionListener();

ClusterMasterExecutorUtil.addClusterMasterTokenTransitionListener(
_clusterMasterExecutor.addClusterMasterTokenTransitionListener(
_schedulerClusterMasterTokenTransitionListener);
}
catch (Exception e) {
Expand Down Expand Up @@ -511,17 +503,18 @@ protected void initMemoryClusteredJobs() throws Exception {
_getScheduledJobsMethodKey, StorageType.MEMORY_CLUSTERED);

Future<List<SchedulerResponse>> future =
ClusterMasterExecutorUtil.executeOnMaster(methodHandler);
_clusterMasterExecutor.executeOnMaster(methodHandler);

List<SchedulerResponse> schedulerResponses = future.get(
PropsValues.CLUSTERABLE_ADVICE_CALL_MASTER_TIMEOUT,
GetterUtil.getLong(
_props.get(PropsKeys.CLUSTERABLE_ADVICE_CALL_MASTER_TIMEOUT)),
TimeUnit.SECONDS);

for (SchedulerResponse schedulerResponse : schedulerResponses) {
String jobName = schedulerResponse.getJobName();
String groupName = schedulerResponse.getGroupName();

TriggerState triggerState = SchedulerEngineHelperUtil.getJobState(
TriggerState triggerState = _schedulerEngineHelper.getJobState(
schedulerResponse);

Message message = schedulerResponse.getMessage();
Expand All @@ -530,14 +523,13 @@ protected void initMemoryClusteredJobs() throws Exception {

_memoryClusteredJobs.put(
getFullName(jobName, groupName),
new ObjectValuePair<SchedulerResponse, TriggerState>(
schedulerResponse, triggerState));
new ObjectValuePair<>(schedulerResponse, triggerState));
}
}

protected boolean isMemoryClusteredSlaveJob(StorageType storageType) {
if ((storageType != StorageType.MEMORY_CLUSTERED) ||
ClusterMasterExecutorUtil.isMaster()) {
_clusterMasterExecutor.isMaster()) {

return false;
}
Expand Down Expand Up @@ -587,6 +579,22 @@ protected void setClusterableThreadLocal(StorageType storageType) {
PLUGIN_READY, pluginReady);
}

protected void setClusterMasterExecutor(
ClusterMasterExecutor clusterMasterExecutor) {

_clusterMasterExecutor = clusterMasterExecutor;
}

protected void setProps(Props props) {
_props = props;
}

protected void setSchedulerEngineHelper(
SchedulerEngineHelper schedulerEngineHelper) {

_schedulerEngineHelper = schedulerEngineHelper;
}

protected void updateMemoryClusteredJob(
String jobName, String groupName, TriggerState triggerState) {

Expand Down Expand Up @@ -617,25 +625,23 @@ protected void updateMemoryClusteredJobs(

protected static final String PORTAL_READY = "portal.ready";

@BeanReference(
name = "com.liferay.portal.scheduler.ClusterSchedulerEngineService"
)
protected SchedulerEngine schedulerEngine;

private static final Log _log = LogFactoryUtil.getLog(
ClusterSchedulerEngine.class);

private static final MethodKey _getScheduledJobsMethodKey = new MethodKey(
SchedulerEngineHelperUtil.class, "getScheduledJobs", StorageType.class);

private String _beanIdentifier;
private ClusterMasterExecutor _clusterMasterExecutor;
private final Map<String, ObjectValuePair<SchedulerResponse, TriggerState>>
_memoryClusteredJobs = new ConcurrentHashMap<>();
private boolean _portalReady;
private Props _props;
private final java.util.concurrent.locks.Lock _readLock;
private ClusterMasterTokenTransitionListener
_schedulerClusterMasterTokenTransitionListener;
private final SchedulerEngine _schedulerEngine;
private SchedulerEngineHelper _schedulerEngineHelper;
private final java.util.concurrent.locks.Lock _writeLock;

private class SchedulerClusterMasterTokenTransitionListener
Expand Down
Expand Up @@ -12,7 +12,7 @@
* details.
*/

package com.liferay.portal.scheduler;
package com.liferay.portal.scheduler.internal;

import com.liferay.portal.kernel.cluster.ClusterInvokeAcceptor;
import com.liferay.portal.kernel.cluster.ClusterInvokeThreadLocal;
Expand Down