Re: ERJGroupsSynchronizer
Re: ERJGroupsSynchronizer
- Subject: Re: ERJGroupsSynchronizer
- From: Ricardo Parada via Webobjects-dev <email@hidden>
- Date: Mon, 28 Mar 2022 12:46:21 -0400
Hello, all, here’s a plain text version of my previous email, in case anybody
had trouble reading it.
I created this subclass to keep EOF in sync within a single java VM:
/**
* Keeps EOF in sync within a single java VM.
*
* Wonder's ProcessChangesQueue seems to takes care of keeping
* in sync EOF stacks used in other threads.
*/
public class LocalSynchronizer extends ERXRemoteSynchronizer {
public LocalSynchronizer(IChangeListener listener) {
super(listener);
}
@Override
public void join() throws Throwable { }
@Override
public void leave() throws Throwable { }
@Override
public void listen() throws Throwable { }
@Override
protected void _writeCacheChanges(int transactionID, NSArray<CacheChange>
cacheChanges) throws Throwable
{
// Nothing to write to the group
}
}
To use it you use these properties:
# Synchronization across EOF stacks (single VM)
#
# NOTE: The maxCoordinator property is needed to trigger the of
# initialization the synchronizer.
#
er.extensions.ERXObjectStoreCoordinatorPool.maxCoordinators=1
er.extensions.remoteSynchronizer.enabled=true
er.extensions.remoteSynchronizer=com.mpv.eof.LocalSynchronizer
Notice that the properties to specify which entities to include / exclude is
not needed as the filtering of changes by entity seems to be used only when
deciding which changes to send to remote instances.
Thank you
Ricardo J. Parada
> On Mar 25, 2022, at 5:03 PM, Ricardo Parada via Webobjects-dev
> <email@hidden> wrote:
>
>
> By the way, here’s a synchronizer subclass I wrote to keep changes in sync
> within a single java VM.
>
>
> /**
> * Keeps EOF in sync within a single java VM.
> *
> * Wonder's ProcessChangesQueue seems to takes care of keeping
> * in sync EOF stacks used in other threads.
> */
> public class LocalSynchronizer extends ERXRemoteSynchronizer {
>
> public LocalSynchronizer(IChangeListener listener) {
> super(listener);
> }
>
> @Override
> public void join() throws Throwable { }
>
> @Override
> public void leave() throws Throwable { }
>
> @Override
> public void listen() throws Throwable { }
>
> @Override
> protected void _writeCacheChanges(int transactionID, NSArray<CacheChange>
> cacheChanges) throws Throwable
> {
> // Nothing to write to the group
> }
> }
>
> To use it you use these properties:
>
> # Synchronization across EOF stacks (single VM)
> #
> # NOTE: The maxCoordinator property is needed to trigger the of
> # initialization the synchronizer.
> #
> er.extensions.ERXObjectStoreCoordinatorPool.maxCoordinators=1
> er.extensions.remoteSynchronizer.enabled=true
> er.extensions.remoteSynchronizer=com.mpv.eof.LocalSynchronizer
>
> Notice that the properties to specify which entities to include / exclude is
> not needed as the filtering of changes by entity seems to be used only when
> deciding which changes to send to remote instances.
>
> Thank you
> Ricardo J. Parada
>
>
>> On Mar 25, 2022, at 4:49 PM, Ricardo Parada via Webobjects-dev
>> <email@hidden <mailto:email@hidden>>
>> wrote:
>>
>> Thank you all for the responses.
>>
>> When we put the ERJGroupsSynchronizer in production we started receiving
>> reports of users not being able to access the application instances or
>> getting kicked out of the application. I do not know if the
>> ERJGroupsSynchronizer is the one to blame. So I think it would be unfair to
>> blame the problem on ERJGroupsSynchronizer.
>>
>> We just noticed the these warnings in the console and the first thing we
>> tried was to disable the synchronizer and the problem seems like it
>> disappeared after we did that.
>>
>> Mar 11, 2022 12:14:10 AM org.jgroups.protocols.UDP setBufferSize
>> WARNING: JGRP000015: the send buffer of socket MulticastSocket was set to
>> 5MB, but the OS only allocated 212.99KB. This might lead to performance
>> problems. Please set your max send buffer in the OS correctly (e.g.
>> net.core.wmem_max on Linux)
>>
>> This seems like it could be fixed by increasing the max send buffer on the
>> servers.
>>
>> The testers in our UAT environment noticed the following warnings:
>>
>> WARNING: JGRP000012: discarded message from different cluster
>> UATClaimScrubber (our cluster is UATContractManager). Sender was
>> f677bf19-c5e7-a69e-2000-97638a06f579 (received 4 identical messages from
>> f677bf19-c5e7-a69e-2000-97638a06f579 in the last 64665 ms)
>>
>> I think this just means that two different instances with a different
>> application name are using the same multicast address. Nothing really
>> harmful. This could probably be taken care of by setting the group name to
>> the same name on both.
>>
>> If I get any additional information I will post my findings.
>>
>> Thank you all,
>> Ricardo J. Parada
>>
>>
>>
>>
>>
>>> On Mar 21, 2022, at 11:28 AM, Steve Peery <email@hidden
>>> <mailto:email@hidden>> wrote:
>>>
>>> I’ve also been using it for years to synchronize instances.
>>>
>>> I’m not sure it is going to do what you want. You say you want to use it so
>>> you can update "without resorting to fetching”. I think the synchronization
>>> notifications simply pass the global IDs of the objects that have changed
>>> so they are refetched in the receiving instances.
>>>
>>> Steve
>>>
>>>
>>>
>>>> On Mar 20, 2022, at 6:21 PM, Paul Hoadley via Webobjects-dev
>>>> <email@hidden <mailto:email@hidden>>
>>>> wrote:
>>>>
>>>> Hi Ricardo,
>>>>
>>>> On 19 Mar 2022, at 14:25, Ricardo Parada via Webobjects-dev
>>>> <email@hidden <mailto:email@hidden>>
>>>> wrote:
>>>>
>>>>> Does anybody use ERJGroupsSynchronizer?
>>>>
>>>> We've been using it for years now, albeit with some light modifications to
>>>> allow JGroups to work on AWS (originally via the Meltmedia AWS_PING
>>>> project, but now via our own fork of that since it's essentially
>>>> abandonware).
>>>>
>>>>> I’m trying to synchronize two EOF stacks within a single VM. I don’t want
>>>>> the synchronization to happen across application instances.
>>>>>
>>>>> The video from Mike Shrag from a WOWODC conference said it can be single
>>>>> VM or across VM. I’m interested in the single VM but have not yet figured
>>>>> out how to do it.
>>>>>
>>>>> Basically, I have a background task doing work on a separate EOF stack
>>>>> and I want the changes to reflect on the EOF stack used by the user
>>>>> interface without resorting to fetching.
>>>>
>>>> Intra-JVM like that is not a configuration we've used. Can you walk us
>>>> through what you've tried and why you think it's not working? There have
>>>> been a few others using it over the years, maybe they're still on the list.
>>>>
>>>>
>>>> --
>>>> Paul Hoadley
>>>> https://logicsquad.net/ <https://logicsquad.net/>
>>>> https://www.linkedin.com/company/logic-squad/
>>>> <https://www.linkedin.com/company/logic-squad/>
>>>>
>>>> _______________________________________________
>>>> Do not post admin requests to the list. They will be ignored.
>>>> Webobjects-dev mailing list (email@hidden
>>>> <mailto:email@hidden>)
>>>> Help/Unsubscribe/Update your Subscription:
>>>>
>>>> This email sent to email@hidden <mailto:email@hidden>
>> _______________________________________________
>> Do not post admin requests to the list. They will be ignored.
>> Webobjects-dev mailing list (email@hidden
>> <mailto:email@hidden>)
>> Help/Unsubscribe/Update your Subscription:
>>
>> This email sent to email@hidden
>
> _______________________________________________
> Do not post admin requests to the list. They will be ignored.
> Webobjects-dev mailing list (email@hidden)
> Help/Unsubscribe/Update your Subscription:
>
> This email sent to email@hidden
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Webobjects-dev mailing list (email@hidden)
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden