Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fehler beim Speichern von Mitgliedern #208

Open
JohannMaierhofer opened this issue Apr 12, 2024 · 12 comments
Open

Fehler beim Speichern von Mitgliedern #208

JohannMaierhofer opened this issue Apr 12, 2024 · 12 comments
Labels
bug Something isn't working

Comments

@JohannMaierhofer
Copy link

JohannMaierhofer commented Apr 12, 2024

Hallo Jungs, ich habe ein Problem, kann es aber nicht selbst lösen.
Ich bekomme einen Fehler wenn ich Mitglieder speichern will deren ID im Bereich 1 .. 13 (evtl. 14 aber die kommt nicht vor bei mir) ist. Ich habe externe Mitgliedsnummer aktiv, sie entsprechen aber der original ID.
Es sind zwei Einträge in der Eigenschaften Tabelle.
Screenshot_20240412_112608

Es passiert an dieser Stelle beim while Zeile 3400 in MitgliedControl.java:
DBIterator it = Einstellungen.getDBService()
.createList(Eigenschaften.class);
it.addFilter("mitglied = ?", new Object[] { getMitglied().getID() });
while (it.hasNext())
Es kommen dann folgende Meldungen wobei die Row Nummer unterschiedlich ist je nach ID:
[Fri Apr 12 10:21:14 CEST 2024][ERROR][main][de.jost_net.JVerein.gui.control.MitgliedControl.handleStore] Fehler bei Speichern des Mitgliedes
java.rmi.RemoteException: unable to init iterator. statement: prep8789: select EIGENSCHAFTEN.* from EIGENSCHAFTEN where mitglied = ? {1: '13'}; nested exception is:
org.h2.jdbc.JdbcSQLTimeoutException: Zeitüberschreitung beim Versuch die Tabelle {0} zu sperren
Timeout trying to lock table {0}; SQL statement:
select EIGENSCHAFTEN.* from EIGENSCHAFTEN where mitglied = ? [50200-199]

weiter unten:
Caused by: org.h2.jdbc.JdbcSQLTransientException: Row "72" not found in primary index "PUBLIC.EIGENSCHAFTEN_DATA" [90143-199]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:621)
at org.h2.message.DbException.getJdbcSQLException(DbException.java:427)

@JohannMaierhofer
Copy link
Author

Ich habe jetzt eine neue Datenbank aufgesetzt. Da kann ich ein Mitglied mit ID 1 erzeugen und speichern.
Evtl. ist da etwas mit meiner Datenbank nicht in Ordnung.
Allerdings passiert es auch bei meinen beiden Produktiv Systemen. Beim einen nur bis ID 7.

@JohannMaierhofer
Copy link
Author

Es waren korrupte Datenbanken. Ich habe jetzt mit Recover die Datenbanken korrigiert.
Meine Frage wäre aber trotzdem warum alle meine Datenbanken an dieser Stelle bzw. der Eigenschaften Tabelle korrupt waren. Kann es an einem Programierfehler liegen?

Gibt es noch andere Nutzer die Eigenschaften definiert haben und evtl. auch wieder welche gelöscht haben, die ein ähnliches Problem haben.
Der Test ist einfach, einfach ein Mitglied mit ID 1 öffnen und auf Speichern drücken.

Jedenfalls habe ich ein ungutes Gefühl wenn die Datenbank korrupt wird.

@dippeal
Copy link
Member

dippeal commented Apr 13, 2024

Kannst ja mal prüfen, ob beim Löschen von Eigenschaften die Eigenschaften auch aufgelöst werden bei den Mitgliedern.

@JohannMaierhofer
Copy link
Author

Man kann eine Eigenschaft nicht löschen wenn sie von einem Mitglied belegt ist, das wird im Code abgefangen.
Löscht man ein Mitglied, werden die referenzierten Eigenschaften des Mitglieds von der DB selbst gelöscht.
Außer Mitglied und Eigenschaft gibt es keine Verweise auf die Tabelle.
Das seltsame ist ja, dass das Speichern bei größeren Mitglieder IDs funktioniert.

Auch kann man die Eigenschaften der problematischen Mitglieder anzeigen. Da passiert allerdings folgendes Query:
it2.addFilter("mitglied = ? AND eigenschaft = ?", new Object[] { mitglied.getID(), eigenschaft.getID() });
Also hier wird nach mitglied und eigenschaft gefiltert. Beim Speichern nur nach mitglied.

@JohannMaierhofer
Copy link
Author

Jetzt bin ich einen Schritt weiter.
Ich habe ein komplettes Backup inkl. der Plugins welches auf dem Stand vom alten JVerein 2.8.18 war. Damit konnte ich die Mitglieder z.B. mit ID 1 öffnen und speichern.
Ich habe dann JVerein 2.8.18 deinstalliert und das neue Open JVerein Repository eingetragen. Danach die Version 2.8.21 aus dem Repository installiert. Anschließend habe ich das Mitglied mit der ID 1 geöffnet und versucht zu speichern. Aber nun tritt genau der gleiche Fehler wieder auf.
Also muss das Problem bei der Migration von 2.8.18 auf 2.8.21 entstanden sein.
Es sind allerdings in der Datenbank keine Eigenschaften definiert. Die Eigenschaftentabelle muss also leer sein.

@JohannMaierhofer
Copy link
Author

JohannMaierhofer commented Apr 16, 2024

Jetzt habe ich wieder das alte Backup genommen und Open JVerein Version 2.8.20 manuell installiert.
Damit tritt das Problem noch nicht auf.
Anschließend habe ich 2.8.21 manuell installiert und jetzt ist der Fehler wieder da. Also ist die Migration von 2.8.20 auf 2.8.21 das Problem und es ist mit meiner Datenbank auch reproduzierbar.

@JohannMaierhofer
Copy link
Author

JohannMaierhofer commented Apr 16, 2024

Ich habe es weiter eingegrenzt. Es passiert bei "Feature gegenbuchung (#138)" mit Update0430.
Allerdings verstehe ich nicht wo hier ein Bezug zu Eigenschaften oder Mitglied besteht.

In Update0430 sollte statt null ein "NULL" stehen sonst wird der Defaultwert nicht gesetzt. Das ist aber nicht das Problem. Auch mit "NULL" tritt der Fehler auf.

@JohannMaierhofer
Copy link
Author

Ich habe jetzt in einem Branch nur das Update0430.java (einmal mit null und einmal mit "NULL") eingefügt ohne den restlichen Code des Features.
Auch dann tritt der Fehler auf, aber was sollte in der Migration falsch sein?
Ich benutze die h2db!

@JohannMaierhofer
Copy link
Author

Jetzt habe ich eine Entdeckung gemacht.
In meiner Konto Tabelle sind 13 Konten eingetragen. Genau bei den Mitgliedern mit den IDs 1..13 tritt das Problem beim Query der Eigenschaften Tabelle auf.
Bei meinem zweiten Verein habe ich 7 Konten, wie oben erwähnt hatte ich da das Problem bei den IDs 1..7.

@JohannMaierhofer
Copy link
Author

JohannMaierhofer commented Apr 17, 2024

Ich habe jetzt einmal eine neue Datenbank mit 2.8.20 erzeugt und Mitglieder und Konten eingegeben. Dann auf 2.8.21 migriert. Es tritt der Fehler nicht auf. Es ist also wohl kein generelles Problem.
Es wird also an meinen Datenbanken liegen. Sie wurden im Jahr 2018 erzeugt. Da ich sie korrigieren konnte hoffe ich mal, dass sich das Problem für mich gelöst hat.
Sollte noch jemand das gleiche Problem haben kann er mit den Befehlen unten die Datenbank korrigieren. Die Befehle sind für Linux. Man muss den Pfad zum jar file anpassen. Für Windows wohl mv durch move ersetzen und / durch \. Geht alles gut kann man den old Ordner löschen.

java -cp /opt/jameica/lib/h2/h2*.jar org.h2.tools.Recover
mkdir old
mv jverein.mv.db old
mv jverein.trace.db old
java -cp /opt/jameica/lib/h2/h2*.jar org.h2.tools.RunScript -url jdbc:h2:./jverein -user sa -script jverein.h2.sql
rm jverein.h2.sql

@EisW
Copy link

EisW commented Apr 25, 2024

Ich hatte einen ähnlichen Fehler mit Version 2.8.21 von JVerein:

  • Neuanlegen von Mitgliedern funktionierte
  • in den neuen was ändern auch
  • bestehende Mitglieder konnten nicht mehr verändert werden. Sollbuchung im Betrag ändern hat geklappt, aber namentlich eine Kündigung eintragen nicht (sinngemäß: Fehler im Primärschlüssel, habe keinen Screenshot gemacht, könnte ich bei Bedarf sicher aus einem Backup erzeugen)

Aber letztlich: Danke für das Posten der Recovery-Prozedur, die hat mir geholfen -> jetzt geht wieder alles, kein generelles Problem, auch hier wohl die Ursache in der DB-Migration ...

@JohannMaierhofer
Copy link
Author

JohannMaierhofer commented Apr 28, 2024

Ich habe jetzt etwas gefunden.
In der Tabelle Konto habe ich die Spalte buchungsart hinzugefügt. Das wäre aber ein Foreign Key in die Buchungsart Tabelle. Diese Definition fehlt in Update0430.
Nach Update der Migration hat sich das Problem nicht gelöst.

@dippeal dippeal added the bug Something isn't working label May 4, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

3 participants