In order to improve the security and/or quality of an application, software developers may create and distribute upgraded versions of the application. Each version of the application often contains and/or supports different features and elements of the application. In some cases, users of the application may wish to upgrade their current version of the application to an improved version.
Unfortunately, in some circumstances, a user may be unable to directly (i.e., in one step) and successfully upgrade their application to a desired version. For example, if an application has many different versions, some versions may not support upgrades to one or more other versions. In addition, some attempts to upgrade an application to a higher version may fail and/or result in a nonfunctional or ineffective application. As such, the current disclosure identifies and addresses a need for more efficient and effective systems and methods for updating applications.
As will be described in greater detail below, the instant disclosure describes various systems and methods for updating applications by determining the optimal sequence of upgrades to apply to an application in order to efficiently and successfully upgrade the application to a desired version.
In one example, a computer-implemented method for updating applications may include (1) identifying each version of an application, (2) determining possible upgrade paths to upgrade the application from an initial version of the application to a desired version of the application by, for each version of the application (a) creating a connection between the version and each subsequent version to which the version can be upgraded and (b) weighting each connection with a success rate that indicates the probability that the version will be successfully upgraded to the subsequent version, and (3) identifying, from among the possible upgrade paths, an optimal upgrade path for upgrading the application from the initial version to the desired version based on an analysis of both the combined weight and the combined length of the connections within each possible upgrade path. In some embodiments, the method may further include using the optimal upgrade path to upgrade the application from the initial version to the desired version.
In some examples, the success rate for each connection may be obtained by receiving historical data that indicates the success of an attempt to perform the upgrade on at least one additional computing device. In these examples, receiving the historical data may include triggering the additional computing device to send the historical data in response to detecting the upgrade.
In some embodiments, the combined length of each possible upgrade path may be calculated by identifying the number of connections within the possible upgrade path. In addition, the combined weight of each possible upgrade may be calculated by accumulating the success rate of each connection within the possible upgrade path. In such embodiments, accumulating the success rate of each connection may include multiplying the probabilities used to weight each connection and/or summing logarithms of the probabilities used to weight each connection.
In some examples, identifying the optimal upgrade path may include identifying a possible upgrade path with the largest combined weight. In other examples, identifying the optimal upgrade path may include identifying a possible upgrade path with the shortest combined length. Additionally or alternatively, identifying the optimal upgrade path may include analyzing the possible upgrade paths using a shortest-path algorithm.
In one embodiment, a system for implementing the above-described method may include (1) an identification module that identifies each version of an application, (2) a determination module that determines possible upgrade paths to upgrade the application from an initial version of the application to a desired version of the application by, for each version of the application (a) creating a connection between the version and each subsequent version to which the version can be upgraded and (b) weighting each connection with a success rate that indicates the probability that the version will be successfully upgraded to the subsequent version, and (3) an analysis module that identifies, from among the possible upgrade paths, an optimal upgrade path for upgrading the application from the initial version to the desired version based on an analysis of both the combined weight and the combined length of the connections within each possible upgrade path. In addition, the system may include at least one processor that executes the identification module, the determination module, and the analysis module.
In some examples, the above-described method may be encoded as computer-readable instructions on a non-transitory computer-readable medium. For example, a computer-readable medium may include one or more computer-executable instructions that, when executed by at least one processor of a computing device, may cause the computing device to (1) identify each version of an application, (2) determine possible upgrade paths to upgrade the application from an initial version of the application to a desired version of the application by, for each version of the application (a) creating a connection between the version and each subsequent version to which the version can be upgraded and (b) weighting each connection with a success rate that indicates the probability that the version will be successfully upgraded to the subsequent version, and (3) identify, from among the possible upgrade paths, an optimal upgrade path for upgrading the application from the initial version to the desired version based on an analysis of both the combined weight and the combined length of the connections within each possible upgrade path.
Features from any of the above-mentioned embodiments may be used in combination with one another in accordance with the general principles described herein. These and other embodiments, features, and advantages will be more fully understood upon reading the following detailed description in conjunction with the accompanying drawings and claims.
The accompanying drawings illustrate a number of exemplary embodiments and are a part of the specification. Together with the following description, these drawings demonstrate and explain various principles of the instant disclosure.
Throughout the drawings, identical reference characters and descriptions indicate similar, but not necessarily identical, elements. While the exemplary embodiments described herein are susceptible to various modifications and alternative forms, specific embodiments have been shown by way of example in the drawings and will be described in detail herein. However, the exemplary embodiments described herein are not intended to be limited to the particular forms disclosed. Rather, the instant disclosure covers all modifications, equivalents, and alternatives falling within the scope of the appended claims.
The present disclosure is generally directed to systems and methods for updating applications. As will be explained in greater detail below, by determining the probability of successfully updating versions of an application to subsequent versions, the disclosed systems and methods may identify possible upgrade paths to upgrade an initial version of an application to a desired version. In addition, by analyzing both the total weight and total length of each upgrade path, the described systems and methods may identify an optimal upgrade path that efficiently and successfully upgrades the initial version to the desired version.
The following will provide, with reference to
In addition, and as will be described in greater detail below, exemplary system 100 may include an analysis module 108 that identifies, from among the possible upgrade paths, an optimal upgrade path for upgrading the application from the initial version to the desired version based on an analysis of both the combined weight and the combined length of the connections within each possible upgrade path. Furthermore, exemplary system 100 may include an upgrade module 110 that, in response to identifying the optimal upgrade path, uses the optimal upgrade path to upgrade the application from the initial version to the desired version. Although illustrated as separate elements, one or more of modules 102 in
In certain embodiments, one or more of modules 102 in
Exemplary system 100 in
In one embodiment, one or more of modules 102 from
Computing devices 202(1)-(N) generally represent any type or form of computing device capable of reading computer-executable instructions. In some examples, one or more of computing devices 202(1)-(N) may attempt to upgrade an initial version of an application installed on the computing device to a desired version of the application. Examples of computing devices 202(1)-(N) include, without limitation, laptops, tablets, desktops, servers, cellular phones, Personal Digital Assistants (PDAs), multimedia players, embedded systems, wearable devices (e.g., smart watches, smart glasses, etc.), gaming consoles, combinations of one or more of the same, exemplary computing system 710 in
Server 206 generally represents any type or form of computing device that is capable of identifying and analyzing connections between versions of an application. Examples of server 206 include, without limitation, application servers and database servers configured to provide various database services and/or run certain software applications.
Network 204 generally represents any medium or architecture capable of facilitating communication or data transfer. Examples of network 204 include, without limitation, an intranet, a Wide Area Network (WAN), a Local Area Network (LAN), a Personal Area Network (PAN), the Internet, Power Line Communications (PLC), a cellular network (e.g., a Global System for Mobile Communications (GSM) network), exemplary network architecture 800 in
As illustrated in
The term “application,” as used herein, generally refers to any type or form of software, file, or executable code that may be installed, run, deployed, or otherwise implemented on a computing system. Examples of applications include, without limitation, web browsers, operating systems, communication applications, word and number processing applications, gaming applications, security applications, cloud-based applications, and media applications.
In addition, the term “application version,” as used herein, generally refers to any type or form of variant of an application. In some examples, an application version may represent substantially similar functionality as other versions of the same application but may differ in certain features or elements. Furthermore, in some embodiments, an application version may be upgraded to one or more additional application versions.
The systems described herein may identify each version of an application in a variety of ways. In some examples, identification module 104 may identify application versions 208 by searching a database of applications. In other examples, identification module 104 may perform a web search for each version of an application. Additionally or alternatively, identification module 104 may receive user input that indicates application versions 208 and/or determine that a user or computing device is attempting to upgrade an instance of the application.
In some embodiments, identification module 104 may identify each version of an application that has been created. However, in other embodiments, identification module 104 may conserve time and/or computing resources by only identifying versions of an application that are relevant to upgrading a particular version. For example, identification module 104 may only identify versions that have been created subsequently to the particular version. In addition, identification module 104 may only identify versions that exceed a certain threshold of use (e.g., versions that have been downloaded and/or installed more than a specified number of times).
As an example,
Returning to
The systems described herein may determine the possible upgrade paths in a variety of ways. In some examples, determination module 106 may determine upgrade paths 210 by first identifying possible upgrade steps (i.e., an upgrade from one version to another version) within application versions 208. For example, differences between each version may result in errors or incompatibilities when one version is upgraded to one or more other versions. Therefore, determination module 106 may determine which versions do not support upgrades to other versions. In some embodiments, determination module 106 may determine that certain types of upgrade steps (e.g., upgrading to a much higher version or “downgrading” an application to a lower version) are impossible. In addition, determination module 106 may identify particular combinations of applications that are not upgrade-compatible due to structural and/or functional differences between the applications.
Determination module 106 may identify possible upgrade steps in a variety of ways. For example, determination module 106 may analyze application versions 208 to determine possible upgrade steps, receive user input that indicates possible upgrade steps, obtain historical data that indicates the possible upgrade steps, and/or identify the possible upgrade steps in any suitable manner.
In some examples, once determination module 106 has identified a possible upgrade step, determination module 106 may store and/or indicate the upgrade step by creating one of connections 212 between the versions involved in the upgrade step. As an example,
Once determination module 106 has identified connections 212, determination module 106 may identify upgrade paths 210 that may be used to upgrade the initial version to the desired version. For example, determination module 106 may identify each series or sequence of upgrade steps that may be applied to the initial version in order to reach the desired version. In some examples, determination module 106 may identify the initial version and the desired version by receiving user input specifying the initial and desired versions and/or by detecting that a user is attempting to upgrade the initial version to the desired version on a computing device (e.g., one of computing devices 202(1)-(N)). In other examples, determination module 106 may identify all possible combinations of initial and desired versions (e.g., in order to improve multiple upgrade paths associated with the application).
Referring again to the example of
In addition to identifying connections 212 and upgrade paths 210, determination module 106 may weight some or all of connections 212 with a success rate that indicates the probability that the upgrade step represented by the connection will be successful. The term “success rate,” as used herein, generally refers to any type or form of measurement, calculation, or prediction that indicates a ratio, percentage, or probability that performing an upgrade step on a computing device will result in a fully-functional version of the application. A success rate may be represented by a fraction, a percentage, a number between zero and one, or any additional numerical representation.
In some examples, a connection may be weighted with a success rate based on the connection representing an upgrade step that is possible in some circumstances but not others. For example, an upgrade step involving two normally compatible versions may not be possible on a computing device that does not have enough storage space to host the higher version and/or on a computing device that does not have one or more required supporting applications installed. In these examples, the success rate may indicate the percentage of computing devices that are capable of supporting the higher version. In other examples, errors or bugs within one or more application versions may make some instances of a particular upgrade step impossible. In these examples, the success rate may indicate the probability that problems within the versions will not interfere with performing the upgrade. In further embodiments, performing an upgrade step may result in a partially-functional version of the application. For example, after the upgrade is completed, some features of the higher version may have impaired functionality, while other features may function as expected. In this example, the success rate may indicate the portion of the higher version expected to be fully-functional after performing the upgrade step. In some examples, determination module 106 may weight connections 212 based on a combination of any of the above-described success metrics and/or any suitable success metric.
Determination module 106 may obtain success rates for connections 212 in a variety of manners. For example, determination module 106 may analyze application versions 208 to predict the success rates. In another example, determination module 106 may obtain the success rates by receiving historical data that indicates the success of performing an upgrade step on at least one computing device (e.g., one of computing devices 202(1)-(N)). In this example, determination module 106 may receive the historical data by triggering the computing device to send the historical data in response to detecting the upgrade. For example, a portion of determination module 106, installed on computing devices 202(1)-(N), may direct one or more of computing devices 202(1)-(N) to identify upgrade steps performed on the computing device. In addition, determination module 106 may determine and report to server 206 the degree to which the upgrade step was successful.
In some examples, computing devices 202(1)-(N) may represent clients or customers of the application to be upgraded. In this way, the systems described herein may determine optimal upgrade paths based on accurate, up-to-date information from actual users.
Furthermore, in some embodiments, determination module 106 may obtain a success rate for each of connections 212. However, in other embodiments, determination module 106 may conserve computing resources by only obtaining success rates for connections within upgrade paths 210. Notably, in some examples, determination module 106 may be unable to obtain success rates for one or more of connections 212. Therefore, in these examples determination module 106 may not assign a success rate to connections 212 or determination module 106 may assign each of connections 212 a success weight of “1”.
Referring again to the example of
Returning to
The systems described herein may identify the optimal upgrade path in a variety of ways. In some examples, analysis module 108 may analyze each of upgrade paths 210 by accumulating the success rate of each connection within the upgrade path. For example, analysis module 108 may multiply the probabilities used to weight each connection. Specifically, analysis module 108 may implement the formula ES=Πi+1npi, where ES represents the total success rate of an upgrade path, n represents the number of steps within the upgrade path, and pi represents the success rate of each step.
As an example of the implementation of this formula, upgrade path summaries 600 in
In some examples, analysis module 108 may identify optimal upgrade path 214 by identifying a possible upgrade path with the largest combined weight. For example, after calculating the total path success rate for each of upgrade paths 210, analysis module 108 may identify optimal upgrade path 214 as the upgrade path with the highest total path success rate. In the example of
Additionally or alternatively, analysis module 108 may identify the possible upgrade path with the largest combined weight by analyzing upgrade paths 210 using a shortest-path algorithm. The term “shortest-path algorithm,” as used herein, generally refers to any type or form of technique, process, or formula that identifies an optimal path between two vertices or nodes in a graph. In some examples, a shortest-path algorithm identifies an optimal path such that the total weight of each edge (or connection between vertices) in the path is minimized. However, as applied to the problem of identifying optimal upgrade path 214, analysis module 108 may implement a shortest-path algorithm that identifies a path that maximizes the total weight of each edge (i.e., using a longest-path algorithm or inverting the success rates assigned to each connection). The formula described above may represent a simple implementation of a shortest-path algorithm. In additional examples, analysis module 108 may analyze upgrade paths 210 using one or more of a variety of shortest-path algorithms, such as Dijkstra's algorithm, a Bellman-Ford algorithm, Johnson's algorithm, or an A* algorithm.
In addition to calculating the combined weight of each of upgrade paths 210, analysis module 108 may identify optimal upgrade path 214 at least in part by calculating the combined length of each possible upgrade path. For example, analysis module 108 may identify the number of connections or steps within each of upgrade paths 210. Notably, in an example where determination module 106 is unable to obtain a success rate for one or more of connections 212 and therefore weights each of connections 212 with a success rate of “1”, analysis module 108 may simply identify optimal upgrade path 214 as the shortest possible upgrade path.
Referring again to the example of
In some examples, the upgrade path with the largest combined weight may also represent the upgrade path with the shortest combined length. In these examples, analysis module 108 may simply identify that upgrade path as optimal upgrade path 214. However, in other examples (such as the example of
Analysis module 108 may analyze both the combined weight and the combined length of upgrade paths 210 in a variety of ways. In one example, analysis module 108 may identify optimal upgrade path 214 as the upgrade path with the largest combined weight that also contains a number of steps under a predetermined threshold (e.g., four steps). Referring to the example of
In another embodiment, analysis module 108 may calculate a total numerical measure of the combined weight and combined length of upgrade paths 210. As one example, analysis module 108 may decrease the combined weight of an upgrade path at an amount proportional to the number of steps within the path. As an additional example, analysis module 108 may calculate an average of the combined weight and combined length of each upgrade path (e.g., by first normalizing the combined length and combined length with respect to each other). In general, analysis module 108 may identify optimal upgrade path 214 using a combination of any of the above-described examples and/or any additional analyses.
In addition, in some examples the systems described herein may upgrade the application using optimal upgrade path 214. For example, if determination module 106 identified the initial version of the application on one of computing devices 202(1)-(N), upgrade module 110 may upgrade the application to the desired version on the computing device by following the upgrade steps within optimal upgrade path 214. In some examples, upgrade module 110 may direct a user of the computing device to perform the upgrade steps. In other examples, upgrade module 110 may automatically perform the upgrade steps on the computing device.
The systems described herein may be implemented in a variety of ways and provide a number of advantages. As explained above, by determining the probability of successfully updating versions of an application to subsequent versions, the disclosed systems and methods may identify possible upgrade paths to upgrade an initial version of an application to a desired version. In addition, by analyzing both the total weight and total length of each upgrade path, the described systems and methods may identify an optimal upgrade path that efficiently and successfully upgrades the initial version to the desired version.
Computing system 710 broadly represents any single or multi-processor computing device or system capable of executing computer-readable instructions. Examples of computing system 710 include, without limitation, workstations, laptops, client-side terminals, servers, distributed computing systems, handheld devices, or any other computing system or device. In its most basic configuration, computing system 710 may include at least one processor 714 and a system memory 716.
Processor 714 generally represents any type or form of physical processing unit (e.g., a hardware-implemented central processing unit) capable of processing data or interpreting and executing instructions. In certain embodiments, processor 714 may receive instructions from a software application or module. These instructions may cause processor 714 to perform the functions of one or more of the exemplary embodiments described and/or illustrated herein.
System memory 716 generally represents any type or form of volatile or non-volatile storage device or medium capable of storing data and/or other computer-readable instructions. Examples of system memory 716 include, without limitation, Random Access Memory (RAM), Read Only Memory (ROM), flash memory, or any other suitable memory device. Although not required, in certain embodiments computing system 710 may include both a volatile memory unit (such as, for example, system memory 716) and a non-volatile storage device (such as, for example, primary storage device 732, as described in detail below). In one example, one or more of modules 102 from
In certain embodiments, exemplary computing system 710 may also include one or more components or elements in addition to processor 714 and system memory 716. For example, as illustrated in
Memory controller 718 generally represents any type or form of device capable of handling memory or data or controlling communication between one or more components of computing system 710. For example, in certain embodiments memory controller 718 may control communication between processor 714, system memory 716, and I/O controller 720 via communication infrastructure 712.
I/O controller 720 generally represents any type or form of module capable of coordinating and/or controlling the input and output functions of a computing device. For example, in certain embodiments I/O controller 720 may control or facilitate transfer of data between one or more elements of computing system 710, such as processor 714, system memory 716, communication interface 722, display adapter 726, input interface 730, and storage interface 734.
Communication interface 722 broadly represents any type or form of communication device or adapter capable of facilitating communication between exemplary computing system 710 and one or more additional devices. For example, in certain embodiments communication interface 722 may facilitate communication between computing system 710 and a private or public network including additional computing systems. Examples of communication interface 722 include, without limitation, a wired network interface (such as a network interface card), a wireless network interface (such as a wireless network interface card), a modem, and any other suitable interface. In at least one embodiment, communication interface 722 may provide a direct connection to a remote server via a direct link to a network, such as the Internet. Communication interface 722 may also indirectly provide such a connection through, for example, a local area network (such as an Ethernet network), a personal area network, a telephone or cable network, a cellular telephone connection, a satellite data connection, or any other suitable connection.
In certain embodiments, communication interface 722 may also represent a host adapter configured to facilitate communication between computing system 710 and one or more additional network or storage devices via an external bus or communications channel. Examples of host adapters include, without limitation, Small Computer System Interface (SCSI) host adapters, Universal Serial Bus (USB) host adapters, Institute of Electrical and Electronics Engineers (IEEE) 1394 host adapters, Advanced Technology Attachment (ATA), Parallel ATA (PATA), Serial ATA (SATA), and External SATA (eSATA) host adapters, Fibre Channel interface adapters, Ethernet adapters, or the like. Communication interface 722 may also allow computing system 710 to engage in distributed or remote computing. For example, communication interface 722 may receive instructions from a remote device or send instructions to a remote device for execution.
As illustrated in
As illustrated in
As illustrated in
In certain embodiments, storage devices 732 and 733 may be configured to read from and/or write to a removable storage unit configured to store computer software, data, or other computer-readable information. Examples of suitable removable storage units include, without limitation, a floppy disk, a magnetic tape, an optical disk, a flash memory device, or the like. Storage devices 732 and 733 may also include other similar structures or devices for allowing computer software, data, or other computer-readable instructions to be loaded into computing system 710. For example, storage devices 732 and 733 may be configured to read and write software, data, or other computer-readable information. Storage devices 732 and 733 may also be a part of computing system 710 or may be a separate device accessed through other interface systems.
Many other devices or subsystems may be connected to computing system 710. Conversely, all of the components and devices illustrated in
The computer-readable medium containing the computer program may be loaded into computing system 710. All or a portion of the computer program stored on the computer-readable medium may then be stored in system memory 716 and/or various portions of storage devices 732 and 733. When executed by processor 714, a computer program loaded into computing system 710 may cause processor 714 to perform and/or be a means for performing the functions of one or more of the exemplary embodiments described and/or illustrated herein. Additionally or alternatively, one or more of the exemplary embodiments described and/or illustrated herein may be implemented in firmware and/or hardware. For example, computing system 710 may be configured as an Application Specific Integrated Circuit (ASIC) adapted to implement one or more of the exemplary embodiments disclosed herein.
Client systems 810, 820, and 830 generally represent any type or form of computing device or system, such as exemplary computing system 710 in
As illustrated in
Servers 840 and 845 may also be connected to a Storage Area Network (SAN) fabric 880. SAN fabric 880 generally represents any type or form of computer network or architecture capable of facilitating communication between a plurality of storage devices. SAN fabric 880 may facilitate communication between servers 840 and 845 and a plurality of storage devices 890(1)-(N) and/or an intelligent storage array 895. SAN fabric 880 may also facilitate, via network 850 and servers 840 and 845, communication between client systems 810, 820, and 830 and storage devices 890(1)-(N) and/or intelligent storage array 895 in such a manner that devices 890(1)-(N) and array 895 appear as locally attached devices to client systems 810, 820, and 830. As with storage devices 860(1)-(N) and storage devices 870(1)-(N), storage devices 890(1)-(N) and intelligent storage array 895 generally represent any type or form of storage device or medium capable of storing data and/or other computer-readable instructions.
In certain embodiments, and with reference to exemplary computing system 710 of
In at least one embodiment, all or a portion of one or more of the exemplary embodiments disclosed herein may be encoded as a computer program and loaded onto and executed by server 840, server 845, storage devices 860(1)-(N), storage devices 870(1)-(N), storage devices 890(1)-(N), intelligent storage array 895, or any combination thereof. All or a portion of one or more of the exemplary embodiments disclosed herein may also be encoded as a computer program, stored in server 840, run by server 845, and distributed to client systems 810, 820, and 830 over network 850.
As detailed above, computing system 710 and/or one or more components of network architecture 800 may perform and/or be a means for performing, either alone or in combination with other elements, one or more steps of an exemplary method for updating applications.
While the foregoing disclosure sets forth various embodiments using specific block diagrams, flowcharts, and examples, each block diagram component, flowchart step, operation, and/or component described and/or illustrated herein may be implemented, individually and/or collectively, using a wide range of hardware, software, or firmware (or any combination thereof) configurations. In addition, any disclosure of components contained within other components should be considered exemplary in nature since many other architectures can be implemented to achieve the same functionality.
In some examples, all or a portion of exemplary system 100 in
In various embodiments, all or a portion of exemplary system 100 in
According to various embodiments, all or a portion of exemplary system 100 in
In some examples, all or a portion of exemplary system 100 in
In addition, all or a portion of exemplary system 100 in
In some embodiments, all or a portion of exemplary system 100 in
According to some examples, all or a portion of exemplary system 100 in
The process parameters and sequence of steps described and/or illustrated herein are given by way of example only and can be varied as desired. For example, while the steps illustrated and/or described herein may be shown or discussed in a particular order, these steps do not necessarily need to be performed in the order illustrated or discussed. The various exemplary methods described and/or illustrated herein may also omit one or more of the steps described or illustrated herein or include additional steps in addition to those disclosed.
While various embodiments have been described and/or illustrated herein in the context of fully functional computing systems, one or more of these exemplary embodiments may be distributed as a program product in a variety of forms, regardless of the particular type of computer-readable media used to actually carry out the distribution. The embodiments disclosed herein may also be implemented using software modules that perform certain tasks. These software modules may include script, batch, or other executable files that may be stored on a computer-readable storage medium or in a computing system. In some embodiments, these software modules may configure a computing system to perform one or more of the exemplary embodiments disclosed herein.
In addition, one or more of the modules described herein may transform data, physical devices, and/or representations of physical devices from one form to another. For example, one or more of the modules recited herein may receive information associated with the success rates of upgrading versions of an application, transform the information, store the result of the transformation for analysis, and use result of the transformation to identify an optimal upgrade path. Additionally or alternatively, one or more of the modules recited herein may transform a processor, volatile memory, non-volatile memory, and/or any other portion of a physical computing device from one form to another by executing on the computing device, storing data on the computing device, and/or otherwise interacting with the computing device.
The preceding description has been provided to enable others skilled in the art to best utilize various aspects of the exemplary embodiments disclosed herein. This exemplary description is not intended to be exhaustive or to be limited to any precise form disclosed. Many modifications and variations are possible without departing from the spirit and scope of the instant disclosure. The embodiments disclosed herein should be considered in all respects illustrative and not restrictive. Reference should be made to the appended claims and their equivalents in determining the scope of the instant disclosure.
Unless otherwise noted, the terms “connected to” and “coupled to” (and their derivatives), as used in the specification and claims, are to be construed as permitting both direct and indirect (i.e., via other elements or components) connection. In addition, the terms “a” or “an,” as used in the specification and claims, are to be construed as meaning “at least one of.” Finally, for ease of use, the terms “including” and “having” (and their derivatives), as used in the specification and claims, are interchangeable with and have the same meaning as the word “comprising.”
Number | Name | Date | Kind |
---|---|---|---|
7076496 | Ruizandrade | Jul 2006 | B1 |
8701144 | Shin et al. | Apr 2014 | B2 |
8705050 | Sinha | Apr 2014 | B2 |
8705401 | Croak et al. | Apr 2014 | B1 |
8706177 | Norris et al. | Apr 2014 | B2 |
8706576 | Balasubramaniam et al. | Apr 2014 | B1 |
8706800 | Ahmed et al. | Apr 2014 | B1 |
8706921 | Zadigian et al. | Apr 2014 | B2 |
8707297 | Brown et al. | Apr 2014 | B2 |
8711704 | Werb et al. | Apr 2014 | B2 |
8712968 | Chester et al. | Apr 2014 | B1 |
8712970 | Sim-Tang | Apr 2014 | B1 |
8713137 | Ji et al. | Apr 2014 | B2 |
8713147 | Ferris et al. | Apr 2014 | B2 |
8713201 | Smith et al. | Apr 2014 | B2 |
8713295 | Bax et al. | Apr 2014 | B2 |
8713616 | Kim et al. | Apr 2014 | B2 |
8713674 | Geide | Apr 2014 | B1 |
8717443 | Kaehler et al. | May 2014 | B2 |
8718620 | Rosenblatt | May 2014 | B2 |
8719339 | Reisman | May 2014 | B2 |
8719413 | Sasso et al. | May 2014 | B1 |
8719559 | Aloni et al. | May 2014 | B2 |
8719809 | Gokhale | May 2014 | B2 |
8719810 | Oh | May 2014 | B2 |
8721448 | Crowder, Jr. et al. | May 2014 | B2 |
8723667 | White, II | May 2014 | B2 |
8724489 | Rinne et al. | May 2014 | B2 |
8724605 | Zhang et al. | May 2014 | B2 |
8724612 | Al-Khudairi | May 2014 | B2 |
8725063 | Krampf et al. | May 2014 | B2 |
8725081 | Kantzes et al. | May 2014 | B2 |
8725126 | Ramer et al. | May 2014 | B2 |
8725507 | Cortez et al. | May 2014 | B2 |
8725610 | Wookey et al. | May 2014 | B1 |
8725663 | Triantaphyllou et al. | May 2014 | B1 |
8726149 | Bendelac et al. | May 2014 | B2 |
8726259 | Juneja | May 2014 | B2 |
8726266 | Kiaie et al. | May 2014 | B2 |
8726267 | Li et al. | May 2014 | B2 |
8726303 | Ellis, III | May 2014 | B2 |
8726374 | Unagami et al. | May 2014 | B2 |
8727604 | Compton et al. | May 2014 | B2 |
8727886 | McTernan et al. | May 2014 | B2 |
8729857 | Stahlin et al. | May 2014 | B2 |
8730502 | Burke, Jr. | May 2014 | B2 |
8731211 | Burnett | May 2014 | B2 |
8731773 | Yousefi et al. | May 2014 | B2 |
8732023 | Mikurak | May 2014 | B2 |
8732031 | Martin et al. | May 2014 | B2 |
8732230 | Ellis, III | May 2014 | B2 |
8732238 | Steakley | May 2014 | B2 |
8732324 | Weis | May 2014 | B2 |
8732484 | Segawa | May 2014 | B2 |
8732677 | Bohle | May 2014 | B2 |
8732693 | Mutisya et al. | May 2014 | B2 |
8732850 | Gudenus et al. | May 2014 | B2 |
8734259 | Evans et al. | May 2014 | B2 |
8734718 | Dacey, Jr. et al. | May 2014 | B2 |
8736482 | Wu et al. | May 2014 | B2 |
8737379 | Gresset et al. | May 2014 | B2 |
8737798 | Dodd | May 2014 | B2 |
8737972 | Ramer et al. | May 2014 | B2 |
8738004 | Amirijoo et al. | May 2014 | B2 |
8738094 | Velusamy et al. | May 2014 | B2 |
8738708 | Chasin | May 2014 | B2 |
8738751 | Long et al. | May 2014 | B2 |
8738775 | Adogla et al. | May 2014 | B1 |
8738966 | Hopper | May 2014 | B2 |
8739059 | Rabenold et al. | May 2014 | B2 |
8739128 | Cohen et al. | May 2014 | B1 |
8739149 | Tackett et al. | May 2014 | B2 |
8739151 | Racz et al. | May 2014 | B1 |
8739153 | Keys et al. | May 2014 | B2 |
8739155 | Hehir et al. | May 2014 | B2 |
8739195 | Ellis, III | May 2014 | B2 |
8739288 | Diamant et al. | May 2014 | B2 |
8739308 | Roth et al. | May 2014 | B1 |
8742926 | Schnittman et al. | Jun 2014 | B2 |
8743741 | Mueller et al. | Jun 2014 | B2 |
8743856 | Lee et al. | Jun 2014 | B2 |
8743878 | Gavrilov | Jun 2014 | B2 |
8744087 | Bodley et al. | Jun 2014 | B2 |
8744860 | Chang et al. | Jun 2014 | B2 |
8744898 | Hewett et al. | Jun 2014 | B1 |
8745153 | Gharabally et al. | Jun 2014 | B2 |
8745154 | Froment et al. | Jun 2014 | B1 |
8745191 | Raleigh et al. | Jun 2014 | B2 |
8745213 | Dare et al. | Jun 2014 | B2 |
8745220 | Raleigh et al. | Jun 2014 | B2 |
8745225 | Erman et al. | Jun 2014 | B2 |
8745610 | Sasaki | Jun 2014 | B2 |
8745611 | Saraf et al. | Jun 2014 | B2 |
8745613 | Bambach et al. | Jun 2014 | B2 |
8745636 | Quintanilla et al. | Jun 2014 | B2 |
8745735 | Maeda et al. | Jun 2014 | B2 |
20020144254 | Owada | Oct 2002 | A1 |
20050132350 | Markley | Jun 2005 | A1 |
20050193382 | Goring | Sep 2005 | A1 |
20060200814 | Kontinen | Sep 2006 | A1 |
20070061800 | Cheng | Mar 2007 | A1 |
20080005732 | Coon | Jan 2008 | A1 |
20090150878 | Pathak | Jun 2009 | A1 |
20100082847 | Yasui | Apr 2010 | A1 |
20120210312 | Ma | Aug 2012 | A1 |
20130139139 | Mallur | May 2013 | A1 |
20140013318 | Rychikhin | Jan 2014 | A1 |
20140155173 | Petersen et al. | Jun 2014 | A1 |
20140155705 | Papadopoulos et al. | Jun 2014 | A1 |
20140155708 | Petersen et al. | Jun 2014 | A1 |
20140155715 | Chen et al. | Jun 2014 | A1 |
20140155771 | Quick et al. | Jun 2014 | A1 |
20140156025 | Bisbee, III et al. | Jun 2014 | A1 |
20140156081 | Ha | Jun 2014 | A1 |
20140156082 | Ha | Jun 2014 | A1 |
20140156317 | Eijdenberg et al. | Jun 2014 | A1 |
20140156343 | Olsen et al. | Jun 2014 | A1 |
20140156360 | Shalita et al. | Jun 2014 | A1 |
20140156372 | Postrel | Jun 2014 | A1 |
20140156374 | Henry, Jr. et al. | Jun 2014 | A1 |
20140156437 | Baran et al. | Jun 2014 | A1 |
20140156500 | Lassen et al. | Jun 2014 | A1 |
20140156503 | Lassen et al. | Jun 2014 | A1 |
20140156515 | Bailey, Jr. | Jun 2014 | A1 |
20140156540 | Williams et al. | Jun 2014 | A1 |
20140156542 | McKeown | Jun 2014 | A1 |
20140156641 | Tripoli et al. | Jun 2014 | A1 |
20140156710 | VanGompel | Jun 2014 | A1 |
20140156742 | Liu et al. | Jun 2014 | A1 |
20140156783 | Matthews et al. | Jun 2014 | A1 |
20140156784 | Buck | Jun 2014 | A1 |
20140156806 | Karpistsenko et al. | Jun 2014 | A1 |
20140156824 | Biswas et al. | Jun 2014 | A1 |
20140156836 | Demmer et al. | Jun 2014 | A1 |
20140156851 | Suami et al. | Jun 2014 | A1 |
20140156869 | Smith et al. | Jun 2014 | A1 |
20140156883 | Bowles | Jun 2014 | A1 |
20140156927 | Mori et al. | Jun 2014 | A1 |
20140156953 | Adl-Tabatabai et al. | Jun 2014 | A1 |
20140156992 | Medin et al. | Jun 2014 | A1 |
20140157099 | Abdukalykov et al. | Jun 2014 | A1 |
20140157127 | Erickson, Jr. et al. | Jun 2014 | A1 |
20140157231 | Cai et al. | Jun 2014 | A1 |
20140157244 | Windley et al. | Jun 2014 | A1 |
20140157250 | Weckwerth et al. | Jun 2014 | A1 |
20140157251 | Hocker et al. | Jun 2014 | A1 |
20140157252 | Weckwerth et al. | Jun 2014 | A1 |
20140157253 | Padhy et al. | Jun 2014 | A1 |
20140157255 | Chan et al. | Jun 2014 | A1 |
20140157256 | Marshall et al. | Jun 2014 | A1 |
20140157264 | Russinovich et al. | Jun 2014 | A1 |
20140157270 | DeLuca et al. | Jun 2014 | A1 |
20140157273 | Axnix et al. | Jun 2014 | A1 |
20140157274 | Ballani | Jun 2014 | A1 |
20140157279 | Horikawa | Jun 2014 | A1 |
20140157280 | Yamauchi et al. | Jun 2014 | A1 |
20140157283 | Maclinovsky et al. | Jun 2014 | A1 |
20140157295 | Jagtiani et al. | Jun 2014 | A1 |
20140157297 | Chao et al. | Jun 2014 | A1 |
20140157298 | Murphy | Jun 2014 | A1 |
20140157299 | Alcala et al. | Jun 2014 | A1 |
20140157304 | Fay et al. | Jun 2014 | A1 |
20140157306 | Deo et al. | Jun 2014 | A1 |
20140157309 | Small et al. | Jun 2014 | A1 |
20140157322 | Corl | Jun 2014 | A1 |
20140157324 | Mao et al. | Jun 2014 | A1 |
20140157335 | Hicks, III et al. | Jun 2014 | A1 |
20140157336 | Deegan et al. | Jun 2014 | A1 |
20140157341 | Malin et al. | Jun 2014 | A1 |
20140157352 | Paek et al. | Jun 2014 | A1 |
20140157355 | Clancy, III et al. | Jun 2014 | A1 |
20140157365 | Janakiraman et al. | Jun 2014 | A1 |
20140157369 | Mischook et al. | Jun 2014 | A1 |
20140157370 | Plattner et al. | Jun 2014 | A1 |
20140157372 | Shimizu | Jun 2014 | A1 |
20140157374 | Kato et al. | Jun 2014 | A1 |
20140157376 | Nambiar et al. | Jun 2014 | A1 |
20140157379 | Murarka | Jun 2014 | A1 |
20140157380 | Abrams et al. | Jun 2014 | A1 |
20140157381 | Disraeli | Jun 2014 | A1 |
20140157384 | Stern et al. | Jun 2014 | A1 |
20140157387 | Lee et al. | Jun 2014 | A1 |
20140157390 | Lurey et al. | Jun 2014 | A1 |
20140157393 | Whitcomb | Jun 2014 | A1 |
20140157397 | Dalal et al. | Jun 2014 | A1 |
20140157398 | McKinney | Jun 2014 | A1 |
20140157405 | Joll et al. | Jun 2014 | A1 |
20140157407 | Krishnan et al. | Jun 2014 | A1 |
20140157408 | Mei et al. | Jun 2014 | A1 |
20140157410 | Dewan et al. | Jun 2014 | A1 |
20140157416 | Holloway et al. | Jun 2014 | A1 |
20140157417 | Grubel et al. | Jun 2014 | A1 |
20140157422 | Livshits et al. | Jun 2014 | A1 |
20140157438 | Seleznev et al. | Jun 2014 | A1 |
20140185531 | Liu et al. | Jul 2014 | A1 |
20140196020 | Shetty | Jul 2014 | A1 |
20140201726 | Asselin | Jul 2014 | A1 |
20140208304 | Subramanya et al. | Jul 2014 | A1 |
20140304697 | Lin | Oct 2014 | A1 |
20140337825 | Challa | Nov 2014 | A1 |
20150020061 | Ravi | Jan 2015 | A1 |
Entry |
---|
Gianlorenzo D' Angelo, Partially Dynamic Concurrent Update of Distributed Shortest Paths, 2007, pp. 1-7. |
Sushant S. Khopkar, An Efficient Map-Reduce Algorithm for the Incremental Computation of All-Pairs Shortest Paths in Social Networks, 2012, pp. 1-5. |
Jianfeng Yan, Support Multi-version Applications in SaaS via Progressive Schema Evolution, 2009, pp. 1-8. |
Sourabh Satish, et al; Systems and Methods for Replicating Computing System Environments; U.S. Appl. No. 14/269,145, filed May 4, 2014. |
“Shortest path problem”, http://en.wikipedia.org/wiki/Shortest—path—problem, as accessed Apr. 21, 2014, Wikipedia, (Dec. 29, 2003). |
“Longest path problem”, http://en.wikipedia.org/wiki/Longest—path—problem, as accessed Apr. 21, 2014, Wikipedia, (Apr. 26, 2009). |