private Runnable handleSplitBrainMerge()

in lightning-integration/lightning-integration-jgroups/src/main/java/org/apache/directmemory/lightning/jgroups/LightningJGroupsMembershipListener.java [144:196]


    private Runnable handleSplitBrainMerge( View view )
    {
        final List<Address> members = new ArrayList<Address>( view.getMembers() );

        // Quote from JGroups documentation:
        // *Note that the first member of a view is the coordinator (the one who
        // emits new views).*
        Address coordinator = members.get( 0 );

        if ( channel.getAddress().equals( coordinator ) )
        {
            final ClassDefinitionContainer container = serializer.getClassDefinitionContainer();

            try
            {
                final byte[] byteBuffer = Util.objectToByteBuffer( container );

                return new Runnable()
                {

                    @Override
                    public void run()
                    {
                        for ( int i = 1; i < members.size(); i++ )
                        {
                            Address receiver = members.get( i );
                            if ( receiver == null )
                            {
                                continue;
                            }

                            try
                            {
                                channel.send( receiver, byteBuffer );
                            }
                            catch ( Exception e )
                            {
                                throw new LightningClusterException(
                                                                     "Could not send ClassDefinitionContainer to address "
                                                                         + receiver, e );
                            }
                        }
                    }
                };
            }
            catch ( Exception e )
            {
                throw new LightningClusterException( "Could not serialize ClassDefinitionContainer", e );
            }
        }

        return null;
    }