Fixed, and also changed from DO to JOB, if we do not want to manually restore this task after every run.
- Log in to post comments
Fixed, and also changed from DO to JOB, if we do not want to manually restore this task after every run.
Better to use command JOB INT^SHUTDOWN instead of DO. When you use DO, the task will not be finished and will be marked as suspended, and you will have to resume it manually.

At this time, it is supported only with Studio. I can easily add support to VSCode, not sure how it will be possible for Eclipse Atelier.
Just curious is anybody already uses such feature in their work or looking to use?
I found it many years ago. And last versions contains even much more than just a colorer. The complete parser also available there, but hidden. It would be good if InterSystems will open it to use for everybody. What would be great if InterSystems will make LanguageServer based on this parser?
The example in the documentation to %XML.Reader, does not work for you?
#include %occStatus
// Create a new XML Reader class
Set reader = ##class(%XML.Reader).%New()
// Begin processing of the XML input
Set sc=reader.OpenFile(filename)
If $$$ISERR(sc) Do $system.OBJ.DisplayError(sc) Quit
// Associate a class name with the XML element name
Do reader.Correlate("Person","Sample.Person")
// read Sample.Person objects from xml file
Set Count=0
While reader.Next(.person,.sc) {
Write person.Name_" imported.",!
Set Count=Count+1
Set sc=person.%Save()
If $$$ISERR(sc) Do $system.OBJ.DisplayError(sc) Quit
}
If $$$ISERR(sc) Do $system.OBJ.DisplayError(sc) Quit
Write Count_" Sample.Person instances found."
ROLLBACK should revert any changes in data which was done in a transaction, with some exceptions like $increment on Global.
You can look at this example.
Class User.Test Extends %Persistent
{
Property Name As %String;
Property CalcName As %String [ Calculated, SqlComputeCode = { set {*} = {Name} }, SqlComputed, SqlComputeOnChange = Name ];
Index ByName On CalcName;
Storage Default
{
<Data name="TestDefaultData">
<Value name="1">
<Value>%%CLASSNAME</Value>
</Value>
<Value name="2">
<Value>Name</Value>
</Value>
</Data>
<DataLocation>^User.TestD</DataLocation>
<DefaultData>TestDefaultData</DefaultData>
<IdLocation>^User.TestD</IdLocation>
<IndexLocation>^User.TestI</IndexLocation>
<StreamLocation>^User.TestS</StreamLocation>
<Type>%Storage.Persistent</Type>
}
}
Let's create first object
USER>s o=##class(Test).%New() USER>set o.Name="testname" USER>w o.%Save() 1
check saved in globals
USER>zw ^User.TestD,^User.TestI
^User.TestD=1
^User.TestD(1)=$lb("","testname")
^User.TestI("ByName"," TESTNAME",1)=""and now open transaction, and do some changes.
USER>k
USER>TSTART
TL1:USER>set o=##class(Test).%OpenId(1)
TL1:USER>s o.Name="testname2"
TL1:USER>w o.%Save()
1
TL1:USER>zw ^User.TestD,^User.TestI
^User.TestD=1
^User.TestD(1)=$lb("","testname2")
^User.TestI("ByName"," TESTNAME2",1)=""
So, changes there, let's do rollback, and check data again.
TL1:USER>TROLLBACK
USER>zw ^User.TestD,^User.TestI
^User.TestD=1
^User.TestD(1)=$lb("","testname")
^User.TestI("ByName"," TESTNAME",1)=""
When you going to do it in production, you will stop it anyway for some time.
But just for testing, I think you can extract backup with any empty ensemble on a new server, and use this extracted data on IRIS.
I think it will not be possible to restore backups from Caché/Ensemble to IRIS.
I'm sure that in most cases, it is possible to just rename CACHE.DAT to IRIS.DAT, and configure it exactly as it was in Ensemble, should work. And maybe it will work for you as well.
If you can easily repeat configuration on any just installed Ensemble server, do it in the same way for IRIS.
I'm not sure if this static test will answer our question, but maybe a good point to start.
I think we don't have any other possibilities how to catch changes in source code. Do you know how to catch if any object in any class was changed, outside of this class, if you don't have any triggers there? No easy task. But I think it is possible to find some tricky ways if you don't care about just in time notifications. You can monitor any changes in the data, and filter by changing particular globals and subscripts.
If you will describe what are you going to achieve exactly, it will be easier to help you.
Ok, then, why it is so important, why I it is not recommend to use bitmap in case of so many unique values? And what should be used instead?
I think you meant 64000, not 6400.
But it is not limitation actually. It is only length of bit string used in InterSystems products. And you have more values, it will add next chunk. I have system where we have billions IDs in bitmap indices, and it works fine. Even when we have terabytes just only indices.
To edit code, you should have it locally like in Atelier. This mode just server view, you can see a code, but not edit. You can export all code as files, from a server by command `Export sources`. After that by editing this code, it will be saved to a server and compiled if configured.
Very interesting question. Actually, it mostly depends on your application and how do you work with private data there.
You can make application for any number of customers working in one database, with good security which does not allow to access data from one customer by another. But in this case mostly means, that your application should be designed so, from the beginning.
Another and maybe simplest way is making separate databases for each customer. In Caché you can create multiple namespaces with different databases for each customer, but with the same database for a code of your application. So, you can update all sites at the same time.
Nowadays, I would recommend looking at containerization of application. And with kubernetes you can very fast deploy any new site with completely separate code and data between customers. But it means some work on how to prepare your application to be deployable with kubernetes.
I have done kubernetes deployments on a couple of projects, but both of them is private. And I can't share it. If you need some help, you can contact me directly, and I can share some ideas about how it can be done.
%CacheObject was replaced with %Compiler.Type.Object. But this class was and still for internal use, how do you use it?
Silent install uses exactly the same manifest file, as for interactive. And it will install all components. But you can choose which one you really need with ISC_PACKAGE_CLIENT_COMPONENTS parameter and when this parameter empty will be installed all components.
Why do you need so? By default with silent install, will be installed all components. But if you need to switch off some packages, you can configure really custom installation. More details in the documentation.
InterSystems has licenses for Linux various systems, so, they can offer license for it, and they have license type especially for docker version based on ubuntu.
I'm don't see any issues in performance, and mostly because I don't have so much big projects, yet, and don't use it in production. Current cases are only CI/CD.
Well, how I would dive into this issue.
Of course, this way not so easy to realize, and depends on how you deploy code in production. Or maybe it even possible to measure in the testing environment.
if you working on Linux, you can try to use device-mapper as storage-driver, which is also supported by InterSystems.
This behaviour expected if you use default Docker configuration, look at mention about aufs above in comments.
But, you should use docker version 18.06, because in newest version already deleted support for AUFS, and InterSystems does not work on overlay driver wchich is used by default in Docker.
when your container run, and you can find it in running state, you can use command
docker ps -a
which will show all existing containers in any state.
and then you can look at the logs of particular container
docker logs `hash shown after run command or assigined name visible in docker ps -a`
It happens because you still have $ensemble, replace all occurrences, and everything will be okay
looks like you did some changes in your Dockerfile comparing to my example, and you did mistake there. Can you share your Dockerfile, so I could check it?
In my example I have line
ADD $cache-lnxrhx64.tar.gz .
where $cache is variable defined few lines above. And when build will run, it will be replaced with value. But in your case, I see $ensemble, and sure that you don't have such variable, and this follows to the error.
Check it now, should be ok
I was not sure if it works, but looks like it does not work anymore. You can try to fill issue, and maybe author will repair it.