Avatar billede simonvalter Praktikant
24. november 2005 - 05:29 Der er 1 løsning

jini - javaspaces, transaktioner og mistede entrys.

Jeg er godt klar over at denne type spørgsmål for det meste ikke bliver besvaret men ville aligevel høre om nogen havde et forslag til en løsning eller måske ligefrem ekspertise i jini så her kommer det aligevel:


Jeg har et irriterende problem med javaspaces. Jeg bruger blitz som implementation men det er  også et problem med jini outrigger fra reference implementationen.

problemet og faktisk også en del af svaret er beskrevet her:

http://www.dancres.org/cottage/javaspaces.html#commonques (lyder det iøvrigt ikke som en design fejl?)

jeg har et job som bliver delt op i tasks, skrevet til spacet og samlet op af en worker. Worker laver en blocking take hvilket jeg kan forstå får det den efterspørger til at blive markeret som taget i en intern liste når sådan et entry dukker op.
Lukker jeg worker når den har gang i et blocking take, starter den igen, vil dette entry se ud som om det er væk.

Løsningen er så at sætte en lease time på en transaktion. det virker også fint, og det forsvundne entry dukker op igen når lease udløber og transaktionen abortes.

Hvis man altid vidste hvor lang tid at en task kører så skal lease time bare være højere end det for at undgå en unknown transaction når result skal skrives tilbage til spacet inden for transaktionen.

Det er så ikke altid muligt med et framework som tager alle muligt typer jobs med tasks af varierende længde. Sætter  man lease time på transaktionen til uendelig så vil entry aldrig dukke op igen.

jeg har selv nogen løsninger som dog ikke er optimale.

1. sætte en øvre grænse for hvor lang tid en task må køre... jobbet må dele dem op så det overholdes. entrys vil så også være forsvundet så lang tid.

2. holde styr på hvilke resultater der er kommet tilbage, og sende en task afsted igen hvis der ikke er kommet et result tilbage fra den inden for et bestemt stykke tid. (men igen hvad er en god tid.. task størrelse kunne afhænge af mange ting)
Jeg er stadig i tvivl om det vil foresage en form for memory leak da entry stadig ligger i spacet, men en lease time på entry kan måske få det til at forsvinde.

...og til sidst, altid stoppe en worker med en stoptask, men det er jo ikke til at forhindre nedbrud.


Håber det var til at forstå..er det nogen andre ideer så bare sig til, hvis ikke så har jeg da fået det overvejet lidt mere ved at få det skrevet ned.
Avatar billede simonvalter Praktikant
22. december 2005 - 16:59 #1
lukker, svaret var lige forean mig, et lease kan renewes, så en worker kan selv renew et lease hvis det er ved at løbe ud og den stadig arbejder på opgaven. dermed vil en transaktion stadig være valid når worker er færdig, og hvis worker dør vil lease ikke leve alt for lang tid og resultere i et lost entry.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester