Anna Golitsyna · Aug 19, 2020 go to post

Thanks, Dmitriy! Yes, I saw already that classes are stored differently. Our namespaces are huge and different enough though so looking through all their differences line by line is not necessarily practical. 
P.S. I am looking forward to your VSCode add-on progress BTW :-).  Tried it some time ago already.

Anna Golitsyna · Aug 19, 2020 go to post

Thanks, Eduard! Queries look promising. Will they compare INT's or CLS's, given it's about CompiledClass?

Anna Golitsyna · Aug 19, 2020 go to post

It looks like  code below would give me what I am looking for. Just need to figure out (or take an advice!) how to exclude, say, system classes outright. 

rs=##class(%ResultSet).%New("%Dictionary.ClassDefinitionQuery:ClassIndex")
x=rs.Execute()
f  {
x=rs.Next() q:'x
TimeChanged=rs.GetDataByName("TimeChanged")
ClassName=rs.GetDataByName("ClassName")
Hash1=rs.GetDataByName("Hash1")
Hash2=rs.GetDataByName("Hash2")
System=rs.GetDataByName("System")
ClassType=rs.GetDataByName("ClassType")
Size=rs.GetDataByName("Size")
}
P.S. Found the answer to my last question: https://cedocs.intersystems.com/latest/csp/documatic/%25CSP.Documatic.cls?PAGE=CLASS&LIBRARY=%25SYS&CLASSNAME=%25Library.RemoteResultSet

Anna Golitsyna · Sep 1, 2020 go to post

It's not a single global it's about 1500 separate globals so you approach would involve a loop as well but yes, it is different.

Anna Golitsyna · Sep 1, 2020 go to post

What is WRC? It looks like the import process goes alphabetically, then stops and refuses to process any more globals. I would assume that the GOF file contains all globals alphabetically as well. I will look if the first not processed global is somehow different from previous ones.

Anna Golitsyna · Sep 1, 2020 go to post

Windows 10, i.e. NTFS, if that is the question. Not Fat32. What is ECP in this context?

Anna Golitsyna · Sep 1, 2020 go to post

Half of the globals were imported alright. Yes, I thought too it might be a failure to properly export, like an export related error. The 4GB file does contain all intended globals, I can see it in the Management Portal's Import utility. I tried to check just a couple on the list and they failed with no error.

Anna Golitsyna · Sep 2, 2020 go to post

Apparently GBLOCKCOPY is simply not available on my Cache 2017 version since search for it in system files returns nothing. I am trying to transfer a large number of globals, not all, from one computer to another, not just between namespaces within the same database. The system does not have actively modified globals. I got an old-timer advice to use %GOF which does accept ranges both for exclusion and inclusion so will work on that for a while.

Anna Golitsyna · Sep 2, 2020 go to post

I searched for it in Studio in all files but yes, I see it your way. I'll let know here how %GOF does the job, tests seem reasonable.

Anna Golitsyna · Sep 2, 2020 go to post

No, no, no. I already edited my previous reply, it's there. Still going the %GOF way for now unless it does not work

Anna Golitsyna · Sep 2, 2020 go to post

Everybody, thanks for your help and advice but the old-timer's advice to go the d ^%GOF route in Cache Terminal proved to be it. It was actually amazing to see how much superior this route turned out to be comparing with the much more modern Export/Import Management Portal route. Specifically:

  1. Preparation to exclude certain globals, few dozens of them: Terminal - about 10 minutes because you can use ranges (see below and here, https://docs.intersystems.com/priordocexcerpts/prgglobalchui-41.pdf), portal - much longer because you have to uncheck each global individually
  2. Export speed: Terminal - 10 minutes, portal 3 hours (no kidding)
  3. Export/Import log per global: Terminal - log provided, complete with the number of blocks per global, portal - no log
  4. Import speed: Terminal - less than 10 minutes, portal - stuck in the middle with no error shown

Sample %GOF usage in terminal, hit Enter if no special requests, exporting:
d ^%GOF
Device: tmp.gof
           file format: ("UNW*") =>
          Maximum media size (bytes): (No maximum)
Enter a short description of the contents of this tape or file
Description:
All Globals? No => No
Global ^S-SZ         [All globals in this range, case-sensitive - AG]
Global ^'STPL*     [Exclude all globals that start with STPL - AG]
Real life output from my real life usage:
...............
^ZPG                                           182 data blocks written
^ZTEMP                                           1 data block written
491,337 blocks written in 10 minutes,  51 seconds
--------------------
Importing was done via d ^%GIF, via terminal as well. At some point the %GIF utility asked me:

Globals with a preceding asterisk ('*') already exist in this directory
What would you like to do with these globals that exist?
 
1. Skip inputting globals that exist in this directory
2. Merge input globals with the existing globals
3. Specify skip/merge for individual globals
 
Your choice: 1=>
Thanks again,
Anna

Anna Golitsyna · Sep 2, 2020 go to post

I think this case study proves that newer utilities are not always better so I would not bet on the latest IRIS version. I did see the Background run advice but would it cut three hours to 10 minutes? I doubt it. And if it would I'd say it's a portal implementation deficiency.

Anna Golitsyna · Sep 11, 2020 go to post

Hi Robert,

That I know how to do and I do it. What I would like to have this way or other is that the file name appears in the Watch window by itself when I am on the line with this variable, the way Microsoft Visual Studio works, say, with debugging C++.

Anna
P.S German was an unexpected bonus for my one year long studies of it. I could translate about half of German words on your screenshot so not even A1 yet smiley .

Anna Golitsyna · Sep 11, 2020 go to post

Yes, yes. all that is good and I use it but that comfort, arghhh...

Schönen Abend aus Boston,
Anna

Anna Golitsyna · Sep 11, 2020 go to post

Watching variables by typing them as well as hovering works in Cache Studio too. I am interested in automatically appearing (and disappearing) watch variables. Basically the debugger flow in this respect would be:

s a=1 ; When debugger is on this line show value of a automatically; don't show c yet; showing value of b is optional
s b=2 ; When debugger is on this line show value of b automatically; showing  value of a is optional
s c=3 ; When debugger is on this line show value of c automatically; showing  value of b is optional; stop showing a

Now, I don't know the exact Visual Studio rules when they start and stop showing a variable but the current line variables are always shown. No hovering or typing needed.

Anna Golitsyna · Sep 14, 2020 go to post

This is indeed the place for current local variables, thanks! However it has a minor and a major problems in my Cache 2017 instance. The minor problem is that I need to right click in the area to display those variables which disappear again with the next debugging step. So it is sort of semi-automatic. The major problem that this action freezes Studio pretty quickly. Maybe this freezing is fixed in subsequent releases, I don't know.

Anna Golitsyna · Nov 11, 2020 go to post

I'll look up applications under the first and the third link, thanks. The middle one is specific to IRIS, just checked, and I have Cache. I was more hoping for a short set of commands but if that is not available, oh well.

Anna Golitsyna · Nov 16, 2020 go to post

I looked up your single class under your third link and it's probably a total newbie question but I don't see where would you specify login info for the remote server.

Anna Golitsyna · Nov 18, 2020 go to post

@Katherine Reid My goal is to update two globals on two different machines at the same time. That needs to be done from time to time only. Would or could "other async mirrors purposes" include that? If so is there any technical reading or specific classes, or the namespace setup, related to async mirroring that you would recommend to use for such a job? For example, this 101 guide, https://community.intersystems.com/post/cach%C3%A9-mirroring-101-brief-… , specifically states "Deploying a Caché mirror does, however, require significant planning, and involves a number of different procedures. And like any other critical infrastructure component, the operating mirror needs ongoing monitoring and maintenance." Given that I simply need to keep two globals in sync the Export/Import process seems much faster that what is described by this mirroring quote. 

Anna Golitsyna · Nov 18, 2020 go to post

More importantly, as I just found out, "mirroring is unavailable for the current license"

Anna Golitsyna · Nov 20, 2020 go to post

Marc, I'll consider going the Web Service way, but I am not a total but still a beginner in Cache. I never used Web Services before so I would need to learn that. I wish there would something as straightforward as the RemoteResultSet queries which take just a few short and obvious lines of code, no learning curve.

Anna Golitsyna · Nov 20, 2020 go to post

@Alexey Maslov The ultimate goal is to create identical globals on 2 different machines with a single run, on demand.  I can run code on the first machine, then export global creating code which changes regularly, reconnect the Studio to a different machine, import code, then run it again. This is decidedly not a single run. I can also export and import global too, of course. I am willing to learn functionality that would be faster to deploy than these two approaches. Ideally as fast as ZN which unfortunately works on the same machine only but I might be wrong about that.

Anna Golitsyna · Dec 19, 2020 go to post

@Vitaly Furman and @Alexander Koblov 
Hi Alexander and Vitaly,

Sorry for the delay in acknowledging your replies. This is still work in progress because it got superseded by other tasks. I'll let you know of the developments later.

Thanks,
Anna

Anna Golitsyna · Jan 8, 2021 go to post

That was, of course, it. I was so used to our "in-house" SQL with double quotes around strings that it never occurred to me that the outside world uses single quotes. Thanks, David!