Ankündigung

Einklappen
Keine Ankündigung bisher.

- √ - DatabaseClosedException nach Server-Reset

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    - √ - DatabaseClosedException nach Server-Reset

    Nachdem meinen Server resetten musste auf dem die OpenHAB-Runtime lief, habe ich nach deren Neustart sehr viele DatabaseClosedExceptions im log
    Code:
    com.db4o.ext.DatabaseClosedException: null
            at com.db4o.internal.ObjectContainerBase.checkClosed(ObjectContainerBase.java:303)
            at com.db4o.internal.ObjectContainerBase.checkTransaction(ObjectContainerBase.java:331)
            at com.db4o.internal.ObjectContainerBase.rollback(ObjectContainerBase.java:1559)
            at com.db4o.internal.ExternalObjectContainer.rollback(ExternalObjectContainer.java:119)
            at org.openhab.persistence.db4o.internal.Db4oPersistenceService.store(Db4oPersistenceService.java:139)
            at org.openhab.core.persistence.internal.PersistenceManager.handleStateEvent(PersistenceManager.java:235)
            at org.openhab.core.persistence.internal.PersistenceManager.stateChanged(PersistenceManager.java:215)
            at org.openhab.core.items.GenericItem.notifyListeners(GenericItem.java:133)
            at org.openhab.core.items.GenericItem.setState(GenericItem.java:120)
            at org.openhab.core.internal.items.ItemUpdater.receiveUpdate(ItemUpdater.java:73)
            at org.openhab.core.events.AbstractEventSubscriber.handleEvent(AbstractEventSubscriber.java:58)
    Ich bekomme seitdem auch beim Aufruf der Web-Oberfläche die Meldung:
    Sitemap 'home' could not be found
    Keine Ahnung ob das damit zusammenhängt.

    Das ganze passirt mir übrigens auch, wenn ich die runtime mit kill <pid> stoppe (was ist eigentlich der korrekte Weg, um die runtime zu beenden?)

    Ich hatte das nun schon mehrmals und die einzige Möglichkeit das Problem zu lösen war bisher Datenbank zu löschen (store.db4o) und neu zu starten. Aber das kann ja nicht die Lösung.

    Gruß
    Tobias
    Gruß
    Tobias

    #2
    Zitat von peuter Beitrag anzeigen
    Das ganze passirt mir übrigens auch, wenn ich die runtime mit kill <pid> stoppe (was ist eigentlich der korrekte Weg, um die runtime zu beenden?)
    Ja, das ist schon korrekt, die Runtime so zu beenden.

    Zitat von peuter Beitrag anzeigen
    Ich hatte das nun schon mehrmals und die einzige Möglichkeit das Problem zu lösen war bisher Datenbank zu löschen (store.db4o) und neu zu starten. Aber das kann ja nicht die Lösung.
    Das klingt mir nicht danach, dass hier die Runtime sauber beendet wurde. Wenn sie irgendwie abgeschossen wird während Daten in db4o geschrieben werden, kann es vorkommen, dass das Datenbankfile korrupt wird.
    Thomas hat dafür die automatischen Backups eingeführt, um zumindest eine ältere konsistente Datei zurückspielen zu können und somit nicht alle Daten zu verlieren.

    Grüße,
    Kai

    Kommentar


      #3
      Ich habe die runtime nun schon auf allen erdenklichen Wegen beendet, das Problem tritt nach dem Neustart in 99% der Fälle auf. Das einspielen einer gesicherten Datenbank-Datei hilft nicht. Ich vermute hier eher, dass die Datenbank garnicht geladen wird.

      Zuerst tritt immer folgende Exception auf:

      Code:
      17:40:35.112 ERROR OSGi[:98]- JDKField org.openhab.core.types.State:state
      com.db4o.ext.Db4oException: JDKField org.openhab.core.types.State:state
              at com.db4o.reflect.jdk.JdkField.handleException(JdkField.java:82)
              at com.db4o.reflect.jdk.JdkField.set(JdkField.java:64)
              at com.db4o.internal.reflect.StrictFieldAccessor.set(StrictFieldAccessor.java:17)
              at com.db4o.internal.FieldMetadata.set(FieldMetadata.java:830)
              at com.db4o.internal.FieldMetadata.activate(FieldMetadata.java:641)
              at com.db4o.internal.handlers.StandardReferenceTypeHandler$2.processAspect(StandardReferenceTypeHandler.java:92)
              at com.db4o.internal.metadata.MarshallingInfoTraverseAspectCommand.processAspect(MarshallingInfoTraverseAspectCommand.java:52)
              at com.db4o.internal.metadata.StandardAspectTraversalStrategy.traverseAllAspects(StandardAspectTraversalStrategy.java:24)
              at com.db4o.internal.ClassMetadata.traverseAllAspects(ClassMetadata.java:2083)
              at com.db4o.internal.handlers.StandardReferenceTypeHandler.traverseAllAspects(StandardReferenceTypeHandler.java:257)
              at com.db4o.internal.handlers.StandardReferenceTypeHandler.activateAspects(StandardReferenceTypeHandler.java:95)
              at com.db4o.internal.handlers.StandardReferenceTypeHandler.activate(StandardReferenceTypeHandler.java:118)
              at com.db4o.internal.Handlers4.activate(Handlers4.java:300)
              at com.db4o.internal.ClassMetadata.instantiateFields(ClassMetadata.java:1317)
              at com.db4o.internal.ClassMetadata.activate(ClassMetadata.java:1251)
              at com.db4o.internal.ClassMetadata.instantiate(ClassMetadata.java:1199)
              at com.db4o.internal.marshall.UnmarshallingContext.read(UnmarshallingContext.java:70)
              at com.db4o.internal.ObjectReference.read(ObjectReference.java:306)
              at com.db4o.internal.ObjectReference.read(ObjectReference.java:292)
              at com.db4o.internal.ObjectContainerBase$8.apply(ObjectContainerBase.java:897)
              at com.db4o.internal.ObjectContainerBase$8.apply(ObjectContainerBase.java:895)
              at com.db4o.internal.ObjectContainerBase.asTopLevelCall(ObjectContainerBase.java:427)
              at com.db4o.internal.ObjectContainerBase.readActivatedObjectNotInCache(ObjectContainerBase.java:895)
              at com.db4o.internal.query.result.AbstractQueryResult.activatedObject(AbstractQueryResult.java:34)
              at com.db4o.internal.query.result.IdListQueryResult.get(IdListQueryResult.java:40)
              at com.db4o.internal.query.result.StatefulQueryResult.get(StatefulQueryResult.java:24)
              at com.db4o.internal.query.ObjectSetFacade.get(ObjectSetFacade.java:83)
              at java.util.AbstractList$Itr.next(AbstractList.java:358)
              at java.util.SubList$1.next(AbstractList.java:707)
              at org.openhab.core.persistence.internal.PersistenceManager.initialize(PersistenceManager.java:379)
              at org.openhab.core.persistence.internal.PersistenceManager.startEventHandling(PersistenceManager.java:196)
              at org.openhab.core.persistence.internal.PersistenceManager.modelChanged(PersistenceManager.java:179)
              at org.openhab.model.core.internal.ModelRepositoryImpl.notifyListeners(ModelRepositoryImpl.java:171)
              at org.openhab.model.core.internal.ModelRepositoryImpl.addOrRefreshModel(ModelRepositoryImpl.java:98)
              at org.openhab.model.core.internal.folder.FolderObserver.checkFolder(FolderObserver.java:162)
              at org.openhab.model.core.internal.folder.FolderObserver.updated(FolderObserver.java:221)
              at org.eclipse.equinox.internal.cm.ManagedServiceTracker$1.run(ManagedServiceTracker.java:183)
              at org.eclipse.equinox.internal.cm.SerializedTaskQueue$1.run(SerializedTaskQueue.java:36)
      Caused by: java.lang.IllegalArgumentException: Can not set org.openhab.core.types.State field org.openhab.persistence.db4o.internal.Db4oItem.state to com.db4o.reflect.generic.GenericObject
              at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:164)
              at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:168)
              at sun.reflect.UnsafeObjectFieldAccessorImpl.set(UnsafeObjectFieldAccessorImpl.java:81)
              at java.lang.reflect.Field.set(Field.java:680)
              at com.db4o.reflect.jdk.JdkField.set(JdkField.java:62)
              ... 36 common frames omitted
      Danach gesellt sich noch etliche DatabaseClosedExceptions dazu, was ja schon zeigt, dass die Datenbank garnicht geöffnet wird.

      Dazu kommt noch, dass dann auch die Weboberfläche nicht funktioniert. Hier scheinen also einige Dinge nicht korrekt geladen zu werden.
      Gruß
      Tobias

      Kommentar


        #4
        Nach meiner Analyse im Web (z.B. com.db4o.reflect.generic.GenericObject - Versant Developer Community - Forums - Customer Forums - db4o) muss es daran liegen, dass irgendetwas auf dem Classpath fehlt. Da es bei mir und anderen problemlos funktioniert, nehme ich an, dass Du wohl andere Itemtypen persistierst (d.h. irgendwelche States hast, die ungewöhnlich sind - nutzt Du evtl. das CallItem?).
        Könntest Du das mal checken? Wäre interessant, ob sich das Problem beheben lässt, wenn Du testweise z.B. nur mal ein paar Number Items persistierst.

        Grüße,
        Kai

        Kommentar


          #5
          Zitat von kkreuzer Beitrag anzeigen
          Da es bei mir und anderen problemlos funktioniert, nehme ich an, dass Du wohl andere Itemtypen persistierst (d.h. irgendwelche States hast, die ungewöhnlich sind - nutzt Du evtl. das CallItem?).
          Danke, das war der entscheidende Hinweis. Ich habe mir jetzt eine Group "Persist" angelegt und dort alle Elemente eingefügt bis auf das CallItem.
          Habe danach zweimal neu gestartet und bisher ist alles ok.

          Da ich einfach nur die vorgegebene Regel in der db4o.persist auskommentiert habe, um alle Items zu persistieren, wäre an dieser Stelle vielleicht ein Hinweis nicht schlecht, dass man z.B. das CallItem nicht persistieren sollte. Sonst bin ich bestimmt nicht der letzte, der dieses Problem haben wirs.

          Gruß
          Tobias
          Gruß
          Tobias

          Kommentar


            #6
            Haha, nein, einen Hinweis, dass man keine CallItems persistieren darf, sollte es nicht geben - stattdessen muss ich den Bug beheben, so dass es geht!

            Danke Dir fürs Testen. Freut mich, dass Dein Problem jetzt erstmal umgangen ist!

            Viele Grüße,
            Kai

            Kommentar

            Lädt...
            X