Hi Val,

I run test with no filter class in server classpath. I've got an error
wiith peerClassLoading disabled, which is ok as server can't unmarshal
filter object.
But with peerClassLoading enabled, query works fine but looks like filter
class won't be updated on server.

On Wed, Apr 5, 2017 at 11:14 AM, Valentin Kulichenko <
valentin.kuliche...@gmail.com> wrote:

> Andrey,
>
> Marshaller cache does not store classes, only class names. So I'm not sure
> what you mean by this.
>
> I looked at the code and it seems I was wrong - peer class loading does
> work for scan query filter, which is good. But as I mentioned before, if
> the class is available on local classpath, it will never be dynamically
> loaded, even if peer class loading is enabled. Therefore server will not
> know about any changes happening to the class definition on the client.
> This is correct behavior.
>
> -Val
>
> On Wed, Apr 5, 2017 at 12:01 AM, Andrey Mashenkov <
> andrey.mashen...@gmail.com> wrote:
>
> > Hi Val,
> >
> > Filter object serialized and send inside GridCacheQueryRequest, and then
> it
> > is deserialized on server side and loaded by cache class loader.
> > Looks like filter class is cached in marshaller cache.
> >
> >
> > On Tue, Apr 4, 2017 at 4:43 PM, Valentin Kulichenko <
> > valentin.kuliche...@gmail.com> wrote:
> >
> > > Andrey,
> > >
> > > To my knowledge, peer class loading is not supported for scan query
> > > filters, but I'm not sure though. Can you please check?
> > >
> > > Note that this actually doesn't matter if the class is available on
> > > server's local classpath. In this case it will be always used
> regardless
> > of
> > > any changes done on a client (i.e. will never be dynamically loaded).
> > This
> > > is true for any functionality, including Compute Grid.
> > >
> > > -Val
> > >
> > > On Mon, Apr 3, 2017 at 10:19 AM, Andrey Mashenkov <
> > > andrey.mashen...@gmail.com> wrote:
> > >
> > > > Crossposted to dev:
> > > >
> > > > Guys,
> > > >
> > > > ScanQuery filter code (see IgniteBiPredicate implementation below)
> can
> > be
> > > > cached on server side
> > > > that can cause unexpected results.
> > > > The main point here is server node never restarts while client does
> it
> > > with
> > > > filter code changed.
> > > >
> > > > Is it ok?
> > > >
> > > > I try to add *serialVersionUID* and it was useless. The only class
> > > renaming
> > > > was helpful.
> > > >
> > > >
> > > > ---------- Forwarded message ----------
> > > > From: David Li <david.li...@gmail.com>
> > > > Date: Mon, Apr 3, 2017 at 9:24 AM
> > > > Subject: Re: ScanQuery With BinaryObject
> > > > To: u...@ignite.apache.org
> > > >
> > > >
> > > > Sorry, please ignore the previous email, it was sent by mistake.
> > > >
> > > > 1. I download apache-ignite-fabric-1.9.0-bin.zip, and unzip it.
> > > > 2. In terminal, I start an ignite instance by *bin/ignite.sh
> > > > examples/config/example-ignite.xml*
> > > > 3. I create a Java application, source code as below:
> > > >
> > > > public static void main(String[] args) {
> > > >     String ORG_CACHE = "org_cache_remote";
> > > >    * Ignition.setClientMode(true);*
> > > >     Ignite ignite = Ignition.start("example-ignite.xml");
> > > >     CacheConfiguration<Long, Organization> orgCacheCfg = new
> > > > CacheConfiguration<>(ORG_CACHE);
> > > >     orgCacheCfg.setIndexedTypes(Long.class, Organization.class);
> > > >     ignite.destroyCache(ORG_CACHE);
> > > >     IgniteCache<Long, Organization> cache = ignite.createCache(
> > > > orgCacheCfg);
> > > >     cache.put(1L, new Organization(1L, "org1", true, "jurong east",
> > > > "1111"));
> > > >     cache.put(2L, new Organization(2L, "org2", false, "orchard",
> > > "2222"));
> > > >     cache.put(3L, new Organization(3L, "org3", true, "jurong west",
> > > > "3333"));
> > > >     cache.put(4L, new Organization(4L, "org4", false, "woodlands",
> > > > "4444"));
> > > >     cache.put(5L, new Organization(5L, "org5", false, "changi",
> > "5555"));
> > > >     // cache.put(6L, new Organization(6L, "org6", true, "jurong
> > island",
> > > > "6666"));
> > > >
> > > >     IgniteCache<Long, BinaryObject> binaryCache =
> > cache.withKeepBinary();
> > > >
> > > >     List<Cache.Entry<Long, BinaryObject>> result;
> > > >
> > > >     System.out.println("Scan by address");
> > > >     ScanQuery<Long, BinaryObject> scanAddress = new ScanQuery<>(
> > > >         new IgniteBiPredicate<Long, BinaryObject>() {
> > > >             @Override
> > > >             public boolean apply(Long aLong, BinaryObject
> > binaryObject) {
> > > >                 *// first time filter by jurong, got two entries,
> org1
> > > and
> > > > org3*
> > > > *                // second time filter by changi, got two entries,
> org1
> > > and
> > > > org3*
> > > > *                // third time filter by changi as well, uncomment
> > org6,
> > > > got three entries, org1, org3 and org6*
> > > > *                return
> > > > binaryObject.<String>field("address").startsWith("jurong");*
> > > >             }
> > > >         }
> > > >     );
> > > >     result = binaryCache.query(scanAddress).getAll();
> > > >     System.out.println("result: " + result.size());
> > > >     for (Cache.Entry<Long, BinaryObject> entry : result) {
> > > >         System.out.println(entry.getValue().deserialize().
> toString());
> > > >     }
> > > >
> > > >     ignite.close();
> > > > }
> > > >
> > > > Here what I want to do is start a client node, connect to the server
> > node
> > > > started in step 2. Then I create a cache, put some data inside,
> > > > then try to run a scan query to find entries by its address.
> > > > The problem is when I run this program first time, it will return two
> > > > entries, their addresses are started with "jurong", which is correct.
> > > > When I run the program again, with changed value, eg. "changi", it
> > should
> > > > return one entry, somehow, it still return two entries with address
> > > started
> > > > with "jurong", rather than "changi".
> > > > When I uncomment the line of "org6", and run the program again, it
> will
> > > > return three entries, all of their addresses are started with
> "jurong".
> > > >
> > > > I have no idea what is going on.
> > > >
> > > >
> > > >
> > > >
> > > >
> > > > --
> > > > Best regards,
> > > > Andrey V. Mashenkov
> > > >
> > >
> >
> >
> >
> > --
> > Best regards,
> > Andrey V. Mashenkov
> >
>



-- 
Best regards,
Andrey V. Mashenkov

Reply via email to