ECluster DLL - RPC & Mehr [Release] Version: 1.0.3.2

Anwendungen, Tools, Userlibs und anderes nützliches.
Benutzeravatar
cxAlex
Beiträge: 2111
Registriert: 26.06.2008 10:42

Beitrag von cxAlex »

Update:
  • Kompatibilitätsprobleme gefixt
  • Kleines Memoryleak in Verbindung mit Callback - Events gefixt
  • FastMemory eingebaut
  • Kleine Protokolländerung
Nur Änderungen unter der Haube, keine neuen Funktionen.
Die Protokolländerung wirkt sich nicht auf die Abwärtskompatibilität aus, Ausnahme: ECluster_Master_GetSlaveJobInfos().

Achtung: Linux-Librarys wurden noch nicht angepasst, in Kürze schiebe ich ein kurzes Update nach (muss erst FastMemory nach Linux portieren).

Download im 1. Post
Projekte: IO.pbi, vcpu
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster

Bild

PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86
Benutzeravatar
cxAlex
Beiträge: 2111
Registriert: 26.06.2008 10:42

Beitrag von cxAlex »

Update: V # 1.0.1.0
  • ECluster_Slave_EnableStatistics(): Statistik - Funktionen aktivieren
Sieht jetzt vielleicht ein bisschen wenig aus, ein neues Release nur für eine Funktion. Aber die hat es in sich. ECluster protokolliert damit sämtliche Informationen über Sessions, Jobs, Master, Events usw., steuerbar über Flags (#Statistics_Jobs, ...) in einer SQLite - Datenbank. OnTheFly - Wechsel der DB oder das verwenden einer DB führ mehrere Instanzen ist kein Problem.

Eine genaue Beschreibung der Datenbank findet ihr in Docs\ECluster_StatistikFormat.pdf, eine genaue Beschreibung des Befehls in Include\ECluster_inc.pbi.

Bei Krititk oder Änderungsvorschlägen an der Struktur der DB bitte einfach eine PN oder Mail an mich. Kritik, Bugreports, Featurerequest usw. einfach hier posten. Linux Version wird nachgeschoben, irgendwie mag Ubuntu die SQLite - Lib nicht, aber das krieg ich hin :twisted:.

Viel Spaß damit :D
Download im 1. Post oder:

http://paladiumproject.q-soft.ch/public ... luster.zip

Gruß, Alex
Projekte: IO.pbi, vcpu
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster

Bild

PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86
Benutzeravatar
cxAlex
Beiträge: 2111
Registriert: 26.06.2008 10:42

Beitrag von cxAlex »

Update: V # 1.0.2.0
  • Cache - Funktionen ECluster_Cache_*()
  • SQLite - Funktionen ECluster_SQLite_*()
  • Interne Verbesserungen
Großes Update, über 40 neue Cache & SQLite Funktionen. Der Cache wird auch intern benutzt, was auch einige kleine Verbesserungen bringen sollte.
Für die SQLite Funktionen vielen dank an RocketRider, ECluster nutzt eine modifizierte Version seiner SQLite Lib, die etwas mehr kann als PB nativ (Blobs, mehr Funktionen zum modifizieren von Tabellen...).

Die ECluster_Inc.pbi wurde in mehrere Dateien aufgespalten um die Übersicht zu bewahren, da das Include doch recht groß wurde (1500 Zeilen +). Die Beschreibungen der Befehle wurden verbessert und hoffentlich noch übersichtlicher gemacht. Details zu den neuen Funktionen sind in \Include\Parts\Cache.pbi und \Include\Parts\SQLite.pbi nachzulesen. Es reicht aber immer noch aus einfach Include\ECluster_inc.pi einzubinden um alle Befehle nutzen zu können.

Puh, ganz schön viel auf einmal.


Download im 1. Post oder:

http://paladiumproject.q-soft.ch/public ... luster.zip

Viel Spaß damit, Gruß Alex :D
Projekte: IO.pbi, vcpu
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster

Bild

PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86
Benutzeravatar
cxAlex
Beiträge: 2111
Registriert: 26.06.2008 10:42

Beitrag von cxAlex »

Update:
  • Proxy - Support (HTTP/SOCKS4/SOCKS5)
  • Fehlervermeidung verbessert, Korrekturfunktionen optimiert
  • Fehlermeldungen eingebaut (ECluster_Slave/Master_GetLastError())
  • Streaming integriert, Echtzeitstreams von Daten unbegrenzter Größe möglich, Progressmeldungen an Slave und Master möglich
  • Logging DB erweitert
  • Interne Optimierungen
So, kleines Update.
Proxys werden nun unterstützt, Fehlermeldungen gibts jetzt auch als Text. Streaming wurde eingebaut um auch rießige Daten versenden zu können (alles schön frei konfigurierbar siehe Parts\Master.pbi), einfach in die Jobs Integriert, automatische Fehlerkorrektur & Kompression usw. natürlich auch hier. Die Log - Datenbank musste natürlich erweitert werden, siehe Docs\ECluster Statisik.pdf.

Inkompatibel zu früheren Versionen da das Protokoll angepasst werden musste.

Download im 1. Post oder:

http://paladiumproject.q-soft.ch/public ... luster.zip

Viel Spaß damit, Gruß Alex :D
Projekte: IO.pbi, vcpu
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster

Bild

PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86
Benutzeravatar
cxAlex
Beiträge: 2111
Registriert: 26.06.2008 10:42

Beitrag von cxAlex »

Update: V # 1.0.3.0
  • P2P - Streams
  • Protokoll überarbeitet, inkompatibel zu früheren Versionen
  • Bugfixes
Master => Master Streams sind nun leicht möglich, wird über den ECluster_Master_DoJob() Befehl realisiert. Die Stream werden in einer der nächsten Versionen noch ausgebaut zwecks Kontrolle und Optimierung.

Download im 1. Post oder:

http://paladiumproject.q-soft.ch/public ... luster.zip

Viel Spaß damit, Gruß Alex :D
Projekte: IO.pbi, vcpu
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster

Bild

PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86
- chris -
Beiträge: 195
Registriert: 24.08.2005 19:52
Wohnort: Stadtallendorf

Beitrag von - chris - »

MD5_CRC_Slave.exe gestartet.

MD5_CRC_Master.exe gestartet.

Im Master wird Logo nicht angezeigt.

Der Job wird verweigert.

Starte ich MD5_CRC_Master_Trigger.exe, kommt gleich ein Messagerquester
'Job verweigert'.

Nach umbenennen des Jobs von GetLogo nach GetLogo2 funktioniert
der Job und das Logo wird angezeigt.

Wird im 'MD5_CRC_Master_Trigger.exe' der Button mehrmals
hintereinander betätigt crashed der Slave.

Problemereignisname: APPCRASH
Anwendungsname: MD5_CRC_Slave.exe
Anwendungsversion: 0.0.0.0
Anwendungszeitstempel: 4a62e842
Fehlermodulname: ECluster.dll
Fehlermodulversion: 1.0.3.0
Fehlermodulzeitstempel: 4a65e191
Ausnahmecode: c0000005
Ausnahmeoffset: 00012e3b
Betriebsystemversion: 6.0.6002.2.2.0.256.1
Gebietsschema-ID: 1031
Zusatzinformation 1: fd00
Zusatzinformation 2: ea6f5fe8924aaa756324d57f87834160
Zusatzinformation 3: fd00
Zusatzinformation 4: ea6f5fe8924aaa756324d57f87834160

Nach neu compilieren der 'MD5_CRC_Master_Trigger.exe' crashed
der Slave sofort, setze ich die schleife von 100 auf 10 funktioniert es,
allerdings nach mehrmaligen betätigen des Buttons crashed der
Slave wieder.
PB v5.72 x86/x64
Windows 10 Pro 64bit
Benutzeravatar
cxAlex
Beiträge: 2111
Registriert: 26.06.2008 10:42

Beitrag von cxAlex »

Kann sein das ich die Demos noch nicht richtig angepasst habe. Ich seh mir das mal an...

Gruß, Alex

//Edit:
Im Master wird Logo nicht angezeigt.

Der Job wird verweigert.
Ist richtig so:

Code: Alles auswählen

Procedure Checker(Slave, Master, Job$)
  If ECluster_Slave_GetMasterIP(Slave, Master)<>MakeIPAddress(127, 0, 0, 1) ; Nur lokal
    ProcedureReturn #False
  EndIf
  If Job$ = "GetLogo" ; GetLogo gesperrt
    ProcedureReturn #False
  EndIf
  ProcedureReturn #True
EndProcedure

Kleines Demo vom Job-Zugriffsschutz, der Job wird gesperrt.

>Wird im 'MD5_CRC_Master_Trigger.exe' der Button mehrmals
hintereinander betätigt crashed der Slave.

PS: Funktioniert 'MD5_CRC_Master' (ev. neu kompilieren)? Dann wüste ich das der Fehler im Callback-Handler ist.
Projekte: IO.pbi, vcpu
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster

Bild

PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86
- chris -
Beiträge: 195
Registriert: 24.08.2005 19:52
Wohnort: Stadtallendorf

Beitrag von - chris - »

MD5_CRC_Master.exe
MD5_CRC_Slave.exe
MD5_CRC_Master_Trigger.exe

wurden neu kompiliert, Slave crashed immer noch.
PB v5.72 x86/x64
Windows 10 Pro 64bit
Benutzeravatar
cxAlex
Beiträge: 2111
Registriert: 26.06.2008 10:42

Beitrag von cxAlex »

Kompiliere mal diesen Slave (threadsafe), und versuche wenns immer noch crasht die Zeilen 11, 25 und 35 auszukommentieren
(
AddGadgetItem(Log,...
CRC = ...
MD5 = ...
)


Sonst lass den Slave mal mit Debugger laufen und schau wo der Fehler geworfen wird.

Code: Alles auswählen

; Zeile 1
; ------------------------------------------------------------------------------------
; EasyCluster Slave Demo
; Author: Alexander Aigner
; Threadsafe aktivieren/Debugger deaktivieren
; ------------------------------------------------------------------------------------

Global Log, Jobs

Procedure AddLog(Text.s)
  AddGadgetItem(Log, 0, "[" + FormatDate("%hh:%ii:%ss", Date()) + "] " + Text)
EndProcedure

UseJPEGImageDecoder()

#ECluster_IncludePath = "..\Include\Include\"
XIncludeFile "..\Include\Include\ECluster_inc.pbi"

; Initialisieren
ECluster_Init("..\Include\Windows\ECluster.dll")

Procedure CRC_Text(hSlave, Master, JobNumber, Para, *Stream)
  Protected *Mem.ECluster_Mem, CRC
  *Mem = ECluster_Parameter_GetMem(Para)
  CRC = CRC32Fingerprint(*Mem\Mem, *Mem\MemSize-SizeOf(Character))
  ECluster_FreeMemory(*Mem\Mem)
  ECluster_FreeMemory(*Mem)
  
  ProcedureReturn ECluster_Return_Long(CRC)
EndProcedure

Procedure MD5_Text(hSlave, Master, JobNumber, Para, *Stream)
  Protected String.s, MD5.s
  String = ECluster_Parameter_GetString(Para)
  MD5 = MD5Fingerprint(@String, Len(String))
  
  ProcedureReturn ECluster_Return_String(MD5)
EndProcedure

Procedure GetLogo(hSlave, Master, JobNumber, Para, *Stream)
  Protected *Mem, MemSize
  MemSize = ?Logo_E-?Logo_S
  *Mem = ECluster_AllocateMemory(MemSize)
  CopyMemory(?Logo_S, *Mem, MemSize)
  ProcedureReturn ECluster_Return_Memory(*Mem, MemSize)
EndProcedure


Procedure Checker(Slave, Master, Job$)
  If ECluster_Slave_GetMasterIP(Slave, Master)<>MakeIPAddress(127, 0, 0, 1) ; Nur lokal
    ProcedureReturn #False
  EndIf
  If Job$ = "GetLogo" ; GetLogo gesperrt
    ProcedureReturn #False
  EndIf
  ProcedureReturn #True
EndProcedure

Procedure ECluster_Slave_EventCB(ECluster_Slave, Master, Job$, EventType, UserData)
  Select EventType
    Case #Event_Master_Connect
      AddLog("Connect: Master:" + Str(Master) + " IP: " + IPString(ECluster_Slave_GetMasterIP(ECluster_Slave, Master)))
      ECluster_Slave_SetMasterJobAccessCheck(ECluster_Slave, Master, @Checker())
      
    Case #Event_Master_DisConnect
      AddLog("Disconnect: Master:" + Str(Master))
      
    Case #Event_Master_Ping
      AddLog("Ping: Master:" + Str(Master))
      
    Case #Event_Master_CountJobs
      AddLog("Count Jobs: Master:" + Str(Master))
      
    Case #Event_Master_CountWorkers
      AddLog("Count Workers: Master:" + Str(Master))
      
    Case #Event_Master_GetJobInfos
      AddLog("Ordered Job Info: Master:" + Str(Master))
      
    Case #Event_Master_DoJob
      AddLog("Execute Job: Master:" + Str(Master) + " Job: " + Job$)
      
    Case #Event_Slave_BufferUnderrun
      AddLog("Error: Buffer Underrun")
      
  EndSelect
  
  If LastJobCount<>ECluster_Slave_CountJobs(ECluster_Slave)
    LastJobCount = ECluster_Slave_CountJobs(ECluster_Slave)
    SetGadgetText(Jobs, "Ausstehende Jobs: " + Str(LastJobCount))
  EndIf
EndProcedure

; Initialisieren
#Port = 444
#Threads = 32

S1 = ECluster_Slave_Init(#Port, #Threads)

If S1
  ECluster_Slave_SetCallback(S1, @ECluster_Slave_EventCB(), #Null)
  Main = OpenWindow(#PB_Any, 0, 0, 400, 300, "Slave Demo [Port: " + Str(#Port) + " / " + Str(#Threads) + " Worker]", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  Log = EditorGadget(#PB_Any, 5, 5, 390, 260, #PB_Editor_ReadOnly)
  Pause = ButtonGadget(#PB_Any, 5, 270, 70, 20, "Pause")
  Resume = ButtonGadget(#PB_Any, 325, 270, 70, 20, "Resume")
  Jobs = TextGadget(#PB_Any, 80, 273, 240, 20, "Ausstehende Jobs: 0", #PB_Text_Center)
  DisableGadget(Resume, #True)
  
  ; Jobs registrieren
  ECluster_Slave_AddJob(S1, "CRC_Text", "CRC Berechnung (1 String Parameter)", @CRC_Text())
  ECluster_Slave_AddJob(S1, "MD5_Text", "MD5 Berechnung (1 String Parameter)", @MD5_Text())
  ECluster_Slave_AddJob(S1, "GetLogo", "ECluster Logo holen", @GetLogo())
  
  ; Alle Daten >= 32 KB packen (Kompression = 9)
  ECluster_Slave_SetCompressionOptions(S1, 32*1024, 9)
  
  Repeat
    Event = WaitWindowEvent()
    
    If Event = #PB_Event_Gadget
      Select EventGadget()
        Case Pause ; Pausieren
          DisableGadget(Pause, #True)
          DisableGadget(Resume, #False)
          ECluster_Slave_Pause(S1)
          AddLog("Slave Paused")
          
        Case Resume ; Resumen
          DisableGadget(Pause, #False)
          DisableGadget(Resume, #True)
          ECluster_Slave_Resume(S1)
          AddLog("Slave Resumed")
          
      EndSelect
    EndIf
    
  Until Event = #PB_Event_CloseWindow
  
  ; Beenden
  ECluster_Slave_DeInit(S1)
EndIf

DataSection
  Logo_S:
  IncludeBinary "ECluster.jpg"
  Logo_E:
EndDataSection
Projekte: IO.pbi, vcpu
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster

Bild

PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86
- chris -
Beiträge: 195
Registriert: 24.08.2005 19:52
Wohnort: Stadtallendorf

Beitrag von - chris - »

crashed immer noch, auch ein auskommentieren brachte nichts.

Code: Alles auswählen

Procedure MD5_Text(hSlave, Master, JobNumber, Para, *Stream)
  Protected String.s, MD5.s
  String = ECluster_Parameter_GetString(Para)
  ;MD5 = MD5Fingerprint(@String, Len(String))
 
  ProcedureReturn ECluster_Return_String(MD5)
EndProcedure
In dieser Zeile wird ein Error gemeldet:

String = ECluster_Parameter_GetString(Para)

[ERROR] Invalid memory access. (write error at address 0)
PB v5.72 x86/x64
Windows 10 Pro 64bit
Antworten