Encontrar

Artículo
· 4 nov, 2025 Lectura de 11 min

IKO Plus: Database Management, Migration, or Day 1 Seeding your Mirrored IrisCluster

Mirror Your Database Across the Galaxy with Seeding

Hello cpf fans!  This distraction I used the "seed" capability in IRIS to provision an entire IrisCluster mirror, 4 maps wide with compute starting from an IRIS.DAT in a galaxy far far away.  This is pretty powerful if you have had a great deal of success with a solution running on a monolithic implementation and want it to scale to the outer rim with Kubernetes and the InterSystems Kubernetes Operator.  Even though my midichlorian count is admittely low, I have seen some hardcore CACHE hackers shovel around DATS, compact and shrink and update their ZROUTINES, so this same approach could also be helpful shrinking and securing your containerized workload too.  If you squint and feel all living things around you,  you can see a glimpse of in place (logical) mirroring in the future as a function of the operator and a migration path to a fully operational mirrored Death Star as the workload matures.


Mission

Ill show you how I built an IrisCluster that pulls an IRIS.DAT file from an arbitrary location via an initContainer and uses it to "seed" a mirrored database throughout its topology. 

I used a repo that I visit at least annually @Guillaume Rongier 's repo InstallSamples which features a committed IRIS.DAT, there is also another one that appropriately puts ENSDEMO back on your systems too, but I kept it simple adhering to my prescription of Focusyn.

https://media.githubusercontent.com/media/grongierisc/InstallSamples/ref...

🌱 This will be the seed for the IrisCluster, and I expect it to be production grade mirrored and like deployable on a Friday if you know what I mean.

Kubernetes Cluster (Kind)

So I provision a quick kind cluster, give it 5 worker nodes, install Cilium as the default CNI and install the InterSystems Kubernetes Operator.  Waited for it to complete, then when it did, I labelled the nodes, one per Star Wars planet, including one from the Outer Rim.

 
ikoseedcluster.sh

I now have a happy Kubernetes cluster, nodes are ready and labelled as planets=(tatooine coruscant hoth naboo endor)... warp speed.

And an InterSystems Kubernetes Operator  parked in orbit around the forest moon of Endor.



Then I had R2 declare the IrisCluster topology...

IrisCluster

Here is is in its entirety, but we will break it down, starting with the init container.

 
iriscluster.yaml

init-container


Our init-container has one job, and is going to retrieve our seed database from github, and appropriate it with a mount and hand it off to our IRIS pods so it can be referenced from a POSIX path.

...
          initContainers:
            - name: init-grongierisc-samples
              image: debian:bookworm-slim
              command:
                - sh
                - -c
                - |
                  echo "Installing getting Samples from @grongierisc's repository https://github.com/grongierisc/InstallSamples/tree/master ..."
                  #set -euo pipefail
                  apt-get update
                  DEBIAN_FRONTEND=noninteractive apt-get install -y curl
                  cd /airgapdir
                  curl -L https://media.githubusercontent.com/media/grongierisc/InstallSamples/refs/heads/master/samples/IRIS.DAT --output IRIS.DAT
                  #curl -L http://192.168.1.231:8080/IRIS.DAT --output IRIS.DAT
                  chmod -R 777 /airgapdir
                  chown -R 51773:51773 /airgapdir
              volumeMounts:
                - name: airgapdir
                  mountPath: /airgapdir
...

The database will show up at /airgapdir/IRIS.DAT in the IRIS pods.

Data

💫The seeding comes in at this block in the specification, this is telling the operator to weild the force

      irisDatabases:
        - name: SAMPLES
          directory: /irissys/data/IRIS/mgr/SAMPLES
          mirrored: true
          ecp: true
          seed: /airgapdir/
          logicalOnly: false
      irisNamespaces:
        - name: ENSDEMO
          routines: SAMPLES
          globals: SAMPLES
          interop: true

I enabled mirroring, turned ecp to true as we will be including a compute node, and pointed it at our seed directory of the database.  Under the hood, IKO is generating a cpf for merge in the Actions directive, which is really accountable for the heavy seeding capability.

[Actions]
ModifyService:Name=%service_ecp,Enabled=0
CreateDatabase:Name=iriscluster,Directory=/irissys/data/IRIS/mgr/iriscluster
CreateNamespace:Name=IRISCLUSTER,Globals=iriscluster,Routines=iriscluster
CreateDatabase:Name=SAMPLES,Directory=/irissys/data/IRIS/mgr,Seed=/airgapdir
CreateNamespace:Name=ENSDEMO,Globals=SAMPLES,Routines=SAMPLES,Interop=1

Compute

I added a single replica of an ecp node to the equation, a clone if you will.

    compute:
      image: containers.intersystems.com/intersystems/irishealth:2025.1
      ephemeral: true
      replicas: 1
      preferredZones:
        - endor

mirrorMap

The mirrormap includes the following roles:

mirrorMap: primary,backup,drasync,rwrasync
mirrored: true

Zones

To stay in step with the Star Wars theme Ill lock our mirror topolology to the labelled nodes.

      preferredZones:
        - tatooine
        - coruscant
        - hoth
        - naboo

Note that we already set a zone for the compute node on Endor.

Apply

kubectl apply -f iriscluster.yaml --kubeconfig ikoseed.kubeconfig
iriscluster.intersystems.com/ikoplus-seed-sweenx12 created
secret/license-key-secret unchanged
secret/webgateway-secret unchanged
secret/containers-pull-secret unchanged
secret/cert-secret configured
configmap/seed-before-script unchanged
secret/webgateway-secret unchanged
configmap/seed-after-script unchanged

I waited a few minutes and it the IrisCluster came to life...

The IrisCluster role view...



And a view from Hubble...



I pulled up Mirroring Monitor, to see if our seeded database "SAMPLES" in Namespace "ENSDEMO" made it to the mirror party

🎉 It DID!

Then I inspected the result of the clone operation on the pod itself to make sure the DAT is in all the right places (podspec, filesystem, DATADIR).



🎉 They ARE!

And just to check the topology, lets see if the single replica ECP client is connected...

🎉 Totally IS!

Attestation

I am a little weirded out by these force powers and hand waving, back in the day I seemed to have to square dance mounting/shuffling around the DAT with PVC swings, SFTP, ssh, whatever, and even wrote sscp with @Eduard Lebedyuk to do the task over the superserver.

So I write a global out in the on the Primary mirror on the IrisCluster...

Then loop over the topology to see if it it got mirrored appropriately across the galaxy.

 
seedmirrorcheck.sh

Its a little sloppy, Wado did not give me the day off today, but the results are good...

The force seems to be with us on:

✅ primary (persisted)

✅ backup (persisted)

✅ drasync (persisted)

✅ rwrasync (persisted)

✅ compute (accessible)

🎉

Set ^iFind="Your Lack of Faith Disturbing"
Comentarios (0)1
Inicie sesión o regístrese para continuar
Artículo
· 4 nov, 2025 Lectura de 2 min

EnsLib.SQL.Snapshot no se limpia durante la depuración de mensajes cuando se utiliza en el mensaje de respuesta

Hola a todos,

Primero quiero reconocer a @Theo Stolker y @Rupert Young, porque me ayudaron con la solución.

Cuando usáis EnsLib.SQL.Snapshot como una propiedad en el mensaje de respuesta para devolver datos de Snapshot (por ejemplo, desde una Business Operation a un Business Process), los datos del Snapshot no se limpian con la tarea/servicio de depuración de mensajes.

Class ResponseMessage Extends Ens.Response

{

    Property SnapshotProp As EnsLib.SQL.Snapshot;

}

Los datos quedarán atascados en el global: ^Ens.AppData. Podéis encontrarlos con esta consulta en System>Globals: ^Ens.AppData("EnsLib.SQL.Snapshot",

La referencia se registra en la clase: EnsLib.SQL.Snapshot. Podéis consultarla con SQL: SELECT * FROM EnsLib_SQL.Snapshot ORDER BY ID asc

Estos datos no se eliminarán durante la tarea de depuración. Por lo tanto, los datos irán creciendo con el tiempo. Cuando tengáis este problema, podéis limpiar todos los datos manualmente con el siguiente método:

  • Limpiar el Global: ^Ens.AppData:
    • Detened la producción
    • Ejecutad en el terminal (aseguraos de estar en el NameSpace correcto): do ##class(Ens.Adapter).ClearStaticAppData("EnsLib.SQL.Snapshot"
    • Iniciad de nuevo la producción
  • Limpiar EnsLib_SQL.Snapshot:
    • Eliminad los datos con SQL: TRUNCATE TABLE EnsLib_SQL.Snapshot

Pero esto no es lo ideal, especialmente en el entorno de producción (PRD).

Solución:

Este problema solo ocurre cuando se devuelven datos desde una BO a una BP, o quizá desde una BP a una BS, ya que la idea es la misma.

Una solución es no usar EnsLib_SQL.Snapshot como propiedad en el mensaje de retorno, sino mapear los datos a otro tipo de objeto (por ejemplo: JSON como cadena, u otros tipos de clase).

Otra solución es hacer que la tarea de depuración elimine los datos del Snapshot mediante el método %OnDelete:

https://docs.intersystems.com/irislatest/csp/docbook/Doc.View.cls?KEY=GOBJ_callbacks#GOBJ_cb_ondelete

Así:

Class ResponseMessage Extends Ens.Response
{

    Property SnapshotProp As EnsLib.SQL.Snapshot;

   ClassMethod %OnDelete(oid As %ObjectIdentity) As %Status [ Private, ServerOnly = 1 ]
   {
      set id = $$$oidPrimary(oid)
      set obj = ..%OpenId(id)
    
      return ##class(EnsLib.SQL.Snapshot).%DeleteId(obj.SnapshotProp.%Id())
   }

}

¡Espero que os ayude tanto como me ha ayudado a mí!

PD: Publicación relacionada: https://community.intersystems.com/post/setting-enslibsqlsnapshot-vs-enslibsqlsnapshotclean

Comentarios (0)1
Inicie sesión o regístrese para continuar
Anuncio
· 4 nov, 2025

Resumen del mes de octubre, 2025

¿No habéis podido entrar en la Comunidad todo lo que os gustaría? ¡No os preocupéis! Os traemos un resumen de todo lo que hemos publicado en el mes de octubre. Seguid leyendo y no os lo perdáis ⬇️⬇️
Estadísticas generales
✓ publicaciones nuevas:
 15 artículos
 17 anuncios
 2 nuevas preguntas
Top 10 Publicaciones populares
Nobody expects the Spanish Inquisidor!
Por Luis Angel Pérez Ramos
Top 5 Autores populares
Todos los artículos
#InterSystems IRIS
De "¡Ups!" a "¡Ajá!" - Evitad los errores de principiantes en ObjectScript
Por Vachan C Rannore
GORM e InterSystems IRIS: Presentando gorm-iris
Por Jose-Tomas Salvador
La espera ha terminado: damos la bienvenida al soporte de GoLang para InterSystems IRIS
Por Jose-Tomas Salvador
Cómo visualizar las configuraciones de vuestro servidor InterSystems usando Structurizr
Por Ricardo Paiva
Si te gusta la tecnología de InterSystems, sigue leyendo...
Por Jose-Tomas Salvador
¿Por qué sigo viendo mensajes antiguos después de ejecutar la tarea de limpieza?
Por Jose-Tomas Salvador
Ampliar la capacidad de ObjectScript para procesar YAML
Por Yuri Marx
Python embebido e IRIS en Jupyter Notebook en un entorno virtual
Por Piyush Adhikari
[Quick tip] - Como usar URL en servicios REST API sin distinción entre mayúsculas y minúsculas
Por Kurro Lopez
La nueva validación basada en perfiles de servidor FHIR
Por Jose-Tomas Salvador
Conectarse al servidor SQL mediante autenticación de Windows
Por Arsh Hasan
Consejos para manejar grandes volúmenes de datos
Por Luis Angel Pérez Ramos
Complemento IRIS para Home Assistant (HAOS)
Por Ricardo Paiva
Nobody expects the Spanish Inquisidor!
Por Luis Angel Pérez Ramos
 
#InterSystems IRIS for Health
 
Todos los anuncios
#InterSystems IRIS
 
#Portal de ideas de InterSystems
 
#Open Exchange
 
#IRIS contest
 
#Comunidad de Desarrolladores Oficial
 
#Summit
 
#Otro
 
Todas las preguntas
#InterSystems IRIS
 
#InterSystems IRIS for Health
 
octubre, 2025Month at a GlanceInterSystems Developer Community
Comentarios (0)1
Inicie sesión o regístrese para continuar
Resumen
· 4 nov, 2025

Resumen de la Comunidad de Desarrolladores, octubre 2025

Hola y bienvenidos al boletín de la comunidad de desarrolladores octubre 2025.
Estadísticas generales
✓ publicaciones nuevas:
 15 artículos
 17 anuncios
 2 nuevas preguntas
6 nuevos miembros se unieron en octubre
2,262 contenidos publicados de forma constante
872 miembros se unieron de forma constante
Publicaciones populares
Nobody expects the Spanish Inquisidor!
Por Luis Angel Pérez Ramos
Autores populares
Artículos
#InterSystems IRIS
De "¡Ups!" a "¡Ajá!" - Evitad los errores de principiantes en ObjectScript
Por Vachan C Rannore
GORM e InterSystems IRIS: Presentando gorm-iris
Por Jose-Tomas Salvador
La espera ha terminado: damos la bienvenida al soporte de GoLang para InterSystems IRIS
Por Jose-Tomas Salvador
Cómo visualizar las configuraciones de vuestro servidor InterSystems usando Structurizr
Por Ricardo Paiva
Si te gusta la tecnología de InterSystems, sigue leyendo...
Por Jose-Tomas Salvador
¿Por qué sigo viendo mensajes antiguos después de ejecutar la tarea de limpieza?
Por Jose-Tomas Salvador
Ampliar la capacidad de ObjectScript para procesar YAML
Por Yuri Marx
Python embebido e IRIS en Jupyter Notebook en un entorno virtual
Por Piyush Adhikari
[Quick tip] - Como usar URL en servicios REST API sin distinción entre mayúsculas y minúsculas
Por Kurro Lopez
La nueva validación basada en perfiles de servidor FHIR
Por Jose-Tomas Salvador
Conectarse al servidor SQL mediante autenticación de Windows
Por Arsh Hasan
Consejos para manejar grandes volúmenes de datos
Por Luis Angel Pérez Ramos
Complemento IRIS para Home Assistant (HAOS)
Por Ricardo Paiva
Nobody expects the Spanish Inquisidor!
Por Luis Angel Pérez Ramos
#InterSystems IRIS for Health
Anuncios
#InterSystems IRIS
#Portal de ideas de InterSystems
#Open Exchange
#IRIS contest
#Comunidad de Desarrolladores Oficial
#Summit
#Otro
Preguntas
#InterSystems IRIS
#InterSystems IRIS for Health
octubre, 2025Month at a GlanceInterSystems Developer Community
Artículo
· 4 nov, 2025 Lectura de 3 min

Document Database Explorer

Introducing IRIS DocDB Explorer: A Sleek UI for Managing JSON Documents in InterSystems IRIS

IRIS offers a dedicated feature for storing and retrieving JSON documents using DocDB, without requiring a predefined schema.

Developers often need a quick and intuitive way  to browse, create, and edit documents without switching between multiple tools or writing repetitive code. To solve this, I created iris-docdb-ui — a CSP-based open-source application that provides a clean, responsive interface for interacting with DocDB effortlessly. Users can easily create namespaces and document databases, view stored documents, add new documents, and edit existing ones — all from a single, convenient platform.

This application is also published on the InterSystems Open Exchange, making it easy to install and start using immediately.

 

A User-Friendly Approach to DocDB

At its core, Iiris-docdb-ui -  RIS DocDB Explorer is all about simplicity. The interface allows users to explore namespaces and document databases, create new databases on the fly, and manage documents with minimal effort. Features like inline editing, real-time error handling, and instant feedback transform what used to be a technical chore into a smooth, productive workflow.

Key highlights include:

  • Browse namespaces and document databases effortlessly
  • Create new document databases dynamically
  • View, add, edit, and save JSON documents with ease
  • Modern, responsive interface built with contemporary web technologies
  • Real-time feedback to help prevent errors and streamline updates

How It Works

Once installed, using iris-docdb-ui  Explorer is straightforward. Users can navigate existing namespaces, drill down into document databases, and quickly access individual JSON documents. Adding or editing a document is as simple as typing in a form — no complex scripting or manual data entry is required.

Creating new document databases is equally simple. From a single interface, developers can spin up new databases as needed, making it ideal for prototyping, testing, or expanding an application.

Installation and Getting Started

Getting started with iris-docdb-ui Explorer is simple:

  1. Visit InterSystems Open Exchange to download the application.
  2. Deploy the CSP-based app in your IRIS instance following the standard Open Exchange installation procedure.
  3. Open the application in your browser and start exploring, creating, and editing JSON documents immediately.

No additional configuration is required — it works out of the box.

sample url : http://localhost:52773/csp/user/DocDB.Home.cls
 

Why It Matters

iris-docdb-ui Explorer isn’t just a convenience — it’s a productivity booster. By providing a visual, responsive interface, it allows developers, analysts, and admins to focus on the data itself rather than the tooling. Whether you’re testing new applications, managing large JSON datasets, or exploring the capabilities of DocDB, this tool simplifies the process significantly.

Comentarios (0)1
Inicie sesión o regístrese para continuar