Timo Lindenschmid · Aug 30, 2024 go to post

This sounds very strange. Have you tried using a linked table instead of an external table? 

Might be worth raising this with WRC as External tables is a new feature with IRIS 24.2

Timo Lindenschmid · Aug 30, 2024 go to post

Hi Richard,

at the version of Cache you are using there is no terminal via web browser. Not even sure if the community webterminal is working with this old version of Cache.

Only recent IRIS versions have introduced a terminal service via web technologies to be used with VSCode.

Timo Lindenschmid · Sep 2, 2024 go to post

Hi Scott,

my first thought here was use ^GBLOCKCOPY.

GBLOCKCOPY can copy all globals from one database into a new database or namespace.
So in your case create a new namespace with the correct mappings and new default databases. then use ^GBLOCKCOPY to copy all globals into this namespace. The copy to namespace follows the mapping definition for the namespace and should split Global(data) and Routine(also in globals) into the respective default databases.
This new databases can also created mirrored and then would be populated on all nodes respectively.

A caveat though i would test this first as i am a bit unsure if it really gets all globals located in a database(including system), although i am pretty sure it does.

Timo Lindenschmid · Sep 19, 2024 go to post

Completely silent install an application can only happen during IRIS upgrade/install or by being creative with scheduled tasks.

First step would be to automate installation of you application using a %Installer script refer to Documentation

Fully automating it could involve a scheduled task checking a folder on the filesystem for the installer manifest and importing it.

Timo Lindenschmid · Oct 10, 2024 go to post

very quick and dirty test, probably only works on small streams, also needs to actually read the whole stream for compare.
 

# test compare - streams are same
set stream1=##class(%Stream.TmpCharacter).%New()
set stream2=##class(%Stream.TmpCharacter).%New()
do stream1.WriteLine("ABC123")
do stream2.WriteLine("ABC123")
do stream1.Rewind()
do stream2.Rewind()
w (stream1.Read() = stream2.Read())

1

# test compare - stream are different
set stream1=##class(%Stream.TmpCharacter).%New()
set stream2=##class(%Stream.TmpCharacter).%New()
do stream1.WriteLine("ABC123")
do stream2.WriteLine("DEF456")
do stream1.Rewind()
do stream2.Rewind()
w (stream1.Read() = stream2.Read())

0
Timo Lindenschmid · Oct 16, 2024 go to post

Hi Marykutty,

depending on your use case. Usually, I would suggest going with Primary and BACKUP mirror plus arbiter for the optimal HA resilience. A webgateway on a dedicated IIS can serve both your application and the SMP. I usually would though consider having 2 webservers running so your single webserver is not the single point of failure.
Also just to be aware webgateway is mirror aware and does not need a VIP to automatic redirect connections to the correct mirror. (refer documentation on mirroring )

Timo Lindenschmid · Oct 22, 2024 go to post

Have you tried deleting the task using d ^TASKMGR ? This routine is available in the %SYS namespace, and you should login to terminal/session with a user that has %All access rights.

Timo Lindenschmid · Oct 23, 2024 go to post

Hi, without knowing a bit more about what you are trying to achieve its difficult to advise.

To export and reinstate a data structure including content you would need to export the storage class definition.

After that you then can export the Global data and index storage defined by the storage class.
To export you can use $system.OBJ.Export from a terminal/iris session. Then reimport using $system.OBJ.Load

Timo Lindenschmid · Oct 23, 2024 go to post

Hi Fred,

on the AWS instance what does the command "iris list" return?
Also you can have a look at the messages.log file located at the <installDir>/mgr/messages.log

This should give you an idea of what the issue is.

Timo Lindenschmid · Oct 23, 2024 go to post

A simple health probe would be to have the LB poll /csp/mirror_status.cxw on the respective webserver it will return success if this webserver is connected to the active mirror and failed if its connected to the backup mirror.

Timo Lindenschmid · Oct 28, 2024 go to post

pure objectscript way no functions needed, we just use the IRIS type conversion behavior:
 

set number1="123123"set number3="123123123 Not a pure number"if ((+number1=number1) && (+number2=number2) && (number1>=number2)) {
    set div=number1-number2
} else {
    w !,"Conditions not met"
}
Timo Lindenschmid · Oct 29, 2024 go to post

Hi Enrico, my sample code does that exactly. It takes number1 and converts it to a number than it compares the result to the original number1 field. 
Quirk of type conversion in ObjectScript if a value is converted from string to number ObjectScript walks the values from left to right and stops at the first non numeric character ie.
123ABC   becomes 123
The if clause checks then if 123 = 123ABC so the org value is non numeric.
Using && in the IF clause means do a logical AND check but short circuit the check ie. if condition 1 is already false go directly to the else clause and do not check cond2 and3

Timo Lindenschmid · Nov 8, 2024 go to post

The beauty of the IRIS technology stack is that code and data is withing the same instance.

To separate code from data ISC uses the idea of code and data databases, which can be configured on a namespace level, this combined with global, package and routine mappings results in very versatile environment that should satisfy every need. If you want to actually separate compute from data storage, this is also possiple using the ECP protocol with dedicated app servers. 

Timo Lindenschmid · Nov 14, 2024 go to post

Hi,

I guess you have written a custom extension using superclass %SYS.Monitor.SAM.Abstract?
If so the method you are looking for is SetSensorLabels see doc here

Timo Lindenschmid · Nov 15, 2024 go to post

Where you install IRIS depends on your use case. E.g. if you are "only" developing, no real user load the disc layout you would use is markedly different to a production system with 1000s concurrent connections.

so just a couple of thoughts on disk layout:

Install IRIS and every of its components in a dedicated folder e.g. /iris . Reasoning behind this is a single folder is easier to be excluded from any e.g. AntiMalware scanner that could wreak havoc on a database backend. 

In that subfolder separate data, file store, journals and executables.

Reasoning: For a high-performance system each of above has a different i/o workload and a different performance profile. e.g. while journals are nearly 100% sequential writes, database executable are a mix of read and writes.  Database files are also a mix of read and writes but usually much bigger block sizes. Also different filesystems have different performance profiles.

So taking above in account also following best practises for mounts and i/o workload separation:

root (/)
/{instancename}/iris -> instance installation folder
/{instancename}/journalPrimary
/{instancename}/journalSecondary
/{instancename}/database
/{instancename}/filestore
/{instancename}/webfiles

Based on above you can mount volumes depending on workload sitting on different physical disks/lvms also for high performance environment you might want to separate the disc on multiple scsi controllers. So each controller only served a specific i/o profile.

Also to note IRIS2021 changed the default disc i/o behaviour from use OS file cache to direct unbuffered i/o. Which again means separate IRIS workloads from any OS workload.

Timo Lindenschmid · Nov 21, 2024 go to post

Hi,

not sure about Veeam installing stuff etc.

But i know some customers only backup the backup mirror, never the primary mirror as even with snapshot taking only a couple of seconds, QoS detection get triggered due to a slight performance degradation during the backup. If the backup is running against the Primary mirror, this then results in a forced failover being triggered.

Timo Lindenschmid · Dec 5, 2024 go to post

There is a setting in vscode for the objectscript extension, that allows you to modify the compile flags used.

My current settings, which also triggers compilation of embedded SQL vs default behaviour to not compile embedded SQL.

"objectscript.compileFlags": "cbk/compileembedded=1"

Timo Lindenschmid · Dec 10, 2024 go to post

Hi Dmitrii,

The automated export of changed files can be handled by %Studio.SourceControl.File, this would export any changed file on save and import the latest from disk on checkout.

To automate import on a target system you can create a scheduled task that executes $system.OBJ.LoadDir regularly, this also per default compiles on load.

Timo Lindenschmid · Jan 17, 2025 go to post

Package names belong to the class names, so this is covered by the class names are case sensitive. In addition they have to by case-insensitive unique.

e.g.
TestClass

and

TESTClass

would be valid class names but they are not unique as ToUPPER both read TESTCLASS

same is true for package names and routines.

Timo Lindenschmid · Jan 21, 2025 go to post

Hi Phillip,

if IRIS is frozen/hung only way to see is via messages.log

The freeze and thaw is recorded there.

Timo Lindenschmid · Jan 21, 2025 go to post

Hi So looking at those errors:

First we have a process with an active transaction, that process crashed. So now the system is trying to rollback those transactions.
Then the process conducting the rollback (pid: 10800) ran out of process memory (STORE error) 

Although i think the clean demon in the end was able to rollback the open transaction.

Timo Lindenschmid · Feb 19, 2025 go to post

I had the same error. I manually created that folder, which did not help. Then after i put SELinux into permissive mode (internal test container) , the error went away so i guess its SELinux tags that are wrong also.

Timo Lindenschmid · Feb 19, 2025 go to post

Looking at the documentation, i found this Cube dependencies building
Essentially you need to define the dependencies of the cubes using the DependsOn (not the same as the Class keyword)  keyword in Designer. And you need to define the build order by creating either a Utility class with a BuildMethod or by using CubeManager.

Timo Lindenschmid · Feb 19, 2025 go to post

Option 2 is not totally correct.
The parameter [Startup] MaxIRISTempSizeAtStart=5000 will clear the IRISTemp database and shrink it to the size specified it will not prevent IRISTemp from growing further.
So you set the parameter and restart IRIS and the runaway IRISTemp database will be reset to 5000MB (per example)
To ensure IRISTemp is not taking over all your available space either relocate the DB to a dedicated volume or set the maximum DB size in SMP for the database. But this all has its own risk.