Strange read-through operation after entry processor work

Hi.
We use the combination cache listener - entry processor to do some actions when the data comes to coherence. We use Oracle Coherence Version 3.5.3/465.
Just after the entry processor has set the new value for the entry, the new "get" operation is called for the cache and jdbc hit is done for this key.
Here is the entry processor:
public Object process(Entry entry) {       
        if (!entry.isPresent()) {
            // No entities exist for this CoreMatchingString - creating new Matching unit
            MatchingUnit newUnit = new MatchingUnit(newTrade);
            entry.setValue(newUnit, true);
            return null;
        ((MatchingUnit)entry.getValue()).processMatching(newTrade);
        return null;
    }Very interesting, that if I use entry.setValue(value) without second parameter - I recieve the db hit just on setValue method. According to docs, setValue() with one parameter returns the previous value and its logical, that the cache hit (and therefore the db hit) is done just on set. But I use the overloaded version void setValue(java.lang.Object oValue, boolean fSynthetic), which is said to be light and should not fetch previous version of the object. But this is done anyway! Not on setValue itself, but just after the process() method called.
Actually it's strange, that coherence tries to fetch the previous value in the case it didn't exist! The cache.invoke(matchingStr, new CCPEntryProcessor(ccp)) is invoked on not existing record and it is created just on invokation. May be it's the bug or the place for optimization.
Thanks

bitec wrote:
Thanks, Robert, for such detailed answer.
Still not clear for me, why synthetic inserts are debatable. There are lots of cases, when the client simply updates/inserts the record (using setValue()) and does not need to recieve the previous value. If he needs, he will launch the method:Hi Anton,
it is debatable because the purpose of the fSynthetic flag is NOT so that you can optimize a cache store operation away. Synthetic event means that this is not real change in the data set triggered by the user, it is something Coherence has done on the backing map / on the cache for its own reasons and decisions to be able to provide high-availability to the data, and it only changes that particular Coherence node's subset of data but does not have a meaning related to the actually existing full data set. Such reasons are partition movement and cache eviction (or possibly any other reasons why Coherence would want to change the content of the backing map without telling the user that anything has changed).
If you set the synthetic flag, you are trying to masquerade a real data change as an event which Coherence decided to trigger. This is why it is debatable. Also, synthetic backing map events may not always lead to dispatching cache events (for partition rebalance they definitely not). This optimization may also be extended to synthetic cache events.
java.lang.Object setValue(java.lang.Object oValue)and recieve the previous value. If he doesn't, he calls:
void setValue(java.lang.Object oValue, boolean fSynthetic)and DOESN'T recieve the previous value as method is marked void. Thus he cannot get the previous value anyhow using this API, except of the direct manual db call. Yep, because Coherence is not interested in the old value in case of a synthetic event. The synthetic methods exist so that some entry can be changed in Coherence (usually by Coherence itself) in a way that it indicates a synthetic event so that listeners are not notified.
Some valid uses for such functionality for setValue invoked by user code could be compacting some cached value and replacing the value the backing map stores with the compacted representation, which does not mean a change in the meaning of the actual cached value, only the representation changes. Of course if the setValue(2) method does not actually honor the synthetic flag, then such functionality will still incur all the costs of a normal setValue(1) call.
But the previous value is anyway fetched by Coherence itself just after process() and client anyway doesn't get it! But any listeners on the cache may need to get it due to cache semantics reasons.
In this case I regard this as the bug, cause the client, which uses this API doesn't expect the cache hit to take place (no return value for this overloaded setValue() method), but it takes and leads to some extra problems, resulting from read-through mechanizm.
I would not regard it as a bug, it is probably the case of documenting a possible optimization too early, when it ultimately did not get implemented. I definitely would not try to abuse it to set a value without triggering a db fetch, as again, the intention of the synthetic flag is related not only to the cache loader functionality, but also to events and marking that a change indicates a real data change or a Coherence data management action.
Now I understand why coherence does not know, whether this is inserted or updated value, thanks for details.
Anton.
*Edited: I thought about this problem from the point of the oracle user, but may be this additional hit is necessary for event producers, which need to make the events, containing old/new values. In this case this seems to be the correct behaviour.... Seems that I need some other workaround to avoid db hit. The best workaround is the empty load() method for cachestore...You can try to find a workaround, but it is an ugly can of worms, because of the scenario when more than one thread tries to load the same entry, and some of them try to load it with a reason.
You may try to put some data into thread-local to indicate that you don't really want to load that particular key. The problem is that depending on configuration and race conditions your cache loader may not be called to clean up that thread-local as some other thread may just be invoked right now and in that case its return value is going to be returned to all other threads, too, so you may end up with a polluted thread.
Best regards,
Robert
Edited by: robvarga on Oct 15, 2010 4:25 PM

Similar Messages

  • Set a new expiry delay for entries added in the cache by a read through

    Hi,
    I have an application that uses an Oracle Coherence cache backed by a database. Each item that is added in the cache must have a custom expiry delay computed from its content.
    Is it possible to set a new expiry delay for the entries loaded in the cache from the database by a read through operation?
    I tried setting a new expiry delay in the load method of the BinaryEntryStore, but it is ignored and the default expiry of the corresponding cache is used instead. Also I tried using a MapTrigger, but the entries added in the cache by a read through operation are not intercepted by the MapTrigger.
    Thanks,
    Adrian

    What we do (not sure if it proper way, but it worked for us) is extend the LocalCache and override the put method.
    public Object put(
    Object oKey,
    Object oValue,
    long expiry)
    long newexpiry = xxxxx;
    return super.put(oKey, oValue, newexpiry);
    }

  • Oracle coherence first read/write operation take more time

    I'm currently testing with oracle coherence Java and C++ version and from both versions for writing to any local or distributed or near cache first read/write operation take more time compared to next consecutive read/write operation. Is this because of boost operations happening inside actual HashMap or serialization or memory mapped implementation. What are the techniques which we can use to improve the performance with this first read/write operation?
    Currently I'm doing a single read/write operation after fetching the NamedCache Instance. Please let me know whether there's any other boosting coherence cache techniques available.

    In which case, why bother using Coherence? You're not really gaining anything, are you?
    What I'm trying to explain is that you're probably not going to get that "micro-second" level performance on a fully configured Coherence cluster, running across multiple machines, going via proxies for c++ clients. Coherence is designed to be a scalable, fault-tolerant, distributed caching/processing system. It's not really designed for real-time, guaranteed, nano-second/micro-second level processing. There are much better product stacks out there for that type of processing if that is your ultimate goal, IMHO.
    As you say, just writing to a small, local Map (or array, List, Set, etc.) in a local JVM is always going to be very fast - literally as fast as the processor running in the machine. But that's not really the focus of a product like Coherence. It isn't trying to "out gun" what you can achieve on one machine doing simple processing; Coherence is designed for scalability rather than outright performance. Of course, the use of local caches (including Coherence's near caching or replicated caching), can get you back some of the performance you've "lost" in a distributed system, but it's all relative.
    If you wander over to a few of the CUG presentations and attend a few CUG meetings, one of the first things the support guys will tell you is "benchmark on a proper cluster" and not "on a localised development machine". Why? Because the difference in scalability and performance will be huge. I'm not really trying to deter you from Coherence, but I don't think it's going to meet you requirements when fully configured in a cluster of "1 Micro seconds for 100000 data collection" on a continuous basis.
    Just my two cents.
    Cheers,
    Steve
    NB. I don't work for Oracle, so maybe they have a different opinion. :)

  • Very strange, Entry Processor block the entire coherence node

    I have a client node(storage= false) client1 which continues do get from cache1, the code is below:
    for(int i=0;i<10000000;i++){
                System.out.println("get:"+ cache1.get(i));
    and have another client node(storage= false) client2 which invoke a Entry Processor. this Entry Processor is work on cache2(not cache1)
    cache2.invoke(keys,new MyEntryProcessor());
    the MyEntryProcessor code is as below:
    public Object process(Entry entry) {
            for(int i=0;i< 1000000;i++){
                entry.getKey();
                entry.getValue();
                System.out.println(i);
            return null;
    when client2 begin run,  client1 will be blocked, until client2's Entry Processor is finished.
    who can tell me why. it's very strange, because client1 and client2 are work on two different cache. and it's only do get

    If these two caches belong to same cache service, then their requests are handled by the same service thread.   Coherence only use single service thread per service per node.    So if the get() for cache1 and the entry processor for cache2 go to the same node, you will see that behavior if cache1 and cache2 belong to same cache service.
    Either turn on thread pool (if you want to use same cache service( or use different cache service.

  • CS 4 Dynamic Link to Encore doesn't work most of the time.  Encore stops operating after opening and periodically Premier Pro stops working.  I'm told that there has been a problem with CS4 when using Dynamic Link to go to Encore and build CD's.  Is there

    CS 4 Dynamic Link to Encore doesn't work most of the time.  Encore stops operating after opening and periodically Premier Pro stops working.  I'm told that there has been a problem with CS4 when using Dynamic Link to go to Encore and build CD's.  Is there a way around this?  Is there a patch to correct it?

    To build CD's???
    What problem does Encore have with DL?
    If DL is not working properly for you the way around this is to export from Premiere to either mpeg2-dvd for DVD or BluRay H.264 for BD-disks and import the files in Encore.

  • Reader stops when after loading document.  Says stops working!  It will load without any document!

    Reader stops when after loading document.  Says stops working!  It will load without any document!  Help!??  This has been going on for several months.  Help!

    What is your operating system?  Reader version?

  • My itunes opens after 2-3 hrs after doubleclicking it to open;it happened once or twice  with itunes 11.x , but its a constant problem after updating itunes to 12.x ....my operating system win7;processor i5 intel haswell and 4gb ram...i hav no issue

    My itunes opens  2-3 hrs after doubleclicking it to open;it happened once or twice  with itunes 11.x , but its a constant problem after updating itunes to the latest 12.0.1....my operating system windows7;processor i5 intel haswell and 4gb ram...i have no issue with opening other big programs....i tried uninstalling completely the itunes and reinstalling it as i thought at first it is not opening (because it takes really long time) and i followed the following support pages
    1)iTunes for Windows Vista, Windows 7, or Windows 8: Fix unexpected quits or launch issues
    2)iTunes for Windows doesn't open after upgrading in Windows Vista, Windows 7, or Windows 8
    but my problem doesnot get solved even after trying all the methods in the above pages...
    now i realized,it opens after 2-3 hrs and at will...after opening it keeps hanging.finally it doesnot again open immediately after closing...kindly help me out as soon as possible

    My itunes opens  2-3 hrs after doubleclicking it to open;it happened once or twice  with itunes 11.x , but its a constant problem after updating itunes to the latest 12.0.1....my operating system windows7;processor i5 intel haswell and 4gb ram...i have no issue with opening other big programs....i tried uninstalling completely the itunes and reinstalling it as i thought at first it is not opening (because it takes really long time) and i followed the following support pages
    1)iTunes for Windows Vista, Windows 7, or Windows 8: Fix unexpected quits or launch issues
    2)iTunes for Windows doesn't open after upgrading in Windows Vista, Windows 7, or Windows 8
    but my problem doesnot get solved even after trying all the methods in the above pages...
    now i realized,it opens after 2-3 hrs and at will...after opening it keeps hanging.finally it doesnot again open immediately after closing...kindly help me out as soon as possible

  • Hi help unlock the phone happened after we installed a new programa we can not get the activation password and ID, I know and still does not stop the phone bought in Israel and what documents should be sent to confirm that my phone Please read through the

    hi help unlock the phone happened after we installed a new programa we can not get the activation password and ID, I know and still does not stop the phone bought in Israel and what documents should be sent to confirm that my phone Please read through the help

    What I am saying is ..........
    The iPhone HAS to be active making calls on the UK carrier network for the carrier to identify as "theirs" and therefore eligible for the Carrier to unlock
    The way to achieve this is to use a PAYG sim making and receiving calls to establish a customer relationship  with the Carrier and then follow the Carrier's process to unlock
    With a PAYG it usually means adding a specified (by the carrier ) amount  usually £15 /£20 depending on the carrier
    This is how O2 function and according to Gemma  this is how Vodafone work

  • What triggers a write-through/write-behind of entry processor changes?

    What triggers a write-through/write-behind when a cache entry is modified by a custom entry processor (subclass of AbstractProcessor)? Is it simply the call to Entry.setValue() that triggers this or are entry modifications detected in some other way?
    The reason I am asking is that in our Coherence cluster it looks like some entry modifications through entry processors have not triggered a write-behind, and I see no logical pattern as to which ones have and which ones haven't except that some specific entries are just never written to our database. We see from our logs that our implementation of the CacheStore.store() method is not called in these cases, and we also see that the cache entry has been modified successfully.
    We are using Coherence 3.3 on a three machine cluster with 8 nodes on each machine, accessed from clients through a TCP extend proxy.
    Regards,
    Mikael Carlstedt
    mBlox Inc
    Edited by: user3849225 on 16-Sep-2010 04:57

    Hi Mikael
    Calling setEntry() will result in a call to the CacheStore.store() method unless the value you are setting is the same as the existing entry value. If you are using writebehind then storeAll() will be called instead of store() if there are multiple entries waiting to be stored. Writebehind will also coelesce entries so that only the last entry for a given key will be stored.
    What patch level are you using?
    Paul
    Edited by: pmackin on Sep 17, 2010 12:08 AM

  • Entry Processor and worker thread question

    We have a cache service configured with a thread count of 10 . When i run a Entry processor to do some processing on all entries of the cache, i see in the logs that each of the entry is processed sequentially on same worker thread even though multiple threads are configured for cache service . I was hoping Entry processor would run parallely on multiple threads for different entry's . Am i missing something here?? Appreciate all the help .
    Here is thelog:: Looks like entry processor runs sequentially on same thread.
    011/04/06 15:58:55:489 [*DistributedCacheWorker:6*] INFO ENTRY PROCESSOR ON ACCOUNT 1872
    2011/04/06 15:58:55:490 [*DistributedCacheWorker:6]* INFO ENTRY PROCESSOR ON ACCOUNT 38570
    2011/04/06 15:58:55:490 [*DistributedCacheWorker:6*] INFO ENTRY PROCESSOR ON ACCOUNT 38856
    2011/04/06 15:58:55:491 [*DistributedCacheWorker:6*] INFO ENTRY PROCESSOR ON ACCOUNT 1586279
    2011/04/06 15:58:55:492 [*DistributedCacheWorker:6*] INFO ENTRY PROCESSOR ON ACCOUNT 38570

    Hello,
    Entry Processors will use multiple threads. They will however only use one thread per partition.
    My guess is what you are seeing is that the EP is working on the same partition.
    hth,
    -Dave

  • I cannot log into Adobe Reader through my iphone using the Adobe ID and password which work on the w

    I cannot log into Adobe Reader through my iphone using the Adobe ID and password which work on the website.

    Hi Will,
    That's great that you could sign in now.
    I think issue you faced in signing was because email verification was not done before. And when you signed from web client, you might have received a note asking you to do verification. It solved the logging issues you were facing on iPhone as well.
    -Charu

  • ITunes RADIO is not working.  "iTunes could not connect to the iTunes Store. Make sure your internet connection is active and try again." Try as I may, as many as ten attempts, trying to connect after restart, after shutdown, nothing works. Just so -  iTu

    iTunes RADIO is not working.
    “iTunes could not connect to the iTunes Store. Make sure your internet connection is active and try again.” Try as I may, as many as ten attempts, trying to connect after restart, after shutdown, nothing works. Just so …
    iTunes STORE not “connectable” with my otherwise perfectly-working internet connection, viable, up and running for all other uses.
    Simply put, firstly, I can't connect to the internet when I click on Radio.  People are quite suspicious that this is Apple incompetence or your company's famous arrogance for this commonly-suffered problem that you won't or “can’t” fix.
    Read the many web comments and you won’t be pleased with yourselves: the suspicion is that if you ruin internet radio on iTunes, Apple will somehow make more money on music downloads, etc. Bull.
    Also, thirdly, my old playlist of 20 or so internet radio stations in the Ambient category STILL PLAYS !
    Then fourth, I installed the latest available version of QuickTime Player 7.app Version 7.6.6 but it didn’t solve the problem either. I had QuickTime Player.app Version 10.2, but substituted what Apple website said was the latest, LOWER NUMBERED QuickTime Player version of 7.6.6
    Fifth, I can't connect to iTunes store no matter what I do or what user group's advice I try. So I can’t buy or download anything from iTunes. Bad for business.
    Sixth, I updated to the latest version of iTunes but this weird problem remains. All suggested Apple fixes or user group fixes are useless. Where is Apple’s famous technical competency, vaunted customer support?, and user-friendly product reputation? Get it back, please.
    Solve this problem of yours ASAP for us, your numerous disgruntled, dissatisfied customers of iTunes. You can do better, should, and really –in all fairness- must.
    ===============================================================
    NOTE:  no password for iTunes exists in my Keychain. Is this a problem?
    Apple ACCOUNT ID, and iTunes ID password, works but not to access iTunes with my healthy internet connection.
    Apple store id It works via direct internet connetion but not through iTunes.  Very strange.
    ===============================================================
    FYI, Hardware Overview:
      Model Name:                       MacBook Pro
      Model Identifier:                 MacBookPro8,2
      Processor Name:               Intel Core i7
      Processor Speed:               2 GHz
      Number of Processors:    1
      Total Number of Cores:    4
      L2 Cache (per Core):         256 KB
      L3 Cache:                            6 MB
      Memory:                              16 GB
      Boot ROM Version:            MBP81.0047.B27
      SMC Version (system):      1.69f4
      Serial Number (system):   C0*******F8V
      Sudden Motion Sensor:
      State:   Disabled
    Intel 6 Series Chipset:
      Vendor: Intel
      Product:            6 Series Chipset
      Link Speed:       6 Gigabit
      Negotiated Link Speed:           6 Gigabit
      Description:      AHCI Version 1.30 Supported
    M4-CT512M4SSD2:
      Capacity:           512.11 GB (512,110,190,592 bytes)
      Model: M4-CT512M4SSD2                         
      Revision:           040H   
      Serial Number: 0000000012330912E75A
      Native Command Queuing:    Yes
      Queue Depth:   32
      Removable Media:        No
      Detachable Drive:        No
      BSD Name:         disk0
      Medium Type:      Solid State
      TRIM Support:     Yes
      Partition Map Type:     GPT (GUID Partition Table)
      S.M.A.R.T. status:         Verified
      Volumes:
    disk0s1:
      Capacity:           209.7 MB (209,715,200 bytes)
      BSD Name:         disk0s1
      Content:            EFI
    disk0s2:
      Capacity:           511.25 GB (511,250,432,000 bytes)
      BSD Name:         disk0s2
      Content:            Apple_CoreStorage
    Recovery HD:
      Capacity:           650 MB (650,002,432 bytes)
      BSD Name:         disk0s3
      Content:            Apple_Boot
      Volume UUID:   600737FB-7A29-3BAE-859E-CBFE2E90C39A
    <Edited by Host>

    This my sound too simple, but I just kept clikning on the arrow next to the selected music and it finally "Kicked" in.
    I live in Europe ,So Be persistent and don't give up !  Aug. 2013

  • I have deleted my private folder and do not have enough space to reinstall my operating system. How can i transfer files from my hard drive to an USB drive to free up space when the operating system isn't working. or do i need to erase disk?

    i have deleted my private folder and do not have enough space to reinstall my operating system. How can i transfer files from my hard drive to an USB drive to free up space when the operating system isn't working. or do i need to erase disk through disk utilities without erasing data (but will it delete my programs such as photoshop, office, creative suite?

    Connect the computer to another Mac and put it in FireWire Target Disk mode, or use the Disk Utility to clone the drive or image specific folders with the USB drive as the target. After you've copied off everything you want, you'll likely need to erase the drive and reinstall the applications.
    (69695)

  • Updating a hierarchical data structure from an entry processor

    I have a tree-like data structure that I am attempting to update from an AbstractProcessor.
    Imagine that one value is a collection of child value keys, and I want to add a new child node in the tree. This requires updating the parent node (which contains the list of child nodes), and adding the child value which is a separate entry.
    I would rather not combine all bits of data into one value (which could make for a large serialized object), as sometimes I prefer to access (read-only) the child values directly. The child and the parent values live in the same partition in the partitioned cache, though, so get access should be local.
    However, I am attempting to call put() on the same cache to add a child value which is apparently disallowed. It makes sense that a blocking call is involved in this operation, as it needs to push out this data to the cluster member that has the backup value for the same operation, but is there a general problem with performing any kind of re-entrant work on Coherence caches from an entry processor for any value that is not the value you are processing? I get the assertion below.
    I am fine with the context blocking (preventing reads or writes on the parent node value) until the child completes, presuming that I handle deadlock prevention myself due to the order in which values are accessed.
    Is there any way to do this, either with entry processors or not? My code previously used lock, get and put to operate on the tree (which worked), but I am trying to convert this code to use entry processors to be more efficient.
    2008-12-05 16:05:34.450 (ERROR)[Coherence/Logger@9219882 3.4/405]: Assertion failed: poll() is a blocking call and cannot be called on the Service thread
         at com.tangosol.coherence.component.util.daemon.queueProcessor.service.Grid.poll(Grid.CDB:4)
         at com.tangosol.coherence.component.util.daemon.queueProcessor.service.Grid.poll(Grid.CDB:11)
         at com.tangosol.coherence.component.util.daemon.queueProcessor.service.grid.DistributedCache$BinaryMap.put(DistributedCache.CDB:30)
         at com.tangosol.coherence.component.util.daemon.queueProcessor.service.grid.DistributedCache$BinaryMap.put(DistributedCache.CDB:1)
         at com.tangosol.util.ConverterCollections$ConverterCacheMap.put(ConverterCollections.java:2433)
         at com.tangosol.coherence.component.util.daemon.queueProcessor.service.grid.DistributedCache$ViewMap.put(DistributedCache.CDB:1)
         at com.tangosol.coherence.component.util.SafeNamedCache.put(SafeNamedCache.CDB:1)
         at com.tangosol.net.cache.CachingMap.put(CachingMap.java:928)
         at com.tangosol.net.cache.CachingMap.put(CachingMap.java:887)
         at com.tangosol.net.cache.NearCache.put(NearCache.java:286)
         at com.conduit.server.properties.CLDistributedPropertiesManager$UpdatePropertiesProcessor.process(CLDistributedPropertiesManager.java:249)
         at com.tangosol.coherence.component.util.daemon.queueProcessor.service.grid.DistributedCache$Storage.invoke(DistributedCache.CDB:20)
         at com.tangosol.coherence.component.util.daemon.queueProcessor.service.grid.DistributedCache.onInvokeRequest(DistributedCache.CDB:50)
         at com.tangosol.coherence.component.util.daemon.queueProcessor.service.grid.DistributedCache$InvokeRequest.run(DistributedCache.CDB:1)
         at com.tangosol.coherence.component.net.message.requestMessage.DistributedCacheKeyRequest.onReceived(DistributedCacheKeyRequest.CDB:12)
         at com.tangosol.coherence.component.util.daemon.queueProcessor.service.Grid.onMessage(Grid.CDB:9)
         at com.tangosol.coherence.component.util.daemon.queueProcessor.service.Grid.onNotify(Grid.CDB:130)
         at com.tangosol.coherence.component.util.daemon.queueProcessor.service.grid.DistributedCache.onNotify(DistributedCache.CDB:3)
         at com.tangosol.coherence.component.util.Daemon.run(Daemon.CDB:37)
         at java.lang.Thread.run(Thread.java:637)

    Hi,
    reentrant calls to the same Coherence service is very much recommended against.
    For more about it, please look at the following Wiki page:
    http://wiki.tangosol.com/display/COH34UG/Constraints+on+Re-entrant+Calls
    Best regards,
    Robert

  • VISA Read Timeout and VISA Write not working

    I'm writing a program that sets a triangle wave pattern voltage (using Triangle Wave VI) to a DC power source (GWInstek PST-3202) through a RS-232 connection.  I know my instrument parameters are set up correctly because I've been able to control this power source using a different VI with the same parameters.  I also know I am connected to the power source because I can talk to it using MAX.  I have a string indicator before my VISA Write statement that shows me the command being sent to VISA Write.  It shows the correct syntax for setting a voltage on this instrument.  However, when I run the VI, the voltage is not changed on my instrument, even though the correct command is sent to the instrument.  After the VISA Write operation I have inserted a VISA Read function in order to read the newly set voltage from both a numeric and a waveform indicator.  Using the Error Out cluster I am able to see that there is a timeout error from VISA Read.  I thought perhaps I needed to clear or flush the buffer after each Read statement, but that didn't work either.  I'm stumped as to why VISA Write isn't writing to the device.  I have included my VI below, as well as the initialization subVI for the power supply.  
    Attachments:
    Triangle Volt Mod.vi ‏27 KB
    GW Instek initialization.vi ‏18 KB

    Yep, you need to append the End of Line character to the end of your command.  And for your read to work properly, you need to request the data.  That requires a querry command to be sent.  Look closely at the differences in command and communication structures between your working VI and your mod.
    There are only two ways to tell somebody thanks: Kudos and Marked Solutions
    Unofficial Forum Rules and Guidelines

Maybe you are looking for