Benutzer-Werkzeuge

Webseiten-Werkzeuge


engine:procedures:mi_deadlocktest_ad

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

engine:procedures:mi_deadlocktest_ad [11.01.2016 ] (aktuell)
Zeile 1: Zeile 1:
 +===== mi_DeadlockTest_Ad =====
 +
 +Eine Prozedur, mit der eine Client-Applikation (ein "​SmartGate"​) testen kann, wie ihre API "​deadlock"​-Situationen behandelt\\ (welcher Fehler-Code wird zurückgegeben etc.). Im allgemeinen ist im laufenden Betrieb ein "​deadlock"​ nur schwer SICHER zu\\ provozieren (falls doch, haben wir in der Engine ein Problem...),​ mit Hilfe dieser Prozedur schafft man es aber ganz bewußt\\ IMMER (wenn der Test richtig durchgeführt wird, s.u.).\\ ​
 +
 +Da für einen "​deadlock"​ mindestens zwei konkurrierende Prozesse nötig sind, ist zur Durchführung des Tests diese Prozedur hier von (mindestens) zwei UNTERSCHIEDLICHEN Prozessen aufzurufen. Den Umstand, daß die Aufrufzeitpunkte natürlich schwerlich EXAKT gleichzeitig erfolgen können (was die "​deadlock-Reproduzierbarkeit"​ ja so schwer macht), berücksichtigt diese Prozedur natürlich. Allerdings dürfen für einen erfolgreichen Test die Aufrufzeitpunkte maximal 10 Sekunden auseinander liegen !\\ Liegen die zwei (oder mehr) Aufrufzeitpunkte von [[dstoreproc>​mi_DeadlockTest_Ad]] innerhalb der genannten Toleranz, erhält man garantiert\\ bei allen außer einem der beteiligten Prozesse einen "​deadlock"​ !\\ 
 +
 +Die Funktionsweise ist recht simpel und läßt sich kurz so beschreiben : In einer Tabelle mit dem sinnigen Namen "​DeadlockTest"​ wird beim Aufruf der Prozedur die "​ServerProcessID registriert"​ und anschließend maximal 10 Sekunden lang gewartet, bis sich mindestens ein anderer Prozess "​registriert"​. Dann wird eine Transaktion gestartet und ein (lesender) "​lock"​ auf der Tabelle "​DeadlockTest"​ verursacht, der für 2 Sekunden gehalten wird, um zu garantieren,​ daß vor dem nun folgenden Schritt alle Prozesse, die [[dstoreproc>​mi_DeadlockTest_Ad]] gerade ausführen, einen "​lock"​ auf die besagte Tabelle halten. Danach wird schließlich ein "​UPDATE"​ auf der Tabelle "​DeadlockTest"​ versucht - was nur einem Prozeß gelingen kann, wogegen die anderen unweigerlich "​deadlock"​en müssen !\\ 
 +|HTTP-Method|POST |
 +|HTTP-Auth|Optional |
 +|Tags|{{tag>​[mi Deadlock Test Ad]}}|
 +|Engine-Kategorie|miscellaneous |
 +|Engine-Typ|Daten-Änderung |
 +|Letzte Aktualisierung|7.0.7 (2015-01-29)|
 +
 +==== Parameter ====
 +
 +Die Prozedur hat keine Parameter.
 +==== Rückgabe ====
 +
 +Die Prozedur hat keine Rückgaben.
 +==== Output-Parameter ====
 +
 +Die Prozedur hat keine Output-Parameter.==== Mögliche Return-Codes ====
 +
 +^Code ^Beschreibung ^Quelle ((direkt meint "von der Prozedur selber"​ und indirekt meint "von intern aufgerufenen Unterprozeduren"​)) ^
 +|-569|Der Benutzer hat kein Ausführungsrecht für die Prozedur|nur indirekt|
 +|-567|Die Prozedur darf z. Zt. nicht ausgeführt werden|nur indirekt|
 +|-566|Die Prozedur darf mit den übergebenen Parametern nicht ausgeführt werden|nur indirekt|
 +|-535|Das Datum liegt nicht in der Vergangenheit|nur indirekt|
 +|-530|Der Wert ist nicht konvertierbar|nur indirekt|
 +|-510|Der Benutzer ist nicht registriert|nur indirekt|
 +|-504|Es ist ein Problem aufgetreten,​ das nicht gelöst werden kann, Prozedur wird daher abgebrochen|direkt und indirekt|
 +|-500|Falsche Parameter|nur indirekt|
 +==== XML-Schema ====
 +
 +Die Rückgabe erfolgt als XML-Dokument welches gegen das Schema [[http://​resources.dstore.de/​xsd/​webservice_SmartGate/​Response/​EngineProcedure_v1_0.xsd|Response/​EngineProcedure_v1_0.xsd]] validiert.
 +==== Historie ====
 +
 +|7.0.7 |2015-01-29|Interne Änderung : Datentyp-Erweiterung des "​ReferenceKey"​ [für "​_mi_StartProcedure"​-Aufruf]\\ ​ |
 +|6.0.2 |2011-06-08|Erstmalig in dieser Version erstellt\\ ​ |
 +
 +==== Code-Snippets ====
 +
 +== Engine Playground ==
 +Der folgende Link öffnet in einem separaten Fenster den Engine Playground der fest mit dem dbap-demo System verbunden ist:
 +  * [[http://​playground.dstore.de/​index.php?​proc=mi_DeadlockTest_Ad|mi_DeadlockTest_Ad im Engine Playground öffnen]]
 +== cURL ==
 +Unformatierte Ausgabe:
 +<code bash>
 +curl -X POST  '​http://<​partner>​-<​project>​.dstore.de/​default/​engine/​mi_DeadlockTest_Ad'</​code>​Mit xmllint ((I.d.R. auf Unix-artigen Systemen bereits installiert,​ Bestandteil der libxml2, siehe http://​www.xmlsoft.org)) formatierte Ausgabe:
 +<code bash>
 +curl -X POST  '​http://<​partner>​-<​project>​.dstore.de/​default/​engine/​mi_DeadlockTest_Ad'​ | xmllint --format -</​code>​== dStore_php ==
 +<code php>
 +use dStore_php\WebService;​
 +
 +$service = new WebService\Service( WebService\Scheme::​HTTP,'<​partner>​-<​project>​.dstore.de',​ 80);
 +
 +$request = new WebService\Requests\Engine\Procedure\Request(
 + new WebService\Requests\AccessData('​default'​),​
 + '​mi_DeadlockTest_Ad'​
 +);
 +
 +$service->​execute($request);​
 +
 + $xml_result = $request->​getResponse()->​getBody()->​toSimpleXmlDocument();​
 + $ResultSet = $xml_result->​getRowsAsArray();​
 +
 +</​code>​
 +== engine/​execute ==
 +XML zur Ausführung mit der Methode [[:​webservice:​engine:​execute|engine/​execute]],​ z.B. per
 +  curl --header '​Content-Type:​ application/​xml'​ -X POST '​http://<​partner>​-<​kunde>​.dstore.de/​default/​engine/​execute'​ -d '<​xml-daten>'​
 +
 +<code xml>
 +<?xml version="​1.0"​ encoding="​UTF-8"?>​
 +<​ListOfBatches>​
 + <Batch No="​0">​
 + <​Procedure Name="​mi_DeadlockTest_Ad">​
 + <​Parameters/>​
 + </​Procedure>​
 + </​Batch>​
 +</​ListOfBatches></​code>​
  
engine/procedures/mi_deadlocktest_ad.txt · Zuletzt geändert: 11.01.2016 (Externe Bearbeitung)