Autor Thema: Speicherkonflikt tritt immer wieder auf  (Gelesen 8061 mal)

Offline Christian Kröll

  • Aktives Mitglied
  • ***
  • Beiträge: 197
  • Geschlecht: Männlich
Speicherkonflikt tritt immer wieder auf
« am: 12.05.11 - 16:19:50 »
Hallo atnotes-Gemeinde,

seit Tagen lässt mir folgendes Problem keine Ruhe, dass ich wegen der vielen vergeblichen Lösungsversuche ausführlicher beschreiben muß:

In einem Stammblatt liegen zentral Informationen zu einem Auftragsvorgang von der ersten 1. Anfrage bis zur Schlußrechnung.
Die Mitarbeiter können über Schalter gut 40 verschiedene Aktionen ausführen (Freigaben, Bestellungen auslösen, Proforma-Rechnungen erstellen usw.)

Seitdem wir diese Maske eingeführt haben, sorgt sie permanent für Replikations- und Speicherkonflikte:

- Eine gleichzeitige Bearbeitung von mehreren Mitarbeitern gibt es nicht und
- es greifen keine Agenten auf diese Dokumente zu oder werden von Benutzern ausgelöst.
- Die Maske enthält keine berechneten Felder, kein DBPath-Feld o.ä.
- kein "Felder aktualisieren" (Maskeneigenschaften)
- Im QuerySave wird nur für den Fall, dass im Projektverlauf aus einem Interessenten eine Kunde mit entspr. Kundennummer wurde, die neue Kundennummer gezogen und gespeichert. Bei 95% der Speicherkonflikte war die Kundennummer bereits bei der Anlage vorhanden und daher die QuerySave ohne weitere Aktion beendet.
- Es gibt nur drei Eingabefelder und der Konflikt entsteht unabhängig, ob hier etwas geändert wurde oder nicht.

Die Datenbank ist mit einem zweiten Server in einem Cluster und die Maskeneinstellung für Replikationskonflikte steht auf "Mischen/Keine Konflikte". Allerdings arbeitete niemand auf dem zweiten Cluster-Server. Natürlich dort auch keine Agenten etc. Lokale Repliken gibt es nicht.

Die Speicherkonflikte kann ich beliebig auslösen, wenn man zB. nur den Status des Projektes verändert oder sich als Bearbeiter einträgt.

Konkretes Beispiel: die Mitarbeiter können sich als Bearbeiter eintragen (Aktion)
1. Versuch (Formel)
   @Command([EditDocument];"1");
   FIELD Bearbeiter := @Name([CN];@UserName);
   @PostedCommand([FileSave]);
   @PostedCommand([EditDocument];@False);

2. Versuch Script: (egal, ob mit oder ohne speichern)
   Dim ws As NotesUIWorkspace
   Dim s As New NotesSession
   Dim uidoc As NotesUIDocument
   Set ws = New NotesUIWorkspace
   Set uidoc = ws.CurrentDocument
   If uidoc.EditMode=False Then uidoc.EditMode=True
   Call uidoc.FieldSetText("Bearbeiter",s.CommonUserName)

3. Versuch mit Script:
ID des Backenddokuments holen, im Frontend ändern, speichern, schließen, Frontend Objekt löschen (mit Delete uidoc bzw. Delete doc) und als neues NotesDocument zum bearbeiten öffnen (hier im Forumzweimal erwähnt, den Code muß ich hier nicht wiederholen)

4. Versuch mit Script (mit uidoc.Reload)
   Dim ws As New NotesUIWorkspace
   Dim s As New NotesSession
   Dim doc As NotesDocument   
   Dim uidoc As NotesUIDocument
   Set uidoc = ws.CurrentDocument
   Set doc = uidoc.document
   uidoc.EditMode = True
   Call doc.ReplaceItemValue("Bearbeiter",s.CommonUserName)
   call uidoc.reload
   Call uidoc.save
   uidoc.EditMode = False

Also ich bin jetzt wirklich ratlos. Es ist gleich, ob der Code in einer Aktion oder einer Schaltfläche steckt. Selbst der Gedanke, die Maske hat einen Schuß weg brachte nichts. Auch in der neuen Maske gleiches Ergebnis...
« Letzte Änderung: 13.05.11 - 11:33:28 von Christian Kröll »
Christian Kröll

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Speicherkonflikt tritt immer wieder auf
« Antwort #1 am: 12.05.11 - 16:26:42 »
Kannst Du die Maske mal soweit verkleinern, dass das Problem noch auftritt, aber keine Betriebsgeheimnisse verraten werden, und dann hier posten? Das würde ich gerne mal nachstellen

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Speicherkonflikt tritt immer wieder auf
« Antwort #2 am: 12.05.11 - 16:29:01 »
Warum machst Du diese Änderungen immer im Frontend?
Wenn es dann kracht, liegt nahe, dass beim Frontend-Speichern (oder gar schon beim Öffnen?) ein weiterer Prozess (Event?) läuft.

Bernhard
« Letzte Änderung: 12.05.11 - 16:40:46 von koehlerbv »

Offline Christian Kröll

  • Aktives Mitglied
  • ***
  • Beiträge: 197
  • Geschlecht: Männlich
Re: Speicherkonflikt tritt immer wieder auf
« Antwort #3 am: 12.05.11 - 16:37:51 »
aber klar - ich hoffe die rausgelöste Datenbank hilft.
Das Dokument 1 ist so ein Stammblatt
Christian Kröll

Offline Christian Kröll

  • Aktives Mitglied
  • ***
  • Beiträge: 197
  • Geschlecht: Männlich
Re: Speicherkonflikt tritt immer wieder auf
« Antwort #4 am: 12.05.11 - 16:41:10 »
Hallo Bernhard,

gerade um zu vermeiden, dass die Mitarbeiter die wenigen Felder im Frontend ändern und dann im Backend vielleicht den Status des Projekts verändern. Das rumpelt doch unter Garantie ?!
Christian Kröll

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Speicherkonflikt tritt immer wieder auf
« Antwort #5 am: 12.05.11 - 16:45:31 »
Die Datenbank hat lokalen Zugriffsschutz

Offline Christian Kröll

  • Aktives Mitglied
  • ***
  • Beiträge: 197
  • Geschlecht: Männlich
Re: Speicherkonflikt tritt immer wieder auf
« Antwort #6 am: 12.05.11 - 16:50:10 »
sorry - ich lerne ;-)
Christian Kröll

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Speicherkonflikt tritt immer wieder auf
« Antwort #7 am: 12.05.11 - 16:54:10 »
Offensichtlich nicht  ;D

Das Teil ist immer noch verschlüsselt!

Bernhard

Offline Christian Kröll

  • Aktives Mitglied
  • ***
  • Beiträge: 197
  • Geschlecht: Männlich
Re: Speicherkonflikt tritt immer wieder auf
« Antwort #8 am: 12.05.11 - 16:59:49 »
Verschlüsselung vs. Zugriffskontrolle.... ja!
Christian Kröll

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Speicherkonflikt tritt immer wieder auf
« Antwort #9 am: 12.05.11 - 17:11:07 »
Hm, also ich kann da Knöpfe drücken, wie ich will. Einen Replizierkonflikt bekomme ich nicht.

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Speicherkonflikt tritt immer wieder auf
« Antwort #10 am: 12.05.11 - 17:12:14 »
Wie erwartet: Es ist das QuerySave. Überlege Dir da einfach Zeile für Zeile (und im Gesamtkontext), was für einen extremen Murks Du da programmiert hast.

Schmeiss das wertlose Zeug einfach weg. Mach es neu. Und dabei sind wir sehr gerne behilflich!

Bernhard

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Speicherkonflikt tritt immer wieder auf
« Antwort #11 am: 12.05.11 - 17:32:00 »
Hm, also ich kann da Knöpfe drücken, wie ich will. Einen Replizierkonflikt bekomme ich nicht.

Klar - die Bedingungen im QuerySave schlagen ja in dem Textkontext nicht zu, Peter.

Bernhard

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Speicherkonflikt tritt immer wieder auf
« Antwort #12 am: 12.05.11 - 17:39:36 »
@Bernhard: nun, ich dachte, ich erlebe erst einmal das Problem, und dann schaue ich tiefer.

@Christian:

1. Du speicherst im Querysave das Dokument separat im Backend, das muss krachen. Wozu machst Du das, das Dokument wird doch sowieso gerade gespeichert?
2. Im Querysave musst Du nicht prüfen, ob das Dokument im Edit-Modus ist. Im Lese-Modus wird das Querysave nicht ausgeführt (das führt allerdings nicht zu Deinem Fehler, macht das ganze nur nicht gerade leserlicher)

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Speicherkonflikt tritt immer wieder auf
« Antwort #13 am: 12.05.11 - 17:45:55 »
Christian, wenn eine Diskussion in einem AtNotes-Board am Laufen ist, führe ich keine zweite per PM.

Ich kann Dir nur empfehlen: Wird den Murks aus QuerySave 'raus. Beschreibe (Dir oder uns) genaz genau, was Du erreichen willst. Vergiss dabei QuerySave - es gibt ja noch andere Wege, sein Ziel zu erreichen. Dewnke immer an den Konflikt zwischen Frontend und Backend.

Bei genauer Überlegung wird Dir sicherlich selber ein Licht aufgehen. Und bei Fragen stehen wir wirklich gerne mit Rat zur Seite!

Bernhard

Offline Christian Kröll

  • Aktives Mitglied
  • ***
  • Beiträge: 197
  • Geschlecht: Männlich
Re: Speicherkonflikt tritt immer wieder auf
« Antwort #14 am: 12.05.11 - 18:34:14 »
Ihr habt Recht - vielleicht aber auch etwas übersehen:

Das QuerySave kommt nicht bis zur Zeile
    flag = doc.Save(False, False)
Selbst wenn, vorher wurde doch mit
   Set doc = view.GetDocumentByKey("System")
ein völlig neues Dokument gerufen und auch gespeichert, falls nötig.

Mitarbeiter im Vertrieb erstellen eine Anfrage mit einem eigenen Notes-Dokument. Wenn die gespeichert wird, erzeuge ich im Hintergrund das fragliche Stammblatt und vergebe die Nummer ("FDJobNr"). Daher läuft der Code auch immer in das Exit Sub.

Es gab die Situation, dass Mitarbeiter mal ein Stammblatt gelöscht haben. Um es schnell neu anlegen zu können, habe ich die Nummernvergabe hier überhaupt aufgenommen.

Zur Klarheit wäre ein neuer Bezeichner leichter zu lesen.

Habe nun das QuerySave trotzdem mal komplett geändert auf vier Zeilen:
   If Source.FieldGetText("CustomerNr") = "" Then
      Msgbox "Bitte Kundennummer eintragen"
      continue = False
   End If
Damit mache ich wohl nichts falsch?

Effekt: Weiterhin Speicherkonflikt...

Ich bin weiterhin wirklich sehr dankbar für Eure Hilfe und jede Anregung.
Christian Kröll

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Speicherkonflikt tritt immer wieder auf
« Antwort #15 am: 12.05.11 - 18:45:26 »
Schreib doch mal, wie ich den Konflikt reproduzieren kann, dann setze ich mich morgen da mal ran

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Speicherkonflikt tritt immer wieder auf
« Antwort #16 am: 12.05.11 - 20:53:08 »
Diese vier Zeilen erzeugen nie und nimmer einen Speicherkonflikt. Da muss noch ein weiterer Prozess laufen.

Wenn Du - wie Peter schon schrieb - eine Version hinbekommst, mit dem wir das nachvollziehen können, dann ist auch der Fehler schnell gefunden. Aber eigentlich müsstest Du das auch selbst mit dem Debugger hinbekommen.

Bernhard

Offline Christian Kröll

  • Aktives Mitglied
  • ***
  • Beiträge: 197
  • Geschlecht: Männlich
Re: Speicherkonflikt tritt immer wieder auf
« Antwort #17 am: 12.05.11 - 21:29:27 »
Ich versuche Euch morgen eine DB zu posten, mit der Ihr den Effekt nachvollziehen könnt - sitze gerade dran.
Falls nicht: Das Oktoberfest kommt ja irgendwann  ;)
Christian Kröll

Offline Christian Kröll

  • Aktives Mitglied
  • ***
  • Beiträge: 197
  • Geschlecht: Männlich
Re: Speicherkonflikt tritt immer wieder auf
« Antwort #18 am: 13.05.11 - 11:25:04 »
wie eigentlich schon vor dem Post meines Problems geprüft, am Code liegt es nicht:
Das Setzen der Werte ist richtig und das QuerySave Event war keine Beauty (Danke für das deutliche Draufstossen, Bernhard), läuft aber auch wie gewünscht. Im Debugger waren nie weitere Prozesse zu sehen.

Beim vergeblichen Versuch, Euch lokal eine Db zu erstellen, die auch den Konflikt bringt, kam mir der Gedanke, dass doch vielleicht im Cluster ein Bug sein könnte. Wie Bernhard sagte, alles Stop und auf Anfang (allerdings im QuerySave...)
Agenten und Programme laufen dort keine, also nochmals zum IBM-Support. Dortbin ich bei auf APAR LO52374 gestossen (https://www-304.ibm.com/support/docview.wss?uid=swg1LO52374 bzw. https://www-304.ibm.com/support/docview.wss?uid=swg21444933).

Zusammenfassung:
Mehrfach gespeicherte Dokumente in einer geclusterten Anwendung sind mit der Maskeneigenschaft "Konflikte erstellen" erstellt worden, also kein $ConflictActions-Feld. Später wurde die Eigenschaft auf "Mischen/Keine Konflikte" geändert. Wenn nun das Dokument erneut gespeichert wird, dann wird das Feld $ConflictAction="3" erstellt. Das führt dann aber zu einem Replikationskonflikt im Cluster.

Lösung ist simpel: Replikation stoppen, Design auf beiden Repliken ändern und das Feld $ConflictActions ersetllen/auf "3" ändern, Replikation starten.

Hier in meinem Fall: Das Stammblatt, dass hier zum Konflikt führt, wird beim Speichern eines anderen Dokuments im Hintergrund erstellt und mit Daten gefüllt. Auch spätere Änderungen laufen im Hintergrund in das Stammblatt. Erst wenn die Mitarbeiter direkt mit dem Stammblatt arbeiten und speichern, wird das $ConflictAction erstellt. Dann macht's natürlich "Puff".
Das sieht dann leider so aus, als hätte man einen Speicher- und keinen Replikationskonflikt.


Diesen Thread können wir bitte schließen. Bernhard und Peter - Euch vielen Dank!


Christian Kröll

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Speicherkonflikt tritt immer wieder auf
« Antwort #19 am: 13.05.11 - 11:28:29 »
Faszinierend - da muss man erstmal drauf kommen! Respekt!

Bernhard

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz