Pietro Montorfano · Jan 31, 2024 go to post

Hi Kurro,
if the production stores data that needs to be maintained in the DB, you need to do something more complex (like mapping the data globals in the new NS to the old DB.

If not the safest way to test and also migrate everything is what you are proposing:

  • make a backup of the original DB (freeze/thaw or the iris utility from management portal, restore to different location and keep an eye on NOT SETTING SWITCH 10 during restore https://docs.intersystems.com/irislatest/csp/docbook/DocBook.UI.Page.cl… online backup)
  • create a new NS copying from the old one
  • do the mapping accordingly
  • import the upgraded code in the new NS
  • disable all the producion pieces (BO / BP / BS) on the new production
  • disable the production part (brands) that needs to be migrated on the old version
  • enable them on the new version

If something on the new production goes bad, you can easily enable the disabled pieces on the old version, and disable them on the new one.

Pietro

Pietro Montorfano · Jan 16, 2024 go to post

Hi,
may be that you are connecting to the webserver port and not the superserver one?

Can you post an "iris list"?

You can also include the connection in a try/catch and check on iris in application error logs and audit database (the audit db probably is the one that you need to check first).

you can have a look at a script that i've made that basically implements a remote cli to iris

https://github.com/m0nt0/riris/blob/main/src/riris

Pietro Montorfano · Sep 11, 2023 go to post

Hi @Sandeep K C 
As said before you can use zf, but you need to configure the underlying os to let you use unauthenticated access between 2 systems (sudo and ssh keyless).

Pietro Montorfano · Sep 11, 2023 go to post

Hi,

You should consider to check other is errors.

Usually happens when /tmp is full, when the disks are slow (top command and look for "wa" statistic), check system logs and, may be, apache limits.

It's saying that he can't create a job, so you are short on some resource.

Or the antivirus...

Pietro Montorfano · Sep 9, 2023 go to post

no no for the testldap don't remove it. Test ldap will run the query as it will do on the login giving you the output of the search for debugging. May be how samacountname is written?

On an AD installation i got it as "sAMAccountName"...

Pietro Montorfano · Sep 8, 2023 go to post

i think that zauth will conflict with ldap integrated, but before switching off zauth, make sure that ldap works as expected using the "test ldap authentication" on the previous screen.

What i see from your screen is that you may have errors in the "hostname" and "search username dn".

Hostname should be the ip or fqdn of your AD domain servers (start with one and then add all the other).

Search username has to be specified in LDAPish way so something like
cn=ensemble Service,dc=osumc,dc=edu

Pietro Montorfano · Sep 7, 2023 go to post

Hi,
as always you can, but it's quite complex.

in order you should:

  1. create the db on server 1
  2. add it to the mirror
  3. backup the db on server1
  4. restore the db on server2
  5. bring it online
  6. do the catchup on server2

Everything is scriptable, but it can be complex because it involves 2 servers

Pietro Montorfano · Sep 7, 2023 go to post

Hi Scott,
i've setup ldap auth and basically it automatically do what you are looking for. The only thing is (like you saw) that you have the AD groups named as IRIS is expecting.

This is an example of what we are using and to have a %All a user must be in the ad group isc_Role_%All

Pietro Montorfano · Sep 7, 2023 go to post

never tried but worked with a lot of copy between versions and architectures (think that this isn't different).

The first error is from the restore, you are trying to restore a db on an existing one with different block size (8k vs 16k may be). Try to restore to a new database and this will be solved.

The other problem that you are facingis that replacing the mgr will result in a broken instance.
With the restore and also by copying the databases (more or less is the same thing), I would NEVER restore the default databases :

IRISSYS
IRISLIB
IRISLOCALDATA <-- probably could be replaced
IRISAUDIT <-- probably could be replaced
ENSLIB
HSCUSTOM
HSLIB
HSSYS

I'd say that if you can shut down both instances you can simply copy the iris.dat files in place from windows to container. This way you won't lose time in doing backup / restore

Keep in mind that every configuration done needs to be synced on the container (users, privileges, web applications, roles, namespaces,....).

Pietro Montorfano · Sep 7, 2023 go to post

Hi,
you could configure sudo like

irisusr ALL = NOPASSWD: /usr/bin/systemctl stop httpd.service

where irisusr is the user that runs iris.

For the other server you could do the same thing and setup ssh to authenticate via keys

On source server:
su - irisusr
ssh-copy-id this_is_the_other_web_server
but the real question is: why do you want to stop httpd?

You could configure webgateway to have the other server as a failover.

configure connection to server2
setup application to be server1 primary, server2 backup

Pietro Montorfano · May 25, 2023 go to post

Hi,
i'll try a copy after join the mirror (step 11 before step 9) so that mirror knows that there's a new member.

So basically shut down both iris, copy the files from TEST_NODE1 to TEST_NODE2 and start them again (first TEST_NODE1 and the TEST_NODE2)

Pietro

Pietro Montorfano · May 24, 2023 go to post

yeah, i've read that and saw this in a lot of other SQL DB, but when it comes to reality with a large amount of insert/delete made to the table the index is corrupted and there's the need to rebuild it like once a week.

Have you got any experiece like this? I need to create an index and use it on a table that will costantly have insert and delete (transactional data, a list/queue of transactions that needs to be processed)

Thanks

Pietro Montorfano · May 23, 2023 go to post

I think that it depends on the filters in studio. You should be looking for a "class definition CLS".

Try to check it with the web portal. System explorer > classes, choose the namespace (should be "monitor"), look at the classes

Pietro Montorfano · May 19, 2023 go to post

You can became iris owner with

su - iris owner

Via sudo or via root user

Moreover you can run

iris list

To see where iris is installed.

Other "funny" ways can be

lsof | grep iris

ps ef | grep iris

Pietro Montorfano · May 19, 2023 go to post

Hi, to examine and kill a job i'll go via terminal in iris session, zn to %SYS and execute ^JOBEXAM that is a sort of "top" for linux.

in the process list you can push (or keep pushed) spacebar to update the screen and keep an eye on the column "globals" and "lines", the ones that will grow really fast are probably the jobs that you are looking for.

Using "n" and "p" you can go to "Next" or "Previous" page.

When you fins the process that in your opinion is the one that needs to be killed you can examine what it's doing pushing "E" to "Examine" and give the job number (the first column). Also in this case pressing spacebar will update the screen.

When you are sure that you want to kill that process proceed with "t" to "Terminate" the job followed by the number.

Doing so, you can easily find all the jobs that needs to be killed

Pietro Montorfano · May 17, 2023 go to post

yes if you have the global mapped in some different db, GOF will tell you so you need to go first with ^%GD to display the mapping, zn to that db and use ^%GOF.

^%GIF can be used anywhere inside the Namespace.

Pietro Montorfano · May 15, 2023 go to post

Ok, if we are talking about code in deployed mode you simply can't do this. You must get a code compiled for your actual version.

You can try with $SYSTEM.OBJ.Export which export the obj, but you will probably get the same error.

Pietro Montorfano · May 14, 2023 go to post

Hi, you could check what's happening using Wireshark to analyze the TCP traffic and the request that you are doing.

Are you getting this error on the server side, what you got on client side?

Seems that they are not communicating or the server is getting something wrong

Pietro Montorfano · May 14, 2023 go to post

Hi, you simply got an information (0 in the log), these are system db so you can choose to not backup them (they are included in the installation) and running the task as another use won't solve the problem (that is not a problem).

Also mounting them as rw is a bad bad thing because you can end up in modifying the DB (Andi you don't want this).

You should simply ignore the message and if it's a monitoring system that warns you, set it to check for 1 or above severity (I'll go for 2 or more).

If you really really want to get rid of it and still backup every db, write a custom backup routine tanto mounts the db row, backup them, get them ro again. But this would be a waste of time because it's just an info

Pietro Montorfano · May 10, 2023 go to post

why don't you use ^%GOF and ^%GIF? They should be compatible i think.
Else the "bad" workaround is do something dirty, you could try to:

Create a new DB in the old instance
copy the global in that db
copy the db on the new instance
attach the db
move your global where you like

Don't know if this works, it "should"

Pietro Montorfano · Mar 15, 2023 go to post

Hi Scott,
not an expert for zstop, but what you are looking for cannot be developed with the zstop.

With an "iris force", hardware failure (hard power off, server fault,... anything that is not a "polite" shutdown) or other similar condition where iris simply is killed, no zstop is executed. You can only be aware of an unclean shutdown at the iris restart, but that's too late for what you are looking to do.

What you can do is to have an agent that monitors the iris instance (qlist, process, messages.log) and execute action when certain conditions are met.

Moreover i haven't found anything on the "shutdown" cause, it's just a shutdown inside iris i think

Pietro

Pietro Montorfano · Mar 6, 2023 go to post

unfortunately unless you got a very very high log set in the instance and a very long journal history you can't discover that.

If you got the info you can find in the journal the global change, get the process info and search the log for them. But usually is something that you can spot in the near time or something that happens on a regular basis, something spot is really difficult to find in that way.

Pietro Montorfano · Feb 28, 2023 go to post

Hi,

never done that, always installed production under linux. Respecting the allocation size it will be good to match the same size so if you are using only 8k, it should be better to have 8k also on fs so 1 unit for db should also be 1 unit for fs and it won't be split in 2 fs operation. 8k should be fine because you can accept that if you are using a mixed db allocation size for 8k and 16k it will always be beneficial also for 16k chunks.

On this argument always remember to align the partition and the fs dropping the first bytes as per ms best practice so that also the disk (if on a raid) could match the writes

https://support.microsoft.com/en-us/topic/recommendations-and-guideline…

Pietro Montorfano · Feb 27, 2023 go to post

diff between 2 environment made easy.

Have i ported all routines from env A to env B?

Are they the same?

Exporting everything in a single file allow you to use something like winmerge and make a full diff

Pietro Montorfano · Feb 24, 2023 go to post

Hi,
the most straightforward thing to do is to use the upload manager that will take care of everythings.
But if you want to go via code, as Davide said, you should use ##class(User.SSUser).%New() to create the user.
Keep in mind that the user at first login MUST change the password. To avoid that, you have to have 2 row in the password table, so you should change the password one time via class and then the user should be able to login with the specified credentials.
So the main suggestion is to go with upload manager and, may be, ldap as a backend for password auth.