1/*-
2 * See the file LICENSE for redistribution information.
3 *
4 * Copyright (c) 2009 Oracle.  All rights reserved.
5 *
6 */
7using System;
8using System.Collections.Generic;
9using System.Text;
10
11namespace BerkeleyDB {
12    /// <summary>
13    /// Statistical information about the locking subsystem
14    /// </summary>
15    public class LockStats {
16        private Internal.LockStatStruct st;
17        internal LockStats(Internal.LockStatStruct stats) {
18            st = stats;
19        }
20
21        /// <summary>
22        /// Last allocated locker ID.
23        /// </summary>
24        public uint LastAllocatedLockerID { get { return st.st_id; } }
25        /// <summary>
26        /// Lock conflicts w/ subsequent wait
27        /// </summary>
28        public ulong LockConflictsWait { get { return st.st_lock_wait; } }
29        /// <summary>
30        /// Lock conflicts w/o subsequent wait
31        /// </summary>
32        public ulong LockConflictsNoWait { get { return st.st_lock_nowait; } }
33        /// <summary>
34        /// Number of lock deadlocks.
35        /// </summary>
36        public ulong LockDeadlocks { get { return st.st_ndeadlocks; } }
37        /// <summary>
38        /// Number of lock downgrades.
39        /// </summary>
40        public ulong LockDowngrades { get { return st.st_ndowngrade; } }
41        /// <summary>
42        /// Number of lock modes.
43        /// </summary>
44        public int LockModes { get { return st.st_nmodes; } }
45        /// <summary>
46        /// Number of lock puts.
47        /// </summary>
48        public ulong LockPuts { get { return st.st_nreleases; } }
49        /// <summary>
50        /// Number of lock gets.
51        /// </summary>
52        public ulong LockRequests { get { return st.st_nrequests; } }
53        /// <summary>
54        /// Number of lock steals so far.
55        /// </summary>
56        public ulong LockSteals { get { return st.st_locksteals; } }
57        /// <summary>
58        /// Lock timeout.
59        /// </summary>
60        public uint LockTimeoutLength { get { return st.st_locktimeout; } }
61        /// <summary>
62        /// Number of lock timeouts.
63        /// </summary>
64        public ulong LockTimeouts { get { return st.st_nlocktimeouts; } }
65        /// <summary>
66        /// Number of lock upgrades.
67        /// </summary>
68        public ulong LockUpgrades { get { return st.st_nupgrade; } }
69        /// <summary>
70        /// Locker lock granted without wait.
71        /// </summary>
72        public ulong LockerNoWait { get { return st.st_lockers_nowait; } }
73        /// <summary>
74        /// Locker lock granted after wait.
75        /// </summary>
76        public ulong LockerWait { get { return st.st_lockers_wait; } }
77        /// <summary>
78        /// Current number of lockers.
79        /// </summary>
80        public uint Lockers { get { return st.st_nlockers; } }
81        /// <summary>
82        /// Current number of locks.
83        /// </summary>
84        public uint Locks { get { return st.st_nlocks; } }
85        /// <summary>
86        /// Max length of bucket.
87        /// </summary>
88        public uint MaxBucketLength { get { return st.st_hash_len; } }
89        /// <summary>
90        /// Maximum number steals in any partition.
91        /// </summary>
92        public ulong MaxLockSteals { get { return st.st_maxlsteals; } }
93        /// <summary>
94        /// Maximum number of lockers so far.
95        /// </summary>
96        public uint MaxLockers { get { return st.st_maxnlockers; } }
97        /// <summary>
98        /// Maximum num of lockers in table.
99        /// </summary>
100        public uint MaxLockersInTable { get { return st.st_maxlockers; } }
101        /// <summary>
102        /// Maximum number of locks so far.
103        /// </summary>
104        public uint MaxLocks { get { return st.st_maxnlocks; } }
105        /// <summary>
106        /// Maximum number of locks in any bucket.
107        /// </summary>
108        public uint MaxLocksInBucket { get { return st.st_maxhlocks; } }
109        /// <summary>
110        /// Maximum number of locks in table.
111        /// </summary>
112        public uint MaxLocksInTable { get { return st.st_maxlocks; } }
113        /// <summary>
114        /// Maximum number of steals in any partition.
115        /// </summary>
116        public ulong MaxObjectSteals { get { return st.st_maxosteals; } }
117        /// <summary>
118        /// Maximum number of objects so far.
119        /// </summary>
120        public uint MaxObjects { get { return st.st_maxnobjects; } }
121        /// <summary>
122        /// Maximum number of objectsin any bucket.
123        /// </summary>
124        public uint MaxObjectsInBucket { get { return st.st_maxhobjects; } }
125        /// <summary>
126        /// Max partition lock granted without wait.
127        /// </summary>
128        public ulong MaxPartitionLockNoWait { get { return st.st_part_max_nowait; } }
129        /// <summary>
130        /// Max partition lock granted after wait.
131        /// </summary>
132        public ulong MaxPartitionLockWait { get { return st.st_part_max_wait; } }
133        /// <summary>
134        /// Current maximum unused ID.
135        /// </summary>
136        public uint MaxUnusedID { get { return st.st_cur_maxid; } }
137        /// <summary>
138        /// Maximum num of objects in table.
139        /// </summary>
140        public uint MaxObjectsInTable { get { return st.st_maxobjects; } }
141        /// <summary>
142        /// number of partitions.
143        /// </summary>
144        public uint nPartitions { get { return st.st_partitions; } }
145        /// <summary>
146        /// Object lock granted without wait.
147        /// </summary>
148        public ulong ObjectNoWait { get { return st.st_objs_nowait; } }
149        /// <summary>
150        /// Number of objects steals so far.
151        /// </summary>
152        public ulong ObjectSteals { get { return st.st_objectsteals; } }
153        /// <summary>
154        /// Object lock granted after wait.
155        /// </summary>
156        public ulong ObjectWait { get { return st.st_objs_wait; } }
157        /// <summary>
158        /// Current number of objects.
159        /// </summary>
160        public uint Objects { get { return st.st_nobjects; } }
161        /// <summary>
162        /// Partition lock granted without wait.
163        /// </summary>
164        public ulong PartitionLockNoWait { get { return st.st_part_nowait; } }
165        /// <summary>
166        /// Partition lock granted after wait.
167        /// </summary>
168        public ulong PartitionLockWait { get { return st.st_part_wait; } }
169        /// <summary>
170        /// Region lock granted without wait.
171        /// </summary>
172        public ulong RegionNoWait { get { return st.st_region_nowait; } }
173        /// <summary>
174        /// Region size.
175        /// </summary>
176        public ulong RegionSize { get { return (ulong)st.st_regsize.ToInt64(); } }
177        /// <summary>
178        /// Region lock granted after wait.
179        /// </summary>
180        public ulong RegionWait { get { return st.st_region_wait; } }
181        /// <summary>
182        /// Transaction timeout.
183        /// </summary>
184        public uint TxnTimeoutLength { get { return st.st_txntimeout; } }
185        /// <summary>
186        /// Number of transaction timeouts.
187        /// </summary>
188        public ulong TxnTimeouts { get { return st.st_ntxntimeouts; } }
189
190    }
191}