Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A KTM minden tranzakciókezelő objektumhoz biztosít egy virtuális órát. Amikor egy erőforrás-kezelő meghívja a ZwCreateTransactionManagert, a KTM az objektum virtuális óraértékét 1 értékre állítja. A KTM minden alkalommal növeli a virtuális óra értékét, amikor egy véglegesítési művelet megkezdődik. Amikor a KTM a naplóstreambe ír, a naplórekordok tartalmazzák az aktuális virtuális óra értékét is.
Amikor egy erőforrás-kezelő meghívja a ZwRecoverTransactionManagert, a KTM beolvassa a naplóstream rekordjait a stream végéig, és a tranzakciókezelő objektum virtuális óraértékét az objektum naplóstreamjében talált utolsó értékre állítja.
Amikor egy erőforrás-kezelő meghívja a ZwRollforwardTransactionManagert, a KTM beolvassa a naplóstream rekordjait a megadott óraértékig, és beállítja a tranzakciókezelő objektum virtuális óraértékét a megadott óraértékre.
A KTM lehetővé teszi, hogy az erőforrás-kezelők és a felsőbb szintű tranzakciókezelők módosítsák egy tranzakciókezelő objektum virtuális óraértékét, de általában nem kell módosítaniuk az óraértéket.
Mikor kell módosítani a virtuális óra értékeit?
A tranzakciófeldolgozó rendszernek (TPS) általában nem kell módosítania a virtuális óra értékeit, hacsak a TPS összetevői nem próbálnak több naplóstreamet szinkronizálni.
Tegyük fel például, hogy a TPS több erőforrás-kezelőt tartalmaz, amelyek kommunikálnak egymással az előkészületi/előkészítési/véglegesítési sorozatok során. Tegyük fel, hogy minden erőforrás-kezelő létrehoz egy tranzakciókezelő objektumot, amely egyedi naplóstreamel rendelkezik. Ha meg szeretné győződni arról, hogy a KTM a helyreállítási művelet során az összes erőforrás-kezelő állapotát ugyanarra a pontra állítja vissza, ezek az erőforrás-kezelők a következő lépéseket használhatják:
Amikor az egyik erőforrás-kezelő kommunikál egy másikkal, az átadja a KTM-től vagy egy másik erőforrás-kezelőtől kapott legújabb virtuális óraértéket.
Amikor egy erőforrás-kezelő olyan KTM-rutint hív meg, amely elfogad egy virtuális óraértéket (lásd a jelen témakör következő szakaszát), a KTM-től vagy egy másik erőforrás-kezelőtől kapott legmagasabb óraértéket adja át.
Minden erőforrás-kezelő virtuális óraértékeket ír a naplóstreambe, és ezeket az értékeket használja a visszaállítási vagy helyreállítási műveletek végrehajtásakor.
Ezek a lépések miatt a KTM által az egyes tranzakciókezelő objektumokhoz tárolt virtuálisóra-értékek majdnem vagy pontosan egyeznek. Ezért ha egy helyreállítási művelet miatt a KTM beolvassa a naplóstreameket, vagy ha egy visszaállítási művelet miatt az erőforrás-kezelők beolvassák a naplóstreameket, a helyreállítás vagy a visszaállítás szinkronizált naplóstreameken alapul.
Virtuális óra értékeinek módosítása
Az erőforrás-kezelők úgy módosíthatják a virtuális óra értékét, hogy átadnak egy új értéket a ZwPrePrepareComplete, a ZwPrepareComplete, a ZwCommitComplete, a ZwRollbackComplete, a ZwReadOnlyEnlistment vagy a ZwSinglePhaseReject fájlnak.
A felsőbb szintű tranzakciókezelők úgy módosíthatják a virtuális óra értékét, hogy átadnak egy új értéket a ZwPrePrepareEnlistment, a ZwPrepareEnlistment, a ZwCommitEnlistment vagy a ZwReadOnlyEnlistment szolgáltatásnak.
Emellett a ResourceManagerNotification visszahívási rutint használó erőforrás-kezelő vagy kiváló tranzakciókezelő módosíthatja a visszahívási rutin által kapott virtuális óraértéket. A KTM ezután menti a frissített értéket.
Ha egy erőforrás-kezelő vagy egy kiváló tranzakciókezelő átad egy új óraértéket a KTM-nek, a KTM csak akkor menti az új értéket, ha az nagyobb az aktuális óraértéknél. Ellenkező esetben a KTM megtartja az aktuális óraértéket.
Az erőforrás-kezelők és a felsőbb szintű tranzakciókezelők a ZwQueryInformationTransactionManager rutin meghívásával szerezhetik be a tranzakciókezelő objektum virtuális óraértékét.