Skip to content

Commit

Permalink
Remove legacy Semaphore
Browse files Browse the repository at this point in the history
  • Loading branch information
mdogan committed Sep 20, 2019
1 parent 60591eb commit 7fd018d
Show file tree
Hide file tree
Showing 176 changed files with 699 additions and 7,246 deletions.
Expand Up @@ -62,7 +62,7 @@
import static com.hazelcast.config.DomConfigHelper.cleanNodeName;
import static com.hazelcast.config.DomConfigHelper.getBooleanValue;
import static com.hazelcast.config.DomConfigHelper.getIntegerValue;
import static com.hazelcast.spring.HazelcastInstanceDefinitionParser.CP_SUBSYSTEM_SUFFX;
import static com.hazelcast.spring.HazelcastInstanceDefinitionParser.CP_SUBSYSTEM_SUFFIX;
import static com.hazelcast.internal.util.StringUtil.upperCaseInternal;
import static org.springframework.beans.factory.support.BeanDefinitionBuilder.rootBeanDefinition;
import static org.springframework.util.Assert.isTrue;
Expand Down Expand Up @@ -102,7 +102,7 @@ private void registerCPSubsystemBean(Element element, ParserContext parserContex
cpBeanDefBuilder.setLazyInit(true);

BeanDefinitionHolder holder =
new BeanDefinitionHolder(cpBeanDefBuilder.getBeanDefinition(), instanceBeanRef + CP_SUBSYSTEM_SUFFX);
new BeanDefinitionHolder(cpBeanDefBuilder.getBeanDefinition(), instanceBeanRef + CP_SUBSYSTEM_SUFFIX);
registerBeanDefinition(holder, parserContext.getRegistry());
}

Expand Down
Expand Up @@ -97,7 +97,6 @@
import com.hazelcast.config.ScheduledExecutorConfig;
import com.hazelcast.config.SecurityConfig;
import com.hazelcast.config.SecurityInterceptorConfig;
import com.hazelcast.config.SemaphoreConfig;
import com.hazelcast.config.ServerSocketEndpointConfig;
import com.hazelcast.config.ServiceConfig;
import com.hazelcast.config.ServicesConfig;
Expand All @@ -113,7 +112,7 @@
import com.hazelcast.config.WanReplicationConfig;
import com.hazelcast.config.WanReplicationRef;
import com.hazelcast.config.WanSyncConfig;
import com.hazelcast.config.cp.CPSemaphoreConfig;
import com.hazelcast.config.cp.SemaphoreConfig;
import com.hazelcast.config.cp.CPSubsystemConfig;
import com.hazelcast.config.cp.FencedLockConfig;
import com.hazelcast.config.cp.RaftAlgorithmConfig;
Expand Down Expand Up @@ -202,7 +201,6 @@ private class SpringXmlConfigBuilder extends SpringXmlBuilderHelper {
private ManagedMap<String, AbstractBeanDefinition> atomicLongManagedMap;
private ManagedMap<String, AbstractBeanDefinition> atomicReferenceManagedMap;
private ManagedMap<String, AbstractBeanDefinition> reliableTopicManagedMap;
private ManagedMap<String, AbstractBeanDefinition> semaphoreManagedMap;
private ManagedMap<String, AbstractBeanDefinition> listManagedMap;
private ManagedMap<String, AbstractBeanDefinition> setManagedMap;
private ManagedMap<String, AbstractBeanDefinition> topicManagedMap;
Expand Down Expand Up @@ -232,7 +230,6 @@ private class SpringXmlConfigBuilder extends SpringXmlBuilderHelper {
this.atomicLongManagedMap = createManagedMap("atomicLongConfigs");
this.atomicReferenceManagedMap = createManagedMap("atomicReferenceConfigs");
this.reliableTopicManagedMap = createManagedMap("reliableTopicConfigs");
this.semaphoreManagedMap = createManagedMap("semaphoreConfigs");
this.listManagedMap = createManagedMap("listConfigs");
this.setManagedMap = createManagedMap("setConfigs");
this.topicManagedMap = createManagedMap("topicConfigs");
Expand Down Expand Up @@ -293,8 +290,6 @@ public void handleConfig(Element element) {
handleAtomicReference(node);
} else if ("reliable-topic".equals(nodeName)) {
handleReliableTopic(node);
} else if ("semaphore".equals(nodeName)) {
handleSemaphore(node);
} else if ("map".equals(nodeName)) {
handleMap(node);
} else if ("cache".equals(nodeName)) {
Expand Down Expand Up @@ -403,7 +398,7 @@ private void handleCPSubSystem(Node node) {
raftAlgorithmConfigBuilder.getBeanDefinition());
} else if ("semaphores".equals(nodeName)) {
ManagedMap<String, AbstractBeanDefinition> semaphores = new ManagedMap<String, AbstractBeanDefinition>();
handleCPSemaphores(semaphores, child);
handleSemaphores(semaphores, child);
cpSubsystemConfigBuilder.addPropertyValue("SemaphoreConfigs", semaphores);
} else if ("locks".equals(nodeName)) {
ManagedMap<String, AbstractBeanDefinition> locks = new ManagedMap<String, AbstractBeanDefinition>();
Expand All @@ -424,21 +419,21 @@ private void handleCPSubSystem(Node node) {
configBuilder.addPropertyValue("CPSubsystemConfig", cpSubsystemConfigBuilder.getBeanDefinition());
}

private void handleCPSemaphores(ManagedMap<String, AbstractBeanDefinition> cpSemaphores, Node node) {
private void handleSemaphores(ManagedMap<String, AbstractBeanDefinition> semaphores, Node node) {
for (Node child : childElements(node)) {
BeanDefinitionBuilder cpSemaphoreConfigBuilder = createBeanBuilder(CPSemaphoreConfig.class);
BeanDefinitionBuilder semaphoreConfigBuilder = createBeanBuilder(SemaphoreConfig.class);
for (Node subChild : childElements(child)) {
String nodeName = cleanNodeName(subChild);
String value = getTextContent(subChild).trim();
if ("name".equals(nodeName)) {
cpSemaphoreConfigBuilder.addPropertyValue("name", value);
semaphoreConfigBuilder.addPropertyValue("name", value);
} else if ("jdk-compatible".equals(nodeName)) {
cpSemaphoreConfigBuilder.addPropertyValue("JDKCompatible", getBooleanValue(value));
semaphoreConfigBuilder.addPropertyValue("JDKCompatible", getBooleanValue(value));
}
}
AbstractBeanDefinition beanDefinition = cpSemaphoreConfigBuilder.getBeanDefinition();
AbstractBeanDefinition beanDefinition = semaphoreConfigBuilder.getBeanDefinition();
String name = (String) beanDefinition.getPropertyValues().get("name");
cpSemaphores.put(name, beanDefinition);
semaphores.put(name, beanDefinition);
}
}

Expand Down Expand Up @@ -1064,18 +1059,6 @@ public void handleReliableTopic(Node node) {
reliableTopicManagedMap.put(getAttribute(node, "name"), builder.getBeanDefinition());
}

public void handleSemaphore(Node node) {
BeanDefinitionBuilder builder = createBeanBuilder(SemaphoreConfig.class);
fillAttributeValues(node, builder);
for (Node childNode : childElements(node)) {
String nodeName = cleanNodeName(childNode);
if ("split-brain-protection-ref".equals(nodeName)) {
builder.addPropertyValue("splitBrainProtectionName", getTextContent(childNode));
}
}
semaphoreManagedMap.put(getAttribute(node, "name"), builder.getBeanDefinition());
}

public void handleLock(Node node) {
BeanDefinitionBuilder lockConfigBuilder = createBeanBuilder(LockConfig.class);
fillAttributeValues(node, lockConfigBuilder);
Expand Down
Expand Up @@ -53,7 +53,7 @@
*/
public class HazelcastInstanceDefinitionParser extends AbstractHazelcastBeanDefinitionParser {

static final String CP_SUBSYSTEM_SUFFX = "@cp-subsystem";
static final String CP_SUBSYSTEM_SUFFIX = "@cp-subsystem";

@Override
protected AbstractBeanDefinition parseInternal(Element element, ParserContext parserContext) {
Expand Down Expand Up @@ -100,7 +100,7 @@ private void registerCPSubsystemBean(Element element) {
cpBeanDefBuilder.setFactoryMethodOnBean("getCPSubsystem", instanceBeanRef);

BeanDefinitionHolder holder =
new BeanDefinitionHolder(cpBeanDefBuilder.getBeanDefinition(), instanceBeanRef + CP_SUBSYSTEM_SUFFX);
new BeanDefinitionHolder(cpBeanDefBuilder.getBeanDefinition(), instanceBeanRef + CP_SUBSYSTEM_SUFFIX);
registerBeanDefinition(holder, parserContext.getRegistry());
}
}
Expand Down
Expand Up @@ -51,6 +51,7 @@ public class HazelcastNamespaceHandler extends NamespaceHandlerSupport {
private static final String PNCOUNTER = "PNCounter";

static {
CP_TYPES.add(SEMAPHORE);
CP_TYPES.add(COUNT_DOWN_LATCH);
}

Expand Down
Expand Up @@ -24,7 +24,7 @@
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;

import static com.hazelcast.spring.HazelcastInstanceDefinitionParser.CP_SUBSYSTEM_SUFFX;
import static com.hazelcast.spring.HazelcastInstanceDefinitionParser.CP_SUBSYSTEM_SUFFIX;

/**
* BeanDefinitionParser for Type Configuration of Hazelcast Types like map, queue, topic etc.
Expand Down Expand Up @@ -72,7 +72,7 @@ public void handle(Element element) {
}
String instanceRef = getTextContent(instanceRefNode);
if (HazelcastNamespaceHandler.CP_TYPES.contains(type)) {
builder.getRawBeanDefinition().setFactoryBeanName(instanceRef + CP_SUBSYSTEM_SUFFX);
builder.getRawBeanDefinition().setFactoryBeanName(instanceRef + CP_SUBSYSTEM_SUFFIX);
} else {
builder.getRawBeanDefinition().setFactoryBeanName(instanceRef);
}
Expand Down
48 changes: 2 additions & 46 deletions hazelcast-spring/src/main/resources/hazelcast-spring-4.0.xsd
Expand Up @@ -419,50 +419,6 @@
<xs:attribute name="name" use="required" type="xs:string"/>
</xs:complexType>
</xs:element>
<xs:element name="semaphore" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="split-brain-protection-ref" minOccurs="0" maxOccurs="1">
<xs:annotation>
<xs:documentation>
Adds the Split Brain Protection for this data-structure which you configure using the split-brain-protection element.
You should set the split-brain-protection-ref's value as the split brain protection's name.
</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
<xs:attribute name="name" use="required" type="xs:string"/>
<xs:attribute name="initial-permits" use="optional" type="parameterized-unsigned-int">
<xs:annotation>
<xs:documentation>
The thread count to which the concurrent access is limited. For example, if you set
it to "3", concurrent access to the object is limited to 3 threads.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="backup-count" use="optional" type="parameterized-backup-count" default="1">
<xs:annotation>
<xs:documentation>
Number of synchronous backups. For example, if 1 is set as the backup-count,
then the items in the ringbuffer are copied to one other JVM for fail-safety.
`backup-count` + `async-backup-count` cannot be bigger than maximum
backup count which is `6`. Valid numbers are 0 (no backup), 1, 2 ... 6.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="async-backup-count" use="optional" type="parameterized-backup-count"
default="0">
<xs:annotation>
<xs:documentation>
Number of asynchronous backups. For example, if 1 is set as the backup-count,
then the items in the ringbuffer are copied to one other JVM for fail-safety.
`backup-count` + `async-backup-count` cannot be bigger than maximum
backup count which is `6`. Valid numbers are 0 (no backup), 1, 2 ... 6.
</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name="reliable-topic" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
Expand Down Expand Up @@ -4479,7 +4435,7 @@
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element name="cp-semaphore" type="cp-semaphore" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="semaphore" type="semaphore" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
Expand Down Expand Up @@ -4562,7 +4518,7 @@
</xs:all>
</xs:complexType>

<xs:complexType name="cp-semaphore">
<xs:complexType name="semaphore">
<xs:all>
<xs:element name="name" type="xs:string">
<xs:annotation>
Expand Down
Expand Up @@ -91,7 +91,6 @@
import com.hazelcast.config.SSLConfig;
import com.hazelcast.config.ScheduledExecutorConfig;
import com.hazelcast.config.SecurityConfig;
import com.hazelcast.config.SemaphoreConfig;
import com.hazelcast.config.SerializationConfig;
import com.hazelcast.config.SerializerConfig;
import com.hazelcast.config.ServiceConfig;
Expand All @@ -109,7 +108,7 @@
import com.hazelcast.config.WanReplicationConfig;
import com.hazelcast.config.WanReplicationRef;
import com.hazelcast.config.WanSyncConfig;
import com.hazelcast.config.cp.CPSemaphoreConfig;
import com.hazelcast.config.cp.SemaphoreConfig;
import com.hazelcast.config.cp.CPSubsystemConfig;
import com.hazelcast.config.cp.FencedLockConfig;
import com.hazelcast.config.cp.RaftAlgorithmConfig;
Expand Down Expand Up @@ -617,16 +616,6 @@ public void testAtomicReferenceConfig() {
assertEquals(4223, mergePolicyConfig.getBatchSize());
}

@Test
public void testSemaphoreConfig() {
SemaphoreConfig testSemaphore = config.getSemaphoreConfig("testSemaphore");
assertNotNull(testSemaphore);
assertEquals("testSemaphore", testSemaphore.getName());
assertEquals(1, testSemaphore.getBackupCount());
assertEquals(1, testSemaphore.getAsyncBackupCount());
assertEquals(10, testSemaphore.getInitialPermits());
}

@Test
public void testReliableTopicConfig() {
ReliableTopicConfig testReliableTopic = config.getReliableTopicConfig("testReliableTopic");
Expand Down Expand Up @@ -1425,12 +1414,12 @@ public void testCPSubsystemConfig() {
assertEquals(250, raftAlgorithmConfig.getCommitIndexAdvanceCountToSnapshot());
assertEquals(75, raftAlgorithmConfig.getUncommittedEntryCountToRejectNewAppends());
assertEquals(50, raftAlgorithmConfig.getAppendRequestBackoffTimeoutInMillis());
CPSemaphoreConfig cpSemaphoreConfig1 = cpSubsystemConfig.findSemaphoreConfig("sem1");
CPSemaphoreConfig cpSemaphoreConfig2 = cpSubsystemConfig.findSemaphoreConfig("sem2");
assertNotNull(cpSemaphoreConfig1);
assertNotNull(cpSemaphoreConfig2);
assertTrue(cpSemaphoreConfig1.isJDKCompatible());
assertFalse(cpSemaphoreConfig2.isJDKCompatible());
SemaphoreConfig semaphoreConfig1 = cpSubsystemConfig.findSemaphoreConfig("sem1");
SemaphoreConfig semaphoreConfig2 = cpSubsystemConfig.findSemaphoreConfig("sem2");
assertNotNull(semaphoreConfig1);
assertNotNull(semaphoreConfig2);
assertTrue(semaphoreConfig1.isJDKCompatible());
assertFalse(semaphoreConfig2.isJDKCompatible());
FencedLockConfig lockConfig1 = cpSubsystemConfig.findLockConfig("lock1");
FencedLockConfig lockConfig2 = cpSubsystemConfig.findLockConfig("lock2");
assertNotNull(lockConfig1);
Expand Down
Expand Up @@ -360,10 +360,6 @@
<hz:merge-policy batch-size="4223">PassThroughMergePolicy</hz:merge-policy>
</hz:atomic-reference>

<hz:semaphore name="testSemaphore" async-backup-count="1" backup-count="1" initial-permits="10">
<hz:split-brain-protection-ref>my-split-brain-protection</hz:split-brain-protection-ref>
</hz:semaphore>

<hz:reliable-topic name="testReliableTopic" topic-overload-policy="BLOCK" read-batch-size="10"
statistics-enabled="false">
<hz:message-listeners>
Expand Down Expand Up @@ -841,14 +837,14 @@
<hz:append-request-backoff-timeout-in-millis>50</hz:append-request-backoff-timeout-in-millis>
</hz:raft-algorithm>
<hz:semaphores>
<hz:cp-semaphore>
<hz:semaphore>
<hz:name>sem1</hz:name>
<hz:jdk-compatible>true</hz:jdk-compatible>
</hz:cp-semaphore>
<hz:cp-semaphore>
</hz:semaphore>
<hz:semaphore>
<hz:name>sem2</hz:name>
<hz:jdk-compatible>false</hz:jdk-compatible>
</hz:cp-semaphore>
</hz:semaphore>
</hz:semaphores>
<hz:locks>
<hz:fenced-lock>
Expand Down
Expand Up @@ -30,7 +30,7 @@
import com.hazelcast.cp.internal.datastructures.atomicref.RaftAtomicRefService;
import com.hazelcast.cp.internal.datastructures.countdownlatch.CountDownLatchService;
import com.hazelcast.cp.internal.datastructures.lock.RaftLockService;
import com.hazelcast.cp.internal.datastructures.semaphore.RaftSemaphoreService;
import com.hazelcast.cp.internal.datastructures.semaphore.SemaphoreService;
import com.hazelcast.cp.lock.FencedLock;
import com.hazelcast.cp.session.CPSessionManagementService;

Expand Down Expand Up @@ -71,7 +71,7 @@ public FencedLock getLock(String name) {

@Override
public ISemaphore getSemaphore(String name) {
return proxyFactory.createProxy(RaftSemaphoreService.SERVICE_NAME, name);
return proxyFactory.createProxy(SemaphoreService.SERVICE_NAME, name);
}

@Override
Expand Down

0 comments on commit 7fd018d

Please sign in to comment.