- Add the current layout version (MLV) to the OM Ratis request. If there is no layout version present, we can default to '0'.
- Implement Generic factory which stores different instances of Type 'T' sharded by a key & version. A single key can be associated with different versions of 'T'. This is to support a typical use case during upgrade to have multiple versions of a class / method / object and chose them based on current layout version at runtime. Before finalizing, an older version is typically needed, and after finalize, a newer version is needed.
- Using the generic factory, we scan all the different OM "write" requests and associate them with versions.
- Layout feature code refactoring. Added more comments and tests.