Upgrade-safe extensible software-as-a-service platform
Techniques for operating an upgrade-safe, extensible software-as-a-service (SaaS) platform are disclosed, including: receiving, by the SaaS platform, an application programming interface (API) request associated with a tenant of the SaaS platform; determining, by the SaaS platform, that the API request includes a tenant-specific type that extends a built-in type of the SaaS platform; responsive to determining that the API request includes the tenant-specific type: executing, by the SaaS platform, a mapper stack including at least (a) a first type-mapper associated with the built-in type of the SaaS platform and (b) a second type-mapper associated with the tenant-specific type; transmitting, by the SaaS platform, output of the mapper stack in response to the API request.
1 . One or more non-transitory computer-readable media storing instructions which, when executed by one or more hardware processors, cause performance of operations comprising:
receiving, by a software-as-a-service (SaaS) platform, an application programming interface (API) request associated with a tenant of the SaaS platform;
determining, by the SaaS platform, that the API request comprises a first object type, wherein the first object type is a tenant-specific type that extends a built-in type of the SaaS platform;
responsive to determining that the API request comprises the first object type: executing, by the SaaS platform, a first mapper stack comprising at least (a) a first type-mapper associated with the built-in type of the SaaS platform and (b) a second type-mapper associated with the tenant-specific type that extends the built-in type;
controlling, by the SaaS platform, execution of the first mapper stack using a plurality of signals emitted respectively by each mapper in the first mapper stack;
determining, by the SaaS platform, that a signal in the plurality of signals is transitively reachable;
responsive to determining that the signal is transitively reachable: refraining, by the SaaS platform, from waking a process that is waiting for completion of the signal;
transmitting, by the SaaS platform, output of the first mapper stack in response to the API request.
2 . The one or more non-transitory computer-readable media of claim 1 , wherein the first mapper stack further comprises an augmentation type-mapper comprising one or more tenant-specific augmentations of the first type-mapper.
3 . The one or more non-transitory computer-readable media of claim 1 , wherein executing the first mapper stack comprises:
executing a first operation of the first type-mapper;
transferring control to the second type-mapper;
after transferring control to the second type-mapper: executing a second operation of the second type-mapper;
returning control to the first type-mapper;
after returning control to the first type-mapper: executing a third operation of the first type-mapper.
4 . The one or more non-transitory computer-readable media of claim 1 , the operations further comprising:
decomposing, by the SaaS platform, a payload associated with the API request to determine that the payload comprises a plurality of object types, wherein the first object type is one of the plurality of object types;
determining, by the SaaS platform, that the API request comprises a second object type in the plurality of object types;
responsive to determining that the API request comprises the second object type: executing, by the SaaS platform, a second mapper stack;
transmitting, by the SaaS platform, output of the second mapper stack in response to the API request.
5 . The one or more non-transitory computer-readable media of claim 1 , wherein determining that the signal is transitively reachable comprises:
generating, by the SaaS platform, a matrix that indicates which signals are reachable for each task in a plurality of potential tasks;
determining, based at least on the matrix, that the signal is reachable for an active task.
6 . The one or more non-transitory computer-readable media of claim 1 , wherein determining that the signal is transitively reachable is performed relative to a task scope that is a subset of a root task scope managed by the SaaS platform.
7 . A system comprising:
one or more hardware processors;
one or more non-transitory computer-readable media; and
program instructions stored on the one or more non-transitory computer-readable media which, when executed by the one or more hardware processors, cause the system to perform operations comprising:
receiving, by a software-as-a-service (SaaS) platform, an application programming interface (API) request associated with a tenant of the SaaS platform;
determining, by the SaaS platform, that the API request comprises a first object type, wherein the first object type is a tenant-specific type that extends a built-in type of the SaaS platform;
responsive to determining that the API request comprises the first object type: executing, by the SaaS platform, a first mapper stack comprising at least (a) a first type-mapper associated with the built-in type of the SaaS platform and (b) a second type-mapper associated with the tenant-specific type that extends the built-in type;
controlling, by the SaaS platform, execution of the first mapper stack using a plurality of signals emitted respectively by each mapper in the first mapper stack;
determining, by the SaaS platform, that a signal in the plurality of signals is transitively reachable;
responsive to determining that the signal is transitively reachable: refraining, by the SaaS platform, from waking a process that is waiting for completion of the signal;
transmitting, by the SaaS platform, output of the first mapper stack in response to the API request.
8 . The system of claim 7 , wherein the first mapper stack further comprises an augmentation type-mapper comprising one or more tenant-specific augmentations of the first type-mapper.
9 . The system of claim 7 , wherein executing the first mapper stack comprises:
executing a first operation of the first type-mapper;
transferring control to the second type-mapper;
after transferring control to the second type-mapper: executing a second operation of the second type-mapper;
returning control to the first type-mapper;
after returning control to the first type-mapper: executing a third operation of the first type-mapper.
10 . The system of claim 7 , the operations further comprising:
decomposing, by the SaaS platform, a payload associated with the API request to determine that the payload comprises a plurality of object types, wherein the first object type is one of the plurality of object types;
determining, by the SaaS platform, that the API request comprises a second object type in the plurality of object types;
responsive to determining that the API request comprises the second object type: executing, by the SaaS platform, a second mapper stack;
transmitting, by the SaaS platform, output of the second mapper stack in response to the API request.
11 . The system of claim 7 , wherein determining that the signal is transitively reachable comprises:
generating, by the SaaS platform, a matrix that indicates which signals are reachable for each task in a plurality of potential tasks;
determining, based at least on the matrix, that the signal is reachable for an active task.
12 . The system of claim 7 , wherein determining that the signal is transitively reachable is performed relative to a task scope that is a subset of a root task scope managed by the SaaS platform.
13 . A method comprising:
receiving, by a software-as-a-service (SaaS) platform, an application programming interface (API) request associated with a tenant of the SaaS platform;
determining, by the SaaS platform, that the API request comprises a first object type, wherein the first object type is a tenant-specific type that extends a built-in type of the SaaS platform;
responsive to determining that the API request comprises the first object type: executing, by the SaaS platform, a first mapper stack comprising at least (a) a first type-mapper associated with the built-in type of the SaaS platform and (b) a second type-mapper associated with the tenant-specific type that extends the built-in type;
controlling, by the SaaS platform, execution of the first mapper stack using a plurality of signals emitted respectively by each mapper in the first mapper stack;
determining, by the SaaS platform, that a signal in the plurality of signals is transitively reachable;
responsive to determining that the signal is transitively reachable: refraining, by the SaaS platform, from waking a process that is waiting for completion of the signal;
transmitting, by the SaaS platform, output of the first mapper stack in response to the API request;
wherein the method is performed by at least one device including a hardware processor.
14 . The method of claim 13 , wherein executing the first mapper stack comprises:
executing a first operation of the first type-mapper;
transferring control to the second type-mapper;
after transferring control to the second type-mapper: executing a second operation of the second type-mapper;
returning control to the first type-mapper;
after returning control to the first type-mapper: executing a third operation of the first type-mapper.
15 . The method of claim 13 , further comprising:
decomposing, by the SaaS platform, a payload associated with the API request to determine that the payload comprises a plurality of object types, wherein the first object type is one of the plurality of object types;
determining, by the SaaS platform, that the API request comprises a second object type in the plurality of object types;
responsive to determining that the API request comprises the second object type: executing, by the SaaS platform, a second mapper stack;
transmitting, by the SaaS platform, output of the second mapper stack in response to the API request.
16 . The method of claim 13 , wherein determining that the signal is transitively reachable comprises:
generating, by the SaaS platform, a matrix that indicates which signals are reachable for each task in a plurality of potential tasks;
determining, based at least on the matrix, that the signal is reachable for an active task.
17 . The method of claim 13 , wherein determining that the signal is transitively reachable is performed relative to a task scope that is a subset of a root task scope managed by the SaaS platform.