cancel
Showing results for 
Search instead for 
Did you mean: 
cancel
Showing results for 
Search instead for 
Did you mean: 

Unable to cleanup value stream in loop

satish
Newbie

Unable to cleanup value stream in loop

Hi,

 

I have multiple properties of thing enabled for logging using value stream. after testing, I want to purge all properties value stream data. So I executed purgepropertyhistory for each property in loop. It does not work. I then notice below error in application error log.

 

"Unable to process purgeBetweenNow Request for MoldMachineVars : Another request for this thing is active"

 

Is there simple way of purging all properties valuestream data?

 

Regards

Satish

12 REPLIES 12

Re: Unable to cleanup value stream in loop

Did you try this using the Immediate option?

Re: Unable to cleanup value stream in loop

No Pai. Immediate option was set to false. Also once I receive error, I can not even purge manually by calling purge for each individual property. I simply have to drop value stream and recreate to cleanup data.

Sent from my iPhone

Re: Unable to cleanup value stream in loop

I would try this with Immediate set to true, it is there for this type of use case I believe.

If you get 'hung up' you should re-start Tomcat to flush the memory and you should be able to continue.

Re: Unable to cleanup value stream in loop

Also, you can create a service "Delete" for the ThingTemplate which calling PurgePropertyHistory, with ​Immediate​ option, for each property.

Re: Unable to cleanup value stream in loop

Well I already did this approach, a Delete on ThingTemplate that automatically deletes all the History on value streams logged properties, the problem it's that if you right away after purging the History you try to Delete the Thing in itself it fails ( Support Case: 12784893​ ).

I think, TW should automatically delete Value Streams Logged properties when you delete the thing, it's a non sense on left not accessible data on the Value Stream ( data integrity! ).

Carles.

Re: Unable to cleanup value stream in loop

pause can help perhaps, if it is a timing issue.

Re: Unable to cleanup value stream in loop

Hi Pai,

It's not a Timing issue, I've already tried with pause, and other tricky ways, it's a transactional problem.

Carles.

Re: Unable to cleanup value stream in loop

I found that the OOTB PurgePropertyHistory ​has limitations, you gotta input property name and end date.

So I wrote a service like following code to clean all properties history during a given period.

Service inputs: startDate, endDate (you must input endDate while testing the service)

var params = {

type: undefined /* BASETYPENAME */

};

// result: INFOTABLE dataShape: "PropertyDefinition"

var LoggedPropertiesIT = me.GetLoggedProperties(params);

var tableLength = LoggedPropertiesIT.rows.length;

for (var x = 0; x < tableLength; x++) {

var row = LoggedPropertiesIT.rows;

//Your code here

   

    var params = {

propertyName: row.name /* STRING */,

endDate: endDate /* DATETIME */,

immediate: true /* BOOLEAN */,

startDate: startDate /* DATETIME */

    };

me.PurgePropertyHistory(params);

}

Re: Unable to cleanup value stream in loop

I used this method, but I have a strange problem. "me.GetLoggedProperties(params)" give me a table of 20 properties (automatically in alphabetical order). Sometime, the last one is not purged. And the service blocks !

chichen
Regular Member
(in response to qn)

Re: Unable to cleanup value stream in loop

This service worked perfect for my case.

I put this service in ThingTamplate, and tested the service on several Thing instance.

First, did GetLoggedProperties(params) returned the right logged properties infotable?

Second, you can try to test the OOTB PurgePropertyHistory service with the last property name and endDate input, see if it got problems.

Re: Unable to cleanup value stream in loop

Yes the service worked. But apparently, when I executed it many times consecutively, it would be a blocking thread when it took too much time. "PurgePropertyHistory service with the last property name and endDate input" did not work. Maybe it was the same problem as the one of this discussion.

Re: Unable to cleanup value stream in loop

If someone is interested, I wrote a similar service in Java. It can be used for thing templates which are defined in extensions

/**

  * Clears history from all logged properties.

  * @return String containing list of cleared properties

  * @throws Exception thrown by Thing.PurgePropertyHistory

  */

  @ThingworxServiceDefinition(name = "clearHistory", description = "Clears history from all logged properties.")

  @ThingworxServiceResult(name = "result", description = "List of cleared properties.", baseType = "STRING")

  public String clearHistory() throws Exception{

  String result = "Cleared properties: ";

  InfoTable LoggedPropertiesIT = this.GetLoggedProperties("");

  for(int i = 0; i < LoggedPropertiesIT.getLength(); i++){

  String propertyName = (String) LoggedPropertiesIT.getRow(i).getValue("name");

  DateTime startDate = new DateTime(0); // 1.1.1970

  DateTime endDate = new DateTime(); // Now

  this.PurgePropertyHistory(propertyName, startDate, endDate, true);

  result += propertyName + ", ";

  }

  result = result.substring(0, result.length()-2); // Remove last comma from the string

  return result;

  }

Announcements

Check out the upcoming Expert Session: Understanding ThingWorx Navigate Licensing in Community "Customer Events" section.