Candidate set solver with user advice
Summary by NHIP
Constraint-based node allocation
The system prioritizes display of compute nodes based on their unsatisfied constraint counts within a constraint tree. It associates each node with specific user actions that either satisfy ignored constraints or modify conditions to meet them before allocation occurs.
Claim Score by NHIP
Abstract
A stream application uses small chunks of executable code configured to process data tuples flowing into a processing element. A scheduler allocates the processing elements to individual compute nodes or hosts for execution. However, the stream application may assign various constraints that stipulate which hosts are suitable for a particular processing element. If a host meets the constraints, it may be categorized as an unconditional candidate host. In addition, the scheduler may also track conditional candidate hosts that would be suitable for the processing element if a certain user action is performed—e.g., modifying a constraint, removing a constraint, modifying a stream element, and the like. The list of conditional candidate hosts may then be displayed to the user who can choose to perform the one or more actions to change the conditional candidate host to an unconditional candidate host for the processing element.

Term
Projected expiry 11 February 2032.
- Priority and filed
- Granted
- Today
- Projected expiry
14 claims: 4 independent, 10 dependent
- 1A computer program product for allocating a processing element selected from a plurality of processing elements to one of a first and a second compute nodes, the computer program product comprising:a non-transitory computer-readable storage medium having computer-readable program code embodied therewith, the computer-readable program code configured to: prioritize for display an indication of the first compute node and an indication of the second compute node based on a respective total number of unsatisfied constraints associated with the first and second compute nodes, wherein the respective unsatisfied constraints are selected from a plurality of constraints in a constraint tree;associate the first compute node and the second compute node with respective user actions, wherein each user action at least one of: (i) changes a condition such that the associated compute node satisfies an unsatisfied constraint and (ii) instructs that the unsatisfied constraint of the associated compute node be ignored;upon determining the first and second compute nodes satisfy at least one constraint in the constraint tree, transmitting for prioritized display the indication of the first compute node and the associated user actions and the indication of the second compute node and the associated user actions;and responsive to the user performing at least one of the respective user actions, allocate the processing element to the first or second compute node associated with the performed user action.
- 7A computer program product for allocating a processing element selected from a plurality of processing elements to one of at least two compute nodes, the computer program product comprising:a non-transitory computer-readable storage medium having computer-readable program code embodied therewith, the computer-readable program code configured to: compare a first compute node of the at least two compute nodes to a first constraint associated with a first level of a constraint tree, the first constraint determining whether the first compute node can be allocated to the processing element;if the first compute node does not satisfy the first constraint, determine whether the first compute node satisfies a second constraint of the constraint tree;if the first compute node does satisfy the second constraint, transmitting for display a user action that at least one of (i) changes a condition such that the first compute node satisfies the first constraint and (ii) instructs the first constraint to be ignored;after the user action is performed, allocate the processing element to the first compute node;determine if the first compute node satisfies other constraints associated with the constraint tree;determine a total number of unsatisfied constraints associated with the first compute node;determine for a second compute node of the at least two compute nodes a total number of unsatisfied constraints, wherein the second compute node is compared to the same constraints as that of the first compute node;and prioritize for display an indication of the first compute node and an indication of second compute node based on the respective total number of unsatisfied constraints for the first compute node and second compute node.
- 8A system, comprising:a computer processor;and a memory containing a program that, when executed on the computer processor, performs an operation for allocating a processing element selected from a plurality of processing elements to one of a first and a second compute nodes, comprising: prioritizing for display an indication of the first compute node and an indication of the second compute node based on a respective total number of unsatisfied constraints associated with the first and second compute nodes, wherein the respective unsatisfied constraints are selected from a plurality of constraints in a constraint tree;associate the first compute node and the second compute node with respective user actions, wherein each user action at least one of: (i) changes a condition such that the associated compute node satisfies an unsatisfied constraint and (ii) instructs the unsatisfied constraint of the associated compute node to be ignored;upon determining the first and second compute nodes satisfy at least one constraint in the constraint tree, transmitting for prioritized display the indication of the first compute node and the associated user actions and the indication of the second compute node and the associated user actions;and responsive to the user performing at least one of the respective user actions, allocating, by operation of one or more computer processors, the processing element to the first or second compute node associated with the performed user action.
- 14Broadest claimClaim Score 38, average(NHIP)A system, comprising:a computer processor;and a memory containing a program that, when executed on the computer processor, performs an operation for allocating a processing element selected from a plurality of processing elements to a compute node, comprising: comparing the compute node to a first constraint associated with a first level of a constraint tree, the first constraint determining whether the compute node can be allocated to the processing element;if the compute node does not satisfy the first constraint, determining whether the compute node satisfies a second constraint of the constraint tree;if the compute node does satisfy the second constraint, transmitting for display a user action that at least one of (i) changes a condition such that the compute node satisfies the first constraint and (ii) instructs the first constraint to be ignored;and after the user action is performed, allocating, by operation of one or more computer processors, the processing element to the compute node;determining if the compute node satisfies other constraints associated with the constraint tree;determine a total number of unsatisfied constraints associated with the first compute node;determining for a different compute node a total number of unsatisfied constraints, wherein the different compute node is compared to the same constraints as that of the compute node;and prioritize for display an indication of the compute node and an indication of the different compute node based on the respective total number of unsatisfied constraints for the compute node and different compute node.
Independent claims4
100 paragraphs in 4 sections, as filed
BACKGROUND
1. Field of the Invention
Embodiments of the present invention generally relate to stream applications. Specifically, the invention relates to determining whether a processing element in a stream application may be allocated to a conditional candidate host for execution.
2. Description of the Related Art
While computer databases have become extremely sophisticated, the computing demands placed on database systems have also increased at a rapid pace. Database systems are typically configured to separate the process of storing data from accessing, manipulating or using data stored in the database. More specifically, databases use a model where data is first stored, then indexed, and finally queried. However, this model cannot meet the performance requirements of some real-time applications. For example, the rate at which a database system can receive and store incoming data limits how much data can be processed or otherwise evaluated. This, in turn, can limit the ability of database applications to process large amounts of data in real-time.
SUMMARY
Embodiments of the present invention generally relate to stream applications. Specifically, the invention relates to identifying potential candidate hosts for a processing element in a stream application.
Embodiments of the present invention include a computer-implemented method, system, and computer readable storage medium for allocating a processing element selected from a plurality of processing elements to a compute node. The method, system, and storage medium include comparing the compute node to a first constraint associated with a first level of a constraint tree. The first constraint determines whether the compute node can be allocated to the processing element. If the compute node does not satisfy the first constraint, the method, system, and storage medium also include determining whether the compute node satisfies a second constraint of the constraint tree. If the compute node does satisfy the second constraint, the method, system, and storage medium include transmitting for display a user action that at least one of (i) changes a condition such that the compute node satisfies the first constraint and (ii) instructs the first constraint to be ignored. After the user action is performed, the method, system, and storage medium allocate the processing element to the compute node.
BRIEF DESCRIPTION OF THE DRAWINGS
So that the manner in which the above recited aspects are attained and can be understood in detail, a more particular description of embodiments of the invention, briefly summarized above, may be had by reference to the appended drawings.
It is to be noted, however, that the appended drawings illustrate only typical embodiments of this invention and are therefore not to be considered limiting of its scope, for the invention may admit to other equally effective embodiments.
<figref idrefs="DRAWINGS">FIGS. 1A-1B</figref> illustrate a computing infrastructure configured to execute a stream application, according to one embodiment of the invention.
<figref idrefs="DRAWINGS">FIG. 2</figref> is a more detailed view of the hosts of <figref idrefs="DRAWINGS">FIGS. 1A-1B</figref>, according to one embodiment of the invention.
<figref idrefs="DRAWINGS">FIG. 3</figref> is a more detailed view of the management system of <figref idrefs="DRAWINGS">FIG. 1</figref>, according to one embodiment of the invention.
<figref idrefs="DRAWINGS">FIGS. 4A-4B</figref> illustrate tables detailing the assignment of hosts to hostpools, according to embodiments of the invention.
<figref idrefs="DRAWINGS">FIG. 5</figref> is a flow diagram illustrating the assignment of hosts to a processing element, according to embodiments of the invention.
<figref idrefs="DRAWINGS">FIG. 6</figref> illustrates a constraint tree for applying constraints, according to one embodiment of the invention.
<figref idrefs="DRAWINGS">FIG. 7A-7B</figref> illustrate determining conditional and unconditional candidate hosts using the constraint tree of <figref idrefs="DRAWINGS">FIG. 6</figref>, according to embodiments of the invention.
<figref idrefs="DRAWINGS">FIG. 8</figref> is a flow diagram illustrating the process of performing a user action to change a conditional candidate host to an unconditional candidate host, according to one embodiment of the invention.
<figref idrefs="DRAWINGS">FIG. 9</figref> is a flow diagram illustrating the process of performing a user action to change a conditional candidate host to an unconditional candidate host, according to one embodiment of the invention.
DETAILED DESCRIPTION
Stream-based computing and stream-based database computing are emerging as a developing technology for database systems. Products are available which allow users to create applications that process and query streaming data before it reaches a database file. With this emerging technology, users can specify processing logic to apply to inbound data records while they are “in flight,” with the results available in a very short amount of time, often in milliseconds. Constructing an application using this type of processing has opened up a new programming paradigm that will allow for a broad variety of innovative applications, systems and processes to be developed, as well as present new challenges for application programmers and database developers.
In a stream application, operators are connected to one another such that data flows from one operator to the next forming a logical dataflow graph. Scalability is reached by distributing an application across compute nodes by creating many small executable pieces of code—i.e., processing elements (PE)—as well as load balancing among them. One or more operators in a stream application can be fused together to form a PE. Doing so allows the fused operators to share a common process space (i.e., shared memory), resulting in much faster communication between operators than is available using inter-nodal communication protocols (e.g., using a TCP/IP). Further, groups of processing elements—i.e., jobs—can be inserted or removed dynamically from one or more applications performing streaming data analysis.
One advantage of stream applications is that they allow the user to granularly control the process flow of data through the application. In other words, the user may designate specific operators for each PE that perform various operations on the incoming data, and may dynamically alter the stream application by modifying the operators and the order in which they are performed.
Additionally, a stream application may use a hostpool (i.e., a collections of hosts that have been assigned to PEs) when assigning each PE to a compute node. Stated simply, the PE is a portion of the stream application that is assigned to execute on a particular host—i.e., a compute node with the necessary hardware to perform the software functions defined by the PE. How the PEs are placed onto the available hosts determine the runtime characteristics of the stream application—e.g., performance, availability, etc. PEs, operators, hostpools, jobs, and even hosts may have associated constraints that dictate the runtime characteristics of the stream; for example, whether the PE can be placed on a host that is also executing other PEs or whether two PEs must be placed on the same host. The first constraint may increase the availability of the stream application while the second may increase its performance.
However, the constraints may be assigned such that the no host satisfies all of the constraints. Accordingly, the stream application may fail to allocate each PE to a host. Typically, a user of the stream application (a developer, system administrator, etc.) would have to add or remove constraints in order to places all the PEs on a host. Instead, the stream application may create a different category of hosts besides differentiating only between hosts that do, or do not, satisfy all the constraints. The new class of hosts may be grouped into the conditional candidate host set.
When allocated PEs to hosts, the stream application may evaluate constraints in a particular order. For example, the application may first evaluate all the constraints associated with one or more operators. Each host that meets these constraints may then be compared sequentially to the constraints associated with a hostpool, hosts, PEs, and jobs. As more constraints are considered, the pool of candidate hosts may be reduced. After applying all the constraints, the hosts that have not been eliminated are unconditional candidate hosts for a particular PE. That is, the PE may be allocated to any of the unconditional candidate hosts and ensure that all the constraints of the stream application are met. In addition to eliminating hosts, the stream application may add each host eliminated from the unconditional candidate host set to the conditional candidate host set if there is an user action that when performed, will satisfy the constraint and result in the host becoming an unconditional candidate host. The stream application may then continue to track these conditional candidate hosts to see if they meet any additional constraints that may be applied. For example, candidate Host A may satisfy all the constraints associated with the hosts, hostpools, and jobs but not all the constraints associated with the PE. The stream application may display this information to the user along with the user action that qualifies Host A to move from the conditional candidate host set to the unconditional candidate host set. In this case, the user action could satisfy the constraints associated with the PE. Doing so would result in Host A meeting all the constraints of the stream application, thereby moving it into the unconditional candidate host set.
Instead of requiring the user to blindly evaluate the constraints to determine what might be changed to allocate all the PEs to respective hosts or to improve the runtime characteristics of the stream application, the stream application informs the user of conditional candidate hosts and what user action may be performed that would yield the desired result.
In the following, reference is made to embodiments of the invention. However, it should be understood that the invention is not limited to specific described embodiments. Instead, any combination of the following features and elements, whether related to different embodiments or not, is contemplated to implement and practice the invention. Furthermore, although embodiments of the invention may achieve advantages over other possible solutions and/or over the prior art, whether or not a particular advantage is achieved by a given embodiment is not limiting of the invention. Thus, the following aspects, features, embodiments and advantages are merely illustrative and are not considered elements or limitations of the appended claims except where explicitly recited in a claim(s). Likewise, reference to “the invention” shall not be construed as a generalization of any inventive subject matter disclosed herein and shall not be considered to be an element or limitation of the appended claims except where explicitly recited in a claim(s).
As will be appreciated by one skilled in the art, aspects of the present invention may be embodied as a system, method or computer program product. Accordingly, aspects of the present invention may take the form of an entirely hardware embodiment, an entirely software embodiment (including firmware, resident software, micro-code, etc.) or an embodiment combining software and hardware aspects that may all generally be referred to herein as a “circuit,” “module” or “system.” Furthermore, aspects of the present invention may take the form of a computer program product embodied in one or more computer readable medium(s) having computer readable program code embodied thereon.
Any combination of one or more computer readable medium(s) may be utilized. The computer readable medium may be a computer readable signal medium or a computer readable storage medium. A computer readable storage medium may be, for example, but not limited to, an electronic, magnetic, optical, electromagnetic, infrared, or semiconductor system, apparatus, or device, or any suitable combination of the foregoing. More specific examples (a non-exhaustive list) of the computer readable storage medium would include the following: an electrical connection having one or more wires, a portable computer diskette, a hard disk, a random access memory (RAM), a read-only memory (ROM), an erasable programmable read-only memory (EPROM or Flash memory), an optical fiber, a portable compact disc read-only memory (CD-ROM), an optical storage device, a magnetic storage device, or any suitable combination of the foregoing. In the context of this document, a computer readable storage medium may be any tangible medium that can contain, or store a program for use by or in connection with an instruction execution system, apparatus, or device.
A computer readable signal medium may include a propagated data signal with computer readable program code embodied therein, for example, in baseband or as part of a carrier wave. Such a propagated signal may take any of a variety of forms, including, but not limited to, electro-magnetic, optical, or any suitable combination thereof. A computer readable signal medium may be any computer readable medium that is not a computer readable storage medium and that can communicate, propagate, or transport a program for use by or in connection with an instruction execution system, apparatus, or device.
Program code embodied on a computer readable medium may be transmitted using any appropriate medium, including but not limited to wireless, wireline, optical fiber cable, RF, etc., or any suitable combination of the foregoing.
Computer program code for carrying out operations for aspects of the present invention may be written in any combination of one or more programming languages, including an object oriented programming language such as Java, Smalltalk, C++ or the like and conventional procedural programming languages, such as the “C” programming language or similar programming languages. The program code may execute entirely on the user's computer, partly on the user's computer, as a stand-alone software package, partly on the user's computer and partly on a remote computer or entirely on the remote computer or server. In the latter scenario, the remote computer may be connected to the user's computer through any type of network, including a local area network (LAN) or a wide area network (WAN), or the connection may be made to an external computer (for example, through the Internet using an Internet Service Provider).
Aspects of the present invention are described below with reference to flowchart illustrations and/or block diagrams of methods, apparatus (systems) and computer program products according to embodiments of the invention. It will be understood that each block of the flowchart illustrations and/or block diagrams, and combinations of blocks in the flowchart illustrations and/or block diagrams, can be implemented by computer program instructions. These computer program instructions may be provided to a processor of a general purpose computer, special purpose computer, or other programmable data processing apparatus to produce a machine, such that the instructions, which execute via the processor of the computer or other programmable data processing apparatus, create means for implementing the functions/acts specified in the flowchart and/or block diagram block or blocks.
These computer program instructions may also be stored in a computer readable medium that can direct a computer, other programmable data processing apparatus, or other devices to function in a particular manner, such that the instructions stored in the computer readable medium produce an article of manufacture including instructions which implement the function/act specified in the flowchart and/or block diagram block or blocks.
The computer program instructions may also be loaded onto a computer, other programmable data processing apparatus, or other devices to cause a series of operational steps to be performed on the computer, other programmable apparatus or other devices to produce a computer implemented process such that the instructions which execute on the computer or other programmable apparatus provide processes for implementing the functions/acts specified in the flowchart and/or block diagram block or blocks.
Embodiments of the invention may be provided to end users through a cloud computing infrastructure. Cloud computing generally refers to the provision of scalable computing resources as a service over a network. More formally, cloud computing may be defined as a computing capability that provides an abstraction between the computing resource and its underlying technical architecture (e.g., servers, storage, networks), enabling convenient, on-demand network access to a shared pool of configurable computing resources that can be rapidly provisioned and released with minimal management effort or service provider interaction. Thus, cloud computing allows a user to access virtual computing resources (e.g., storage, data, applications, and even complete virtualized computing systems) in “the cloud,” without regard for the underlying physical systems (or locations of those systems) used to provide the computing resources.
Typically, cloud computing resources are provided to a user on a pay-per-use basis, where users are charged only for the computing resources actually used (e.g., an amount of storage space used by a user or a number of virtualized systems instantiated by the user). A user can access any of the resources that reside in the cloud at any time, and from anywhere across the Internet. In context of the present invention, a user may access applications or related data available in the cloud. For example, the compute nodes or hosts used to create a stream application may be virtual or physical machines maintained by a cloud service provider. Doing so allows a user to send data to the stream application from any computing system attached to a network connected to the cloud (e.g., the Internet).
<figref idrefs="DRAWINGS">FIGS. 1A-1B</figref> illustrate a computing infrastructure configured to execute a stream application, according to one embodiment of the invention. As shown, the computing infrastructure <b>100</b> includes a management system <b>105</b> and a plurality of hosts <b>130</b><sub>1-4</sub>—i.e., compute nodes—which are communicatively coupled to each other using one or more communication devices <b>120</b>. The communication devices <b>120</b> may be a server, network, or database and may use a particular communication protocol to transfer data between the hosts <b>130</b><sub>1-4</sub>. Although not shown, the hosts <b>130</b><sub>1-4 </sub>may have internal communication devices for transferring data between PEs located on the same host <b>130</b>. Also, the management system <b>105</b> includes an operator graph <b>132</b> and a scheduler <b>134</b> (i.e., a stream manager). As described in greater detail below, the operator graph <b>132</b> represents a stream application beginning from one or more source operators through to one or more sink operators. This flow from source to sink is also generally referred to herein as an execution path. Typically, processing elements receive an N-tuple of data attributes from the stream as well as emit an N-tuple of data attributes into the stream (except for a sink operator where the stream terminates or a source operator where the stream begins). Of course, the N-tuple received by a processing element need not be the same N-tuple sent downstream. Additionally, the processing elements could be configured to receive or emit data in formats other than a tuple (e.g., the processing elements could exchange data marked up as XML documents). Furthermore, each processing element may be configured to carry out any form of data processing functions on the received tuple, including, for example, writing to database tables or performing other database operations such as data joins, splits, reads, etc., as well as performing other data analytic functions or operations.
The scheduler <b>134</b> may be configured to monitor a stream application running on the hosts <b>130</b><sub>1-4</sub>, as well as to change the deployment of the operator graph <b>132</b>. The scheduler <b>134</b> may, for example, move PEs from one host <b>130</b> to another to manage the processing loads of the hosts <b>130</b><sub>1-4 </sub>in the computing infrastructure <b>100</b>.
<figref idrefs="DRAWINGS">FIG. 1B</figref> illustrates an example operator graph <b>132</b> that includes ten processing elements (labeled as PE<b>1</b>-PE<b>10</b>) running on the hosts <b>130</b><sub>1-4</sub>. A processing element is composed of one or more operators fused together into an independently running process with its own process ID (PID) and memory space. In cases where two (or more) processing elements are running independently, inter-nodal communication may occur using a network socket (e.g., a TCP/IP socket). However, when operators are fused together, the fused operators can use more rapid intra-nodal communication protocols, such as shared memory, for passing tuples among the joined operators in the fused processing elements.
As shown, the operator graph begins at a source <b>135</b> (that flows into the processing element labeled PE<b>1</b>) and ends at sink <b>140</b><sub>1-2 </sub>(that flows from the processing elements labeled as PE<b>6</b> and PE<b>10</b>). Host <b>130</b><sub>1 </sub>includes the processing elements PE<b>1</b>, PE<b>2</b>, and PE<b>3</b>. Source <b>135</b> flows into the processing element PE<b>1</b>, which in turn emits tuples that are received by PE<b>2</b> and PE<b>3</b>. For example, PE<b>1</b> may split data attributes received in a tuple and pass some data attributes to PE<b>2</b>, while passing other data attributes to PE<b>3</b>. Data that flows to PE<b>2</b> is processed by the operators contained in PE<b>2</b>, and the resulting tuples are then emitted to PE<b>4</b> on host <b>130</b><sub>2</sub>. Likewise, the data tuples emitted by PE<b>4</b> flow to sink PE<b>6</b><b>140</b><sub>1</sub>. Similarly, data tuples flowing from PE<b>3</b> to PE<b>5</b> also reach sink PE<b>6</b><b>140</b><sub>1</sub>. Thus, in addition to being a sink for this example operator graph, PE<b>6</b> could be configured to perform a join operation, combining tuples received from PE<b>4</b> and PE<b>5</b>. This example operator graph also shows data tuples flowing from PE<b>3</b> to PE<b>7</b> on host <b>130</b><sub>3</sub>, which itself shows data tuples flowing to PE<b>8</b> and looping back to PE<b>7</b>. Data tuples emitted from PE<b>8</b> flow to PE<b>9</b> on host <b>130</b><sub>4</sub>, which in turn emits tuples to be processed by sink PE<b>10</b><b>140</b><sub>2</sub>.
Furthermore, although embodiments of the present invention are described within the context of a stream application, this is not the only context relevant to the present disclosure. Instead, such a description is without limitation and is for illustrative purposes only. Of course, one of ordinary skill in the art will recognize that embodiments of the present invention may be configured to operate with any computer system or application capable of performing the functions described herein. For example, embodiments of the invention may be configured to operate in a clustered environment with a standard database processing application.
<figref idrefs="DRAWINGS">FIG. 2</figref> is a more detailed view of a host <b>130</b> of <figref idrefs="DRAWINGS">FIGS. 1A-1B</figref>, according to one embodiment of the invention. As shown, the host <b>130</b> includes, without limitation, at least one CPU <b>205</b>, a communication adapter <b>215</b>, an interconnect <b>220</b>, a memory <b>225</b>, and storage <b>230</b>. The host <b>130</b> may also include an I/O devices interface <b>210</b> used to connect I/O devices <b>212</b> (e.g., keyboard, display and mouse devices) to the host <b>130</b>.
Each CPU <b>205</b> retrieves and executes programming instructions stored in the memory <b>225</b>. Similarly, the CPU <b>205</b> stores and retrieves application data residing in the memory <b>225</b>. The interconnect <b>220</b> is used to transmit programming instructions and application data between each CPU <b>205</b>, I/O devices interface <b>210</b>, storage <b>230</b>, communication adapter <b>215</b>, and memory <b>225</b>. CPU <b>205</b> is representative of a single CPU, multiple CPUs, a single CPU having multiple processing cores, and the like. The memory <b>225</b> is generally included to be representative of a random access memory (e.g., DRAM or Flash). Storage <b>230</b>, such as a hard disk drive, solid state device (SSD), or flash memory storage drive, may store non-volatile data. The communication adapter <b>215</b> (e.g., a network adapter or query engine) facilitates communication with one or more communication devices <b>120</b> that use a particular communication protocol, such as TCP/IP, RDMA protocols, a shared file system protocol, and the like.
In this example, the memory <b>225</b> includes multiple processing elements <b>235</b>. Each PE <b>235</b> includes a collection of fused operators <b>240</b>. As noted above, each operator <b>240</b> may provide a small chunk of executable code configured to process data flowing into a processing element (e.g., PE <b>235</b>) and to emit data to other operators <b>240</b> in that PE <b>235</b> or to other processing elements in the stream application. PEs <b>235</b> may be allocated to the same host <b>130</b> or located on other hosts <b>130</b> and communicate via the communication devices <b>120</b>. In one embodiment, a PE <b>235</b> can only be allocated to one host <b>130</b>.
A PE <b>235</b> may also include constraints <b>255</b> that govern, at least partially, how the scheduler <b>134</b> determines a candidate host <b>130</b> for a PE <b>235</b>. For example, a constraint <b>255</b> associated with a PE <b>235</b> or operator <b>240</b> may comprise “isolation” which stipulates that the associated operator <b>240</b> cannot share a host <b>130</b> with any other PE <b>235</b>, “co-location” which stipulates that multiple PEs <b>235</b> in a group must execute on the same host <b>130</b>, “ex-location” which stipulates that multiple PEs <b>235</b> in a group cannot execute on the same host <b>130</b>, “explicit host” which stipulates that a PE <b>235</b> must be located on a specific host <b>130</b> (e.g., host <b>1300</b>, “non-relocatable” which stipulates that a PE <b>235</b> cannot be relocated after being allocated to a host <b>130</b>, “override” which stipulates that which host <b>130</b> must be allocated to which PE <b>235</b> and overrides any previous constraints, “indexing the hostpool” which stipulates the host <b>130</b> that will execute the PE <b>235</b> based on an index value of the hostpool, and the like. Other constraints <b>255</b> may be associated with the host <b>130</b> instead of the PE <b>235</b> or operator <b>240</b> such as “overloaded host” which stipulates a maximum number of PEs <b>235</b> that may be allocated to the host <b>130</b>, or “scheduling state” which stipulates whether the host <b>130</b> is in a state that supports hosting a new PE <b>235</b>. However, constraints <b>255</b> are not limited to the elements discussed above but may be associated with other elements of the stream application which are considered by the scheduler <b>134</b> when allocating PEs <b>235</b> to hosts <b>130</b>.
Moreover, the example constraints <b>255</b> listed above are not intended to be an exhaustive list of all possible constraints <b>255</b>. Instead, one of ordinary skill in the art will recognize that the embodiments disclosed herein may be used with many different techniques of specifying which host <b>130</b> is to be allocated to a particular PE <b>235</b> or operator <b>240</b>.
<figref idrefs="DRAWINGS">FIG. 3</figref> is a more detailed view of the management system <b>105</b> of <figref idrefs="DRAWINGS">FIG. 1</figref>, according to one embodiment of the invention. As shown, management system <b>105</b> includes, without limitation, at least one CPU <b>305</b>, communication adapter <b>315</b>, an interconnect <b>320</b>, a memory <b>325</b>, and storage <b>330</b>. The client system <b>130</b> may also include an I/O device interface <b>310</b> connecting I/O devices <b>312</b> (e.g., keyboard, display and mouse devices) to the management system <b>105</b>.
Like CPU <b>205</b> of <figref idrefs="DRAWINGS">FIG. 2</figref>, CPU <b>305</b> is configured to retrieve and execute programming instructions stored in the memory <b>325</b> and storage <b>330</b>. Similarly, the CPU <b>305</b> is configured to store and retrieve application data residing in the memory <b>325</b> and storage <b>330</b>. The interconnect <b>320</b> is configured to move data, such as programming instructions and application data, between the CPU <b>305</b>, I/O devices interface <b>310</b>, storage unit <b>330</b>, communication adapters <b>315</b>, and memory <b>325</b>. Like CPU <b>205</b>, CPU <b>305</b> is included to be representative of a single CPU, multiple CPUs, a single CPU having multiple processing cores, and the like. Memory <b>325</b> is generally included to be representative of a random access memory. The communication adapter <b>315</b> is configured to transmit data via the communication devices <b>120</b> to the hosts <b>130</b> using any number of communication protocols. This may the same or different communication protocol used by the PEs <b>235</b> to transmit data. Although shown as a single unit, the storage <b>330</b> may be a combination of fixed and/or removable storage devices, such as fixed disc drives, removable memory cards, optical storage, SSD or flash memory devices, network attached storage (NAS), or connections to storage area-network (SAN) devices. The storage includes a primary operator graph <b>335</b>. The primary operator graph <b>335</b>, like the one illustrated in <figref idrefs="DRAWINGS">FIG. 1B</figref>, defines the arrangement of the processing elements, as well as the execution path use by processing element <b>235</b> to communicate with a downstream processing element <b>235</b>.
The memory <b>325</b> may include a scheduler <b>134</b> that manages one or more hostpools <b>327</b>. A hostpool <b>327</b> may be associated with a particular PE <b>235</b>, operator <b>240</b>, or more generally, a job. For example, an application developer may assign a hostpool <b>327</b> for each job, thereby associating each PE <b>235</b> in that job to the hostpool <b>327</b>. Alternatively, the developer or scheduler <b>134</b> may individually assign each PE <b>235</b> or operator <b>240</b> to a hostpool <b>327</b>. In one embodiment, the PE <b>235</b> may be associated with one or more hostpools <b>327</b> but each operator <b>240</b> in the PE <b>235</b> may be assigned to only one hostpool <b>327</b>. The hostpool <b>327</b> may also have a predetermined size that stipulates how many hosts <b>130</b> may be “pinned” or assigned to the hostpool. This prevents the scheduler <b>134</b> from pinning too many hosts <b>130</b> to a hostpool <b>327</b> to the detriment of other jobs that may be sharing the same computer infrastructure <b>100</b>. Further, in one embodiment, a hostpool <b>327</b> may be indexed much like an array. For example, host <b>130</b><sub>1 </sub>and host <b>130</b><sub>2 </sub>are pinned to Hostpool_A, Hostpool_A[<b>0</b>] may reference host <b>130</b><sub>1 </sub>while Hostpool_A[<b>1</b>] references host <b>130</b><sub>2</sub>. The hosts <b>130</b><sub>1-2 </sub>may be pinned to a particular index value based on what order the hosts <b>130</b><sub>1-2 </sub>were pinned to the hostpool <b>327</b> or by a developer or compiler specifying that a particular PE's host should be located at a particular index value—i.e., the “indexing the hostpool” constraint <b>255</b>.
Other constraints <b>255</b> may be associated with the hostpools <b>327</b> such as “maximum size” which limits the number of hosts <b>130</b> that may be assigned to the hostpool <b>327</b>, “tagged requirements” which are discussed in <figref idrefs="DRAWINGS">FIGS. 4A-B</figref>, “exclusive hostpool” which stipulates that the hosts <b>130</b> in the hostpool <b>327</b> may not be used by any other PEs <b>235</b> in any other jobs, and the like.
<figref idrefs="DRAWINGS">FIGS. 4A-4B</figref> illustrate tables detailing the assignment of hosts to hostpools, according to embodiments of the invention. Specifically, <figref idrefs="DRAWINGS">FIG. 4A</figref> illustrates tables that identify candidate hosts for a hostpool <b>327</b>. Table <b>405</b> lists hosts <b>130</b> (Hosts A-F) that are available to a stream application. Each of the hosts <b>130</b> are assigned with a characteristic tag. The tag represents a characteristic of the host <b>130</b> such as whether the host <b>130</b> has high-memory, multiple processor cores, is compatible with a high-speed communication protocol, recently upgraded, a specific type of processor, a specific operating system, and the like. Moreover, the tag may abstract one or more characteristics by using a simple code word or number. For example, red may indicate a high-memory host <b>130</b> while green is a host <b>130</b> that has recently been upgraded and has a specific type of processor. Moreover, a host <b>130</b> may have multiple tags if it has more than one of the tagged characteristics. For example, Host C and D both have two tags. Additionally, a host <b>130</b> may not be assigned any tag or given a default tag if it does not have any of the tagged characteristics.
Table <b>410</b> lists three hostpools <b>327</b> (Hostpools <b>1</b>-<b>3</b>) that have a predetermined size and tag. The size indicates the maximum number of hosts <b>130</b> that may be pinned to the hostpool <b>327</b>. In one embodiment, the tag may be used to indentify hosts <b>130</b> that are eligible to be included into the hostpool <b>327</b>. For example, a developer may stipulate that a PE <b>235</b> must be executed by a high-memory host <b>130</b>—i.e., the PE <b>235</b> must be allocated to a host <b>130</b> with a certain characteristic. Accordingly, the developer or scheduler <b>134</b> may associate the PE <b>235</b> with a hostpool <b>327</b> that has the tag that corresponds to the high-memory characteristic. When determining candidate hosts for the PE <b>235</b>, the scheduler <b>134</b> may match the tag of the hostpool <b>327</b> in Table <b>410</b> with the tag of the host <b>130</b> in Table <b>405</b>.
Table <b>415</b> lists the possible hosts <b>130</b> that may be matched with each hostpool <b>327</b> by matching the tag constraint. Hosts A, B, or C may be pinned to Hostpool <b>1</b>, Hosts C, E, or F may be pinned to Hostpool <b>2</b>, and Host D may be pinned to Hostpool <b>3</b>.
<figref idrefs="DRAWINGS">FIG. 4B</figref> depicts tables that illustrate the issues that arise when assigning PEs with constraints to hosts. Table <b>420</b> pins eligible hosts <b>130</b> to a hostpool <b>327</b>. In this case, a host <b>130</b> is pinned based on at least two constraints <b>255</b> associated with the hostpool <b>327</b>: whether it has a matching tag and whether the size of the hostpool <b>327</b> is met. As used herein, criteria are different than constraints <b>255</b>. If a host <b>130</b> does not meet a constraint <b>255</b>, the PE cannot be allocated to it. However, the scheduler <b>134</b> may use criteria to choose between multiple hosts that satisfy the constraints <b>255</b>. For example, the scheduler <b>134</b> may use criteria such as selecting the host <b>130</b> with the most available processing power or selecting the highest ranked host from a predetermined ranking as the host <b>130</b> to pin to the hostpool <b>327</b> if there are multiple hosts <b>130</b> that satisfy the constraints <b>255</b>—i.e., there are multiple candidate hosts.
For the sake of simplicity, the criterion used in Table <b>420</b> to choose between the multiple hosts <b>130</b> that satisfy the constraints <b>255</b> was alphabetical ordering of the hosts' labels. In this manner, Hosts A and B are pinned to Hostpool <b>1</b>, Hosts C, D, and E are pinned to Hostpool <b>2</b>, and Host D is pinned to Hostpool <b>3</b>. Note that a host <b>130</b> may be pinned in multiple hostpools <b>327</b> so long as it matches the hostpool's tag.
Table <b>425</b> list possible constraints <b>255</b> that may be associated with PEs <b>235</b>. As shown, each PE <b>235</b> is individually assigned to a particular hostpool <b>327</b> as well as being associated with at least one constraint <b>255</b>. However, in one embodiment, a PE <b>235</b> may not have any constraints <b>255</b> or have multiple constraints <b>255</b>. Because PE <b>1</b> and PE <b>2</b> are associated with the same co-located group, they must be allocated to the same host <b>130</b>. PEs <b>2</b>-<b>5</b> are associated with the same ex-located group and thus cannot share the same host <b>130</b>. That is, PE <b>2</b>-<b>5</b> must be allocated to different hosts <b>130</b> relative to each other but may be allocated to share a host with a PE <b>235</b> not in Ex-locate Group <b>1</b>.
Applying the constraints <b>255</b> of Table <b>425</b> to the hostpools and pinned hosts of Table <b>420</b> show that it is an invalid assignment. Specifically, PE <b>1</b> and <b>2</b> must be located on the same host <b>130</b> but are assigned to two different hostpools <b>327</b> that do not have any pinned hosts <b>130</b> in common. To fix this problem, Host B in Hostpool <b>1</b> may be replaced with Host C since Host C has the necessary tags to be eligible for both Hostpool <b>1</b> and <b>2</b>. In this manner, both PE <b>1</b> and PE <b>2</b> may be allocated to the same host <b>130</b>—i.e., Host C.
However, this does not solve all the constraints <b>255</b>. PE <b>2</b>-<b>5</b> must be allocated to separate hosts <b>130</b>. Specifically PE <b>2</b>, <b>4</b>, and <b>5</b> are in Hostpool <b>2</b> and must each use a separate host <b>130</b>; however, because Host D is in Hostpool <b>2</b>, one of PE <b>2</b>, <b>4</b>, or <b>5</b> must be allocated to Host D which is also allocated to PE <b>3</b>. To solve this problem, Host D in Hostpool <b>2</b> may be replaced by Host F. Table <b>430</b> lists one solution that satisfies both constraints <b>255</b>—i.e., the tag characteristics required by the hostpools <b>327</b> and the ex-locate or co-locate groups associated with the PEs <b>235</b>.
<figref idrefs="DRAWINGS">FIG. 5</figref> is a flow diagram illustrating the assignment of one or more hosts to a hostpool, according to embodiments of the invention. The technique <b>500</b> illustrated in <figref idrefs="DRAWINGS">FIG. 5</figref> avoids the issues shown in the tables of <figref idrefs="DRAWINGS">FIG. 4</figref>. The hostpool <b>327</b> provides a developer flexibility to add constraints <b>255</b> to a PE <b>235</b> yet without having to assign each individual PE <b>235</b> to a specific host <b>130</b>.
At block <b>505</b>, the scheduler <b>134</b> determines a candidate host set for a PE <b>235</b>. In one embodiment, the scheduler may select a PE <b>235</b> that is associated with a job or choose a PE <b>235</b> based on the expected difficulty of placing the PE <b>235</b> on a host—e.g., the PE <b>235</b> that is associated with the most number of constraints. However, this invention is not limited to a particular method of selecting a PE from the plurality of PEs that may make up a stream application. In one embodiment, at block <b>505</b>, the scheduler <b>134</b> may use the techniques disclosed in an application by the same inventor that is co-pending with the current application entitled “DYNAMICALLY CONFIGURABLE PLACEMENT ENGINE” application Ser. No. 13/711,066, (which is herein incorporated by reference) for selecting the appropriate PE <b>235</b>.
In one embodiment, the scheduler <b>134</b> uses a constraints tree to identify the hosts <b>130</b> that satisfy the constraints <b>255</b> that are associated with the stream application elements such as hosts <b>130</b>, hostpools <b>327</b>, operators <b>240</b>, PEs <b>235</b>, and PE collections (e.g., jobs) that make up a stream application. The constraints <b>255</b> may be associated with only one or a combination of the different stream application elements. An example of a constraint tree will be discussed below with reference to <figref idrefs="DRAWINGS">FIG. 6</figref>.
At block <b>510</b>, the scheduler <b>134</b> determines if at least one host <b>130</b> satisfies all the constraints <b>255</b> of the stream application. That is, whether there is at least one candidate host. If there is not one candidate host, the scheduler may report a failure at block <b>530</b>. A failure may include informing the user of the stream application that the scheduler <b>134</b> was unable to allocate each of the PEs <b>235</b> of the stream application to a host <b>130</b> and meet the current constraints <b>255</b>. The stream application may immediately inform the user of a failure when a PE <b>235</b> cannot be allocated, or alternatively, the scheduler <b>134</b> may continue to allocate the rest of the PEs <b>235</b> before indicating that the PE assignment process failed. In one embodiment, the scheduler <b>134</b> may use I/O device interface <b>310</b> to transmit a failure message to a display device.
However, if the scheduler <b>134</b> is able to identify at least one candidate host, the technique <b>500</b> continues to block <b>515</b> where the PE <b>235</b> may be allocated to one of these hosts.
Additionally, the scheduler <b>134</b> may further distinguish between hosts <b>130</b> that are unconditional candidate hosts and hosts <b>130</b> that are conditional candidate hosts. An “unconditional candidate host” is a host <b>130</b> that satisfies each constraint <b>255</b> that it has been applied. In contrast, a “conditional candidate host” is a host <b>130</b> that would be a candidate host (i.e., unconditional candidate host) for a particular PE <b>235</b> except that one or more constraints <b>255</b> are not currently satisfied. To change a conditional candidate host into an unconditional candidate host, one or more actions are performed to change a condition which would then satisfy the previously unsatisfied constraints. Alternatively, the constraint <b>255</b> itself may be modified or removed. For example, if a constraint <b>255</b> requires PE<b>1</b> to be located on Host X, but Host Y meets all of the other constraints <b>255</b>, then removing this constraint <b>255</b> results in Host Y changing from a conditional candidate host to an unconditional candidate host. Similarly, if an overloading constraint <b>255</b> associated with Host Z has been exceeded, but Host Z meets all other constraints <b>255</b>, then modifying the overloading constraint (e.g., increasing the number of PEs <b>235</b> that may be allocated to Host Z) results in Host Z becoming an unconditional candidate host. Moreover, if a constraint <b>255</b> requires all hosts in a hostpool to have a red tag, the user may change the tag (i.e., a condition) of a conditional candidate host to red.
At block <b>515</b>, if there are multiple unconditional candidate hosts, the scheduler <b>134</b> may choose between the unconditional candidate hosts using one or more criteria. As used herein, criteria are different than constraints <b>255</b>. If a host <b>130</b> does not meet a constraint <b>255</b>, the PE cannot be allocated to it. However, the scheduler <b>134</b> may use criteria to choose between multiple hosts that satisfy the constraints <b>255</b>. In one embodiment, the scheduler <b>134</b> may select the candidate host with the lowest usage of CPU or the host <b>130</b> that uses the fastest communication protocol for inter-host communications. In another embodiment, the scheduler <b>134</b> may select the candidate host that the PE <b>235</b> has previously been allocated during a different job or instance of the same job. Alternatively, the host <b>130</b> may be chosen at random. In another embodiment, the scheduler <b>134</b> may the use the techniques discussed in the co-pending application “DYNAMICALLY CONFIGURABLE PLACEMENT ENGINE” application Ser. No. 13/711,066, which was mentioned previously. The invention is not limited to any particular method of selecting a host <b>130</b> from a plurality of candidate hosts.
However, if there is only one candidate host, the scheduler may automatically allocate the selected PE <b>235</b> to that candidate host. In another embodiment, the scheduler <b>134</b> may display conditional candidate hosts before allocating a PE <b>235</b> as will be discussed with reference to <figref idrefs="DRAWINGS">FIGS. 8 and 9</figref>.
At block <b>520</b>, the scheduler <b>134</b> pins the candidate host to the hostpool <b>327</b> associated with the PE <b>235</b> that is allocated to the candidate host. In one embodiment, before pinning the candidate host to the hostpool <b>327</b> associated with the PE <b>235</b>, the scheduler <b>134</b> may first determine if the candidate host is already pinned to the hostpool <b>327</b>. If not, the scheduler <b>134</b> may pin (or assign) the candidate host to the hostpool <b>327</b>. Part of this process may require assigning an index value to the candidate host in the hostpool <b>327</b> though this is not required to perform this invention. Assigning an index values and associating hosts <b>130</b> with hostpools <b>327</b> is discussed in further detail in an application by the same inventor that is co-pending with the current application entitled “AGILE HOSTPOOL ALLOCATOR” application Ser. No. 13/711,272, which is herein incorporated by reference. After pinning the suitable host or determining that the suitable host is already included in the hostpool <b>327</b>, at block <b>525</b> the technique <b>500</b> may be repeated for each of the PEs <b>235</b> in a stream application.
<figref idrefs="DRAWINGS">FIG. 6</figref> illustrates a constraint tree for applying constraints, according to one embodiment of the invention. Specifically, the constraint tree <b>600</b> is one technique for determining candidate hosts using constraints <b>255</b>—i.e., block <b>510</b> of <figref idrefs="DRAWINGS">FIG. 5</figref>. In one embodiment, the constraint tree <b>600</b> divides up the different elements in a stream application by type into multiple levels that form a hierarchical relationship. The top level—Level A—includes one or more jobs or collections of PEs <b>235</b>. Level B includes the one or more PEs <b>235</b> that comprise the job or collection. As mentioned previously, a PE <b>235</b> may have one or more fused operators <b>240</b> which are represented by Level C of the tree <b>600</b>.
In one embodiment, each operator <b>240</b> associated with a PE <b>235</b> is assigned to only one hostpool <b>327</b> while a PE <b>235</b> may be associated with one or more hostpools <b>327</b>. Level D shows that the operators <b>240</b> associated with PE<sub>N </sub>are each associated with only one hostpool <b>327</b>. However, the operators <b>240</b> may be associated with the same hostpool <b>327</b>. Finally, each hostpool <b>327</b> may include one or more hosts <b>130</b>—i.e., Level E. For the sake of clarity, many of the hierarchical relationships of the different levels, such as the operators associated with PE<sub>1 </sub>and PE<sub>2</sub>, are omitted from the figure.
In one embodiment, the scheduler <b>134</b> may use the constraint tree <b>600</b> to determine unconditional candidate hosts—i.e., hosts <b>130</b> that meet Level A-E constraints. The constraint tree <b>600</b> is a graphical representation of the different types of constraints that may be used to allocate the selected PE <b>235</b> to a host <b>130</b>. That is, each constraint tree <b>600</b> may look different for each PE <b>235</b>. Each level represents different types of constraints that may be checked by the scheduler <b>134</b>. For a selected PE <b>235</b>, the scheduler <b>134</b> may start at Level E and apply Level E constraints—i.e., constraints <b>255</b> associated with hosts <b>130</b>. Level E constraints may include overloading or scheduling constraints as discussed previously. For example, the scheduler <b>134</b> may determine whether each host <b>130</b> in Level E is overloaded or if the host <b>130</b> is being used exclusively by a different job from the job that includes the currently selected PE <b>235</b>. After determining which hosts <b>130</b> meet Level E constraints, the scheduler <b>134</b> may return to Level D to apply Level D constraints—i.e., constraints associated with hostpools <b>327</b>—such as whether the hosts <b>130</b> selected from Level E have the same tag as the Level D hostpool <b>327</b> or if the size requirements of the hostpool <b>327</b> have been met. After applying Level D constraints, the scheduler <b>134</b> returns the hosts <b>130</b> that satisfy Level D and E constraints to Level C.
For each of the operators <b>240</b> in the selected PE <b>235</b>, the scheduler <b>134</b> may apply Level C constraints associated with the operators <b>240</b> such as whether the operators <b>240</b> must run on a specific host <b>130</b> or whether one of the operators <b>240</b> should be the only operator <b>240</b> running on the host <b>130</b>. The scheduler <b>134</b> checks the Level C constraints for each of the operators <b>240</b> against the candidate hosts returned from Level D. The hosts <b>130</b> that satisfy all the constraints <b>255</b> for at least one of the operators <b>240</b> are returned to Level B where the Level B constraints are applied. For example, the scheduler <b>134</b> may perform an Intersect function to determine if any of the hosts <b>130</b> that satisfy all of the constraints of at least one of the operators <b>240</b> of Level C also satisfies all the constraints <b>255</b> of all of the operators <b>240</b> in the selected PE <b>235</b>. Additionally or alternatively, the Level B constraints may include determining whether the PE <b>235</b> is non-relocatable or if there is a constraint <b>255</b> that overrides any of the Level C-E constraints.
After determining which host or hosts <b>130</b> satisfy the constraints for Levels B-E, the scheduler <b>134</b> determines whether these hosts <b>130</b> also satisfy the constraints of Level A such as ex-locate or co-locate. That is, if PE<sub>1 </sub>(e.g., the currently selected PE) and PE<sub>2 </sub>must be co-located, then at Level A the scheduler <b>134</b> may perform an Intersect function to determine whether the two PEs <b>235</b> have at least one host <b>130</b> in common that meets all the Level B-D constraints for the respective PEs <b>235</b>. If so, that host or hosts <b>130</b> become the unconditional candidate hosts for PE<sub>1</sub>. In this manner, the scheduler <b>134</b> may use the constraint tree <b>600</b> to ensure that all constraints <b>255</b> are satisfied to identify at least one unconditional candidate host for a selected PE <b>235</b>.
Also, the constraint tree <b>600</b> may aid the scheduler <b>134</b> to identify conditional candidate hosts. Generally, as the scheduler <b>134</b> moves from the bottom of the constraint tree <b>600</b> to the top, the number of unconditional candidate hosts shrinks as the constraints from each level are considered. Instead of ignoring the eliminated unconditional candidate hosts, the scheduler <b>134</b> may instead group the eliminated hosts into a set of conditional candidate hosts. Moreover, the scheduler <b>134</b> may record in memory <b>325</b> or storage <b>330</b> the constraint <b>255</b> that the conditional candidate host violated. For example, Host W may have satisfied all the constraints <b>255</b> associated with Levels D and E but fails an operator <b>240</b> constraint at Level C. The scheduler may save Host W in the conditional candidate host set along with the constraint <b>255</b> that it failed. Additionally, the scheduler <b>134</b> may continue to evaluate each conditional candidate host as it traverses up the constraint tree <b>600</b>. Continuing the previous example, the scheduler <b>134</b> may compare Host W to the Level B constraints. If Host W satisfies all those constraints <b>255</b> then the scheduler <b>134</b> may not store those constraints <b>255</b>. Or the scheduler <b>134</b> may store a flag that indicates Host W satisfies all Level B constraints. However, if Host W does not satisfy all of the Level B constraints, the scheduler <b>134</b> may store any constraints <b>255</b> that Host W did not meet at that level as well. This process may continue until the scheduler <b>134</b> has finished traversing the constraints tree <b>600</b> or until the scheduler <b>134</b> has identified all conditional or unconditional candidate hosts for a particular PE <b>235</b>.
In one embodiment, the hosts <b>130</b> eliminated from the unconditional candidate host set may be added to the conditional candidate host set when the scheduler <b>134</b> traverses above a predefined level of the constraint tree <b>600</b>. For example, if Host W is unconditional candidate host after the scheduler <b>134</b> applies the constraints of Level D but does not satisfy one of the Level C constraints, Host W is not placed in the conditional candidate host set—i.e., only the unconditional candidate hosts that meet all the Levels C, D, and E constraints may be become conditional candidate hosts. But if Host W meets all the Levels C, D, and E constraints but not all the Level B constraints, Host W may become a conditional candidate host.
In one embodiment, the scheduler <b>134</b> may remove a host <b>130</b> from the conditional candidate host set if the host <b>130</b> violates a predefined number of constraints—e.g., a conditional candidate host cannot violate more than three constraints. Accordingly, if Host <b>130</b> violates a Level D constraint, a Level C constraint, and two Level A constraints it would be removed from the conditional candidate host set—i.e., ignored by the scheduler <b>134</b>.
In one embodiment, the scheduler <b>134</b> may remove a host <b>130</b> from the conditional candidate host set if the host <b>130</b> violates a certain type of constraint <b>255</b>. For example, Level B constraints may be prioritized as the constraints that most affect the performance of the stream application. Accordingly, if a conditional candidate host violates a Level B constraint it may be removed from the set even if it does not violate any other constraint <b>255</b>. Alternatively or additionally, the scheduler <b>134</b> may consider a maximum number of constraints <b>255</b> as well as a type of constraint <b>255</b> when prioritizing conditional candidate hosts. For example, the policy may be set such that the maximum number of constraint violations is three, and only one of those violations may be a Level A constraint violation, before a host <b>130</b> is removed from the conditional candidate host set.
<figref idrefs="DRAWINGS">FIG. 7A</figref> illustrates a portion of a constraint tree according to one embodiment of the invention. Specifically, the tree <b>705</b> may represent a portion of the constraint tree <b>600</b>. For example, the parent node may be PE<sub>N </sub>while the child nodes<sub>1-3 </sub>represent operators<sub>1-N</sub>. However, the constraint tree <b>705</b> may represent any portion of the constraint tree <b>600</b>. For example, the child nodes<sub>1-3 </sub>may be associated with one or more nodes below them while the parent node may also be a child node for a higher level node.
As stated previously, at the lowest level of the constraint tree <b>600</b> the scheduler <b>134</b> determines the maximal set of unconditional candidate hosts which it then prunes as the host set is passed up the tree and each host <b>130</b> in the unconditional candidate host set is compared to the constraints <b>255</b> at each level. In contrast, the conditional candidate host set may grow as the scheduler <b>134</b> traverses towards the top of the tree <b>600</b>. Specifically, conditional candidate hosts may be added while previously identified unconditional candidate hosts violate additional constraints <b>255</b>. This set may be culled, however, if the conditional candidate hosts violate certain constraints <b>255</b> or if they exceed a threshold number of violations. That is, the conditional candidate hosts identified when evaluating lower level constraints <b>255</b> may also be compared to the constraints <b>255</b> of the current level. This may result in additional conditions (or user actions) being added to them, or in some case it may be result in one of the conditional candidate hosts being removed from the conditional host set altogether.
<figref idrefs="DRAWINGS">FIG. 7B</figref> illustrates a table associated with the constraint tree <b>705</b> in <figref idrefs="DRAWINGS">FIG. 7B</figref>. Specifically, the table <b>710</b> details the unconditional and conditional candidate hosts for the parent and child nodes<sub>1-3</sub>. An unconditional candidate host is outlined in a square while a conditional candidate host is underlined. Underneath each conditional candidate host is a corresponding user action. As used herein, a “user action” is an action that may be performed that changes the conditional candidate host to an unconditional candidate host. An action may include remove, changing, ignoring, or adding one or more constraints <b>255</b>, changing a condition by modifying a host, PE, operator, job, etc, such that the violated constraint is satisfied. That is, the user action describes an operation that when performed results in a change to a condition or constraint <b>255</b> that once met or removed, enables the conditional candidate host to become an unconditional candidate host. In one embodiment, the user action changes a characteristic of the conditional candidate host such as modifying a tag characteristic of the conditional host, disabling host load protection and modifying other attributes that affect the runtime characteristics of the host.
In one embodiment, the user action is transmitted to the user of the stream application who may perform or instruct the scheduler <b>134</b> to perform the action, thereby changing the associated conditional candidate host to an unconditional candidate host. In one embodiment, each constraint violation of the conditional candidate host may correspond to one user action that may be performed to remove the violation, however, the invention is not limited to a one-to-one relationship.
For Child Node <b>1</b>, the unconditional candidate hosts include Host B and Host D and the conditional candidate hosts include Host A and C. The user action associated with conditional Host A that would change Host A into an unconditional candidate host is adding the tag “red” to Host A. Alternatively, the user action could be eliminating the constraint <b>255</b> that requires a red tag or modifying the constraint <b>255</b> such that it requires the same tag that is currently associated with Host A. The user action associated with conditional Host C requires canceling Job <b>1</b> to change Host C to an unconditional candidate host. For example, this user action may be based on an exclusive hostpool constraint that disallows Host C to be used by more than one job. Satisfying this constraint by stopping Job <b>1</b> (assuming it is the only other job using Host C) qualifies Host C to become an unconditional candidate host.
Child node <b>2</b> may have different constraints than child node <b>1</b> or have a different candidate set returned from lower levels of the constraint tree <b>600</b>. As shown, Host A is a conditional host for Child Node <b>1</b> but an unconditional host for Child Node <b>2</b>. Because the tree structure <b>705</b>, and thus the constraints, may be different for levels below the respective child nodes<sub>1-3</sub>, the candidate host set may also be different for each node at a particular level. For example, if the child nodes<sub>1-3 </sub>are operators <b>240</b> (i.e., Level C) and the lower level comprises hostpools <b>327</b> (i.e., Level D), the tag associated with Child Node <b>1</b>'s hostpool may be blue but the tag associated Child Node <b>2</b>'s hostpool may satisfy the constraint. Accordingly, the Host A is returned to Child Node <b>1</b> as a conditional candidate host but is an unconditional candidate host for Child Node <b>2</b>.
Host B is not a conditional or unconditional candidate host of Child Node <b>3</b>. Thus, there is no user action that could change Host B into an unconditional candidate host. In one embodiment, the scheduler <b>134</b> is unable to remove or modify certain constraints <b>255</b> or characteristics of the stream application elements. Accordingly, if a host <b>130</b> does not satisfy such a constraint <b>255</b>, the host <b>130</b> cannot be a conditional or unconditional candidate host. For example, a non-modifiable constraint may be a constraint <b>255</b> that is part of the compiled code comprising the stream application. To modify or remove these constraints <b>255</b> the source code of the stream application may have to be modified. Such constraints <b>255</b> include ex-locate, co-locate, indexing the hostpool, and the like.
In contrast, other user actions may not modify the source code. For example, a user may be able to select particular constraints <b>255</b> that are ignored when allocated PEs <b>235</b> to hosts <b>130</b>—e.g., an overloading constraint for placing too many PEs on a particular host. Moreover, any condition that can be changed such as changing or adding a tag to a host, restarting a compute node, or cancelling a job do not change the source code of the streaming application. Thus, in this embodiment, the scheduler <b>134</b> may be configured to not consider actions that require the user to change source code and only propose user actions such as changing a condition or ignoring a particular constraint. In this case, if a constraint cannot be satisfied by a viable user action, then a host that fails this constraint could not be placed in the conditional candidate host set.
In contrast, a constraint <b>255</b> that may be modified, removed, or added are constraints <b>255</b> that define the runtime characteristics of the stream application such as the performance of the hosts. Such constraints include hostpool tag constraints, overloaded constraints, exclusive hostpool constraints, and the like. These constraints may be modified without changing the source code of the stream application. In one embodiment, the constraints that may be modified, removed, or added are constraints <b>255</b> associated with a hostpool <b>327</b>. Similarly, characteristics of the hostpools <b>327</b> and hosts <b>130</b> may also be altered without requiring changes to the underlying source code.
In one embodiment, the scheduler <b>134</b> may record the user actions necessary to add a new host to the unconditional candidate host set. For example, the system administrator could add the new host to the computer infrastructure <b>100</b>. As shown by the bottom row of Table <b>710</b>, the listed user actions detail the actions necessary to enable the new host to become an unconditional candidate host.
The scheduler <b>134</b> may evaluate the constraints <b>255</b> associated with the child node level against the combined conditional and unconditional candidate set from lower levels and pass the modified candidate set to the parent node. This result is shown in the right-most column of table <b>710</b>. Specifically, the column illustrates how a node in the constraint tree <b>600</b> determines a candidate set when receiving a candidate set from multiple nodes in a lower level of the constraint tree <b>600</b>. For example, the scheduler <b>134</b> may evaluate the candidate host set from each of the child nodes<sub>1-3 </sub>to determine if there is an intersection between the candidate sets. As shown, performing an intersect function yields one unconditional candidate host—Host D. This means that Host D meets all the constraints <b>255</b> associated with all three child nodes<sub>1-3 </sub>as well as the constraints in any related lower-level nodes. Performing an intersection on the child nodes<sub>1-3 </sub>also yields the conditional candidate host set as well as the user actions needed for the conditional candidate hosts to become an unconditional candidate hosts. For example, Host A becomes an unconditional candidate host of the parent node if red and blue tags are added to the host <b>130</b>. The red tag is added to satisfy the constraint <b>255</b> associated with Child Node <b>1</b> and the blue tag is added to satisfy the constraint <b>255</b> associated with Child Node <b>3</b>.
Host D is the only unconditional candidate host for the parent node. That is, because Host D is an unconditional candidate of all the child nodes<sub>1-3</sub>, it is also an unconditional candidate host for the parent node. Host A, C, and the new host are conditional candidate host that require one or more user actions to become unconditional candidate hosts. Host B cannot be a candidate host for the parent node—e.g., Host B violates a constraint <b>255</b> that the scheduler <b>134</b> is unable to modify or remove.
<figref idrefs="DRAWINGS">FIG. 8</figref> is a flow diagram illustrating the process of selecting user actions associated with conditional candidate hosts, according to one embodiment of the invention. Specifically, <figref idrefs="DRAWINGS">FIG. 8</figref> describes in more detail block <b>530</b> of <figref idrefs="DRAWINGS">FIG. 5</figref> which reports failure when the scheduler <b>134</b> is unable to allocate all of the PEs <b>235</b>. As mentioned previously, the scheduler <b>134</b> reports a failure if there is no candidate host—i.e., an unconditional candidate host. However, at block <b>805</b>, the scheduler <b>134</b> may use the process shown in <figref idrefs="DRAWINGS">FIGS. 7A-B</figref> to identify one or more conditional candidate hosts of a selected PE <b>235</b>.
At block <b>810</b>, the scheduler <b>134</b> determines whether it has identified at least one conditional candidate host. If not, at block <b>815</b>, the scheduler <b>134</b> may transmit for display a failure message that does not include conditional candidate hosts or a message that indicates that there is no unconditional or conditional candidate hosts for the PE <b>235</b>.
If there is at least one conditional candidate host, at block <b>820</b>, the scheduler <b>134</b> may transmit for display a message that shows conditional candidate hosts as well as one or more user actions that may be performed to change the conditional candidate host to an unconditional candidate host. The user may perform the user action or instruct the scheduler <b>134</b> to perform the action. For example, at block <b>825</b>, the scheduler <b>134</b> may change a characteristic of the conditional candidate host or remove the constraint that the conditional candidate host violated. Additionally or alternatively, the user may perform the user action herself such as resetting the conditional candidate host. In one embodiment, if the user chooses not to perform a user action, the scheduler <b>134</b> may fail to allocate each of the PEs <b>235</b> and the stream application would not execute.
Once the user action is performed, at block <b>830</b>, the scheduler <b>134</b> may update the conditions and/or constraints that were changed by the user action. The process <b>800</b> may then return to block <b>505</b> of <figref idrefs="DRAWINGS">FIG. 5</figref> to determine a candidate host for a different selected PE <b>235</b>.
<figref idrefs="DRAWINGS">FIG. 9</figref> is a flow diagram illustrating the process of selecting user actions associated with conditional candidate hosts, according to one embodiment of the invention. Specifically, <figref idrefs="DRAWINGS">FIG. 9</figref> describes in more detail block <b>515</b> of <figref idrefs="DRAWINGS">FIG. 5</figref> which allocates the PEs <b>235</b> to a candidate host. In one embodiment, a user may wish to allocate a PE <b>235</b> to a conditional candidate host rather than an unconditional candidate host. Accordingly, at block <b>905</b>, the scheduler <b>134</b> may use the process shown in <figref idrefs="DRAWINGS">FIGS. 7A-B</figref> to identify one or more conditional candidate hosts of a selected PE <b>235</b>.
At block <b>910</b>, the scheduler <b>134</b> may transmit for display a list of conditional candidate hosts with their associated user actions. Additionally, the list may include the unconditional candidate hosts. As an example, the displayed list may appear like the right-most column of Table <b>710</b> of <figref idrefs="DRAWINGS">FIG. 7</figref>. The user is then able to identify the unconditional Host D as well as the conditional Hosts A, C and the new host. The user may evaluate this information and determine if the unconditional candidate host is the best location for the PE <b>235</b>. For example, the user may be a system administrator that knows that Host D is undergoing maintenance or will be used heavily in a future job. Accordingly, the graphic may include a selectable button or text that instructs the scheduler <b>134</b> to perform the user action or actions associated with one or more of the conditional candidate host. If at block <b>915</b> the user performs a user action or instructs the scheduler <b>134</b> to perform the action, then at block <b>920</b> the constraints <b>255</b> are updated to illustrate that the associated conditional candidate host is now an unconditional candidate host. In this manner, the user is able to select a conditional candidate host even when an unconditional candidate host is identified.
In one embodiment, the scheduler <b>134</b> may automatically allocate the selected PE <b>235</b> to that new unconditional candidate host. At block <b>925</b>, the process <b>900</b> may return to block <b>520</b> of <figref idrefs="DRAWINGS">FIG. 5</figref>. However, if the user does not choose to perform a user action, at block <b>930</b> the scheduler <b>134</b> may automatically allocate the selected PE <b>235</b> to one of the already identified unconditional candidate hosts.
Although <figref idrefs="DRAWINGS">FIGS. 8 and 9</figref> were discussed as displaying conditional candidate hosts for each selected PE <b>235</b>, in one embodiment the scheduler <b>134</b> may wait until it has attempted to allocate all the PEs <b>235</b> in the stream application. The scheduler <b>134</b> may display a list for each PE <b>235</b> containing the unconditional and conditional candidate hosts, if any. Further, the scheduler <b>134</b> may automatically allocate a PE <b>235</b> to an unconditional candidate host and flag any PEs <b>235</b> that did not have at least one unconditional candidate host. This may enable the user to quickly identify the unallocated PEs to perform a user action that would then permit the PE to be allocated to a new unconditional candidate host. Alternatively, the scheduler <b>134</b> may only display conditional candidate hosts for PEs that do not have at least one unconditional candidate host.
Moreover, the scheduler <b>134</b> may prioritize conditional candidate hosts for display. For example, conditional candidate hosts may be ranked according to the number or type of conditions associated with them—e.g., a conditional candidate host with two needed user actions may be prioritized higher than a host with three user actions. The scheduler may further filter conditional candidate hosts such that only conditional candidate hosts with less than a predetermined threshold number of user actions or constraint violations are displayed.
Conclusion
The present embodiments establish a stream application that uses small chunks of executable code configured to process data tuples flowing into a processing element. A scheduler allocates the processing elements to individual compute nodes or hosts for execution. However, the stream application may assign various constraints that stipulate which hosts are suitable for a particular processing element. If a host meets the constraints, it may be categorized as an unconditional candidate host. In addition, the scheduler may also track conditional candidate hosts that would be suitable for the processing element if a certain user action is performed—e.g., modifying a constraint, removing a constraint, modifying a stream application element (e.g., a processing element, operator, hostpool, job, or host), and the like. The list of conditional candidate hosts may then be displayed to the user who can choose to perform the one or more actions to change the conditional candidate host to an unconditional candidate host for the processing element.
The flowchart and block diagrams in the Figures illustrate the architecture, functionality, and operation of possible implementations of systems, methods and computer program products according to various embodiments of the present invention. In this regard, each block in the flowchart or block diagrams may represent a module, segment, or portion of code, which comprises one or more executable instructions for implementing the specified logical function(s). It should also be noted that, in some alternative implementations, the functions noted in the block may occur out of the order noted in the figures. For example, two blocks shown in succession may, in fact, be executed substantially concurrently, or the blocks may sometimes be executed in the reverse order, depending upon the functionality involved. It will also be noted that each block of the block diagrams and/or flowchart illustration, and combinations of blocks in the block diagrams and/or flowchart illustration, can be implemented by special purpose hardware-based systems that perform the specified functions or acts, or combinations of special purpose hardware and computer instructions.
While the foregoing is directed to embodiments of the present invention, other and further embodiments of the invention may be devised without departing from the basic scope thereof, and the scope thereof is determined by the claims that follow.
Contents4
11 sheets
Sheet 1 Sheet 2 Sheet 3 Sheet 4 Sheet 5 Sheet 6 Sheet 7 Sheet 8 Sheet 9 Sheet 10 Sheet 11
Every citation, both waysCites: the store holds 34 of 35
| Document | Relation | Office | Cited during |
|---|---|---|---|
| US10797943B2 | Cited by | United States of America | Applicant |
| US10554782B2 | Cited by | United States of America | Applicant |
| US11075798B2 | Cited by | United States of America | Applicant |
| US9563484B2 | Cited by | United States of America | Applicant |
| US2015067694A1 | Cited by | United States of America | Pre-grant |
| US10567544B2 | Cited by | United States of America | Applicant |
| US10904077B2 | Cited by | United States of America | Applicant |
| US9250964B2 | Cited by | United States of America | Search report |
| EP0936547A2 | Cites | European Patent Office (EPO) | Applicant |
| CN1744593A | Cites | China | Applicant |
| US2004039815A1 | Cites | United States of America | Applicant |
| US2005177600A1 | Cites | United States of America | Applicant |
| US2005198244A1 | Cites | United States of America | Applicant |
| US2007021998A1 | Cites | United States of America | Applicant |
| US2008127191A1 | Cites | United States of America | Applicant |
| US2008134193A1 | Cites | United States of America | Applicant |
| US2008174598A1 | Cites | United States of America | Applicant |
| US2008225326A1 | Cites | United States of America | Search report |
| US2009132541A1 | Cites | United States of America | Applicant |
| US2009183168A1 | Cites | United States of America | Search report |
| US2009239480A1 | Cites | United States of America | Search report |
| US2009241123A1 | Cites | United States of America | Search report |
| US2009300326A1 | Cites | United States of America | Search report |
| US2009300615A1 | Cites | United States of America | Search report |
| US2009300623A1 | Cites | United States of America | Applicant |
| US2009313614A1 | Cites | United States of America | Applicant |
| US2010292980A1 | Cites | United States of America | Applicant |
| US2010325621A1 | Cites | United States of America | Search report |
| US2011055519A1 | Cites | United States of America | Applicant |
| US2011246549A1 | Cites | United States of America | Search report |
| US2012096468A1 | Cites | United States of America | Search report |
| US2012110550A1 | Cites | United States of America | Search report |
| US6097886A | Cites | United States of America | Applicant |
| US6393473B1 | Cites | United States of America | Search report |
| US7493406B2 | Cites | United States of America | Applicant |
| US7539976B1 | Cites | United States of America | Search report |
| US7613848B2 | Cites | United States of America | Applicant |
| US7657855B1 | Cites | United States of America | Applicant |
| US7676552B2 | Cites | United States of America | Applicant |
| US7676788B1 | Cites | United States of America | Search report |
| US7899861B2 | Cites | United States of America | Applicant |
| US8225319B2 | Cites | United States of America | Applicant |
| Bugra Gedik et al., "SPADE: The System S Declarative Stream Processing Engine", ACM, SIGMOD '08, Jun. 9-12, 2008, Vancouver, BC, Canada, sections 2, 4.1, 5.3, pp. 1123-1134. | Non-patent | – | Applicant |
| Kun-Lung Wu et al., "Challenges and Experience in Prototyping a Multi-Modal Stream Analytic and Monitoring Application on System S", VLDB '07, Sep. 23-28, 2007, Vienna, Austria, pp. 1185-1196. | Non-patent | – | Applicant |
| International Search Report and Written Opinion of the ISA dated Apr. 25, 2013-International Application No. PCT/IB2012/056823. | Non-patent | – | Applicant |
| International Search Report and Written Opinion of the ISA dated Apr. 25, 2013-International Application No. PCT/IB2012/056818. | Non-patent | – | Applicant |
| Madden, Samuel et al., Fjording the Stream: An Architecture for Queries over Streaming Sensor Data, Proceedings of the 18th International Conference on Data Engineering, 2002, p. 555, IEEE, Piscataway, New Jersey, United States. | Non-patent | – | Applicant |
| Liew, C.S. et al., Towards Optimising Distributed Data Streaming Graphs using Parallel Streams, Proceedings of the 19th ACM International Symposium on High Performance Distributed Computing, 2010, pp. 725-736, ACM, New York, New York, United States. | Non-patent | – | Applicant |
| Lakshmanan, Geetika T. et al., Biologically-Inspired Distributed Middleware Management for Stream Processing Systems, Proceedings of the 9th ACM/IFIP/USENIX International Conference on Middleware, 2008, pp. 223-242, Springer-Verlag New York, Inc., New York, New York, United States. | Non-patent | – | Applicant |
| IBM, IBM InfoSphere Streams V2.0 extends streaming analytics, simplifies development of streaming applications, and improves performance, Apr. 12, 2011, pp. 1-17, IBM Corporation, Armonk, New York, United States. | Non-patent | – | Applicant |
| Bouillet, Eric et al., Scalable, Real-time Map-Matching using IBM's System S, Proceedings of the 2010 Eleventh International Conference on Mobile Data Management, 2010, pp. 249-257, IEEE Computer Society, Washington, DC, United States. | Non-patent | – | Applicant |
| Lakshmanan, G. T. et al., Placement Strategies for Internet-Scale Data Stream Systems, Nov. 11, 2008, p. 50, vol. 12, Issue 6, IEEE Computer Society, Washington, DC, United States. | Non-patent | – | Applicant |
| Le, Jia-Jin et al., DDSQP: A WSRF-Based Distributed Data Stream Query System, Lecture Notes in Computer Science, 2005, pp. 833-844, vol. 3758, Springer, New York, New York, United States. | Non-patent | – | Applicant |
| Ahmad, Yanif et al., Network Awareness in Internet-Scale Stream Processing, IEEE Data Engineering Bulletin, Mar. 2005, pp. 63-69, vol. 28, No. 1, IEEE, Piscataway, New Jersey, United States. | Non-patent | – | Applicant |
| Gedik, Bugra, High-performance Event Stream Processing Infrastructures and Applications with System S, IBM Research, 2009, IBM Corporation, Armonk, New York, United States. | Non-patent | – | Applicant |
| Zhang, Xiaolan J. et al., Workload Characterization for Operator-Based Distributed Stream Processing Applications, Proceedings of the Fourth ACM International Conference on Distributed Event-Based Systems, 2010, pp. 235-247, ACM, New York, New York, United States. | Non-patent | – | Applicant |
| Amini, Lisa et al., Adaptive Control of Extreme-scale Stream Processing Systems [Abstract], Proceedings of the 26th IEEE International Conference on Distributed Computing Systems, 2006, IEEE Computer Society, Washington, DC, United States, . | Non-patent | – | Applicant |
| Guha, Radha et al., An efficient placement algorithm for run-time reconfigurable embedded system, Proceedings of the 19th IASTED International Conference on Parallel and Distributed Computing and Systems, 2007, ACTA Press, Anaheim, California, United States, . | Non-patent | – | Applicant |
| U.S. Patent Application entitled "Dynamically Configurable Placement Engine", filed Dec. 1, 2011. | Non-patent | – | Applicant |
| U.S. Patent Application entitled "Agile Hostpool Allocator", filed Dec. 1, 2011. | Non-patent | – | Applicant |
| Wolf, Joel et al., Soda: An Optimizing Scheduler for Large-Scale Stream-Based Distributed Computer Systems, Proceeings of the 9th ACM/IFIP/USENIX International Conference on Middleware, 2008, ACM, New York, United States. | Non-patent | – | Applicant |
4 members in 1 office
Priority claims2
| Document | Office | Kind | Date |
|---|---|---|---|
| 201113308881 | United States of America | A | |
| US201113308881 | – | – | – |
Members4
| Document | Office | Kind | |
|---|---|---|---|
| US2013144931A1 | United States of America | A1 | |
| US2013145032A1 | United States of America | A1 | |
| US8849888B2 | United States of America | B2 | |
| US8874751B2This record | United States of America | B2 |
58 transactions on the USPTO file
Allowed after 1 non-final rejection and 1 RCE.
- Non-final rejections
- 1
- Final rejections
- 0
- RCEs
- 1
- Appeals
- 0
Over time
Point at a mark for the transactionTransactions
| Event | Code | |
|---|---|---|
| Expire PatentEXP. | EXP. | |
| Maintenance Fee Reminder MailedREM. | REM. | |
| Recordation of Patent Grant MailedPGM/ | PGM/ | |
| Patent Issue Date Used in PTA CalculationAllowedPTAC | PTAC | |
| Issue Notification MailedAllowedWPIR | WPIR | |
| Dispatch to FDCD1935 | D1935 | |
| Dispatch to FDCD1935 | D1935 | |
| Application Is Considered Ready for IssuePILS | PILS | |
| Issue Fee Payment VerifiedN084 | N084 | |
| Issue Fee Payment ReceivedIFEE | IFEE | |
| Mail Notice of AllowanceAllowedMN/=. | MN/=. | |
| Notice of Allowance Data Verification CompletedAllowedN/=. | N/=. | |
| Reasons for AllowanceEX.R | EX.R | |
| Information Disclosure Statement consideredIDSC | IDSC | |
| Disposal for a RCE / CPA / R129AbandonedABN9 | ABN9 | |
| Electronic Information Disclosure StatementEIDS. | EIDS. | |
| Request for Continued Examination (RCE)RCEX | RCEX | |
| Information Disclosure Statement (IDS) FiledWIDS | WIDS | |
| Workflow - Request for RCE - BeginBRCE | BRCE | |
| Date Forwarded to ExaminerFWDX | FWDX | |
| Mail Notice of AllowanceAllowedMN/=. | MN/=. | |
| Mail Reasons for AllowanceMEX.R | MEX.R | |
| Notice of Allowance Data Verification CompletedAllowedN/=. | N/=. | |
| Reasons for AllowanceEX.R | EX.R | |
| Supplemental ResponseSA.. | SA.. | |
| Paralegal or electronic terminal disclaimer approvedP574 | P574 | |
| Terminal Disclaimer FiledDIST | DIST | |
| Mail Interview Summary - Applicant Initiated - TelephonicMEXAT | MEXAT | |
| Mail Miscellaneous Communication to ApplicantMM327 | MM327 | |
| Miscellaneous Incoming LetterLET. | LET. | |
| Miscellaneous Communication to Applicant - No Action CountM327 | M327 | |
| Interview Summary- Applicant InitiatedEXIA | EXIA | |
| Interview Summary - Applicant Initiated - TelephonicEXAT | EXAT | |
| Mail Interview Summary - Applicant Initiated - TelephonicMEXAT | MEXAT | |
| Interview Summary- Applicant InitiatedEXIA | EXIA | |
| Interview Summary - Applicant Initiated - TelephonicEXAT | EXAT | |
| Date Forwarded to ExaminerFWDX | FWDX | |
| Response after Non-Final ActionA... | A... | |
| Mail Non-Final RejectionNon-final rejectionMCTNF | MCTNF | |
| Non-Final RejectionNon-final rejectionCTNF | CTNF | |
| PG-Pub Issue NotificationPG-ISSUE | PG-ISSUE | |
| Information Disclosure Statement consideredIDSC | IDSC | |
| Electronic Information Disclosure StatementEIDS. | EIDS. | |
| Information Disclosure Statement (IDS) FiledWIDS | WIDS | |
| Case Docketed to Examiner in GAUDOCK | DOCK | |
| Preliminary AmendmentA.PE | A.PE | |
| Information Disclosure Statement consideredIDSC | IDSC | |
| Electronic Information Disclosure StatementEIDS. | EIDS. | |
| Information Disclosure Statement (IDS) FiledWIDS | WIDS | |
| Case Docketed to Examiner in GAUDOCK | DOCK | |
| Application Dispatched from OIPEOIPE | OIPE | |
| Application Is Now CompleteCOMP | COMP | |
| Sent to Classification ContractorPGPC | PGPC | |
| Filing ReceiptFLRCPT.O | FLRCPT.O | |
| Cleared by OIPE CSRL194 | L194 | |
| Applicants have given acceptable permission for participating foreignAPPERMS | APPERMS | |
| IFW Scan & PACR Auto Security ReviewSCAN | SCAN | |
| Initial Exam Team nnIEXX | IEXX |
5 legal events, as the office reported them to INPADOC
Over the term
Point at a mark for the eventEvents
| Event | Code | |
|---|---|---|
| Lapsed due to failure to pay maintenance feeLapsedFP | FP | |
| Lapse for failure to pay maintenance feesLapsedPATENT EXPIRED FOR FAILURE TO PAY MAINTENANCE FEES (ORIGINAL EVENT CODE: EXP.); ENTITY STATUS OF PATENT OWNER: LARGE ENTITYLAPS | LAPS | |
| Information on status: patent discontinuationPATENT EXPIRED DUE TO NONPAYMENT OF MAINTENANCE FEES UNDER 37 CFR 1.362STCH | STCH | |
| Fee payment procedureMAINTENANCE FEE REMINDER MAILED (ORIGINAL EVENT CODE: REM.)FEPP | FEPP | |
| AssignmentAS | AS |
Numbers
- Publication
- 08874751
- Publication, DOCDB
- 8874751
- Publication, EPODOC
- US8874751
- Application
- 13308881
- Application, DOCDB
- 201113308881
- Application, EPODOC
- US201113308881
Titles
- English
- Candidate set solver with user advice
Patent term adjustment
- A delay
- +151 daysthe office missed an examination deadline
- Applicant delay
- −79 days
- Net adjustment
- 72 days
Classification
- CPC, 2
- H04L67/1001
- H04L67/10
- IPC, 1
- G06F15 173
- USPC, 6
- 709226000
- 709203000
- 709223000
- 718001000
- 718104000
- 718106000