Igniters,

Our current ServiceGrid implementation lacks several important features,
one of which is ability to upgrade Service without downtime.

I've created ticket to add this feature:
https://issues.apache.org/jira/browse/IGNITE-6069.

To implement it, the following problems must be solved:
- currently we can store only one BinaryMetadata instance for given
classname - if you change Service class implementation and then try to
deploy it, you might get an exception like
"org.apache.ignite.binary.BinaryObjectException: Binary type has different
field types". It can be solved by making (className, version) unique
metadata identifier. We can use serialVersionUuid as version.
- ServiceProxy must be aware of actual version and know if service is
currently being upgraded. If user tries to execute any method during
upgrade, proxy should implicitly wait until new version is ready. We
already have similar logic in IgniteCacheProxyImpl.
- To effectively and conveniently migrate service state to newer version,
we should add method to Service interface that will be executed before
start if older version was present. To keep API compatible, I suggest to
introduce interface UpgradableService (extends Service).

Any critique and suggestions are welcome.

-- 
Best regards,
Ilya

Reply via email to