Could not create rrd4j file

This is the same problem as this.
I’m getting this error.

2019-04-29 08:44:53.963 [ERROR] [sistence.rrd4j.internal.RRD4jService] - Could not create rrd4j database file '/var/lib/openhab2/persistence/rrd4j/wellCurrent.rrd': null

charts.items

// To choose a proper chart period in a sitemap
// mappings=[0="Day", 1="Week", 2="Month", 3="Year"]
Number chartPeriod1 "Graph Outside Temp"
//Switch item=chartPeriod1 label="Graph Time" mappings=[0="Day", 1="Week", 2="Month", 3="Year"]
Number chartPeriod2 "Graph Inside Temp"
Number chartPeriod3 "Graph Well Current"
Number wellCurrent "Well Current" { mqtt="<[mymqtt:well/current:state:default]" }

charts.sitemap

sitemap charts label="Charts" {
    // Frame {
    //     Chart item=PIRFrontYard_SensorTemperature period=H refresh=6000 service="rrd4j" visibility=[0]
    // }
    Frame label="Outside temp" {
        Switch item=chartPeriod1 label="Graph Time" mappings=[0="Day", 1="Week", 2="Month", 3="Year"]
        // Chart item=PIRFrontYard_SensorTemperature period=1H refresh=300 service="rrd4j"
        Chart item=PIRFrontYard_SensorTemperature period=D refresh=30000 service="rrd4j" visibility=[chartPeriod1==0, chartPeriod1==NULL]
        Chart item=PIRFrontYard_SensorTemperature period=W refresh=30000 service="rrd4j" visibility=[chartPeriod1==1]
        Chart item=PIRFrontYard_SensorTemperature period=M refresh=30000 service="rrd4j" visibility=[chartPeriod1==2]
        Chart item=PIRFrontYard_SensorTemperature period=Y refresh=30000 service="rrd4j" visibility=[chartPeriod1==3]
    }
    Frame label="Inside Temp" {
        Switch item=chartPeriod2 label="Graph Time" mappings=[0="Day", 1="Week", 2="Month", 3="Year"]
        Chart item=Thermostat_SensorTemperature period=D refresh=30000 service="rrd4j" visibility=[chartPeriod2==0, chartPeriod2==NULL]
        Chart item=Thermostat_SensorTemperature period=W refresh=30000 service="rrd4j" visibility=[chartPeriod2==1]
        Chart item=Thermostat_SensorTemperature period=M refresh=30000 service="rrd4j" visibility=[chartPeriod2==2]
        Chart item=Thermostat_SensorTemperature period=Y refresh=30000 service="rrd4j" visibility=[chartPeriod2==3]
    }
    Frame label="Inside Setpoint Cooling" {
        Chart item=Thermostat_SetpointCooling period=D refresh=30000 service="rrd4j" visibility=[chartPeriod2==0, chartPeriod2==NULL]
        Chart item=Thermostat_SetpointCooling period=W refresh=30000 service="rrd4j" visibility=[chartPeriod2==1]
        Chart item=Thermostat_SetpointCooling period=M refresh=30000 service="rrd4j" visibility=[chartPeriod2==2]
        Chart item=Thermostat_SetpointCooling period=Y refresh=30000 service="rrd4j" visibility=[chartPeriod2==3]
    }
    Frame label="Well Current Draw" {
        Switch item=chartPeriod3 label="Graph Time" mappings=[0="Day", 1="Week", 2="Month", 3="Year", 4="Hour"]
        Chart item=wellCurrent period=D refresh=30000 service="rrd4j" visibility=[chartPeriod3==0, chartPeriod3==NULL]
        Chart item=wellCurrent period=W refresh=30000 service="rrd4j" visibility=[chartPeriod3==1]
        Chart item=wellCurrent period=M refresh=30000 service="rrd4j" visibility=[chartPeriod3==2]
        Chart item=wellCurrent period=Y refresh=30000 service="rrd4j" visibility=[chartPeriod3==3]
        Chart item=wellCurrent period=h refresh=30000 service="rrd4j" visibility=[chartPeriod3==4]
    }
}

my rrd4j.cfg is all commented out, so I’m only using defaults.

rrd4j.persist:

Strategies {
    // for rrd charts, we need a cron strategy
    everyMinute : "0 * * * * ?"
    everyHour   : "0 0 * * * ?"
    everyDay    : "0 0 0 * * ?"
    default = everyChange
}

Items {
    * : strategy = everyUpdate, everyMinute, everyHour, everyDay, everyChange
}

I am only getting the error on wellCurrent Item which is a Number, populated by MQTT, as opposed to the other temperature items, which are channels of the Z-wave device.
The charts are displaying correctly, so the only symptom is this error in the log file.

Do you visualize to actual number for “wellCurrent” somewhere or do you see the log-entries when it changes?
Does the file /var/lib/openhab2/persistence/rrd4j/wellCurrent.rrd exist?

I do see the log entries:


2019-04-29 10:04:40.514 [vent.ItemStateChangedEvent] - wellCurrent changed from 16.85 to 16.894

2019-04-29 10:04:42.517 [vent.ItemStateChangedEvent] - wellCurrent changed from 16.894 to 16.872

2019-04-29 10:04:43.523 [vent.ItemStateChangedEvent] - wellCurrent changed from 16.872 to 16.915

2019-04-29 10:04:47.547 [vent.ItemStateChangedEvent] - wellCurrent changed from 16.915 to 16.872

2019-04-29 10:04:49.555 [vent.ItemStateChangedEvent] - wellCurrent changed from 16.872 to 16.915

2019-04-29 10:04:50.556 [vent.ItemStateChangedEvent] - wellCurrent changed from 16.915 to 16.85

2019-04-29 10:04:51.568 [vent.ItemStateChangedEvent] - wellCurrent changed from 16.85 to 16.894

==> /var/log/openhab2/openhab.log <==

2019-04-29 10:04:58.605 [ERROR] [sistence.rrd4j.internal.RRD4jService] - Could not create rrd4j database file '/var/lib/openhab2/persistence/rrd4j/wellCurrent.rrd': null

==> /var/log/openhab2/events.log <==

2019-04-29 10:04:58.606 [vent.ItemStateChangedEvent] - wellCurrent changed from 16.894 to 16.915

2019-04-29 10:04:59.606 [vent.ItemStateChangedEvent] - wellCurrent changed from 16.915 to 16.829

2019-04-29 10:05:00.603 [vent.ItemStateChangedEvent] - wellCurrent changed from 16.829 to 16.872

2019-04-29 10:05:02.613 [vent.ItemStateChangedEvent] - wellCurrent changed from 16.872 to 16.894

2019-04-29 10:05:03.624 [vent.ItemStateChangedEvent] - wellCurrent changed from 16.894 to 16.872

I can view the data in my sitemap charts:

And the file exists:

[10:21:39] openhabian@openHABianPi:~$ ls -al /var/lib/openhab2/persistence/rrd4j/wellCurrent.rrd 
-rw-rw-r-- 1 openhab openhab 28280 Apr 29 10:21 /var/lib/openhab2/persistence/rrd4j/wellCurrent.rrd

After looking at the timing, perhaps this is a race condition?

Good hint, try to remove all strategies exemt “everyMinute” ( and maybe “everyChange”)

Okay, I made the change. I will have to wait about another 24 hours before the well pumps any water again.

The well pump ran this morning. I can confirm that the errors in the log file are now gone. I will add parameters back in to determine which ones cause the issue.

It is most probably caused by more then one strategy triggering at the same time, like everyHour would double with everyMinute etc…

Hmm. This morning I found this, and the well pump was not even running:


2019-05-02 06:22:09.574 [vent.ItemStateChangedEvent] - PIRBackDoor_BinarySensor changed from OFF to ON

==> /var/log/openhab2/openhab.log <==

2019-05-02 06:25:00.925 [ERROR] [sistence.rrd4j.internal.RRD4jService] - Could not create rrd4j database file '/var/lib/openhab2/persistence/rrd4j/wellCurrent.rrd': null

==> /var/log/openhab2/events.log <==

2019-05-02 06:25:30.073 [vent.ItemStateChangedEvent] - PIRBackDoor_BinarySensor changed from ON to OFF

My current rrd4j.persist:

Strategies {
    // for rrd charts, we need a cron strategy
    everyMinute : "0 * * * * ?"
    // everyHour   : "0 0 * * * ?"
    // everyDay    : "0 0 0 * * ?"
    default = everyMinute
}

Items {
//    * : strategy = everyUpdate, everyMinute, everyHour, everyDay, everyChange     // throws wellCurrent error
//    * : strategy = everyMinute         // no errors in log file
    * : strategy = everyUpdate, everyMinute  // threw error when pump not running.
}

Never heard of such a problem :flushed:
Do you really need to persist all items? (That’s all I can say)

When started with openhab I found some hints and informations, that rdd4j only works with everyMinute.

general:
everyUdate is a bad Choice, because it saves the value every time, OH2 gets a value from that item, equal if it changes or not. Better use everyChange to keep datafiles small.

rrd4j NEEDS this strategy, additional readings should be of no problem for the database. What is causing the problem is IMHO a race condition when two strategies trigger at the same time.

Interesting! Before changed to Jdbc-mysql I had rdd4j running with only everyMinute and it worked fine :wink:

After several days of running, I am getting good results, with no errors thrown using the following strategy:

* : strategy = everyChange, everyMinute, everyHour

can’t confirm that, i run InfluxDB and i have the same RRD4J Errors without using it.