go to post Eduard Lebedyuk · Jan 23, 2023 Only the pyramid characters count, having (or not having) white spaces at the end is not important. Test cases do have them, but if you shorten the solution and it outputs the pyramid without white spaces after the hashtag that's great too.
go to post Eduard Lebedyuk · Jan 20, 2023 I get a syntax error when I do: Are you doing this in console/terminal? Macros are not available there. To check if you got an error in a terminal execute: if sc=1 {w "OK"} else {w $system.Status.DisplayError(sc)}
go to post Eduard Lebedyuk · Jan 20, 2023 Assuming you have a sync mirror established, adding new db to mirror is as simple as: Create DB on Primary. Run SYS.Mirror:AddDatabase. It returns %Status, check that it's ok with $$$ISOK(sc). It should be equal to 1. Dismount database on Primary (using SYS.Database:DismountDatabase) OR Freeze IRIS (Backup.General:ExternalFreeze). Copy IRIS.DAT to Backup. Mount database on Primary (using SYS.Database:MountDatabase) OR Thaw IRIS (Backup.General:ExternalThaw). Mount database on Backup. Activate database on Backup (SYS.Mirror:ActivateMirroredDatabase). Catchup database on Backup (SYS.Mirror:CatchupDB). Please note that some methods accept db name, most accept db directory, and others db sfn. Please keep that in mind.
go to post Eduard Lebedyuk · Jan 19, 2023 Eduard, Is the rate at which one BS can process known or is it variable based on data unit to be processed? It is variable based on data unit to be processed. Data unit (file) size varies between 1Kb and 100Mb. Similarly is the rate of arrival known or possible to detect? IRIS BS pulls messages, so as soon as BS job is done with the message, next message is pulled from the external queue (AWS SQS). Is the design to have all the processing of a data unit in the BS rather than pass to a BP/BO? Yes, it's a stateless app, so I need to process message and report success/error immediately since container can be reprovisioned at any time.
go to post Eduard Lebedyuk · Jan 19, 2023 CPU utilization would likely depend on the number of workers, wouldn't it? It sure does. Question is how to scale workers to optimize queue consumption
go to post Eduard Lebedyuk · Jan 19, 2023 Go to the SMP -> System Administration -> Configuration -> National Language Settings -> Locale Definitions and compare selected locales.
go to post Eduard Lebedyuk · Jan 18, 2023 Try: ##class(%Studio.Project).InstallFromFile( "/display=none /displaylog=0 /displayerror=0")
go to post Eduard Lebedyuk · Jan 17, 2023 The simpliest solution would be to call RestartWebServer as a final step of your deployment pipeline.
go to post Eduard Lebedyuk · Jan 13, 2023 Yes, like that. Is it the same OS? You can also try running: openssl s_client -connect <URL or IP>:<port>
go to post Eduard Lebedyuk · Jan 13, 2023 Would it work with Enabled cipherlist (TLSv1.2 and below): ALL Can you set Maximum Protocol Version to TLSv1.3?
go to post Eduard Lebedyuk · Jan 13, 2023 As process spawning is expensive, parallel queries are processed using Work Queue Manager. It works by having a queue managing process spawn worker processes at the system startup. When a new parallel query needs to be executed, it is distributed to workers. That is why the $zparent value is not what you expected. It is a value of a work queue managing process. You can use it instead, as it's relatively constant. Before executing your main query, run this query to get Work Queue Manager JobId: Class Test.Parallel { Query Test() As %SQLQuery { SELECT Test.Parallel_Parent() UNION %PARALLEL SELECT Test.Parallel_Parent() } ClassMethod Parent() As %Integer [ CodeMode = expression, SqlProc ] { $zparent } /// do ##class(Test.Parallel).Try() ClassMethod Try() { set rs = ..TestFunc() do rs.%Next() write "Work Queue Manager Job: ", rs.%GetData(1) } } Then, store your data subscribed by Work Queue Manager JobId, and all Work Queue Workers can pick it up using $zparent.
go to post Eduard Lebedyuk · Jan 13, 2023 You can make IRISLIB DB RW, but you'll lose changes on update.
go to post Eduard Lebedyuk · Jan 12, 2023 Parameter values are static values* and the same for all objects. Property values are different for each object. Small example: Class Circle Extends %RegisteredObject { Parameter PI = 3.14; Property Radius; Method GetArea() { quit ..#PI * ..Radius * ..Radius } ClassMethod Test() { set circle = ..%New() set circle.Radius = 25 write circle.GetArea() } } * parameters can be calculated but not set by user.
go to post Eduard Lebedyuk · Jan 12, 2023 Checking every 5 seconds should be good enough I think (with 10 being a default timeout in several places). This is actually for a PEX adapter but it looks like a fast check.
go to post Eduard Lebedyuk · Jan 11, 2023 Database is a physical file containing globals. Namespace is a logical combination of one or more databases. By default Namespace has two databases: GLOBALS - default location for globals ROUTINES - default location for code (classes/routines/includes) In addition to that, namespace can have any amount of mappings. Mappings map specified globals/code from a specified database. When you try to access a global, first global mappings are searched for this global, if no mappings are found, the GLOBALS database is used. When you try to access some code, first package/routine mappings are searched for this code, if no mappings are found, the ROUTINES database is used. To split data innto a separate DB: Create target DB. Make source DB RO (by forcefully logging users out for example and/or marking it as RO). Copy data/code from the source to target DB (for globals use ^GBLOCKCOPY). Create mapping from the target DB to your namespace. Confirm that data is present. Delete data from a source DB.
go to post Eduard Lebedyuk · Jan 11, 2023 scheduled task that run every 5 mins Assuming task is scheduled like this: it would be scheduled to run again 5 minutes after the completion of a last task execution, so there's no issue with several copies of a task running in parallel.