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

Multiple calls to setHazelcastInstance on HazelcastInstanceAware #15008

Open
neilstevenson opened this issue May 10, 2019 · 1 comment
Open

Comments

@neilstevenson
Copy link
Contributor

On 3.12, when a HazelcastInstanceAware runnable is executed,
the setHazelcastInstance method is called more than once

Reproducer is attached to #15007

@mmedenjak mmedenjak added this to the 4.1 milestone May 10, 2019
@burakcelebi burakcelebi added the Source: Internal PR or issue was opened by an employee label Oct 1, 2019
@Holmistr Holmistr modified the milestones: 4.1, 4.2 Aug 25, 2020
@mmedenjak mmedenjak modified the milestones: 4.2, Backlog Jan 15, 2021
@JackPGreen
Copy link
Contributor

This still seems to be a problem, take the following example:


import com.hazelcast.collection.*;
import com.hazelcast.config.*;
import com.hazelcast.core.*;

public class ListenerTest {
    public static void main(final String[] args) {
        HazelcastInstance instance = Hazelcast.newHazelcastInstance();

        String objectName = "my-list";

        instance.getConfig().addListConfig(new ListConfig(objectName)
                .addItemListenerConfig(new ItemListenerConfig().setImplementation(new MyItemListener<>())));

        instance.getList(objectName).add(1);

        instance.shutdown();
    }

    public static class MyItemListener<V> implements ItemListener<V>, HazelcastInstanceAware {
        @Override
        public void itemAdded(ItemEvent<V> item) {
        }

        @Override
        public void itemRemoved(ItemEvent<V> item) {
        }

        public void setHazelcastInstance(HazelcastInstance hazelcastInstance) {
            System.out.println("setHazelcastInstance called from:");
        
            for (StackTraceElement ste : Thread.currentThread().getStackTrace()) {
                System.out.println(ste);
            }
        }
    }
}

HazelcastInstanceAware.setHazelcastInstance(HazelcastInstance) is called three times.

setHazelcastInstance called from:
java.base/java.lang.Thread.getStackTrace(Thread.java:1610)
ListenerTest$MyItemListener.setHazelcastInstance(ListenerTest.java:33)
com.hazelcast.instance.impl.HazelcastManagedContext.initialize(HazelcastManagedContext.java:39)
com.hazelcast.internal.serialization.impl.compact.CompactStreamSerializer.read(CompactStreamSerializer.java:190)
com.hazelcast.internal.serialization.impl.compact.CompactStreamSerializer.read(CompactStreamSerializer.java:174)
com.hazelcast.internal.serialization.impl.StreamSerializerAdapter.read(StreamSerializerAdapter.java:44)
com.hazelcast.internal.serialization.impl.AbstractSerializationService.readObject(AbstractSerializationService.java:357)
com.hazelcast.internal.serialization.InternalSerializationService.readObject(InternalSerializationService.java:81)
com.hazelcast.internal.serialization.impl.ByteArrayObjectDataInput.readObject(ByteArrayObjectDataInput.java:600)
com.hazelcast.config.ListenerConfig.readData(ListenerConfig.java:162)
com.hazelcast.config.ItemListenerConfig.readData(ItemListenerConfig.java:114)
com.hazelcast.internal.serialization.impl.DataSerializableSerializer.readInternal(DataSerializableSerializer.java:167)
com.hazelcast.internal.serialization.impl.DataSerializableSerializer.read(DataSerializableSerializer.java:113)
com.hazelcast.internal.serialization.impl.DataSerializableSerializer.read(DataSerializableSerializer.java:1)
com.hazelcast.internal.serialization.impl.StreamSerializerAdapter.read(StreamSerializerAdapter.java:44)
com.hazelcast.internal.serialization.impl.AbstractSerializationService.readObject(AbstractSerializationService.java:357)
com.hazelcast.internal.serialization.InternalSerializationService.readObject(InternalSerializationService.java:81)
com.hazelcast.internal.serialization.impl.ByteArrayObjectDataInput.readObject(ByteArrayObjectDataInput.java:600)
com.hazelcast.internal.serialization.impl.SerializationUtil.readList(SerializationUtil.java:432)
com.hazelcast.internal.serialization.impl.SerializationUtil.readNullableList(SerializationUtil.java:398)
com.hazelcast.config.CollectionConfig.readData(CollectionConfig.java:323)
com.hazelcast.internal.serialization.impl.DataSerializableSerializer.readInternal(DataSerializableSerializer.java:167)
com.hazelcast.internal.serialization.impl.DataSerializableSerializer.read(DataSerializableSerializer.java:113)
com.hazelcast.internal.serialization.impl.DataSerializableSerializer.read(DataSerializableSerializer.java:1)
com.hazelcast.internal.serialization.impl.StreamSerializerAdapter.read(StreamSerializerAdapter.java:44)
com.hazelcast.internal.serialization.impl.AbstractSerializationService.toObject(AbstractSerializationService.java:271)
com.hazelcast.internal.dynamicconfig.ClusterWideConfigurationService.cloneConfig(ClusterWideConfigurationService.java:278)
com.hazelcast.internal.dynamicconfig.ClusterWideConfigurationService.broadcastConfigAsync(ClusterWideConfigurationService.java:255)
com.hazelcast.internal.dynamicconfig.ClusterWideConfigurationService.broadcastConfigAsync(ClusterWideConfigurationService.java:241)
com.hazelcast.internal.dynamicconfig.ClusterWideConfigurationService.broadcastConfig(ClusterWideConfigurationService.java:217)
com.hazelcast.internal.dynamicconfig.DynamicConfigurationAwareConfig.addListConfig(DynamicConfigurationAwareConfig.java:418)
ListenerTest.main(ListenerTest.java:12)
setHazelcastInstance called from:
java.base/java.lang.Thread.getStackTrace(Thread.java:1610)
ListenerTest$MyItemListener.setHazelcastInstance(ListenerTest.java:33)
com.hazelcast.instance.impl.HazelcastManagedContext.initialize(HazelcastManagedContext.java:39)
com.hazelcast.internal.serialization.impl.AbstractSerializationService.readObject(AbstractSerializationService.java:359)
com.hazelcast.internal.serialization.InternalSerializationService.readObject(InternalSerializationService.java:81)
com.hazelcast.internal.serialization.impl.ByteArrayObjectDataInput.readObject(ByteArrayObjectDataInput.java:600)
com.hazelcast.config.ListenerConfig.readData(ListenerConfig.java:162)
com.hazelcast.config.ItemListenerConfig.readData(ItemListenerConfig.java:114)
com.hazelcast.internal.serialization.impl.DataSerializableSerializer.readInternal(DataSerializableSerializer.java:167)
com.hazelcast.internal.serialization.impl.DataSerializableSerializer.read(DataSerializableSerializer.java:113)
com.hazelcast.internal.serialization.impl.DataSerializableSerializer.read(DataSerializableSerializer.java:1)
com.hazelcast.internal.serialization.impl.StreamSerializerAdapter.read(StreamSerializerAdapter.java:44)
com.hazelcast.internal.serialization.impl.AbstractSerializationService.readObject(AbstractSerializationService.java:357)
com.hazelcast.internal.serialization.InternalSerializationService.readObject(InternalSerializationService.java:81)
com.hazelcast.internal.serialization.impl.ByteArrayObjectDataInput.readObject(ByteArrayObjectDataInput.java:600)
com.hazelcast.internal.serialization.impl.SerializationUtil.readList(SerializationUtil.java:432)
com.hazelcast.internal.serialization.impl.SerializationUtil.readNullableList(SerializationUtil.java:398)
com.hazelcast.config.CollectionConfig.readData(CollectionConfig.java:323)
com.hazelcast.internal.serialization.impl.DataSerializableSerializer.readInternal(DataSerializableSerializer.java:167)
com.hazelcast.internal.serialization.impl.DataSerializableSerializer.read(DataSerializableSerializer.java:113)
com.hazelcast.internal.serialization.impl.DataSerializableSerializer.read(DataSerializableSerializer.java:1)
com.hazelcast.internal.serialization.impl.StreamSerializerAdapter.read(StreamSerializerAdapter.java:44)
com.hazelcast.internal.serialization.impl.AbstractSerializationService.toObject(AbstractSerializationService.java:271)
com.hazelcast.internal.dynamicconfig.ClusterWideConfigurationService.cloneConfig(ClusterWideConfigurationService.java:278)
com.hazelcast.internal.dynamicconfig.ClusterWideConfigurationService.broadcastConfigAsync(ClusterWideConfigurationService.java:255)
com.hazelcast.internal.dynamicconfig.ClusterWideConfigurationService.broadcastConfigAsync(ClusterWideConfigurationService.java:241)
com.hazelcast.internal.dynamicconfig.ClusterWideConfigurationService.broadcastConfig(ClusterWideConfigurationService.java:217)
com.hazelcast.internal.dynamicconfig.DynamicConfigurationAwareConfig.addListConfig(DynamicConfigurationAwareConfig.java:418)
ListenerTest.main(ListenerTest.java:12)
setHazelcastInstance called from:
java.base/java.lang.Thread.getStackTrace(Thread.java:1610)
ListenerTest$MyItemListener.setHazelcastInstance(ListenerTest.java:33)
com.hazelcast.collection.impl.collection.AbstractCollectionProxyImpl.initialize(AbstractCollectionProxyImpl.java:95)
com.hazelcast.spi.impl.proxyservice.impl.ProxyRegistry.doCreateProxy(ProxyRegistry.java:266)
com.hazelcast.spi.impl.proxyservice.impl.ProxyRegistry.createProxy(ProxyRegistry.java:235)
com.hazelcast.spi.impl.proxyservice.impl.ProxyRegistry.getOrCreateProxyFuture(ProxyRegistry.java:202)
com.hazelcast.spi.impl.proxyservice.impl.ProxyRegistry.getOrCreateProxy(ProxyRegistry.java:182)
com.hazelcast.spi.impl.proxyservice.impl.ProxyServiceImpl.getDistributedObject(ProxyServiceImpl.java:153)
com.hazelcast.instance.impl.HazelcastInstanceImpl.getDistributedObject(HazelcastInstanceImpl.java:365)
com.hazelcast.instance.impl.HazelcastInstanceImpl.getList(HazelcastInstanceImpl.java:219)
com.hazelcast.instance.impl.HazelcastInstanceProxy.getList(HazelcastInstanceProxy.java:126)
ListenerTest.main(ListenerTest.java:15)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

5 participants