📄 no.089_s00.mal
字号:
# Monet Mil to Mal compiler# Copyright (c) 2001-2004, CWI. All rights reserved.#Predefined code segment#The compiler can not guarantee an accurate compilation,#because MIL unlike MAL is a dynamically typed language.#A few guidelines to maximize usefullness.#- make the type of variables explicit, in particular 'nil'#- upon advice of M2m to remap identifiers, change it in your program directly#use the "mil_schema" for additional support routines# io.print("# >Number: 89\n");# io.print("# >Category: Mserver\n");# io.print("# >Synopsis: abort doesn't work right when BATs are unloaded\n");# io.print("# >Confidential: no\n");# io.print("# >Severity: serious\n");# io.print("# >Priority: high\n");# io.print("# >Responsible: boncz\n");# io.print("# >State: open\n");# io.print("# >Class: sw-bug\n");# io.print("# >Submitter-Id: unknown\n");# io.print("# >Arrival-Date: Mon Dec 1 14:49:04 1997\n");# io.print("# >Originator: windhouw\n");# io.print("# >Organization:\n");# io.print("# UvA\n");# io.print("# >Release: 971007\n");# io.print("# >Environment:\n");# io.print("# \n");# io.print("# >Description:\n");# io.print("# The following problem occurs:\n");# io.print("# - I'm running a \"transaction\";\n");# io.print("# - I abort the transaction;\n");# io.print("# - the updates and bat.inserts seems to be reversed;\n");# io.print("# - I quit Mserver and restart it;\n");# io.print("# - the updates and bat.inserts are back again.\n");# io.print("# \n");# io.print("# It seems to be that BATs that are swapped out of\n");# io.print("# memory, don't take part in the abort.\n");# io.print("# \n");# io.print("# I replayed this scene by explicitly swapping the BAT\n");# io.print("# to disk:\n");# io.print("# #You are system administrator (adm)!\n");# io.print("# >module(url);\n");# io.print("# >Server := bbp.new(oid,url);\n");# io.print("# >Server.persists(true);\n");# io.print("# >Server.rename(\"Server\");\n");# io.print("# >Server.insert(oid(1),url(\"http://www.cwi.nl/\")); \n");# io.print("# >Server.print;\n");# io.print("# #---------------------------------#\n");# io.print("# # oid | Server #\n");# io.print("# #---------------------------------#\n");# io.print("# [ 1@0, http://www.cwi.nl/ ]\n");# io.print("# >Server.unload;\n");# io.print("# >abort;\n");# io.print("# >Server.print;\n");# io.print("# #-----------------#\n");# io.print("# # oid | Server #\n");# io.print("# #-----------------#\n");# io.print("# ... QUIT & RESTART ...\n");# io.print("# #You are system administrator (adm)!\n");# io.print("# >module(url);\n");# io.print("# >Server.print;\n");# io.print("# #---------------------------------#\n");# io.print("# # oid | Server #\n");# io.print("# #---------------------------------#\n");# io.print("# [ 1@0, http://www.cwi.nl/ ]\n");# io.print("# \n");# io.print("# As this problem frequently occurs while testing my\n");# io.print("# application, my database gets inconsistent which\n");# io.print("# leads to runtime errors in the odmg packages (like\n");# io.print("# oid not found in the extent), while abort should\n");# io.print("# give me the possibilty to get back to the previous\n");# io.print("# consistent state of the database.\n");# io.print("var Server:= bbp.new(oid,url).persists(true).rename(\"Server\");"); aa_a := bbp.new(nil:oid,nil:url); ba_a := persists(aa_a,true); Server := bat.setName(ba_a,"Server");# io.print("var Server2:= bbp.new(oid,url).persists(true).rename(\"Server2\");"); ca_a := bbp.new(nil:oid,nil:url); da_a := persists(ca_a,true); Server2 := bat.setName(da_a,"Server2");# io.print("var Clients:= bbp.new(oid,int).persists(true).rename(\"Clients\");"); ea_a := bbp.new(nil:oid,nil:int); fa_a := persists(ea_a,true); Clients := bat.setName(fa_a,"Clients");# io.print("var Clients2:= bbp.new(oid,int).persists(true).rename(\"Clients2\");"); ga_a := bbp.new(nil:oid,nil:int); ha_a := persists(ga_a,true); Clients2 := bat.setName(ha_a,"Clients2");# io.print("commit();"); ia_a := commit();# io.print("Server.insert(oid(1),url(\"http://www.cwi.nl/\")); "); ja_a := calc.oid(1); ka_a := url("http://www.cwi.nl/"); la_a := bat.insert(Server,ja_a,ka_a);# io.print("Server2.insert(oid(1),url(\"http://www.cwi.nl/\")); "); ma_a := calc.oid(1); na_a := url("http://www.cwi.nl/"); oa_a := bat.insert(Server2,ma_a,na_a);# io.print("Clients.insert(oid(1),3); "); pa_a := calc.oid(1); qa_a := bat.insert(Clients,pa_a,3);# io.print("Clients2.insert(oid(1),3); "); ra_a := calc.oid(1); sa_a := bat.insert(Clients2,ra_a,3);# io.print("Server.print();"); ta_a := bat.print(Server);# io.print("Server2.print();"); ua_a := bat.print(Server2);# io.print("Clients.print();"); va_a := bat.print(Clients);# io.print("Clients2.print();"); wa_a := bat.print(Clients2);# io.print("dir(\"Server\");"); xa_a := dir("Server");# io.print("dir(\"Clients\");"); ya_a := dir("Clients");# io.print("unload(\"Server\");"); ab_a := unload("Server");# io.print("unload(\"Clients\");"); bb_a := unload("Clients");# io.print("dir(\"Server\");"); cb_a := dir("Server");# io.print("dir(\"Clients\");"); db_a := dir("Clients");# io.print("abort();"); eb_a := abort();# io.print("dir(\"Server\");"); fb_a := dir("Server");# io.print("dir(\"Clients\");"); gb_a := dir("Clients");# io.print("Server.print();"); hb_a := bat.print(Server);# io.print("Server2.print();"); ib_a := bat.print(Server2);# io.print("Clients.print();"); jb_a := bat.print(Clients);# io.print("Clients2.print();"); kb_a := bat.print(Clients2);# io.print("quit();"); lb_a := clients.quit();#Identifer 'rename' mapped to 'bat.setName'
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -