Modern computing software makes use of complex data items. Such a data item may be a compound of multiple types of data including files, database records, data fragments, relationships, properties, and the like. Modern computing software also typically provides concurrent access to such compound items resulting in a need to ensure the integrity of the items. For example, it is essential to ensure that one part of a compound item is not accessed or changed in a manner that is inconsistent with the remainder of the compound item. Locking can be used to protect access to an item and its elements thus ensuring consistency. But locking entire compound items can be expensive.
The following presents a simplified summary of the disclosure in order to provide a basic understanding to the reader. This summary is not an extensive overview of the disclosure and it does not identify key/critical elements of the invention or delineate the scope of the invention. Its sole purpose is to present some concepts disclosed herein in a simplified form as a prelude to the more detailed description that is presented later.
The present examples describe technologies including an item management system for managing and locking items including compound items. In particular, the technologies allow for locking compound items including file items where the file items may be accessed via the item management system and/or via an associated file system.
Many of the attendant features will be more readily appreciated as the same become better understood by reference to the following detailed description considered in connection with the accompanying drawings.
The present description will be better understood from the following detailed description considered in connection with the accompanying drawings, wherein:
Like reference numerals are used to designate like parts in the accompanying drawings.
The detailed description provided below in connection with the accompanying drawings is intended as a description of the present examples and is not intended to represent the only forms in which the present examples may be constructed or utilized. The description sets forth at least some of the functions of the examples and/or the sequence of steps for constructing and operating examples. However, the same or equivalent functions and sequences may be accomplished by different examples.
Although the present examples are described and illustrated herein as being implemented in a computing and networking system, the system described is provided as an example and not a limitation. As those skilled in the art will appreciate, the present examples are suitable for application in a variety of different types of computing and networking systems.
The symbol for file item 291 generally represents a data structure such as a file or the like and may include other data and/or metadata associated with and/or describing the file. Such as file is typically stored in and managed by a file system. Data associated with a file is typically represented in a row of a database table such that it can be queried.
The symbol for item 292 generally represents a data structure typically comprising one or more data elements. Such data elements may be discreet data, a file item, data associated with a file item, a data fragment, or any other form or type of data. An item comprised of multiple such data elements is generally referred to as a compound item. In one example, an item or a compound item may be represented and/or stored in a database as a set of rows of a table, each data element stored in a single row as described more fully in connection with
The symbol for fragment 293 generally represents data typically associated with an immediate parent element in a hierarchy. One example of a fragment is a property, such as a characteristic or parameter of the parent. Another example, if the parent item is a folder, one fragment may be an icon used to graphically represent the folder on a display. A fragment is typically represented in a row of a database table such that it can be queried.
The symbol for container 294 generally represents organization structure in the hierarchy 200. A container is analogous to a folder or a directory in a file system. A container may include data elements, child fragments, child containers, child file items, and/or child items and child compound items. A container is typically represented in a row of a database table such that it can be queried.
Hierarchy 200 includes an example compound item tree for compound item ‘C’ which has two immediate children, items ‘E’ and ‘F’, each of which include other child data elements. The parent of item ‘C’ is container ‘A’ with no items above it in hierarchy 200, thus compound item ‘C’ is also known as the root item of compound item ‘C’ as it is the top-level item in the compound item tree designated by item ID ‘C’. In general, the top-level item of a compound item tree is known as the root item of the compound item. In alternate examples, any other combination of elements arranged in any hierarchical structure suitable for representing a compound item may be used.
Hierarchy 200 also includes an example container ‘A’ which has two immediate children, file item ‘B’ and fragment ‘D’. Container ‘A’ is known as the root item of container ‘A’ and file item ‘B’ and fragment ‘D’. But container ‘A’ is not the root item for compound item ‘C’ because it is a container element and not an item element. Typically only item elements (as opposed to file item elements) can be the root item for other child item elements. Such a limitation contributes to storage systems that intermingle file and object content, such as the system described herein, to maintain a high degree of compatibility with storage systems which can only contain files, such as file systems. An example of container ‘A’ is a folder containing a file, such as file item ‘B’ and having a folder name, such as fragment ‘D’.
The term “item” as used herein may refer to any of the specific types of elements described in connection with
In one example, table 300 includes a Lock column. Such a column may be used to indicate the taking of a lock on an element in the table. For example, if a lock is taken on element ‘D’ in table 300 (row 301), then the lock would be indicated in the Lock column of row 301. Further, when a lock is taken on an element, such as element ‘D’ in table 300 (row 301), a lock is also taken on the corresponding root item, as typically indicated in the RootItemID column. In this example, the root item is element ‘A’ in table 300 (row 302). By taking such a lock on the root item, the entire compound item is locked whenever any element of the compound item is locked. Thus, given an attempt to access any element of a compound item, the RootItemID column of that item can be checked to identify the root item, and then the root item can be checked for a lock. If the root item is locked then access to any element of the item may be denied. This approach provides for efficient locking of a compound item, the efficiency stemming from the single level of indirection from any item to the root item as provided by the RootItemID column. Furthermore, this approach provides for a coarse-grained locking model in which the members of a compound item are generally not locked independently. For example, an entity that wishes to effect changes to a portion of a compound item must generally lock the entire compound item (coarse-grained locking), preventing other entities from effecting concurrent changes to elements of the compound item, until the lock is released. In cases where various elements within a compound item are related and must co-vary, this model enables entities to atomically change such elements of the compound item from one valid state to another. Once a lock has been taken on an item and any changes have been committed, the lock is typically released. In alternative examples, lock indications may be maintained in another table or tables, such as a database system table, other than example table 300, and/or in system memory, and/or in any other suitable data structure.
Item management system (“IMS”) 410 typically provides functionality for managing, accessing, and controlling the storage of items. This functionality includes creating, deleting, modifying, accessing, storing, and any other form of access, control, and/or manipulation of items. Such functionality is referred to herein as “management” of items. IMS 410 also typically interacts with file system (“FS”) 480 and with database management system (“DBMS”) 490 and maintains tables and the like such as table 300 described in connection with
File handle list (“FHL”) 412 typically provides functionality for managing, accessing, and controlling a list of file handles and other information associated with file items being managed by IMS 410. FHL 412 typically includes tables, lists, data structures, and/or the like, including information associated with file items managed by IMS 410. IMS 410 typically interacts with FHL 412 to populate the list for any file item created, managed, accessed, or such by system 400. The list typically includes information about the file item such as the name of the file item, a path indicating the storage location of the file item as stored in FS 480, a corresponding file item ID, as well as a list of any open file handles associated with the file item. Such file handles are typically provided or returned by file system 480 as the result of file open operations, file create operations, or the like. Such operations are termed herein file handle requests. In one example, FHL 412 may be implemented as a database table. In another example, FHL 412 may be implemented as a data structure maintained in system memory in the form of a cache or the like.
Item management interface (“IMI”) 420 typically provides an application programming interface (“API”) or the like sufficient for applications, such as example application 470, to interact with IMS 410 and system 400. IMI 420 may be implemented as any conventional or special-purpose interface sufficient to provide access to IMS 410 functionality.
Item management file system interface (“IMFSI”) 430 typically provides an interface for FS 480 to interact with IMS 410 and FHL 412. IMFSI 430 is typically used by FS 480 to, among other things, access FHL 412 and to take and release locks on items. IMFSI 430 may be implemented as any conventional or special-purpose interface sufficient to provide access to IMS 410 and FHL 412 functionality. In one example, IMFSI may be implemented as a driver module.
File system (“FS”) 480 is typically a conventional file system such as that provided by a typical operating system. Such a file system may be associated with system 400 only by its usage by such a system. Alternatively, FS 480 may be an integral part of system 400. FS 480 typically provides all the functionality required for managing, accessing, and controlling files and stores such files in file storage 482, which may be any suitable storage system and/or mechanism.
Database management system (“DBMS”) 490 is typically a conventional DBMS system. Such a database system may be associated with system 400 only by its usage by such a system. Alternatively, DBMS 490 may be an integral part of system 400. DBMS 490 typically provides all the functionality required for managing, accessing, and controlling database information, such as tables and records, and stores such information in database storage 492, which may be any suitable storage system.
Block 520 indicates using the ItemID of the item to be accessed to look up the desired item in a table, such as table 300 of
Block 530 indicates looking up the RootItemID of the desired item. This is typically done by accessing the RootItemID column of the row corresponding to the ItemID of the desired item. The information in this row/column of the table typically identifies the ItemID of the root item of the desired item. For example, if the desired item is item ‘D’ as shown in column 301 of
Block 540 indicates a test to determine if the root item of the desired item is locked. This test is typically performed by checking the Lock column of the row associated with the root item. For example, if the root item is item ‘A’ as shown in row 302 of
Block 550 indicates denying the lock request for the desired item and indicating such back to the caller. Such a denial generally occurs because the root item of the desired item is already locked, indicating some element of the item is already being accessed by some other process or caller. If the desired item is already locked, method 500 may wait a timeout interval for the pre-existing lock owner to release the pre-existing lock, returning a timeout error if the pre-existing lock is not released during the timeout interval. Otherwise, another LockRootItem request may be made at a future time and may succeed if the root item of the desired item is no longer locked. Returning such a denial typically terminates LockRootItem method 500.
Block 560 indicates placing a lock on the root item of the desired item. This is typically done by indicating a lock in the Lock column of the row associated with the root item. Once the root item is locked, method 500 typically continues at block 570.
Block 570 indicates placing a lock on the desired item. This is typically done by indicating a lock in the Lock column of the row associated with the desired item. In alternate examples, the desired item may not receive a lock indication. Once the desired item is locked, method 500 typically continues at block 580.
Block 580 indicates returning a lock indication to the caller. Such an indication serves to notify the caller that the requested lock has been granted and that the desired item may be accessed by the caller. In alternate examples, the lock indication may serve to notify the caller that the requested lock has been granted and that any element of the root item associated with the desired item may be accessed by the caller. Returning such a lock indication typically terminates LockRootItem method 500.
Block 620 indicates locking the root item of the file item for which a handle is desired. In one example, this may be accomplished by calling the LockRootItem method described in connection with
Block 630 indicates looking up the file item in a list such as the file handle list described in connection with
Block 640 indicates checking the file item information in the list for any open file handles. If there are no open file handles associated with the file item, method 600 typically continues at block 650. If there are any open file handles associated with the file item, then method 600 typically continues at block 660.
Block 650 indicates setting the return value of the FSLockRootItem method to “Pass”, indicating that a file handle may be opened for the file item. Any suitable value or indication may be used to indicate “Pass”. Once the return value is set to indicate “Pass”, method 600 typically continues at block 670.
Block 660 indicates setting the return value of FSLockRootItem method to “Fail”, indicating that a file handle may not be opened for the file item. Any suitable value or indication may be used to indicate “Fail”. Once the return value is set to indicate “Fail”, method 600 typically continues at block 670.
Block 670 indicates releasing the lock taken on the root item of the file item. Once the lock is released, method 600 typically continues at block 680.
Block 680 indicates returning the return value set at either block 650 or 660 to the caller.
Method 500 described in connection with
Computing environment 700 typically includes a general-purpose computing system in the form of a computing device 701 coupled to various components, such as peripheral devices 702, 703, 704 and the like. System 700 may couple to various other components, such as input devices 703, including voice recognition, touch pads, buttons, keyboards and/or pointing devices, such as a mouse or trackball, via one or more input/output (“I/O”) interfaces 712. The components of computing device 701 may include one or more processors (including central processing units (“CPU”), graphics processing units (“GPU”), microprocessors (“μP”), and the like) 707, system memory 709, and a system bus 708 that typically couples the various components. Processor 707 typically processes or executes various computer-executable instructions to control the operation of computing device 701 and to communicate with other electronic and/or computing devices, systems or environment (not shown) via various communications connections such as a network connection 714 or the like. System bus 708 represents any number of several types of bus structures, including a memory bus or memory controller, a peripheral bus, a serial bus, an accelerated graphics port, a processor or local bus using any of a variety of bus architectures, and the like.
System memory 709 may include computer readable media in the form of volatile memory, such as random access memory (“RAM”), and/or non-volatile memory, such as read only memory (“ROM”) or flash memory (“FLASH”). A basic input/output system (“BIOS”) may be stored in non-volatile or the like. System memory 709 typically stores data, computer-executable instructions and/or program modules comprising computer-executable instructions that are immediately accessible to and/or presently operated on by one or more of the processors 707.
Mass storage devices 704 and 710 may be coupled to computing device 701 or incorporated into computing device 701 via coupling to the system bus. Such mass storage devices 704 and 710 may include non-volatile RAM, a magnetic disk drive which reads from and/or writes to a removable, non-volatile magnetic disk (e.g., a “floppy disk”) 705, and/or an optical disk drive that reads from and/or writes to a non-volatile optical disk such as a CD ROM, DVD ROM 706. Alternatively, a mass storage device, such as hard disk 710, may include non-removable storage medium. Other mass storage devices may include memory cards, memory sticks, tape storage devices, and the like.
Any number of computer programs, files, data structures, and the like may be stored in mass storage 710, other storage devices 704, 705, 706 and system memory 709 (typically limited by available space) including, by way of example and not limitation, operating systems, application programs, data files, directory structures, computer-executable instructions, and the like.
Output components or devices, such as display device 702, may be coupled to computing device 701, typically via an interface such as a display adapter 711. Output device 702 may be a liquid crystal display (“LCD”). Other example output devices may include printers, audio outputs, voice outputs, cathode ray tube (“CRT”) displays, tactile devices or other sensory output mechanisms, or the like. Output devices may enable computing device 701 to interact with human operators or other machines, systems, computing environments, or the like. A user may interface with computing environment 700 via any number of different I/O devices 703 such as a touch pad, buttons, keyboard, mouse, joystick, game pad, data port, and the like. These and other I/O devices may be coupled to processor 707 via I/O interfaces 712 which may be coupled to system bus 708, and/or may be coupled by other interfaces and bus structures, such as a parallel port, game port, universal serial bus (“USB”), fire wire, infrared (“IR”) port, and the like.
Computing device 701 may operate in a networked environment via communications connections to one or more remote computing devices through one or more cellular networks, wireless networks, local area networks (“LAN”), wide area networks (“WAN”), storage area networks (“SAN”), the Internet, radio links, optical links and the like. Computing device 701 may be coupled to a network via network adapter 713 or the like, or, alternatively, via a modem, digital subscriber line (“DSL”) link, integrated services digital network (“ISDN”) link, Internet link, wireless link, or the like.
Communications connection 714, such as a network connection, typically provides a coupling to communications media, such as a network. Communications media typically provide computer-readable and computer-executable instructions, data structures, files, program modules and other data using a modulated data signal, such as a carrier wave or other transport mechanism. The term “modulated data signal” typically means a signal that has one or more of its characteristics set or changed in such a manner as to encode information in the signal. By way of example, and not limitation, communications media may include wired media, such as a wired network or direct-wired connection or the like, and wireless media, such as acoustic, radio frequency, infrared, or other wireless communications mechanisms.
Power source 790, such as a battery or a power supply, typically provides power for portions or all of computing environment 700. In the case of the computing environment 700 being a mobile device or portable device or the like, power source 790 may be a battery. Alternatively, in the case computing environment 700 is a desktop computer or server or the like, power source 790 may be a power supply designed to connect to an alternating current (“AC”) source, such as via a wall outlet.
Some mobile devices may not include many of the components described in connection with
Those skilled in the art will realize that storage devices utilized to provide computer-readable and computer-executable instructions and data can be distributed over a network. For example, a remote computer or storage device may store computer-readable and computer-executable instructions in the form of software applications and data. A local computer may access the remote computer or storage device via the network and download part or all of a software application or data and may execute any computer-executable instructions. Alternatively, the local computer may download pieces of the software or data as needed, or distributively process the software by executing some of the instructions at the local computer and some at remote computers and/or devices.
Those skilled in the art will also realize that, by utilizing conventional techniques, all or portions of the software's computer-executable instructions may be carried out by a dedicated electronic circuit such as a digital signal processor (“DSP”), programmable logic array (“PLA”), discrete circuits, and the like. The term “electronic apparatus” may include computing devices or consumer electronic devices comprising any software, firmware or the like, or electronic devices or circuits comprising no software, firmware or the like.
The term “firmware” typically refers to executable instructions, code, data, applications, programs, or the like maintained in an electronic device such as a ROM. The term “software” generally refers to executable instructions, code, data, applications, programs, or the like maintained in or on any form of computer-readable media. The term “computer-readable media” typically refers to system memory, storage devices and their associated media, and the like.
In view of the many possible embodiments to which the principles of the present invention and the forgoing examples may be applied, it should be recognized that the examples described herein are meant to be illustrative only and should not be taken as limiting the scope of the present invention. Therefore, the invention as described herein contemplates all such embodiments as may come within the scope of the following claims and any equivalents thereto.