GsDevKit / gsApplicationTools

This repository includes scripts and code that allow a more convenient setup of a Gemstone server application
MIT License
2 stars 2 forks source link

Handle transaction conflicts on server start-up #40

Closed ramauers closed 3 years ago

ramauers commented 3 years ago

Hello Dale, I rarely ended with the desired number of running topaz processes when starting a zinc server on multiple ports. Investigation of the logs showed transaction conflicts when setting the shared state of instVar transactionMode. This fix works for me. Br, Ralph

dalehenrich commented 3 years ago

I'm kinda involved in some other tasks at the moment .... so I need a little more time to look into your proposed change ... it's not good for there to be a possibility of commit conflicts on startup, so that is probably a design flaw that can be fixed a couple of different ways ... how many gemServers are you trying to start when you are seeing transaction conflicts?

ramauers commented 3 years ago

I configured three server instances for startup. Attached is a log file, which shows the stack trace before my fix.

The fix ensures, that the desired number of processes are running at the end. After thinking twice: Another way to fix it would be not to retry the failed commits at all. A simple abort should be enough, since the different processes won't commit contradictory transaction modes... Anyway, there are different options...

Br,

Ralph

Am 03.11.2020 um 03:33 schrieb Dale Henrichs:

I'm kinda involved in some other tasks at the moment .... so I need a little more time to look into your proposed change ... it's not good for there to be a possibility of commit conflicts on startup, so that is probably a design flaw that can be fixed a couple of different ways ... how many gemServers are you trying to start when you are seeing transaction conflicts?

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/GsDevKit/gsApplicationTools/pull/40#issuecomment-720872972, or unsubscribe https://github.com/notifications/unsubscribe-auth/AO3ETXAGWDO2GI6HXFTUGG3SN5TWXANCNFSM4TGSMDQA.

[Info]: Loaded /opt/gemstone/GsDevKit_home/server/stones/teststone344/product/lib/libgcilnk-3.4.4-64.so


Configuration Files
System File: /opt/gemstone/GsDevKit_home/server/stones/teststone344/extents/system.conf
Executable File: /opt/gemstone/GsDevKit_home/server/stones/teststone344/gem.conf
_____

Reading config file /opt/gemstone/GsDevKit_home/server/stones/teststone344/extents/system.conf Reading config file /opt/gemstone/GsDevKit_home/server/stones/teststone344/gem.conf


| Gem Configuration Options for process id 803 | |_____|

DUMP_OPTIONS = TRUE; GEM_ABORT_MAX_CRS = 0; GEM_CACHE_WARMER_ARGS = ""; GEM_CACHE_WARMER_MID_CACHE_ARGS = ""; GEM_COMPRESS_TRANLOG_RECORDS = TRUE; GEM_FREE_FRAME_CACHE_SIZE = -1; GEM_FREE_FRAME_LIMIT = -1; GEM_FREE_PAGEIDS_CACHE = 200; GEM_HALT_ON_ERROR = -1; GEM_KEEP_MIN_SOFTREFS = 0; GEM_KERBEROS_KEYTAB_FILE = ""; GEM_KEYRING_DIRS = ""; GEM_MAX_SMALLTALK_STACK_DEPTH = 1000; GEM_NATIVE_CODE_ENABLED = 2; GEM_PRIVATE_PAGE_CACHE_KB = 960KB; GEM_PGSVR_COMPRESS_PAGE_TRANSFERS = FALSE; GEM_PGSVR_FREE_FRAME_CACHE_SIZE = -1; GEM_PGSVR_FREE_FRAME_LIMIT = -1; GEM_PGSVR_UPDATE_CACHE_ON_READ = FALSE; GEM_PGSVR_USE_SSL = FALSE; GEM_READ_AUTH_ERR_STUBS = FALSE; GEM_REPOSITORY_IN_MEMORY = FALSE; GEM_RPC_KEEPALIVE_INTERVAL = 0; GEM_RPCGCI_TIMEOUT = 0; GEM_RPC_USE_SSL = TRUE; GEM_SOFTREF_CLEANUP_PERCENT_MEM = 50; GEM_STATMONITOR_ARGS = ""; GEM_STATMONITOR_MID_CACHE_ARGS = ""; GEM_TEMPOBJ_AGGRESSIVE_STUBBING = TRUE; GEM_TEMPOBJ_CACHE_SIZE = 50000KB; GEM_TEMPOBJ_CONSECUTIVE_MARKSWEEP_LIMIT = 50; GEM_TEMPOBJ_MESPACE_SIZE = 0; GEM_TEMPOBJ_OOMSTATS_CSV = FALSE; GEM_TEMPOBJ_OOPMAP_SIZE = 0; GEM_TEMPOBJ_SCOPES_SIZE = 2000; GEM_TEMPOBJ_PERMGEN_SIZE = 0; GEM_TEMPOBJ_POMGEN_SIZE = 0; GEM_TEMPOBJ_POMGEN_PRUNE_ON_VOTE = 90; GEM_TEMPOBJ_POMGEN_SCAVENGE_INTERVAL = 1800; GEM_TEMPOBJ_START_ADDR not used on this platform LOG_WARNINGS = TRUE; SHR_NUM_FREE_FRAME_SERVERS = -1; SHR_PAGE_CACHE_LARGE_MEMORY_PAGE_POLICY = 0; SHR_PAGE_CACHE_LARGE_MEMORY_PAGE_SIZE_MB = 0; SHR_PAGE_CACHE_LOCKED = FALSE; SHR_PAGE_CACHE_NUM_PROCS = 524273; SHR_PAGE_CACHE_NUM_SHARED_COUNTERS = 1900; SHR_PAGE_CACHE_PERMISSIONS = 0660; SHR_PAGE_CACHE_SIZE_KB = 500000KB; SHR_TARGET_FREE_FRAME_COUNT = -1; SHR_WELL_KNOWN_PORT_NUMBER = 0; CONFIG_WARNINGS_FATAL = FALSE; (vmGc spaceSizes: eden init 2048K max 9344K , survivor init 448K max 1600K, vmGc old max 37440K, code max 10048K, perm max 5056K, pom 10 * 4160K = 41600K, vmGc remSet 1156K, meSpace max 51288K oopMapSize 262144 max footprint 164M)


| GemStone/S64 Object-Oriented Data Management System | | Copyright (C) GemTalk Systems 1986-2019 | | All rights reserved. | | Covered by U.S Patents: | | 6,256,637 Transactional virtual machine architecture (1988-2018) | | 6,360,219 Object queues with concurrent updating (1988-2018) | | 6,567,905 Generational Garbage Collector (1992-2021) | | 6,681,226 Selective Pessimistic Locking for a Concurrently Updateable | | Database (1992-2021) | +-----------------------------------------------------------------------------+ | PROGRAM: topaz, Linear GemStone Interface (Linked Session) | | VERSION: 3.4.4, Thu Jul 25 11:16:06 2019 | | BUILD: gss64_3_4_x_branch-46580 | | BUILT FOR: x86-64 (Linux) | | MODE: 64 bit | | RUNNING ON: 8-CPU srv6223 x86_64 (Linux 4.20.8-1.el7.elrepo.x86_64 #1 SMP Tue | Feb 12 18:03:03 EST 2019) 3906MB | | PROCESS ID: 803 DATE: 26.07.2020 11:16:33 CEST (UTC +2:00) | | USER IDS: REAL=fox (1000) EFFECTIVE=fox (1000) LOGIN=fox (1000) | +-----------------------------------------------------------------------------+ | DATEFORMAT: %d.%m.%Y %H:%M:%S %Z | | GEMSTONE_NRS_ALL = #dir:$GEMSTONELOGDIR#log:%N%P.log | |____| neither .topazini nor $HOME/.topazini were found topaz> topaz> set user DataCurator pass swordfish gems teststone344 topaz> topaz> display oops topaz> iferror stack topaz> topaz> login [Info]: LNK client/gem GCI levels = 34003/34003 --- 26.07.2020 11:16:33.117 CEST Login [Info]: Loaded /opt/gemstone/GsDevKit_home/server/stones/teststone344/product/lib/libfloss-3.4.4-64.so [Info]: User ID: DataCurator [Info]: Repository: teststone344 [Info]: Session ID: 8 [Info]: GCI Client Host: [Info]: Page server PID: -1 [Info]: using libicu version 58.2 [Info]: Gave this process preference for OOM killer: wrote to /proc/803/oom_score_adj value 250 [26.07.2020 11:16:33.185 CEST] gci login: currSession 1 linked session successful login fileformat is now utf8 sourcestringclass is now Unicode16 topaz 1> topaz 1> run (GemServerRegistry gemServerNamed: 'OXServer') scriptStartServiceOn: 9002. % --transcript--'scriptLogEvent: ''-->>Script Start OXServer on 9002''' --transcript--'scriptLogEvent: ''recordGemPid: OXServer on 9002''' --transcript--'scriptLogEvent: ''setStatmonCacheName: OXServer''' --transcript--'scriptLogEvent: ''enableRemoteBreakpointHandling: OXServer'''

GemStone: Error Nonfatal a UserDefinedError occurred (error 2318), reason:halt, commit conflicts Error Category: 231169 [GemStone] Number: 2318 Arg Count: 1 Context : 53078529 exception : 53074433 Arg 1: [20 sz:0 cls: 76289 UndefinedObject] nil topaz > exec iferr 1 : stack ==> 1 UserDefinedError (AbstractException) >> _signalWith: @6 line 25 [methId 4434177] receiver [53074433 sz:10 cls: 132609 UserDefinedError] a UserDefinedError occurred (error 2318), reason:halt, commit conflicts inCextensionArg [20 sz:0 cls: 76289 UndefinedObject] nil res [20 sz:0 cls: 76289 UndefinedObject] nil (skipped 1 evaluationTemps) 2 UserDefinedError (AbstractException) >> signal @2 line 47 [methId 4434433] receiver [53074433 sz:10 cls: 132609 UserDefinedError] a UserDefinedError occurred (error 2318), reason:halt, commit conflicts (skipped 2 evaluationTemps) 3 OXZnServer (Object) >> error: @6 line 7 [methId 4090881] receiver [296324097 sz:16 cls: 280411905 OXZnServer] anOXZnServer messageString [253833217 sz:16 cls: 74753 String] commit conflicts (skipped 2 evaluationTemps) 4 [] in GemServer >> doTransaction: @9 line 9 [methId 253976833] self [296324097 sz:16 cls: 280411905 OXZnServer] anOXZnServer receiver [53008897 sz:5 cls: 128001 ExecBlock1] anExecBlock1 conflicts [53004545 sz:14 cls: 111361 SymbolDictionary] aSymbolDictionary self [296324097 sz:16 cls: 280411905 OXZnServer] anOXZnServer (skipped 3 evaluationTemps) _VC [53009409 sz:4 cls: 134913 VariableContext] aVariableContext 5 OXZnServer (GemServer) >> doTransaction:onConflict: @8 line 10 [methId 252759809] receiver [296324097 sz:16 cls: 280411905 OXZnServer] anOXZnServer aBlock [52995841 sz:5 cls: 127745 ExecBlock0] anExecBlock0 conflictBlock [53008897 sz:5 cls: 128001 ExecBlock1] anExecBlock1 conflicts [53004545 sz:14 cls: 111361 SymbolDictionary] aSymbolDictionary (skipped 2 evaluationTemps) 6 OXZnServer (GemServer) >> doTransaction: @3 line 5 [methId 248413953] receiver [296324097 sz:16 cls: 280411905 OXZnServer] anOXZnServer aBlock [52995841 sz:5 cls: 127745 ExecBlock0] anExecBlock0 (skipped 4 evaluationTemps) _VC [52990721 sz:4 cls: 134913 VariableContext] aVariableContext 7 OXZnServer (GemServer) >> transactionMode: @3 line 4 [methId 252762625] receiver [296324097 sz:16 cls: 280411905 OXZnServer] anOXZnServer aSymbol [236033 sz:11 cls: 110849 Symbol] manualBegin (skipped 3 evaluationTemps) _VC [52982017 sz:5 cls: 134913 VariableContext] aVariableContext 8 OXZnServer (GemServer) >> scriptServicePrologOn: @11 line 10 [methId 248409089] receiver [296324097 sz:16 cls: 280411905 OXZnServer] anOXZnServer portOrNil [72018 sz:0 cls: 74241 SmallInteger] 9002 == 0x232a (skipped 2 evaluationTemps) 9 OXZnServer (GemServer) >> scriptStartServiceOn: @2 line 5 [methId 248390913] receiver [296324097 sz:16 cls: 280411905 OXZnServer] anOXZnServer portOrResourceName [72018 sz:0 cls: 74241 SmallInteger] 9002 == 0x232a (skipped 3 evaluationTemps) 10 Executed Code @3 line 1 [methId 52966657] receiver [20 sz:0 cls: 76289 UndefinedObject] nil (skipped 2 evaluationTemps) 11 GsNMethod class >> _gsReturnToC @1 line 1 [methId 4517889] receiver [144897 sz:19 cls: 744193 GsNMethod class] GsNMethod topaz 1> topaz 1> run | logEntry | System beginTransaction. (logEntry := ObjectLogEntry fatal: 'OXServer_server_9002: topaz exit' object: 'pid: ', (System gemVersionReport at: 'processId') printString) addToLog. (GemServerRegistry gemServerNamed: 'OXServer') ifNotNil: [:gemServer | gemServer crashLog add: (9002) asString -> logEntry ]. System commitTransaction. % [268 sz:0 cls: 68097 Boolean] true topaz 1> Logging out session 1. --- 26.07.2020 11:16:34.925 CEST Logging out